// STMATE 재현 앱 보고서 묶음 — stdin = { load: /api/load 결과, stage, mode(pps = 조달청 XML) } · 연쇄 재계산(계산완료) 뒤 시트 모형 globalThis.window = globalThis; globalThis.document = globalThis.document || { readyState: "complete" }; // 노드 — 화면 전용 분기 막음 require("../../tools/stmate-test/calc.js"); require("../../tools/stmate-test/smt_eval.js"); require("../../tools/stmate-test/smt_engine.js"); require("../../tools/stmate-test/view_prj_boq.js"); require("../../tools/stmate-test/report_core.js"); require("../../tools/stmate-test/report_unit.js"); require("../../tools/stmate-test/report_boq.js"); const Book = require("../../tools/stmate-test/report_book.js"); const Pps = require("../../tools/stmate-test/report_pps.js"); let buf = ""; process.stdin.setEncoding("utf8"); process.stdin.on("data", (d) => (buf += d)); process.stdin.on("end", () => { const { load, stage, mode } = JSON.parse(buf); const ctx = { dbfData: load, state: load.sim_state, uiState: {} }; window.STMATE_ENGINE.cascadeRecalculateAll(ctx); const computed = window.STMATE_CALC.calculateAll(ctx.state); if (mode === "pps") { const xml = Pps.buildPpsXml(load, ctx.state, computed, stage || 1, { today: "2026-01-01" }); process.stdout.write(JSON.stringify({ xml })); return; } const book = Book.buildBook(load, ctx.state, computed, stage || 1); const out = {}; for (const s of book.sheets) out[s.id || s.name] = { name: s.name, rows: s.rows }; process.stdout.write(JSON.stringify(out)); });