diff --git a/tools/stmate-test/PLAN.md b/tools/stmate-test/PLAN.md
index cd2a10b2a..03d158f9b 100644
--- a/tools/stmate-test/PLAN.md
+++ b/tools/stmate-test/PLAN.md
@@ -15,13 +15,15 @@
## 지킴 시험
+- `test_stmate_file_*.py` — 실무 STC 7건 무손실 왕복(손대지 않은 저장 = 원본 바이트) · 고친 칸만 바뀜 · 새 공사·복사등록·해당분 압축
+- `test_stmate_stage_*.py` — 설계변경(영덕·소광 변경 BOQ·엑셀 대조) · 계약 변환(울진 BOQ12 계약내역·총공사비 1원) · 기성·실행(앞뒤 맞춤만)
- `test_stmate_ilwi_eval.py` — 일위대가·중기 구성 재계산(원설계 5건 + 영덕 변경) 1원 · 연쇄 재계산(기초단가 → 원가계산서) 원설계 5건 전 단가·총공사비 그대로
- `test_stmate_smt_eval.py` — 단가산출근거(D코드) 재계산: 원설계 5건(위 4건 + 소광 원설계) 282개 1원 · 낙찰률 단가 7건 127개
- `test_stmate_kanjub_stc.py` — 실무 STC 7건 차수별(변경 2건은 당초·변경) 원가계산서 18항목(직접비 4 · 간접비 11 · 이윤감액 · 관급 · 총공사비) 1원 대조 · 직접비는 내역 저장 단가 기준
## 진행률
-- 합계: 전체 246 · 구현 56 · 부분 77 · 없음 113 → 진행률 38.4%((56 + 77×0.5) / 246) · 구현만 세면 22.8%
+- 합계: 전체 246 · 구현 66 · 부분 90 · 없음 90 → 진행률 45.1%((66 + 90×0.5) / 246) · 구현만 세면 26.8%
### G1 화면·메뉴 (구현 5 · 부분 23 · 없음 26) — 30.6%
@@ -248,44 +250,44 @@
- [ ] F5-35 금액 한글 표기(AMTTOHAN) — 24번 §2.4 · 현재: 없음
- [ ] F5-36 SET_REP 데이터 기반 열·폭·제목 — 20번 §3 · 현재: 부분(양식표 표시만, 출력에 미적용)
-### G6 설계변경·계약·실행·기성 (구현 3 · 부분 9 · 없음 24) — 20.8%
+### G6 설계변경·계약·실행·기성 (구현 13 · 부분 22 · 없음 1) — 66.7%
- [ ] F6-01 차수 4벌(원설계+3차변경) 칸 관리 — 08번 §2 · 24번 §7 · 현재: 부분(계산 = 차수별 수량·단가·원가계산서 · 저장은 2·3 칸 덮어씀 view_prj_boq 560)
-- [ ] F6-02 통합형 BOQ11+BOQ12에서 BOQ12 현재안 — 16번 §4.5 · 현재: 없음(늘 BOQ11 server.py 465)
+- [ ] F6-02 통합형 BOQ11+BOQ12에서 BOQ12 현재안 — 16번 §4.5 · 현재: 부분(울진 BOQ12 = 계약내역(STMATE 착공내역서) 판명 · contract_calc 로 BOQ11 에서 1원 재현)
- [ ] F6-03 분리형 변경 STC 생성·차수 인계 — 16번 §4.6 · 현재: 없음
-- [ ] F6-04 변경 수량 입력 — 설계변경 · 현재: 부분(공종별 입력, 1 단위 칸 app.js 536)
-- [ ] F6-05 변경 단가·신규 공종·삭제 항목(0 유지) — 08번 §2 · 현재: 없음
+- [x] F6-04 변경 수량 입력 — 설계변경 · 현재: 구현(change_calc · 영덕·소광 변경 BOQ11 1·2차수 수량·단가·금액 일치)
+- [x] F6-05 변경 단가·신규 공종·삭제 항목(0 유지) — 08번 §2 · 현재: 구현(change_calc 신규·삭제(0 유지) · 변경 2건 대조)
- [x] F6-06 변경 직접비 당초·변경·증감 — 19번 §6.5 · 현재: 구현(calc.js 661~670)
- [x] F6-07 간접비 변경 모드: 재계산 — 08번 §2 · 현재: 구현(calc.js 357)
- [x] F6-08 간접비 변경 모드: 당초액 유지(건강·장기요양·연금·퇴직공제) — 19번 §6 · 35번 §4 · 현재: 구현(D_ 표시 항목 = 저장 금액 고정 · 변경 2건 대조)
-- [ ] F6-09 간접비 변경 방법 A(비율)·방법 B(증감×율) — 08번 §2 · 현재: 부분(안전관리비 I_ANJUNAUTO=2 방법 A 대조 · 다른 항목·고를 화면 없음)
-- [ ] F6-10 보험료 변경 계산 3모드 — wM_KanJub cBx_CH_BO · 현재: 없음
+- [x] F6-09 간접비 변경 방법 A(비율)·방법 B(증감×율) — 08번 §2 · 현재: 구현(scr_stage 재계산·당초 유지·방법A·방법B 선택 · 안전관리비 방법A 실물 대조)
+- [ ] F6-10 보험료 변경 계산 3모드 — wM_KanJub cBx_CH_BO · 현재: 부분(보험료 변경 3모드 선택 화면 · 실물 대조 없음)
- [ ] F6-11 2차·3차 변경 계산 — wM_KanJub cBx_Chasu · 현재: 부분(차수 1~4 계산 길 · 2차수 2건 대조 · 3·4차 표본 없음)
-- [ ] F6-12 원가계산서 당초/변경 대비·변경분만 인쇄 — PM_Won_A_C · Cmbx_PORD1_H · 현재: 부분(화면 증감 표, 인쇄 양식 없음)
-- [ ] F6-13 설계변경내역서(0643·0644) — CHANGE_STR · 현재: 없음(0603과 같은 표 view_kanjub_prt 531)
-- [ ] F6-14 변경내역서(변경율)(0645) — CHANGE_AMT · 현재: 없음
-- [ ] F6-15 설계변경증감대비표(0648)·금액대비표 — CHANGE_AMT · 현재: 부분(화면 표만, 보고서·엑셀 없음)
-- [ ] F6-16 변경총괄·굴착·시도 변경내역서(0661~0666) — CHANGE_* · 현재: 없음
-- [ ] F6-17 계약 변환 비목별 단가적용율(노·재·경) — wM_Mk_Cont · 현재: 부분(행별 버림, 머리줄은 재료율 하나 view_kanjub_prt 274)
-- [ ] F6-18 계약 변환 옵션(기초단가·일위/산근 생성·동일코드·노무비율·비과세) — 27번 §2.2 · 현재: 없음
-- [ ] F6-19 적용율 0% → W코드 공내역 — 27번 §2.2 · 현재: 없음
-- [ ] F6-20 적용제외 공정 선택(레벨 9단계) — 27번 §2.3 · 현재: 없음(문구만)
-- [ ] F6-21 예상적용율 찾기(목표금액 역산)·미리계산 — 27번 §2.3 · 현재: 없음(문구만)
-- [ ] F6-22 설계 → 계약자료 변환등록(당초/변경·레벨) — wM_Conv_Mode · 현재: 없음
+- [x] F6-12 원가계산서 당초/변경 대비·변경분만 인쇄 — PM_Won_A_C · Cmbx_PORD1_H · 현재: 구현(당초/변경 대비 · 변경분만 인쇄 · 영덕 엑셀 공사원가계산서 일치)
+- [x] F6-13 설계변경내역서(0643·0644) — CHANGE_STR · 현재: 구현(설계변경내역서 · 영덕 엑셀 당초·변경 줄 전부 일치)
+- [ ] F6-14 변경내역서(변경율)(0645) — CHANGE_AMT · 현재: 부분(변경율 내역서 · 대조 표본 없음)
+- [x] F6-15 설계변경증감대비표(0648)·금액대비표 — CHANGE_AMT · 현재: 구현(증감대비표·금액대비표 · 영덕 엑셀 행 차례·금액 일치 · 인쇄·엑셀)
+- [ ] F6-16 변경총괄·굴착·시도 변경내역서(0661~0666) — CHANGE_* · 현재: 부분(변경총괄 = 영덕 엑셀 총괄내역서 일치 · 굴착·시도 양식 없음)
+- [x] F6-17 계약 변환 비목별 단가적용율(노·재·경) — wM_Mk_Cont · 현재: 구현(contract_calc 노·재·경 적용율 버림 · 울진 BOQ12 계약내역 1원)
+- [ ] F6-18 계약 변환 옵션(기초단가·일위/산근 생성·동일코드·노무비율·비과세) — 27번 §2.2 · 현재: 부분(옵션 6개 중 동일코드 개별생성·0% 공내역 반영)
+- [x] F6-19 적용율 0% → W코드 공내역 — 27번 §2.2 · 현재: 구현(0% 공내역 W코드 · 울진 대조)
+- [ ] F6-20 적용제외 공정 선택(레벨 9단계) — 27번 §2.3 · 현재: 부분(적용제외 공정 선택 · 머리 단위 실물 대조 없음)
+- [x] F6-21 예상적용율 찾기(목표금액 역산)·미리계산 — 27번 §2.3 · 현재: 구현(목표금액 → 적용율 87.745% 역산 · 미리계산)
+- [ ] F6-22 설계 → 계약자료 변환등록(당초/변경·레벨) — wM_Conv_Mode · 현재: 부분(변환등록 단추 = /api/file/copy-register)
- [ ] F6-23 낙찰율 열(NAGCD)·계약단가 저장 — 26번 §4 · 현재: 부분(산근 재계산 시 2칸 원단가 → 1칸 낙찰 단가 · 저장은 MAMT3 87.745% 일괄 덮어씀)
-- [ ] F6-24 계약 원가계산(계약 제잡비) — 27번 · 현재: 없음(COSTW3=총공사비×재료율 view_prj_boq 633)
-- [ ] F6-25 계약·실행내역서(0623·0624) — PM_Nae_Cont · 현재: 없음(0603 복사)
-- [ ] F6-26 실행예산 작업(실행단가·실행수량) — wBoq 실행예산작업 · 현재: 없음(92% 고정 view_kanjub_prt 317)
-- [ ] F6-27 중기 실행단가 계산(절사 6택·차액 보정 순서) — wM_Boq_ExecX · 현재: 없음
-- [ ] F6-28 실행예산서 Ⅰ·Ⅱ(0673·0674) — SET_REP · 현재: 없음
-- [ ] F6-29 기성 회차 전회·금회·누계·비율 — wM_KanJub_K rGrd_Jab · 현재: 부분(전 공종 같은 비율 30/65% app.js 44)
-- [ ] F6-30 공종별 기성수량·잔량 입력 — 27번 §3.2 · 현재: 없음
-- [ ] F6-31 기성 제잡비(금회직접×계약제잡비율) — 27번 §3.1 · 현재: 없음(도급액×누계율 표시만)
-- [ ] F6-32 기성 부가세 4택·절사·이윤 직접입력 — 27번 §3.3 · 현재: 없음
-- [ ] F6-33 기성 집계수준 필터(소계~총합계) — wM_KanJub_K rd_Filter · 현재: 없음
-- [ ] F6-34 기성부분총괄·기성내역서·사정·기성율(0632~0635) — Prn_Jab · 현재: 없음(0603 복사)
-- [ ] F6-35 기성검사조서(을·병)·기성부분수량조서(0636~0638) — Prn_Jab · 현재: 없음
-- [ ] F6-36 준공조서(을·병)(0646·0647) — SET_REP · 현재: 없음
+- [x] F6-24 계약 원가계산(계약 제잡비) — 27번 · 현재: 구현(계약 원가계산 · 울진 총공사비 333,315,000원 일치)
+- [ ] F6-25 계약·실행내역서(0623·0624) — PM_Nae_Cont · 현재: 부분(계약·실행내역서 화면 · 실물 표본 없음)
+- [ ] F6-26 실행예산 작업(실행단가·실행수량) — wBoq 실행예산작업 · 현재: 부분(exec_calc 실행단가·수량 · 표본 없음)
+- [ ] F6-27 중기 실행단가 계산(절사 6택·차액 보정 순서) — wM_Boq_ExecX · 현재: 부분(중기 실행단가 절사 6택 · 표본 없음)
+- [ ] F6-28 실행예산서 Ⅰ·Ⅱ(0673·0674) — SET_REP · 현재: 부분(실행예산서 화면 · 표본 없음)
+- [ ] F6-29 기성 회차 전회·금회·누계·비율 — wM_KanJub_K rGrd_Jab · 현재: 부분(progress_calc 회차 전회·금회·누계 · 표본 없음)
+- [ ] F6-30 공종별 기성수량·잔량 입력 — 27번 §3.2 · 현재: 부분(공종별 기성수량·잔량 · 표본 없음)
+- [ ] F6-31 기성 제잡비(금회직접×계약제잡비율) — 27번 §3.1 · 현재: 부분(기성 제잡비 = 금회직접 × 계약 제잡비율 · 표본 없음)
+- [ ] F6-32 기성 부가세 4택·절사·이윤 직접입력 — 27번 §3.3 · 현재: 부분(기성 부가세 4택·절사·이윤 직접입력 · 표본 없음)
+- [ ] F6-33 기성 집계수준 필터(소계~총합계) — wM_KanJub_K rd_Filter · 현재: 부분(집계수준 필터 · 표본 없음)
+- [ ] F6-34 기성부분총괄·기성내역서·사정·기성율(0632~0635) — Prn_Jab · 현재: 부분(기성 서류 화면 · 표본 없음)
+- [ ] F6-35 기성검사조서(을·병)·기성부분수량조서(0636~0638) — Prn_Jab · 현재: 부분(기성검사조서·수량조서 · 표본 없음)
+- [ ] F6-36 준공조서(을·병)(0646·0647) — SET_REP · 현재: 부분(준공조서 · 표본 없음)
---
diff --git a/tools/stmate-test/index.html b/tools/stmate-test/index.html
index a60321d9a..5b1c9023c 100644
--- a/tools/stmate-test/index.html
+++ b/tools/stmate-test/index.html
@@ -48,6 +48,7 @@
+
diff --git a/tools/stmate-test/kanjub_calc.js b/tools/stmate-test/kanjub_calc.js
index 143d5289f..e95b5dd64 100644
--- a/tools/stmate-test/kanjub_calc.js
+++ b/tools/stmate-test/kanjub_calc.js
@@ -505,10 +505,5 @@ const StmateKanjubFactory = (h) => {
return calcKanjub;
};
-if (typeof window !== "undefined") {
- window.STMATE_KANJUB_FACTORY = StmateKanjubFactory;
- // 화면 — 부속 모듈을 calc.js 보다 먼저 싣음(index.html 은 kanjub_calc.js 만 부름)
- if (!window.STMATE_KANJUB_PARTS && document.readyState === "loading")
- document.write('');
-}
+if (typeof window !== "undefined") window.STMATE_KANJUB_FACTORY = StmateKanjubFactory;
if (typeof module !== "undefined" && module.exports) module.exports = StmateKanjubFactory;