Files
Aislo/common_util/common_util_excavation.ts
eomsangdonandClaude Opus 5 d175c6e457 feat(공용): 터파기 단면 — 관은 법정 표, 벽은 실무 정본 식 + 「기초유/기초버림」 칸
사용자 확정 ④ 「터파기를 횡단도에서 표현 → 노티스 → 사용자가 선택」의 밑감.
근거의 급이 달라 갈라 둔다.

- 관: `KCS 44 40 10 배수관 §3.2(4) 그림 3.2-1` 표 그대로(Ø800→1.6 · 1000→1.8 ·
  1200→2.1 · 1500→2.5 m). ⚠ 관경+2b 로 계산하지 않는다 — 표가 관 두께·여유를 담고 있다.
  표에 없는 관경은 `None` — 지어내지 않는다.
- 벽: 법정 근거 없음(교본은 「설계도서 지시」까지). 실무 정본 xls 7탭 식 —
  기초 0.5×0.9(기초버림이면 0.1×0.7) + H×(평균두께+0.2). ⚠ **비탈 없음(수직)**.
- 레지스트리에 「기초」 칸(기초유/기초버림) 신설 — 정본 탭 제목 그대로. 그림·물량이 같은 축.
- 파이썬·TS 짝 + 거울 시험. 실무 수치(H=1·2·3 → 1.48·2.51·3.54)와 맞는지도 잠금.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 21:29:39 +09:00

89 lines
4.0 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* =============================================================================
* 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<number, number> = {
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;
}