Files

7.0 KiB
Raw Permalink Blame History

STMATE w 8.0 테스트 앱 계획서 및 검증 아카이브

이 문서는 tools/stmate-test/ 폴더 내 독립 웹앱의 개발 계획 및 검증 이력을 자체 보관·관리하는 문서입니다.

1. 개요 및 요구사항

  • 목적: 경쟁사 데스크톱 프로그램 STMATE(w 8.0, 경영정보(주))의 95% 이상 복제 수준 달성 및 독립 웹앱 구축
  • 작업 경로: tools/stmate-test/
  • 구동 서버: http://127.0.0.1:8095 (FastAPI + DBF/SMT/STC/JB_R 직결 엔진)
  • 외부 연동: 로그인 및 공용 DB 의존 없음, 실무 프로젝트 DBF/SMT/STC 100% 무손실 연동

2. 세부 개발 및 검증 항목

  • 화면 및 메뉴 체계 복제 (TWM_STMATE_START_8X)

    • 상단 5대 메뉴(Act_PrjList, Act_Init, Act_BoqEdit, Act_KanJub, Act_KanRate, Act_StageEdit, Act_Print)
    • 8버튼 메인 툴바 및 하단 순공사비·간접비·도급액·총공사비 집계바
    • 9개 메인 작업 화면:
      • wPrjList: 공사목록표 및 하단 BOQ11.DBF 미리보기
      • wBoq: 계층 내역서(T1..T6/E1..E6/C*), 공종번호 자동입력(wITNum), 내역할증(wBoqRate), 단수보정(wM_Rate), 일위풀기(wExpnd), 수량산출 연결(wQtyList), 내역보관함 (1)(2)(3)
      • wM_Set_Sys: 환경설정 (환율, ECD 소수위, 계산식, 환산식 1/8*16/12*25/20)
      • wM_JabPum: 단가목록표 (5대 가격지 비교 wM_Boxa, 기준단가 비율조정 wM_Edt_Hal, 표준 카탈로그 브라우저)
      • wM_Edit_iLWi: 일위대가·단가산출 수식 편집기 (COSTN.SMT 64B 블록 전개식, 표준 카탈로그 894코드·350레시피·21특수산식)
      • wM_KanJub: 제잡비 계산서 (4탭 T/S/TA/SA, 16대 콤보박스 및 이윤 끝전조정)
      • wM_KAN_RATE: 원가계산기준 제비율표 (RATE_R/RA/M/B.DBF 50×35 및 ST_BSC/*.JB_R 파일 직결)
      • wStage: 설계 후속 단계 (wM_Mk_Cont 계약내역, wM_Boq_ExecX 실행내역, wM_KanJub_K 기성내역, REVISION 설계변경 증감대비표)
      • PM_Prt: 30종 보고서 인쇄 미리보기 및 6시트 엑셀(.xls), 조달청 <T3_C3B> XML, JDL 내보내기
  • 100% 범용 COSTN.SMT 수식 인터프리터 (smt_engine.js)

    • 봉화군 2024 COSTN.SMT 전수 65/65건(100%) 1원 오차 없이 일치 검증:
      • ;; 헤더 변수 분리 파싱
      • [A], [D]'%', N'%' (N \ge 1 \Rightarrow N \times 0.01, N < 1 \Rightarrow N)
      • &PA01:M&, &RA01:M&, &PS_M&, &RC_S:S& 라벨·구간·누적 소계 처리
      • &L00020& 기구손료 인건비 누적소계 자동참조
      • (-=) 소계제외 블록, (=)/(==)/(===) 구간합산
      • 운반비(운반) 경비(S) 일괄 귀속 규칙
  • 5단 연쇄 재계산 엔진 (cascadeRecalculateAll / [계산완료])

    • 기초단가(L*/M*/S*) 변경 시 실시간 연쇄 전파:
      1. 중기사용료(X* 25/25건 100% 일치, 운전사 노임 좌→우 1/8*16/12*25/20 시간당 환산)
      2. 단가산출(D* 65/65건 100% 일치)
      3. 일위대가(B* 45/45건 100% 일치, 공구손료·잡품 재료비의 %/노무비의 % 구분)
      4. 내역서(BOQ11.DBF 141행)
      5. 원가계산서(PRJLST.DBF/.SMT)
  • 다중 슬롯 DBF 양방향 저장 (/api/save)

    • 당초설계(*1), 설계변경(*2), 계약내역(*3) 멀티 슬롯 컬럼을 COSTN.DBF, BOQ11.DBF, PRJLST.DBF, PRJLST.SMT, COSTN.SMT 및 .STC 아카이브에 무손실 저장
  • 보고서 엑셀 내보내기 원본 STMATE 1:1 복제 (excel_builder.py + /api/export-xlsx)

    • 원본 STMATE 엑셀 산출물 분석 기반 11개 시트 구성 및 네이티브 하이퍼링크/수식 구현:
      • 〓 목 차 〓: 전 시트 바로가기 =HYPERLINK("#'시트명'!A1", "시트명 →") 수식 적용
      • 전 시트 상단 우측: 목차 복귀 =HYPERLINK("#'〓 목 차 〓'!B2", "목차 →") 수식 적용
      • 설계내역서 ↔ 단가산출근거목록표 / 일위대가목록표 간 셀 참조 수식 및 =ROUNDDOWN(수량*단가, 0) 수식화
      • 원가계산서 비목별 연동 수식 및 11개 시트 스타일링 (헤더 폰트, 테두리, 열 너비 자동 조정)
      • 백엔드 생성기(excel_builder.py, 452줄) + 서버 엔드포인트(server.py, 630줄) + UI 연동(app.js, 689줄)
      • 전 파일 700줄 제한 엄격 준수 및 ruff/prettier 포맷팅 적용

