diff --git a/resources/master_data/ref/_검증_식_해석기.md b/resources/master_data/ref/_검증_식_해석기.md new file mode 100644 index 00000000..c2014f06 --- /dev/null +++ b/resources/master_data/ref/_검증_식_해석기.md @@ -0,0 +1,37 @@ +# 3-3 식 해석기 검증 (sub2 작업 · 다른 창의 읽기 전용 검증) + +대상: `scripts/master_draft.py`(dev `be8868ca`) · `POST /api/m01/logic/draft`. 실 저장소는 안 건드림 — 임시 폴더에 정본 데이터를 복사해 그 위에서만 저장·계산. + +방법: `logic_draft(text, decided, head, save)` 를 견본 14개로 직접 부름(라우터와 같은 호출) · 저장된 로직은 `/calc` 로 손 계산과 대조 · 저장은 임시 폴더뿐이라 지우기·키대장 되돌리기 불필요. + +## 결과 — 어긋난 것 없음 + +① 정상 식(자재비) — 손 계산 216,805.6800 = 서버 계산 · `logic_new` 저장 200(= `check_saved` 통과) · 옮기기 규칙 셋 다 뜻대로: 마스터요소(보통인부) 하나가 호표 줄이 되고 나머지 인자(인부)가 수량 · 비목만 정한 변수(잡재료비)는 덧줄 · 나머지(품·넓이·인부)는 중간(쓰는 차례로 정렬). + +②③④⑤⑥⑦⑧⑨⑩⑪⑭ — 막혀야 할 것 전부 막힘, 문제 없이 통과한 것 없음: + +| 견본 | 넣은 것 | 막힌 갈래 · 말 | +|---|---|---| +| ② | 길이(m) + 넓이(㎡) | 단위 — 「+」 양쪽 단위가 다름 — m + ㎡ | +| ②-2 | 무게(kg) + 길이(m) | 단위 — 「+」 양쪽 단위가 다름 — kg + m | +| ③ | 가 = 나+1, 나 = 가*2 | 돌고돎 — 가 → 나 → 가 | +| ④ | 가를 두 줄에서 정의 | 두번정의 — 「가」 을 1줄에서 이미 정함 | +| ⑤ | 나를 정의만 하고 안 씀 | 안쓰임 — 「나」 을 어디서도 안 씀 | +| ⑥ | 결과 아닌 변수 다수(가·나 각각 한 줄) | 안쓰임 — 마지막 줄(나) 만 결과 · 가는 안쓰임으로 잡힘(아래 비고) | +| ⑦ | 「가 = 1 +」(연산자로 끝) | 못읽음 — 이름 없음(자리까지 정확) | +| ⑧ | 「가 = (1 + 2」(괄호 안 닫힘) | 못읽음 — 「)」 없음 | +| ⑨ | 「그냥숫자」(= 없음) | 못읽음 — 「이름 = 식」 이 아님 | +| ⑩ | 「가 =」(오른쪽 빔) | 못읽음 — 「가」 오른쪽이 빔 | +| ⑪ | 「노무비 = 1」(비목합 이름 재사용) | 이름 — 「노무비」 은 비목 합 이름 | +| ⑭ | 한 항에 마스터요소 둘(인부1*인부2) | 항 — 한 항에 마스터요소가 둘 | + +⑫ 무차원(퍼센트) 정상 통과 — 「100 * (1 + 증가율 / 100)」 걸리지 않음(비율은 단위 없음 처리 확인). +⑬ 돈 아닌 로직(결과단위 `㎡`) — 호표 없이 중간+결과 식으로 옮겨짐 · 손 계산 24 = 서버 계산 24. + +## 비고 — 「결과 변수가 둘」은 이 설계에서 애초에 못 만듦 + +요청받은 견본 중 "결과 변수가 둘"은 해석기 구조상 재현 불가 — `_scan()` 이 결과를 **항상 마지막 줄의 왼쪽 이름 하나**로 고정하기 때문에(옆 코드: `결과 = 성함[-1]["이름"]`), 결과가 두 개로 갈리는 입력 자체가 존재하지 않음. 대신 "결과가 아니면서 안 쓰이는 변수"(⑥, 가)가 그 자리를 메꿔 잡힘 — 결함 아님, 설계가 이미 그 경우를 없앤 것으로 확인. + +## 결론 + +옮기기 규칙(마스터요소 하나=호표, 비목만 정함=덧줄, 나머지=중간) · 검사(단위·돌고돎·중복정의·안쓰임·못읽음·비목합이름·항당마스터요소 하나) · 저장(`check_saved` 재사용 · `/calc` 일치) 모두 뜻대로 동작 — 이번 14개 견본에서 어긋난 동작 없음.