· 12-12·12-13·12-16 — 12-15 집수정과 같은 모양(㎥ 줄 비고 인력 + 다짐기 줄) · 판정표 한 벌에 더함 · 맨홀은 비고가 끝 칸이 아니라 단위 뒤 칸 전체에서 찾음 · 비고가 인/㎥ 인 판정표는 밑수 없음 목록을 안 봄(12-12 는 「개소당」 머리조차 없음) · 12-34-1 — 형태 판정 참조→소요량(「별도계상」 은 레미콘 줄 비고일 뿐) · 새 모양 per_m3_rows · 진동기(3.5HP) 대 2 → 4611-0350 × 2/5.4 · 봉상후렉시블 대 2 는 엔진식 진동기의 봉이라 안 셈 · 머리 개소당 ↔ 인력 0.17·0.29(12-16 ㎥당과 같음)·Q ㎥/hr ⇒ ㎥당으로 읽고 고른 쪽·버린 쪽을 사유에 나란히(브레인 판정) · 범위 별칭 넷 → 엔진식 4611-0350 · 표의 나머지 줄(거푸집·철근·기초잡석·원형거푸집·설치비 등)은 원문 그대로 사유 한 줄(조용히 안 사라지게) · 실무 영월 「콘크리트타설(임도품셈 5-5)」 호표가 같은 모양 — 인력 인/㎥ + 진동기 엔진식 1/Q · 손료 252천원×0.5101 · 노무 0 · 마스터 재생성 — 네 공종 갈래 키 · F0385 형태만 새 제목 다섯 · 바뀐 제목 0 · 프로젝트 내역 그대로 · 잴 시험 넷 빨강→초록 · 끄기 다섯 빨강 · 전체 시험 1699 + 337 통과 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn
86 lines
4.0 KiB
Python
86 lines
4.0 KiB
Python
"""봉상후렉시블 셋 + 12-34-1 — 2026-09-14 브레인(672 다음).
|
||
|
||
같은 「봉상후렉시블(45mm) Q=5.4㎥/hr」 줄 하나가 12-12 날개벽 · 12-13 면벽 · 12-16 맨홀을 막고 있었음.
|
||
세 표는 12-15 집수정과 같은 모양(㎥ 줄 비고 인력 + 다짐기 줄) — 판정표 한 벌에 더하고 엔진식 4611-0350 로 이음.
|
||
실무 영월 「콘크리트타설(임도품셈 5-5)」 호표가 같은 모양: 콘크리트공 0.15·보통인부 0.27 인/㎥ + 진동기 1/Q(5.4)
|
||
· 진동기 45φ(2.6㎾)엔진식플렉시블형 손료 252천원 × 0.5101 · 노무 0 — 엔진식·계수·조종원 없음이 실무 실증.
|
||
|
||
12-34-1 콘크리트 타설(철근 진동기 포함) — 실무 호표 없음 → 브레인 판정
|
||
① 「콘크리트 진동기(3.5HP) 대 2」 만 4611-0350 × 2대 · 「봉상후렉시블(45mm) 대 2」 는 같은 기계의 봉이라 안 셈
|
||
② 머리 「(단위: 개소당)」 ↔ 인력 0.17·0.29 가 12-16 맨홀 ㎥당과 같고 기계도 Q ㎥/hr ⇒ ㎥당으로 읽고 사유에 나란히
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from decimal import Decimal
|
||
|
||
from B09_Estimation.B09_Estimation_UnitPrice import cached_build, detail_of
|
||
|
||
VIBRATOR = "X-4611-0350"
|
||
PER_Q = Decimal(1) / Decimal("5.4")
|
||
|
||
|
||
def _rows(build, code: str) -> dict[str, Decimal]:
|
||
return {
|
||
r["ref_code"]: Decimal(r["quantity"])
|
||
for r in detail_of(build, code)["rows"]
|
||
if r.get("ref_code")
|
||
}
|
||
|
||
|
||
def test_날개벽_면벽은_콘크리트_갈래가_진동기와_함께_섬() -> None:
|
||
build = cached_build()
|
||
for code in ("B-FP-12-12#콘크리트", "B-FP-12-13#콘크리트"):
|
||
rows = _rows(build, code)
|
||
assert rows[VIBRATOR] == PER_Q and rows["1013"] == Decimal("0.15"), (code, rows)
|
||
assert rows["1002"] == Decimal("0.27"), (code, rows)
|
||
assert build.book.titles[code].unit == "㎥"
|
||
assert (
|
||
"FP-12-12" not in build.basis_missing
|
||
) # 비고가 인/㎥ — 「개소당」 머리가 없어도 밑수는 ㎥
|
||
|
||
|
||
def test_맨홀은_비고가_끝_칸이_아니어도_구체_버림_갈래() -> None:
|
||
build = cached_build()
|
||
body = _rows(build, "B-FP-12-16#구체콘크리트")
|
||
assert (
|
||
body[VIBRATOR] == PER_Q
|
||
and body["1013"] == Decimal("0.17")
|
||
and body["1002"] == Decimal("0.29")
|
||
)
|
||
lean = _rows(build, "B-FP-12-16#버림콘크리트")
|
||
assert lean == {"1013": Decimal("0.15"), "1002": Decimal("0.27")}, lean
|
||
for code in ("FP-12-12", "FP-12-13", "FP-12-16"):
|
||
assert "봉상후렉시블" not in " ".join(build.unattached.get(code, [])), code
|
||
|
||
|
||
def test_12_34_1_진동기_두_대만_세고_봉은_두_번_안_셈() -> None:
|
||
build = cached_build()
|
||
rows = _rows(build, "B-FP-12-34-01")
|
||
assert rows[VIBRATOR] == 2 * PER_Q, rows
|
||
assert rows["1013"] == Decimal("0.17") and rows["1002"] == Decimal("0.29"), rows
|
||
from B09_Estimation.B09_Estimation_KnownGaps import known_gap_note
|
||
|
||
assert "봉상후렉시블" in known_gap_note("FP-12-34-01") and "두 번 안 셈" in known_gap_note(
|
||
"FP-12-34-01"
|
||
)
|
||
refs = [r.get("ref_code") for r in detail_of(build, "B-FP-12-34-01")["rows"]]
|
||
assert refs.count(VIBRATOR) == 1, refs # 봉 줄이 기계로 또 안 섬(한 줄 · 2대 몫)
|
||
|
||
|
||
def test_12_34_1_은_개소당_머리를_세제곱미터당으로_읽은_까닭을_보임() -> None:
|
||
from B09_Estimation.B09_Estimation_KnownGaps import known_gap_note
|
||
|
||
build = cached_build()
|
||
assert build.book.titles["B-FP-12-34-01"].unit == "㎥"
|
||
note = known_gap_note("FP-12-34-01")
|
||
assert "개소당" in note and "㎥당" in note and "12-16" in note, note
|
||
|
||
|
||
def test_표의_나머지_줄은_조용히_안_사라지고_사유에_원문_그대로() -> None:
|
||
from B09_Estimation.B09_Estimation_KnownGaps import known_gap_note
|
||
|
||
assert "원형거푸집" in known_gap_note("FP-12-16") and "0.16" in known_gap_note("FP-12-16")
|
||
assert "기초잡석" in known_gap_note("FP-12-12") and "30%" in known_gap_note("FP-12-12")
|
||
assert "기초잡석" in known_gap_note("FP-12-13")
|