feat(ground): 해상 selectable with MSL levels, 고조위·저조위, and checks
- Rules confirmed (승인 2026-10-26): datum MSL; 고조위 HWL and 저조위 LWL as two levels; 세굴 깊이 as for 하상; 파랑과 선박 하중 excluded from this scope. - Checks: G13 levels missing, G10 해저면 not below 고조위, G11 저조위 not below 고조위, G14 pile wall at or below the corrosion allowance reference. - CORROSION_ALLOWANCE_MM = 1 is a PLACEHOLDER reference (not in the RAG documents); the card and G14 mark it as to be confirmed. - Card: the 해상 inputs; the section draws 고조위 (solid), 저조위 (dashed), and labels the ground line 해저면 EL. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
26a5aff517
commit
b6e7f36091
9 files changed
+132
-22
No files matched your search
@@ -216,3 +216,36 @@ describe('하상 (승인 2026-10-26: 설계홍수위 DHWL, 세굴 깊이)', () =
|
||||
expect(svg).not.toContain('지하수위 25');
|
||||
});
|
||||
});
|
||||
|
||||
describe('해상 (승인 2026-10-26: MSL 기준, 고조위·저조위 두 개, 부식 여유 기준값, 파랑·선박 하중 제외)', () => {
|
||||
const sea = { groundPosition: '해상' as const };
|
||||
|
||||
it('G13: a 해상 without both the 고조위 and the 저조위', () => {
|
||||
expect(ground(withGround({ ...sea, highWaterEl: 30 }))).toEqual(['G13']);
|
||||
});
|
||||
|
||||
it('G10: the 해저면 not below the 고조위', () => {
|
||||
expect(ground(withGround({ ...sea, highWaterEl: 28, lowWaterEl: 25 }))).toEqual(['G10']);
|
||||
});
|
||||
|
||||
it('G11: the 저조위 not below the 고조위', () => {
|
||||
expect(ground(withGround({ ...sea, highWaterEl: 30, lowWaterEl: 31 }))).toEqual(['G11']);
|
||||
});
|
||||
|
||||
it('a valid 해상 passes, and the 육상 groundwater and 하상 flood inputs are ignored', () => {
|
||||
expect(ground(withGround({ ...sea, highWaterEl: 30, lowWaterEl: 25, groundWaterOn: true, groundWaterEl: 99, floodLevelEl: 99 }))).toEqual([]);
|
||||
});
|
||||
|
||||
it('G14: a pile wall at or below the corrosion allowance reference', () => {
|
||||
const issues: Issue[] = [];
|
||||
validateGround(withGround({ ...sea, highWaterEl: 30, lowWaterEl: 25, pileThicknessMm: 1 }), issues);
|
||||
expect(issues.map((i) => i.code)).toEqual(['G14']);
|
||||
});
|
||||
|
||||
it('the section shows the 고조위 (solid), the 저조위 (dashed), and the 해저면 label', () => {
|
||||
const svg = groundSectionSvg(withGround({ ...sea, highWaterEl: 30, lowWaterEl: 25 }), buildPier(base));
|
||||
expect(svg).toContain('고조위 HWL 30.000');
|
||||
expect(svg).toContain('저조위 LWL 25.000');
|
||||
expect(svg).toContain('해저면 EL 28.931');
|
||||
});
|
||||
});
|
||||
@@ -36,8 +36,9 @@ describe('형상 선택지 (spec §5.2, plan C5)', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('하상 is the only confirmed ground option; 해상 stays refused until its rule is confirmed', () => {
|
||||
it('하상 and 해상 are confirmed ground options (승인 2026-10-26); 육상 is the default', () => {
|
||||
const ground = SHAPE_GROUPS.ground[0].options;
|
||||
expect(ground.find((o) => o.label === '하상')!.confirmed).toBe(true);
|
||||
expect(() => choose('ground', 0, '해상')).toThrow('규칙 미정');
|
||||
expect(ground.find((o) => o.label === '해상')!.confirmed).toBe(true);
|
||||
expect(choose('ground', 0, '해상')).toBe('해상');
|
||||
});
|
||||
Reference in new issue
Block a user