/* ============================================================================= * design_structure_road.ts * 노면공 › 콘크리트 포장 명세 — 사용자 구조물 표 08(`docs/raw/구조물정의_표/08_사토장_토취장_노면공_기타.md`). * * 시작 · 종료 측점(패널 위치 줄 · 기준 측점 · 전 · 후 · 길이 입력 없음) + 필수 컨테이너 「상세 내용」 한 벌 = * 포장사양 고르기 → 길이(m · 시작~종료 출력) → 높이(m · 두께 손 입력). 표에 없는 옛 상세 칸은 화면에서 빼고 값은 남김. * 저장 = structures.json `options` — 새 키 `pave_spec` · `height_m` · `widening_off`(확폭 끈 구간 · 87-3) · * 옛 `length_m` · `before_m` · `after_m` 은 저장 때 뺌(`dropped`). * 기타(52-14) = 기준 측점 + 상세 종류 이름(정의 옵션 칸 `name`) + 선택 컨테이너 「상세 내용」(비고 글) · * 저장 키 `etc_detail_{n}_note` · 잇기 `getcdetail{n}`. * import 없음 — 시험이 이 파일만 옮겨 돌림. * ========================================================================== */ import type { SpecChoice, StructureSpec } from "./design_structure_spec"; /** 포장사양 선택지 — 근거 별표2 · 별표3 · 임도기술교본 3장. */ export const PAVE_SPEC_CHOICES: SpecChoice[] = ["콘크리트", "아스콘", "쇄석"].map((v) => ({ value: v, label: v, })); export const PAVEMENT_SPEC: StructureSpec = { typeId: "pavement_concrete", containers: [ { id: "detail", title: "상세 내용", required: true, link: "gpavedetail", items: [ { id: "spec", label: "포장사양", kind: "select", key: "pave_spec", choices: PAVE_SPEC_CHOICES, }, { id: "length", label: "길이 (m)", kind: "auto" }, { id: "height", label: "높이 (m)", kind: "number", key: "height_m", step: 0.05 }, ], }, ], // 표 08 에 없는 옛 상세 칸 — 화면에서 빼고 값은 남김(지난 정의 값) retired: [ "thickness_cm", "width_m", "widening_area_m2", "joint_spacing_m", "separation_sheet", "wire_mesh", ], dropped: ["length_m", "before_m", "after_m"], byRange: true, }; export const ETC_SPEC: StructureSpec = { typeId: "etc", containers: [ { id: "detail", title: "상세 내용", required: false, prefix: "etc_detail", link: "getcdetail", max: 1, items: [{ id: "note", label: "비고", kind: "text" }], }, ], retired: [], };