diff --git a/Z01_MasterData/Z01_MasterData_BasePrices.py b/Z01_MasterData/Z01_MasterData_BasePrices.py index 4a17fb8d..9db2ba37 100644 --- a/Z01_MasterData/Z01_MasterData_BasePrices.py +++ b/Z01_MasterData/Z01_MasterData_BasePrices.py @@ -427,14 +427,21 @@ def kind_label(kind: str) -> str: return named.get("name_ko") or kind +def group_label(group: str) -> str: + """상자 이름 — 이름표 `base_price_groups[갈래].name_ko` 에서만(없으면 영문 그대로 · 화면은 `group_label` 을 읽음).""" + named = (tables.load_labels().get("base_price_groups") or {}).get(group) or {} + return named.get("name_ko") or group + + def kinds() -> list[dict[str, Any]]: """화면이 상자를 세울 목록 — **서버가 냄**(화면이 제 코드에 들면 새 kind 가 조용히 안 뜸). - 갈래 · kind · 한글 이름(이름표) · 줄 수. + 갈래 · 갈래 한글 이름 · kind · 한글 이름(이름표) · 줄 수. """ return [ { "group": kind_group(kind), + "group_label": group_label(kind_group(kind)), "kind": kind, "label": kind_label(kind), "rows": len(rows(kind)), diff --git a/Z01_MasterData/Z01_MasterData_WorkItems.py b/Z01_MasterData/Z01_MasterData_WorkItems.py index 766efd62..37b271eb 100644 --- a/Z01_MasterData/Z01_MasterData_WorkItems.py +++ b/Z01_MasterData/Z01_MasterData_WorkItems.py @@ -77,6 +77,8 @@ def base_rows(kind: str) -> list[dict[str, Any]]: return [] d, name = found items, by, children = _tree(d) + # 계산 규칙 이름 — 이름표 `value_overrides["work_item_master::<방식>"]`(「아래를 단계로 다 더함」) · 없으면 영문 + named = tables.load_labels().get("value_overrides") or {} rows = [] for item in items: if not item.get("tables"): @@ -100,7 +102,10 @@ def base_rows(kind: str) -> list[dict[str, Any]]: "name": _path(item, by), "variant": variant, "pum_tables": [t["pum_table_id"] for t in item["tables"]], - "rule": parent.get("parent_mode"), + "rule": (named.get(f"work_item_master::{parent.get('parent_mode')}") or {}).get( + "name_ko" + ) + or parent.get("parent_mode"), "step_weight": weight, "effective_date": d.get("pum_edition") or d.get("effective_date"), } diff --git a/resources/tester/test_z01_work_items.py b/resources/tester/test_z01_work_items.py index ac7c4d2a..64828a8d 100644 --- a/resources/tester/test_z01_work_items.py +++ b/resources/tester/test_z01_work_items.py @@ -39,6 +39,12 @@ def test_산림_평평한_잎_목록과_계산_규칙(client: TestClient) -> Non listed = client.get("/api/master-data/base-prices").json()["kinds"] forest = next(i for i in listed if i["kind"] == "work_item_forest") assert forest["group"] == "work_item" and forest["rows"] == 627 # 갈래마다 한 줄 + # 상자 이름은 이름표 것 — 영문 키(work_item)로 뜨던 자리(2026-09-17 브레인 ①) + assert {i["group"]: i["group_label"] for i in listed} == { + "base_price": "기초단가", + "pumsem_basis": "품셈 기준", + "work_item": "공종 축", + } table = _get(client, "work_item_forest", size=500, axis_role="") # 「전부」 — 총칙까지 assert table["total"] == 627 and table["stats"] == {"work_items": 365, "units": 627} @@ -55,7 +61,9 @@ def test_산림_평평한_잎_목록과_계산_규칙(client: TestClient) -> Non assert modes.count("choose_one") == 91 and modes.count("sum_steps") == 3 blast = next(r for r in table["rules"] if r["work_item_code"] == "FP-09-05") assert [s["weight"] for s in blast["steps"]] == ["0.1", "0.9", "1"] - assert by_code["FP-09-05-02"]["rule"] == "sum_steps" + # 계산 규칙 칸은 이름표 이름 — 「sum_steps」 영문으로는 더해야 하는 줄로 안 읽힘(브레인 ②) + assert by_code["FP-09-05-02"]["rule"] == "아래를 단계로 다 더함" + assert by_code["FP-09-03-02"]["rule"] == "아래 하나를 고름" assert by_code["FP-09-05-02"]["step_weight"] == "0.9" # 2026-09-17 FW- 가 옴(데스크탑 서브) — 알림이 사라지는 것이 곧 열쇠가 섰다는 증거. assert all(r["@id"].startswith("FW-") for r in rows) # 불변 열쇠(데스크탑 서브 7dd2c515)