① 마스터가 본문·표에서 밑수를 「인」으로 읽어 온 자리가 여섯 있음(드론방제 둘·지상방제· 야면석 채집·휘발유·천공기). 「인」은 **사람 수**이지 공종 단위가 아니라, 그대로 두면 「몇 인짜리 공종」이 되어 **단위 불일치 검사가 엉뚱하게 통과**함. ⚠ 원문 쪽 고치기는 마스터 몫(데스크탑 메인) — 여기서는 **받는 쪽에서 막음**. 같은 규칙이 `WorkItemUnit` 머리말에 이미 있어 짝을 맞춤 ② 규준틀 사유 갱신 — 데스크탑 메인이 각재·판재·못을 자재 축에 세워(`e100d311`) 「인력 품만」의 뜻이 바뀜. 재료가 오되 관급·사급이 안 갈려 아직 금액 0 임을 적음 ⚠ 계획서 9장 재판정(미체크 27 → 21 · 크기 딱지)은 `docs/` 가 git 밖이라 커밋에 안 실림 — 파일에는 반영돼 있음. 검증: pytest 300 통과 · 밑수가 「인」인 자원 줄 0 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
70 lines
4.0 KiB
Python
70 lines
4.0 KiB
Python
"""B09 원가계산 — **원문에는 있는데 단가에 못 실린 몫** (2026-09-09).
|
|
|
|
「반쪽 단가」 표시는 여태 **이름을 카탈로그에서 못 찾은 줄**만 잡았다. 그물 밖에 둘이 더 있다.
|
|
|
|
㉠ 표에 줄은 있는데 **값을 못 적는** 것 — 기초잡석 「운반 | 덤프트럭(15ton)」
|
|
㉡ 표에 아예 없고 **[주]가 별도라 한** 것 — 규준틀 목재·표지판
|
|
|
|
둘 다 **금액이 서 있는 줄**이라 표시가 없으면 **완성된 값으로 읽힌다**(2026-09-09 실측:
|
|
규준틀 둘이 4,921,267원인데 인력만의 값이었다).
|
|
|
|
⚠ **사유를 뭉뚱그리지 않는다.** 「원문이 값을 안 줌」은 **영영 막힌 것**으로 읽히고,
|
|
「거리 미정」·「설계수량 대기」는 **곧 풀릴 것**으로 읽힌다. 사용자가 보는 뜻이 다르다.
|
|
|
|
⚠ **여기 적는 것은 원문에 있는 말뿐이다.** 값을 만들지 않는다 — 무엇이 왜 빠졌는지만 적는다.
|
|
⚠ **마스터가 [주]를 싣게 되면 이 표는 지운다** — 두 곳에 같은 말을 두면 한쪽만 고쳐진다.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
#: 공종코드 → (짧은 딱지, 사유 한 줄). 접두사로 맞춘다(갈래가 붙어도 걸리게).
|
|
KNOWN_GAPS: dict[str, tuple[str, str]] = {
|
|
# ⚠ 규준틀 둘은 **B08 인계가 이미 「재료량은 [주]④ 설계수량에 따른다라 미확보」**를 싣는다.
|
|
# 그러니 그 말을 되풀이하지 않고 **B09 쪽에서만 아는 것**만 보탠다 —
|
|
# ㉠ 지금 선 값이 **인력 품만**이라는 것 ㉡ 손율은 원문에 이미 있다는 것.
|
|
# (2026-09-09: 처음엔 「표시가 아무것도 없다」고 봤는데, 인계 사유가 화면 문구 뒤쪽에
|
|
# 잘려 안 보였던 것이다. 잘린 자리를 사유가 없는 자리로 읽지 말 것.)
|
|
"FP-11-02": (
|
|
"인력 품만",
|
|
"ⓘ 이 단가는 **인력 품만**입니다 — 목재·못은 **자재 축**으로 따로 갑니다"
|
|
"(2026-09-09 각재·판재·못이 자재 축에 섰음. 다만 관급·사급이 안 갈려 아직 금액 0). "
|
|
"재료가 금액으로 서면 손율이 함께 걸립니다 — 품셈 [주]③ 「목재의 손율은 1개소 사용당 50%」.",
|
|
),
|
|
"FP-11-03": (
|
|
"인력 품만",
|
|
"ⓘ 이 단가는 **인력 품만**입니다 — 목재·못은 **자재 축**으로 따로 갑니다"
|
|
"(2026-09-09 각재·판재·못이 자재 축에 섰음. 다만 관급·사급이 안 갈려 아직 금액 0). "
|
|
"재료가 금액으로 서면 손율이 함께 걸립니다 — 품셈 [주]③ 「목재의 손율은 1개소 사용당 80%」.",
|
|
),
|
|
"FP-12-25": (
|
|
"운반거리 미정",
|
|
"⚠ 이 값에는 **운반 몫이 빠져 있습니다** — 품셈 12-25 는 「운반 | 덤프트럭(15ton)」 줄을 "
|
|
"두었으나 시간을 적지 않았습니다. 그 값은 품셈 10-12(덤프운반)가 **운반거리로** 냅니다"
|
|
"(같은 15ton 장비). 거리가 정해지면 사토 운반·덤프 운반과 **함께** 섭니다.",
|
|
),
|
|
}
|
|
|
|
#: 조건이 서면 **빠져야 하는** 줄 — 지금은 무조건 붙어 있다.
|
|
#: ⚠ 다른 조건부 줄들(계획서 9-9)과 달리 **이것은 금액이 서 있는 줄**이다.
|
|
CONDITIONAL_INCLUDED: dict[str, str] = {
|
|
"FP-12-25": (
|
|
"ⓘ 소할(할석공 0.06인)은 품셈 12-25 가 「**브레이커 사용할 때 제외**」라 적은 줄입니다 — "
|
|
"브레이커 갈래가 서면 이 몫이 빠져야 합니다. 지금은 붙어 있습니다."
|
|
),
|
|
}
|
|
|
|
|
|
def known_gap_note(code: str | None) -> str:
|
|
"""그 공종에 **원문에는 있는데 못 실린 몫**이 있으면 사유 한 줄."""
|
|
if not code:
|
|
return ""
|
|
plain = str(code).split("#")[0]
|
|
parts = []
|
|
for prefix, (_label, note) in KNOWN_GAPS.items():
|
|
if plain.startswith(prefix):
|
|
parts.append(note)
|
|
for prefix, note in CONDITIONAL_INCLUDED.items():
|
|
if plain.startswith(prefix):
|
|
parts.append(note)
|
|
return " / ".join(parts)
|