Files
Aislo/resources/tester/fixtures/base_prices_source_known.json
T
eomsangdonandClaude Opus 5 75a96a6a18 fix(tester): 프룬이 「할 일 아님」 칸을 되돌려 놓던 구멍 막음 · 기계 md 읽기 셋 넓힘(못 보는 자리 38 → 25)
**① 프룬 구멍** — 읽기(`load_known()`)만 「할 일 아님」 칸을 읽게 고쳤고 **쓰기는 안 고쳤음**.
  `--prune` 이 합쳐 읽은 것을 그대로 되쓰면 2026-09-18 에 가른 칸이 다시 갈래로 섞여
  **없는 할 일 36 이 되살아남**. 세 파일 다 「제자리에서 지우기」로 고침.

**② 기계 읽기 넓힘**
  · `| 9020- | 비항SD | | … |` 꼴 **앞자리만 알리는 머리줄** — 값이 없으니 못 보는 자리가 아님(8줄 뺌)
  · 빈 칸·`동력` 낱말·전력(㎾) 주연료를 읽게 함 — 전력 기종 아홉은 원문에 기름 값이 없어
    양쪽이 비는 것이 맞음(12줄 뺌) · 7360-0090 차선 제거기는 원문 휘발유 5.53 을 이제 읽음
  ·  **머리 없는 이어 표**를 세는 자리를 만듦 — 책장 넘김에 밀린 줄을 `|---|` 없이 따로 적어
    표로 안 잡히던 자리. **9020 그래브 준설선 일곱 줄의 손료계수가 양쪽 다 조용히 빠져 있었음**

**③ 드러난 어긋남을 장부에 사유·주인과 함께 올림**
  · 7993-0020 양수기 — md 가 규격을 주연료 칸에 밀어 적음(코덱스: PDF 대조로 휘발유 1.3ℓ 제자리에)
  · 9020 일곱 줄 — 코덱스: 앞 표에 이어 붙일 것(`제8장_건설기계.md` 3617줄 자리)
  · 겸용 연료 둘(3450-0642 · 7992-0001) — 랩탑 메인: `_build_mach.py` 가 갈라 읽게

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsGw1Dz9HmhuAxGisxmDPF
2026-09-18 13:21:13 +09:00

