Files
Aislo/B08_Quantity/B08_Quantity_Build_WorkItemMaster_Forms.py
T
eomsangdonandClaude Opus 5 e8484611f7 feat(b08): 산림 형태 미판정 14 → 0 — 안티그래비티 원문 대조 판정을 자료에 넣음 · 밑수 5도 함께
브레인 일감 1. `산림품셈_form_미판정_14개_원문대조_규명.json`(안티그래비티)을 기존
사람 판정 자리(`FORM_JUDGMENTS`)에 실음 — 머리 소실 9 · 혼합 3 · 공식 1 · 글값 1, 전부 금액 대상.

- 형태 — 소요량형 9 · 생산량형 3 · 계수 2. **산림 미판정이 0 이 됨**
  ⚠ 안티그래비티가 적은 `formula` 는 낱말을 새로 만들지 않고 뜻이 같은 `coefficient` 로 둠
    (받는 쪽이 모르는 형태를 만나면 조용히 건너뜀)
- 밑수 — 머리가 소실돼 **자동으로는 못 읽는 표 일곱**만 `BASIS_JUDGMENTS` 로(막갈이 100㎡당 ·
  묘목운반 1,000본당 · 12-1-3 ㎥당 · 12-11-1 m당). 자동으로 읽히는 표는 안 넣음(정본이 흐려짐)
- **더하기만** — 형태 14가 undetermined 에서 갈렸고 밑수 5가 빈칸에서 찼음. 덮어쓴 값 0
- 딸린 시험·이름표 손질 — F0349 는 이제 소요량형 · F0322 「형식 미정」 사유가 사라짐 ·
  미판정 목록이 비어 이름표에서 표 → 값 묶음으로 내려감(다시 생기면 표로 섬)

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

