Files
Aislo/B08_Quantity/B08_Quantity_Build_WorkItemMaster_Forms.py
T
eomsangdonandClaude Opus 5 5cdf305619 feat(b08): 확인 대기 75건을 셋으로 가름(㉮41·㉯23·㉰11) · 「당」 없는 몫 꼴을 읽어 밑수 251
**① 확인 대기 가르기** — 「다 사유 있음」으로 뭉쳐 있던 것을 갈래로 나눠 **무엇이 진짜 할 일인지** 보이게 함
  ㉮ **영영 할 일 아님 41** — 「일당」은 품의 단위 · 작업조 표(넣으면 호표가 사라짐) · 「인/조」 ·
    사람 판정으로 닫힌 표 성격 7 · 비목 구성표 7 따위. **집계에서 갈라 둠**(다음 바퀴에 또 안 세어짐)
  ㉯ **남이 고쳐야 풀림 23** — [주] 17(코덱스 md 읽기 넓히기) · 밑수 5(마스터가 맞고 md 가 덜 읽음) ·
    F0333 원문 md 의심(코덱스 PDF 대조)
  ㉰ **사용자 판단 필요 11** — ⚠ 아래 셋이 제근 9-21 같은 자리
    · F0046·F0068 마스터 밑수가 「1인」 — 「인」은 밑수가 아니라는 2026-09-09 판정과 어긋남
    · F0076 「1km」는 반쪽 — 원문은 「인/1일 1km당」으로 분모가 둘
    · 그 밖 부록 표 셋(떼어 낼지) · F0405 증가율표 성격 · 토량환산계수 2 · 이형철근 범위 · rebar 1

**② 「당」 없이 몫으로만 적힌 자리를 읽게 함** — 「(인/100㎡)」·「(인/ha)」·「(인/㎡)」·「(대/ton)」.
  ⚠ 이 구멍으로 다섯 표가 「원문 부재」로 **잘못 세어지고 있었음**(실은 원문이 적어 둔 것).
  가림을 넓히고 그 다섯을 사람 판정으로 채움 ⇒ 밑수 확보 246 → **251** · 미확보 84 → 79
  (원문 부재 69 + 미판독 10)

시험 — 장부 비교에서 **사람이 적은 메모 칸**(`why`·`class`·`class_why`)을 빼도록 함(자료가 아니라 설명)

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