514 lines
32 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"_설명": [
"원문 ↔ 기초단가 다섯 갈래 — 지금 알고 있는 어긋남과 시험이 못 보는 자리(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": {
"가격 8201-0100 machine_name": {
"source": "3D GNSS 머신 가이던스(굴착기용)",
"data": "",
"why": "자료 이름이 빔 — 원문 손료표 머리 `(코드) 이름` 엔 이름 있음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"손료 8201-0100 machine_name": {
"source": "3D GNSS 머신 가이던스(굴착기용)",
"data": "배관파이프시 간 당(10-7)분류번호규 격7995-0050ø50-2.6m5,0008-3-9 [80]스마트 건설장비(8201) 3D GNSS 머신 가이던스(굴착기용)",
"why": "자료 이름 칸에 원문 뭉개진 손료 글이 통째로 들어감 — 자료 이름 틀림",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"연료 7993-0020": {
"source": null,
"data": {
"machine_code": "7993-0020",
"machine_name": "양수기",
"fuel_type": "gasoline",
"fuel_rate_l_per_hour": 1.3,
"parse_method": "verified_source_row_alignment",
"specification": "1.49㎾"
},
"why": "원문 md 8-4 양수기 줄이 `| 7993-0020 | 양수기 | 1.49㎾ | 1.49㎾ | - | - |` — **규격을 주연료 칸에** 밀어 적어 원문에 기름 값이 없다. 자료의 휘발유 1.3ℓ 는 사람이 PDF 를 보고 맞춘 값을 옛 벌에서 이어받은 것이다. ⇒ 값을 지울 자리가 아니라 **md 전사를 고칠 자리**다(고치면 저절로 맞음).",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-4 운전경비 양수기 7993-0020 줄 — 주연료 칸에 규격(1.49㎾)이 밀려 들어갔음. PDF 대조로 주연료(휘발유 1.3ℓ)를 제자리에 적어 줄 것. 옆 규격 칸도 함께 볼 것."
},
"셈 연료 코드 수": {
"source": 273,
"data": 274,
"why": "원문 md 8-4 양수기 줄이 `| 7993-0020 | 양수기 | 1.49㎾ | 1.49㎾ | - | - |` — **규격을 주연료 칸에** 밀어 적어 원문에 기름 값이 없다. 자료의 휘발유 1.3ℓ 는 사람이 PDF 를 보고 맞춘 값을 옛 벌에서 이어받은 것이다. ⇒ 값을 지울 자리가 아니라 **md 전사를 고칠 자리**다(고치면 저절로 맞음).",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-4 운전경비 양수기 7993-0020 줄 — 주연료 칸에 규격(1.49㎾)이 밀려 들어갔음. PDF 대조로 주연료(휘발유 1.3ℓ)를 제자리에 적어 줄 것. 옆 규격 칸도 함께 볼 것."
},
"셈 연료 원문에 없는 자료 줄": {
"source": 0,
"data": 1,
"why": "원문 md 8-4 양수기 줄이 `| 7993-0020 | 양수기 | 1.49㎾ | 1.49㎾ | - | - |` — **규격을 주연료 칸에** 밀어 적어 원문에 기름 값이 없다. 자료의 휘발유 1.3ℓ 는 사람이 PDF 를 보고 맞춘 값을 옛 벌에서 이어받은 것이다. ⇒ 값을 지울 자리가 아니라 **md 전사를 고칠 자리**다(고치면 저절로 맞음).",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-4 운전경비 양수기 7993-0020 줄 — 주연료 칸에 규격(1.49㎾)이 밀려 들어갔음. PDF 대조로 주연료(휘발유 1.3ℓ)를 제자리에 적어 줄 것. 옆 규격 칸도 함께 볼 것."
}
},
"material": {},
"oil": {},
"rate": {},
"labor_blind": {
"건설 pdf": {
"what": "3. 개별직종 노임단가.md",
"why": "원문 md 는 PDF 를 옮긴 것 — PDF 자체와의 옮김 틀림은 못 봄",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"건설 별칭 이름": {
"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": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 labor_mfg.unit": {
"what": "원문과 안 맞댐",
"why": "`KRW/day` 는 프로그램 표기 — 원문 글(원·1일)과 글자로 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 labor_rate.unit": {
"what": "원문과 안 맞댐",
"why": "`KRW/day` 는 프로그램 표기 — 원문 글(원·1일)과 글자로 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"제조 pdf": {
"what": "2026상반기_중소제조업_직종별_임금조사_중소기업중앙회.md",
"why": "원문 md 는 PDF 를 옮긴 것 — PDF 자체와의 옮김 틀림은 못 봄",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
}
},
"machine_blind": {
"손료 계수 칸 없는 표 5220": {
"what": [
"분류 번호",
"규 격",
"내용 시간",
"연간 표준 가동 시간"
],
"why": "복원 뒤에도 원문 표에 계수 칸이 없음 — 머리 「시 간 당(10-7)」 은 표 위 글줄로만 · 값은 원문에 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"손료 계수 칸 없는 표 7995": {
"what": [
"분류 번호",
"규 격",
"내용 시간"
],
"why": "복원 뒤에도 원문 표에 계수 칸이 없음 — 머리 「시 간 당(10-7)」 은 표 위 글줄로만 · 값은 원문에 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"손료보정 수 자리 가름": {
"what": "뭉개진 글의 이어 붙은 수(2510)를 통째로 맞댐",
"why": "8-1-7 가산비율 표가 글로 뭉개져 `2510` 처럼 붙음 — 25·10 인지 2·510 인지 못 가름",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_fuel_rate.parse_method": {
"what": "원문과 안 맞댐",
"why": "사람이 손으로 맞춘 줄이라는 표시 — 원문에 없는 칸(2026-09-18 기준 7993-0020 하나)",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_fuel_rate.source_tables.section": {
"what": "원문과 안 맞댐",
"why": "8-4 원표의 절 제목 — 표 차례로 맞대므로 글자는 안 봄(원표 머리·줄은 맞댐)",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_fuel_rate.specification": {
"what": "원문과 안 맞댐",
"why": "규격 칸이 한 칸에 여러 값·여러 열로 뭉쳐 가르기 어려움 — 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_loss_coef.loss_coefficient_per_hour": {
"what": "원문과 안 맞댐",
"why": "계산 칸(계 × 10⁻⁷) — 원문 `계`(source_coefficient_1e_minus_7)만 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_loss_coef.note": {
"what": "원문과 안 맞댐",
"why": "데스크탑 서브가 붙인 설명 글 — 값 아님",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_loss_coef.specification": {
"what": "원문과 안 맞댐",
"why": "규격 칸이 한 칸에 여러 값·여러 열로 뭉쳐 가르기 어려움 — 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_operator_map.rules.alias": {
"what": "원문과 안 맞댐",
"why": "프로그램이 지은 이름·출처 표기",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_operator_map.rules.rule_id": {
"what": "원문과 안 맞댐",
"why": "프로그램이 지은 이름·출처 표기",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_operator_map.rules.source_section": {
"what": "원문과 안 맞댐",
"why": "프로그램이 지은 이름·출처 표기",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_price.specification": {
"what": "원문과 안 맞댐",
"why": "가격표엔 규격 칸이 없음(기종·코드·가격만)",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_rock_adj.rules.exception": {
"what": "원문과 안 맞댐",
"why": "[주]① 예외 글을 프로그램 말로 옮긴 칸 — 글자로 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mach_rock_adj.rules.exclusion": {
"what": "원문과 안 맞댐",
"why": "[주]① 예외 글을 프로그램 말로 옮긴 칸 — 글자로 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"연료 표 3450-0642": {
"codes": [
"3450-0642",
"3450-0642"
],
"why": "원문 8-4 주연료 칸에 **두 연료가 한 칸에** 적혀 있음 — `73.7+휘발유54.5`(3450-0642 현장가열표층재생기) · `1.87㎾ 휘발유1.3`(7992-0001 모르타르 믹서). 앞은 기본 연료(경유·전력), 뒤는 휘발유다. 기름 값이 **원문에 있는 값**인데 자료(`mach_fuel_rate`)가 이 두 기종을 아주 안 담아 맞댈 것이 없음.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "`_build_mach.py` 가 8-4 주연료 칸의 **겸용 표기**를 갈라 읽게 해 줄 것 — 기름 값(휘발유 54.5 · 1.3)은 원문에 있는 값이라 자료에 들어가야 함. 전력분(1.87㎾)을 함께 담을지는 브레인 판정 자리."
},
"연료 표 7992-0001": {
"codes": [
"7992-0001",
"7992-0001"
],
"why": "원문 8-4 주연료 칸에 **두 연료가 한 칸에** 적혀 있음 — `73.7+휘발유54.5`(3450-0642 현장가열표층재생기) · `1.87㎾ 휘발유1.3`(7992-0001 모르타르 믹서). 앞은 기본 연료(경유·전력), 뒤는 휘발유다. 기름 값이 **원문에 있는 값**인데 자료(`mach_fuel_rate`)가 이 두 기종을 아주 안 담아 맞댈 것이 없음.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "`_build_mach.py` 가 8-4 주연료 칸의 **겸용 표기**를 갈라 읽게 해 줄 것 — 기름 값(휘발유 54.5 · 1.3)은 원문에 있는 값이라 자료에 들어가야 함. 전력분(1.87㎾)을 함께 담을지는 브레인 판정 자리."
},
"운전사 기종별 판단": {
"what": 121,
"why": "기종→운전사 구분(explicit_mappings)은 사람 판단 — 원문 8-1-3 5호는 기종 이름 글만 있음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"손료 머리 없는 이어 표 9020-0022": {
"what": "| 9020-0022 | 비항SD, 3.00㎥ | 164 | 20,000 | 1,780",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
},
"손료 머리 없는 이어 표 9020-0035": {
"what": "| 9020-0035 | 비항SD, 5.00㎥ | 261 | 20,000 | 1,780",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
},
"손료 머리 없는 이어 표 9020-0050": {
"what": "| 9020-0050 | 비항SD, 6.00㎥ | 373 | 20,000 | 1,780",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
},
"손료 머리 없는 이어 표 9020-0072": {
"what": "| 9020-0072 | 비항SD, 7.50㎥ | 537 | 20,000 | 1,780",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
},
"손료 머리 없는 이어 표 9020-0160": {
"what": "| 9020-0160 | 비항SD, 12.50㎥ | 1,194 | 20,000 | 1,",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
},
"손료 머리 없는 이어 표 9020-0180": {
"what": "| 9020-0180 | 비항SD, 16.00㎥ | 1,343 | 20,000 | 1,",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
},
"손료 머리 없는 이어 표 9020-0200": {
"what": "| 9020-0200 | 비항SD, 25.00㎥ | 1,491 | 20,000 | 1,",
"why": "원문 md 가 **머리 없는 이어 표**로 적은 자리 — 책장 넘김에 밀린 줄을 빈 줄 뒤에 따로 적어 `|---|` 머리가 없다. 그래서 표로 잡히지 않아 **추출기(`_build_mach.py`)도 이 읽기도 못 봄** — 값은 원문에 있는데 `mach_loss_coef` 에 그 아홉 줄(9020 그래브 준설선 일곱 등)이 빠져 있음. 가격 쪽에는 같은 코드가 있어 **손료계수만 비는 어긋남**임.",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "코덱스",
"owner_ask": "제8장 8-3 (9020) 그래브 준설선 — `9020-0022`~`0200` 일곱 줄이 앞 표와 떨어진 **머리 없는 표**로 적혀 있음(제8장_건설기계.md 3617줄 자리). 앞 표에 이어 붙여 줄 것. 붙이면 추출기·시험이 저절로 읽음."
}
},
"material_blind": {
"API 스냅숏": {
"what": "나라장터_시설공통자재_2026-08-14.json",
"why": "원문이 API 로 받은 스냅숏 — 게시처(나라장터·오피넷) 값 자체와는 못 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"같은 때 공시 20696249": {
"what": 2,
"why": "같은 공시 일시에 값 실린 공시가 둘 — 원천이 어느 것이 정본인지 안 알려 줌 · 자료는 그중 하나와 같음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"같은 때 공시 20696250": {
"what": 2,
"why": "같은 공시 일시에 값 실린 공시가 둘 — 원천이 어느 것이 정본인지 안 알려 줌 · 자료는 그중 하나와 같음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 mat_price.price_adopted_reason": {
"what": "원문과 안 맞댐",
"why": "빌더가 적은 까닭 글 — 원문 칸 아님",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"원천 없는 묶음": {
"what": [
"reinforcing_steel",
"ready_mixed_concrete",
"asphalt_concrete"
],
"why": "철근·레미콘·아스콘은 종합쇼핑몰 원천이 저장소에 없음 — 값 못 봄",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
}
},
"oil_blind": {
"API 스냅숏": {
"what": [
"유가_전국평균_2026-08-14.json",
"유가_시도별_2026-09-09.json"
],
"why": "원문이 API 로 받은 스냅숏 — 게시처(나라장터·오피넷) 값 자체와는 못 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"시도 거래일": {
"what": "시도별 원천에 거래일 칸이 없음 — 수집일과만 맞댐",
"why": "시도별 원천 줄에 거래일이 없어 `수집일` 로만 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 oil.scope": {
"what": "원문과 안 맞댐",
"why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 oil.unit": {
"what": "원문과 안 맞댐",
"why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 oil_regional.scope": {
"what": "원문과 안 맞댐",
"why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 oil_regional.source_product_name": {
"what": "원문과 안 맞댐",
"why": "시도별 원천에 상품 이름 칸 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 oil_regional.unit": {
"what": "원문과 안 맞댐",
"why": "프로그램 표기(KRW/L · national_average) — 원천에 칸 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
}
},
"rate_blind": {
"processing_rules": {
"what": [
"note",
"owner_supplied_material",
"performance_guarantee_fee",
"profit",
"rounding",
"safety_management_cost",
"scale_bracket"
],
"why": "끝수·산식 처리 규칙 — 코드 규칙이라 원문 대조 대상 아님(거울 시험 몫)",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_environment.forest_road_selection_status": {
"what": "pending",
"why": "임도 공종 선택 미결 표시 — 사용자 협의 몫",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_environment.minimum_estimated_amount_krw": {
"what": 100000000,
"why": "xlsx 환경보전비 칸에 1억 기준이 없음(1억은 퇴직공제부금 칸) — 근거 원문이 sources 에 없어 못 봄",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_equipment_payment_guarantee.base_note": {
"what": "코드(`B09_Estimation_Statutory.STATUTORY_ITEMS`)가 직접공사비로 계산하고 있는 것과 맞춘 표기.",
"why": "설명 글",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 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": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_overhead.specialty_note": {
"what": "⚠ 2026-09-18 **300억 이상 두 구간이 통째로 빠져 있었음** — 마지막이 「100억-300억 미만」으로 닫혀 300억 넘는 전문공사가 어느 구간에도 안 걸렸음. 원본 XLSX(BL35:BR46) 대로 300~1000억 · 1000억 이상을 더함(둘 다 4.5%). 값은 원문 그대로.",
"why": "데스크탑 서브가 붙인 설명 글 — 값 아님",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_performance_guarantee_fee.typical_forest_road_applicability": {
"what": "not_applicable",
"why": "임도 적용 판단 — 원문 칸 아님",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_safety_base.amount_bracket": {
"what": "500_million_to_5_billion",
"why": "다른 칸을 가리키는 표시 — 값 아님",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_safety_base.embedded_in": {
"what": "rate_safety_pct.brackets",
"why": "다른 칸을 가리키는 표시 — 값 아님",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_safety_pct.base_rule": {
"what": "min_of_two_formulas",
"why": "도급자관급 포함 시 두 식 중 작은 값 — xlsx 글(EB11·EB13) 해석이라 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_safety_pct.base_with_owner_supplied_material": {
"what": "minimum_of_statutory_two_formulas",
"why": "도급자관급 포함 시 두 식 중 작은 값 — xlsx 글(EB11·EB13) 해석이라 안 맞댐",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_vat.base": {
"what": "construction_cost_before_vat",
"why": "부가세 — 근거(부가가치세법)가 sources 에 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"안 잰 칸 rate_vat.rate_percent": {
"what": 10.0,
"why": "부가세 — 근거(부가가치세법)가 sources 에 없음",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
},
"조달청 요약표": {
"what": "2026.04.13_조달청_토목공사_제비율.xlsx",
"why": "xlsx 는 조달청 요약표 — 각 고시 원문과는 안 맞댐(연금만 법령과 맞댐)",
"class": "㉯ 남이 고쳐야 풀림",
"owner": "랩탑 메인",
"owner_ask": "기계 원천 벌(mach_base_2026.json) 재추출 — 그 추출기가 이 저장소에 없어 우리가 못 돌림"
}
}
}