From 8d5c347d77991cce77fb7c7b84d5def344936848 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 10 Oct 2026 08:39:56 +0900 Subject: [PATCH] =?UTF-8?q?feat(b06):=20=EB=8F=84=EC=88=98=EB=A1=9C/?= =?UTF-8?q?=EB=8F=8C=EB=B6=99=EC=9E=84=20=EA=B8=B0=EB=B3=B8=EA=B0=92=20?= =?UTF-8?q?=E2=80=94=20=EA=B5=AC=EC=A1=B0=20=EB=8F=84=EC=88=98=EB=A1=9C=20?= =?UTF-8?q?=C2=B7=20=ED=98=95=ED=83=9C(=EC=98=9B=20=EB=B6=99=EC=9E=84=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D)=20=EA=B5=AC=EC=A1=B0=20=EB=92=A4=20?= =?UTF-8?q?=EB=A9=94=EB=B6=99=EC=9E=84=20=C2=B7=20=EB=91=90=EA=BB=98=2045?= =?UTF-8?q?=20=C2=B7=20=EB=A9=B4=EC=A0=81=2030=20=C2=B7=20=EB=B9=88=20?= =?UTF-8?q?=EB=91=90=EA=BB=98=20=EB=8C=80=EC=B2=B4=2045=20=EC=A7=9D(173-5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01F3mdb91125mPoC6tpsQx4P --- A00_Common/design/design_structure_ford_pavement.ts | 5 +++-- A00_Common/design/design_structure_guard.ts | 11 ++++++----- B06_Section/B06_Section_Engine_Culvert.py | 4 ++-- common_util/common_util_culvert_sets.ts | 4 ++-- resources/master_template/구조물정의.json | 6 +++--- resources/tester/test_136_chute_form_cache.py | 4 ++-- resources/tester/test_65_ford_defaults.py | 10 +++++----- resources/tester/test_b06_culvert_set.py | 8 ++++---- resources/tester/test_b06_culvert_sets_mirror.py | 2 +- 9 files changed, 28 insertions(+), 26 deletions(-) diff --git a/A00_Common/design/design_structure_ford_pavement.ts b/A00_Common/design/design_structure_ford_pavement.ts index d9ccc19d2..8f3f729bf 100644 --- a/A00_Common/design/design_structure_ford_pavement.ts +++ b/A00_Common/design/design_structure_ford_pavement.ts @@ -32,7 +32,7 @@ export const FORD_PAVEMENT_SPEC: StructureSpec = { prefix: "ford_chute", link: "gfordpavechute", max: 1, - // 구조 · 두께(cm · 새 상자 30) — 배관 · 박스 · 세월교 `CHUTE_ITEMS` 와 같은 칸(90-2) + // 구조(기본 도수로) · 두께(cm · 기본 45 · 173-5) — 배관 · 박스 · 세월교 `CHUTE_ITEMS` 와 같은 칸(90-2) items: [ { id: "structure", @@ -42,8 +42,9 @@ export const FORD_PAVEMENT_SPEC: StructureSpec = { { value: "도수로", label: "도수로" }, { value: "돌붙임", label: "돌붙임" }, ], + default: "도수로", }, - { id: "thickness", label: "두께 (cm)", kind: "number", step: 1, default: "30" }, + { id: "thickness", label: "두께 (cm)", kind: "number", step: 1, default: "45" }, ], }, ], diff --git a/A00_Common/design/design_structure_guard.ts b/A00_Common/design/design_structure_guard.ts index ef37fa087..c5d18b956 100644 --- a/A00_Common/design/design_structure_guard.ts +++ b/A00_Common/design/design_structure_guard.ts @@ -120,7 +120,7 @@ export const SOIL_ADD: SpecContainer = { items: guardItems(), }; -/** 도수로/돌붙임 칸 — 구조 · 두께(cm · 새 상자 30 · 90-2 사용자 확정) · 붙임 형식 · 면적(98-3) · 물넘이 포장(`ford_chute`)도 같은 칸. */ +/** 도수로/돌붙임 칸 — 구조(기본 도수로) · 형태(기본 메붙임) · 두께(cm · 기본 45) · 면적(㎡ · 기본 30 · 98-3) · 물넘이 포장(`ford_chute`)도 같은 칸(173-5). */ export const CHUTE_ITEMS: SpecItem[] = [ { id: "structure", @@ -130,19 +130,20 @@ export const CHUTE_ITEMS: SpecItem[] = [ { value: "도수로", label: "도수로" }, { value: "돌붙임", label: "돌붙임" }, ], + default: "도수로", }, - { id: "thickness", label: "두께 (cm)", kind: "number", step: 1, default: "30" }, - // 붙임 형식 · 면적(98-3) — 빈칸이면 B08 구조물 집계표에 안 셈(설계자가 넣음) { id: "bond", - label: "붙임 형식", + label: "형태", kind: "select", choices: [ { value: "찰붙임", label: "찰붙임" }, { value: "메붙임", label: "메붙임" }, ], + default: "메붙임", }, - { id: "area", label: "면적 (㎡)", kind: "number", step: 0.1 }, + { id: "thickness", label: "두께 (cm)", kind: "number", step: 1, default: "45" }, + { id: "area", label: "면적 (㎡)", kind: "number", step: 0.1, default: "30" }, ]; /** 도수로/돌붙임(선택 · 하나만 · 54-48) — 옛 둘 이상은 보이되 [추가]만 숨김. */ diff --git a/B06_Section/B06_Section_Engine_Culvert.py b/B06_Section/B06_Section_Engine_Culvert.py index 48bb3d5de..24ce66c42 100644 --- a/B06_Section/B06_Section_Engine_Culvert.py +++ b/B06_Section/B06_Section_Engine_Culvert.py @@ -64,8 +64,8 @@ _SPAN_LINKED_TYPES: frozenset[str] = frozenset({"ford_pavement"}) # ⚠ 교차 참조 ① 관 위 최소 토피(m). 임도 배수관 토피 규정이 지식DB에 없어 별표2 # 교량·암거 "복토 시 흙 두께 50㎝ 이상"을 끌어왔다. B05 계획고 하향 차단 기준이다. MIN_PIPE_COVER_M = 0.5 -# 도수로 · 돌붙임 두께 빈 값(cm) — 사용자 확정 30 cm(10-8 · 90-2). -CHUTE_THICKNESS_CM = 30.0 +# 도수로 · 돌붙임 두께 빈 값(cm) — 사용자 확정 45 cm(173-5). +CHUTE_THICKNESS_CM = 45.0 # 기슭막이 전면 기울기(1:n). 돌쌓기 전면 1:0.3(교본 7-3) = 사방교본 계획비탈 # 1:0.3~0.5의 급한 쪽. 지식DB 근거가 있는 값이라 교차 참조 표시가 붙지 않는다. diff --git a/common_util/common_util_culvert_sets.ts b/common_util/common_util_culvert_sets.ts index d6b7a156f..be2df5118 100644 --- a/common_util/common_util_culvert_sets.ts +++ b/common_util/common_util_culvert_sets.ts @@ -37,7 +37,7 @@ const SECTION_KEYS: Record = { const SPAN_LINKED_TYPES = new Set(["ford_pavement"]); export const MIN_PIPE_COVER_M = 0.5; -export const CHUTE_THICKNESS_CM = 30.0; +export const CHUTE_THICKNESS_CM = 45.0; export const REVET_FACE_SLOPE = 0.3; export const INLET_STRUCTURE_BASIN = "집수정"; export const FORD_SLAB_THICKNESS_M = 0.3; @@ -185,7 +185,7 @@ function sideSpec( } /** 도수로 · 돌붙임(90-2) — 첫 상자(`{head}_{n}_*` · 물넘이 포장 = `ford_chute` · 136-2) 구조 · 두께 - * (cm → m · 빈 값 30 cm) · 구조를 안 고르면 null. 횡단이 유출 성토사면을 따라 띠로 그림. 파이썬 짝 `_chute`. */ + * (cm → m · 빈 값 45 cm) · 구조를 안 고르면 null. 횡단이 유출 성토사면을 따라 띠로 그림. 파이썬 짝 `_chute`. */ export function chute( values: Record, head = "chute_add", diff --git a/resources/master_template/구조물정의.json b/resources/master_template/구조물정의.json index fd51c39d4..ecfb17498 100644 --- a/resources/master_template/구조물정의.json +++ b/resources/master_template/구조물정의.json @@ -3362,7 +3362,7 @@ "chute_add.structure=도수로": "도수로", "chute_add.structure=돌붙임": "돌붙임", "chute_add.thickness": "두께 (cm)", - "chute_add.bond": "붙임 형식", + "chute_add.bond": "형태", "chute_add.bond=찰붙임": "찰붙임", "chute_add.bond=메붙임": "메붙임", "chute_add.area": "면적 (㎡)" @@ -3429,7 +3429,7 @@ "chute_add.structure=도수로": "도수로", "chute_add.structure=돌붙임": "돌붙임", "chute_add.thickness": "두께 (cm)", - "chute_add.bond": "붙임 형식", + "chute_add.bond": "형태", "chute_add.bond=찰붙임": "찰붙임", "chute_add.bond=메붙임": "메붙임", "chute_add.area": "면적 (㎡)" @@ -3504,7 +3504,7 @@ "chute_add.structure=도수로": "도수로", "chute_add.structure=돌붙임": "돌붙임", "chute_add.thickness": "두께 (cm)", - "chute_add.bond": "붙임 형식", + "chute_add.bond": "형태", "chute_add.bond=찰붙임": "찰붙임", "chute_add.bond=메붙임": "메붙임", "chute_add.area": "면적 (㎡)" diff --git a/resources/tester/test_136_chute_form_cache.py b/resources/tester/test_136_chute_form_cache.py index 775499efd..f1f7cb39d 100644 --- a/resources/tester/test_136_chute_form_cache.py +++ b/resources/tester/test_136_chute_form_cache.py @@ -42,7 +42,7 @@ def test_되얹기는_상자_없으면_그대로_칸_전부면_지움(out: dict) def test_박스는_걸친_측점_모두_세월교도(out: dict) -> None: - assert out["boxAdd"]["box"] == [{"structure": "도수로", "thickness_m": 0.3}] * 2 + assert out["boxAdd"]["box"] == [{"structure": "도수로", "thickness_m": 0.45}] * 2 assert {118, 120} <= set(out["boxAdd"]["refreshed"]) assert out["fordAdd"]["ford"] == {"structure": "돌붙임", "thickness_m": 0.5} assert out["fordAdd"]["refreshed"] == [160] @@ -51,5 +51,5 @@ def test_박스는_걸친_측점_모두_세월교도(out: dict) -> None: def test_물넘이_포장은_ford_chute_만(out: dict) -> None: - assert out["paveAdd"]["pave"] == [{"structure": "돌붙임", "thickness_m": 0.3}] * 2 + assert out["paveAdd"]["pave"] == [{"structure": "돌붙임", "thickness_m": 0.45}] * 2 assert out["paveAdd"]["refreshed"] == [196, 200] diff --git a/resources/tester/test_65_ford_defaults.py b/resources/tester/test_65_ford_defaults.py index 5d327f526..3fc31aa01 100644 --- a/resources/tester/test_65_ford_defaults.py +++ b/resources/tester/test_65_ford_defaults.py @@ -67,12 +67,12 @@ def test_유입_유출은_구조와_흙막이_칸만(out): "before", "after", ] - # 도수로/돌붙임 = 구조 · 두께(cm · 새 상자 30 · 90-2) · 붙임 형식 · 면적(98-3 · 기본 없음) + # 도수로/돌붙임 = 구조(도수로) · 형태(메붙임) · 두께(cm · 45) · 면적(㎡ · 30) — 173-5 assert out[spec]["chute_add"] == [ - ["structure", None, None], - ["thickness", None, "30"], - ["bond", None, None], - ["area", None, None], + ["structure", None, "도수로"], + ["bond", None, "메붙임"], + ["thickness", None, "45"], + ["area", None, "30"], ] keys = out[f"{spec}Keys"] assert keys["prefixes"] == ["soil_add_", "chute_add_"] diff --git a/resources/tester/test_b06_culvert_set.py b/resources/tester/test_b06_culvert_set.py index 72bc4e8e1..fd0882acd 100644 --- a/resources/tester/test_b06_culvert_set.py +++ b/resources/tester/test_b06_culvert_set.py @@ -23,9 +23,9 @@ from B06_Section.B06_Section_Engine_Culvert import ( # noqa: E402 def test_cross_reference_constants_match_plan(): - """계획서 3-0 표 값 — 토피 0.5m·전면 1:0.3 · 도수로/돌붙임 빈 두께 30 cm(90-2 사용자 확정).""" + """계획서 3-0 표 값 — 토피 0.5m·전면 1:0.3 · 도수로/돌붙임 빈 두께 45 cm(173-5 사용자 확정).""" assert MIN_PIPE_COVER_M == 0.5 - assert CHUTE_THICKNESS_CM == 30.0 + assert CHUTE_THICKNESS_CM == 45.0 assert REVET_FACE_SLOPE == 0.3 # 배관은 수평도 가능 — 세트에 경사 강제값을 싣지 않는다(2026-08-20 사용자 확정). assert "min_slope" not in _culvert_set(None) @@ -99,12 +99,12 @@ def test_old_default_moves_for_large_pipe(): def test_chute_thickness_cm_to_m(): - """도수로/돌붙임(90-2) — 구조를 고르면 `chute` · 두께 cm → m · 빈 두께 30 cm · 안 고르면 없음.""" + """도수로/돌붙임(90-2) — 구조를 고르면 `chute` · 두께 cm → m · 빈 두께 45 cm · 안 고르면 없음.""" assert "chute" not in _culvert_set({"chute_add_1_thickness": 40}) spec = _culvert_set({"chute_add_1_structure": "돌붙임", "chute_add_1_thickness": "45"}) assert spec["chute"] == {"structure": "돌붙임", "thickness_m": 0.45} blank = _culvert_set({"chute_add_1_structure": "도수로", "chute_add_1_thickness": ""}) - assert blank["chute"] == {"structure": "도수로", "thickness_m": 0.3} + assert blank["chute"] == {"structure": "도수로", "thickness_m": 0.45} def test_attach_only_pipe_facilities(tmp_path): diff --git a/resources/tester/test_b06_culvert_sets_mirror.py b/resources/tester/test_b06_culvert_sets_mirror.py index c46295fcc..7ed0cc3fb 100644 --- a/resources/tester/test_b06_culvert_sets_mirror.py +++ b/resources/tester/test_b06_culvert_sets_mirror.py @@ -217,7 +217,7 @@ def test_ford_box_guard_attached_as_culvert() -> None: # 유입 날개벽 수평 여유 = 같은 칸(107-3) · 안 세운 날개벽엔 안 실림 wings = sections[60.0]["ford"] assert wings["wing_in"]["berm_m"] == 2 and "berm_m" not in wings["wing_out"] - assert sections[60.0]["ford"]["chute"] == {"structure": "도수로", "thickness_m": 0.3} + assert sections[60.0]["ford"]["chute"] == {"structure": "도수로", "thickness_m": 0.45} assert box["chute"] == {"structure": "돌붙임", "thickness_m": 0.45} assert "chute" not in sections[40.0]["culvert"] assert sections[140.0]["ford_pavement"]["chute"] == {"structure": "돌붙임", "thickness_m": 0.4}