- A 코드 = COSTA · S_JDA 참 = 저장 단가 · 거짓 = AAMTn 노무비율 나눔 · ACTTYP·ACTOPT = PRJLST · calcBoq·api_load 연결 - EXRNM 참 = S 줄만 단가×율/1000 · ECD 자리 버림 · 천원 · 전각 $ - 손료 계수 반올림 = 첫 버림 자리 5 이상 올림 - 적용기준 국가 2·지방 0·행자부 1 · 행자부 RATE_M 조회 rateMLookup - 지식DB 36번 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
49 lines
1.9 KiB
JavaScript
49 lines
1.9 KiB
JavaScript
// STMATE 재현 앱 — 표준시장단가(A) 내역·구성 · 외화 환산(EXRNM) · 행자부 RATE_M 조회 · stdin {mode, ...} → 결과
|
|
// boq: calc.calculateAll 내역 줄 · comp: smt_engine 단가 읽기(costnLookup) + 구성 조립 · ratem: kanjub_parts.NATIVE.rateMLookup
|
|
globalThis.window = globalThis;
|
|
const C = require("../../tools/stmate-test/calc.js");
|
|
const Parts = require("../../tools/stmate-test/kanjub_parts.js");
|
|
require("../../tools/stmate-test/smt_eval.js");
|
|
require("../../tools/stmate-test/smt_engine.js");
|
|
const E = window.STMATE_ENGINE;
|
|
const V = window.STMATE_SMT_EVAL;
|
|
|
|
const MODES = {
|
|
boq({ items, rows, std, slot }) {
|
|
const st = C.createDefaultState();
|
|
Object.assign(st, { stdMarketItems: items, boqItems: rows });
|
|
st.sysConfig.stdMarket = std;
|
|
const res = C.calculateAll(st);
|
|
const boq = slot === 2 ? res.boqRev : res.boqOrig;
|
|
const pick = (r) => ({ M: r.M, L: r.L, S: r.S, A: r.A, T: r.T, uL: r.lUnit, uM: r.mUnit });
|
|
return { rows: boq.rows.map(pick), directA: boq.directA, directT: boq.directT };
|
|
},
|
|
comp({ cases }) {
|
|
return cases.map((c) => {
|
|
const ctx = {
|
|
dbfData: Object.assign({ start_ini: {}, costn_rows: [], costa_rows: [] }, c.data),
|
|
state: { sysConfig: {} },
|
|
};
|
|
const code = c.code || "B00001";
|
|
const opts = E.compositionOptions(ctx, code, {});
|
|
const { lookup } = E.costnLookup(ctx);
|
|
const ev = V.evaluateComposition(c.rows, lookup, opts);
|
|
return { M: ev.M, L: ev.L, S: ev.S, unit: c.peek ? lookup(c.peek) : null };
|
|
});
|
|
},
|
|
ratem({ rows, cases }) {
|
|
return {
|
|
setBase: Parts.NATIVE.SET_BASE,
|
|
out: cases.map((o) => Parts.NATIVE.rateMLookup(rows, o)),
|
|
};
|
|
},
|
|
};
|
|
|
|
let buf = "";
|
|
process.stdin.setEncoding("utf8");
|
|
process.stdin.on("data", (d) => (buf += d));
|
|
process.stdin.on("end", () => {
|
|
const req = JSON.parse(buf);
|
|
process.stdout.write(JSON.stringify(MODES[req.mode](req)));
|
|
});
|