diff --git a/B08_Quantity/B08_Quantity_Engine_UnitQuantity.py b/B08_Quantity/B08_Quantity_Engine_UnitQuantity.py index b4adcacd..e7934754 100644 --- a/B08_Quantity/B08_Quantity_Engine_UnitQuantity.py +++ b/B08_Quantity/B08_Quantity_Engine_UnitQuantity.py @@ -181,9 +181,12 @@ STONE_MASONRY = { #: 구조물 시공이 원활하도록 **100 mm 두께의 버림콘크리트**를 타설하도록 한다」. #: 폭 근거: KCS 34 50 05 「버림 콘크리트의 두께는 설계도서에 따르며, **폭은 잡석다짐의 #: 폭과 동일**하게 한다」. -#: ⚠ 우리에게 **잡석다짐 폭이 아직 없다**(기초잡석은 품셈에 공종만 있고 두께·폭이 없음). -#: 그래서 **터파기 폭(평균두께 + 여유 0.2m)을 잠정으로** 쓰고 근거 문구에 그 사실을 적는다. -#: 잡석다짐 폭이 정해지면 이 한 줄만 바꾸면 된다. +#: ⭐ 그 잡석다짐 폭이 **정해졌다** — 「기준 구조물에서 유도, 같은 값을 공유」 +#: (2026-09-08 사용자 확정 2차 ⑪ 「기슭막이면 **하단 길이** × 종단방향 폭 × 높이」). +#: ⇒ 벽에서 **하단 길이 = 하부 두께**다. 종전의 「터파기 폭 잠정」을 그 값으로 바꾼다. +#: ⚠ **기초잡석(품셈 12-25) 물량은 아직 못 센다** — 폭은 이제 있으나 **두께가 어느 +#: 원문에도 없다**(품셈은 ㎥당 품만 줌). 실무 관측은 관보호공 날개벽 T=0.2 하나뿐이라 +#: **다른 구조물 값을 옮겨 쓰지 않고** 사유로 드러낸다. #: 돌을 **사 오나 캐나** — 기본은 「캔다」(2026-09-09 사용자 확정 ②). #: 법이 그쪽을 권한다 — 별표2 「석축 등에 필요한 야면석 등은 **가급적 현장에서 #: 채취·사용**하도록 운반거리를 조사한다」. 실무 견적 다섯 권에도 야면석 **구입 단가가 @@ -382,21 +385,42 @@ def wants_blinding(options: dict[str, Any]) -> bool: return True -def _blinding_component(base_width_m: float, length_m: float, options: dict[str, Any]): - """버림 콘크리트 한 줄. 넣지 않기로 했으면 `None`.""" +def _blinding_component( + base_width_m: float, + length_m: float, + options: dict[str, Any], + width_basis: str = "", +): + """버림 콘크리트 한 줄. 넣지 않기로 했으면 `None`. + + 폭은 **잡석다짐 폭**(KCS 34 50 05)이고, 그 값은 확정 ⑪ 로 **구조물 하단 길이**다. + 부르는 쪽이 그 폭과 까닭(`width_basis`)을 함께 넘긴다. + """ if not wants_blinding(options) or base_width_m <= 0 or length_m <= 0: return None + basis = ( + f"기초 폭 {base_width_m:.2f}m × 연장 × 두께 {BLINDING_THICKNESS_M:.2f}m" + " · 두께는 KDS 44 90 00(100㎜) · 폭은 잡석다짐 폭(KCS 34 50 05)" + ) + if width_basis: + basis = f"{basis} = {width_basis}" return Component( "버림콘크리트", "㎥", base_width_m * length_m * BLINDING_THICKNESS_M, DESTINATION["버림콘크리트"], - f"기초 폭 {base_width_m:.2f}m × 연장 × 두께 {BLINDING_THICKNESS_M:.2f}m" - " · 두께는 KDS 44 90 00(100㎜) · ⚠ 폭은 잡석다짐 폭(KCS 34 50 05)이라야 하나" - " 그 값이 아직 없어 **터파기 폭을 잠정**으로 씀", + basis, ) +#: 기초잡석(품셈 12-25)이 아직 못 서는 까닭 — **폭은 있고 두께가 없다.** +RUBBLE_BASE_BLOCKED = ( + "기초잡석(12-25) 물량이 안 섬 — 폭은 하단 길이 {width:.2f}m 로 섰으나 **두께가 원문에 " + "없음**(품셈 12-25 는 ㎥당 품만 줌). 실무 관측은 관보호공 날개벽 T=0.2 하나뿐이라 " + "다른 구조물 값을 옮겨 쓰지 않음" +) + + #: ⚠ **저장 제원의 실제 칸 이름**은 `back_len_cm` 이다(레지스트리 확인). #: 앞서 `stone_back_length_cm` 을 읽고 있어 **저장값이 영영 안 닿고 늘 기본 45㎝ 로 돌았다** #: — 뒷길이를 75 로 골라도 45 계수가 붙던 자리다. 값이 나오므로 아무 시험도 안 잡았다. @@ -504,7 +528,12 @@ def boulder_masonry( upper_cm = float(str(diameter).split("~")[-1]) thickness = upper_cm / 100.0 # 버림 콘크리트 — 돌쌓기와 같은 자리(사용자 확정 ⑭). 빼려면 저장 제원에서 「안 넣음」. - blinding = _blinding_component(wall_trench_width_m(thickness) or thickness, length_m, options) + blinding = _blinding_component( + thickness, + length_m, + options, + f"하단 길이(직경 위끝) {thickness:.2f}m — 확정 ⑪ 준용", + ) if blinding is not None: components.append(blinding) components.extend( @@ -803,11 +832,19 @@ def stone_masonry( ) # 버림 콘크리트 — 기초 바닥에 까는 얇은 층. 빼려면 저장 제원에서 「안 넣음」으로 둔다. - base_width = wall_trench_width_m(thickness) or thickness - blinding = _blinding_component(base_width, length_m, options) + # 잡석다짐 폭 = **하단 길이**(확정 ⑪) — 벽에서는 하부 두께다. 버림도 같은 폭을 쓴다. + base_width = bottom_thickness + blinding = _blinding_component( + base_width, + length_m, + options, + f"하단 길이(하부 두께) {bottom_thickness:.2f}m — 확정 ⑪ 「기준 구조물에서 유도」", + ) if blinding is not None: components.append(blinding) + notes.append(RUBBLE_BASE_BLOCKED.format(width=base_width)) + # 터파기·되메우기·잔토 — 토공으로 합산되는 값이다(내역 줄이 아니다). components.extend( _trench_components(height_m, length_m, thickness, options, notes, thickness_basis)