324 lines
22 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",
"sub_requirement",
"신축이음 채움재 — 필요수량·고철대 감 3% 가 적힌 실값 표",
),
"F0390": (
"12-36",
"sub_requirement",
"P.C BOX 설치 — 미장공 0.14인·보통인부 0.05인 실값 표",
),
"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",
"sub_requirement",
"고임돌 소요량(㎥/㎡) — 석재 투입 체적 실값(B08 고임돌표가 이미 읽음)",
),
"F0410": (
"13-4-4",
"sub_requirement",
"찰쌓기 뒷채움 콘크리트(㎥/㎡) — 레미콘 실값(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)를 열 머리로 되살림, 토성×깊이별 보통인부(992㎡당)",
),
"F0141": ("5-26-2", "requirement", "위와 같은 모양(흙부수기) — 토성×깊이별 보통인부(992㎡당)"),
"F0142": (
"5-26-3",
"requirement",
"위와 같은 모양(돌자갈치우기) — 토성×깊이별 보통인부(992㎡당)",
),
"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",
"글값 — 값이 글로 적힌 소요량형(밑수는 표 밖이라 미확보로 남김)",
),
# ── 실값인데 「참고」로 빠져 있던 표 — 2026-09-18 2바퀴 대조(안티그래비티 권고) ─────
# ⚠ **`requirement` 로 올리지 않는다.** 이 표들은 홀로 발주되지 않고 **상위 공종에 딸린**
# 자재·노무 산출표라, 품으로 세우면 위 공종이 이미 세는 몫을 **두 번 센다**
# (F0393 은 `B09_Estimation_Euroform` 이, F0408·F0410 은 B08 표가 이미 직접 읽는다).
# 그렇다고 `reference` 로 두면 **금액이 0원으로 증발한다** — 그래서 낱말을 하나 둔다.
# `sub_requirement` = 「값은 실값, 자리는 상위 공종 종속」. 오늘 읽는 쪽은 건너뛰고,
# 자원 축이 붙는 날 이 딱지만 보면 된다(로직은 나중에 · 브레인).
"F0369": ("12-22", "sub_requirement", "P.V.C 파이프 설치 — 아스팔트 4kg·방수공 0.034인 실값"),
"F0380": ("12-30-1", "sub_requirement", "다웰바 신축이음부 — 재료비의 5%·특별인부 0.1인 실값"),
"F0381": ("12-30-2", "sub_requirement", "다웰바 접속스라브부 — 위와 같음"),
"F0382": ("12-31", "sub_requirement", "물끊기 홈 — 특별인부 0.1인·보통인부 0.001인 실값"),
"F0383": ("12-32", "sub_requirement", "전선관 설치 — 설치비(주재료비의 5%) 실값"),
"F0386": ("12-34-2", "sub_requirement", "합판거푸집(3회) — 보통인부 0.29인·진동기 2대 실값"),
"F0391": (
"12-37",
"sub_requirement",
"무근콘크리트 타설 — 콘크리트공 0.15인·보통인부 0.27인 실값",
),
"F0393": ("12-38-2", "sub_requirement", "유로폼 사용수량 — 부자재 주재료비의 24~79% 실값"),
# 보고서가 셈에서 빠뜨린 자리 하나 — 27 중 19만 가려 놓았는데, 남은 여덟을 훑어 찾음.
"F0338": (
"12-6",
"sub_requirement",
"콘크리트 포장(인력) — 포장공 3인·시공량 100/150㎥ 작업조 실값",
),
}
#: 표 번호 → (절 번호, 밑수 수, 밑수 단위, 까닭).
#: **머리가 소실돼 자동으로는 못 읽는 표**의 밑수만 싣는다 — 원문 대조로 확인한 것만.
#: ⚠ 자동으로 읽히는 표는 여기 넣지 않는다. 두 곳에서 값을 매기면 어느 쪽이 정본인지 흐려진다.
#: 근거 — `resources/knowledge/technical_info/01_임도/05_원가정보/
#: 산림품셈_form_미판정_14개_원문대조_규명.json` (2026-09-17 안티그래비티 원문 대조).
BASIS_JUDGMENTS: dict[str, tuple[str, float, str, str]] = {
# ⚠ 2026-09-18 **사람 판정을 물림** — 원문이 「(인/992㎡당)」이다(코덱스가 PDF 에서 되살린 줄 ·
# 원문 L2878·L2892·L2905). 앞서 100㎡ 로 적어 둔 것은 **머리가 소실돼 원문을 못 읽던 때**
# 흔한 밑수로 메운 값이었다. 이 고리의 잣대는 「원문이 정본」이므로 사람 판정이 물러난다.
# ⚠ 992㎡ 는 「0.1정(1반) ≒ 992㎡」 로, 옛 면적 단위를 그대로 쓴 자리다 — 100 과 열 배 가까이
# 달라 **금액이 크게 갈린다.** 그래서 사유를 남긴다.
"F0140": (
"5-26-1",
992.0,
"㎡",
"막갈이 — 원문 「(인/992㎡당)」(앞서 100㎡ 로 메워 둔 것을 물림)",
),
"F0141": ("5-26-2", 992.0, "㎡", "흙부수기 — 원문 「(인/992㎡당)」"),
"F0142": ("5-26-3", 992.0, "㎡", "돌자갈치우기 — 원문 「(인/992㎡당)」"),
"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당」"),
# ── 원문 md ↔ 마스터 전수 대조 60건 중 **원문 괄호가 분명하고 분모가 하나인 것만** ────
# 안티그래비티 보고(02544795) · 원문 줄을 직접 열어 괄호 글을 확인한 것만 싣는다.
# ⚠ 보고가 적은 단위를 그대로 믿지 않는다 — 「인」을 밑수로 적은 자리가 셋 있었고
# 그 자리(8-6-2 드론방제·8-6-3 지상방제)는 **2026-09-09 에 오독으로 판정된 바로 그 표**다.
"F0082": ("3-8", 1.0, "ha", "드론 영상 촬영 — 원문 「(단위 : 인/ha)」"),
"F0256": ("9-11-1", 1.0, "일", "원문 「(단위: 일당)」"),
"F0310": ("10-7-4", 1.0, "일", "원문 「(단위: 인/1일당)」"),
"F0311": ("10-7-4", 1.0, "기", "원문 「(단위: 1기당)」"),
"F0312": ("10-7-4", 1.0, "일", "원문 「(단위: 1일당)」"),
"F0313": ("10-8-1", 1.0, "일", "원문 「(단위: 인/1일당)」"),
"F0314": ("10-8-2", 1.0, "기", "원문 「(단위: 1기당)」"),
"F0315": ("10-8-3", 1.0, "일", "원문 「(단위: 1일당)」"),
"F0356": ("12-17-1", 1.0, "일", "원문 「(단위: ㎥/일 당)」"),
"F0424": ("13-8", 1.0, "㎡", "원문 「(단위: 인/㎡)」"),
"F0444": ("13-14", 1.0, "개", "원문 「(단위: 인/개)」"),
# ⚠ **작업조 표는 넣지 않는다**(2026-09-17 유로폼 호표가 사라져 드러남).
# 12-7-1·12-7-2·12-8 콘크리트 타설 · 12-38-3 유로폼 설치·해체 · 13-16-2 — 원문이 「(단위: 일 당)」
# 이라 넣고 싶어지지만, 이 표들은 **밑수가 시공량 열**이다(1단위당 = 인원 ÷ 시공량 ·
# B09 CrewOutput). 「1일」을 밑수로 박으면 그 길이 막혀 **호표가 통째로 사라진다**
# (2026-09-14 301 판정이 그래서 작업조 표를 미확보 목록에서도 뺐다).
# ⚠ **왜곡 고침 하나** — 값이 아니라 **밑수 단위**가 틀려 있던 자리.
# 원문 L7489 가 「(단위: 1일당)」인데 마스터가 「개」로 서 있었다(13-10-2 윈치말뚝 박기).
"F0430": ("13-10-2", 1.0, "일", "왜곡 고침 — 원문 「(단위: 1일당)」인데 「개」로 서 있었음"),
# ⚠ 「공㎥」(공간체적)는 자동 판정의 단위 목록에 없어 못 읽던 자리 — 원문 L6634 「(단위: 공㎥당)」.
# 단위 목록을 넓히면 규격 칸이 밑수로 둔갑하므로, 이 표만 사람 판정으로 둔다(2026-09-18).
"F0366": ("12-19", 1.0, "공㎥", "강관비계 — 원문 「(단위: 공㎥당)」"),
# ── 미판독 12 가운데 **분모가 하나로 또렷한 셋** (2026-09-18) ────────────────────
# ⚠ 자동 판정을 넓히지 않고 표마다 적는다 — 「ha당 소요량」·「조/ha당」 꼴을 규칙으로 잡으려면
# 숫자 없는 「<단위>당」을 받아야 하는데, 그러면 규격 칸(「(무한궤도,0.7㎥)」)이 밑수로 둔갑한다.
# 나머지 아홉은 안 채운다 — 「(단위 : 인)」 셋은 2026-09-09 오독 판정 자리이고,
# 「㎥/1인/1일」·「1ha당, 100본당」·「1대 1조, 시간당」·「인 당」은 분모가 둘 이상이다.
"F0050": ("2-1-4", 1.0, "ha", "페인트·마킹테이프 — 표머리 「재료비 (ha당 소요량)」"),
"F0052": ("2-1-4", 1.0, "ha", "위와 같음(다른 표)"),
"F0224": ("8-5", 1.0, "ha", "페르몬 유인트랩 — 표머리 「소요인력(조/ha당)」"),
# ── 「당」 없이 몫으로만 적힌 자리 다섯 (2026-09-18 · 장부에 숨어 있던 것) ──────────
# 원문이 표 바로 위에 「(인/100㎡)」·「(인/ha)」·「(인/㎡)」·「(대/ton)」 로 적어 둔 것.
# ⚠ 「당」 글자가 없어 자동 판정이 못 읽었다 — 규칙을 넓히기보다 표마다 적는다.
"F0089": ("4-4", 100.0, "㎡", "가지정리 — 원문 「(인/100㎡)」"),
"F0090": ("4-5", 1.0, "ha", "벌도 위험목 점검 — 원문 「(인/ha)」"),
"F0117": ("5-12", 100.0, "㎡", "떼붙임(재배잔디) — 원문 「(인/100㎡)」"),
"F0129": ("5-21", 1.0, "㎡", "표토이식 — 원문 「(인/㎡)」"),
"F0191": ("7-11", 1.0, "톤", "동력상하차기 — 원문 「(대/ton)」"),
}
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}"