/* ============================================================================= * common_util_excavation.ts * 터파기 단면 — 관·벽 두 갈래. **근거의 급이 다르므로 갈라 둔다.** * * ⚠⚠ 파이썬 짝과 **한 벌**이다 — `common_util/common_util_excavation.py`. * 거울 시험: `tmp/tests/test_excavation_mirror.py`. 어느 쪽을 고치든 같이 돌릴 것. * 화면(B06 횡단도)이 그리고 서버(B08 수량)가 세는 값이라 두 쪽 수가 같아야 한다. * * ① 관 — 법정 시방서에 표가 있다: `KCS 44 40 10 배수관(23.01) §3.2(4) 그림 3.2-1`. * 「설계도서에 따로 표기되지 않았을 때에는 … 기준 폭에 따라야 한다」 * ⚠ **관경 + 2b 로 계산하지 않는다** — 표가 관 두께·작업여유를 이미 담고 있다. * ② 벽 — 법정 근거 없음. 실무 정본 식(`구조도(기슭막이).xls` 7탭): * 터파기 = 기초 0.5 × 0.9 (기초버림이면 0.1 × 0.7) + H × (평균두께 + 0.2) * ⚠ **비탈을 주지 않는다 — 정본이 수직으로 센다.** 축 이름은 「기초유 / 기초버림」이다. * ========================================================================== */ /** 관경(㎜) → 터파기 폭(㎜). KCS 44 40 10 그림 3.2-1 표 그대로. */ export const PIPE_TRENCH_WIDTH_MM: Record = { 300: 700, 350: 800, 400: 900, 450: 1000, 500: 1100, 600: 1200, 700: 1400, 800: 1600, 900: 1700, 1000: 1800, 1100: 2000, 1200: 2100, 1300: 2200, 1400: 2400, 1500: 2500, }; /** 한쪽 여유폭(m) — 같은 그림. 표에 없는 관경을 넣었을 때의 안내용. */ export const PIPE_TRENCH_CLEARANCE_NORMAL_M = 0.3; export const PIPE_TRENCH_CLEARANCE_SOFT_M = 0.5; /** 벽 터파기 — 실무 정본 식의 수. */ export const WALL_TRENCH_CLEARANCE_M = 0.2; export const WALL_FOUNDATION_DEPTH_M = 0.5; export const WALL_FOUNDATION_WIDTH_M = 0.9; export const WALL_BLINDING_DEPTH_M = 0.1; export const WALL_BLINDING_WIDTH_M = 0.7; /** 근거의 급 — 화면 노티스가 이 문구를 그대로 쓴다. */ export const BASIS_PIPE = "법정 표(KCS 44 40 10 그림 3.2-1) — 설계도서에 따로 없으면 이 값"; export const BASIS_WALL = "법정 근거 없음 · 실무 정본 식(구조도 기슭막이 xls) 기본값 — 확인 후 쓸 것"; /** 관경(㎜)에 대응하는 터파기 폭(m). 표에 없으면 `null`(지어내지 않는다). */ export function pipeTrenchWidthM(diameterMm: number | null | undefined): number | null { if (diameterMm === null || diameterMm === undefined) return null; const key = Math.round(Number(diameterMm)); if (!Number.isFinite(key)) return null; const width = PIPE_TRENCH_WIDTH_MM[key]; return width === undefined ? null : width / 1000; } /** * 벽 터파기 단면적(㎡/m). 높이·평균두께가 없으면 `null`. * `hasFoundation=false` 면 기초분이 버림 몫(0.1 × 0.7)으로 줄어든다. */ export function wallTrenchAreaM2( heightM: number | null | undefined, averageThicknessM: number | null | undefined, hasFoundation: boolean, ): number | null { if (heightM === null || heightM === undefined) return null; if (averageThicknessM === null || averageThicknessM === undefined) return null; const height = Number(heightM); const thickness = Number(averageThicknessM); if (!Number.isFinite(height) || !Number.isFinite(thickness)) return null; if (height <= 0 || thickness <= 0) return null; const base = hasFoundation ? WALL_FOUNDATION_DEPTH_M * WALL_FOUNDATION_WIDTH_M : WALL_BLINDING_DEPTH_M * WALL_BLINDING_WIDTH_M; return base + height * (thickness + WALL_TRENCH_CLEARANCE_M); } /** 벽 터파기 폭(m) — 평균두께 + 여유 0.2. 값이 없으면 `null`. */ export function wallTrenchWidthM(averageThicknessM: number | null | undefined): number | null { if (averageThicknessM === null || averageThicknessM === undefined) return null; const thickness = Number(averageThicknessM); if (!Number.isFinite(thickness) || thickness <= 0) return null; return thickness + WALL_TRENCH_CLEARANCE_M; }