fix(B08): 마스터 밑수 판독 둘 — 「인」은 숫자가 붙을 때만 · 칸을 이어 붙여 읽지 않음

「인」 오독 넷(원문 대조)
- 8-6-2 드론방제·8-6-3 지상방제 「(단위 : 인)」은 **소요인력**이지 공종 밑수가 아님
- 13-2-4 야면석 채집 「(단위: 인 당)」은 표 안이 ㎡당·㎥당 두 줄이라 하나로 못 정함
- ⚠ 넓게 「인」을 버리면 2-2-5 천공기가 사라짐(「천공인부 1인당 1대」) — 숫자가 붙었나로 좁게 가름

칸 이어붙임 — 앞 칸 값 + 뒤 칸 단위로 **원문에 없는 밑수**가 서던 자리
- 13-2-4 「0.36 ㎥당」(0.36 은 뒷길이 60 의 ㎡당 값)
- 5-19-2 「30 ㎥당」(30 은 표토두께 ㎝)
- ⇒ detect_basis 가 **칸 하나 안에서만** 봄. 「100㎥당」처럼 한 칸에 다 있는 것은 그대로

- 마스터 재생성: 밑수 확보 182 → 180 (없는 값 둘이 빠지고 넷이 미확보로 정직해짐)
- tmp/tests/test_b08_master_basis_person.py 신설(5건)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-09 11:46:58 +09:00
co-authored by Claude Opus 5
parent 0e9c9c5cce
commit 4fc5b38d61
4 changed files with 97 additions and 32 deletions
@@ -1,7 +1,7 @@
{
"schema_version": "1.0",
"dataset_id": "data_work_item_master_manifest",
"generated_at": "2026-09-08T08:33:10+09:00",
"generated_at": "2026-09-09T11:44:28+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": "3752af1e0328a2faf4947268e449e0bc602a0738cc6a29a78ed71d343cf2e583",
"size_bytes": 856832
"sha256": "3462899767156784158f724513c793052711806260e60db59d3e2a5fbf1fab21",
"size_bytes": 856810
},
{
"file": "form_undetermined_2026-01-01.json",
@@ -22,8 +22,8 @@
},
{
"file": "basis_missing_2026-01-01.json",
"sha256": "244851609c65ba8adbfc318668224cbf3a81032e9271cfda916de435d460dd92",
"size_bytes": 18360
"sha256": "644b179f7d4b57641fc4ea6df27ef3e3904a03a0bf49c6a4a8bcf44f1195bdb1",
"size_bytes": 19018
}
]
}
@@ -280,6 +280,12 @@
"pum_form": "requirement",
"line": 2653
},
{
"pum_table_id": "F0127",
"section": "5-19-2. 표토펴기 및 고르기",
"pum_form": "requirement",
"line": 2664
},
{
"pum_table_id": "F0129",
"section": "5-21. 표토이식",
@@ -586,6 +592,24 @@
"pum_form": "requirement",
"line": 4434
},
{
"pum_table_id": "F0228",
"section": "8-6-2. 드론방제",
"pum_form": "requirement",
"line": 4516
},
{
"pum_table_id": "F0229",
"section": "8-6-2. 드론방제",
"pum_form": "requirement",
"line": 4536
},
{
"pum_table_id": "F0230",
"section": "8-6-3. 지상방제",
"pum_form": "requirement",
"line": 4557
},
{
"pum_table_id": "F0232",
"section": "8-7. 방제 실행 등록",
@@ -754,6 +778,12 @@
"pum_form": "requirement",
"line": 6943
},
{
"pum_table_id": "F0401",
"section": "13-2-4. 야면석 채집(인력)",
"pum_form": "requirement",
"line": 7025
},
{
"pum_table_id": "F0405",
"section": "13-3. 기초다짐 및 뒤채움’ 항을 적용한다.",
@@ -2,7 +2,7 @@
"schema_version": "1.0",
"dataset_id": "work_item_master_forest",
"effective_date": "2026-01-01",
"generated_at": "2026-09-08T08:33:10+09:00",
"generated_at": "2026-09-09T11:44:28+09:00",
"dataset_version": {
"dataset_id": "pum_forest",
"effective_date": "2026-01-01",
@@ -21,9 +21,9 @@
"tables_attached": 456,
"tables_orphan": 19,
"form_undetermined": 77,
"basis_found": 185,
"basis_missing": 135,
"basis_grouped": 36
"basis_found": 180,
"basis_missing": 140,
"basis_grouped": 35
},
"orphan_tables": [
{
@@ -15789,9 +15789,9 @@
"source_line": 2664,
"pum_form": "requirement",
"form_basis": "직종 표기((인)·인부·공)",
"basis_quantity": 30.0,
"basis_unit": "㎥",
"basis_source": "표 안",
"basis_quantity": null,
"basis_unit": null,
"basis_source": null,
"resource_shares": {},
"partial_ratio": false,
"expression_cells": [],
@@ -26997,9 +26997,9 @@
"source_line": 4516,
"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": [],
@@ -27087,9 +27087,9 @@
"source_line": 4536,
"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": [],
@@ -27187,9 +27187,9 @@
"source_line": 4557,
"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": [],
@@ -39551,9 +39551,9 @@
"source_line": 7025,
"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": [],