diff --git a/B08_Quantity/B08_Quantity_Build_WorkItemMaster_Forms.py b/B08_Quantity/B08_Quantity_Build_WorkItemMaster_Forms.py index fa97db26..63a44889 100644 --- a/B08_Quantity/B08_Quantity_Build_WorkItemMaster_Forms.py +++ b/B08_Quantity/B08_Quantity_Build_WorkItemMaster_Forms.py @@ -215,14 +215,14 @@ BASIS_JUDGMENTS: dict[str, tuple[str, float, str, str]] = { "F0313": ("10-8-1", 1.0, "일", "원문 「(단위: 인/1일당)」"), "F0314": ("10-8-2", 1.0, "기", "원문 「(단위: 1기당)」"), "F0315": ("10-8-3", 1.0, "일", "원문 「(단위: 1일당)」"), - "F0339": ("12-7-1", 1.0, "일", "원문 「(단위: 일당)」"), - "F0340": ("12-7-2", 1.0, "일", "원문 「(단위: 일당)」"), - "F0341": ("12-8", 1.0, "일", "원문 「(단위: 일당)」"), "F0356": ("12-17-1", 1.0, "일", "원문 「(단위: ㎥/일 당)」"), - "F0395": ("12-38-3", 1.0, "일", "원문 「(단위: 일 당)」"), "F0424": ("13-8", 1.0, "㎡", "원문 「(단위: 인/㎡)」"), "F0444": ("13-14", 1.0, "개", "원문 「(단위: 인/개)」"), - "F0449": ("13-16-2", 1.0, "일", "원문 「(단위: 일 당)」"), + # ⚠ **작업조 표는 넣지 않는다**(2026-09-17 유로폼 호표가 사라져 드러남). + # 12-7-1·12-7-2·12-8 콘크리트 타설 · 12-38-3 유로폼 설치·해체 · 13-16-2 — 원문이 「(단위: 일 당)」 + # 이라 넣고 싶어지지만, 이 표들은 **밑수가 시공량 열**이다(1단위당 = 인원 ÷ 시공량 · + # B09 CrewOutput). 「1일」을 밑수로 박으면 그 길이 막혀 **호표가 통째로 사라진다** + # (2026-09-14 301 판정이 그래서 작업조 표를 미확보 목록에서도 뺐다). # ⚠ **왜곡 고침 하나** — 값이 아니라 **밑수 단위**가 틀려 있던 자리. # 원문 L7489 가 「(단위: 1일당)」인데 마스터가 「개」로 서 있었다(13-10-2 윈치말뚝 박기). "F0430": ("13-10-2", 1.0, "일", "왜곡 고침 — 원문 「(단위: 1일당)」인데 「개」로 서 있었음"), diff --git a/resources/data_work_item_master/_manifest.json b/resources/data_work_item_master/_manifest.json index db4aae31..1e6b70d7 100644 --- a/resources/data_work_item_master/_manifest.json +++ b/resources/data_work_item_master/_manifest.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "dataset_id": "data_work_item_master_manifest", - "generated_at": "2026-09-17T22:46:30+09:00", + "generated_at": "2026-09-17T23:15:06+09:00", "built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py", "source": { "dataset_id": "pum_forest", @@ -12,8 +12,8 @@ "files": [ { "file": "work_item_master_2026-01-01.json", - "sha256": "2914c8cb5ad12e2579963013c1807b57e45e18c9fa731e30672293ab9fa60a0d", - "size_bytes": 1079701 + "sha256": "463a54f13ef9d9bd7de30a43c1d43033f6235ab2912cd6fa63c266b0c040a3c5", + "size_bytes": 1079474 }, { "file": "form_undetermined_2026-01-01.json", diff --git a/resources/data_work_item_master/_manifest_const.json b/resources/data_work_item_master/_manifest_const.json index 61454844..dae06b42 100644 --- a/resources/data_work_item_master/_manifest_const.json +++ b/resources/data_work_item_master/_manifest_const.json @@ -1,7 +1,7 @@ { "schema_version": "1.0", "dataset_id": "data_work_item_master_manifest", - "generated_at": "2026-09-17T22:47:18+09:00", + "generated_at": "2026-09-17T23:15:58+09:00", "built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py", "source": { "dataset_id": "pum_const", @@ -12,7 +12,7 @@ "files": [ { "file": "const_work_item_master_2026-01-01.json", - "sha256": "9f5608bd16e17dd43cb8de636c8161c5a0c8dbf23147e86e5d1d5f97cf4981e6", + "sha256": "b30084103c03cdc837ab456b33fdf0eaac1319311f38549ca493d269a1ac2859", "size_bytes": 4863086 }, { diff --git a/resources/data_work_item_master/const_work_item_master_2026-01-01.json b/resources/data_work_item_master/const_work_item_master_2026-01-01.json index ff6e212c..d9671fc6 100644 --- a/resources/data_work_item_master/const_work_item_master_2026-01-01.json +++ b/resources/data_work_item_master/const_work_item_master_2026-01-01.json @@ -4,7 +4,7 @@ "effective_date": "2026-01-01", "pum_edition": "2026-01-01", "toc_edition": "2026-01-01", - "generated_at": "2026-09-17T22:47:18+09:00", + "generated_at": "2026-09-17T23:15:58+09:00", "dataset_version": { "dataset_id": "pum_const", "effective_date": "2026-01-01", diff --git a/resources/data_work_item_master/work_item_master_2026-01-01.json b/resources/data_work_item_master/work_item_master_2026-01-01.json index 170be5f2..443f9cbb 100644 --- a/resources/data_work_item_master/work_item_master_2026-01-01.json +++ b/resources/data_work_item_master/work_item_master_2026-01-01.json @@ -4,7 +4,7 @@ "effective_date": "2026-01-01", "pum_edition": "2026-01-01", "toc_edition": "산림청고시제2025-82호", - "generated_at": "2026-09-17T22:46:30+09:00", + "generated_at": "2026-09-17T23:15:06+09:00", "dataset_version": { "dataset_id": "pum_forest", "effective_date": "2026-01-01", @@ -25,7 +25,7 @@ "tables_attached": 453, "tables_orphan": 22, "form_undetermined": 0, - "basis_found": 243, + "basis_found": 238, "basis_missing": 92, "basis_grouped": 54, "axis_roles": { @@ -30842,9 +30842,9 @@ "source_line": 6254, "pum_form": "requirement", "form_basis": "직종 표기((인)·인부·공)", - "basis_quantity": 1.0, - "basis_unit": "일", - "basis_source": "사람 판정 — 원문 「(단위: 일당)」", + "basis_quantity": null, + "basis_unit": null, + "basis_source": null, "resource_shares": {}, "partial_ratio": false, "expression_cells": [], @@ -30918,9 +30918,9 @@ "source_line": 6269, "pum_form": "requirement", "form_basis": "직종 표기((인)·인부·공)", - "basis_quantity": 1.0, - "basis_unit": "일", - "basis_source": "사람 판정 — 원문 「(단위: 일당)」", + "basis_quantity": null, + "basis_unit": null, + "basis_source": null, "resource_shares": {}, "partial_ratio": false, "expression_cells": [], @@ -30974,9 +30974,9 @@ "source_line": 6280, "pum_form": "requirement", "form_basis": "직종 표기((인)·인부·공)", - "basis_quantity": 1.0, - "basis_unit": "일", - "basis_source": "사람 판정 — 원문 「(단위: 일당)」", + "basis_quantity": null, + "basis_unit": null, + "basis_source": null, "resource_shares": {}, "partial_ratio": false, "expression_cells": [], @@ -35579,9 +35579,9 @@ "source_line": 6943, "pum_form": "requirement", "form_basis": "직종 표기((인)·인부·공)", - "basis_quantity": 1.0, - "basis_unit": "일", - "basis_source": "사람 판정 — 원문 「(단위: 일 당)」", + "basis_quantity": null, + "basis_unit": null, + "basis_source": null, "resource_shares": {}, "partial_ratio": false, "expression_cells": [], @@ -41421,9 +41421,9 @@ "source_line": 7788, "pum_form": "requirement", "form_basis": "직종 표기((인)·인부·공)", - "basis_quantity": 1.0, - "basis_unit": "일", - "basis_source": "사람 판정 — 원문 「(단위: 일 당)」", + "basis_quantity": null, + "basis_unit": null, + "basis_source": null, "resource_shares": {}, "partial_ratio": false, "expression_cells": [], diff --git a/resources/tester/test_work_item_key_registry.py b/resources/tester/test_work_item_key_registry.py index 5b6e2cae..0500bcbc 100644 --- a/resources/tester/test_work_item_key_registry.py +++ b/resources/tester/test_work_item_key_registry.py @@ -55,7 +55,7 @@ MASTER = OUT_DIR / "work_item_master_2026-01-01.json" #: 2026-09-17 랩탑 메인 둘째 — 헛단위 뺌(인용을 제목으로 읽은 13-3 표 셋 · 부록 사례 번호 겹침 일곱)으로 다시 뜸 #: (옛 be88f730…). 바뀐 줄은 13-3·4-1·4-2·2-1·2-2·3-1·3-2·3-3·13-4-1·13-5-2 의 표 귀속뿐 — #: `test_work_item_master_toc` 가 자리를 잼 · 단가표 대조는 그 파일 머리. -BASELINE_WORK_ITEMS_SHA = "70d41568bc2f5784b5870276da06e822bc08fe83fe83c1682155124233fae974" +BASELINE_WORK_ITEMS_SHA = "fd11a8e01d33cff46db3096a2827e114ce4af603a0dc85ba0a93f9f477ae9dd9" #: 열쇠 작업이 새로 얹은 칸. 지문을 잴 때만 떼어낸다. ADDED_FIELDS = ( @@ -403,6 +403,12 @@ def test_원문_대조_밑수_판정(master: dict) -> None: assert by_id[table_id]["basis_unit"] != "인", table_id # 분모가 둘인 자리도 안 넣는다 — 3-2 작업로 선정은 원문이 「인/1일 1km당」이다 assert by_id["F0076"]["basis_unit"] != "ha" + # ⚠ **작업조 표는 밑수를 비워 둔다** — 원문이 「(단위: 일 당)」이라도 넣지 않는다. + # 밑수가 시공량 열이라 「1일」을 박으면 그 길이 막혀 호표가 통째로 사라진다 + # (2026-09-17 유로폼 12-38-3 에서 실제로 사라져 드러남). + for table_id in ("F0339", "F0340", "F0341", "F0395", "F0449"): + assert by_id[table_id]["crew_table"] is True, table_id + assert by_id[table_id]["basis_unit"] is None, table_id def test_표머리_몫꼴_밑수_읽기() -> None: