diff --git a/docs/raw/요구_1010_2/조사_V_횡단형상.md b/docs/raw/요구_1010_2/조사_V_횡단형상.md new file mode 100644 index 000000000..9fb47f5e2 --- /dev/null +++ b/docs/raw/요구_1010_2/조사_V_횡단형상.md @@ -0,0 +1,105 @@ +# 조사 V — B05/B06 횡단 형상(7 흙막이 형상 오류 · 12 소단 형상 · 13 옹벽 · 흙막이 단) (10-10 · 읽기 전용 조사 에이전트) + +| 약칭 | 파일 | 약칭 | 파일 | +|---|---|---|---| +| WAL | `common_util/common_util_structure_walls.ts` | WPY | `B06_Section/B06_Section_Engine_Structures_Wall.py`(WAL 짝) | +| STO | `B06_Section/B06_Section_Section_Store.ts` | REV | `B06_Section/B06_Section_UI_Cross_Revetment.ts` | +| EXT | `B06_Section/B06_Section_UI_Cross_Culvert_Extra.ts` | CV | `B06_Section/B06_Section_UI_Cross_View.ts` | +| LAY | `B06_Section/B06_Section_Structure_Layouts.ts` | WIRE | `B06_Section/B06_Section_UI_Cross_Culvert_Wire.ts` | +| COR | `B05_Profile/B05_Profile_UI_Corridor_Structures.ts` | NODE | `config/server_calc_node/B06_Section_Server_Calc_Node.js`(번들) | +| SCH | `B05_Profile/B05_Profile_Structures_Schema.py` | ESEC | `B05_Profile/B05_Profile_Engine_Sections.py` | +| BRM | `common_util/common_util_cross_berm.ts` | BPY | `common_util/common_util_cross_berm.py`(BRM 짝) | +| GEO | `common_util/common_util_cross_design_geometry.ts` | GPY | `B06_Section/B06_Section_Engine_Design_Geometry.py`(GEO 짝) | +| CD | `common_util/common_util_cross_design.ts` | ED | `B06_Section/B06_Section_Engine_Design.py`(CD 짝) | +| RD | `B06_Section/B06_Section_Router_Design.py` | PER | `B06_Section/B06_Section_UI_Page_Persist.ts` | +| REF | `B06_Section/B06_Section_Cross_Refresh.ts` | DEF | `resources/master_template/구조물정의.json` | +| GRD | `A00_Common/design/design_structure_guard.ts` | PIPE | `A00_Common/design/design_structure_pipe.ts` | +| SPF | `B05_Profile/B05_Profile_UI_Structures_Spec.ts` | FRM | `B05_Profile/B05_Profile_UI_Structures_Form.ts` | +| DRF | `B05_Profile/B05_Profile_UI_Drainage_Facility.ts` | RCH | `B05_Profile/B05_Profile_UI_Drainage_Revet_Choice.ts` | +| PPO | `B06_Section/B06_Section_UI_Page_Pipe_Options.ts` | T | `resources/tester/` | + +## 0. 코드 지도 + +| 요구 | 손댈 층 | 계산 자리(5장) | 저장 | +|---|---|---|---| +| V7 흙막이 형상 오류 | ① 측점 심기 규칙 SCH ② 벽 가드 한 벌 LAY · CV · COR ④ 옹벽 형태 키 WAL ↔ WPY | ① 서버 단독 ② TS 를 서버 Node 로(NODE 다시 빌드) ④ 짝 | 바뀜 없음(측점 파일은 재생성 때 늘어남) | +| V12 소단 형상 | DEF · BRM ↔ BPY · GEO ↔ GPY · 키 나르기(PER · REF · CD ↔ ED · RD · 타입 2) | ① 짝(있음 · 거울 시험 새로) | structures.json `options.depth_m`(새 키 · 추천) · 측점 결과 = 횡단 설계 patch `design.berm` | +| V13 옹벽 · 흙막이 단 | GRD · PIPE(명세) · WAL ↔ WPY · REV · DEF 그룹 | 제원 = 짝 · 형상 = TS 를 서버 Node 로 | structures.json `options.soil_add_{n}_form · _height` | + +## V7. 흙막이(흙막이류) 횡단도 형상 반영 오류 +- 원문 「흙막이휴」 = 「흙막이류」 오타로 봄(자판 ㄹ · ㅎ 이웃 · 1009 요구의 「흙막이류」 = 흙막이 계열) — 추정. +- 현재: 사면안정 흙막이 = `soil_guard`(C · 구간형 · DEF:1548) · 옹벽 = `retaining_wall`(DEF:986). **두 종류가 같은 길 하나** — 서버 얹기 WPY:46-121(`B06_Section_Router.py`:286 · 449) · 브라우저 초안 얹기 STO:63-100 → WAL:74-134 → `section.revetment` → REV `computeRevetmentLayout`:157-323 → 카드 CV:461-500 · 서버 면적 LAY:126-127(NODE) · 3D COR:280-282 · B07 `B07_DesignDetail_Cross_Overlay.ts`:484-506. 종류 키로 갈리는 곳 = 형태 기본(WAL:59-65 · WPY:33-39) · 옹벽 물빼기(REV:273)뿐. +- 재현(시스템 임시 폴더 · 읽기만): 픽스처 `T fixtures/b06_73_4_body_guard_sections.json` 관 없는 4측점(160 · 180 · 340 · 360)에 흙막이 기본값(돌쌓기(찰) · H1.5) · 옹벽 기본값(H2)을 얹고 NODE 실행 → 두 종류 성토 면적 같음(0.49 · 1.54 · 2.14 · 2.03 ㎡ · 표준 1.45 · 5.32 · 9.68 · 6.04). 다단 3 · H2 도 같은 트림. T test_b06_structure_walls_mirror · test_b06_wall_shape_unified · test_54_26_slope_table09 7 통과. +- ⇒ 「흙막이만 안 됨」을 만드는 정의 이름 · 종류 키 · 그리기 분기 · patch 누락 **없음**. storage 검증 프로젝트엔 흙막이 · 옹벽 · 소단을 놓은 자료가 없어 사용자 화면 그대로는 재현 못 함. +- 원인(코드로 확인된 「안 그려짐 · 틀림」 갈래 · 종류 무관): + - ① **C군 벽은 측점을 안 심음** — SCH:153-155(A군 · D군 구간형만) · ESEC:297-307 · 시험이 못 박음(T test_b05_extra_stations_supplier:133-157). 기본 길이 10 m(전 5 · 후 5)가 20 m 격자(`config/config_system_design.py`:247) 사이에 놓이면 얹힐 횡단 0장 → 종단엔 보이고 횡단 · 3D 엔 없음. D군 기슭막이는 시작 · 기준 · 종료 셋을 심음(ESEC:283-288). **가장 유력.** + - ② **카드와 다른 곳의 가드가 다름** — 카드 = 「연동 관 벽이 이 측점에 실제로 설 때만」 건너뜀(CV:468-469 · 09-09 고침 WIRE:244-263) / `computeStoredLayouts` = 연동 링크만 있어도 건너뜀(LAY:126-127) → 서버 면적([저장] · NODE) · B07 횡단 그림 · 배관 단 수 셈에서 벽 빠짐 / 3D = 관 측점만 봄(COR:280-282 → 연동 관 벽과 겹쳐 그림). 예: 유입 집수정 관의 집수정 범위 안 측점(WIRE:240 — 집수정은 링크 카드에 안 섬). + - ③ 설치 측 자동 + 양측 절토면 안 그림(REV:172-179) · 높이 빈칸이면 안 그림(REV:164-166) · 설치 측 칸 숨김(DEF:3541 · 3559) → 늘 성토 사면(노견 아래) 모양만 · 절토 쪽 흙막이를 세울 길 없음. + - ④ (잠복) 옹벽 형태 칸 `wall_form`(DEF:1002)을 그림이 안 읽음 — `form`(형식 · 중력식 …)이 있으면 돌 무늬(WAL:93 · `B06_Section_UI_Cross_Wall_Hatch.ts`:36-44). 형식 칸 숨김(DEF:3558)이라 지금은 안 드러남. +- 고칠 자리: + - ① SCH:153-155 에 C군 구간형 더함 → `resolve_extra_stations` 가 시작 · 기준 · 종료 심음(ESEC 그대로 · 라벨 = 정의 이름). 측점은 저장 · 재생성 때 섬. + - ② LAY 에 가드 한 벌(관 측점 또는 `culvertWallsStandAt`) → LAY:126-127 · CV:468-469 · COR:280-282 셋이 같이 씀 · NODE 다시 빌드(`B06_Section/B06_Section_Server_Calc_Prebuild.py`). + - ④ WAL:93 · WPY:73 — 옹벽은 `wall_form` 먼저(짝 둘 · 거울 시험 한 줄). +- 재사용: 기슭막이 측점 규칙(ESEC:283-288) · 카드 가드 `culvertWallsStandAt`(WIRE:253). +- 시험: T test_b05_extra_stations_supplier:133 고침(C 구간형 셋 심음 · E · G 그대로) · test_regeneration_extra_stations · 새 시험(NODE — 링크는 있으나 관 벽이 안 서는 측점에서 벽 면적 행 나옴 · 관 벽이 서는 측점은 안 나옴) · test_b06_structure_walls_mirror(`wall_form`) · test_b06_structure_areas.mjs. +- 위험: ① 카드 · 파일 수 늘어남 · 기존 프로젝트는 재생성해야 섬 · 재이관 차단 라벨(SCH:158-160)도 같이 늘어남(같은 함수 · 의도대로) · 소단 측점도 섬 / ② CV 690 · COR 675줄 — 바꾸기만(늘리지 말 것). +- 크기: ① 작음 · ② 작음~중간 · ④ 작음. +- ⬜ 사용자가 본 증상(어느 측점 · 안 보임/모양 틀림) — 확인 전 추천 = ① + ② 함께. +- ⬜ C군 측점: (가) 흙막이 · 옹벽 · 소단 시작 · 기준 · 종료 심음 / (나) 안 심고 「이 구간 횡단 없음」 안내만 — 추천 (가). +- ⬜ 절토 쪽 흙막이: (가) 이번 밖(기록만) / (나) 설치 측 칸 보이기 + 절토 쪽 모양 새로 — 추천 (가). + +## V12. 소단 — 높이 칸 빼고 성토 사면 한 단(도로 아래 Y) +- 현재 칸: DEF:1993 `berm` = 폭 `width_m`(0.5 · DEF:2008) · 높이 `height_m`(빈 값 · 「아직 계산에 안 쓰임」 DEF:2017) · 길이 · 전 · 후 · 간격(사면길이 3 · DEF:2053) · 안쪽 기울기(0° · DEF:2062). 보이는 칸 = 폭 · 높이(그룹 `gbermdetail` DEF:3794 · 표시 DEF:3563-3569). +- 흐름: 구조물 목록 → `bermSpansFromStructures` PER:102-135(세션 `berm` 구간) · `syncBermSpans`(`B06_Section_UI_Page_Design_Sync.ts`:197) → 측점별 제원 REF:188-201(서버 payload) · REF:255-262 · 320(브라우저 재계산) → 짝 BRM ↔ BPY(두 머리 짝 표시 있음). +- 지금 형상 = 사면길이 `interval_m` 마다 폭 평탄부 **되풀이** — 성토 BRM:153-191 · BPY:163 · **절토도** BRM:57-146(GEO:275-293 `cutPoints` 가 같은 소단 씀) · 설계선 꼭짓점 GEO:469-500 · 평탄부 거름 GEO:440-443(짝 GPY:207-244 · 283-286 · 432-443). +- 저장: 결과 `design.berm {width_m, interval_m, slope_deg}` CD:582-589 · ED:535-541 → [저장] 재계산 `stored_berm` RD:449-459 · 세션 `berms` RD:496-503(`B06_Section_Schema.py`:335) · 사용자 키 REF:87(서버 RD:151 · 172). 하류 = B07 평탄부 판정 `B07_DesignDetail_Engine_SlopeGeometry.py`:178-199(폭만 봄) · 3 m 검토 정보 `B06_Section_UI_Cross_Berm_Info.ts`. +- 「형상 필요」 까닭(추정): 성토 사면이 3 m(사면길이) 안 되면 소단이 안 섬 · 높이 칸은 어디서도 안 읽음 · C군이라 측점 안 심음(V7 ①). +- 거울 시험: 머리글의 `tmp/tests/test_cross_berm_mirror.py` 는 git 밖 — T 에 성토 소단 거울 시험 없음(test_berm_knee_progress = 절토 끝남만). +- 고칠 자리(⬜ (가) 기준): + - DEF: `depth_m`「소단 위치(도로 아래)」 m · 기본 1.0(사용자 값) · 그룹 옵션 [width_m, depth_m] · `height_m` 표시 끔(값 남김). + - BRM · BPY: BermSpec 에 깊이 · `fillProfilePoints` = 내려가다 표고가 「노면 끝 − 깊이」에 닿으면 폭만큼 수평 → 그 아래 같은 성토 경사로 이어 내림 · 한 단만 · 깊이 < 0 은 0(도로보다 높을 수 없음) · 그 깊이 전에 원지반을 만나면 소단 없음. + - GEO · GPY: `fillPoints` 에 노면 끝 표고 넘김(`slopeStart` GEO:258-266 은 측구가 그쪽이면 측구 바깥 표고 — 기준 다름) · (⬜) `cutPoints` 소단 끔. + - 키 나르기 `depth_m`: PER:58-62 · 117-131(지금 음수 = 기본값 → 0 으로 자름) · REF:188-201 · 255-262 · `B06_Section_Api_Fetch.ts`:268 · `B06_Section_Api_Types.ts`:531 · CD:185 · 582-589 · ED:535-541 · RD:449-459 · 496-503. +- 재사용: 지금 소단 길(구간 → 세션 → 측점 제원 → 짝 계산 → 설계선 · 면적 · 3D) 그대로 · 칸 = 정의 그룹 숫자 칸([−][숫자][+] `B05_Profile_UI_Structures_Panel_Options.ts`:103-106). +- 시험: 새 T test_cross_berm_mirror(TS ↔ 파이썬 · 깊이 1.0 · 폭 0.5 · 1:1.5 꼭짓점 같음 · 깊이 0 · 깊이 > 사면 높이 = 소단 없음) · test_b06_cross_design_mirror(소단 측점 더함) · test_b07_slope_geometry · test_berm_knee_progress(절토 끄면 고침) · test_54_26_slope_table09 · test_54_6_slope_container · test_b06_berm_review_info. +- 위험: 옛 되풀이 소단이 한 단으로 바뀜(재계산 때 면적 · 토량 바뀜) · 절토 소단 끄면 절토 면적 줄어듦 · 짝 파일 여유 적음(RD 618 · CD 606 · ED 555) · 측구가 성토 쪽인 단면의 기준 표고. +- 크기: 중간. +- ⬜ 절토 쪽 소단: (가) 끔(요구 = 성토 사면) / (나) 지금 되풀이 그대로 — 추천 (가). +- ⬜ 깊이 키: (가) 새 키 `depth_m` · 높이 칸 숨김 / (나) `height_m` 이름만 바꿔 씀(높이를 읽는 공용 코드에 깊이가 섞일 위험) — 추천 (가). +- ⬜ 깊이 기준: (가) 그쪽 노면 끝(길어깨 끝) 표고 / (나) 사면 시작점 — 추천 (가). +- ⬜ Y 조절 자리: (가) 좌측 패널 칸(구간 한 값) / (나) 횡단 카드 끌기(측점마다 · patch 새 키) — 추천 (가). + +## V13. 사면안정 옹벽 · 흙막이 「단」 — 유출 양식 재사용 +- 현재 칸: 흙막이 = 그룹 `gsoilgdetail`(DEF:3756 · 형태 · 길이 · 높이 · 전 · 후) + 숨은 `tiers`「단 수(다단)」(DEF:1629 · 표시 DEF:3542 끔) · 옹벽 = `gretaindetail`(DEF:3688 · `wall_form` · 길이 · 높이 · 전 · 후) · `tiers` 없음. 둘 다 명세(STRUCTURE_SPECS PIPE:107-114) 밖 — 정의 그룹 상자로 그림. 저장 = structures.json `options`. +- 형상: 다단은 이미 됨 — REV:248-270 이 `spec.tiers` 만큼 `buildExtrasAt`(배관과 같은 함수) · 짝 WAL:98 · WPY:76 이 tiers 나름. 단 조정값은 늘 `ZERO_ADJUST`(REV:257) → 단 형태 = 본 벽 형태 · 단 높이 = 기본 1.5 m(EXT:285-289 · `B06_Section_UI_Cross_Culvert_Const.ts`:166) · 단별 값 못 정함 · 단 수 칸이 화면에 없어 사실상 1단. +- 유출 양식(배관): 유출 상자 「추가 흙막이(단)」 숫자 칸 RCH:60-86(값 = 횡단 설계 patch `extra_wall_counts.outlet`) + 흙막이 상자 `SOIL_ADD`(GRD:113-121 · 형태 · 길이 · 높이 · 전 · 후 · 키 `soil_add_{n}_*` · 잇기 `gsoiladd{n}`) · 상자 수 = 지형이 세운 단(count 훅 DRF:345 · fields 훅 DRF:316-327) · 상자 값 → 단 조정 PPO:221-260(`extra{n-1}` 의 h · m). +- 고칠 자리(⬜ (가) 기준): + - GRD: 단 컨테이너 = SOIL_ADD 꼴 · 항목 형태 · 높이만(`guardItems()` 거름) · 옹벽 몫은 높이만(⬜). + - PIPE:107-114 에 `soil_guard` · `retaining_wall` 명세(선택 컨테이너 하나 · 본 칸은 정의 그룹 그대로) → 좌측 패널이 옵션 칸 아래 공용 폼 [추가] · [빼기] 상자(SPF:28-29 · FRM:171-183 · 앞선 예 `design_structure_road.ts` `ETC_SPEC`). + - WAL:74-106 · WPY:46-90(짝): `soil_add_{n}_form · _height` → `extras: [{form, height_m}]` · tiers = 1 + 상자 수(상자 없으면 옛 `tiers`). + - REV:249-257: 단 조정 = `{...ZERO_ADJUST, m: 형태, h: 높이}` · 자리(x · d)는 다단 자동 규칙 그대로. + - DEF: 두 종류 그룹에 `gsoiladd`(흙막이 n) — 조합 잇기 이름. +- 재사용: SOIL_ADD 칸 · 공용 명세 폼 선택 컨테이너(`design_structure_form.ts`:280-345) · `buildExtrasAt` · 그리기 · 3D(`tiers[].polygon`) · B07 그대로. +- 시험: T test_b06_structure_walls_mirror(extras 두 벌 같음) · 새 시험(tsc — 흙막이 2단 · 둘째 단 콘크리트 H2.0 → 둘째 벽 form · 높이) · test_54_26_slope_table09 · test_54_6_slope_container · test_54_27_soil_tier_field · test_b06_wall_shape_unified · test_52_17_single_container. +- 위험: 단별 수량은 이번 밖(B08 이 C군 다단을 안 셈 · 기록만) · 지형이 단을 못 세우면 상자보다 단이 적음(구간 벽은 측점마다 지형이 달라 배관처럼 상자 수를 맞출 수 없음) · 단 자리 조작(조정창) 없음 · 3D · B07 다단도 함께 바뀜. +- 크기: 중간. +- ⬜ 단 수 정하는 법: (가) 공용 상자 [추가] · [빼기](상자 수 = 추가 단) / (나) 배관 유출과 같은 「추가 흙막이(단)」 숫자 칸 + 상자 수 따라감(RCH `outletTiersRow` 를 저장 자리 받게 넓힘 · SPF 에 count · fields 훅) — 추천 (가). +- ⬜ 단 상자 칸: (가) 형태 · 높이 / (나) SOIL_ADD 그대로(길이 · 전 · 후는 그림에 안 쓰임) — 추천 (가). +- ⬜ 옹벽 단 형태: (가) 흙막이와 같은 형태 6 / (나) 높이만(형태 = 콘크리트) — 추천 (나). + +## 고칠 파일 목록 + +| 파일 | 줄 수 | 700 위험 | 요구 | +|---|---|---|---| +| `B05_Profile/B05_Profile_Structures_Schema.py` | 290 | 없음 | V7 ① | +| LAY · CV · COR | 389 · 690 · 675 | CV · COR 높음 — 바꾸기만 | V7 ② | +| NODE(번들) | — | 다시 빌드 | V7 ② · V13 | +| WAL ↔ WPY | 134 · 121 | 없음 | V7 ④ · V13 | +| BRM ↔ BPY · GEO ↔ GPY | 223 · 240 · 501 · 459 | 낮음 | V12 | +| CD ↔ ED · RD | 606 · 555 · 618 | 중간(+ 2~4) | V12 | +| PER · REF · `B06_Section_Api_Fetch.ts` · `B06_Section_Api_Types.ts` | 462 · 407 · 313 · 620 | 낮음(+ 1~3) | V12 | +| GRD · PIPE · REV | 158 · 114 · 392 | 없음 | V13 | +| DEF | 자료 | 해당 없음 | V7 ④ · V12 · V13 | + +- 요구 겹침: V7 ① 측점 심기 = V12 소단 · V13 단 모두 카드가 서는 조건 · V7 ② · V13 = REV · NODE 함께 · V12 · V13 = DEF 함께(M02 판). +- 안 고침: `B05_Profile/B05_Profile_UI_Structures_Panel.ts`(699줄 — 셋 다 필요 없음).