# 검증 보고서: B05 종단 계획선(시공계획고) 자동 생성 및 단위/경사 제약 정밀 검증 - **검증 일시**: 2026-07-20 - **검증 대상**: B05 종단 계획선 자동 산출 엔진, 종단곡선 법정 예외, 경사 단위(%) 통일 및 스티키 옵션 버그 수정 - **검증자**: QA / Verifier --- ## 1. 검증 총평 종단 계획선 자동 산출 기능 및 사용자 지적에 따른 경사 단위(%), 주 진행방향 판정, 스티키 옵션 처리 등이 실무 설계 및 관련 규정(「임도설치 및 관리 등에 관한 규정」 [별표 1-2])에 부합하게 구현되었습니다. 모든 신규 및 수정 파일은 700줄 제한을 엄격히 준수하고 있으며, 기존 종횡단 데이터 생성 및 경로 탐색 흐름을 저해하지 않도록 예외가 격리(Surgical Edit 및 Non-breaking Exception Fallback)되어 있습니다. --- ## 2. 세부 검증 항목 결과 ### 2-1. 법정 설계 기준 및 Config 분리 준수 여부 - `config/config_system.py` 내 `FOREST_ROAD_PROFILE_CRITERIA`로 설계속도(40/30/20 km/h) 및 지형구분(일반/특수)별 법정 기준(종단기울기 7/8/9/10/12/14%, 역기울기 5%, 최소 곡선반경 450/250/100m, 최소 곡선길이 40/30/20m)이 명확히 정의됨. - 경로 탐색의 평면 선형 기준과 종단 계획선 기준이 완전히 분리되어 상호 간섭이 없음. ### 2-2. 계획선 엔진 수치 최적화 및 구할 분할 (`B05_wf2_Route_Engine_Grade.py`, `_Solver.py`) - 단일 파일 700줄 제한 준수를 위해 순수 수치 계산 모듈(`B05_wf2_Route_Engine_Grade_Solver.py`, 352줄)과 기준 확정/인터페이스 모듈(`B05_wf2_Route_Engine_Grade.py`, 560줄)로 깔끔히 분리됨. - SLSQP / trust-constr 기반 QP 최적화와 포물선 면적 오차 되먹임(_BALANCE_PASSES)을 통해 적분 오차(∫(계획고−지반고)ds ≈ 0)를 고정밀도로 달성함. - 비포장 도로이면서 기울기 대수차(A)가 5% 이하인 경우 종단곡선을 두지 않는 법정 예외(규정 다-(3)-(다)) 처리 확인. - 구역별 정확 균형이 기울기 제약과 양립하지 않는 불가능 조건(infeasible) 발생 시, 노선 전체 1구역 균형으로 자동 전환하여 절·성토 균형(법정 다-(3)-(나))을 우선 보장함. ### 2-3. 실제 데이터 진단 및 버그 수정 3건 대조 검증 1. **역기울기 오적용 및 V/Λ자 지형 대응**: - `_detect_main_direction()`을 통해 고도차와 전체 기복 비율(`main_direction_monotone_ratio`)로 V자/Λ자 지형을 자동 판정하여 부적절한 역기울기 제약 걸림을 차단함. 2. **스티키 기본값 버그 방지**: - DB에 해석된 결과(`grade_options`)와 명시적 사용자 오버라이드 입력값(`grade_overrides`)을 분리하여 등급/지형 재선택 시 갱신되지 않던 스티키 버그를 근본적으로 해결함. 3. **경사 단위(%) 통일 및 경로탐색 제약 분리**: - UI/Schema/DB 전체에서 경사를 `%` 단위로 일관 처리하며, `normalize_grade_percent()`로 과거 비율(0.14) 입력에 대한 하위호환성 보장. - 지반 경사(지상 지형)와 노면 경사(공사 후 계획고)의 구분을 명확히 하고 `slope_violations` 탐색 유도 지표의 원래 의미를 회복함. ### 2-4. 파일 제한 및 코드 품질 준수 - **700줄 제한**: - `B05_wf2_Route_Engine_Grade.py`: 560줄 (통과) - `B05_wf2_Route_Engine_Grade_Solver.py`: 352줄 (통과) - `B05_wf2_Route_Engine_Sections.py`: 182줄 (통과) - `B05_wf2_Route_Schema.py`: 207줄 (통과) - `B05_wf2_Route_UI_Panel.ts`: 468줄 (통과) - **Surgical Edit**: 불필요한 포맷 변경이나 주변 코드 수정 없이 목표한 로직 변경만 정밀 적용됨. --- ## 3. 종합 판정 **합격 (PASS)** — 구현 및 수치는 규정 및 실무 요구사항에 적합하게 완성되었습니다.