diff --git a/tools/est-test/PLAN.md b/tools/est-test/PLAN.md
index 331e13903..9948c58f1 100644
--- a/tools/est-test/PLAN.md
+++ b/tools/est-test/PLAN.md
@@ -489,6 +489,8 @@ ative-standard.js에 표준시장단가 원천(SilJukDat)과 내역 행(EstMainD
- 남음: 구성비·요율 전환(CalcBase), 약어 표시(SName), 제비율 기준 문서 보기(원본 한글 파일).
- [x] 수량산출서 검색·전체보기(원본 TFRMMULLANG btnSerch·btnAllDisplay — 빈칸·|·괄호 무시 포함 검색) — 고르기 줄을 `native-quantity-sheets.js` 로 옮겨 700줄 제한 유지.
- 검증완료: `test_est_quantity_sheets.py` 검색 시험 포함 수량 시험 22개 통과. ORCA 브라우저에서 「집수」 검색 → 항목에 집수정이 있는 「배수」만·선택 이동, 전체보기 → 3개 복귀, 샘플 복구.
+ - [x] ES 정보(원본 mnuESInfo → TfrmESInfo 0x10b838c) — 기준시점·비교시점·최종기성일·선급금지급일(기본 오늘)·선급금지급액을 `project.esInfo` 에 기록(원본 [EscInfo] SDATE·CDATE·ACDATE·PreDATE·PreCost). 원본도 ES 제출 파일 작성에만 씀 — 웹 물가변동 계산과 잇지 않음, ESTX 에는 남지 않음.
+ - 검증완료: 바인딩 시험 통과. ORCA 브라우저에서 기본 오늘 · 기준시점 2025-01-15·선급금 1,000,000 저장 → 다시 열면 그대로, 지워 복구.
- [x] 설계참고철(Main Data)과 단가 범위 검색(원본 TfrmMainTableList 「MAIN DATA(설계참고철) 추가 및 삭제」 · TfrmFolderSerch 「Main Data에서 검색」·범위 검색 0xefefb0) — 통합 검색 「설계참고철 관리」에서 저장된 작업 중 최대 10개 지정(양식 보관함 종류 options), 검색위치 「설계참고철」이면 그 작업만, 검색어 「a~b」·숫자 하나는 단가 범위·같음. 원본의 검색중지는 서버 검색이 바로 끝나 두지 않음.
- 검증완료: `test_est_multi_search.py` 2개(범위·같음·지정 작업만) 통과. ORCA 브라우저에서 2개 지정 → 「1000~2000」 24건 모두 지정 작업·범위 안, 목록 지워 복구.
- [x] 줄 연결 도구(원본 TfrmHead popupCostNC·GC·JC·All 0xf1b54c · popMainSumIndex · mnuDataLink 0xf00e6c — 디스어셈블 근거) — 비목별 단가 불러오기(일위대가 줄: 하위 견적·일위·단산·기계에서 고른 비목 단가만 남기고 나머지 0, 기준비목 지정, 노임·자재·표준 거부), SUM 색인지정(해제·A~Z → 구간 SKind, 레벨·소계·도급액·조달수수료·호표머리 줄 거부), 하위데이타 연결/끊기(연결 줄은 끊고 값 유지, 끊긴 줄은 일위→단산→기계→표준→견적→자재→노임 차례로 코드 또는 품명·규격·단위 맞춤으로 연결, 자재는 재료단가·노임은 노무단가 = 원본 TC). 원본은 초점 한 줄, 웹은 고른 줄 모두.
diff --git a/tools/est-test/index.html b/tools/est-test/index.html
index 8816534ac..d4c1096a6 100644
--- a/tools/est-test/index.html
+++ b/tools/est-test/index.html
@@ -61,6 +61,7 @@
+
@@ -245,6 +246,7 @@
>
diff --git a/tools/est-test/native-business-actions.js b/tools/est-test/native-business-actions.js
index 18a431da2..f2a9610ed 100644
--- a/tools/est-test/native-business-actions.js
+++ b/tools/est-test/native-business-actions.js
@@ -632,7 +632,8 @@ const EstBusinessActions = (() => {
(typeof EstBlockFile !== "undefined" && EstBlockFile.handle(name, state)) ||
(typeof EstDisplay !== "undefined" && EstDisplay.handle(name, state)) ||
(typeof EstCellClip !== "undefined" && EstCellClip.handle(name, state)) ||
- (typeof EstRowLinks !== "undefined" && EstRowLinks.handle(name, state))
+ (typeof EstRowLinks !== "undefined" && EstRowLinks.handle(name, state)) ||
+ (typeof EstEsInfo !== "undefined" && EstEsInfo.handle(name, state))
) {
EstApp.render();
} else if (name === "insert-annual") {
diff --git a/tools/est-test/native-es-info.js b/tools/est-test/native-es-info.js
new file mode 100644
index 000000000..3ac1e0a80
--- /dev/null
+++ b/tools/est-test/native-es-info.js
@@ -0,0 +1,30 @@
+// 원본 「ES 정보」(ES도구 mnuESInfo → TfrmESInfo 0x10b838c) — 조달청 물가변동(ES) 제출용 기준시점·비교시점·최종기성일·
+// 선급금지급일·선급금지급액. 원본은 작업 폴더 ProjectDataInfo.Ini [EscInfo] SDATE·CDATE·ACDATE·PreDATE·PreCost 에 두고
+// 날짜 기본값은 오늘. 웹은 project.esInfo 에 둔다(물가변동 계산과는 직접 잇지 않음 — 원본도 ES 제출 파일 작성에만 씀).
+const EstEsInfo = (() => {
+ const today = () => new Date().toISOString().slice(0, 10);
+ function dialog(state) {
+ const e = state.project.esInfo || {};
+ EstActions.form(
+ "ES 정보",
+ [
+ { name: "SDATE", label: "기준시점", type: "date", value: e.SDATE || today() },
+ { name: "CDATE", label: "비교시점", type: "date", value: e.CDATE || today() },
+ { name: "ACDATE", label: "최종기성일", type: "date", value: e.ACDATE || today() },
+ { name: "PreDATE", label: "선급금지급일", type: "date", value: e.PreDATE || today() },
+ { name: "PreCost", label: "선급금지급액(원)", type: "number", value: e.PreCost ?? 0 },
+ ],
+ (values) => {
+ if (!Number.isFinite(values.PreCost) || values.PreCost < 0)
+ throw Error("선급금지급액은 0 이상 수치입니다.");
+ EstApp.change((project) => (project.esInfo = { ...values }), false);
+ },
+ );
+ }
+ function handle(name, state) {
+ if (name !== "es-info") return false;
+ dialog(state);
+ return true;
+ }
+ return { handle };
+})();
diff --git a/tools/est-test/server.cjs b/tools/est-test/server.cjs
index ba044d91e..f6f2ca006 100644
--- a/tools/est-test/server.cjs
+++ b/tools/est-test/server.cjs
@@ -82,6 +82,7 @@ const allowed = new Set([
"native-display.js",
"native-cell-clip.js",
"native-row-links.js",
+ "native-es-info.js",
"native-wonga-tools.js",
"native-estimate-print.js",
"native-xml-check.js",