fix(data): 4바퀴 기초값 — 각재 비율 지어낸 것 뺌 · 손료 칸 밀림 · 전문공사 300억 이상 · 제조 노임 상위업종
브레인 4바퀴. 원문을 열어 하나씩 확인한 뒤 고침. **값(숫자)은 원문 그대로, 자리·이름만 맞춤.**
**① 거푸집 「각재」 비율 여섯 — 지어낸 것이라 뺌**
원문 12-4(F0336)는 **「합 판」 한 줄에 두 열**(재료별% · 노무비%)을 적고 「각 재」 줄엔 비율이 없음.
각재 자리에 있던 값이 **합판 줄의 노무비 열과 한 자도 안 다름** — 다른 열을 갖다 쓴 것이었음.
⇒ `plywood` → `plywood_material_pct` · 노무비 열은 `plywood_labor_pct` 로 제자리 ·
각재는 `timber_absent` 로 **비워 두고 사유**(옛 값도 함께 남김)
**② 기계 손료 5202·5203 칸 밀림** — 규격 열이 둘·셋인 표라 한 칸(5202)·두 칸(5203) 밀려
상각비율 자리에 내용시간(800·4,000)이 들어가 있었음. 원문 건설 8장 L2617~2633 대로 여덟 줄 맞춤
**③ 전문공사 일반관리비 300억 이상** — 마지막 구간이 「100억-300억 미만」으로 닫혀 **300억 넘는
전문공사가 어느 구간에도 안 걸렸음.** 원본 XLSX 대로 300~1000억 · 1000억 이상(둘 다 4.5%)을 더함.
⚠ 대조 시험의 구간 지도(`SPECIAL_PRICE`)에도 그 둘이 없어 원문 쪽에서도 안 잡히고 있었음 — 함께 채움
**④ 제조 노임 115~123 상위업종** — 「품질 관리 / 하위업종」인데 하위만 담아 반쪽이었음(아홉 줄).
원문(중소기업중앙회 조사표)대로 채움. 노임 값은 안 건드림
**⑤ 덤프 토사 E0 는 0.60 이 맞음** — 원문 10-12-1 은 식에 `E0=0.75` 를 적지만 바로 아래 [주]⑤
「굴착기의 작업능력 산정 비교」 표가 `E0 | 토사 | 0.60(불량)` 비고에 **「임 도」** 라고 못박음. 근거를 자료에 적음
**⑥ 이형철근** — 원문이 범위 「6~7」로 적은 것을 `alt_rate_range` 로 함께 실음(쓰는 값은 7 그대로)
⚠ 기계 이름 뭉개짐·손료표 md 변환 오류는 **코덱스가 md 를 고치는 중**이라 손대지 않음
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsGw1Dz9HmhuAxGisxmDPF
This commit is contained in:
@@ -218,14 +218,20 @@ def _formwork_reuse(doc: dict, md: dict) -> dict:
|
||||
label = _sq(row[0])
|
||||
series[label] = {heads[1]: row[4].split(), heads[2]: row[5].split()}
|
||||
ratio = doc["reuse_ratio_pct"]
|
||||
for key, row_label in (("plywood", "합판"), ("timber", "각재")):
|
||||
# ⚠ 원문은 **「합 판」 한 줄에 두 열**(재료별% · 노무비%)을 적고, 「각 재」 줄엔 비율이 없다.
|
||||
# 앞서 각재 자리에 노무비 열이 들어가 있었다(2026-09-18 바로잡음) — 열을 이름으로 맞댄다.
|
||||
합판 = {h: [float(x) for x in v] for h, v in series.get("합판", {}).items() if v}
|
||||
for key, head in (("plywood_material_pct", "재료별(%)"), ("plywood_labor_pct", "노무비(%)")):
|
||||
data_val = [ratio[key][str(n)] for n in range(1, 7)]
|
||||
found = {h: [float(x) for x in v] for h, v in series.get(row_label, {}).items() if v}
|
||||
if data_val not in found.values():
|
||||
out[f"reuse_ratio_pct/{key}"] = {
|
||||
"md": {row_label: found or "비율 칸 비어 있음", "합판": series["합판"]},
|
||||
"data": data_val,
|
||||
}
|
||||
if 합판.get(head) != data_val:
|
||||
out[f"reuse_ratio_pct/{key}"] = {"md": 합판.get(head), "data": data_val}
|
||||
# 각재는 **비어 있어야** 한다 — 다른 열을 갖다 쓰면 안 된다
|
||||
각재 = {h: v for h, v in series.get("각재", {}).items() if v}
|
||||
if 각재 or "timber" in ratio:
|
||||
out["reuse_ratio_pct/timber"] = {
|
||||
"md": 각재 or "비율 칸 비어 있음",
|
||||
"data": ratio.get("timber", "없음(원문에 없어 비워 둠)"),
|
||||
}
|
||||
area = md["tables"]["F0395"]["rows"]
|
||||
md_area = dict(zip([_sq(x) for x in area[0][:3]], [_num(x) for x in area[1][3:6]]))
|
||||
for cls in doc["euroform_type"]["classes"]:
|
||||
|
||||
Reference in New Issue
Block a user