- 검색어로 찾은 줄 · 고름으로 바꾼 줄 · 대표 줄 모두 — 글 = 자재품목 이름(지역 포함) · 참조 = 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
39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""재료 줄 요소조각 — 잡힌 자재품목 이름 · 참조(PLAN 8-5). `master_text._item_pieces` 가 부름."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
|
|
import master_formula as mf
|
|
import master_pick as mp
|
|
|
|
_ERRORS = (mf.FormulaError, KeyError, TypeError)
|
|
|
|
|
|
def picked(item: dict, line: dict | None, index: int, env: dict, master) -> dict | None:
|
|
"""재료 줄이 잡은 자재품목 줄 — 계산한 줄의 출처(`MT000018.거래가격`) 먼저 ·
|
|
빈 줄이면 고름 · 검색어 · 대표로 다시 찾음. 못 찾으면 None."""
|
|
got = str((line or {}).get("출처") or "")[:8]
|
|
try:
|
|
if got[:2] == "MT":
|
|
return master.get(got)
|
|
cond = {k: mf.fill(v, env) if isinstance(v, str) else v for k, v in item["요소"].items()}
|
|
key = (mp.CHOSEN.get() or {}).get(str(index))
|
|
if not key and cond.get("검색어"):
|
|
key = mp.pick(master, cond, env, item.get("단위"))
|
|
key = key or cond.get("대표")
|
|
return master.get(str(key)) if key and str(key)[:2] == "MT" else None
|
|
except _ERRORS:
|
|
return None
|
|
|
|
|
|
def piece(item: dict, line: dict | None, index: int, env: dict, master) -> dict | None:
|
|
"""요소조각 — 글 = 품목 이름(지역 포함) · 참조 = 테이블 MT · 그 키. 못 찾으면 None."""
|
|
row = picked(item, line, index, env, master)
|
|
if row is None:
|
|
return None
|
|
key = str(row["키"])
|
|
name = re.sub(r"\s+", " ", str(row.get("이름") or "")).strip()
|
|
return {"kind": "요소", "글": name, "참조": {"테이블": key[:2], "키": key}}
|