B08_Quantity 86 · B09_Estimation 111 파일을 old_code/ 로 옮김(지우지 않음). 화면은 메뉴·주소·단계 막대만 남은 빈 틀 둘 — main.py 라우터 13 개는 끊음. B07 이 빌려 쓰던 비탈 길이·면적은 필요한 함수만 B07_DesignDetail_Engine_SlopeGeometry 로 옮겨 적음(면적 적분·노면 면적·측점 묶음은 안 옮김) · 시험 하나를 새로 둠. B07 구조물도 조립(Cad_StandardSheet)은 2026-09-13 에 이미 도면 목록에서 빠져 부르는 곳이 없어 old_code 로 같이 보냄 — 구조물 그림은 되살리지 않음. B06 구조물 몫 조회는 빈 값으로 두어 화면이 그대로 서게 함. B08·B09 를 부르던 시험 25 개도 old_code/resources/tester 로 옮김. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
61 lines
2.9 KiB
Python
61 lines
2.9 KiB
Python
"""B09 원가계산 — **산림 품셈에 절이 없는 공종**(`AX-WK-*`)의 일위대가 (명세 2장 ② 갈래 WK).
|
|
|
|
산림 품셈이 **부르기만 하고 품을 안 주는** 자리를 원문이 있는 다른 품셈에서 그대로 옮긴다.
|
|
⚠ 코드는 난수 8자리 · 동등 비교만(명세 2장 ④) — 읽기는 이름 칸이 맡음.
|
|
⚠ 값은 원문 그대로 · 줄마다 출처. 자재는 단가 층이 없어 **드러내기만** 함(치즐과 같은 자리).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from decimal import Decimal
|
|
from typing import Any
|
|
|
|
from B09_Estimation.B09_Estimation_PriceBook import PriceDetail, PriceKind, PriceTitle
|
|
|
|
#: 모르타르 배합 1:3 — 찰쌓기·찰붙임 줄눈메꿈(산림 품셈 13-4-4 [주]④ · 13-5-1 [주]③ 0.009㎥/㎡).
|
|
MORTAR_MIX = "AX-WK-c0842a0d"
|
|
|
|
WORK_ITEMS: dict[str, dict[str, Any]] = {
|
|
MORTAR_MIX: {
|
|
"name": "모르타르 배합",
|
|
"spec": "1:3",
|
|
"unit": "㎥",
|
|
# 10-A ③ 문구 못박음(2026-09-14 사용자 확정 — SW 규칙) · 교차 참조 명시(지침 2장).
|
|
"basis": (
|
|
"산림품셈에 배합 절이 없어 건설품셈 [건축] 9-1-1 을 씀(교차 참조)"
|
|
" — 건설공사 표준품셈(2026) [건축부문] 9-1-1 모르타르 배합(㎥당) · 배합비 1:3 은 돌쌓기 시방(시멘트:잔골재 부피비) · 실무 울진 대흥(2024)·소광(2025)"
|
|
" 「모르타르배합 1:3」 과 같은 짜임"
|
|
),
|
|
# (노임 코드, 수량, 칸) — 원문 [주]② 「배합이 포함된 것이며, 비빔은 제외」.
|
|
"labor": (("1002", "0.66", "보통인부 — 모래체가름 포함 칸(제외 칸 0.43)"),),
|
|
# 원문 참고자료 1:3 줄 · ※ 「위 재료량은 할증이 포함된 것이다」 — 할증 전 값이 아님.
|
|
"materials": ("시멘트 510 kg", "모래 1.10 ㎥"),
|
|
},
|
|
}
|
|
|
|
|
|
def attach_work_items_ax(build: Any) -> None:
|
|
"""`B-AX-WK-*` 제목을 세운다 — 노임 층이 없으면 안 세우고 사유를 남긴다."""
|
|
for code, item in WORK_ITEMS.items():
|
|
missing = [ref for ref, _, _ in item["labor"] if ref not in build.book.titles]
|
|
if missing:
|
|
build.component_gaps[code] = f"노임 단가 층이 없습니다 — {', '.join(missing)}"
|
|
continue
|
|
title_code = f"B-{code}"
|
|
build.book.add_title(
|
|
PriceTitle(
|
|
code=title_code,
|
|
kind=PriceKind.UNIT_PRICE,
|
|
name=item["name"],
|
|
spec=item["spec"],
|
|
unit=item["unit"],
|
|
)
|
|
)
|
|
for ref, quantity, cell in item["labor"]:
|
|
build.book.add_detail(
|
|
PriceDetail(title_code, ref, Decimal(quantity), note=f"{cell} · {item['basis']}")
|
|
)
|
|
build.unattached[code] = [
|
|
f"{material} — 자재 단가 층 없음(원문 할증 포함 값)" for material in item["materials"]
|
|
]
|