fix(B08): 토적표 머리 글자 사용자 견본대로(71)

- 암석 → 연암 · 측구터파기 → 측구파기 · 측구 암 칸 → 암 · 암 칸 머리 풍선 「리핑암 · 발파암 합」 · 값 · 계산 그대로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MgChuAcyBqUkhHMTXomQC7
This commit is contained in:
2026-10-06 23:50:10 +09:00
co-authored by Claude Opus 5.5
parent 5871866a4e
commit 2649ae7d91
2 changed files with 26 additions and 11 deletions
+13 -11
View File
@@ -3,7 +3,7 @@
* 토공 탭(PLAN 61-3 · 69-2 · 69-3) — 보조 탭 넷 = 토공집계표 · 토적표 · 평균운반거리 · 종방향 무대운반거리.
*
* GET …/quantity/earthwork 한 번(서버 단독 · 읽기만) — 네 장이 같은 응답을 나눠 그림.
* 토적표 = 줄 측점 · 칸 = 사용자 견본(절토 토사 · 암석 · 측구터파기 토사 · 암석 각 단면적 · 입적 ·
* 토적표 = 줄 측점 · 칸 = 사용자 견본(절토 토사 · 연암 · 측구파기 토사 · 암 각 단면적 · 입적 ·
* 보정량 · 보정량계 · 성토 · 유용토 · 차인토량 · 누가토량 · 면고르기 · 지장목제거 · 제근 · 노면정리 각
* 거리 · 면적) · 맨 아래 합계 줄. 첫 측점은 앞이 없어 입적 · 면적이 빈 값(—).
* 표 = 공용 많은 자료 표(`ui_template_data_table` · PLAN 70) · 카드 안 · 나머지 셋은 `…_Earthwork_Sheets`.
@@ -82,12 +82,12 @@ export interface EarthworkTable {
haul_saved: boolean;
}
/** 칸 묶음 — [머리 묶음, 키 앞머리] · 단면적 · 입적 · 보정량 셋 */
const TRIPLES: Array<[string[], string]> = [
/** 칸 묶음 — [머리 묶음, 키 앞머리, 풍선 글] · 단면적 · 입적 · 보정량 셋 · 머리 글자는 사용자 견본대로 */
const TRIPLES: Array<[string[], string, string?]> = [
[["절토", "토사"], "cut_soil"],
[["절토", "암석"], "cut_rock"],
[["측구터파기", "토사"], "ditch_soil"],
[["측구터파기", "암석"], "ditch_rock"],
[["절토", "연암"], "cut_rock"],
[["측구파기", "토사"], "ditch_soil"],
[["측구파기", "암"], "ditch_rock", "리핑암 · 발파암 합"],
];
/** 면 계열 — [머리 묶음, 키] · 거리 · 면적 둘 */
const FACES: Array<[string[], string]> = [
@@ -111,11 +111,13 @@ const n2 = (key: string, label: string, group?: string[]): DataColumn => ({
const COLUMNS: DataColumn[] = [
{ key: "station", label: "측점", width: 72 },
n2("distance", "거리"),
...TRIPLES.flatMap(([group, key]) => [
n2(`${key}_area`, "단면적", group),
n2(`${key}_volume`, "입적", group),
n2(`${key}_adjusted`, "보정량", group),
]),
...TRIPLES.flatMap(([group, key, tip]) =>
[
n2(`${key}_area`, "단면적", group),
n2(`${key}_volume`, "입적", group),
n2(`${key}_adjusted`, "보정량", group),
].map((c) => (tip ? { ...c, title: `${group.at(-1)} ${c.label} — ${tip}` } : c)),
),
n2("adjusted_total", "보정량계"),
n2("fill_area", "단면적", ["성토"]),
n2("fill_volume", "입적", ["성토"]),
@@ -198,3 +198,16 @@ def test_토공집계표_식() -> None:
assert value[("지장목제거", "", "")] == excel_round(tree * 0.8)
assert value[("표토제거", "", "")] is None
assert len(rows) == 33 # 시트 C5:C37
def test_토적표_머리_글자는_사용자_견본대로():
# 「[절토] <토사> · <연암> · 측구파기 <토사> · <암>」 — 값 · 계산은 그대로
ui = (ROOT / "B08_Quantity" / "B08_Quantity_UI_Earthwork.ts").read_text(encoding="utf-8")
for head in (
'["절토", "연암"]',
'["측구파기", "토사"]',
'["측구파기", "암"]',
"리핑암 · 발파암 합",
):
assert head in ui, head
assert "암석" not in ui and "측구터파기" not in ui