diff --git a/B08_Quantity/B08_Quantity_Engine_Preparation.py b/B08_Quantity/B08_Quantity_Engine_Preparation.py index b8a75805..91ca4e08 100644 --- a/B08_Quantity/B08_Quantity_Engine_Preparation.py +++ b/B08_Quantity/B08_Quantity_Engine_Preparation.py @@ -127,6 +127,7 @@ def preparation_rows( # ⚠ 법이 요구하는 **운반·적치** — 제거 물량이 곧 밑수다(별표2). _topsoil_haul_row(topsoil, topsoil_haul_distance_m), _root_removal_row(slope, stand_volume_class), + *_root_steps_rows(slope, stand_volume_class), _batter_frame_row(list(slope_rows)), _level_frame_row(list(slope_rows)), ] @@ -220,6 +221,54 @@ def _root_removal_row(slope: dict[str, float], stand_volume_class: str | None) - } +#: ⚠⚠ **품셈이 네 단계로 두었는데 우리가 한 줄만 세고 있었다**(2026-09-09). +#: 9-20 가. 「벌개·제근 → **뿌리다듬기** → **적재** → **운반**」이 시공 과정 표준이고 +#: [주] 「본 품에서는 제근 후 **뿌리다듬기와 적재항목**에 적용한다」로 두 항목을 준다. +#: 법도 같은 말을 한다 — 별표2 「입목…과 그 뿌리, 표토는 전량 제거한 후 … **운반하고 +#: 쌓아두어야** 한다」. ⇒ 제거만 세면 **적재·운반이 빠진다**(표토에서 이미 겪은 자리). +#: ⚠ 적재는 9-20-2 로 코드가 있고, **운반은 그 장에 공종이 없다** — 10장 계열 어디에 붙는지 +#: 원문이 말하지 않는다. 지어내지 않고 사유로 낸다. +ROOT_STEPS_NOTE = ( + "품셈 9-20 가. 「벌개·제근 → 뿌리다듬기 → 적재 → 운반」 · 별표2 「그 뿌리…를 전량 제거한 후" + " 운반하고 쌓아두어야 한다」 — 제거만 세면 뒤 단계가 빠짐" +) + + +def _root_steps_rows( + slope: dict[str, float], stand_volume_class: str | None +) -> list[dict[str, Any]]: + """뿌리 적재·운반 — **제근과 한 벌로 가는 뒤 단계**. 밑수가 서면 함께 선다.""" + area = float(slope.get("tree_removal_fill", 0.0)) + float(slope.get("tree_removal_cut", 0.0)) + return [ + { + "group": "준비공", + "item": "뿌리 적재", + "unit": "개", + "amount": None, + "status": STATUS_PENDING, + "reason": ( + f"{ROOT_STEPS_NOTE} · 품셈 9-20-2 「(단위: 10주당)」 — **본수가 서야 셈**" + f" (대상 면적 {area:,.1f}㎡ · 제근과 같은 밑수)" + ), + "reference_amount": area, + "work_item_code": "FP-09-20-02", + }, + { + "group": "준비공", + "item": "뿌리 운반", + "unit": "개", + "amount": None, + "status": STATUS_PENDING, + "reason": ( + f"{ROOT_STEPS_NOTE} · ⚠ **9-20 장에 운반 공종이 없음** — 10장 계열 어디에" + " 붙는지 원문이 말하지 않아 공종코드를 못 붙임" + ), + "reference_amount": area, + "work_item_code": None, + }, + ] + + def _topsoil_haul_row(topsoil: dict[str, Any], distance_m: float | None) -> dict[str, Any]: """표토 운반 — 물량은 제거 물량 그대로, 거리는 설계 입력.