235 lines
15 KiB
Python
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-13 축 C 1장 · 미판정 표 판정).
자동 판정(`detect_form`)이 못 가르거나(undetermined 76표) 잘못 가른 표만 싣는다.
표마다 **왜 그렇게 갈랐는지 한 줄** — 원문 `(산림청고시 제2025-82호) 산림사업 표준품셈.md`.
⚠⚠ 뒤집히면 20배 틀림 — `productivity`(1÷값) / `requirement`(값÷밑수)는 **표 머리와 표 바로 위
본문의 단위 표현**으로만 가른다. 행 이름·비고의 직종 이름에 끌려 읽지 않는다.
⚠ **못 가른 표는 싣지 않는다** — undetermined 로 남는다.
2026-09-17 안티그래비티 원문 대조로 **마지막 14표를 가름** — 산림 미판정이 0 이 됐다.
⚠ `coefficient`·`reference` 로 가른 표는 일위대가 줄로 안 읽힌다(자원 축이 건너뜀) — 시공능력
공식 계수는 형태와 상관없이 공식 읽기가 표를 직접 본다.
⚠ 표 번호는 원천 차례로 매긴 것이라 **절 번호를 함께 대조**한다 — 어긋나면 빌드를 멈춘다.
"""
from __future__ import annotations
#: 표 번호 → (절 번호, 형태, 까닭).
FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
# ── 제2장 재료 기준 ─────────────────────────────────────────────
"F0044": (
"2-1-1",
"reference",
"기계별 주연료(ℓ/일·대)·잡품(%) — 행이 자원이 아니라 기계, 재료비 산출 기준",
),
"F0045": ("2-1-1", "reference", "위와 같은 모양(2드럼 케이블윈치)"),
"F0047": (
"2-1-2",
"reference",
"기계별 경유(ℓ/일·대)·잡품(%) — [주]③ 「1일당 소요량」, 행이 기계",
),
"F0048": ("2-1-3", "reference", "머리 「소요비용(원)」 — 품이 아니라 교체 1회당 금액"),
"F0054": ("2-1-5", "requirement", "본문 「(본당)」 + 행 「소금처리량(g)」 — 본당 재료 소요량"),
"F0063": (
"2-1-13",
"reference",
"「소모율 0.00125개/hr」 — 기계 시간당 소모품, 공종 밑수가 아님",
),
# ── 제5장 조림·녹화 ─────────────────────────────────────────────
"F0100": ("5-3-1", "reference", "수종별 묘목 규격(소·중·대묘) 표"),
"F0101": ("5-3-1", "reference", "간장·근원경 규격 기준 표"),
"F0105": ("5-3-4", "coefficient", "지주목 미설치 감률 「인력품의 10%·20%」"),
"F0107": ("5-3-5", "coefficient", "위와 같은 감률(흉고직경 표)"),
"F0137": ("5-24-2", "reference", "머리 「종자배합비율(%)」 조견표"),
"F0138": ("5-24-2", "reference", "위와 같은 조견표(기타 적용지역)"),
"F0146": ("5-29", "coefficient", "행이 K(버킷계수)·f·E·Cm — 굴착기 작업량 공식 계수"),
# ── 제7장 수확·운재 ─────────────────────────────────────────────
"F0187": ("7-9-2", "coefficient", "본문 「(단위 : %)」 — 집재재적·거리별 수집량 증가율"),
"F0189": ("7-11", "productivity", "표 바로 위 「(㎥/1대, 1일)」 — 대당 일 작업량"),
"F0190": ("7-11", "productivity", "위와 같음(최대집재거리 80m 이하)"),
"F0194": ("7-13", "reference", "검척 산출 예시(말구직경×개수) 표"),
"F0196": (
"7-15-1",
"productivity",
"표 바로 위 「(㎥/1대, 1일)」 — 「운반량」 줄이 작업량, 「회수」 줄은 참고",
),
"F0197": (
"7-15-2",
"productivity",
"표 바로 위 「(㎥/1대, 1일)」 — 「운재량」 줄이 작업량, [주]① 1대 1일",
),
"F0198": ("7-16", "productivity", "표 바로 위 「(㎥/1대, 1일)」 — 「운반량」 줄이 작업량"),
"F0199": ("7-17", "productivity", "표 바로 위 「(㎥/1대, 1일)」 — 「운반량」 줄이 작업량"),
"F0200": ("7-18", "productivity", "표 바로 위 「(㎥/1대, 1일)」 — 「운반량」 줄이 작업량"),
# ── 제8장 방제 ──────────────────────────────────────────────────
"F0205": ("8-2-1", "reference", "약제 이름·제형 목록"),
"F0208": ("8-2-2", "reference", "선정약제 목록 + 원액 주입량(㎖/㎝) 기준 — 품 표는 따로 있음"),
"F0212": ("8-2-3", "reference", "위와 같은 선정약제 목록"),
"F0216": ("8-2-4", "reference", "위와 같은 선정약제 목록"),
"F0218": ("8-2-5", "reference", "위와 같은 선정약제 목록"),
"F0453": (
# 2026-09-14 절 8-2-3 → 14-2 — 원본이 [주] 「…8-2-3 굴착기(2025)」…」 를 절로 읽던 것을
# 앞 절 이어받기로 고치자 부록 앞 마지막 절(14-2)로 옮겨 감. 부록엔 절 번호가 없어 여전히
# 제자리가 아님 — 참고표라 값에 안 닿음.
"14-2",
"reference",
"〔부록 2〕 산림사업별 적용 가능 공종 목록 — 절 경계가 밀려 붙음",
),
"F0220": (
"8-3",
"productivity",
"머리 「벌목조재 (㎥/인)·무더기 훈증 (RM/인)·그루터기 박피 (본/인)」 — 인당 작업량",
),
"F0221": ("8-3", "coefficient", "본문 「(단위: %)」 — 수종·직경별 지조율"),
"F0222": ("8-3", "coefficient", "머리 「비율(수간재적의 %)」 — 근주재적 산정율"),
"F0227": ("8-6-1", "reference", "기종별 희석배수별 약제량(L, 1회) — 살포 계산표"),
"F0231": ("8-6-3", "reference", "희석배수별 약제소요량(㎖) — 물의 양 대비 계산표"),
# ── 제9장 토공 — 시공능력 공식 계수 ────────────────────────────
"F0281": ("9-15-1", "coefficient", "행이 K·f·E·Cm — [주]② Q1=3600×q×K×f×E/Cm"),
"F0282": ("9-15-2", "coefficient", "행이 T·L·E·q — 불도저 작업량 공식 계수"),
"F0284": ("9-16-2", "coefficient", "행이 V·W·E·D — [주]② Q=1000×V×W×E×D×f/N"),
"F0285": ("9-16-3", "coefficient", "흡입준비·운반·흡입·대기 시간 — 살수차 사이클 시간"),
"F0287": ("9-18", "coefficient", "행이 K·f·E·Cm — [주]① Q1=3600×q×K×f×E/Cm"),
"F0295": ("9-22", "coefficient", "행이 K·f·E·Cm — [주]③ Q1=3600×q×K×f×E/Cm"),
# ── 제10장 운반 ─────────────────────────────────────────────────
"F0300": ("10-3-3", "reference", "「운반비·하차비」 적용 항목 — 값이 없는 구성 안내"),
"F0301": ("10-4", "coefficient", "t1·t2·t3·t4 — 트레일러 운반 사이클 시간"),
"F0308": ("10-7-4", "coefficient", "1사이클당 운반량 q — 모노레일 공식 계수"),
"F0309": ("10-7-4", "coefficient", "본문 「(단위: 분/1회당)」 — 적재·짐부리기 시간"),
"F0316": ("10-9-1", "reference", "규격별 1회당 표준 운반량(kg·개·㎡) — 적재 기준"),
"F0319": ("10-11", "coefficient", "행이 L·E·q0 — [주]② q=3.2×e, Cm 공식 계수"),
"F0320": ("10-12-1", "coefficient", "행이 K·E0·Cm — 굴착기 적재 공식 계수"),
"F0321": ("10-12-1", "coefficient", "적재·t2·적하 시간 — 덤프트럭 사이클 공식 계수"),
"F0324": (
"10-13-2",
"reference",
"드론운반 단가산출 항목(준비시간·왕복비행시간 식) — [주] 일본 산출 예",
),
# ── 제11·12장 ───────────────────────────────────────────────────
"F0328": ("11-4", "coefficient", "행이 q·k·f·E — [주]① Q=3600×q×k×f×E/Cm"),
# 2026-09-14 절 12-2 → 12-17-1 — 원본이 펌프카 타설 [주] 「…12-2 표면 마무리를 따른다.」 를
# 절 제목으로 읽어 12-2 에 붙어 있던 표(빌더가 앞 절 이어받기로 고침). 형태 판정은 그대로.
"F0358": ("12-17-1", "reference", "시설유형 Type-~Ⅳ 적용 기준 설명"),
"F0360": ("12-17-1", "reference", "현장조건 Type-~Ⅲ 적용 기준 설명"),
"F0385": (
"12-34-1",
"requirement",
"인력(인)·기계(대, Q=5.4㎥/hr) 소요량 표 — 「별도계상」 은 레미콘 자재 줄 비고일 뿐",
),
"F0388": ("12-34-4", "reference", "「재료비 JOINT FILLER」 항목만 — 값이 없는 구성 안내"),
"F0390": ("12-36", "reference", "제작비·운송비·설치비 「견적처리」"),
"F0392": ("12-38-1", "coefficient", "사용횟수별 잔존율(12회 25%·25회 10%)"),
"F0394": ("12-38-2", "coefficient", "부자재 요율 「주자재비의 24%·52%·79%」"),
"F0396": ("12-38-3", "reference", "설치 유형(복잡·보통·간단) 적용 시설 설명"),
# ── 제13장 구조물 ───────────────────────────────────────────────
"F0400": ("13-2-3", "reference", "큰돌 직경별 뒷길이 기준(㎝)"),
"F0406": (
"13-4-1", # 2026-09-17 절 바로잡음 — [주]④ 인용을 13-3 제목으로 읽었던 것(표는 13-4-1 메쌓기 아래)
"reference",
"〈돌쌓기의 개수 및 중량의 표준〉 — [주] 인력 돌쌓기·돌붙임 기준",
),
"F0408": (
"13-4-3",
"reference",
"고임돌 소요량(㎥/㎡) — 자재 원단위표(B08 고임돌표가 씀). 품으로 세우면 자재를 두 번 셈",
),
"F0410": (
"13-4-4",
"reference",
"[주]① 채움 콘크리트 소요량(㎥/㎡) — 자재 원단위표(B08 채움표가 씀). 품이면 두 번 셈",
),
"F0411": ("13-4-4", "reference", "[주]⑨ 성토 뒤채움 조약돌 두께(㎝) 기준"),
"F0412": (
"13-4-4",
"reference",
"[주]⑩ 뒷길이 표준(㎝) — 자동 판정이 「(m)」에 걸려 소요량형으로 오판",
),
"F0413": (
"13-4-4",
"reference",
"[주]⑪ 표준경사(1:n) — 자동 판정이 소요량형으로 오판, 찰쌓기(인력)를 막음",
),
"F0429": ("13-10-2", "coefficient", "[주]⑥ 관입률별 계수"),
"F0439": ("13-12-2", "coefficient", "[주]⑦ 높이·기울기 할증(%)"),
"F0446": ("13-15-2", "reference", "작업조건(어려운·쉬운) 구분 기준"),
# ── 미판정 14 — 2026-09-17 안티그래비티 원문 대조 규명(브레인 넘김) ─────────────
# `산림품셈_form_미판정_14개_원문대조_규명.json` · 머리 소실 9 · 혼합 3 · 공식 1 · 글값 1.
# ⚠ 여기까지가 산림 미판정 전부다 — 다 채우면 `form_undetermined` 가 0 이 된다.
"F0140": (
"5-26-1",
"requirement",
"머리 소실 — 윗 2줄 막갈이깊이(cm)를 열 머리로 되살림, 토성×깊이별 보통인부(100㎡당)",
),
"F0141": ("5-26-2", "requirement", "위와 같은 모양(중갈이) — 토성×깊이별 보통인부(100㎡당)"),
"F0142": ("5-26-3", "requirement", "위와 같은 모양(전면갈이) — 토성×깊이별 보통인부(100㎡당)"),
"F0195": (
"7-14",
"productivity",
"머리 소실 — 값이 「1인 1일 공정량」이라 생산량형(품 = 1 ÷ 값)",
),
"F0248": ("9-7-1", "coefficient", "머리 소실 — 값이 품이 아니라 계산식 파라미터"),
"F0322": ("10-13-1", "requirement", "머리 소실 — 묘목 1,000본당 소요량"),
"F0323": ("10-13-2", "requirement", "위와 같음(묘목 1,000본당)"),
"F0333": ("12-1-3", "requirement", "머리 소실 — ㎥당 소요량"),
"F0346": ("12-11-1", "requirement", "머리 소실 — m당 소요량"),
"F0169": ("7-1-1", "productivity", "혼합 — 값이 「㎥/인·일」이라 생산량형"),
"F0304": ("10-6-3", "requirement", "혼합 — 소요량형(밑수는 표 밖이라 미확보로 남김)"),
"F0356": ("12-17-1", "productivity", "혼합 — 값이 「㎥/일」이라 생산량형"),
# ⚠ 안티그래비티는 이 표를 `formula` 로 적었으나 **낱말을 새로 만들지 않는다** —
# 받는 쪽이 모르는 형태를 만나면 조용히 건너뛴다. 뜻이 같은 `coefficient`(계산식 파라미터)로 둔다.
"F0257": (
"9-11-1",
"coefficient",
"공식 명세 — 시공능력 공식 파라미터(안티그래비티 판정 `formula`)",
),
"F0349": (
"12-11-3",
"requirement",
"글값 — 값이 글로 적힌 소요량형(밑수는 표 밖이라 미확보로 남김)",
),
}
#: 표 번호 → (절 번호, 밑수 수, 밑수 단위, 까닭).
#: **머리가 소실돼 자동으로는 못 읽는 표**의 밑수만 싣는다 — 원문 대조로 확인한 것만.
#: ⚠ 자동으로 읽히는 표는 여기 넣지 않는다. 두 곳에서 값을 매기면 어느 쪽이 정본인지 흐려진다.
#: 근거 — `resources/knowledge/technical_info/01_임도/05_원가정보/
#: 산림품셈_form_미판정_14개_원문대조_규명.json` (2026-09-17 안티그래비티 원문 대조).
BASIS_JUDGMENTS: dict[str, tuple[str, float, str, str]] = {
"F0140": ("5-26-1", 100.0, "㎡", "막갈이 — 머리 소실 · 원문 「100㎡당」"),
"F0141": ("5-26-2", 100.0, "㎡", "중갈이 — 위와 같음"),
"F0142": ("5-26-3", 100.0, "㎡", "전면갈이 — 위와 같음"),
"F0322": ("10-13-1", 1000.0, "본", "묘목 운반 — 원문 「묘목 1,000본당」"),
"F0323": ("10-13-2", 1000.0, "본", "위와 같음"),
"F0333": ("12-1-3", 1.0, "㎥", "원문 「㎥당」"),
"F0346": ("12-11-1", 1.0, "m", "원문 「m당」"),
}
def judged_basis(table_id: str, number: str | None) -> tuple[float, str, str] | None:
"""사람이 확인한 `(밑수 수, 단위, 까닭)`. 없으면 `None`. 절 번호가 어긋나면 멈춘다."""
found = BASIS_JUDGMENTS.get(table_id)
if found is None:
return None
section, quantity, unit, why = found
if section != number:
raise ValueError(
f"밑수 판정 {table_id} 의 절 {section} 이 원천의 {number} 와 다릅니다 — "
"원천 표 차례가 바뀌었으니 판정을 다시 대조할 것"
)
return quantity, unit, f"사람 판정 — {why}"
def judged_form(table_id: str, number: str | None) -> tuple[str, str] | None:
"""사람이 가른 `(형태, 까닭)`. 없으면 `None`. 절 번호가 어긋나면 멈춘다."""
found = FORM_JUDGMENTS.get(table_id)
if found is None:
return None
section, form, why = found
if section != number:
raise ValueError(
f"표 형태 판정 {table_id} 의 절 {section} 이 원천의 {number} 와 다릅니다 — "
"원천 표 차례가 바뀌었으니 판정을 다시 대조할 것"
)
return form, f"사람 판정 — {why}"