3. 검증 결과 기록

자체 검증 (2026-11-05)

  • 700줄 제한 및 포맷터: 소스코드 10개 파일 전체 700줄 이하 준수 및 ruff/prettier 포맷 완료.
  • 브라우저 결함 수정 5건:
    1. wBoq 상단 헤더 관급자재 합계(govMatTotal: govRawTotal) 누락 수정 (143,554,309원 표시)
    2. wM_KanJub 및 PM_Prt 산정기초 금액 열(base: baseAmt) 표시
    3. wStage 설계변경 증감대비표 런타임 에러 수정
    4. wM_Edit_iLWi D00016 굴삭기 Q 산식 중간 변수 반올림(f=0.85 \rightarrow Q=22.85) 적용으로 DB 단가(3,825원) 일치
    5. wExpnd 모달 내역서 전개 삽입 연동

자체 검증 (2026-11-07 · 95%+ 완전 복제 고도화)

  • Playwright 브라우저 엔진 전수 검증 통과 (verify_95_fidelity.py):
    • COSTN.SMT 65/65건 100% 일치
    • 중기사용료 X* 25/25건 100% 일치
    • 단가산출 D* 65/65건 100% 일치
    • 일위대가 B* 45/45건 100% 일치
    • 봉화군 2024 산림유역관리사업 기준:
      • 직접공사비(TCOST1): 781,283,415원
      • 도급액(FINAL_SUPPLY): 1,270,728,000원
      • 관급자재대: 143,555,000원
      • 총공사비(COSTW1): 1,414,283,000원 (1원 오차 없이 100% 일치)
    • 동적 연쇄 전파 확인: 경유 M00018 +100원 인상 시 X00006 65,015→65,627원, D00016 3,825→3,878원, 총공사비 1,414,283,000→1,423,700,000원 정상 반영
    • 6시트 엑셀 워크북(237,840바이트) 및 조달청 XML(52,252바이트) 정상 생성
    • 9개 화면 전 과정 콘솔/페이지 런타임 에러 0건

자체 검증 (2026-11-07 · 엑셀 원본 STMATE 1:1 하이퍼링크/수식 고도화)

  • 11개 시트 엑셀 내보내기 검증 완료:
    • 〓 목 차 〓, 공사원가계산서, 단가산출근거목록표, 일위대가목록표, 설계내역서, 중기사용료, 단가산출근거, 일위대가표, 재료비목록표, 노무비목록표, 경비목록표 총 11개 시트 정상 생성.
    • 목차의 각 항목별 바로가기 =HYPERLINK("#'시트명'!A1", "시트명 →") 및 세부 시트의 목차 복귀 =HYPERLINK("#'〓 목 차 〓'!B2", "목차 →") 네이티브 엑셀 하이퍼링크 수식 동작 확인.
    • 내역서 단가 참조 수식(=단가산출근거목록표!F{row}, =일위대가목록표!F{row}) 및 산출금액 내림 함수(=ROUNDDOWN(...)) 정상 반영.
    • 서버 상시 구동 상태에서 POST /api/export-xlsx 엔드포인트 200 OK 응답 확인.
    • 전체 소스코드 파일 700줄 이하 준수 (excel_builder.py: 452줄, server.py: 630줄, app.js: 689줄 등) 및 포맷터 완료.