Files
Aislo/resources/master_data/scripts/master_text_item.py
T
eomsangdonandClaude Sonnet 5 4c58783e0f 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
2026-09-24 22:11:38 +09:00

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}}