feat(M02 실무자료 빠짐 0): 확인 안 한 줄 · 노임 · % = 고정 줄 · [모두 고정으로 들여오기] · [품셈으로 바꾸기] (PLAN 705-3)
- 만들기 — 체크 안 한 줄 · 노임 · 「우리에 없음」 = 고정 줄(엑셀 숫자 그대로 · 서버가 파일에서) · % 줄 = 비율 고정 줄(밑수 = 다른 줄 합일 때 · 아니면 금액 그대로) · 합계만 = 재료비 · 같은 이름 = 차례 가름 · 하위 호표 = 확인된 사전조합 참조 - 이음 = 이름 · 규격 · 단위 · 단가 다 같은 노임 · 자재만 저절로 · 다른 단가 = 이음 후보 수 - 시트 통째 — /hopyo-build-all(하위 먼저 · 확인된 호표 그대로) · 알림 「호표 · 줄 · 품셈 줄 · 고정 줄 · 빠짐 · 엑셀 합계 = 우리 합계」 · 비교 = 엑셀 끝수 규칙(EST 내림 · STmate 반올림) - 비율 고정 줄 셈 — M02 settle 짝(파이썬 · TS ratioLines) · 사전조합 셈 · B09 pct 줄 - 확인 창 — 만든 사전조합 품셈 줄 = 첫 체크 · [품셈으로 바꾸기] · [모두 고정으로] · 생성 물음에 전후 금액 · 품 다른 줄 수 - 낡은 시험 고침 — 빈 몸 400 · 빠진 줄(확인 안 함 · %) 단정 = 고정 줄로 바뀐 규칙 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,7 +32,10 @@ export interface LaborFixed {
|
||||
단가: Record<"노무비" | "재료비" | "경비", number>;
|
||||
이음?: Record<"노임" | "자재" | "기계", string | null>;
|
||||
출처?: Record<string, string | number>;
|
||||
/** 비율 줄(705-3 · 엑셀 % 줄) — 수량 = 율 · 반영[비목] = 다른 줄 반영합[기준] × 율 ÷ 100 */
|
||||
비율?: { 기준: CostKey; 비목: CostKey };
|
||||
}
|
||||
type CostKey = "노무비" | "재료비" | "경비";
|
||||
|
||||
export interface CalcLine {
|
||||
/** 참조 줄은 서버 답에 없음(빈 글로 다룸) */
|
||||
@@ -176,5 +179,26 @@ export function settle(
|
||||
if (cost !== null && !aside.has(one.코드)) add(done, { ...zero(), 재료비: cost, 계: cost });
|
||||
return { ...one, 수량: qty, 수량출처: source, 반영: cost };
|
||||
});
|
||||
return { 줄, 자재, 기준합: base, 반영합: done };
|
||||
return { 줄: ratioLines(줄, done, base), 자재, 기준합: base, 반영합: done };
|
||||
}
|
||||
|
||||
/** 비율 고정 줄(705-3 · 짝 `M02_Labor_Fixed.ratios`) — 밑 = 비율 줄 뺀 반영합 · 기준[비목] = 밑[기준] ·
|
||||
* 배 100 · 반영 = 기준 × 율 ÷ 100 · `done` 에 더함 · 기준합(`base`)엔 안 셈 */
|
||||
function ratioLines(lines: CalcLine[], done: Money, base: Money): CalcLine[] {
|
||||
for (const l of lines.filter((x) => x.고정?.비율)) {
|
||||
for (const k of MONEY_KEYS) {
|
||||
done[k] -= l.반영?.[k] ?? 0;
|
||||
base[k] -= l.기준?.[k] ?? 0;
|
||||
}
|
||||
}
|
||||
const under = { ...done };
|
||||
return lines.map((line) => {
|
||||
const rate = line.고정?.비율;
|
||||
if (!rate) return line;
|
||||
const own = zero();
|
||||
own[rate.비목] = own.계 = under[rate.기준];
|
||||
const got = reflect(own, line.수량 ?? null, 100);
|
||||
if (got) for (const k of MONEY_KEYS) done[k] += got[k];
|
||||
return { ...line, 기준: own, 배: 100, 반영: got };
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user