chore(계획): PLAN 528 · 529 · 530 · 534 · 535 완료 절 이관(요구 348)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 23:35:35 +09:00
co-authored by Claude Opus 5.5
parent 848e21c21e
commit 85df6e4a09
+63
View File
@@ -0,0 +1,63 @@
# 계획서 이관 — 528 · 529 · 530 · 534 · 535 (2026-10-25 · 요구 348 · 완료 절)
## 528. 신규 프로젝트 그룹 공통 — 종류 · [+] 네 카드 · 산림청 · 공유 보기 · 복사 (요구 345 · 346 · 요구서 345 2장 · 528-1 · 3 · 5 sub1 · 528-2 sub2 · Opus high · 528-4 뒤)
- 사용자 확정(요구 345 · 346): [+] = 예정노선 · 임도설계 · 사방설계 · 안정성평가 카드(그림 + 제목) · 예정노선 = 산림청(*.go.kr) · 시스템관리자만 · 지정 업체 보기만 · 연결 · 생성 시점 복사 · E 업데이트 없음.
- 정함(브레인 · 사용자 바꿀 수 있음): 요구서 345 6장(산림청 = go.kr 전부 · 기관도 회사로 등록 · 지정 회사 구성원 전부 보기 · 공유 판정은 공용 접근 판정 한 곳).
- [x] 528-1 DB 020(projects 종류 · 사업연도 끝 · 원본 칸 + 예정노선 연도 구간 · 지정 업체 표) · 산림청 판정 함수 · B02 API 종류 검사 — 지킴 시험(판정 · 일반 사용자 PLAN 403 · 원본 B06 미완료 400).
- 검증완료 — 시험 19 통과 · 기존 B01 · 접근 · 로그인 63 통과 · 실 API: 일반 D01 403 · 산림청 PLAN(속도 20 · 단계 3 · D 폴더) · E 원본 B06 미완료 400 · 완료 = STABILITY 단계 4 · 공유 DB 에 020 적용(기존 16행 ROAD)
- [x] 528-2 [+] 네 카드 모달 · B01 종류 열 · 종류별 첫 화면 · 종류별 단계 시드 · storage 폴더 허용 — ORCA 세 역할(산림청 · 업체 · 시스템관리자).
- 검증완료 — 실 API 세션 산림청(go.kr 임시 계정) · 시스템관리자 = 참 · D01 200 / 회사관리자 · 사용자 = 거짓 · D01 403 · ORCA 모달: 시스템관리자 카드 넷 켬(사방만 0.45) · 회사관리자 · 사용자 = 예정노선 0.45 + 까닭 툴팁 · 누름 알림 · 어두움 선 색 = 글자 색 · 표 종류 열 · PLAN 행 단계 누름 → D03 · 받은 예정노선 2줄 · [보기] → D02 · E01 → E02 · DB STABILITY 단계 4 · 만든 행 모두 지움
- [x] 528-3 공유 회사 GET 만 판정 · 대시보드 「받은 예정노선」 구역 — 시험(공유 GET 200 · PUT 403 · 미지정 403) + ORCA.
- 검증완료 — 실 API: 지정 회사 GET 200 · PUT 403 · 미지정 GET 403 · 받은 예정노선 1건(지정 회사) · 0건(그 밖) · 화면 구역은 528-2
- [x] 528-4 공용 복사 함수(복제 도구 본체 이전 · CLI 껍데기 · 범위 인자) — 임시 storage 시험(새 id · UUID 치환 · 원본 그대로).
- 검증완료 — 시험 2 통과(full: 표 7 행 수 같음 · 지표면 id 다시 이음 · UUID 0 · 원본 해시 그대로) · 옛 도구 대 새 CLI 같은 원본: 표 9 · 파일 234 같음(단계 params 는 자동증가 id 만 다름)
- [x] 528-5 회원가입 메일 *.go.kr → 회사 「산림청」 자동 입력 · 고정(요구 347-8) + 산림청 회사 행 미리 둠 — 지킴 시험(go.kr 가입 = 산림청 회사 · 다른 회사 보내도 무시) + ORCA 가입 화면.
- 검증완료 — 시험: go.kr 인증 = 산림청 · ACTIVE · 보낸 회사 값 무시 · 다른 메일 NO_COMPANY · ORCA 가입 화면: Kim@Forest.GO.KR → 회사 칸 「산림청」 readOnly 보임 · gmail → 숨김
- [x] 528-6 D · E 생성 가볍게(요구 351) — B 양식 복사 · B0x 빈 폴더 없음(D = D0x + B04_PreProcess · E = E0x) · 경로 풀이가 D · E 루트에 B 폴더 안 만듦 · ROAD 그대로 · 기존 검증 D · E 셋 정리.
- 검증완료 — 시험 528 25 · D03 지형 · 분석 · E01 복사 19 통과 · 실 DB 생성: E 31.03 MB(복사 20.27 + 양식 10.76) → 20.27 MB · B 폴더 0 · D 10.76 MB → 0 MB(D02~D04 + B04) · 기존 셋(검증_sub7 · 검증531 · 검증_sub8) 양식 · 빈 B 폴더 지움 · 사용자 D · E 없음
## 529. D 예정노선 — 등록 · 1단계 기준 지정 (D01 · D02 · 요구서 345 3-1 · 3-2 · 529-1 · 2 sub2 · Opus high · 529-3 뒤)
- 사용자 확정(요구 345 · 349): 등록 칸(사업연도 범위 · 지역 · 종류 「노선 계획」 · 임도 종류 · 설계속도(기본 최저 속도) · 이름 수기/자동 · 시작 · 종료 누가 · 도면 칸 없음) · 연도별 시점 · 종점(직전 종점 = 다음 시점) · 카카오 끌기 · 좌표 입력 · B05~B09 틀 재활용.
- 정함(브레인): 틀 아이콘 · [<][>] · 도움말 인자 · 카카오 지도 ui_template 이전 · 작업 좌표계 경도 자동(5185~5187) · 변환 서버 pyproj · 근거 _분석_345-B.
- [x] 529-1 틀 인자 + D 경로 + D01 등록(B02 이름 조합기 · 임도 종류 · 설계속도 = B02 칸 · resolve_design_speed 재활용) — ORCA 등록 → DB 행 · 이름 자동 · 속도 기본 20 · B05 틀 그대로.
- 검증완료 — ORCA D01: 속도 기본 20(간선 20/30/40 · 작업 20) · 이름 「2026~2028 확인군 작업임도」 자동 · 손댄 뒤 지역만 갈아 끼움 · 등록 → DB PLAN 2026~2028 · fire 30 · 0~2500 · 단계 3 → D02 · D/E [<][>] 묶음 안(D04 · E05 [>] 흐림) · [?] D03 · B05 틀 그대로(B 아이콘 · [<] 흐림 · [?] 14 항목) · 시험 280-2 · 54-2 · 218-1 통과
- [x] 529-2 카카오 지도 ui_template 이전 · 키 길 공용 — B08 이정표 시험 + ORCA B08 지도 그대로.
- 검증완료 — B08 이정표 시험 99 통과 · ORCA B08 거래처 모달 지도: /api/map/kakao-key 로 SDK 적재 · 칸 높이 480 · 시점 알약 그대로
- [x] 529-3 좌표 변환 common_util_crs + D02 지점 정본 API(잇기 · 빈 연도 거절) + D02 화면(연도 표 · 좌표 칸 · 끌기 · 구간 선 · [>] 저장) — 지킴 시험(왕복 1 mm · 잇기) + ORCA 끌기 ↔ 표 수치.
- 검증완료 — 시험 13 통과(원점 3 띠 · 왕복 1 mm · 띠 경계 · 잇기 · 빈 연도 · 범위 · 권한 · 바뀐 연도만 비움) · 실 API 빈 연도 400 · 범위 밖 400 · 임도 프로젝트 400 · 다른 회사 403 · ORCA 지도 누름 3번 = 시점 → 경계 → 종점 차례 · 끌기 P1 → 표 127.125 / 37.515 · 입력 → 표지 127.165 · 연도 선 빨강 · 파랑 · [>] 뒤 D03 · DB 2027 시점 = 2026 종점 (211050.971, 546176.272) EPSG 5186 = pyproj 값 · 만든 프로젝트 지움
## 530. D 예정노선 — 지형 받기 · 2단계 분석 (D03 · 요구서 345 3-3 · 530-1 · 2 sub3 · Opus high · 530-3 뒤)
- 사용자 확정(요구 345): [>] 때 수치지형도 외부 API 받아 영구저장 · 범위 넘으면 더 받기 · [분석] = B05 추천 로직 한 벌 · 보임 = 중심선 · 측점 스냅 · 표기 · 지반 횡단 · 3D(구조물 X) · 노견 · 절성토선 · 종단 · 배수유역 X.
- 정함(브레인): 추천 기준 = 등록 임도 종류 · 설계속도 · 지형 = D storage 안 B04_PreProcess 배치 · DEM 연도 구간별 · 갈래 넷 연도마다 고름 · 연도 경계 꺾인 채 · 계류 이격 반영 · 복도 폭 D 만 넓힘(B 기본 그대로) · 근거 _분석_345-B.
- [x] 530-1 지형 받기 서비스(합집합 · prune 없음 · 지점 사이 메움 · 위성) + 연도별 DEM · 모델 행 — 가짜 내려받기 시험(옛 도엽 유지 · 새 도엽만 · 빠짐 없음).
- 검증완료 — 시험 3 통과 · 실측(검증_sub3 노선 근처 두 연도 1.23 · 1.22 km · 5187) 받기 123 s · 도엽 12매 · 위성 1장 · DEM 726×1935 · 1700×1400 칸 · 다시 받기 0매 · 위성 건너뜀
- [x] 530-2 B05 엔진 인자 셋(models_dir · cache_dir · 복도) + D 분석 API(구간 반복 · 잇기 · 누가 · 진행률 · 저장본) — B05 추천 시험 그대로 통과 + 경계 좌표 일치 시험.
- 검증완료 — B05 추천 시험 11파일 그대로 통과 · D 시험 7 통과 · 실측 두 구간 갈래 넷 복도 100 · 200 · 300 m = 116 · 140 · 183 s · 못 지킨 곳 5 · 8 · 1 → 복도 300 m · 같은 입력 다시 0.07 s · 경계 좌표 일치
- [x] 530-3 D03 평면(MapRender · 측점 · 스냅 · 지점 끌기 · 범위 밖 더 받기) + 지반만 횡단 + 3D 모달 — ORCA(측점 · SVG 표고 = 격자 · 구조물 0).
- 검증완료 — B05 횡단 시험 48 · D 시험 30 통과 · typecheck 0 · ORCA 산림청 계정 새 예정노선(2026~2027): 열자 받기 도엽 9매 · 갈래 넷 카드 · 2027 토공 최소 고름 → [저장] DB 갈래 · 누가 2861.19~4218.94 = 화면 · 측점 150+0 누름 SVG 지반선 = 격자 표고 차 0.000001 m · 3D 코리도 · 구조물 0 · 종점 1 km 끌기 → 범위 밖 · 더 받기 도엽 9 → 12매 · 끈 지점 [분석] · [저장] = 정본 종점 · 노선 끝 누가 5725.28 · 프로젝트 지움
## 534. E 안정성평가 — 내장 엑셀 보고서 (E05_StabReport · 요구 347-5 · 534-1 · 2 sub6 · Opus high · PDF 는 535 공용 모듈 뒤 · 534-3 뒤)
- 사용자 확정(요구 347-5): 내장 엑셀 양식화 · 페이지 구분 · 내용 정리 · 사용자 고침 · 보기 = 내장 엑셀 · 내보내기 = xlsx · PDF.
- 정함(브레인 · 사용자 바꿀 수 있음): 시트 여섯(표지 · 요약 = 사용자 몫 · 입력 조건 · 측점표 · 대표 단면 · 3D 요약 = 프로그램 몫) · [보고서 갱신] = 프로그램 몫 시트 · 그림만 다시(사용자 몫은 수식으로 따라감 · 옛 판 _지난/) · PDF = 인쇄 HTML → B09 Edge 엔진 공용화 · 그림 = 서버 SVG → PNG(Playwright · PyMuPDF 안 씀 — AGPL) · 양식 = master_template/report/stab_report.json · 대표 단면 = 자동(쌓기 10 m · 깎기 15 m · 최소 안전율 하위 5 · E03 에서 고침) · 칸 잠금 없음 · 내장 엑셀 계약 고침 = 534 창만 · 근거 _분석_345-F(그 파일의 E04 = E05).
- [x] 534-1 내장 엑셀 계약 더함(인쇄 설정 · 쪽 나눔 · 그림 칸) + 그림 겹판 · 쪽 나눔 점선 — spreadsheet 시험 통과 + 크기 예산.
- 검증완료 — 엔진 시험 9 · 크기 52.0 KB/128 · 행 넣기 때 쪽나눔 4→5 · 그림 B8:F12→B9:F13 · 겹판 칸 자리 0 px 차(스크롤 포함) · M02 면적산출 그대로
- [x] 534-2 PDF 엔진 공용화(B09 는 부르기만) + 인쇄 HTML(TS · Node) + Workbook → xlsx — B09 인쇄 시험 그대로 + 되읽기 시험(병합 · 쪽 나눔 · 그림 · 머리 줄 반복).
- 검증완료 — 인쇄 HTML 덩이 3 · thead 1줄씩 · 병합 잘림 2+2 · xlsx 되읽기(병합 2 · row_breaks [6,12] · 그림 1 · $2:$2 · 식) · PDF 3쪽 = 쪽 나눔 2 + 1(가로) · PDF 엔진 = sub8 535-1 공용 모듈
- [x] 534-3 보고서 양식 · 빌더 · 길 · E05 화면([저장] · [초기화] · [보고서 갱신] · [엑셀] · [PDF]) — 시험(측점 수 = 줄 수 · 사용자 몫 불변) + ORCA(PDF 쪽 수).
- 검증완료 — 양식(sub7 · 시트 여섯 · 자리표) + 빌더 · 길 · 화면 시험 7(측점 30 = 줄 30 · N.G 4 · 그림 4 · 갱신 뒤 표지 · 개요 그대로 · 덮임 [측점표] · 판 409 · xlsx 되읽기 · PDF 쪽 = 3 + 측점표 n + 단면 3 + 1) · ORCA 일반 계정 · 검증_sub6 복사 E(측점 57 · 2D = 같은 엔진 · 정한 저장본 꼴): 시트 6 · 단면 그림 3 · 표지 C10 · C12 고침 → [보고서 갱신] 뒤 남음 · 측점표 고침 = 덮임 알림 · 해석 바뀜 띠 · [초기화] · PDF 10쪽(3 + 측점표 3 + 단면 3 + 3D 1) · xlsx 시트 6 · 측점 줄 57 · N.G 28 · E 지움
- [x] 534-4 E 전 흐름 확인(요구 345 · 347 · 351 · sub1) — 일반 계정 회사 3 · [+] → E01 → E05 · 원본 바꿔도 불변 · 다른 회사 403 · 시스템 관리자 보기 · 숫자 맞춤 · 고침 = E05 가 E03 정본 저장본(stab2d_summary · stab2d_station · 대표 켬/끔)을 바로 읽음 · 3D요약 같은 조건 비교 · E04 판정 · 입력조건 적용 구간.
- 검증완료 — 검증_sub1 회사 3 사본 → E 생성 3.0 s(화면 ≤ 5.8 s) · 16 MB · 측점 63 = 원본 63 − missing 0 · E03 182.6 s · 건기 N.G 13 · 우기 30(화면 같음) · 임계면 SVG 6점 = API · E05 측점 줄 63 · N.G 30 · 대표 17 = E03 켬 · 입력조건 = E02 저장값(c 12 · 점토층 · 0~100 m · 노면 12) · 3D/2D 1.7314 = 0.838/0.484 · 광역요약 면적 = E07 · xlsx 시트 7 · PDF 25쪽 · 원본 B06 바꿈 = E 지문 그대로 · 회사 1 E 403 · 관리자 200 · 시험 40 · typecheck · 만든 E 둘 · 사본 지움 · 남음 = E04 화면 2D 최소 · 비 비어 보임(fs_min 칸 없음 · sub7)
- 공통(532~534): 해석 엔진 직접 만듦 · 외부는 BSD · MIT · Apache 만(요구 350 · 요구서 345 9장) · GPL · AGPL · LGPL · 비상업 코드 금지.
## 535. 라이센스 — PDF 엔진 공용화 · B09 도면 PDF 의 PyMuPDF(AGPL) 교체 (요구 350 · 351 · sub8 · Opus high)
- 사용자 확정(요구 351): 상용 가능한 무료 PDF 라이브러리 중 품질 좋은 것은 브레인이 정함 · B 는 어쩔 수 없을 때만 고침(라이센스라 고침).
- 정함(브레인): 만들기 = Playwright(Chromium PDF · Apache-2.0 · 벡터 · 글꼴 묻음 · B09 인쇄와 같은 엔진) · 합치기 · 쪽 다루기 = pypdf(BSD · 설치됨) · 큰 도면에서 느리면(측정) ReportLab(BSD) · PyMuPDF 는 제품 코드에서 없앰(지식DB 변환 스크립트는 개발 도구라 둠).
- [x] 535-1 PDF 엔진 공용화(B09 인쇄 함수 → common_util/common_util_print_pdf.py · B09 는 부르기만) — B09 인쇄 시험 그대로.
- 검증완료 — test_302_1_print_frame 16 통과 · 공용 render_html_to_pdf · render_htmls_to_pdfs · merge_pdfs · sheet_title · print_setup
- [x] 535-2 B09 도면 PDF PyMuPDF → SVG + Playwright · pypdf — 시험(쪽 수 · 글자 · 선 수) + 전후 그림 대조 · 시간 · 제품 폴더 pymupdf 0.
- 검증완료 — 검증_sub8 9장(평면도 지형 = 옛 판도 못 읽음 · 뺌) 쪽 9/9 · 글자 9장 모두 같음 · 선 조각 ±15 % · 쪽 그림 차 0.9~3 %(글 0.76 pt 밀림 · 토적도 세운 글 116 개 = 화면 방향으로 바로잡힘 · 옛 판은 뒤집힘) · 크기 391 → 413 KB · 렌더 1.1 → 2.4 s(브라우저 띄움 +1.5 s · 장당 0.145 s 같음) · 큰 장(선 3만 · 글 1만) 22.5 → 13.8 s · test_302_1 16 · 302_2 8 통과 · ORCA 인쇄 미리보기 9쪽 · 제품 폴더 pymupdf 0