feat(master_data): 로직마다 시험 계산용 기본 입력 · check_master 계산전부
- 로직 줄에 「시험입력」 칸 — 시험 계산 전용(정본 계산은 화면 값만 씀) · 규격·직경은 원문 표 첫 값 · 자재지역은 울진(모래 줄 없는 넷은 포항) - check_master 에 `시험입력()` · `calc_all()` · 「계산전부」 모드 - 일괄 시험 계산 통과 1,219 → 1,270 · 멈춤 135 → 84(모두 데이터 결손 — 관리자 값 65 · 품셈재료 규격 미지정 13 · 지역 줄 없음 1 · 고르기 조합 없음 5) - 시험 둘 추가(test_masterdata_check.py) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
@@ -554,6 +554,36 @@ def show(result: dict) -> str:
|
||||
return "\n".join(rows)
|
||||
|
||||
|
||||
def 시험입력(row: dict) -> dict:
|
||||
"""일괄 시험 계산용 입력 한 벌 — 고르기 첫 값 · 범위 위끝 · 줄의 「시험입력」 이 이김.
|
||||
시험 계산 전용 — 정본 계산은 화면이 준 값만 씀."""
|
||||
given = {}
|
||||
for spec in row.get("입력", []):
|
||||
if "고르기" in spec:
|
||||
given[spec["이름"]] = spec["고르기"][0]
|
||||
elif "범위" in spec:
|
||||
given[spec["이름"]] = spec["범위"][1]
|
||||
else:
|
||||
given[spec["이름"]] = Decimal(1)
|
||||
given.update(row.get("시험입력") or {})
|
||||
return given
|
||||
|
||||
|
||||
def calc_all(files: dict[str, dict], whole: mf.Master) -> tuple[int, list[str]]:
|
||||
"""로직 전부를 시험 입력으로 돌림 — (통과 수, 멈춘 줄 목록)."""
|
||||
passed, stuck = 0, []
|
||||
for data in files.values():
|
||||
if data.get("그룹") != "로직":
|
||||
continue
|
||||
for row in data.get("줄", []):
|
||||
try:
|
||||
mf.run(whole, str(row["키"]), 시험입력(row))
|
||||
passed += 1
|
||||
except mf.FormulaError as err:
|
||||
stuck.append(f"{row['키']} {row.get('이름')} · {err}")
|
||||
return passed, stuck
|
||||
|
||||
|
||||
def _value(text: str):
|
||||
try:
|
||||
return Decimal(text)
|
||||
@@ -567,6 +597,13 @@ def main(argv: list[str]) -> int:
|
||||
given = dict(arg.split("=", 1) for arg in argv[2:])
|
||||
print(show(mf.run(master(), argv[1], {k: _value(v) for k, v in given.items()})))
|
||||
return 0
|
||||
if mode == "계산전부":
|
||||
files, whole = load(), master()
|
||||
passed, stuck = calc_all(files, whole)
|
||||
print(f"(계산) 통과 {passed} · 멈춤 {len(stuck)}")
|
||||
for line in stuck:
|
||||
print(" " + line)
|
||||
return 0
|
||||
names = argv[1:] or None
|
||||
files, whole = load(names), master()
|
||||
report = {}
|
||||
|
||||
Reference in New Issue
Block a user