/* PLAN 748-0 헬퍼 — SK 고침 꼴(`logic/M02_Sangeun_Cover_Model.ts` · `M02_Sangeun_Undo.ts`): * 둘째 기초 세부 품 = M01 원문 · 고침 = 원문 몫 그대로 · 빼기 기억(뺀더한줄) · 되살림 · 수량 처음값 되돌림. * 짝 = `test_748_0_sk_undo.py`. 결과 = 표준출력 JSON. */ const path = require("path"); const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const { load } = makeLoader({ root: path.join(__dirname, "..", "..") }); const m = load("M02_MasterTemplete", "logic", "M02_Sangeun_Cover_Model.ts"); // 둘째 기초 GF 한 줄 — 원문 0.871 · 머리 수량 0.01 이면 상자 몫 0.00871 const detail = { cid: "add:#1/labor:LB000101#0", 이름: "벌목부", 단위: "인", 수량: 0.00871, 단가: 100000, 금액: 871, 비목: { 노무비: 871 }, 원문: { 수량: 0.871, 금액: 87100, 비목: { 노무비: 87100 } }, 바탕값: { qty: 0.871, 단가: 100000 }, }; const ans = { 기준: { 계: 871 }, 줄: [ { cid: "labor:LB000002#0", 이름: "보통인부", 단위: "인", 수량: 1, 단가: 100, 금액: 100, 비목: { 노무비: 100 }, }, { cid: "add:#0", 이름: "추가 인력", 단위: "인", 수량: 2, 단가: 100, 금액: 200, 비목: { 노무비: 200 }, }, { cid: "add:#1", 이름: "둘째 기초", 단위: "100㎥", 수량: 0.01, 단가: null, 금액: 871, 비목: { 노무비: 871 }, 펼침: [detail], }, ], 정체: ["labor:LB000002#0", "add:#0", "add:#1"], 짝잃음: [], 바탕판: "", }; const doc = { 단위: "㎥", 바탕: { 로직: "GF000099" }, 더한줄: [ { 종류: "인력", 요소: "LB000002", 수량: 2, 처음수량: 2 }, { 종류: "로직", 로직: "GF000316", 수량: 0.01, 처음수량: 0.01 }, ], 고름: { "add:#1": "MT1" }, }; const out = {}; const rows = m.rowsOf(ans, null, doc); const sub = rows.find((r) => r.cid === detail.cid); const view = m.hoView(ans, null, null, doc); const at = view.cids.indexOf(detail.cid); out.shownQty = view.호표[at].수량; // 원문 그대로 out.lineQty = view.lines[at].수량; out.lineAmount = view.lines[at].금액; // 상자 몫 그대로 out.t = sub.t; // 세부 품 고침 — 화면 0.9 = 문서 덮개 0.9(머리 수량 안 나눔) m.setLineCover(doc, sub, { qty: 0.9 }, false); out.cover = doc.더한줄[1].덮개; out.coverShown = m.hoView(ans, null, null, doc).covers[at].qty; // 더한 항목 수량 고침 → 처음값 되돌림 const man = m.rowsOf(ans, null, doc).find((r) => r.cid === "add:#0"); m.setLineCover(doc, man, { qty: 5 }, false); out.manQty = doc.더한줄[0].수량; m.setLineCover(doc, man, null, false); out.manBack = doc.더한줄[0].수량; // 더한 항목 빼기 → 기억 + 열쇠 당김 → 되살림 m.dropLine(doc, man); out.afterDrop = { adds: doc.더한줄.length, gone: doc.뺀더한줄, pick: doc.고름 }; out.goneRows = m.goneRows(doc); m.restoreLine(doc, "gone:0"); out.afterBack = { adds: doc.더한줄.map((x) => x.요소 ?? x.로직), gone: doc.뺀더한줄 ?? null, pick: doc.고름, }; // 둘째 기초 통째 빼기 → 되살림 m.dropBase(doc, 1, "둘째 기초"); out.baseGone = { adds: doc.더한줄.length, name: m.goneRows(doc)[0].이름, pick: doc.고름 }; m.restoreLine(doc, "gone:0"); out.baseBack = doc.더한줄.map((x) => x.요소 ?? x.로직); process.stdout.write(JSON.stringify(out));