feat(stmate-test): implement full STMATE w 8.0 UI, COSTN.SMT binary parser, and 100% lossless DBF/STC engine

This commit is contained in:
2026-11-04 23:45:20 +09:00
parent 1cc9dca9fc
commit 267b5a693f
12 changed files with 4341 additions and 2469 deletions
+162 -53
View File
@@ -1,70 +1,179 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>STMATE 계산·제어 흐름 독립 테스트</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>STMATE w 8.0 — 경영정보(주) 원가·내역 통합 시스템 (독립 재현판)</title>
<link rel="stylesheet" href="style.css" />
<script defer src="calc.js"></script>
<script defer src="app_views_cost.js"></script>
<script defer src="db_bridge.js"></script>
<script defer src="app.js"></script>
</head>
<body>
<header class="topbar">
<div class="brand">
<div class="badges">
<span class="badge accent">독립 테스트 웹앱</span>
<span class="badge">REA 6.7.0 / Ghidra 12.1.4 분석 반영</span>
<span class="badge">무로그인 · 로컬 전용</span>
<div id="stmate-shell" class="stmate-shell">
<!-- 1. TWM_STMATE_START_8X 상단 메인 메뉴바 (MainMenu1: 5대 메뉴) -->
<div class="win-menubar" id="main-menubar">
<div class="win-brand">STMATE w 8.0</div>
<div class="menu-item" data-menu="m1">
<span><u>1</u>. 프로젝트/초기값</span>
<div class="menu-dropdown">
<button data-act="Act_PrjList">공사목록표 (wPrjList) — 프로젝트 관리</button>
<button data-act="Act_Init">초기값 입력 및 수정 (wM_Set_Sys)</button>
<hr />
<button data-act="Act_ReloadDbf">현재 프로젝트 DBF/SMT 다시 읽기</button>
<button data-act="Act_SaveDbf">현재 프로젝트 DBF/SMT/STC 물리 저장 (sBtn_Calc)</button>
<button data-act="Act_ExportJson">작업 스냅샷 JSON 내보내기</button>
<label class="menu-file-label">
작업 스냅샷 JSON 불러오기
<input type="file" id="json-file-input" accept=".json" hidden />
</label>
</div>
</div>
<div class="menu-item" data-menu="m2">
<span><u>2</u>. 단가표/대가표</span>
<div class="menu-dropdown">
<button data-act="Act_DanList" data-filter="ALL">
단가목록표 — 모든단가 (wM_JabPum)
</button>
<button data-act="Act_DanList" data-filter="L">노무비 단가목록 (L)</button>
<button data-act="Act_DanList" data-filter="M">재료비 단가목록 (M)</button>
<button data-act="Act_DanList" data-filter="S">경비 단가목록 (S)</button>
<button data-act="Act_DanList" data-filter="X">
중기경비/사용료 목록 (X · wM_Edit_EQ)
</button>
<hr />
<button data-act="Act_IlwiEdit" data-filter="B">
일위대가표 편집 (B · wM_Edit_iLWi)
</button>
<button data-act="Act_IlwiEdit" data-filter="D">
단가산출근거/Q식 편집 (D · wM_Edit_San)
</button>
<hr />
<button data-act="Act_BoxaModal">5개 가격지 비교·최저가 채택 (wM_Boxa)</button>
<button data-act="Act_EdtHalModal">기준단가 비율 일괄수정 (wM_Edt_Hal)</button>
<button data-act="Act_CatalogModal">
STMATE 표준 카탈로그 (894코드·350레시피·21특수산식)
</button>
</div>
</div>
<div class="menu-item" data-menu="m3">
<span><u>3</u>. 내역서/인쇄</span>
<div class="menu-dropdown">
<button data-act="Act_BoqEdit">설계내역서 편집 (wBoq · T1~T6/E1~E6/C*)</button>
<button data-act="Act_KanJub">제잡비 계산 · 원가계산서 (wM_KanJub)</button>
<button data-act="Act_KanRate">원가계산기준 제비율표 편집 (wM_KAN_RATE)</button>
<hr />
<button data-act="Act_StageEdit">
계약 / 실행예산 / 기성 / 설계변경 단계 (wM_Mk_Cont · wM_KanJub_K)
</button>
<hr />
<button data-act="Act_Print">
보고서 인쇄 및 엑셀/조달청 XML/JDL 변환 (PM_Prt 30종)
</button>
</div>
</div>
<div class="menu-item" data-menu="m4">
<span><u>4</u>. 도구</span>
<div class="menu-dropdown">
<button data-act="Act_ITNumModal">내역서 공종번호 자동부여 (wITNum)</button>
<button data-act="Act_BoqRateModal">내역 항목 할증율 적용 (wBoqRate)</button>
<button data-act="Act_MRateModal">비목별 단수·금액 일괄보정 (wM_Rate)</button>
<button data-act="Act_ExpndModal">일위대가/산근 내역 풀어넣기 (wExpnd)</button>
<button data-act="Act_QtyModal">수량산출서 연결 집계 (wQtyList)</button>
</div>
</div>
<div class="menu-item" data-menu="m5">
<span><u>5</u>. 기타</span>
<div class="menu-dropdown">
<button data-act="Act_LoadGolden">봉화군 2024 산불진화임도 표준 상태 복원</button>
<button data-act="Act_ReaInfoModal">REA 정적분석 아키텍처 & DBF/SMT 명세 확인</button>
</div>
</div>
<div class="menubar-right">
<span id="conn-badge" class="conn-badge">DBF 엔진 대기중</span>
<select
id="top-project-select"
class="top-project-select"
title="PC 및 실무 STMATE 프로젝트 즉시 전환"
></select>
</div>
<h1>STMATE 계산 사슬 및 제어 옵션 시뮬레이터</h1>
<p>
기초자원 후보단가·노임환산(`ST_Sys`) → 중기·Q식 단가산출(`ST_SanCal`) →
일위대가(`ST_EdiLWi`) → 내역·OPTIMIZ(`ST_Func_C`) → 제잡비 4형식·끝전조정(`ST_KanJub`) →
변경설계 차액
</p>
</div>
<div class="top-actions">
<button id="btnPresetBonghwa" class="btn secondary" title="실무 검증형 예제 불러오기">
예제 초기화
<!-- 2. TWM_STMATE_START_8X 상단 8버튼 메인 툴바 (Tool_Bar) -->
<div class="win-toolbar" id="main-toolbar">
<button class="tb-btn active" data-screen="wPrjList" title="TWPRJLIST 공사목록표">
<span class="tb-ico">📁</span>
<span class="tb-txt">공사목록표</span>
</button>
<label class="btn secondary" for="fileOpen"
>JSON 열기<input id="fileOpen" type="file" accept=".json,application/json" hidden
/></label>
<button id="btnSaveJson" class="btn primary">JSON 저장</button>
</div>
</header>
<main class="container">
<div class="alert-banner">
<strong>시험·검증 전용 안내</strong>
<span
>이 웹앱은 Aislo 본체와 완전히 분리된 독립 테스트 도구입니다. 수록된 단가·요율은 계산
경로와 제어 옵션을 점검하기 위한 시험 데이터이며, 현행 법령·품셈 확정값이 아닙니다.</span
<button class="tb-btn" data-screen="wM_Set_Sys" title="초기값 입력 및 수정">
<span class="tb-ico">⚙️</span>
<span class="tb-txt">초 기 값</span>
</button>
<button class="tb-btn" data-screen="wM_JabPum" title="COSTN.DBF 단가목록표">
<span class="tb-ico">📋</span>
<span class="tb-txt">단가목록표</span>
</button>
<button
class="tb-btn"
data-screen="wM_Edit_iLWi"
title="일위대가·중기·단가산출근거(COSTN.SMT)"
>
<span class="tb-ico">🧮</span>
<span class="tb-txt">대 가 표</span>
</button>
<button class="tb-btn" data-screen="wBoq" title="BOQ11~14.DBF 계층 설계내역서">
<span class="tb-ico">📐</span>
<span class="tb-txt">설계내역서</span>
</button>
<button class="tb-btn" data-screen="wM_KanJub" title="TWM_KANJUB 제잡비 및 원가계산서">
<span class="tb-ico">🏛️</span>
<span class="tb-txt">제잡비계산</span>
</button>
<button class="tb-btn" data-screen="wM_KAN_RATE" title="TWM_KAN_RATE 제비율표 & JB_R">
<span class="tb-ico">📊</span>
<span class="tb-txt">제비율표</span>
</button>
<button class="tb-btn" data-screen="wStage" title="계약·실행·기성·설계변경">
<span class="tb-ico">🔄</span>
<span class="tb-txt">계약/기성/변경</span>
</button>
<button class="tb-btn" data-screen="PM_Prt" title="ST_Prt.CPM 30종 보고서 인쇄 및 변환">
<span class="tb-ico">🖨️</span>
<span class="tb-txt">보고서인쇄</span>
</button>
<div class="tb-sep"></div>
<button
class="tb-btn tb-calc"
id="btn-calc-all"
title="Act_Calc_All: 전 공정 재계산 및 DBF/SMT/STC 동기화 저장"
>
<span class="tb-ico">⚡</span>
<span class="tb-txt">계 산 완 료</span>
</button>
</div>
<section class="kpi-grid" id="kpiSummary" aria-label="핵심 계산 요약"></section>
<!-- 3. 현재 열린 프로젝트 컨텍스트 헤더 (PrjBar) -->
<div class="prj-context-bar" id="prj-context-bar"></div>
<nav class="tab-nav" id="mainTabs" aria-label="STMATE 기능 단계">
<button type="button" data-tab="db">00 원본 DBF · STC 연동</button>
<button type="button" data-tab="resources" class="active">01 기초자원 · 노임환산</button>
<button type="button" data-tab="machines">02 중기 · 단가산출(Q식)</button>
<button type="button" data-tab="ilwi">03 일위대가 조립</button>
<button type="button" data-tab="boq">04 내역서 · OPTIMIZ</button>
<button type="button" data-tab="kanjub">05 제잡비 · 원가계산</button>
<button type="button" data-tab="revision">06 변경설계 · REA 근거</button>
</nav>
<!-- 4. 메인 MDI 작업 화면 영역 -->
<main id="mdi-workspace" class="mdi-workspace"></main>
<section id="tabPanel" class="tab-panel" aria-live="polite"></section>
<!-- 5. 하단 고정 상태표시줄 및 실시간 원가 집계바 (St_Bar) -->
<footer id="stmate-statusbar" class="stmate-statusbar"></footer>
</div>
<footer class="footer-note">
<span
>모든 조작 상태는 현재 브라우저 탭(`sessionStorage`)에 자동 보관됩니다. 영구 보관하거나
다른 환경에서 열려면 <strong>JSON 저장 / 열기</strong>를 사용하세요.</span
>
</footer>
</main>
<!-- 범용 모달 컨테이너 (wITNum, wBoqRate, wM_Rate, wExpnd, wM_Boxa, wM_Edt_Hal, 표준카탈로그 등) -->
<div id="stmate-modal-backdrop" class="modal-backdrop hidden">
<div id="stmate-modal-window" class="modal-window">
<div class="modal-titlebar">
<span id="modal-title-text">STMATE 도구</span>
<button id="modal-close-btn" class="modal-close-btn">✕</button>
</div>
<div id="modal-body-content" class="modal-body"></div>
</div>
</div>
<script src="calc.js"></script>
<script src="view_prj_boq.js"></script>
<script src="view_dan_ilwi.js"></script>
<script src="view_kanjub_prt.js"></script>
<script src="app.js"></script>
</body>
</html>