fix(793-3b): 우리 기초로 바꾸기 — 옵션 = 블록 풀이 후보 바인딩 · 단위 성격 다르면 환산 계수 입력 필요 · 가져온 식 시트 M01 바뀜 표지 걷음

- to-base 몸 환산? · 환산 없이 단위 성격 다름 = 후 None · 필요 ["환산"](막지 않음 · 화면 붉은 칸)
- 화면 bind = 블록 풀이 그 기초 후보 바인딩(엑셀 값 · 기본) + 블록 검산 입력 필요 · 줄 검산(빈 입력값)은 옵션을 못 읽었음
- 가져온 식 SK = M01 짝 없음 — 시트 M01바뀜 · 짝잃음 안 띄움(저장 M01판이 바탕 줄과 달라 늘 떴음)
- 시험 test_793_3b 8

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 18:26:07 +09:00
co-authored by Claude Opus 5.5
parent ca72718e26
commit 5a6cccd997
9 changed files with 110 additions and 32 deletions
@@ -61,6 +61,8 @@ export interface ImportedDoc {
단위?: string;
바탕?: { 로직?: string } | null;
입력값?: Record<string, unknown>;
/** SK 단위 환산(기초 결과단위 성격이 다를 때 · 728-2) */
환산?: { 계수?: number | string };
가져온?: ImportedMeta;
[k: string]: unknown;
}
@@ -81,6 +83,12 @@ export const wrongLines = (d: ImportedDoc): CheckLine[] =>
const blank = (v: unknown): boolean => v === undefined || v === null || String(v).trim() === "";
/** 입력 필요 칸 값 — 입력값 + 「환산」 = 환산 계수 */
export const needValues = (d: ImportedDoc): Record<string, unknown> => ({
...(d.입력값 ?? {}),
환산: d.환산?.계수,
});
/** 입력 필요 중 아직 빈 칸 */
export const stillNeed = (need: string[], values: Record<string, unknown> | undefined): string[] =>
need.filter((k) => blank(values?.[k]));
@@ -93,7 +101,7 @@ export function skPick(
need: string[],
marks: string[],
): DraftPick & { 표지: string[] } {
const values = doc.입력값 ?? {};
const values = needValues(doc);
return {
갈래: "단가산출",
키: sk,