fix(740-1): 747-1 겹침 맞춤 — SK 를 일위대가 줄로 펼칠 때 바탕 재료 별도계상 빈 칸 = 직접계산 적어 둠
- 까닭: 747-1 뒤 SK 셈은 바탕 재료 빈 칸 = 직접계산 · 일위대가 줄(덮개 줄 line=True)은 별도계상 기본 → 펼친 줄이 재료비를 잃음(합판거푸집 GC000211 SK 를 일위대가에 넣으면 금액 줄어듦)
- Library_Flat.sk_line: 바탕 재료 줄마다 자재표시 {별도계상: 직접계산} + 고른 두 칸 그대로
- 지킴 시험: 740-1 에 747 겹침(덮개 있음 · 없음 두 갈래 전후 금액 같음 · 고치기 전 실패 확인)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -302,6 +302,7 @@ def compose(under: dict, over: dict, whole: Any) -> dict:
|
||||
def sk_line(y: dict, one: dict, whole: Any, tag: dict) -> dict:
|
||||
"""펼친 SK → 일위대가 로직 줄 하나(+ 패치) — 옛 참조 줄 `one` 의 별칭 · 메모 · 수량 · 패치
|
||||
이어받음."""
|
||||
from M02_MasterTemplete import M02_Labor_Doc as labor
|
||||
from M02_MasterTemplete import M02_Labor_Patch as patch
|
||||
from M02_MasterTemplete import M02_Sangeun_Calc as calc
|
||||
|
||||
@@ -328,6 +329,11 @@ def sk_line(y: dict, one: dict, whole: Any, tag: dict) -> dict:
|
||||
for name in ("고름", "자재표시"):
|
||||
if got := {at[c]: v for c, v in (y.get(name) or {}).items() if c in at}:
|
||||
line[name] = got
|
||||
shown = line.get("자재표시") or {}
|
||||
for n, item in enumerate(row.get("호표") or []): # 747-1 SK 재료 빈 칸 = 직접계산 → 적어 둠
|
||||
if item.get("종류") == "재료":
|
||||
shown[str(n)] = {"별도계상": "직접계산", **labor.marks(shown.get(str(n)))}
|
||||
line |= {"자재표시": shown} if shown else {}
|
||||
if y.get("켜쌓기율") is not None:
|
||||
line["켜쌓기율"] = y["켜쌓기율"]
|
||||
return {**line, **({patch.FIELD: body} if body else {}), "본뜬": tag}
|
||||
|
||||
@@ -372,3 +372,22 @@ def test_B09_SC_덮개_줄_대가_금액_M02_같음(world, tmp_path):
|
||||
block = _b09(root, cover_qty)[1][daega["libs"][made["폴더"]]]
|
||||
assert block["blank"] == 0
|
||||
assert block["sum"] == pytest.approx(m02, abs=5) # 끝수(내림)만 다름
|
||||
|
||||
|
||||
def test_747_SK_재료_직접계산_일위대가에_넣어도_같은_금액(world):
|
||||
"""747-1 SK 바탕 재료 = 직접계산 · 일위대가 줄 기본 = 별도계상 → 펼친 줄에 적어 둠."""
|
||||
me = world["personal"]
|
||||
form = "GC000211" # 합판거푸집 — 재료 줄 있음
|
||||
plain = _make(me, "sangeun", 이름="거푸집", 바탕={"로직": form})
|
||||
cover = {"material:합판(내수 12㎜)#0": {"qty": 2}}
|
||||
covered = _make(me, "sangeun", 이름="거푸집 고침", 바탕={"로직": form}, 덮개=cover)
|
||||
for sk in (plain, covered):
|
||||
lines = [{"참조": {**MINE, "키": sk}}]
|
||||
old = _raw(me, "precombo", 이름="옛", 담은로직=lines)
|
||||
before = _sc_value(me, old)
|
||||
host = _make(me, "precombo", 이름="새", 담은로직=lines)
|
||||
line = _read(me, "precombo", host)["담은로직"][0]
|
||||
assert line["자재표시"] and all(
|
||||
v["별도계상"] == "직접계산" for v in line["자재표시"].values()
|
||||
)
|
||||
assert _sc_value(me, host) == pytest.approx(before, rel=1e-9)
|
||||
|
||||
Reference in New Issue
Block a user