feat(B07): 표준도 제원에 「기초」 칸 + 그림을 새 두께 식에 맞춤
**기초 칸**(`foundation` — 기초유 / 기초버림, 정본 xls 탭 제목 그대로) 터파기 기초 몫이 0.5×(0.7+0.2)=0.45 대 0.1×(0.7+0.0)=0.07 ㎥/m 로 갈리고, 횡단도 터파기 선도 같은 칸을 봄. 고를 자리가 어디에도 없어 비어 있던 값임. 정본에 없는 갈래를 넣으면 **막지 않고 알림**(기존 네 칸과 같은 결). 비우면 키를 지움. **그림을 새 두께 식에 맞춤** — 데스크탑 메인이 `STONE_MASONRY` 를 갈면서 `thickness_base_m`·`thickness_top_coeff`·`thickness_bottom_coeff` 가 사라져 그림이 `KeyError` 로 죽었음(도면이 「읽지 못했습니다」로 뜸). 실화면에서 잡았음. 상부 = 뒷길이 + 0.30 · 하부 = 상부 + 0.30 × (H − 1.0) H=1.0 ℓ45 → 0.75/0.75 · H=1.5 ℓ35 → 0.65/0.80 · H=2.0 ℓ35 → 0.65/0.95 · H=2.0 ℓ45 → 0.75/1.05 · H=3.0 ℓ45 → 0.75/1.35 ← 실무 원본과 전부 일치 ⚠ **뒷길이를 안 정한 장은 두께를 못 내므로 그리지 않음** — 0 으로 때우면 거짓 그림이 됨. ⚠ 배운 것 — 「그림이 상수를 직접 읽으니 저절로 따라온다」가 **키 이름이 바뀌면 깨진다**는 것으로 드러남. 값은 한 벌이 맞으나 **이름이 바뀌는 것은 예고가 필요함.** 실화면 확인 — 「표준도 3장」에서 기초 「기초유」 저장 → 「2개소에 반영했습니다」, 정본 실측 `[기초유, null, 기초유, null, null]`(그 장의 두 개소에만). 자체검증 — 새 시험 3건 + 회귀 583 통과 · 0 실패, `tsc --noEmit` 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
const STONE_KINDS = ["야면석·호박돌", "깬잡석", "깬돌", "견치돌"] as const;
|
||||
const SUPPLIES = ["채집", "구입"] as const;
|
||||
const BACK_LENGTHS = ["25", "30", "35", "45", "55", "60", "75"] as const;
|
||||
/** 정본 xls 탭 제목 그대로 — 터파기 기초 몫 0.45 대 0.07 을 가르는 축. */
|
||||
const FOUNDATIONS = ["기초유", "기초버림"] as const;
|
||||
|
||||
/** 표준도 장 하나 — 서버가 낸 것 중 이 폼이 쓰는 것만. */
|
||||
export interface StandardSheetSpec {
|
||||
@@ -31,6 +33,7 @@ export interface StandardSpecResult {
|
||||
stone_supply: string | null;
|
||||
back_len_cm: string | null;
|
||||
face_slope_ratio: string | null;
|
||||
foundation: string | null;
|
||||
}
|
||||
|
||||
/** 이 종류가 돌쌓기 계열인가 — 옹벽·집수정에는 이 칸들이 뜻이 없다. */
|
||||
@@ -106,6 +109,7 @@ export function buildStandardSpecPanel(
|
||||
const kind = select(STONE_KINDS, options.stone_kind, "— 안 정함 —");
|
||||
const supply = select(SUPPLIES, options.stone_supply, "— 안 정함(기본 채집) —");
|
||||
const back = select(BACK_LENGTHS, options.back_len_cm, "— 안 정함 —");
|
||||
const foundation = select(FOUNDATIONS, options.foundation, "— 안 정함 —");
|
||||
|
||||
const slope = document.createElement("input");
|
||||
slope.className = "b07-spec__input";
|
||||
@@ -118,6 +122,7 @@ export function buildStandardSpecPanel(
|
||||
field("돌 종류", kind),
|
||||
field("조달", supply, "비우면 「캔다」로 봅니다."),
|
||||
field("뒷길이 (㎝)", back, "품셈 일곱 규격 밖이면 물량이 서지 않습니다."),
|
||||
field("기초", foundation, "터파기 몫이 갈립니다 — 기초유 0.45 · 기초버림 0.07 ㎥/m."),
|
||||
field(
|
||||
"전면 기울기 1:n",
|
||||
slope,
|
||||
@@ -157,6 +162,7 @@ export function buildStandardSpecPanel(
|
||||
stone_supply: supply.value || null,
|
||||
back_len_cm: back.value || null,
|
||||
face_slope_ratio: slope.value.trim() || null,
|
||||
foundation: foundation.value || null,
|
||||
}),
|
||||
);
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user