knowledge(master_data): 시험입력 65개 검증 - 오류 1건·계산전부 갈래 재분류

로직 시험입력 65개 표 대조 - 확정 오류 GC000724(규격 65->첫값 6) 1건 ·
범위형 표 첫 구간 위끝 사용 11건(기능은 맞음) 기록 · 시험입력이 계산전부 전용이고
정본 계산에 안 새는 것 코드로 확인 · 계산전부 재실행(통과 1272 멈춤 82)을
sub1 보고(84)와 갈래별 대조 - 관리자값 미확보·지역 갈래 수가 다름, 모래(MP000004)
시장가 부재·시험입력 커버리지 빠짐 등 원인 적음.
This commit is contained in:
2026-09-20 23:25:10 +09:00
parent abf6b5a036
commit 282a169572
@@ -0,0 +1,55 @@
# 「시험입력」 칸 검증 (읽기 전용) — 틀린 것만
대상: sub1 커밋(로직 65줄에 시험 계산 전용 「시험입력」 칸 추가). 아래는 확인 중 어긋난 것만 적음 — 65개 중 맞는 것은 안 적음.
## ① 값 확인 — 표에 있는지 · 원문 첫 값인지
**확정 오류 1건**
- `GC000724` 스테인리스 강관 용접접합(원문번호 1-3-1) — 시험입력 `규격=65.0`.
원문(건설품셈 기계설비 1-3-1) 표 첫 값은 **ø6**(둘째 값이 65) — 표 `QC001403`에도 6이 첫 줄. 65는 표에 있는 값이라 계산은 안 멈추지만 「원문 절 첫 값」 규칙에 어긋남 — `6.0`으로 고칠 것.
**범위형 표에서 "첫 구간의 아래끝" 대신 "위끝"을 씀(기능은 맞으나 문자 그대로 첫 값은 아님) — 11건**
규격·직경 입력이 걸리는 소요량표가 `[아래끝,위끝]` 범위 줄(예: `QC001418` 규격 80~150)인 경우, 시험입력이 첫 구간 안에는 드나 아래끝이 아니라 위끝을 씀:
- `GC000742`(규격=150, 원문 첫 구간 80~150 — 아래끝 80) · `GC000769`(25, 구간 15~25) · `GC000772`(25, 구간 20~25) · `GC000773`(25, 구간 15~25) · `GC000774`(25, 구간 15~25) · `GC000775`·`GC000776`·`GC000778`(15, 구간 13~15) · `GF000226`·`GF000227`·`GF000228`·`GF000229`·`GF000230`(직경=60, 구간 40~60)
값 자체는 첫 구간을 정확히 집어 계산은 맞게 도나, "표 첫 값"을 문자 그대로 읽으면 아래끝이 맞음 — 일관성만 다름(급하지 않음).
**돌 종류를 고르기 첫 값이 아닌 걸로 override — 근거 있음, 오류 아님**
- `GF000219` 돌쌓기 메쌓기 — `돌="깬잡석"`(고르기 목록 3번째, 첫 값은 "견치돌"). 그 줄 비고에 "원문에 없는 조합: 뒷길이=25·돌=견치돌…" 이 적혀 있어 — 기본값 조합이 애초 표(QF000421)에 없어서 일부러 돌린 것으로 보임. 오류로 안 침.
## ② 시험입력 칸이 정본 계산에 새는지 — 코드로 확인, 안 샘
`시험입력` 문자열을 코드 전체에서 찾은 결과 `resources/master_data/scripts/check_master.py``시험입력()` 함수(576~588행)와 `calc_all()`(계산전부 모드 전용, 599행)에서만 읽음. `master_formula.run()` · M01 API(`M01_MasterData_Store.py`) · 화면 계산 경로 어디에도 이 칸을 읽는 코드가 없음 — 정본 계산(사람이 화면에서 값을 넣는 경로)에는 안 샘. 이미 `resources/tester/test_masterdata_check.py::test_시험입력이_기본값을_이김` 이 이 동작을 못박아 둠.
## ③ 계산전부 남은 멈춤 84 — sub1 보고와 갈래가 다름
지금 다시 돌린 `check_master.py 계산전부` 결과: **통과 1272 · 멈춤 82**(sub1 보고 84와 다름 — 2건 차이).
갈래별 재분류(에러 문구 기준):
| 갈래 | 지금 실수 | sub1 보고 | 같은지 |
|---|---|---|---|
| 관리자 값 미확보(`값 없음 — 관리자가 채울 값`) | 52 | 65 | **다름** |
| 품셈재료 규격 미지정(`후보 여럿 — 규격 선택 필요`) | 13 | 13 | 같음 |
| 재료 고르기 후보 없음(`후보 없음 — {조건}`) | 6 | (보고에 없는 갈래) | **다름** |
| 지역(`지역 값 없음`) | 6 | 1 | **다름** |
| 표 조합(`맞는 줄 0개`) | 5 | 5 | 같음 |
| 합계 | 82 | 84 | **다름** |
- 「품셈재료 규격 미지정」·「표 조합」 두 갈래는 사람 수(13·5)까지 정확히 맞음.
- 「관리자 값 미확보」는 sub1 보고보다 13건 적음 — sub1이 「재료 고르기 후보 없음」(사람 6개, 조건 자체가 자재품목에 아예 없는 경우)을 같은 갈래로 합쳐 세었을 가능성(52+6=58, 그래도 65에는 7 모자람 — 완전히는 안 맞음).
- 「지역」은 sub1 보고(1건)보다 5건 많음 — 원인을 뜯어보니:
- `GF000183`(자재지역=울진로 시험입력 들어 있음)은 **모래(MP000004) 자체가 시장가(재료_자재품목.json)에 없음**(전국 통틀어 "모래"가 이름에 든 줄이 "모래적사장(FRP)" 저장조 1건뿐 — 실제 모래 자재 없음) — 지역을 울진으로 두든 포항으로 두든 이 재료는 늘 멈춤. sub1 보고의 「지역 1」은 아마 이 줄을 가리킨 것으로 보임.
- `GC000933`·`GC000934`·`GC000938`·`GF000176` 4줄은 **애초 이번 65개 시험입력 패치에 안 들어 있음** — 자재지역 입력을 요구하는 로직인데 시험입력이 없어 기본값(고르기·범위 없는 입력의 시험 기본 1)이 지역 값으로 새어 들어가 `지역 값 없음 — 1` 로 멈춤. 패치 커버리지가 빠진 자리 — sub1 보고에 안 셈.
- 참고: `GC000211`·`GC000677`·`GC000685`(모래를 쓰지만 자재지역=포항 시험입력 있음)는 그 모래 수량식이 기본 입력에서 0으로 떨어져 걸리지 않고 통과함 — 모래 데이터가 없다는 근본 문제는 이 세 줄에도 그대로 있으나 지금 표본 입력으로는 안 드러남.
- 레미콘(MP000001) 지역픽은 울진 후보 19개가 있어 지역 자체는 문제 없음 — 위 「후보 여럿」 갈래(규격 미지정 13건)에 걸리는 것이 레미콘 쪽 진짜 원인.
## 확인 범위
- ①은 65개 전수 확인(표 참조 자동 추출 + 원문 md 대조), 자재지역 계열은 연결된 재료·시장가 존재 여부까지 확인.
- ②는 코드 전수 grep + 기존 시험 1건 확인.
- ③은 지금 이 순간의 `계산전부` 재실행 결과와 sub1 커밋 메시지 문구를 비교 — sub1이 어떤 스크립트·표본으로 84를 셌는지 원문(스크립트)이 저장소에 없어 재현은 못함.