feat(b06): 도수로/돌붙임 기본값 — 구조 도수로 · 형태(옛 붙임 형식) 구조 뒤 메붙임 · 두께 45 · 면적 30 · 빈 두께 대체 45 짝(173-5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F3mdb91125mPoC6tpsQx4P
This commit is contained in:
2026-10-10 08:39:56 +09:00
co-authored by Claude Opus 5.5
parent 1f1646781f
commit 8d5c347d77
9 changed files with 28 additions and 26 deletions
@@ -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" },
],
},
],
+6 -5
View File
@@ -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) — 옛 둘 이상은 보이되 [추가]만 숨김. */
+2 -2
View File
@@ -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 근거가 있는 값이라 교차 참조 표시가 붙지 않는다.
+2 -2
View File
@@ -37,7 +37,7 @@ const SECTION_KEYS: Record<string, string> = {
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<string, unknown>,
head = "chute_add",
@@ -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": "면적 (㎡)"
@@ -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]
+5 -5
View File
@@ -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_"]
+4 -4
View File
@@ -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):
@@ -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}