Files
Aislo/M02_MasterTemplete/logic/M02_Hopyo_Imported_Model.ts
T
eomsangdonandClaude Opus 5.5 4e71ec515b feat(821-4): 불러오기 못 이은 기계 = 내 기계 자동 생성 · 「내 기계 생성 n」 표시
- 새 M02_San_MyMachine — 그 파일 기계 구성(EST 원파일 MachMainDat · EST 엑셀 「기계경비」 · STmate 엑셀 「중기사용료」) → 우리 틀 값(가격 천원 · 달러 = 환율 FX000001 + 비고 · 손료계수 · 주연료 → 우리 유가 · 잡품 % · 조종원 인 + 우리 직종 · 전력) · 경쟁사 조종원 노임 환산 안 가져옴 · 구성 없음 = 시간당 값 직접 · 조합 기계 = 조각마다
- 만드는 때 = 층 저장 길(FromHopyo.make) 만 · 같은 이름 · 규격 내 기계 있으면 그것 · 다시 불러와도 중복 없음 · 미리 보기(emit) = 원본 「내기계예정」 만 · 개인 층 아님 = 안 만듦
- 불러오기 기계 찾기 = M01 만(Doc_FromNative.emit · Machine_Find.m01_only) — 내 기계 잇기는 한 곳(다시 불러와도 같은 SK)
- 가져온 식 색인 = M01 + 그 층 내 기계(Imported._whole) · 직접 꼴 = [우리 단가로] 내 기계 시간당 · 「못 이음」 에서 뺌 · 수식 문서 변수 설명 「내 기계 키」
- EST 원파일 둘 꼴 칸 기계구성 · STmate 엑셀 중기사용료 시트 둠
- 가져온 식 패널 — 「내 기계 생성 n」 · 「내 기계 이음 n」 · 줄마다 「내 기계 · 이름 규격」 꼬리표 · 「만들어질 내 기계 n」
- 금액(엑셀 단가 그대로) 줄 값 안 건드림

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 14:24:56 +09:00

68 lines
2.4 KiB
TypeScript

/* =============================================================================
* logic/M02_Hopyo_Imported_Model.ts
* 불러오기 단산 블록 = 가져온 식 단가산출(PLAN 793-3b · 809-1 · 요구 646 · 702) — 꼴 · 읽기만.
* · SK `가져온` 덧칸 꼴(793-2 `M02_Sangeun_Imported.py` 머리) · 경쟁사 로직 그대로(기초로 바꾸기 없음 · 요구 703)
* 화면 · fetch · sessionStorage 없음(`CLAUDE.md` 4장).
* ========================================================================== */
export type Money4 = Record<"노무비" | "재료비" | "경비" | "계", number>;
export interface CheckLine {
자리: string;
행?: number | null;
셈?: number | null;
엑셀?: number | null;
같음: boolean;
까닭?: string;
}
/** SK 문서 덧칸 `가져온` */
export interface ImportedMeta {
로직?: { 이름?: string; 호표?: { 이름?: string; 이음?: string | null }[] };
단가기준?: "엑셀" | "우리";
원본?: {
파일?: string;
시트?: string;
행?: number[];
갈래?: string;
엑셀금액?: Money4;
글줄?: { 행?: number | null; 글?: string; 자리?: string; 값?: number | null }[];
/** 못 이은 기계 → 내 기계(821-4 · 새로 = 이번에 만듦 · 아니면 그 층 같은 것) */
내기계?: { 키: string; 이름: string; 규격?: string; 방식?: string; 새로?: boolean }[];
/** 개인 층 밖에서 연 것 — 만들어질 내 기계(안 만듦) */
내기계예정?: { 이름: string; 규격?: string }[];
};
검산?: {
같음: boolean;
까닭?: string | null;
셈?: Money4 | null;
엑셀?: Money4;
줄: CheckLine[];
};
}
export interface ImportedDoc {
이름?: string;
단위?: string;
입력값?: Record<string, unknown>;
가져온?: ImportedMeta;
[k: string]: unknown;
}
/** 가져온 식(경쟁사 로직이 든 SK) */
export const isImported = (d: ImportedDoc | null | undefined): boolean => !!d?.가져온?.로직;
/** 검산 다른 줄 */
export const wrongLines = (d: ImportedDoc): CheckLine[] =>
(d.가져온?.검산?.줄 ?? []).filter((x) => !x.같음);
/** 금액 차이 글(후 − 전) */
export function gapText(
before: Money4 | null | undefined,
after: Money4 | null | undefined,
): string {
if (!before || !after) return "—";
const d = after.계 - before.계;
return `${d > 0 ? "+" : ""}${d.toLocaleString("ko-KR")}`;
}