feat(839-1): 기계 제어 구역 값 칸 이름표도 짧은 이름 · 「P_EQ기계」 이름을 문서 꼴 차례로(직접 입력해도 안 변함)
- machineCellName(칸) — 기계 제어 구역(836-1) 값 칸 이름표(상각비계수 → 상각 …) · 툴팁 = 원래 칸 이름 - 「P_EQ기계…」 이름 = 그 기호 개수(3 · 5 · 6)로 문서 꼴을 앎 — 칸 연결이 숫자로 바뀌어도 같은 이름 - test_839_1 에 차례 이름 = 읽는 칸 · 직접 입력 뒤 같음 추가 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ import {
|
||||
} from "../common_util/common_util_formula_doc_cover";
|
||||
import { subInputs, type StackDoc } from "../common_util/common_util_line_stack";
|
||||
import type { Picked } from "../common_util/common_util_line_stack_pick";
|
||||
import { machineCellName } from "../common_util/common_util_machine_symbol_name";
|
||||
import { openFindPicker } from "../M02_MasterTemplete/M02_MasterTemplete_Find_Pick";
|
||||
import { openStackPick } from "./line_stack_pick";
|
||||
import { lt } from "./line_stack_text";
|
||||
@@ -146,7 +147,11 @@ export function buildMachineCtl(h: CtlHooks, link: Link | undefined): HTMLElemen
|
||||
: numBox(col, now, UNIT[col] ?? "", ro, setVal);
|
||||
const row = el("div", {
|
||||
className: "lstk-frow",
|
||||
children: [el("b", { className: "lstk-sym", text: col }), "=", box],
|
||||
children: [
|
||||
el("b", { className: "lstk-sym", text: machineCellName(col), attrs: { title: col } }),
|
||||
"=",
|
||||
box,
|
||||
],
|
||||
});
|
||||
if (mine !== undefined) {
|
||||
const tag = createBadge(lt("Ctl_Changed"), "info", { size: 18 });
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* 화면 없음(시험이 Node 로 돌림) · 기계 제어 구역(836-1)도 `machineAlias` 로 같은 이름
|
||||
* ========================================================================== */
|
||||
|
||||
import { varId, type FormulaDoc } from "./common_util_formula_doc";
|
||||
import type { FormulaDoc } from "./common_util_formula_doc";
|
||||
import { symbols } from "./common_util_line_stack";
|
||||
|
||||
/** 기호 → 이름(품셈 말 줄임 — 가격 · 상각 · 정비 · 관리 · 손료 · 가산 · 잡품) */
|
||||
@@ -72,9 +72,13 @@ const NAME: Record<string, string> = {
|
||||
w_화물차운전사: "운전사",
|
||||
};
|
||||
|
||||
/** 「P_EQ기계…」(기계 한 줄 칸 읽기) = 읽는 칸 이름으로 */
|
||||
/** 기계 한 줄 칸 이름 → 화면 이름(기계 제어 구역 값 칸 이름표) */
|
||||
const CELL: Record<string, string> = {
|
||||
가격: "가격",
|
||||
상각비계수: "상각",
|
||||
정비비계수: "정비",
|
||||
관리비계수: "관리",
|
||||
주연료종류: "연료",
|
||||
손료계수: "계수",
|
||||
주연료: "주연료",
|
||||
전력: "전력",
|
||||
@@ -85,13 +89,20 @@ 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 cell = new Map((doc.변수 ?? []).map((v) => [varId(v), String(v.연결?.칸 ?? "")]));
|
||||
const slot = SLOTS[ids.filter((x) => x.startsWith("P_EQ기계")).length] ?? [];
|
||||
const want = (id: string): string | undefined =>
|
||||
NAME[id] ?? (id.startsWith("P_EQ기계") ? CELL[cell.get(id) ?? ""] : 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) {
|
||||
@@ -106,3 +117,6 @@ export function machineAlias(doc: FormulaDoc): Record<string, string> {
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/** 기계 칸 이름(상각비계수 …) → 짧은 이름 · 없으면 그대로 — 기계 제어 구역(836-1) 값 칸 이름표 */
|
||||
export const machineCellName = (col: string): string => CELL[col] ?? col;
|
||||
|
||||
@@ -99,3 +99,33 @@ def test_손으로_바꾼_기호는_그대로():
|
||||
v["아래"] = "차량" # 사용자가 손으로 고친 기호 = P_차량
|
||||
alias = _ts("별칭", [{"문서": doc}])[0]["별칭"]
|
||||
assert "P_차량" not in alias # 그림 사전 안 탐 = 그 글 그대로
|
||||
|
||||
|
||||
def test_칸_읽는_기호_차례_이름_칸과_같음():
|
||||
"""「P_EQ기계…」 이름 = 문서 모양 차례 — 읽는 칸(연결 칸)과 같고, 직접 입력으로 바뀌어도 안 변함."""
|
||||
want = {
|
||||
"가격": "가격",
|
||||
"손료계수": "계수",
|
||||
"주연료": "주연료",
|
||||
"전력": "전력",
|
||||
"조종원": "조종원",
|
||||
"잡재료율": "잡품",
|
||||
"노무비": "시간노무",
|
||||
"재료비": "시간재료",
|
||||
"경비": "시간경비",
|
||||
}
|
||||
docs = _machines()
|
||||
for k in ("GC001199", "GC001200", "GC001201"):
|
||||
doc = copy.deepcopy(docs[k])
|
||||
eq = {
|
||||
f"P_{v['아래']}": want[v["연결"]["칸"]]
|
||||
for v in doc["변수"]
|
||||
if v["기호"] == "P" and v["아래"].startswith("EQ기계")
|
||||
}
|
||||
got = _ts("별칭", [{"문서": doc}])[0]["별칭"]
|
||||
assert {i: got[i] for i in eq} == eq, k
|
||||
for v in doc["변수"]:
|
||||
if v["아래"].startswith("EQ기계"):
|
||||
v["연결"] = {"갈래": "숫자", "값": 7} # 직접 입력 = 칸 연결 없음
|
||||
typed = _ts("별칭", [{"문서": doc}])[0]["별칭"]
|
||||
assert {i: typed[i] for i in eq} == eq, k
|
||||
|
||||
Reference in New Issue
Block a user