From c12367cc333161c5326ed79b62358bf6de9f84b5 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Fri, 18 Sep 2026 16:58:31 +0900 Subject: [PATCH] =?UTF-8?q?chore(data):=20=EC=A0=84=EC=88=98=20=EB=8C=80?= =?UTF-8?q?=EC=A1=B0=EA=B8=B0=C2=B7=EA=B2=B8=EC=9A=A9=20=EC=97=B0=EB=A3=8C?= =?UTF-8?q?=C2=B79020=20=EC=9D=B4=EC=96=B4=20=ED=91=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=9B=EC=95=84=20=EB=8B=A4=EC=8B=9C=20=EB=BD=91=EC=9D=8C=20?= =?UTF-8?q?=E2=80=94=20=EA=B1=B4=EC=84=A4=20=ED=98=95=ED=83=9C=20166=20?= =?UTF-8?q?=C2=B7=20=EB=B0=91=EC=88=98=20=EB=AF=B8=ED=8C=90=EB=8F=85=20?= =?UTF-8?q?=EA=B1=B4=EC=84=A4=202=C2=B7=EC=82=B0=EB=A6=BC=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **받아 다시 뽑은 결과** · 건설 형태 미판정 175 → **166** · 밑수 확보 **713** · 미확보 438(원문 부재 436 · **미판독 2**) · 산림 밑수 미확보 79(원문 부재 78 · **미판독 1**) · 품셈 원천 건설 표 2,273 → **2,274**(산림 476 그대로) · 기계 손료 611 → **620** · 연료 274 → **276** ⇒ 랩탑 서브가 9020 이어 표를 붙이고 랩탑 메인이 겸용 연료를 갈라 읽은 것이 그대로 들어옴 **장부 손질** · ⚠ 합치며 **내 갈래와 랩탑 메인의 옛 class·주인이 섞였음** — 「원문 부재」인데 주인이 랩탑 메인으로 적힌 일곱 줄을 ㉰ 로 되돌리고 주인을 뗌. 원문에 없는 것은 남이 고쳐도 안 풀림. · 랩탑 메인이 새로 올린 「손료보정」 세 줄에 갈래·사유·주인 적음 — 8-1-7 가산비율 표가 글로 뭉개져 이름 칸에 수(`2510`)가 들어앉은 자리(「손료보정 수 자리 가름」 과 한 뿌리) · 기계 장부에서 **저절로 빠진 것** — 9020 이어 표 일곱 · 겸용 연료 둘 · 손료 계수 칸 없는 표 둘 ⇒ 지금 어긋남: 공종 마스터 **22** · 기초데이터 **1** · 기초단가 **23**(잣대 못 알아봄 16 · 원문 부재 7) Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01QsGw1Dz9HmhuAxGisxmDPF --- .../data_work_item_master/_manifest.json | 4 +- .../_manifest_const.json | 4 +- .../const_work_item_master_2026-01-01.json | 2 +- .../work_item_master_2026-01-01.json | 2 +- .../fixtures/base_prices_source_known.json | 62 +++++++++---------- 5 files changed, 36 insertions(+), 38 deletions(-) diff --git a/resources/data_work_item_master/_manifest.json b/resources/data_work_item_master/_manifest.json index 30ff4900..1b5ad8bb 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-18T14:37:31+09:00", + "generated_at": "2026-09-18T16:52:57+09:00", "built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py", "source": { "dataset_id": "pum_forest", @@ -12,7 +12,7 @@ "files": [ { "file": "work_item_master_2026-01-01.json", - "sha256": "eba4d71093f730296ff74de519949e8bfb573fea129b45b9be31b763db20307a", + "sha256": "bc1e5b301f79247bf44bb3dfa51e409a22e059771eba53670a599753a235e1b4", "size_bytes": 1095122 }, { diff --git a/resources/data_work_item_master/_manifest_const.json b/resources/data_work_item_master/_manifest_const.json index cde09ad8..6ec7fe0e 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-18T14:38:23+09:00", + "generated_at": "2026-09-18T16:54:24+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": "717ed8edf3aa8f0ecf38634f28ae0ed8c7f47bffbe3a4ede8af6a279396d9933", + "sha256": "7117fdb70e26e65671002dad427f155ba0782e02ad10ba9c2f4729d5c22f9c4e", "size_bytes": 4730739 }, { 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 bbfb254b..c88a252a 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-18T14:38:23+09:00", + "generated_at": "2026-09-18T16:54:24+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 3ab2d533..74adb542 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-18T14:37:31+09:00", + "generated_at": "2026-09-18T16:52:57+09:00", "dataset_version": { "dataset_id": "pum_forest", "effective_date": "2026-01-01", diff --git a/resources/tester/fixtures/base_prices_source_known.json b/resources/tester/fixtures/base_prices_source_known.json index e04c0061..145d5bd3 100644 --- a/resources/tester/fixtures/base_prices_source_known.json +++ b/resources/tester/fixtures/base_prices_source_known.json @@ -55,19 +55,31 @@ "source": "불도저(19톤이상제외)", "data": "2510", "why": "원문 8-1-7 가산비율 표가 글로 뭉개져 이름 칸에 수(`2510`)가 들어앉음 — 25·10 인지 2·510 인지 못 가름(같은 자리를 「손료보정 수 자리 가름」으로 이미 적어 둠). md 가 풀리면 저절로 맞음", - "class": "㉯ 남이 고쳐야 풀림" + "class": "㉯ 남이 고쳐야 풀림", + "갈래": "잣대 못 알아봄", + "class_why": "원문 8-1-7 가산비율 표가 **글로 뭉개져** 기종 이름 칸에 수(`2510`)가 들어앉음 — 25·10 인지 2·510 인지 가를 수 없음. 값은 원문에 있으나 꼴이 뭉개져 못 읽는 자리(같은 뿌리를 「손료보정 수 자리 가름」 으로도 셈).", + "owner": "랩탑 메인", + "owner_ask": "8-1-7 가산비율 표가 글로 뭉개진 자리 — 기종 이름과 두 수(암석작업·전석섞인토사)를 갈라 줄 것. `손료보정 수 자리 가름` 과 한 자리라 함께 풀림." }, "손료보정 crawler_excavator_or_loader": { "source": "굴착기(무한궤도)및로더(무한궤도)", "data": "2010", "why": "원문 8-1-7 가산비율 표가 글로 뭉개져 이름 칸에 수(`2510`)가 들어앉음 — 25·10 인지 2·510 인지 못 가름(같은 자리를 「손료보정 수 자리 가름」으로 이미 적어 둠). md 가 풀리면 저절로 맞음", - "class": "㉯ 남이 고쳐야 풀림" + "class": "㉯ 남이 고쳐야 풀림", + "갈래": "잣대 못 알아봄", + "class_why": "원문 8-1-7 가산비율 표가 **글로 뭉개져** 기종 이름 칸에 수(`2510`)가 들어앉음 — 25·10 인지 2·510 인지 가를 수 없음. 값은 원문에 있으나 꼴이 뭉개져 못 읽는 자리(같은 뿌리를 「손료보정 수 자리 가름」 으로도 셈).", + "owner": "랩탑 메인", + "owner_ask": "8-1-7 가산비율 표가 글로 뭉개진 자리 — 기종 이름과 두 수(암석작업·전석섞인토사)를 갈라 줄 것. `손료보정 수 자리 가름` 과 한 자리라 함께 풀림." }, "손료보정 dump_truck": { "source": "덤프트럭", "data": "2510", "why": "원문 8-1-7 가산비율 표가 글로 뭉개져 이름 칸에 수(`2510`)가 들어앉음 — 25·10 인지 2·510 인지 못 가름(같은 자리를 「손료보정 수 자리 가름」으로 이미 적어 둠). md 가 풀리면 저절로 맞음", - "class": "㉯ 남이 고쳐야 풀림" + "class": "㉯ 남이 고쳐야 풀림", + "갈래": "잣대 못 알아봄", + "class_why": "원문 8-1-7 가산비율 표가 **글로 뭉개져** 기종 이름 칸에 수(`2510`)가 들어앉음 — 25·10 인지 2·510 인지 가를 수 없음. 값은 원문에 있으나 꼴이 뭉개져 못 읽는 자리(같은 뿌리를 「손료보정 수 자리 가름」 으로도 셈).", + "owner": "랩탑 메인", + "owner_ask": "8-1-7 가산비율 표가 글로 뭉개진 자리 — 기종 이름과 두 수(암석작업·전석섞인토사)를 갈라 줄 것. `손료보정 수 자리 가름` 과 한 자리라 함께 풀림." }, "연료 7993-0020": { "source": null, @@ -167,31 +179,25 @@ "운전사 기종별 판단": { "what": 121, "why": "기종→운전사 구분(explicit_mappings)은 사람 판단 — 원문 8-1-3 5호는 기종 이름 글만 있음", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "원문 8-1-3 5호는 기종 이름 글만 두고 운전사 구분을 안 적음 — 기종→운전사 짝(`explicit_mappings`)은 사람이 정한 것. 원문에 견줄 것이 없음.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "원문 8-1-3 5호는 기종 이름 글만 두고 운전사 구분을 안 적음 — 기종→운전사 짝(`explicit_mappings`)은 사람이 정한 것. 원문에 견줄 것이 없음." } }, "material_blind": { "같은 때 공시 20696249": { "what": 2, "why": "같은 공시 일시에 값 실린 공시가 둘 — 원천이 어느 것이 정본인지 안 알려 줌 · 자료는 그중 하나와 같음", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "같은 공시 일시에 값 실린 공시가 둘인데 **원천이 어느 것을 정본으로 보는지 안 알려 줌** — 자료는 그중 하나와 같음. 어느 것을 취할지 정해야 닫힘.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "같은 공시 일시에 값 실린 공시가 둘인데 **원천이 어느 것을 정본으로 보는지 안 알려 줌** — 자료는 그중 하나와 같음. 어느 것을 취할지 정해야 닫힘." }, "같은 때 공시 20696250": { "what": 2, "why": "같은 공시 일시에 값 실린 공시가 둘 — 원천이 어느 것이 정본인지 안 알려 줌 · 자료는 그중 하나와 같음", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "위와 한 자리.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "위와 한 자리." }, "원천 없는 묶음": { "what": [ @@ -200,11 +206,9 @@ "asphalt_concrete" ], "why": "철근·레미콘·아스콘은 종합쇼핑몰 원천이 저장소에 없음 — 값 못 봄", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "철근·레미콘·아스콘은 종합쇼핑몰 원천이 저장소에 없어 값을 볼 수 없음 — 원천을 들여올지 정해야 닫힘.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "철근·레미콘·아스콘은 종합쇼핑몰 원천이 저장소에 없어 값을 볼 수 없음 — 원천을 들여올지 정해야 닫힘." } }, "oil_blind": {}, @@ -212,29 +216,23 @@ "안 잰 칸 rate_environment.forest_road_selection_status": { "what": "pending", "why": "임도 공종 선택 미결 표시 — 사용자 협의 몫", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "임도 공종 선택 미결 표시 — 사용자 협의로 닫을 자리.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "임도 공종 선택 미결 표시 — 사용자 협의로 닫을 자리." }, "안 잰 칸 rate_environment.minimum_estimated_amount_krw": { "what": 100000000, "why": "xlsx 환경보전비 칸에 1억 기준이 없음(1억은 퇴직공제부금 칸) — 근거 원문이 sources 에 없어 못 봄", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "xlsx 환경보전비 칸에 1억 기준이 없음(1억은 퇴직공제부금 칸) — 근거 원문이 `sources` 에 없어 볼 수 없음. 근거를 들여올지 정해야 닫힘.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "xlsx 환경보전비 칸에 1억 기준이 없음(1억은 퇴직공제부금 칸) — 근거 원문이 `sources` 에 없어 볼 수 없음. 근거를 들여올지 정해야 닫힘." }, "안 잰 칸 rate_performance_guarantee_fee.typical_forest_road_applicability": { "what": "not_applicable", "why": "임도 적용 판단 — 원문 칸 아님", - "class": "㉯ 남이 고쳐야 풀림", + "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", - "class_why": "임도에 적용되는지 판단 — 원문 칸이 아님.", - "owner": "랩탑 메인", - "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림" + "class_why": "임도에 적용되는지 판단 — 원문 칸이 아님." } }, "_할일_아님": { @@ -556,7 +554,7 @@ "센 날": "2026-09-18", "셈": { "원문 부재 / ㉰": 7, - "잣대 못 알아봄 / ㉯": 17 + "잣대 못 알아봄 / ㉯": 16 }, "잣대": "두 갈래로 가름 — **원문 부재**: 값이 원문·원천에 없거나 원문 밖 말이라 채울 것이 없음 · **잣대 못 알아봄**: 값은 원문에 있는데 전사·읽기가 못 가름 ⇒ 고치면 풀림. ㉮ 영영 할 일 아님 · ㉯ 남이 고쳐야 풀림 · ㉰ 사용자·브레인 판단.", "할 일 아님으로 뺀 줄": 34