- 정본 로직(08장 아홉 · 산림 10장 4륜 덤프) 시간환산 중간 식 = 세 줄 분자 ÷ 분모 곱(713-4 전 꼴) · 수식 문서 = 빌더 변환으로 다시 지음(변환 대조 1,520 같음 · 채택 1 원 셋 = 같은 까닭 714-3) - 체인톱 GF000337 은 그대로(시간환산 = 하루 연료 · 손료 → 시간 · 조종원 없음) - 짝: 기계 양식 시간환산(M01 lists = 세 줄 곱) · master_machine_coef ↔ common_util_machine_coef 기본값 5/24 · 기계 덮음 새 조종원 줄 꼴(master_doc_cover ↔ common_util_formula_doc_cover) · 기호 이름 상여분자 · 상여분모 · 휴지분자 · 휴지분모 - 전후: 조종원 기계 295 대 노무비만 ×5/3 · 조종원 없는 기계 불변 · 로직 1,520 중 기계 부르는 431 만 오름 - B09 는 안 고침(계수표 세 줄을 스스로 곱함 · 두 번 곱 0) 낡은 시험 고침: 713-4 지킴을 세 계수 꼴로 · masterdata_check · 796-1 · 821-2 · 821-4 · 822-2 · 836-1 · 839-1 기대값 = 조종원 5/24 · 802-2 채택 차이 셋 · 821-3 줄 쌓기 내 기계 = 836-2 뒤 개인 층 자동 따라옴(옛 단가새값 · 단가갱신 기대 걷음) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
127 lines
5.2 KiB
TypeScript
127 lines
5.2 KiB
TypeScript
/* =============================================================================
|
|
* common_util_machine_symbol_name.ts
|
|
* 기계경비식(부품 갈래) 기호 → 짧은 한글 이름(PLAN 839-1 · 요구 858 안 2) — 그림 전용 사전
|
|
* 「P_기계」 → 「가격」 · 「k_기계상각비」 → 「상각」 · 「C_손료」 → 「손료」 · 「r_기계잡재료」 → 「잡품」
|
|
* 화면 글만 바꿈 — 문서 자료 · 식 글 · 열쇠 · 계산 불변 · 식 글 고침 칸은 `tableAlias` 길이 이름 ↔ 기호로 오감
|
|
* 기계경비식 밖 문서 · 사용자가 손으로 바꾼 기호(사전에 없는 꼴)는 그대로 · 이름이 겹치면 그 기호만 그대로
|
|
* 화면 없음(시험이 Node 로 돌림) · 기계 제어 구역(836-1)도 `machineAlias` 로 같은 이름
|
|
* ========================================================================== */
|
|
|
|
import type { FormulaDoc } from "./common_util_formula_doc";
|
|
import { symbols } from "./common_util_line_stack";
|
|
|
|
/** 기호 → 이름(품셈 말 줄임 — 가격 · 상각 · 정비 · 관리 · 손료 · 가산 · 잡품) */
|
|
const NAME: Record<string, string> = {
|
|
C_손료: "손료",
|
|
C_브레이커: "브레이커손료",
|
|
C_집게: "집게손료",
|
|
P_기계: "가격",
|
|
P_기계전력: "전력",
|
|
P_기계주연료: "주연료",
|
|
P_덤프트럭: "가격",
|
|
P_덤프트럭2: "주연료",
|
|
P_브레이커: "브레이커가격",
|
|
P_집게: "집게가격",
|
|
P_전력: "전력단가",
|
|
P_자동차용경유: "경유",
|
|
P_휘발유: "휘발유",
|
|
P_체인오일: "체인오일",
|
|
P_체인톱손료: "체인톱손료",
|
|
P_MO연료지역: "연료단가",
|
|
P_LB직종: "조종원노임",
|
|
Q_기계조종원: "조종원",
|
|
Q_덤프트럭: "조종원",
|
|
Q_시간환산: "환산",
|
|
"Q_분자^표": "환산분자",
|
|
"Q_분모^표": "환산분모",
|
|
"Q_분자2^표": "상여분자",
|
|
"Q_분모2^표": "상여분모",
|
|
"Q_분자3^표": "휴지분자",
|
|
"Q_분모3^표": "휴지분모",
|
|
"Q_주연료^표": "휘발유량",
|
|
"Q_주연료2^표": "오일량",
|
|
"Q_잡^표": "잡품",
|
|
S_기계: "기계",
|
|
S_지역: "지역",
|
|
S_보정작업: "보정작업",
|
|
S_보정기종: "보정기종",
|
|
S_브레이커: "브레이커",
|
|
S_집게: "집게",
|
|
S_연료: "연료",
|
|
S_직종: "직종",
|
|
S_조종원직종: "조종원직종",
|
|
S_전력계약종별: "전력계약",
|
|
k_기계상각비: "상각",
|
|
k_기계정비비: "정비",
|
|
k_기계관리비: "관리",
|
|
k_기계손료: "계수",
|
|
k_덤프트럭: "상각",
|
|
k_덤프트럭2: "정비",
|
|
k_덤프트럭3: "관리",
|
|
k_브레이커상각: "브레이커상각",
|
|
k_브레이커정비: "브레이커정비",
|
|
k_브레이커관리: "브레이커관리",
|
|
k_집게상각비: "집게상각",
|
|
k_집게정비비: "집게정비",
|
|
k_집게관리비: "집게관리",
|
|
k_체인톱: "체인톱계수",
|
|
r_가산: "가산",
|
|
"r_가산^표": "가산표",
|
|
r_기계잡재료: "잡품",
|
|
r_덤프트럭: "잡품",
|
|
r_비율: "연료비율",
|
|
r_조합잡재료: "조합잡품",
|
|
w_기계운전사: "운전사",
|
|
w_일반기계운전: "운전사",
|
|
w_화물차운전사: "운전사",
|
|
};
|
|
|
|
/** 기계 한 줄 칸 이름 → 화면 이름(기계 제어 구역 값 칸 이름표) */
|
|
const CELL: Record<string, string> = {
|
|
가격: "가격",
|
|
상각비계수: "상각",
|
|
정비비계수: "정비",
|
|
관리비계수: "관리",
|
|
주연료종류: "연료",
|
|
손료계수: "계수",
|
|
주연료: "주연료",
|
|
전력: "전력",
|
|
조종원: "조종원",
|
|
잡재료율: "잡품",
|
|
노무비: "시간노무",
|
|
재료비: "시간재료",
|
|
경비: "시간경비",
|
|
};
|
|
|
|
/** 「P_EQ기계…」 차례 이름 — 그 기호 개수로 문서 꼴을 앎(셋 = 시간당 값 · 다섯 = 연료 · 전력 · 여섯 = 조종원도) · 칸 연결이 직접 입력으로 바뀌어도 같음 */
|
|
const SLOTS: Record<number, string[]> = {
|
|
3: ["시간노무", "시간재료", "시간경비"],
|
|
5: ["가격", "계수", "주연료", "전력", "잡품"],
|
|
6: ["가격", "계수", "주연료", "전력", "조종원", "잡품"],
|
|
};
|
|
|
|
/** 기계경비식 문서의 기호 → 화면 이름(이름 없는 · 겹치는 기호는 빠짐) */
|
|
export function machineAlias(doc: FormulaDoc): Record<string, string> {
|
|
if (doc.부품?.갈래 !== "기계경비식") return {};
|
|
const ids = symbols(doc);
|
|
const slot = SLOTS[ids.filter((x) => x.startsWith("P_EQ기계")).length] ?? [];
|
|
const want = (id: string): string | undefined =>
|
|
NAME[id] ?? (id.startsWith("P_EQ기계") ? slot[Number(id.slice(6) || 1) - 1] : undefined);
|
|
const count = new Map<string, number>();
|
|
const plain = new Set(ids);
|
|
for (const id of ids) {
|
|
const n = want(id);
|
|
if (n) count.set(n, (count.get(n) ?? 0) + 1);
|
|
}
|
|
const out: Record<string, string> = {};
|
|
for (const id of ids) {
|
|
const n = want(id);
|
|
// 겹침(같은 이름 둘 · 안 바뀌는 다른 기호가 이미 그 이름) = 그 기호는 그대로
|
|
if (n && count.get(n) === 1 && !(plain.has(n) && !want(n))) out[id] = n;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
/** 기계 칸 이름(상각비계수 …) → 짧은 이름 · 없으면 그대로 — 기계 제어 구역(836-1) 값 칸 이름표 */
|
|
export const machineCellName = (col: string): string => CELL[col] ?? col;
|