fix(M01): 표 찾기 실패는 그 찾기를 쓰는 줄만 비움 · 까닭 글 날글 없앰
- NoRow · Blank — 표에 맞는 줄이 없으면 중간값을 거쳐 쓰는 줄까지 단가·금액 null + 까닭 · 소계·계는 빈 줄 빼고 더함 - 까닭 「표 QC001869(1-2-3)에 시공구분 기계시공 · … 인 줄이 없음」 · 재료 고르기 후보 없음도 같은 규칙 - 시험 한 개 더 (test_m01_auto.py) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
@@ -16,7 +16,15 @@ LINKED = "MP" # 품셈재료 테이블ID
|
||||
MARKET = "MT" # 자재품목 테이블ID
|
||||
PRICED = "MO" # 유가전력 테이블ID — 값 한 칸
|
||||
SLOTS = ("물가자료", "유통물가", "물가정보", "거래가격", "관급") # 자재품목 값 열
|
||||
PICK_KEYS = ("구분", "상세구분", "이름", "규격", "대표", "지역", "계약종별") # 재료 고르기 조건 칸 (`_틀.md` 7장)
|
||||
PICK_KEYS = (
|
||||
"구분",
|
||||
"상세구분",
|
||||
"이름",
|
||||
"규격",
|
||||
"대표",
|
||||
"지역",
|
||||
"계약종별",
|
||||
) # 재료 고르기 조건 칸 (`_틀.md` 7장)
|
||||
REGION = "자재지역" # 로직 입력 — 「지역」 은 유가 고르기가 씀
|
||||
TARIFF = "전력 계약종별" # 로직 입력 — 품셈·계약예규에 계약종별 규정 없음
|
||||
_UNITS = {"ea": "개", "ton": "톤", "t": "톤", "l": "ℓ", "리터": "ℓ", "set": "조", "세트": "조"}
|
||||
@@ -98,7 +106,9 @@ def _region(master: mf.Master, label_ref, cond: dict, env: dict, unit) -> list[s
|
||||
if not hits:
|
||||
raise mf.FormulaError(f"「{master.label(label_ref)}」 지역 값 없음 — {env.get(REGION)}")
|
||||
if len({s for s, _ in hits}) > 1:
|
||||
raise mf.FormulaError(f"「{master.label(label_ref)}」 후보 여럿 — 규격 선택 필요 ({len(hits)}줄)")
|
||||
raise mf.FormulaError(
|
||||
f"「{master.label(label_ref)}」 후보 여럿 — 규격 선택 필요 ({len(hits)}줄)"
|
||||
)
|
||||
return [key for _, key in hits]
|
||||
|
||||
|
||||
@@ -155,7 +165,8 @@ def pick(master: mf.Master, cond: dict, env: dict, unit: str | None = None) -> s
|
||||
keys = candidates(master, cond, env, unit)
|
||||
keys = [k for k in keys if _offers(master, k)] or keys
|
||||
if not keys:
|
||||
raise mf.FormulaError(f"재료 고르기 후보 없음 — {cond}")
|
||||
what = " · ".join(f"{k} {mf._plain(v)}" for k, v in cond.items())
|
||||
raise mf.FormulaError(f"재료 고르기 후보 없음 — {what}")
|
||||
return keys[0]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user