fix(b08): 작업조 표에는 밑수를 넣지 않음 — 유로폼 호표가 사라졌던 것

앞 커밋에서 원문 「(단위: 일 당)」을 보고 12-7-1·12-7-2·12-8·12-38-3·13-16-2 에 밑수 「1일」을
넣었으나, 이 표들은 **작업조 표**로 밑수가 시공량 열이다(1단위당 = 인원 ÷ 시공량 · B09 CrewOutput).
「1일」이 박히자 그 길이 막혀 **`B-FP-12-38#보통` 호표가 통째로 사라졌음**(시험 둘 빨감).
2026-09-14 301 판정이 작업조 표를 미확보 목록에서도 빼 둔 까닭이 이것이었음.

- 다섯을 판정에서 뺌(F0339·F0340·F0341·F0395·F0449) · 까닭을 코드에 적음
- 밑수 확보 243 → 238 · 미확보 92 그대로(작업조 표는 애초에 미확보 목록에 안 듦)
- 「작업조 표는 밑수가 비어 있어야 한다」를 시험으로 못박음 — 다시 넣으면 빨감

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsGw1Dz9HmhuAxGisxmDPF
This commit is contained in:
2026-09-17 23:20:04 +09:00
co-authored by Claude Opus 5
parent eb3fb389b8
commit c3da333e61
6 changed files with 35 additions and 29 deletions
@@ -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일당)」인데 「개」로 서 있었음"),
@@ -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",
@@ -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
},
{
@@ -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",
@@ -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": [],
@@ -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: