From 8c883564599734715550748d63d30f9224563205 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 9 Sep 2026 12:17:03 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat(B05/B06):=20=ED=9D=99=EB=A7=89?= =?UTF-8?q?=EC=9D=B4=EB=A5=BC=20=EA=B8=B0=EC=8A=AD=EB=A7=89=EC=9D=B4?= =?UTF-8?q?=EC=99=80=20=EA=B0=99=EC=9D=80=20=EB=B2=8C=EB=A1=9C=20=E2=80=94?= =?UTF-8?q?=20=ED=98=95=EC=83=81=C2=B7=EC=98=B5=EC=85=98=20=EB=8F=99?= =?UTF-8?q?=EC=9D=BC,=20=EC=88=98=EB=9F=89=EC=9D=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사용자 확정 4차 원문 — 「흙막이는 횡단도에서 **표현방식들과 옵션들은 동일하게** 반영하면 될거야. **형상은 동일해.** 물론 **데이터는 분리하여 계산**되어야함.」 - 그리기 경로는 **이미 같음** — C군 벽은 `attachWallSpecs` 로 `section.revetment` 에 붙어 기슭막이와 같은 기하를 탐(따로 그리지 않음). 형태 이름도 「찰/콘크리트」 글자로 갈려 흙막이 선택지(돌(찰)·돌(메)·떼…)가 그대로 먹힘 - 빠져 있던 것은 **옵션 칸**이라 기슭막이 열두 칸을 **같은 글자 그대로** 옮김 — 단 수 · 올림 · 이동 · 뒷길이 · 돌 종류 · 조달 · 야면석 계수 · 채움 강도 · 전면 기울기 · 기초 · 물빼기 구멍 둘 ⚠ 흙막이 수량이 안 쓰는 칸도 **숨기지 않음**(사용자가 「동일하게」라 함) — 수량 쪽에서 조용히 무시되면 됨 - ⚠ 코드에 **「형상 동일 ≠ 수량 동일」**을 못 박음. 원단위·공종코드·성분 줄은 흙막이 자기 것. 반대 사례가 골막이임(그림도 수량도 다르고 두께식마저 다른 식) — **계열이 다르면 상수를 나눠 쓸 것** Co-Authored-By: Claude Opus 5 (1M context) --- B05_Profile/B05_Profile_Structure_Types.json | 107 +++++++++++++++++++ common_util/common_util_structure_walls.ts | 12 ++- 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/B05_Profile/B05_Profile_Structure_Types.json b/B05_Profile/B05_Profile_Structure_Types.json index f60218a2..1788819a 100644 --- a/B05_Profile/B05_Profile_Structure_Types.json +++ b/B05_Profile/B05_Profile_Structure_Types.json @@ -1094,6 +1094,113 @@ "input": "select", "choices": ["자동(성토 쪽)", "좌", "우"], "default": "자동(성토 쪽)" + }, + { + "key": "tiers", + "label": "단 수(다단)", + "input": "number", + "unit": "단", + "default": 1, + "required": false, + "phase": "b05" + }, + { + "key": "lift_m", + "label": "기준 올림(사면 위로)", + "input": "number", + "unit": "m", + "default": 0, + "required": false, + "phase": "b05" + }, + { + "key": "shift_m", + "label": "기준 좌우 이동", + "input": "number", + "unit": "m", + "default": 0, + "required": false, + "phase": "b05" + }, + { + "key": "back_len_cm", + "label": "뒷길이", + "input": "select", + "choices": ["25", "30", "35", "45", "55", "60", "75"], + "default": null, + "required": false, + "phase": "detail" + }, + { + "key": "stone_kind", + "label": "돌 종류", + "input": "select", + "choices": ["야면석·호박돌", "깬잡석", "깬돌", "견치돌"], + "default": null, + "required": false, + "phase": "detail" + }, + { + "key": "stone_supply", + "label": "조달", + "input": "select", + "choices": ["채집", "구입"], + "default": "채집", + "required": false, + "phase": "detail" + }, + { + "key": "stone_coeff_basis", + "label": "야면석 계수", + "input": "select", + "choices": ["품셈", "실무 관행"], + "default": null, + "required": false, + "phase": "detail" + }, + { + "key": "fill_concrete_mpa", + "label": "채움 강도", + "input": "select", + "choices": ["180", "210"], + "default": null, + "required": false, + "phase": "detail" + }, + { + "key": "face_slope_ratio", + "label": "전면 기울기 (1:n 의 n)", + "input": "number", + "default": null, + "required": false, + "phase": "detail" + }, + { + "key": "foundation", + "label": "기초", + "input": "select", + "choices": ["기초유", "기초버림"], + "default": null, + "required": true, + "phase": "detail" + }, + { + "key": "weep_hole_diameter_mm", + "label": "물빼기 구멍 지름", + "input": "number", + "unit": "㎜", + "default": null, + "required": false, + "phase": "detail" + }, + { + "key": "weep_hole_area_m2", + "label": "물빼기 구멍 1개당 벽면적", + "input": "number", + "unit": "㎡", + "default": null, + "required": false, + "phase": "detail" } ] }, diff --git a/common_util/common_util_structure_walls.ts b/common_util/common_util_structure_walls.ts index 5cd7c2e8..d6bb4f40 100644 --- a/common_util/common_util_structure_walls.ts +++ b/common_util/common_util_structure_walls.ts @@ -42,7 +42,17 @@ export interface WallSpec { /** 구간 경계 측점을 구간 안으로 볼 허용 오차(m) — 파이썬 `_EDGE_TOLERANCE_M`. */ const EDGE_TOLERANCE_M = 0.02; -/** 구조물 종류 → 횡단 기하가 아는 형태 이름 — 파이썬 `_FORM_BY_TYPE` 와 같은 표. */ +/** + * 구조물 종류 → 횡단 기하가 아는 형태 이름 — 파이썬 `_FORM_BY_TYPE` 와 같은 표. + * + * ⚠⚠ **「형상 동일」이 「수량 동일」이 아니다**(2026-09-09 사용자 확정 4차 원문: + * 「흙막이는 횡단도에서 표현방식들과 옵션들은 동일하게 반영 · **형상은 동일** · + * 물론 **데이터는 분리하여 계산**되어야 함」). + * ⇒ 흙막이는 기슭막이와 **같은 그리기 경로·같은 옵션 벌**을 쓰되, 원단위·공종코드·성분 + * 줄은 **흙막이 자기 것**이다. 그림이 같다고 수량을 빌려 쓰면 안 된다. + * ⚠ 반대 방향의 사례가 골막이다 — 그림도 수량도 다르고, 두께식마저 다른 식이었다. + * **구조물 계열이 다르면 상수를 나눠 쓸 것.** + */ export const FORM_BY_TYPE: Record = { masonry_wet: "돌쌓기(찰)", masonry_dry: "돌쌓기(메)", From 60e7e137bb58edae5df3afa869ec51c97d2b2765 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 9 Sep 2026 12:19:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat(B07):=20=ED=9A=A1=EB=8B=A8=EB=8F=84=20?= =?UTF-8?q?=ED=95=98=EB=8B=A8=ED=91=9C=EC=97=90=20=EC=82=AC=ED=86=A0?= =?UTF-8?q?=EC=9E=A5=20=EC=A4=84=20=E2=80=94=20=E3=80=8C=EC=8C=93=EA=B8=B0?= =?UTF-8?q?=E3=80=8D=EC=99=80=20=EA=B0=88=EB=9D=BC=20=EB=B3=B4=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 실무 원본 횡단도에는 그 자리가 **아예 없음**(400dpi 실측, 다른 창 확인) — 납품 양식을 늘리는 것이 아니라 **안 쓰던 빈 줄을 쓰는 것**임. - 우측 그룹의 빈 줄 자리에 「사토장」 신설 (`spoil_fill`) - 값은 B06 이 낸 `spoil_fill_area_m2` 를 그대로 옮김 — 여기서 더하거나 빼지 않음 (`fill_area_m2` 에서 이미 빠져 있음 · 확정 ㉠ 같은 흙을 두 번 세지 않기) - 사토장이 없는 측점은 값이 안 실려 종전처럼 빈칸 Co-Authored-By: Claude Opus 5 (1M context) --- B07_DesignDetail/B07_DesignDetail_Engine_Cad_Table.py | 8 +++++++- .../B07_DesignDetail_Engine_Cross_Quantity.py | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Table.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Table.py index d0f1fce7..c8e605c5 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Table.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Table.py @@ -49,7 +49,11 @@ _CROSS_RIGHT_ROWS: tuple[tuple[str | None, str | None], ...] = ( ("성토파종", "fill_seeding"), ("절토살포", "cut_spraying"), ("제근", "grubbing"), - (None, None), + # 사토장(유용토운반작업장) — **「쌓기」와 갈라 세운다**(2026-09-09 확정 ㉠). + # ⚠ 여기는 원래 **빈 줄**이었고, 실무 원본 횡단도에는 그 자리가 **아예 없다** + # (2026-09-09 400dpi 실측). 즉 **납품 양식을 늘리는 것이 아니라 안 쓰던 칸을 쓰는 것**이다. + # ⚠ 사토장이 없는 측점에는 값이 안 실려 종전처럼 빈칸으로 남는다. + ("사토장", "spoil_fill"), ("노면다짐", "road_compaction"), ) @@ -74,6 +78,8 @@ QUANTITY_VALUE_KEYS: tuple[str, ...] = ( "fill_seeding", "cut_spraying", "grubbing", + # 사토장 — 「쌓기(embankment)」와 **다른 칸**이다. 합치지 않는다(확정 ㉠). + "spoil_fill", "road_compaction", ) diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cross_Quantity.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cross_Quantity.py index c51b7a3c..0604ec3f 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cross_Quantity.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cross_Quantity.py @@ -47,6 +47,9 @@ AREA_KEYS: tuple[tuple[str, str], ...] = ( ("embankment", "fill_area_m2"), ("ditch_soil", "ditch_soil_area_m2"), ("ditch_rock", "ditch_rock_area_m2"), + # 사토장 — **`fill_area_m2` 와 갈라 든다**. B06 이 이미 노선 성토에서 뺀 값이라 + # 여기서 더하거나 빼지 않는다(확정 ㉠ — 같은 흙을 두 번 세지 않기). + ("spoil_fill", "spoil_fill_area_m2"), ) #: `ditch_split_basis` 를 사람이 읽는 말로. 도면·화면이 「왜 이렇게 갈렸나」를 보일 때 쓴다.