feat(design): 구조물 명세 공용 틀 + 횡단배수 배관(표 01) 컨테이너 폼

- 공용 틀(A00_Common/design/design_structure_*) — 명세(컨테이너 필수/선택 · 여러 개 · 항목 고르기/숫자/자동 · 상위 값에 따른 선택지 · 저장 키) · 그리기([추가]/[빼기]) · 길이 = 전 + 후 맞물림(마지막에 고친 둘을 지킴)
- 배관 명세 = 관 · 관 보호공(유입) · 관 보호공(유출) · 흙막이 추가 · 도수로/돌붙임 · 저장 키는 pipe_points 옛 키 그대로 · 옛 관종 · 날개벽 · 집수정 형식은 화면에서 빼고 지난 정의 값으로 남김
- 컨테이너 인스턴스마다 「구조물 조합」 잇기(group_items · 그룹 [고르기] 길 그대로) · 명세 종류는 그룹 상자 · 종류 단위 줄 가림 · 종류 단위 잇기 줄은 기준 측점 바로 아래
- 관 길이 자동 = 횡단 기하 computeStoredLayouts 값(서버 Node 와 같은 함수) · 높이 빈 칸 안내 = 관경 기준 최소 높이
- 정의 판 6 — 종류.pipe.이름 표(이름 바꿈 키) · 검사기가 이름 표 받음 · 판 5 이력 보관
- 시험 test_52_structure_spec_pipe · 병합 시험 기대값(빠진 옛 칸은 남음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ
This commit is contained in:
2026-10-05 23:13:21 +09:00
co-authored by Claude Opus 5.5
parent 4bc6ec8106
commit 0a095c14b1
19 changed files with 4439 additions and 175 deletions
+61 -2
View File
@@ -1,5 +1,5 @@
{
"판": 5,
"판": 6,
"schema_version": 1,
"comment": "B05 구조물 타입 레지스트리 정본. 근거·옵션 상세는 PLAN.md 구조물 리스트와 resources/knowledge/technical_info/01_임도 참조. 2026-08-17 선택지 재편: B군(종단배수)·F군(생태/녹화)·G군(노면공)은 enabled:false 보존 — B05 선택지에서 빠지고 B06 개별 횡단도 옵션으로 재사용한다. 바닥막이(bed_sill)·생태연못(eco_pond)은 임도 미사용 확정으로 삭제. 배관·BOX암거·물넘이·세월교는 pipe_points.json 정본 관리(managed_by) — structures.json에 저장하지 않으며, 배관 부속(유형/집수정/기슭막이/돌붙임)·날개벽 옵션 정의는 B06/B07 필수 승격의 선언 근거다. ★기본값 원칙(2026-08-16 크로스체크 2차): default를 두는 것은 ①법정이 등급과 무관하게 못박은 단일 수치 ②사용자가 개발 단계에서 확정한 값 ③도메인 수치가 아닌 표시용 문자열, 이 셋뿐이다. 재료·형식 같은 설계자 판단 선택지와 미확정 제원은 default 없이 required로 두어 사용자가 직접 고르게 한다 (pipe_diameter_mm 1000 = 별표2 원칙값+사용자 확정 — 화이트리스트 등재). BOX암거 본체 2.0×2.0·날개벽 유입/유출 있음·짧은쪽 높이 1m·길이 2m·각도 45°는 2026-08-17 사용자 확정값이다 — 본체 규격은 실무 관측 규격(2.0×2.0·3.0×3.0)을 폼에서 프리셋 select로 받고 필요 시 사용자 지정으로 자유 입력하되, 저장 키는 body_width_m·body_height_m 숫자 그대로다(프리셋 전용 키를 만들지 않는다). 이 값들은 B05 서브폼이 실제로 받으므로 phase를 detail로 두지 않는다. ★보호공 개편(2026-08-17 사용자 지시): 구 `*_pitching`(있음/없음) + `*_pitching_finish`(찰/메) 두 축을 `*_protection` 한 축(돌붙임(찰)·돌붙임(메)·도수로)으로 합쳤다 — 도수로·산비탈수로(B4)는 유출부에서 돌붙임 대신 쓰는 공종이라 별도 구조물이 아니라 보호공 선택지로 받는다. \"없음\"은 삭제(물이 흐르는 자리라 보호공 필수). 치수는 배타 — 돌붙임이면 `*_protection_area_m2`(10㎡), 도수로면 `*_protection_width_m`(1m, 지식DB 수치 근거 없음·사용자 확정, 실무 확인 후 개선). 구 저장분은 `common_util_drainage_pipes.parse_pipe_points`가 새 키로 옮긴다.",
"구조물군": {
@@ -3232,7 +3232,66 @@
"계곡통과시설",
"유입유출_묶음",
"기슭막이_한벌"
]
],
"이름": {
"pipe": "관",
"pipe.diameter": "관경",
"pipe.diameter=800": "800",
"pipe.diameter=1000": "1000",
"pipe.diameter=1200": "1200",
"pipe.diameter=1500": "1500",
"pipe.length": "관 길이 (m)",
"inlet": "관 보호공 (유입)",
"inlet.structure": "구조",
"inlet.structure=집수정": "집수정",
"inlet.structure=기슭막이": "흙막이",
"inlet.form": "형태",
"inlet.form=돌쌓기(찰)": "돌 쌓기(찰)",
"inlet.form=돌쌓기(메)": "돌 쌓기(메)",
"inlet.form=콘크리트": "콘크리트",
"inlet.form=돌망태": "돌망태",
"inlet.form=통나무·목재틀": "통나무/목재틀",
"inlet.form=바자": "바자",
"inlet.form=I": "I형",
"inlet.form=L": "L형",
"inlet.form=U": "ㄷ형",
"inlet.length": "길이 (m)",
"inlet.height": "높이 (m)",
"inlet.before": "기준측점 전 (m)",
"inlet.after": "기준측점 후 (m)",
"outlet": "관 보호공 (유출)",
"outlet.structure": "구조",
"outlet.structure=기슭막이": "흙막이",
"outlet.form": "형태",
"outlet.form=돌쌓기(찰)": "돌 쌓기(찰)",
"outlet.form=돌쌓기(메)": "돌 쌓기(메)",
"outlet.form=콘크리트": "콘크리트",
"outlet.form=돌망태": "돌망태",
"outlet.form=통나무·목재틀": "통나무/목재틀",
"outlet.form=바자": "바자",
"outlet.length": "길이 (m)",
"outlet.height": "높이 (m)",
"outlet.before": "기준측점 전 (m)",
"outlet.after": "기준측점 후 (m)",
"soil_add": "흙막이 추가",
"soil_add.structure": "구조",
"soil_add.structure=기슭막이": "흙막이",
"soil_add.form": "형태",
"soil_add.form=돌쌓기(찰)": "돌 쌓기(찰)",
"soil_add.form=돌쌓기(메)": "돌 쌓기(메)",
"soil_add.form=콘크리트": "콘크리트",
"soil_add.form=돌망태": "돌망태",
"soil_add.form=통나무·목재틀": "통나무/목재틀",
"soil_add.form=바자": "바자",
"soil_add.length": "길이 (m)",
"soil_add.height": "높이 (m)",
"soil_add.before": "기준측점 전 (m)",
"soil_add.after": "기준측점 후 (m)",
"chute_add": "도수로/돌붙임",
"chute_add.structure": "구조",
"chute_add.structure=도수로": "도수로",
"chute_add.structure=돌붙임": "돌붙임"
}
},
"box_culvert": {
"동작": [
File diff suppressed because it is too large Load Diff