Merge remote-tracking branch 'origin/dev' into sub_laptop_8

- 충돌 시험 셋(717-4 · 719-2 · hopyo build) = 740-1 펼침 단언 + 742-1 저장 수량 단언 합침
- 740-2 일위대가표 풍선 줄의 body(742-1 이 걷은 휘발 셈 몸) → cur

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-02 21:47:51 +09:00
co-authored by Claude Opus 5.5
66 changed files with 2663 additions and 244 deletions
@@ -308,6 +308,16 @@ class Builder:
bid = self.precombo(whole, ref, doc, copies, depth + 1, use)
return {"kind": "daega", "key": bid, "name": doc.get("이름") or name,
"unit": doc.get("단위") or "", "qty": each} # fmt: skip
fz = one.get("굳힌")
if isinstance(fz, dict) and fz.get("키"): # 덮개 줄(740-1) = 굳힌 줄 단가산출 대가
bid = self.sangeun(
whole, {"층": "project", "키": fz["키"]}, _sk_of(one), copies, depth + 1
)
if bid is None:
return {"kind": "blank", "name": name, "qty": each, "why": "덮개 줄을 못 셈"}
block = self.blocks[bid] # 블록 = 결과단위(배) 몫 · 수량 = 수량 ÷ 배
return {"kind": "daega", "key": bid, "name": block["name"], "unit": block["unit"],
"qty": each} # fmt: skip
code = str(one.get("로직") or "")
if one.get("승격") is not True: # 단가산출 줄 = 산근
if not sg.is_money(whole, code):
@@ -453,6 +463,36 @@ class Builder:
return self.precombo(whole, ref, doc, copies, 1)
def _sk_of(one: dict) -> dict[str, Any]:
"""굳힌 덮개 줄(740-1) → 굳힌 SK 꼴(`Builder.sangeun` 이 읽음) — 고름 · 자재표시 = 굳힌 줄 cid ·
`원본.덮개` = 그 줄 패치 덮개(원값 = M02 에서 고친 줄의 품셈 값)."""
from M02_MasterTemplete import M02_Item_Sangeun as item_sk
from M02_MasterTemplete import M02_Sangeun_Doc as sd
fz = one["굳힌"]
ids = sd.line_ids(fz["줄"])
keyed = {
k: {ids[int(n)]: v for n, v in (fz.get(k) or {}).items() if int(n) < len(ids)}
for k in ("고름", "자재표시")
}
return {
"종류": "단가산출",
"키": fz["키"],
"이름": one.get("별칭") or fz["줄"].get("이름") or "",
"단위": "",
"바탕": {"로직": fz["키"]},
"입력값": fz.get("입력값") or {},
**({"켜쌓기율": fz["켜쌓기율"]} if fz.get("켜쌓기율") is not None else {}),
**keyed,
"덮개": {},
"더한줄": [],
"뺀줄": [],
item_sk.ROW: fz["줄"],
"원본": {"덮개": (one.get("패치") or {}).get("덮개") or {}},
"정체": list(fz.get("정체") or []),
}
def _Loose(whole: Any, read: Any) -> Any:
"""B09 SK 속 펼침(723-4) — 사전조합 안 줄 수량 없음 = 0 값묶음(엔진 차례 · 수량만 씀 ·
그 줄 값 = B09 사전조합 블록 · 이 공사에서 입력) · 그 밖 까닭은 그대로."""