{ "_설명": [ "원문 ↔ 기초단가 다섯 갈래 — 지금 알고 있는 어긋남과 시험이 못 보는 자리(2026-09-18 랩탑 메인이 시험으로 처음 뜸).", "시험: resources/tester/test_base_prices_source_match.py — 이 목록 밖에서 어긋나면 빨강 · 목록에 있는데 고쳐졌거나 모습이 바뀌어도 빨강.", "고치면 지울 것: python resources/tester/test_base_prices_source_match.py --prune (지우기만 함).", "labor·machine·material·oil·rate: source=원문에서 읽은 값 · data=자료 값 · 한쪽이 null 이면 한쪽에만 있음.", "`셈 …`: (원문 줄 수, 자료 줄 수) — test_셈이_맞음 이 이 목록과 똑같을 때만 통과.", "`… 자료에 없음`: 원문 줄은 읽었는데 자료에 없는 코드를 네 자리 기종별로 묶음.", "*_blind: 시험이 못 보는 자리 — what=무엇 · why=까닭. `안 잰 칸 …` 은 자료에 있는데 원문과 안 맞대는 칸(새 칸이 생기면 빨강).", "why: 사람이 적은 까닭 — 시험은 맞대기에서 뺌." ], "labor": {}, "machine": {}, "material": {}, "oil": {}, "rate": {}, "labor_blind": {}, "machine_blind": { "규격 빈칸 7430-1300": { "what": "싱글", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "규격 빈칸 7430-1500": { "what": "드럼", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "규격 빈칸 7430-2500": { "what": "드럼", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "규격 빈칸 7431-1300": { "what": "드럼", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "규격 빈칸 7811-0030": { "what": "엔진", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "규격 빈칸 7812-0007": { "what": "엔진", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "규격 빈칸 9030-0240": { "what": "150ton", "why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "class": "㉯ 남이 고쳐야 풀림", "class_why": "원문 손료표가 **한 칸에 든 기종 이름을 여러 줄로 쪼개 적은** 자리 — `(7430) 윈치` 는 「수동 싱글드럼」 이 수동·싱글·드럼 세 줄로 갈렸고 뒷줄은 칸이 비었음. 자료는 그 빈칸을 **앞 줄에서 이어받아** 채워 「싱글」·「드럼」·「엔진」 같은 **조각**이 규격으로 들어가 있음. 값(수·계수)은 원문과 같고 **이름 조각만** 어긋남.", "갈래": "잣대 못 알아봄", "owner": "랩탑 서브", "owner_ask": "제8장 8-3 (7430)·(7431) 윈치 · (7811)·(7812) 엔진 · (9030) 예선 표 — PDF 에서 「기종」 칸이 한 칸에 어떻게 적혀 있는지 짚어 줄 것(「수동 싱글드럼」 처럼 한 칸인지, 줄마다 다른 이름인지). 그것이 갈리면 자료의 이어받기가 맞는지 곧 판가름남." }, "운전사 기종별 판단": { "what": 121, "why": "기종→운전사 구분(explicit_mappings)은 사람 판단 — 원문 8-1-3 5호는 기종 이름 글만 있음", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "원문 8-1-3 5호는 기종 이름 글만 두고 운전사 구분을 안 적음 — 기종→운전사 짝(`explicit_mappings`)은 사람이 정한 것. 원문에 견줄 것이 없음." } }, "material_blind": { "같은 때 공시 20696249": { "what": 2, "why": "같은 공시 일시에 값 실린 공시가 둘 — 원천이 어느 것이 정본인지 안 알려 줌 · 자료는 그중 하나와 같음", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "같은 공시 일시에 값 실린 공시가 둘인데 **원천이 어느 것을 정본으로 보는지 안 알려 줌** — 자료는 그중 하나와 같음. 어느 것을 취할지 정해야 닫힘." }, "같은 때 공시 20696250": { "what": 2, "why": "같은 공시 일시에 값 실린 공시가 둘 — 원천이 어느 것이 정본인지 안 알려 줌 · 자료는 그중 하나와 같음", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "위와 한 자리." }, "원천 없는 묶음": { "what": [ "reinforcing_steel", "ready_mixed_concrete", "asphalt_concrete" ], "why": "철근·레미콘·아스콘은 종합쇼핑몰 원천이 저장소에 없음 — 값 못 봄", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "철근·레미콘·아스콘은 종합쇼핑몰 원천이 저장소에 없어 값을 볼 수 없음 — 원천을 들여올지 정해야 닫힘." } }, "oil_blind": {}, "rate_blind": { "안 잰 칸 rate_environment.forest_road_selection_status": { "what": "pending", "why": "임도 공종 선택 미결 표시 — 사용자 협의 몫", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "임도 공종 선택 미결 표시 — 사용자 협의로 닫을 자리." }, "안 잰 칸 rate_environment.minimum_estimated_amount_krw": { "what": 100000000, "why": "xlsx 환경보전비 칸에 1억 기준이 없음(1억은 퇴직공제부금 칸) — 근거 원문이 sources 에 없어 못 봄", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "xlsx 환경보전비 칸에 1억 기준이 없음(1억은 퇴직공제부금 칸) — 근거 원문이 `sources` 에 없어 볼 수 없음. 근거를 들여올지 정해야 닫힘." }, "안 잰 칸 rate_performance_guarantee_fee.typical_forest_road_applicability": { "what": "not_applicable", "why": "임도 적용 판단 — 원문 칸 아님", "class": "㉰ 사용자·브레인 판단", "갈래": "원문 부재", "class_why": "임도에 적용되는지 판단 — 원문 칸이 아님." } }, "_할일_아님": { "갈래별": { "낳은 값": 1, "메모": 1, "요약 이름": 2, "원문 부재": 25, "자리 표시": 2, "프로그램 이름": 2 }, "셈": { "labor_blind": 5, "machine_blind": 8, "material_blind": 2, "oil_blind": 7, "rate_blind": 11 }, "옮긴 날": "2026-09-18", "잣대": "㉮ — **영영 할 일이 아닌 것.** 원문에 없는 말(프로그램 이름·사람 메모·살림살이) · 이미 다른 자리에서 맞대는 것. 바퀴마다 다시 세어지지 않게 갈래에서 아주 빼 여기 둔다. ⚠ 지우지는 않는다 — 되짚을 수 있어야 한다.", "줄": { "machine_blind": { "안 잰 칸 mach_loss_coef.note": { "what": "원문과 안 맞댐", "why": "사람이 적은 메모 — 2026-09-18 5202·5203 칸 밀림을 바로잡은 사유다. 원문에 없는 글이라 맞댈 것이 없다.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "사람이 적은 메모 — 2026-09-18 5202·5203 칸 밀림을 바로잡은 사유다. 원문에 없는 글이라 맞댈 것이 없다.", "갈래": "메모" }, "안 잰 칸 mach_loss_coef.loss_coefficient_per_hour": { "what": "원문과 안 맞댐", "why": "자료가 낳은 값 — 「계」 계수(10-7)를 10,000,000 으로 나눈 것이다. 낳은 밑값인 계수 넷은 이미 줄마다 맞대고 있어 여기서 또 맞대면 같은 것을 두 번 세는 셈이다.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "자료가 낳은 값 — 「계」 계수(10-7)를 10,000,000 으로 나눈 것이다. 낳은 밑값인 계수 넷은 이미 줄마다 맞대고 있어 여기서 또 맞대면 같은 것을 두 번 세는 셈이다.", "갈래": "낳은 값" }, "안 잰 칸 mach_fuel_rate.source_tables.section": { "what": "원문과 안 맞댐", "why": "표를 가리키는 이름표일 뿐 — 8-4 표의 머리와 줄은 이미 **표째 통째로** 맞대고 있다(`운전경비 원표 N번째`).", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "표를 가리키는 이름표일 뿐 — 8-4 표의 머리와 줄은 이미 **표째 통째로** 맞대고 있다(`운전경비 원표 N번째`).", "갈래": "자리 표시" }, "안 잰 칸 mach_operator_map.rules.alias": { "what": "원문과 안 맞댐", "why": "프로그램 안에서 쓰는 이름(`labor_op_const`) — 원문 낱말이 아니다.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "프로그램 안에서 쓰는 이름(`labor_op_const`) — 원문 낱말이 아니다.", "갈래": "프로그램 이름" }, "안 잰 칸 mach_operator_map.rules.rule_id": { "what": "원문과 안 맞댐", "why": "프로그램 안에서 쓰는 규칙 이름(`construction_machine_operator`) — 원문 낱말이 아니다.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "프로그램 안에서 쓰는 규칙 이름(`construction_machine_operator`) — 원문 낱말이 아니다.", "갈래": "프로그램 이름" }, "안 잰 칸 mach_operator_map.rules.source_section": { "what": "원문과 안 맞댐", "why": "어느 절에서 왔나 적어 둔 자리 표시(`8-1-3/5`) — 값이 아니다.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "어느 절에서 왔나 적어 둔 자리 표시(`8-1-3/5`) — 값이 아니다.", "갈래": "자리 표시" }, "안 잰 칸 mach_rock_adj.rules.exception": { "what": "원문과 안 맞댐", "why": "원문 조건 글을 영어 이름으로 줄여 적은 것(`tire_or_wetland_bulldozer` = 타이어식·습지 불도저) — 글끼리 맞댈 수 없다. 붙는 수(25·20·10·0)는 「손료보정」 으로 이미 맞대고 있다.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "원문 조건 글을 영어 이름으로 줄여 적은 것(`tire_or_wetland_bulldozer` = 타이어식·습지 불도저) — 글끼리 맞댈 수 없다. 붙는 수(25·20·10·0)는 「손료보정」 으로 이미 맞대고 있다.", "갈래": "요약 이름" }, "안 잰 칸 mach_rock_adj.rules.exclusion": { "what": "원문과 안 맞댐", "why": "위와 같음 — `dedicated_dump_truck_18_ton_or_more` = 18톤 이상 전용 덤프트럭.", "class": "㉮ 영영 할 일 아님", "owner": "랩탑 메인", "owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림", "class_why": "위와 같음 — `dedicated_dump_truck_18_ton_or_more` = 18톤 이상 전용 덤프트럭.", "갈래": "요약 이름" } }, "labor_blind": { "건설 pdf": { "what": "3. 개별직종 노임단가.md", "why": "원문 md 는 PDF 를 옮긴 것 — PDF 자체와의 옮김 틀림은 못 봄", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "맞댈 PDF 가 저장소에 없음 — md 가 우리 원문임. PDF↔md 옮김 틀림은 사람이 따로 볼 자리." }, "건설 별칭 이름": { "what": [ "labor_1001", "labor_1002", "labor_1003", "labor_1007", "labor_1008", "labor_1012", "labor_1013", "labor_1015", "labor_1016", "labor_1017", "labor_1018", "labor_1019", "labor_op_const", "labor_op_general", "labor_op_truck" ], "why": "별칭 이름은 프로그램이 지은 것 — 가리키는 코드가 원문에 있는지만 봄", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "프로그램이 지은 별칭 — 원문에 있을 수 없는 말. 가리키는 코드가 원문에 있는지만 봄." }, "안 잰 칸 labor_mfg.unit": { "what": "원문과 안 맞댐", "why": "`KRW/day` 는 프로그램 표기 — 원문 글(원·1일)과 글자로 안 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "`KRW/day` 는 프로그램 표기 — 원문 글(원·1일)과 글자로 맞댈 꼴이 아님." }, "안 잰 칸 labor_rate.unit": { "what": "원문과 안 맞댐", "why": "`KRW/day` 는 프로그램 표기 — 원문 글(원·1일)과 글자로 안 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." }, "제조 pdf": { "what": "2026상반기_중소제조업_직종별_임금조사_중소기업중앙회.md", "why": "원문 md 는 PDF 를 옮긴 것 — PDF 자체와의 옮김 틀림은 못 봄", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." } }, "material_blind": { "API 스냅숏": { "what": "나라장터_시설공통자재_2026-08-14.json", "why": "원문이 API 로 받은 스냅숏 — 게시처(나라장터·오피넷) 값 자체와는 못 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "원문이 API 로 받은 한때의 스냅숏 — 게시처(나라장터·오피넷) 값 자체는 저장소에 없음." }, "안 잰 칸 mat_price.price_adopted_reason": { "what": "원문과 안 맞댐", "why": "빌더가 적은 까닭 글 — 원문 칸 아님", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "빌더가 적은 까닭 글 — 원문 칸이 아님." } }, "oil_blind": { "API 스냅숏": { "what": [ "유가_전국평균_2026-08-14.json", "유가_시도별_2026-09-09.json" ], "why": "원문이 API 로 받은 스냅숏 — 게시처(나라장터·오피넷) 값 자체와는 못 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "원문이 API 스냅숏 — 게시처 값 자체는 저장소에 없음." }, "시도 거래일": { "what": "시도별 원천에 거래일 칸이 없음 — 수집일과만 맞댐", "why": "시도별 원천 줄에 거래일이 없어 `수집일` 로만 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "시도별 원천 줄에 거래일 칸이 아예 없음 — `수집일` 로만 맞댐." }, "안 잰 칸 oil.scope": { "what": "원문과 안 맞댐", "why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "프로그램 표기(`national_average`) — 원천에 그 칸이 없음." }, "안 잰 칸 oil.unit": { "what": "원문과 안 맞댐", "why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "프로그램 표기(`KRW/L`) — 원천에 그 칸이 없음." }, "안 잰 칸 oil_regional.scope": { "what": "원문과 안 맞댐", "why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." }, "안 잰 칸 oil_regional.source_product_name": { "what": "원문과 안 맞댐", "why": "시도별 원천에 상품 이름 칸 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "시도별 원천에 상품 이름 칸이 없음." }, "안 잰 칸 oil_regional.unit": { "what": "원문과 안 맞댐", "why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." } }, "rate_blind": { "processing_rules": { "what": [ "note", "owner_supplied_material", "performance_guarantee_fee", "profit", "rounding", "safety_management_cost", "scale_bracket" ], "why": "끝수·산식 처리 규칙 — 코드 규칙이라 원문 대조 대상 아님(거울 시험 몫)", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "끝수·산식 처리 규칙 — 코드 규칙이라 원문에 견줄 글이 없음(거울 시험 몫)." }, "안 잰 칸 rate_equipment_payment_guarantee.base_note": { "what": "코드(`B09_Estimation_Statutory.STATUTORY_ITEMS`)가 직접공사비로 계산하고 있는 것과 맞춘 표기.", "why": "설명 글", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "설명 글 — 값이 아님." }, "안 잰 칸 rate_overhead.basis": { "what": "조달청 「2026년 토목·조경·산업환경설비공사 원가계산 간접공사비(제비율) 적용기준」(2026-04-13). ⚠ 구간 라벨의 `billion` 은 **십억 원** — `lt_5_billion` 은 50억 미만이다. 종합(토목·조경·산업설비)은 5억미만~30억~50억 8 · 50~100억·100~300억 6.5 · 300~1000억 5 · 1000억이상 4.5, 전문 등은 5억미만 8 · 5~30억 6.5 · 30~50억·50~100억 5 · 100억이상 4.5.", "why": "데스크탑 서브가 붙인 설명 글 — 값 아님", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "데스크탑 서브가 붙인 설명 글 — 값이 아님." }, "안 잰 칸 rate_overhead.specialty_note": { "what": "⚠ 2026-09-18 **300억 이상 두 구간이 통째로 빠져 있었음** — 마지막이 「100억-300억 미만」으로 닫혀 300억 넘는 전문공사가 어느 구간에도 안 걸렸음. 원본 XLSX(BL35:BR46) 대로 300~1000억 · 1000억 이상을 더함(둘 다 4.5%). 값은 원문 그대로.", "why": "데스크탑 서브가 붙인 설명 글 — 값 아님", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." }, "안 잰 칸 rate_safety_base.amount_bracket": { "what": "500_million_to_5_billion", "why": "다른 칸을 가리키는 표시 — 값 아님", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "다른 칸을 가리키는 표시 — 값이 아님." }, "안 잰 칸 rate_safety_base.embedded_in": { "what": "rate_safety_pct.brackets", "why": "다른 칸을 가리키는 표시 — 값 아님", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." }, "안 잰 칸 rate_safety_pct.base_rule": { "what": "min_of_two_formulas", "why": "도급자관급 포함 시 두 식 중 작은 값 — xlsx 글(EB11·EB13) 해석이라 안 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "도급자관급이 든 때 두 식 중 작은 값을 쓰라는 xlsx 글(EB11·EB13)을 프로그램 식으로 옮긴 것 — 글과 식은 꼴이 달라 글자로 맞댈 수 없음." }, "안 잰 칸 rate_safety_pct.base_with_owner_supplied_material": { "what": "minimum_of_statutory_two_formulas", "why": "도급자관급 포함 시 두 식 중 작은 값 — xlsx 글(EB11·EB13) 해석이라 안 맞댐", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 한 자리." }, "안 잰 칸 rate_vat.base": { "what": "construction_cost_before_vat", "why": "부가세 — 근거(부가가치세법)가 sources 에 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "부가세 근거(부가가치세법)가 `sources` 에 없음 — 저장소에 원문이 없어 맞댈 것이 없음." }, "안 잰 칸 rate_vat.rate_percent": { "what": 10.0, "why": "부가세 — 근거(부가가치세법)가 sources 에 없음", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "위와 같음." }, "조달청 요약표": { "what": "2026.04.13_조달청_토목공사_제비율.xlsx", "why": "xlsx 는 조달청 요약표 — 각 고시 원문과는 안 맞댐(연금만 법령과 맞댐)", "class": "㉮ 영영 할 일 아님", "갈래": "원문 부재", "class_why": "xlsx 는 조달청이 고시를 모아 요약한 표 — 각 고시 원문은 저장소에 없음(연금만 법령과 맞댐)." } } } }, "_갈래": { "센 날": "2026-09-18", "셈": { "원문 부재 / ㉰": 7, "잣대 못 알아봄 / ㉯": 7 }, "잣대": "두 갈래로 가름 — **원문 부재**: 값이 원문·원천에 없거나 원문 밖 말이라 채울 것이 없음 · **잣대 못 알아봄**: 값은 원문에 있는데 전사·읽기가 못 가름 ⇒ 고치면 풀림. ㉮ 영영 할 일 아님 · ㉯ 남이 고쳐야 풀림 · ㉰ 사용자·브레인 판단.", "할 일 아님으로 뺀 줄": 33, "닫힌 자리": [ { "날": "2026-09-18", "무엇": "양수기 7993-0020 휘발유 1.3ℓ (어긋남 세 줄)", "어떻게": "원문 규명으로 닫힘(브레인 B30) — PDF 340쪽 주연료표의 「휘발유1.3」은 **바로 윗줄 7992(모르타르 믹서)** 것이고 양수기 줄은 전력 1.49㎾ 뿐이었음. 옛 추출이 **이웃 줄 값을 물려받은 자리 틀림**. ⇒ 「원문 부재」가 아니라 **이웃 줄 오귀속**이었음.", "처리": "`mach_base_2026.json` 의 양수기 연료 줄을 지우고 다시 뽑음. 이어받기는 **옛 벌을 보고 되살리므로** 한 번 지워야 영영 안 돌아옴(`이어받음 {'fuel': 1}` → **0**). 7992 쪽 휘발유 1.3 은 이미 갈라 들어가 있음." } ] } }