feat(ground): 하상 selectable; 설계홍수위 and 세굴 깊이 for 하상

- shape-options: a per-option "confirmed" flag; 하상 is confirmed, 해상 is not.
- The 위치 chips store the choice in the pier's draft; 선택 shows it.
- 하상: the groundwater inputs give way to 설계홍수위 DHWL (floodLevelEl) and
  세굴 깊이 (scourDepthM). The groundwater value is kept (남겨두기).
- Checks: G07 DHWL missing, G08 DHWL below the 지반고, G09 scour negative or
  the scour line below the footing bottom. The groundwater check is skipped for 하상.
- Section: the DHWL as a solid line and the 세굴선 dashed.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 11:06:10 +09:00
1 parent 7b5517e312
commit 26a5aff517
9 files changed
+163 -45

No files matched your search

+8 -2
View File
@@ -16,11 +16,11 @@ describe('형상 선택지 (spec §5.2, plan C5)', () => {
expect(defaultSummary('ground')).toBe('육상');
});
it('only defaults are selectable; every other option is refused with the reason', () => {
it('defaults and confirmed options are selectable (하상, 승인 2026-10-26); every other option is refused with the reason', () => {
for (const m of MEMBERS) {
SHAPE_GROUPS[m].forEach((g, gi) => {
for (const o of g.options) {
if (o.isDefault) {
if (o.isDefault || o.confirmed) {
expect(choose(m, gi, o.label)).toBe(o.label);
} else {
expect(isSelectable(o)).toBe(false);
@@ -35,3 +35,9 @@ describe('형상 선택지 (spec §5.2, plan C5)', () => {
expect(() => choose('coping', 0, '없는선택')).toThrow('알 수 없는');
});
});
it('하상 is the only confirmed ground option; 해상 stays refused until its rule is confirmed', () => {
const ground = SHAPE_GROUPS.ground[0].options;
expect(ground.find((o) => o.label === '하상')!.confirmed).toBe(true);
expect(() => choose('ground', 0, '해상')).toThrow('규칙 미정');
});