feat(m01): /text 재료 줄 요소조각 = 잡힌 품목 이름 · MT 참조 (PLAN 8-5)

- 검색어로 찾은 줄 · 고름으로 바꾼 줄 · 대표 줄 모두 — 글 = 자재품목 이름(지역 포함) · 참조 = MT · 그 키
- 새 master_text_item.py(700줄 안 넘기려 나눔) · 기계 · 인력 요소조각 그대로 · 금액 변화 0
- 시험 2개 추가(결속선 GF000159 · 고름)

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 22:11:38 +09:00
co-authored by Claude Sonnet 5
parent 3f7d2b386f
commit 4c58783e0f
3 changed files with 73 additions and 7 deletions
+11 -7
View File
@@ -21,6 +21,7 @@ from decimal import ROUND_HALF_UP, Decimal
import master_copy as mc
import master_formula as mf
import master_text_item as mti
PLACES = Decimal("0.0001") # 화면 `formatNumber` 와 같음(소수 넷째 자리까지)
PRICE_TAIL = {"인력": "노임", "기계": "손료"} # 단가 자리의 이름 꼬리(그 밖은 「단가」)
@@ -545,9 +546,9 @@ def lines(files: dict, key: str, given: dict) -> dict:
if result is not None:
shown = result["줄"]
env["줄"] = {r["이름"]: r["금액"] for r in shown if r["이름"]}
for item, line, label in zip(items, shown, labels):
for n, (item, line, label) in enumerate(zip(items, shown, labels)):
조각 = _formula_pieces(item["수량"], env, master, name_of, alias_by_name)
요소 = _item_pieces(item, env, master)
요소 = _item_pieces(item, env, master, line, n)
for part, money in _shares(line):
split = part if len(line["비목"]) > 1 else None
one = {
@@ -565,14 +566,14 @@ def lines(files: dict, key: str, given: dict) -> dict:
끝수 = _cut_note(row)
계 = result["계"]
else:
for item, label in zip(items, labels):
for n, (item, label) in enumerate(zip(items, labels)):
parts = (
list(mf.COST_ITEMS)
if item.get("종류") == "로직" and "비목" not in item
else [item.get("비목")]
)
조각 = _formula_pieces(item["수량"], env, master, name_of, alias_by_name)
요소 = _item_pieces(item, env, master)
요소 = _item_pieces(item, env, master, None, n)
for part in parts:
if part not in mf.COST_ITEMS:
continue
@@ -628,13 +629,16 @@ def _arg_text(node, env: dict, master) -> str:
return fmt(value)
def _item_pieces(item: dict, env: dict, master) -> list[dict]:
def _item_pieces(
item: dict, env: dict, master, line: dict | None = None, index: int = 0
) -> list[dict]:
"""줄의 단가 자리(요소 · 로직 부르기) 조각 — PLAN 3-1 요소조각."""
ref = item.get("요소")
if item.get("종류") != "로직":
name = str(item.get("이름") or "")
if isinstance(ref, dict): # 재료 고르기 조건 — 품명만
return [{"kind": "요소", "글": name}]
if isinstance(ref, dict): # 재료 고르기 조건 — 잡힌 품목 이름 · 참조(고름 · 검색어 · 대표)
found = mti.piece(item, line, index, env, master)
return [found or {"kind": "요소", "글": name}]
piece = _elem_piece(master, ref, env)
return [{**piece, "글": name or piece["글"]}]
try: