feat(b08): 원천 벌 다시 뽑힌 뒤 마스터 다시 지음 — 밑수 238→242 · 건설 새 표 열 · 5-26 밑수 992㎡

랩탑 메인의 추출기(줄 번호를 안 쓰고 글자로 맞대는 쪽)가 서서 원천 벌이 다시 뽑혔음.
막혀 있던 「다시 짓기」를 그 위에서 돌림.

- 산림 밑수 확보 **238 → 242** · 미확보 92 → 88 (5-19-1 · 5-27 · 5-28-1 · 9-21 되살아남)
- 건설 표 **2,192 → 2,202** — 코덱스가 되살린 제8장 손료표 열(C2193~C2202) · 표 귀속 2,202/2,202
- 건설 [주] 실린 표 1,106 → 1,110 · 형태 미판정 881 → 891(새 표 열이 미판정으로 들어옴)

⚠ **5-26-1·2·3 밑수를 사람 판정 100㎡ → 원문 992㎡ 로 물림**(브레인 판정)
  원문 L2878·L2892·L2905 가 「(인/992㎡당)」. 앞서 100㎡ 는 **머리가 소실돼 원문을 못 읽던 때**
  흔한 밑수로 메운 값이었음 — 이 고리의 잣대가 「원문이 정본」이라 사람 판정이 물러남.
  ⚠ 100 과 992 는 열 배 가까이 달라 **금액이 크게 갈리는 자리** — 사유를 코드와 시험에 남김
  (992㎡ 는 「0.1정(1반)」에 해당하는 옛 면적 단위)

시험·이름표 손질 — 지문 갱신 · 건설 표 수 2,192 → 2,202 · 이름표 줄 수(원천 2,202 · 미확보 88 ·
건설 미판정 891) · 「사람 판정은 원문이 나오면 물러난다」를 시험으로 못박음

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsGw1Dz9HmhuAxGisxmDPF
This commit is contained in:
2026-09-18 02:30:49 +09:00
co-authored by Claude Opus 5
parent 1614c545bf
commit 88a9df01a5
12 changed files with 1852 additions and 776 deletions
@@ -166,10 +166,14 @@ FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
"F0140": (
"5-26-1",
"requirement",
"머리 소실 — 윗 2줄 막갈이깊이(cm)를 열 머리로 되살림, 토성×깊이별 보통인부(100㎡당)",
"머리 소실 — 윗 2줄 막갈이깊이(cm)를 열 머리로 되살림, 토성×깊이별 보통인부(992㎡당)",
),
"F0141": ("5-26-2", "requirement", "위와 같은 모양(흙부수기) — 토성×깊이별 보통인부(992㎡당)"),
"F0142": (
"5-26-3",
"requirement",
"위와 같은 모양(돌자갈치우기) — 토성×깊이별 보통인부(992㎡당)",
),
"F0141": ("5-26-2", "requirement", "위와 같은 모양(중갈이) — 토성×깊이별 보통인부(100㎡당)"),
"F0142": ("5-26-3", "requirement", "위와 같은 모양(전면갈이) — 토성×깊이별 보통인부(100㎡당)"),
"F0195": (
"7-14",
"productivity",
@@ -229,9 +233,19 @@ FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
#: 근거 — `resources/knowledge/technical_info/01_임도/05_원가정보/
#: 산림품셈_form_미판정_14개_원문대조_규명.json` (2026-09-17 안티그래비티 원문 대조).
BASIS_JUDGMENTS: dict[str, tuple[str, float, str, str]] = {
"F0140": ("5-26-1", 100.0, "", "막갈이 — 머리 소실 · 원문 「100㎡당」"),
"F0141": ("5-26-2", 100.0, "", "중갈이 — 위와 같음"),
"F0142": ("5-26-3", 100.0, "", "전면갈이 — 위와 같음"),
# ⚠ 2026-09-18 **사람 판정을 물림** — 원문(인/992㎡당)」이다(코덱스가 PDF 에서 되살린 줄 ·
# 원문 L2878·L2892·L2905). 앞서 100㎡ 로 적어 둔 것은 **머리가 소실돼 원문을 못 읽던 때**
# 흔한 밑수로 메운 값이었다. 이 고리의 잣대는 「원문이 정본」이므로 사람 판정이 물러난다.
# ⚠ 992㎡ 는 「0.1정(1반) ≒ 992㎡」 로, 옛 면적 단위를 그대로 쓴 자리다 — 100 과 열 배 가까이
# 달라 **금액이 크게 갈린다.** 그래서 사유를 남긴다.
"F0140": (
"5-26-1",
992.0,
"",
"막갈이 — 원문 「(인/992㎡당)」(앞서 100㎡ 로 메워 둔 것을 물림)",
),
"F0141": ("5-26-2", 992.0, "", "흙부수기 — 원문 「(인/992㎡당)」"),
"F0142": ("5-26-3", 992.0, "", "돌자갈치우기 — 원문 「(인/992㎡당)」"),
"F0322": ("10-13-1", 1000.0, "", "묘목 운반 — 원문 「묘목 1,000본당」"),
"F0323": ("10-13-2", 1000.0, "", "위와 같음"),
"F0333": ("12-1-3", 1.0, "", "원문 「㎥당」"),
@@ -2114,7 +2114,7 @@
"name_ko": "건설품셈 표",
"summary": "표 하나가 한 줄. 머리와 줄을 원문 그대로 담는다.",
"shape": "list",
"rows": 2192,
"rows": 2202,
"columns": [
{
"key": "table_id",
@@ -6363,7 +6363,7 @@
"name_ko": "밑수 못 찾은 표",
"summary": "기준 수량을 못 읽은 품셈 표. 1 단위당으로 단정하면 곱셈이 틀린다.",
"shape": "list",
"rows": 92,
"rows": 88,
"columns": [
{
"key": "pum_table_id",
@@ -7261,7 +7261,7 @@
"name_ko": "형태 미판정 표",
"summary": "생산량형인지 소요량형인지 못 정한 표.",
"shape": "list",
"rows": 881,
"rows": 891,
"columns": [
{
"key": "pum_table_id",
@@ -1,19 +1,19 @@
{
"schema_version": "1.0",
"dataset_id": "data_work_item_master_manifest",
"generated_at": "2026-09-18T00:27:56+09:00",
"generated_at": "2026-09-18T02:18:51+09:00",
"built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py",
"source": {
"dataset_id": "pum_forest",
"effective_date": "2026-01-01",
"sha256": "111208fd482dcfc3b8c8dd58004b153382fc46555d0d00985c19b45ebbc2e0dd",
"sha256": "c4724f8371a3741d0c8a37bbdd36bc49448b3ca71574cb37c609a70709f5f167",
"file": "pum_forest_2026.json"
},
"files": [
{
"file": "work_item_master_2026-01-01.json",
"sha256": "da54021cb0bb35140f1fd9e16b3535f0e7619ba633a210547e2845c1fbafbe81",
"size_bytes": 1081123
"sha256": "0831920a5895a9bd804b7cce02308e15cb65ca5b570c6322b1d0690071b81530",
"size_bytes": 1081225
},
{
"file": "form_undetermined_2026-01-01.json",
@@ -22,8 +22,8 @@
},
{
"file": "basis_missing_2026-01-01.json",
"sha256": "e68975380e77d3f2d016cc264c22382335019220ad16ac9c3ad16cfb82e5769d",
"size_bytes": 12739
"sha256": "ed79b3dbcc6df0c1b07d9dd9eb6fba2c4bcd4d99debf766922052791e3218243",
"size_bytes": 12229
}
]
}
@@ -1,28 +1,28 @@
{
"schema_version": "1.0",
"dataset_id": "data_work_item_master_manifest",
"generated_at": "2026-09-18T00:28:45+09:00",
"generated_at": "2026-09-18T02:19:39+09:00",
"built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py",
"source": {
"dataset_id": "pum_const",
"effective_date": "2026-01-01",
"sha256": "dbc46ef1316b83ed710f25bc402dcecc4a979bbfc4a6641a0554252bca326ca7",
"sha256": "615628a5eba6109ce5f2bed96a1375486ce950ae6398f72d61285842947dc39f",
"file": "pum_const_2026.json"
},
"files": [
{
"file": "const_work_item_master_2026-01-01.json",
"sha256": "3b9de46a4c1153ebae6785535e2e5903a19f518b01a4eeab5528f327e02b8357",
"size_bytes": 4486399
"sha256": "865b096a2256c869e74742e075fc6a02eff191dfd3fdce7e76ec489ca5bd7e66",
"size_bytes": 4501243
},
{
"file": "const_form_undetermined_2026-01-01.json",
"sha256": "dbb4f245cb9aee71325ab73c1325ee5f06ff19e0e7527de2053d08a7eb16282e",
"size_bytes": 486761
"sha256": "aa75542987d4421fe26e0e6653c5fd7d393a153b5ad9470fcd7b605b5f9c5cb8",
"size_bytes": 493520
},
{
"file": "const_basis_missing_2026-01-01.json",
"sha256": "65f401c717fcbb97323d60240f8207a1d8e7598c2f8a5f6e1b57e2f0b637bd85",
"sha256": "125bf1d2ee64cfd771cbe1c068e50a4623210f9969aec6ba1061323ef86624b8",
"size_bytes": 72968
}
]
@@ -112,449 +112,425 @@
"pum_form": "requirement",
"line": 2496
},
{
"pum_table_id": "F0126",
"section": "5-19-1. 표토절취 및 모으기",
"pum_form": "requirement",
"line": 2653
},
{
"pum_table_id": "F0127",
"section": "5-19-2. 표토펴기 및 고르기",
"pum_form": "requirement",
"line": 2664
"line": 2668
},
{
"pum_table_id": "F0129",
"section": "5-21. 표토이식",
"pum_form": "requirement",
"line": 2689
},
{
"pum_table_id": "F0143",
"section": "5-27. 식재면 관리",
"pum_form": "requirement",
"line": 2905
},
{
"pum_table_id": "F0144",
"section": "5-28-1. 짚망",
"pum_form": "requirement",
"line": 2919
"line": 2693
},
{
"pum_table_id": "F0154",
"section": "6-2-1. 둘레베기",
"pum_form": "requirement",
"line": 3079
"line": 3095
},
{
"pum_table_id": "F0155",
"section": "6-2-2. 줄베기",
"pum_form": "requirement",
"line": 3089
"line": 3105
},
{
"pum_table_id": "F0156",
"section": "6-2-3. 모두베기",
"pum_form": "requirement",
"line": 3105
"line": 3121
},
{
"pum_table_id": "F0157",
"section": "6-3. 맹아제거",
"pum_form": "requirement",
"line": 3122
"line": 3138
},
{
"pum_table_id": "F0158",
"section": "6-4-1. 덩굴걷기",
"pum_form": "requirement",
"line": 3143
"line": 3159
},
{
"pum_table_id": "F0159",
"section": "6-4-2. 덩굴 약제 살포처리",
"pum_form": "requirement",
"line": 3153
"line": 3169
},
{
"pum_table_id": "F0160",
"section": "6-4-3. 소금처리",
"pum_form": "requirement",
"line": 3164
"line": 3180
},
{
"pum_table_id": "F0161",
"section": "6-4-4. 뿌리제거",
"pum_form": "requirement",
"line": 3183
"line": 3199
},
{
"pum_table_id": "F0163",
"section": "6-5. 어린나무 가꾸기",
"pum_form": "requirement",
"line": 3244
"line": 3260
},
{
"pum_table_id": "F0169",
"section": "7-1-1. 수확",
"pum_form": "productivity",
"line": 3361
"line": 3377
},
{
"pum_table_id": "F0170",
"section": "7-1-1. 수확",
"pum_form": "requirement",
"line": 3371
"line": 3387
},
{
"pum_table_id": "F0171",
"section": "7-1-1. 수확",
"pum_form": "requirement",
"line": 3381
"line": 3397
},
{
"pum_table_id": "F0172",
"section": "7-1-2. 숲가꾸기, 병해충방제",
"pum_form": "requirement",
"line": 3395
"line": 3411
},
{
"pum_table_id": "F0174",
"section": "7-3. 아키야윈치(임업용 윈치) 집재",
"pum_form": "requirement",
"line": 3439
"line": 3455
},
{
"pum_table_id": "F0175",
"section": "7-4-1. 수확",
"pum_form": "requirement",
"line": 3452
"line": 3468
},
{
"pum_table_id": "F0176",
"section": "7-4-2. 숲가꾸기, 산림병해충방제",
"pum_form": "requirement",
"line": 3476
"line": 3492
},
{
"pum_table_id": "F0177",
"section": "7-5-1. 수확",
"pum_form": "requirement",
"line": 3496
"line": 3512
},
{
"pum_table_id": "F0178",
"section": "7-5-2. 숲가꾸기, 병해충방제",
"pum_form": "requirement",
"line": 3519
"line": 3535
},
{
"pum_table_id": "F0179",
"section": "7-6. 스윙야더 집재",
"pum_form": "requirement",
"line": 3542
"line": 3558
},
{
"pum_table_id": "F0180",
"section": "7-7-1. 수확",
"pum_form": "requirement",
"line": 3556
"line": 3572
},
{
"pum_table_id": "F0182",
"section": "7-8-1. 가선설치",
"pum_form": "requirement",
"line": 3607
"line": 3623
},
{
"pum_table_id": "F0183",
"section": "7-8-2. 가선해체",
"pum_form": "requirement",
"line": 3619
"line": 3635
},
{
"pum_table_id": "F0184",
"section": "7-8-3. 집재 소요인력",
"pum_form": "requirement",
"line": 3631
"line": 3647
},
{
"pum_table_id": "F0191",
"section": "7-11. 동력상하차기(우드그래플) 집재-수확",
"pum_form": "requirement",
"line": 3745
"line": 3761
},
{
"pum_table_id": "F0192",
"section": "7-12. 동력상하차기(우드그래플) 집적",
"pum_form": "requirement",
"line": 3763
"line": 3779
},
{
"pum_table_id": "F0195",
"section": "7-14. 원목 운반-수확",
"pum_form": "productivity",
"line": 3849
"line": 3865
},
{
"pum_table_id": "F0196",
"section": "7-15-1. 수확",
"pum_form": "productivity",
"line": 3864
"line": 3880
},
{
"pum_table_id": "F0197",
"section": "7-15-2 숲가꾸기, 병해충방제",
"pum_form": "productivity",
"line": 3878
"line": 3894
},
{
"pum_table_id": "F0198",
"section": "7-16. 소형 포워더 운재",
"pum_form": "productivity",
"line": 3898
"line": 3914
},
{
"pum_table_id": "F0199",
"section": "7-17. 소형트럭 운재",
"pum_form": "productivity",
"line": 3912
"line": 3928
},
{
"pum_table_id": "F0200",
"section": "7-18. 지조운반(포워더 활용)",
"pum_form": "productivity",
"line": 3926
"line": 3942
},
{
"pum_table_id": "F0202",
"section": "8-1-2. 약제주입병",
"pum_form": "requirement",
"line": 3964
"line": 3980
},
{
"pum_table_id": "F0203",
"section": "8-2-1. 소나무재선충병",
"pum_form": "requirement",
"line": 3982
"line": 3998
},
{
"pum_table_id": "F0204",
"section": "8-2-1. 소나무재선충병",
"pum_form": "requirement",
"line": 3999
"line": 4015
},
{
"pum_table_id": "F0206",
"section": "8-2-1. 소나무재선충병",
"pum_form": "requirement",
"line": 4023
"line": 4039
},
{
"pum_table_id": "F0207",
"section": "8-2-1. 소나무재선충병",
"pum_form": "requirement",
"line": 4041
"line": 4057
},
{
"pum_table_id": "F0209",
"section": "8-2-2. 솔잎혹파리",
"pum_form": "requirement",
"line": 4080
"line": 4096
},
{
"pum_table_id": "F0210",
"section": "8-2-2. 솔잎혹파리",
"pum_form": "requirement",
"line": 4108
"line": 4124
},
{
"pum_table_id": "F0211",
"section": "8-2-2. 솔잎혹파리",
"pum_form": "requirement",
"line": 4136
"line": 4152
},
{
"pum_table_id": "F0213",
"section": "8-2-3. 솔껍질깍지벌레",
"pum_form": "requirement",
"line": 4182
"line": 4198
},
{
"pum_table_id": "F0214",
"section": "8-2-3. 솔껍질깍지벌레",
"pum_form": "requirement",
"line": 4210
"line": 4226
},
{
"pum_table_id": "F0215",
"section": "8-2-3. 솔껍질깍지벌레",
"pum_form": "requirement",
"line": 4238
"line": 4254
},
{
"pum_table_id": "F0217",
"section": "8-2-4. 솔나방",
"pum_form": "requirement",
"line": 4279
"line": 4295
},
{
"pum_table_id": "F0219",
"section": "8-2-5. 푸사리움가지마름병",
"pum_form": "requirement",
"line": 4320
"line": 4336
},
{
"pum_table_id": "F0220",
"section": "8-3. 소각, 매몰, 훈증, 박피",
"pum_form": "productivity",
"line": 4348
"line": 4364
},
{
"pum_table_id": "F0224",
"section": "8-5. 페르몬 유인트랩",
"pum_form": "requirement",
"line": 4434
"line": 4450
},
{
"pum_table_id": "F0228",
"section": "8-6-2. 드론방제",
"pum_form": "requirement",
"line": 4516
"line": 4532
},
{
"pum_table_id": "F0229",
"section": "8-6-2. 드론방제",
"pum_form": "requirement",
"line": 4536
"line": 4552
},
{
"pum_table_id": "F0230",
"section": "8-6-3. 지상방제",
"pum_form": "requirement",
"line": 4557
"line": 4573
},
{
"pum_table_id": "F0232",
"section": "8-7. 방제 실행 등록",
"pum_form": "requirement",
"line": 4583
"line": 4599
},
{
"pum_table_id": "F0236",
"section": "8-10. 그물망 피복",
"pum_form": "requirement",
"line": 4631
"line": 4647
},
{
"pum_table_id": "F0237",
"section": "8-11. 이동식 임목 파쇄",
"pum_form": "productivity",
"line": 4649
"line": 4665
},
{
"pum_table_id": "F0238",
"section": "9-2. 노선 굴진 보조원",
"pum_form": "requirement",
"line": 4675
"line": 4691
},
{
"pum_table_id": "F0251",
"section": "9-8-1. T=30㎝ 미만",
"pum_form": "requirement",
"line": 4860
},
{
"pum_table_id": "F0294",
"section": "9-21. 제근",
"pum_form": "requirement",
"line": 5512
"line": 4876
},
{
"pum_table_id": "F0304",
"section": "10-6-3. 기타 임업자재",
"pum_form": "requirement",
"line": 5669
"line": 5687
},
{
"pum_table_id": "F0317",
"section": "10-10-1. 콘크리트 및 골재운반(지상)",
"pum_form": "requirement",
"line": 5884
"line": 5902
},
{
"pum_table_id": "F0318",
"section": "10-10-2. 그 외 자재의 운반품셈",
"pum_form": "requirement",
"line": 5894
"line": 5912
},
{
"pum_table_id": "F0337",
"section": "12-5. 문양거푸집(07m)",
"pum_form": "requirement",
"line": 6217
"line": 6239
},
{
"pum_table_id": "F0350",
"section": "12-12. 날개벽",
"pum_form": "requirement",
"line": 6421
"line": 6443
},
{
"pum_table_id": "F0355",
"section": "12-17-1. 펌프카 타설",
"pum_form": "requirement",
"line": 6499
"line": 6521
},
{
"pum_table_id": "F0362",
"section": "12-2 표면 마무리를 따른다.",
"pum_form": "requirement",
"line": 6569
"line": 6591
},
{
"pum_table_id": "F0366",
"section": "12-19. 강관비계",
"pum_form": "requirement",
"line": 6614
"line": 6636
},
{
"pum_table_id": "F0379",
"section": "12-29. 스페이셔 설치(몰탈 블록)",
"pum_form": "requirement",
"line": 6775
"line": 6797
},
{
"pum_table_id": "F0401",
"section": "13-2-4. 야면석 채집(인력)",
"pum_form": "requirement",
"line": 7025
"line": 7047
},
{
"pum_table_id": "F0405",
"section": "13-3. 기초다짐 및 뒤채움’ 항을 적용한다.",
"pum_form": "requirement",
"line": 7087
"line": 7109
},
{
"pum_table_id": "F0437",
"section": "13-12-1. 뭉기기",
"pum_form": "requirement",
"line": 7612
"line": 7634
},
{
"pum_table_id": "F0438",
"section": "13-12-2. 지오셀(사면보강)",
"pum_form": "requirement",
"line": 7625
"line": 7647
},
{
"pum_table_id": "F0447",
"section": "13-15-2. 목책 설치",
"pum_form": "requirement",
"line": 7745
"line": 7767
}
]
}
@@ -626,325 +626,325 @@
"pum_table_id": "C0571",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 1949
"line": 1961
},
{
"pum_table_id": "C0572",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 1956
"line": 1968
},
{
"pum_table_id": "C0574",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 1971
"line": 1983
},
{
"pum_table_id": "C0575",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 1987
"line": 1999
},
{
"pum_table_id": "C0576",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 2004
"line": 2016
},
{
"pum_table_id": "C0577",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 2018
"line": 2030
},
{
"pum_table_id": "C0578",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 2031
"line": 2043
},
{
"pum_table_id": "C0579",
"section": "8-3 기계손료8-3-1 [00]토공기계('19년 보완)(0101) 불도저(무한궤도)",
"pum_form": "requirement",
"line": 2040
"line": 2052
},
{
"pum_table_id": "C0589",
"section": "8-3-2 [10]다짐기계(1106) 머캐덤 롤러(자주식)",
"pum_form": "requirement",
"line": 2147
"line": 2159
},
{
"pum_table_id": "C0596",
"section": "8-3-3 [20]운반 및 하역기계(2101) 크레인(무한궤도)",
"pum_form": "requirement",
"line": 2228
"line": 2240
},
{
"pum_table_id": "C0597",
"section": "8-3-3 [20]운반 및 하역기계(2101) 크레인(무한궤도)",
"pum_form": "requirement",
"line": 2237
"line": 2249
},
{
"pum_table_id": "C0598",
"section": "8-3-3 [20]운반 및 하역기계(2101) 크레인(무한궤도)",
"pum_form": "requirement",
"line": 2245
"line": 2257
},
{
"pum_table_id": "C0599",
"section": "8-3-3 [20]운반 및 하역기계(2101) 크레인(무한궤도)",
"pum_form": "requirement",
"line": 2253
"line": 2265
},
{
"pum_table_id": "C0603",
"section": "8-3-3 [20]운반 및 하역기계(2101) 크레인(무한궤도)",
"pum_form": "requirement",
"line": 2292
"line": 2304
},
{
"pum_table_id": "C0608",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2341
"line": 2353
},
{
"pum_table_id": "C0609",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2349
"line": 2361
},
{
"pum_table_id": "C0610",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2361
"line": 2373
},
{
"pum_table_id": "C0614",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2393
"line": 2418
},
{
"pum_table_id": "C0615",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2400
"line": 2425
},
{
"pum_table_id": "C0616",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2408
"line": 2433
},
{
"pum_table_id": "C0617",
"section": "8-3-4 [30]포장기계(3108) 아스팔트 믹싱플랜트",
"pum_form": "requirement",
"line": 2415
"line": 2440
},
{
"pum_table_id": "C0620",
"section": "8-3-5 [40]콘크리트기계(4108) 콘크리트 배치플랜트",
"pum_form": "requirement",
"line": 2440
"line": 2465
},
{
"pum_table_id": "C0621",
"section": "8-3-5 [40]콘크리트기계(4108) 콘크리트 배치플랜트",
"pum_form": "requirement",
"line": 2454
"line": 2479
},
{
"pum_table_id": "C0623",
"section": "8-3-5 [40]콘크리트기계(4108) 콘크리트 배치플랜트",
"pum_form": "productivity",
"line": 2472
"line": 2497
},
{
"pum_table_id": "C0624",
"section": "8-3-5 [40]콘크리트기계(4108) 콘크리트 배치플랜트",
"pum_form": "productivity",
"line": 2479
"line": 2504
},
{
"pum_table_id": "C0640",
"section": "8-3-6 [50]골재생산기계 등(5105) 크러셔(이동식) ('11년 보완)",
"pum_form": "productivity",
"line": 2606
"line": 2631
},
{
"pum_table_id": "C0651",
"section": "5220-00151.5㎾8,0002,500(5330) 드릴웨곤",
"pum_form": "requirement",
"line": 2722
"line": 2757
},
{
"pum_table_id": "C0652",
"section": "5220-00151.5㎾8,0002,500(5330) 드릴웨곤",
"pum_form": "requirement",
"line": 2730
"line": 2765
},
{
"pum_table_id": "C0653",
"section": "5220-00151.5㎾8,0002,500(5330) 드릴웨곤",
"pum_form": "requirement",
"line": 2737
"line": 2772
},
{
"pum_table_id": "C0656",
"section": "8-3-7 [60]기초공사용 기계(6105) 그라우팅 믹서",
"pum_form": "requirement",
"line": 2771
"line": 2806
},
{
"pum_table_id": "C0677",
"section": "8-3-7 [60]기초공사용 기계(6105) 그라우팅 믹서",
"pum_form": "requirement",
"line": 2975
"line": 3037
},
{
"pum_table_id": "C0680",
"section": "8-3-7 [60]기초공사용 기계(6105) 그라우팅 믹서",
"pum_form": "requirement",
"line": 2997
"line": 3068
},
{
"pum_table_id": "C0682",
"section": "8-3-7 [60]기초공사용 기계(6105) 그라우팅 믹서",
"pum_form": "requirement",
"line": 3019
"line": 3090
},
{
"pum_table_id": "C0715",
"section": "50-2.6m5,0008-3-9 [80]스마트 건설장비(8201) 3D GNSS 머신 가이던스(굴착기용) ('23년 신설)",
"pum_form": "requirement",
"line": 3306
"line": 3396
},
{
"pum_table_id": "C0717",
"section": "50-2.6m5,0008-3-9 [80]스마트 건설장비(8201) 3D GNSS 머신 가이던스(굴착기용) ('23년 신설)",
"pum_form": "requirement",
"line": 3320
"line": 3410
},
{
"pum_table_id": "C0718",
"section": "50-2.6m5,0008-3-9 [80]스마트 건설장비(8201) 3D GNSS 머신 가이던스(굴착기용) ('23년 신설)",
"pum_form": "requirement",
"line": 3327
"line": 3417
},
{
"pum_table_id": "C0727",
"section": "8-4 운전경비 산정('08, '09, '10, '11, '12, '13, '14, '15, '16, '17년 보완)8-4-1 [00]토공기계",
"pum_form": "requirement",
"line": 3390
"line": 3502
},
{
"pum_table_id": "C0728",
"section": "8-4 운전경비 산정('08, '09, '10, '11, '12, '13, '14, '15, '16, '17년 보완)8-4-1 [00]토공기계",
"pum_form": "requirement",
"line": 3396
"line": 3508
},
{
"pum_table_id": "C0729",
"section": "8-4-2 [10]다짐기계",
"pum_form": "requirement",
"line": 3402
"line": 3514
},
{
"pum_table_id": "C0730",
"section": "8-4-3 [20]운반 및 하역기계('21년 보완)",
"pum_form": "requirement",
"line": 3408
"line": 3520
},
{
"pum_table_id": "C0731",
"section": "8-4-3 [20]운반 및 하역기계('21년 보완)",
"pum_form": "requirement",
"line": 3414
"line": 3526
},
{
"pum_table_id": "C0732",
"section": "8-4-4 [30]포장기계",
"pum_form": "requirement",
"line": 3420
"line": 3532
},
{
"pum_table_id": "C0733",
"section": "8-4-5 [40]콘크리트기계",
"pum_form": "requirement",
"line": 3426
"line": 3538
},
{
"pum_table_id": "C0734",
"section": "8-4-5 [40]콘크리트기계",
"pum_form": "requirement",
"line": 3432
"line": 3544
},
{
"pum_table_id": "C0735",
"section": "8-4-6 [50]골재생산기계 등",
"pum_form": "requirement",
"line": 3438
"line": 3550
},
{
"pum_table_id": "C0736",
"section": "8-4-6 [50]골재생산기계 등",
"pum_form": "requirement",
"line": 3444
"line": 3556
},
{
"pum_table_id": "C0737",
"section": "8-4-7 [60]기초공사용 기계('21년 보완)",
"pum_form": "requirement",
"line": 3450
"line": 3562
},
{
"pum_table_id": "C0738",
"section": "8-4-8 [70]기타기계('24년 보완)",
"pum_form": "requirement",
"line": 3456
"line": 3568
},
{
"pum_table_id": "C0739",
"section": "8-4-8 [70]기타기계('24년 보완)",
"pum_form": "requirement",
"line": 3462
"line": 3574
},
{
"pum_table_id": "C0740",
"section": "8-4-9 [90]해상기계(9010) 펌프준설선 ('10, '11년 보완)",
"pum_form": "requirement",
"line": 3476
"line": 3588
},
{
"pum_table_id": "C0741",
"section": "8-4-9 [90]해상기계(9010) 펌프준설선 ('10, '11년 보완)",
"pum_form": "requirement",
"line": 3489
"line": 3601
},
{
"pum_table_id": "C0743",
"section": "8-4-9 [90]해상기계(9010) 펌프준설선 ('10, '11년 보완)",
"pum_form": "requirement",
"line": 3505
"line": 3617
},
{
"pum_table_id": "C0746",
"section": "8-4-9 [90]해상기계(9010) 펌프준설선 ('10, '11년 보완)",
"pum_form": "requirement",
"line": 3529
"line": 3641
},
{
"pum_table_id": "C0747",
"section": "8-4-9 [90]해상기계(9010) 펌프준설선 ('10, '11년 보완)",
"pum_form": "requirement",
"line": 3541
"line": 3653
},
{
"pum_table_id": "C0773",
@@ -4949,6 +4949,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2193",
"section": "8-3-1 [00]토공기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"0230-0002",
"0.2㎥",
"3,000",
"890",
"0.9",
"0.85",
"0.1",
"3,000",
"2,833",
"768",
"6,601"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0573",
"section": "8-3-1 [00]토공기계",
@@ -6024,6 +6067,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2194",
"section": "8-3-4 [30]포장기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"3601-0102",
"74.6㎾",
"8,000",
"890",
"0.9",
"0.4",
"0.1",
"1,125",
"500",
"674",
"2,299"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0613",
"section": "8-3-4 [30]포장기계",
@@ -6963,6 +7049,25 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2195",
"section": "8-3-6 [50]골재생산기계 등",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간"
],
"first_rows": [
[
"5220-0015",
"1.5㎾",
"8,000",
"2,500"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0647",
"section": "8-3-6 [50]골재생산기계 등",
@@ -7694,6 +7799,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2196",
"section": "8-3-7 [60]기초공사용 기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"6532-0220",
"162㎾",
"7,000",
"890",
"0.9",
"0.5",
"0.1",
"1,286",
"714",
"682",
"2,682"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0668",
"section": "8-3-7 [60]기초공사용 기계",
@@ -7866,6 +8014,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2197",
"section": "8-3-7 [60]기초공사용 기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"6801-0010",
"20ton",
"14,000",
"1,250",
"0.9",
"0.7",
"0.1",
"643",
"500",
"472",
"1,615"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0672",
"section": "8-3-7 [60]기초공사용 기계",
@@ -7995,6 +8186,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2198",
"section": "8-3-8 [70]기타기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"7101-0450",
"335.70㎾",
"6,300",
"800",
"0.9",
"0.65",
"0.1",
"1,429",
"1,032",
"759",
"3,220"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0675",
"section": "8-3-8 [70]기타기계",
@@ -8124,6 +8358,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2199",
"section": "8-3-8 [70]기타기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"7120-0746",
"7.46㎥, 3,508㎾",
"5,000",
"890",
"0.9",
"0.5",
"0.1",
"1,800",
"1,000",
"708",
"3,508"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0679",
"section": "8-3-8 [70]기타기계",
@@ -9085,6 +9362,49 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2200",
"section": "8-3-8 [70]기타기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"7830-0081",
"8.1㎏/min",
"6,000",
"890",
"0.9",
"0.5",
"0.1",
"1,500",
"833",
"693",
"3,026"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0703",
"section": "8-3-8 [70]기타기계",
@@ -9459,6 +9779,23 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2201",
"section": "8-3-8 [70]기타기계",
"headers": [
"분류 번호",
"규 격",
"내용 시간"
],
"first_rows": [
[
"7995-0050",
"ø50-2.6m",
"5,000"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0714",
"section": "8-3-9 [80]스마트 건설장비",
@@ -9770,6 +10107,51 @@
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C2202",
"section": "8-3-10 [90]해상장비",
"headers": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간",
"상각 비율",
"정비 비율",
"연간 관리 비율",
"시 간 당(10-7)"
],
"first_rows": [
[
"",
"형식",
"출력 (㎾)",
"",
"",
"",
"",
"",
"상각비 계수",
"정비비 계수",
"관리비 계수",
"계"
],
[
"9060-0060",
"SD, 60㎥",
"",
"19,200",
"1,430",
"0.9",
"0.75",
"0.1",
"469",
"391",
"408",
"1,268"
]
],
"reason": "헤더·첫 행에 단위·밑수·직종 표지 없음"
},
{
"pum_table_id": "C0724",
"section": "8-3-10 [90]해상장비",
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -128,45 +128,6 @@
"md_evidence": "(일당)",
"master": null
},
"F0140": {
"section": "5-26-1",
"md": [
992.0,
"㎡"
],
"md_evidence": "(인/992㎡당)",
"master": [
100.0,
"㎡"
],
"why": "⚠ 코덱스 복원 「(인/992㎡당)」 ↔ 마스터 사람 판정 100㎡(Forms.py BASIS_JUDGMENTS · 머리 소실 표) — 둘 중 하나가 틀림, 사람 판단"
},
"F0141": {
"section": "5-26-2",
"md": [
992.0,
"㎡"
],
"md_evidence": "(인/992㎡당)",
"master": [
100.0,
"㎡"
],
"why": "위와 같음(5-26-2)"
},
"F0142": {
"section": "5-26-3",
"md": [
992.0,
"㎡"
],
"md_evidence": "(인/992㎡당)",
"master": [
100.0,
"㎡"
],
"why": "위와 같음(5-26-3)"
},
"F0145": {
"section": "5-28-2",
"md": [
@@ -52,6 +52,7 @@ MASTER = OUT_DIR / "work_item_master_2026-01-01.json"
#: 끌어오고 있었음(산림 표 320 → 306 · 건설 1,761 → 1,106)
#: ⑥ ⚠ 그 걷어내기가 **진짜 계수 34건까지 잘랐던 것**을 되살림(고철 공제·위험목 100% 가산 …)
#: ⑦ 실값인데 「참고」로 빠져 있던 13표를 `sub_requirement` 로 — 값은 실값, 자리는 상위 공종 종속
#: ⑨ 원천 벌을 다시 뽑아 지음 — 밑수 238 → 242 · ⚠ 5-26-1·2·3 밑수를 사람 판정 100㎡ → 원문 992㎡ 로 물림
#: ⑧ 못 읽던 [주] 세 꼴을 읽게 함 — 별표 줄 · 인용 산출예시 뒤 줄 · **긴 표의 [주]**(줄 수 제한 없앰)
#: ⇒ 곱하면 안 되던 줄이 곱할 수 있게 된 것이지, 있던 값이 바뀐 것이 아니다.
#: 2026-09-17 랩탑 메인 — 목차 오기 둘을 본문 번호로 바로잡아(브레인 지시) **네 줄만** 바뀌어 새로 뜸
@@ -60,7 +61,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 = "08badd8b384233f3ef5653a5fa8ec583ae901e4d2ec238de11d8254b540c1809"
BASELINE_WORK_ITEMS_SHA = "a26c1adb18918f9bafe503f66b728244a3e76bab52cac0388ea7ea717fc8053d"
#: 열쇠 작업이 새로 얹은 칸. 지문을 잴 때만 떼어낸다.
ADDED_FIELDS = (
@@ -365,7 +366,7 @@ def test_산림_형태_미판정이_없다(master: dict) -> None:
# 미판정 열넷 가운데 머리가 소실돼 자동으로는 못 읽는 표의 밑수를 손으로 적었다
# (그 뒤 원문 전수 대조로 다른 표들도 들어와 `BASIS_JUDGMENTS` 는 더 넓다)
assert {"F0140", "F0322", "F0333", "F0346"} <= set(BASIS_JUDGMENTS)
assert by_id["F0140"]["basis_quantity"] == 100.0 and by_id["F0140"]["basis_unit"] == ""
assert by_id["F0140"]["basis_quantity"] == 992.0 and by_id["F0140"]["basis_unit"] == ""
assert by_id["F0322"]["basis_quantity"] == 1000.0 and by_id["F0322"]["basis_unit"] == ""
assert judged_form("F0140", "5-26-1")[0] == "requirement"
@@ -443,6 +444,20 @@ def test_실값인데_참고로_빠져_있던_표(master: dict) -> None:
assert by_id[table_id]["pum_form"] == "reference", table_id
def test_사람_판정은_원문이_나오면_물러난다(master: dict) -> None:
"""⚠ 5-26-1·2·3 — 앞서 100㎡ 로 메워 둔 밑수를 **원문 「(인/992㎡당)」** 으로 물렸다.
머리가 소실돼 원문을 읽던 흔한 밑수로 메운 값이었다. 고리의 잣대는 원문이 정본이므로
사람 판정이 물러난다(2026-09-18 브레인 · 코덱스가 PDF 에서 되살린 ).
100 992 가까이 달라 **금액이 크게 갈리는 자리** 되돌릴 때도 근거를 보고 .
"""
by_id = {t["pum_table_id"]: t for it in master["work_items"] for t in it["tables"]}
for table_id in ("F0140", "F0141", "F0142"):
assert by_id[table_id]["basis_quantity"] == 992.0, table_id
assert by_id[table_id]["basis_unit"] == "", table_id
assert "992" in by_id[table_id]["basis_source"], table_id
def test_원문_대조_밑수_판정(master: dict) -> None:
"""원문 md ↔ 마스터 전수 대조(안티그래비티 02544795)에서 나온 밑수를 반영했는가.
@@ -80,7 +80,8 @@ def test_목차_부문_다섯_장_마흔다섯(built: tuple) -> None:
def test_표는_다_붙고_못_붙인_표는_목록(built: tuple) -> None:
master = built[0]
stats = master["stats"]
assert stats["tables_total"] == 2192
# 2026-09-18 2,192 → 2,202 — 코덱스가 제8장 손료표 열(C2193~C2202)을 되살림
assert stats["tables_total"] == 2202
assert stats["tables_attached"] + len(master["orphan_tables"]) == stats["tables_total"]
assert stats["tables_orphan"] == len(master["orphan_tables"]) == 0