feat(830-10): 재료 표 지역 열 분리 · 남은 상하차 글 판독 — 이름 · 규격의 지역 글을 단위 뒤 지역 칸으로

- 지역 칸 = 단위 바로 뒤 · 상하차 앞 · 적힌 지역 글 그대로(꼴 일곱 F1 ~ F6 · 6,604 줄 · 242 종) · 없음 = -(17,423 줄)
- 이름 꼴: 레미콘(서울)-사급 → 레미콘-사급 · 레미콘(관급)-경상북도(칠곡군) → 레미콘(관급) · 이형철근(SD400,제주)-관급 → 이형철근(SD400)-관급 · 모래(건조상태·전국) → 모래(건조상태) · 관급 · 사급 글은 남김
- 지역 아님은 그대로: 업체 · 산지(농산개발(홍성) · 보령웅천석) · 수종 · 상표
- EST 이름 칸 30 자에서 잘린 지역 글 30 줄 = 잘린 그대로 · 비고 「지역 글 잘림」
- 상하차: 폐기물운반비(상차포함) = 상차 · (상차제외) = - · 글은 이름에서 뺌(상차 125 → 135)
- 줄 · 키 · 차례 · 물가지 값 · 면수 · 출처 그대로(24,027) · 새 겹침 0(겹침 422 묶음 = 830-9 때부터)
- 손 값(지역 · 상하차 · 일반가격) 빌더가 이어 받음 · 「-」 은 손 값 아님
- check_master 지역 빈 칸 검사 · test_830_2 기대를 지역 칸 꼴로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-14 20:26:53 +09:00
co-authored by Claude Opus 5.5
parent bd3dee5f6f
commit 86cf20d997
5 changed files with 24132 additions and 24050 deletions
@@ -303,6 +303,8 @@ def check_form(name: str, data: dict) -> list[str]:
out.append(f"{where} · 열이 한 벌이 아님 — 「{' · '.join(cols)}」")
if book == "자재품목" and row.get(mm.LOAD) not in mm.LOADS:
out.append(f"{where} · 「{mm.LOAD}」 는 {' · '.join(mm.LOADS)} 가운데 하나")
if book == "자재품목" and not str(row.get(mm.REGION) or "").strip():
out.append(f"{where} · 「{mm.REGION}」 빈 칸 — 모르면 「{mm.NONE}」")
if kind == "품셈재료":
out += _check_linked(where, row)
if kind == "요소" and isinstance(row.get("값"), dict):