diff --git a/B08_Quantity/B08_Quantity_Engine_UnitQuantity_Box.py b/B08_Quantity/B08_Quantity_Engine_UnitQuantity_Box.py index 12a49d5b..a694be22 100644 --- a/B08_Quantity/B08_Quantity_Engine_UnitQuantity_Box.py +++ b/B08_Quantity/B08_Quantity_Engine_UnitQuantity_Box.py @@ -41,6 +41,8 @@ NOTE_SHORING_SCAFFOLD = ( "(울진 2×2 「강재 3개월」) — 품셈 12-20 강관동바리 · 12-19 강관비계로 이음 ·" " 시종점 두 면은 개소당 한 번(원문은 m당 칸)" ) +#: 비계는 공㎥(품셈 12-19 밑수) = 면 × 폭 — 울진 단위 칸 「공/m3」 · 시종점 식 ×1.00 은 연장일 수 없음. +SCAFFOLD_NOTE = "비계 폭 1.0m 관측(울진)" NOTE_WING = "날개벽 수량 근거 없음(교본·실무 모두 · 판정 ⑤) — 날개벽 줄 안 섬" NOTE_RUBBLE = ( "기초잡석 — 근거 둘(예제·울진 집계표)에는 잡석 줄이 없음 — 사용자 확정 3차 ② 로 세움" @@ -104,7 +106,7 @@ def box_culvert(options: dict[str, Any]) -> tuple[list[Component], list[str]]: f"{width:g}×{height:g} − {haunch:g}²÷2×4", "", ), - ("비계", "㎡", 2 * outer_h, f"외벽 양면 {outer_h:g}×2", ""), + ("비계", "㎥", 2 * outer_h, f"외벽 양면 {outer_h:g}×2 × 폭 1.0({SCAFFOLD_NOTE})", ""), ] notes: list[str] = [SOURCES, NOTE_FORMWORK, NOTE_SHORING_SCAFFOLD, NOTE_WING, NOTE_RUBBLE] if math.isclose(width, 2.0) and math.isclose(height, 2.0): diff --git a/resources/data_work_item_mapping/work_item_mapping_2026-01-01.json b/resources/data_work_item_mapping/work_item_mapping_2026-01-01.json index 695b3b45..e57bf03e 100644 --- a/resources/data_work_item_mapping/work_item_mapping_2026-01-01.json +++ b/resources/data_work_item_mapping/work_item_mapping_2026-01-01.json @@ -478,8 +478,9 @@ { "code": "FP-12-19", "name": "강관비계", - "unit": "㎡", - "from_components": ["비계"] + "unit": "㎥", + "from_components": ["비계"], + "why": "12-19 밑수는 공㎥ — 울진 기번3 단위 칸 「공/m3」 · 시종점 식의 ×1.00 은 연장일 수 없어(끝면은 연장과 무관) 비계 폭 1.0m 관측(울진)으로 면 × 1.0 = 공㎥" }, { "code": "FP-12-25", diff --git a/resources/tester/test_b08_box_culvert_unit.py b/resources/tester/test_b08_box_culvert_unit.py index e8cb6387..90901f26 100644 --- a/resources/tester/test_b08_box_culvert_unit.py +++ b/resources/tester/test_b08_box_culvert_unit.py @@ -49,6 +49,9 @@ def test_울진_2x2_m당_값을_연장에_곱한다() -> None: assert got[("동바리", "")] == pytest.approx(3.92 * 10) # 비계 — 벽체 m당 5.2 × 연장 + 시종점 두 면 13.52 는 한 번(원문은 m당에 넣었음 · 사유). assert got[("비계", "")] == pytest.approx(5.2 * 10 + 13.52) + # 비계는 공㎥(12-19 밑수) — 울진 단위 칸 「공/m3」 · 시종점 식 ×1.00 은 연장일 수 없어 폭 1.0m. + scaffold = next(c for c in result.components if c.name == "비계") + assert scaffold.unit == "㎥" and "비계 폭 1.0m 관측(울진)" in scaffold.basis assert (result.billing_unit, result.billing_quantity) == ("m", 10.0) text = " ".join(notes) assert "관측" in text and "날개벽" in text @@ -129,3 +132,5 @@ def test_인계_묶음이_조각을_세운다() -> None: assert {"FP-12-01-01", "FP-12-04", "FP-12-38", "FP-12-03", "FP-12-20", "FP-12-19"} <= set(parts) assert parts["FP-12-03"]["quantity"] == pytest.approx((179 + 157) * 10 / 1000) assert parts["FP-12-20"]["quantity"] == pytest.approx(3.92 * 10) + assert parts["FP-12-19"]["unit"] == "㎥" + assert parts["FP-12-19"]["quantity"] == pytest.approx(5.2 * 10 + 13.52)