fix(m01): 표 조각 참조에 줄 = 엔진이 찾은 줄 차례 (PLAN 5장 6바퀴 서버)

- find 가 고른 줄의 차례(그 표 줄 배열 · 0부터)를 참조.줄 로 더함
- 줄에 없는 조건 칸은 맞음으로 보는 엔진 규칙을 화면이 흉내 내지 않게
- 시험: GC000010 크레인 줄 · GF000160 합판 줄 · 금액 변화 0

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
This commit is contained in:
2026-09-24 12:13:34 +09:00
co-authored by Claude Sonnet 5
parent 91f49f22d3
commit a9199550d9
2 changed files with 24 additions and 1 deletions
+2 -1
View File
@@ -209,7 +209,8 @@ def _alias_piece(mark: dict, env: dict, master, column: str | None) -> dict:
row = mf.find(table, conds, column)
tail = column.rpartition("_")[2] if column else ""
piece[""] = " · ".join([*_row_label(table, row, conds), *([tail] if tail else [])])
piece["참조"] = {"테이블": ref[:2], "": ref, "": conds, "": column}
at = next(i for i, one in enumerate(table[""]) if one is row) # find 가 고른 줄
piece["참조"] = {"테이블": ref[:2], "": ref, "": conds, "": column, "": at}
else:
piece["참조"] = {"테이블": ref[:2], "": ref}
except _CALC_ERRORS:
+22
View File
@@ -308,6 +308,28 @@ def test_조각_로직_부르는_줄_990개_세_비목에_다_걸치고_계산_
assert [g["소계"] for g in out["groups"]] == [None]
def test_표_조각_참조_줄은_엔진이_찾은_줄의_차례다() -> None:
"""GC000010 크레인 — 줄에 없는 조건 칸은 맞음이라 흉내 내면 틀림 · GF000160 합판도."""
files = store.cm.load(folder=REAL)
master = store.cm.master(REAL)
for key in ("GC000010", "GF000160"):
got = mt.lines(files, key, dict(store.cm.시험입력(master.logic(key))))
tables = [p for one in _all_lines(got) for p in one["조각"] if p["kind"] == ""]
assert tables and all("" in p["참조"] for p in tables), key
for p in tables:
rows = master.get(p["참조"][""])[""]
hit = rows[p["참조"][""]]
assert hit is mt.mf.find(master.get(p["참조"][""]), p["참조"][""], p["참조"][""])
got = mt.lines(files, "GC000010", dict(store.cm.시험입력(master.logic("GC000010"))))
pill = next(
p
for one in _all_lines(got)
for p in one["조각"]
if p["kind"] == "" and p["참조"][""] == "QC000031" and "크레인" in p[""]
)
assert master.get("QC000031")[""][pill["참조"][""]]["구분"] == "크레인"
def test_합판거푸집_표_조각_글은_줄마다_다르고_참조에_찾기_조건이_있다(client: TestClient) -> None:
"""PLAN 3-3 — 글 = 「찾은 줄 · 칸」 · 참조.행 = 찾기 조건 · 중간 값은 글에 이름."""
got, _ = _both(client, FORM)