knowledge(계획): PLAN 640~644 · 720~725 이관 — 라이다 지표면 · 내역 16 · 17 · 브레인 화면 검증 흠 모두 끝

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-02 00:51:03 +09:00
co-authored by Claude Opus 5.5
parent bf95ee6341
commit e3053134f4
@@ -0,0 +1,124 @@
# 이관 — PLAN 640~644 (라이다 지표면 · 요구 558 · 559 · 561-4) · 720~725 (내역 16 · 17 · 브레인 화면 검증 흠) · 2026-11-02
## 640 라이다 기본 고름 · implicit 점 수 비율 · 틈 닫기 3 m (요구 558 · 요구서_558 · sub3)
- 사용자 확정: 내장 개선 · 분류 있으면 classification + implicit · 없으면 csf + implicit · 점 수 = 지면점 비율(용화 20 만 수준) · 틈 닫기 3 m
- 정함(브레인): 요구서_558 3장 1~4 · 8~10 · 비율 0.175 · 하한 5 만 · 상한 200 만 · 격자 칸 뽑기 · 평활 끔 · 기존 프로젝트 그대로
- [x] 640-1 기본 고름 — 확정 표현 implicit · 평활 False(`config_system_terrain.py:168-172`) · WF1 자동 짓기 · 확정 표현(`B03_FileInput_Service_WF1.py:70` · `:182`) · implicit 은 기본 필터에만(`Pipeline.py:187-192` · `:222-232`) · 「분류 있음」 덮임 조건(10 m 칸 50 % · `Filter_Classification.py:28-40`) · B04 화면 처음 고름(`UI_Page.ts:56-57`) — 확인 = 용화 WF1 자동 확정 = classification + implicit · 분류 지운 사본 = csf + implicit · 시험
- 검증완료 — 검증_sub3 WF1 다시 339 초 → 자동 확정 classification + implicit · 평활 끔(DB stage1 · surface_models 867 CONFIRMED) · 분류 덮임 98.2 % · 분류 지운 사본 자동 고름 = csf · csf 엔 implicit 안 지음 · B04 화면 CLASSIFICATION · IMPLICIT · 스무딩 미적용 · 시험 test_640 9 개 통과 · typecheck 0
- [x] 640-2 점 수 비율 · 격자 칸 뽑기(새 implicit 전용 함수 · `sample()` 그대로) · 설정 키 `SURFACE_IMPLICIT_POINT_RATIO` · `_MIN_POINTS` · `_MAX_POINTS` · 지문 흠(`Pipeline.py:151-172` 옛 파일 재사용) — 확인 = 용화 분류 약 20 만 · CSF 약 13 만 · RMS(검사점) 0.105 m 안팎 · 설정 바꾼 뒤 다시 지으면 새 파일
- 검증완료 — 점 수 분류 199,348(지면 1,140,716 × 0.175) · csf 사본 134,315 · 검사점(업체 지면 20 % · 10 만 점) RMS 격자 0.1045 m / 파일 차례 0.129 m · 1 m 넘음 0.031 % / 0.17 % · implicit 짓기 87 초 · 최대 메모리 3.0 GB · 지문 바뀐 뒤 implicit 다시 지음(시험) · 남의 프로젝트(검증_sub1) manifest · DB 그대로
- [x] 640-3 외곽 틈 닫기 3 m(설정 키) — 확인 = 용화 덮임(분류 기준) 23.2 → 34.4 만 m² 안팎 · 외곽 안 빈칸 0 · 등고선 · 미리보기 범위
- 검증완료 — 외곽 분류 23.2 → 34.4 만 m² · csf 32.1 → 36.3 만 m² · 모든 표현 같은 외곽(dtm · implicit 344,354 m²) · 지문 d5004159 → 1271fbf7 · 기존 확정 프로젝트는 다시 지을 때만 바뀜 · 관련 시험(133 · 342 · 343 · 344 · 476 · 624 · 635 · 637 · edge_trim) 통과
- 이음(640 → 641 · 642): implicit 중심점 = `TerrainContext.grid_sample(count)`(ModelContext) · 점 수 = `implicit_point_count(지면점, config)`(ModelBuild) · implicit npz 꼴 그대로(centers_xy · center_z · smoothing) · 설정 키 `implicit_point_ratio` · `implicit_min_points` · `implicit_max_points` · 자동 기본 고름 = `resolve_auto_source_filters(data, processed_dir)`(Ground · 분류 없으면 `SURFACE_AUTO_FALLBACK_FILTER` — 642 가 ptd 로 바꿈)
## 641 확정 지표면 화면 일치 (요구 558-3 · sub4 · 640 뒤)
- 사용자 확정: 확정 지표면 = 기준 서피스 · 화면 일치 · B07 유역 · D03 손대지 않음
- 정함(브레인): 요구서_558 3장 5 · 6 · implicit 를 1 m 격자로 한 번 굳힘 · B07 · D03 은 지금처럼 평활 DTM 을 읽게(읽는 길 한 줄)
- 이음(sub4): 굳힘 = `common_util_surface_sampler.implicit_grid_npz(models_dir, 필터)` → `implicit_{필터}_grid.npz`(x · y · z · valid_mask · resolution · 축 · 유효 = `dtm_{필터}.npz` · 없거나 implicit · dtm 보다 옛것이면 다시 셈) · 짓기 끝 `ModelBuild.build_implicit` 에 부르는 줄 하나(sub3 파일) · 브라우저 격자 = implicit 모델 행 id 로 같은 `/surface/models/{id}/grid`
- [x] 641-1 implicit 격자 굳힘 `implicit_{필터}_grid.npz`(확정 DTM 과 같은 축 · 유효 칸) · B05 브라우저 즉시 계산 · 서버 표본 · Node 측점 · B06 계산이 그 파일 읽음(`B05_Profile_Router_Terrain.py:180-205` · `Engine_Sections_Node.py` · `B06_Section_Server_Calc_Prebuild.py:263-273` · `common_util_surface_sampler.py`) — 확인 = 같은 측점 표고 서버 · 브라우저 · Node 차 0 · B06 「지형 범위 밖」 배지 사라짐 · 시간 · 크기
- 검증완료 — 용화(검증_sub4) classification + implicit 19.9 만 점 · 굳힘 60 s · 2.9 MB · 유효 34.5 만 m² · 6,434 점 서버 = Node 차 1e-6 m · 브라우저 300 점 차 9e-7 m · B06 배지 0/59 · 격자 칸 사이 RBF 대비 p99 0.12 m · 시험 test_641_1 외 73 통과
- [x] 641-2 B07 유역 · D03 = 확정이 implicit 면 `dtm_{필터}_smooth` 읽음(읽는 자리만 · `B07_DesignDetail_Router_Support_Basin.py:481-484` · `D03_PlanAnalysis_TerrainSource.py:106-109`) — 확인 = B07 유역 · D03 급경사 값 전후 같음
- 검증완료 — implicit 확정 = dtm_{필터}_smooth 읽음 · dtm 확정은 같은 파일(B07 음영 · D03 지형 시험)
## 642 내장 CSF 개선 (요구 558-2 · 분류 없는 LAS · sub5)
- 사용자 확정: 외부 도구 안 씀 · 내장 개선
- 사용자 확정(요구 559): 처음부터 점진 TIN(PTD) 내장
- 정함(브레인): 새 필터 키 `ptd`(화면 이름 「점진 TIN」) · 분류 없을 때 기본 = ptd + implicit · 옛 csf 는 목록에 남김 · numpy · scipy 만
- 이음(sub5 → sub3 · sub4): 필터 키 `ptd`(화면 「점진 TIN」 · `Engine_Ground._FILTERS` · `SURFACE_MODEL_SOURCE_FILTERS` · 표본기 `SurfaceFilter`) · 분류 없을 때 자동 = `SURFACE_AUTO_FALLBACK_FILTER=ptd`(sub5) · 확정 기본 `SURFACE_CONFIRM_DEFAULT_FILTER` · B04 `DEFAULT_FILTER` 를 ptd 로 = sub3 640-1 몫
- [x] 642-1 측정 틀 — 용화 분류 숨김 사본(tmp)으로 지면 필터 돌려 업체 분류 대비 맞음 · 놓침 · 잘못 넣음 % + implicit 뒤 557 잣대(검사점 · 등고선 꺾임 · 단면) · 지금 CSF 기준값 — 확인 = 기준 표
- 검증완료 — 용화 분류 숨김 사본 · 업체 분류 대비 CSF 맞음 55.1 · 놓침 44.9 · 잘못 넣음 12.2 % · implicit(× 0.175 · 격자 칸) 검사점 RMS 0.587 m · 꺾임 120 /km · 급경사 놓침 60.9 % (업체 분류 = RMS 0.101 · 꺾임 33.7)
- [x] 642-2 점진 TIN 내장 필터 새 파일(칸 최저 씨앗 · 삼각망 · 각도 · 거리 문턱으로 넓혀 감 · 급경사 매개변수 · DJI Terra 장면 셋 꼴 참고) · 필터 목록 한 줄 · 분류 없을 때 기본 — 확인 = 642-1 표(맞음 · 놓침 · 잘못 넣음 · 급경사) 지금 CSF 대비 · 4,900 만 점 시간 · 메모리
- 검증완료 — PTD 맞음 88.6 · 놓침 11.4 · 잘못 넣음 12.0 % · 급경사 놓침 19.3 % · 꺾임 25.8 /km · 기울기 p90 95 % · 빨강 21.7 % · 검사점 RMS 1.008 m(급한 볼록 비탈 처짐 남음) · 4,900 만 점 180 초 · +1.2 GB · 시험 20 통과 · typecheck 0
- 검증완료(덧 · RMS) — 처짐 칸 씨앗 묶음 걷음 · 면 위 0.12 m → 맞음 83.4 · 놓침 16.6 · 잘못 넣음 11.8 % · 급경사 놓침 23.6 % · 검사점 RMS 0.496 m(CSF 0.587) · 꺾임 116 /km(CSF 120 · 업체 34) · 4,900 만 점 205 초 · +1.2 GB · 기본값 ptd(확정 · B04 처음 값) · 시험 · typecheck 0 · ORCA B04 목록 「점진 TIN」 · 분류 LAS 처음 값 classification
## 643 라이다 지표면 확인 (sub4 · 641 · 642 뒤)
- [x] 643-1 자기 검증 프로젝트(용화) WF1 다시 → 확정 = classification + implicit · B04 등고선 · 3D · B05 종단 · B06 횡단 같은 지형 · 기존 확정 프로젝트 값 그대로 — 확인 = ORCA 사진 · 측점 표고 대조 · 데스크탑 lidar_lab 외부 결과와 차 지도(557 잣대)
- 검증완료 — 검증_sub4 WF1 다시 44 s = classification + implicit(19.9 만 점 · 3 m) 자동 확정 · 서버 = Node 6,434 점 차 1e-6 m · 브라우저 300 점 9e-7 m · B06 배지 0/59 · 등고선 − 표본 면 최대 3 mm · 3D 미리보기(1.07 m RBF) − 표본 p99 0.13 m · 기존 dtm 확정 = 코드 길 같음(시험) · lidar_lab 외부 = 표 값만 있음(I1 20 만 − B1 RMS 0.18 m · 557 결과) · 사진 tmp/m641
## 644 기존 라이다 프로젝트 — 영구저장소 · 새 기본 지표면 미리 지음 (요구 561-4 · sub4 · 640 · 641 · 642 · 643 뒤)
- 사용자 확정: 지금 있는 프로젝트들이 쓰던 라이다 자료를 프로젝트 영구저장소에 복제해 넣고 사용자가 프로젝트를 열면 바로 확인
- 정함(브레인): 검증_* 프로젝트 = 새 기본(classification · ptd + implicit) 지어 다시 확정 · 테스터(엄상준_검증 · 박동철_검증) · 가이드_ = 지어만 두고 확정 그대로(B04 에서 바로 고를 수 있음) · 창들 일 끝난 뒤 · 원본 LAS 지우지 않음
- [x] 644-1 라이다 쓰는 프로젝트 목록(B03 LAS · B05 나중 올리기 · D03 LAS) · 프로젝트 영구저장소에 LAS 가 있는지 · 없으면 원본 자리에서 복제(같은 파일은 지문으로 확인) — 확인 = 표(프로젝트 · LAS · 크기 · 복제 여부)
- 검증완료 — 라이다 프로젝트 14 개(모두 용화.las · 분류 있음) · LAS 모두 자기 storage 에 있음 → 복제 0 · D03 · B05 나중 올리기 LAS 없음
- [x] 644-2 프로젝트마다 새 기본 지표면 미리 지어 영구저장소에 남김(WF1 체인 꼴 · implicit 격자 굳힘까지) · 검증_* 는 다시 확정 · 그 밖 확정 그대로 — 확인 = 프로젝트마다 B04 열면 바로 보임(지을 기다림 0) · 등고선 · 3D · 시간 · 크기 · 테스터 프로젝트 확정 · 설계 값 그대로
- 검증완료 — 검증_sub1~8 다시 짓기 · 다시 확정(WF1 + 재확정 체인 · 한 곳 2~9 분) · 평면 · 측점 · 구조물 · pipe_points 같음 · 계획고 = 지반고로 깎기/쌓기 바뀜 · 테스터 · 가이드 = implicit 행만(890~892 · dtm · 확정 · 노선 · las_selection 그대로) · 모두 implicit 19.9 만 점 · 격자 · 등고선 미리 지음(4.2 MB) · 데스크탑 둘 건너뜀 · 랩탑메인 = 사고분 그대로(tmp/644_랩탑메인_이월.md) · 표 tmp/644_프로젝트표.md
- [x] 644-3 (sub4) A 꼴 프로젝트(가이드_임도설계 · 박동철_검증 · 엄상준_검증) implicit 미리보기 glb · 모델 행 외곽 메타가 tmp 사본 외곽(34.4 만 m²) 그대로 → 지금 dtm 외곽(23.2 만)으로 맞춤(확정 · 노선 · dtm 그대로) — 확인 = glb 외곽 = 등고선 · 격자 외곽 · 3D 가장자리 등고선 없는 면 0(근거 tmp/brain_verify/_결과_라이다.md 8 번)
- 검증완료 — 셋 implicit 미리보기 glb 를 굳힌 격자 valid_mask 로 다시 구움 · glb 면적 341,591 → 227,491 m²(dtm glb 227,377 · ×1.0005) · 모델 행 footprint 344,354 → 232,037(dtm 행 값) · 등고선에서 15 m 넘게 먼 glb 정점 49,679 → 0 · 확정 · 노선 · stage · dtm · processed 파일 지문 전후 같음 · ORCA 5179 가이드 B04 IMPLICIT 가장자리 등고선 없는 면 0 · 백업 tmp/m6443/bk · 도구 tmp/m6443/fix.py
## 720 M02 폴더 · 층 · 단가산출 이름 (내역 16 · 요구서_내역16 · sub6)
- 사용자 확정: 내역 16 원문(최상위 폴더 · 층 단추 → 상세 목록 · 구조물 조합 새로고침 막음 · 단가산출 이름 바꾸기)
- 정함(브레인): 요구서_내역16 1장 1~4 · 구조물 조합 층 = 제자리 바꿈 · 도면 양식 · 실무문서 칸 = 시스템 관리자면 늘 보임
- [x] 720-1 단가산출 · 일위대가 층 단추 → 상세 그 층 목록표 · 저장 안 한 고침 물음(`UI_Page.ts:247 · 259`) — 확인 = 층 셋 누름마다 목록 · 사진
- 검증완료 — 층 셋 누름마다 상세 목록표(단가산출 · 일위대가 · 일반 · 회사 관리자 · 시스템 관리자) · 같은 페이지 · 시험 통과
- [x] 720-2 최상위 폴더 만들기 — 우클릭(폴더 · 문서 줄) + 단가산출 · 일위대가 층 줄 「+」 · 구조물 조합과 같은 함수(`UI_Side_Library.ts` · `TreePanel*`) — 확인 = 세 칸 모두 · 나무 가득 찬 상태
- 검증완료 — 「+」 셋 · 폴더 · 문서 줄 [최상위 폴더 만들기] → 맨 위 폴더(일위대가 · 구조물 조합 실측 · 만든 것 지움) · TreePanel 700 → 688
- [x] 720-3 단가산출 이름 바꾸기 — 나무 문서 줄 [이름 바꾸기] · 저장 뒤 머리 제목 새 이름 — 확인 = 나무 · 상세 둘 다 · 서버 저장
- 검증완료 — 나무 [이름 바꾸기] → 나무 · 목록 제목 · 머리 「SK-000001 검증720문서2」 · 상세 저장 → 「…3」 · 서버 왕복 시험 · 지움
- [x] 720-4 구조물 조합 층 제자리 바꿈(`UI_Page.ts:134-141` · `TreePanel.ts` 700 줄 먼저 나눔) · 도면 · 실무문서 칸 — 확인 = 층 바꿔도 칸 접힘 · 단가산출 층 그대로 · 깜빡임 0 · 권한 셋
- 검증완료 — 층 셋 바꿈 페이지 그대로(표지 유지 · 접힘 바뀜 0 · 왼쪽 칸 안 사라짐) · 단가산출 층 그대로 · 권한(일반 읽기 · 회사 관리자 회사 쓰기 · 시스템 관리자 도면 · 실무문서 늘) · 밝음 · 어두움 · 1080 · 768 · M02 시험 112 통과 · typecheck 0 + 도면 양식 누구나 보임(일반 · 회사 관리자 칸 · 목록 4건 · 단추 0 · 시스템 관리자 단추 셋 · 실무문서)
- 이음(720 · sub6): `UI_Main.ts` 만 조금 — 저장 뒤 머리 제목 = 문서 이름 · `createMain` 권한 = 함수(층 바뀜) · 나머지 파일은 sub6 몫만
## 721 M02 단가산출 단추 · 새 고르기 창 (내역 16 · sub7)
- 사용자 확정: [기본 로직 선택] · [항목 추가] 이름 · 자리 · M01 요소 찾아 넣기 · 검색 대상 = M01 전체 · M02 단가산출 · 일위대가 · 거름 → 구분 정보
- 정함(브레인): 요구서_내역16 2장 1 · 2 · 8 · M02 세 곳만 새 창 · B09 · 불러오기는 옛 창
- [x] 721-1 [M01 로직 고름] → 「기본 로직 선택」 · [줄 더하기] 왼쪽 · [줄 더하기] → 「항목 추가」(`M02_MasterTemplete_Sangeun_Detail.ts`) — 확인 = 사진
- 검증완료 — 둘째 줄 「단가산출 상세 · 인력·재료·경비 · 시험 계산 · 텍스트 수식 | 기본 로직 선택 | 항목 추가」(ORCA · 밝음 · 어두움 · 1080 · 768)
- [x] 721-2 새 고르기 창(새 파일 · 탭 [M01 전체(로직 · 인력 · 재료) | M02 단가산출 | 일위대가] · 찾기 칸 하나 · 표 하나 · 지금 거름 값 = 구분 열 · 인력 · 재료 고름 = 고정 줄 LB · MT 수량 1) · M02 단가산출 · 일위대가 세 곳이 부름 · 낡은 시험 `test_717_4_sangeun_pick.py:41-43` — 확인 = 「석공」 · 「합판」 · 단가산출 · 일위대가 찾아 넣고 금액 · B09 · 불러오기 옛 창 그대로
- 검증완료 — 개인 층 검증 문서에 석공 268,908 · 합판 11,354 · 로직 GC001109 6,451 · 단가산출 0 · 일위대가 SC-000001 272,935 → 계 559,649(줄마다 따로 셈 합과 같음) · B09 둘 · 불러오기 · 프로젝트 층 = 옛 창 · 일반 · 회사관리자 열림 · 시험 21 통과 · typecheck 0 · 검증 문서 지움
- 이음(723 sub1): 일위대가 [로직 추가] library 에 `fixed: (fx: LaborFixed, name: string) => void` 한 칸 — 받은 fx 를 `{ 로직: "", 고정: fx, 별칭: null, 메모: null, 입력값: {}, 수량 }` 로 담은로직에 push → changed · fx = `Find_Pick.fixedOf`(인력 = 이음 노임 LB · 노무비 · 단위 인 / 재료 = 이음 자재 MT · 재료비) · 그 전엔 인력 · 재료 줄 회색 막힘(「일위대가 표 개편 뒤」)
## 722 M01 단가산출 상세 개편 · 공용 부품 (내역 16 · sub2 · 721-1 뒤 Sangeun_Detail)
- 사용자 확정: 단가산출 상세 = 기본 · 인력 · 재료 · 경비 하위 박스 · 「계산식」 열(텍스트 수식처럼) · 박스 안 옵션 · 하위 값 모달 고침 · 보기 넷은 결국 하나
- 정함(브레인): 요구서_내역16 2장 6 · 7 · 이번엔 상세만 키움(보기 고르기 그대로) · 모달 고침 = 사용자 답
- [x] 722-1 하위 박스(서버 묶음 인력 · 재료 · 경비(장비) · 하위 · 장비 한 줄 + 펼침) · 「계산식」 열(값 든 식 + 입력 칩) · 박스 제목 아래 옵션 고르기(calc_sheet inputs 꼴) — 새 공용 상세 파일(M01 폴더 · `UI_LogicLab.ts` 627 안 늘림) — 확인 = 표본 셋 금액 = 시험 계산 · 사진
- 검증완료 — 표본 셋 금액 = 시험 계산(돌쌓기 GF000222 59,610.08 · 측구터파기 GF000099 5,288.67 · 굴착기 GF000004 4,757.53 · 비목 소계 셋 같음) · 박스 옵션 보정작업 바꿈 5,346.93 = API · 1080 · 768 · 밝음 · 어두움 · 시험 24 + 25 통과 · typecheck 0 · 커밋 190789cdf
- [x] 722-2 하위 값 그 자리 모달 고침(마스터 화면 이동 대신 · M01 = 시험 값만 · 노임 · 요소 안 바뀜 · 내역 17-2) · 같은 모달을 M02 단가산출 · 일위대가가 쓰면 고친 값 = M02 변경 항목(덮개) 보관 — 확인 = M01 고침 → 다시 셈 · 정본 지문 그대로 · M02 고침 → 덮개 저장
- 검증완료 — 모달 고침 보통인부 수량 2 · 단가 100,000 → 201,331.11 = API · 장비 노무비 50,000 → 201,556.65 = API · 되돌림 5,288.67 · 정본 지문 cf21bda2 전후 같음 · 캐시(drafts) 빈 채 · 고침 고리 HoEdit(M02 덮개 = 724)
- 이음(722 → 724 · 723-3): 공용 상세 `M01_MasterData_UI_LogicLab_Ho.ts` `buildHo(HoContext)` · 고침 고리 `HoEdit{covers, set(idx, LineCover | null), scope}` · `LineCover` = M02 덮개 칸(qty · labor · material · expense) · 열쇠 = 호표 → 덧줄 차례(cid 차례) · 고침 칸 = `_LogicLab_Cover.ts` coverForm
## 723 M02 일위대가표만 · 수량 · 줄 모달 (내역 16 · sub1)
- 사용자 확정: 일위대가표만 · 옵션 = 규격 열 · 줄 누름 = 단가산출 로직 · 인력 · 자재 모달(M01 보기 넷과 같게) · 수량산출 수기 정보 필요 없음(휘발 확인만)
- 사용자 확정(내역 17): 일위대가 줄 수량은 구조물 조합 알약 · 프로젝트 계산값과 연결(M02 에 저장 안 함 · 만들 때 휘발 확인) · M02 에서 고친 값 = M02 변경 항목(M01 안 바뀜) · 필요하면 M02 단가산출 자동 생성
- 정함(브레인): 요구서_내역16 2장 3 · 4 · 5 · 줄 모달 = 717-2b 상세 줄 모드 · 줄 모달 고침 = 그 줄 덮개 + 「단가산출로도 저장」 고름(자동 생성 · 기본 꺼짐)
- [x] 723-1 (조사 먼저 · 브레인 보고 뒤 고침 · 브레인 답 = A 저장 안 함 · B 불러오기 수량 안 들임 · D 기존 수량 읽을 때 무시 · E null = 수량 없음 · C1 구조물 조합 안 줄 알약) 일위대가 줄 기준단위 당 수량 = M02 일위대가에 저장 안 함 · 구조물 조합에서 엑셀 알약으로 · 프로젝트에서 계산값으로 연결 · M02 일위대가표 「수량」 칸 = 만들 때 확인용 휘발 임시 입력(금액 미리 보기) · 불러오기도 수량 안 들임(내역 16 · 17-1) — 조사 = 지금 구조물 조합 · B09 · 사본이 일위대가 줄 수량을 어디서 읽나 · 알약이 일위대가 줄 수량까지 잇나 · 기존 저장 수량(불러온 6 등) 처리 · 셈 짝(Labor_Doc ↔ Labor_Calc.ts) — 확인 = 조사 보고 · 고친 뒤 구조물 조합 · 공사 금액 전후 대조
- 검증완료 — M02 · B08 시험 134 통과 · 구조물 조합 · 사본 금액(반영합) 19/19 전후 같음 · 불러오기 엑셀 대조(705-3 · 705-2 다시 잇기) 그대로 · B09 시험 5 = sub8 723-4
- 이음(sub1 → sub8 723-4): 일위대가(SC) 문서 안 줄 · 자재 `수량` = 늘 `null`(저장 때 받은 손 버림 · 옛 손은 읽을 때 무시) · null = 「수량 없음」(1 아님 · 금액 빠짐 · 경고) · 안 줄 수량은 쓰는 쪽 given 에서 = 알약 키 「참조|층|주인|키#차례」(차례 = 담은로직 0 부터 · 자재 = 「참조|층|주인|키#자재|코드」) · Expand(ref, given) 가 받음 · B09 굳힌 옛 사본은 손 그대로
- [x] 723-2 일위대가표만 · 빠지는 동작 옮김(우클릭 · 머리 단추 · 줄 모달 안) · 새 파일(`Labor_Detail.ts` 679 · 손대기 전 나눔) — 확인 = 순서 · 삭제 · 별칭 · 자재 바꾸기 · 빈 값 경고 그대로 · 사진
- 검증완료 — typecheck 0 · 시험 51 통과 · 일반 개인 층 임시 수량 3 → 16,309.7(= 5,436.6 × 3) · 저장본 수량 null · 아래로 · 별칭 · 삭제 · 자재 모달 · 읽기만 단추 0 · 밝음 · 어두움 · 1080 · 768
- [x] 723-3 줄 누름 모달 = 717-2b 단가산출 상세 줄 모드(보기 넷 · 옵션 바꿈 = 그 줄에 남김) · 717-3 두 보기 갈음 — 확인 = 모달 옵션 바꿈 → 규격 칸 · 금액
- 검증완료 — 줄 모달 보기 넷 · 시험 계산 지역 서울 → 규격 칸 「지역 서울」 · 단가 5,436.6 → 5,446.2 · 품 0.023 → 0.03 덮개 저장 · 단가산출로도 저장 새 SK(만든 것 지움)
- [x] 723-4 (sub8 · 723-1 A · E 꼴 push 뒤) B09 공사 사본의 일위대가 안 줄 수량 = 프로젝트 계산값 연결(구조물 조합에서 온 값 · 내역에서 바로 쓴 일위대가는 이 공사 안 수량 입력) · 「수량 없음」 줄 경고 · 원가계산서 빈 줄 수(701-3 꼴) — 확인 = 수량 없는 SC 를 쓴 공사 금액 · 경고 · 기존 공사 금액 전후 같음 · 거울 시험
- 이음(sub8): B09 사본 SC 안 줄 수량 = 굳힌 손 → 구조물 사본 `면적.json` 알약 값(723-1 키 「참조 id#차례」 · 「참조 id#자재|코드」) → 없으면 null(빈 줄 · 비고 「수량 없음 — 이 공사에서 입력」 · 702 덮개 qty 로 입력) · 알약 값 쓴 SC 블록 덮개 = `C:참조|S:사본` · 그 밖 = `C:참조` · 707-7 공사 불러오기 엑셀 수량 = 굳힌 손
- 검증완료 — 시험 B09 묶음 165 통과(새 test_723_4 7 · 낡은 5 고침) · 남은 빨강 1 = test_705_2 M02 다시 잇기(723-1 · sub1 몫) · typecheck 0 · 검증_랩탑메인 · 검증_sub8 B09 셈 답 전후 같음 · ORCA 5183 검증_sub8 서고 일위대가 연결 = 비고 경고 3 · 빈 줄 3 → 품 0.5 입력 = 33,742.5 · 경고 사라짐 · 원가계산서 띠 「빈 줄 23」 · 만든 사본 · 캐시 지움
## 724 공용 상세 갈아 끼움 (내역 16 · sub2 · 722 · 723 뒤)
- [x] 724-1 M02 단가산출 상세 · 일위대가 줄 모달이 722 공용 상세 씀 · `skCoverTable` · `coverTable` · 이름 같은 모델 파일 둘 걷음 · 낡은 시험 — 확인 = M02 단가산출 · 일위대가 모달 금액 전후 같음 · 717-2b · 717-3 시험 통과
- 이음(724-1): `HoEdit` 덧칸 `more?(idx, close)`(M02 줄 빼기 · 별도계상) · `scope m02` = 덧줄 율 고침 · 꼬리표 「변경 항목」 · M02 = `logic/M02_Sangeun_Cover_Model.hoView`(SK 셈 답 → Ho 줄 · 정체 차례 · 고침 열쇠 차례 → cid) · 모델 파일 하나(뿌리 `M02_Sangeun_Cover_Model.ts` 지움 · `Labor_Api` import 한 줄) · 717-3 `openRowSangeun` = 줄 모드 상세(`mountRowSk`) 얇은 모달
- 검증완료 — SK 상세 표본 셋 계 전후 같음(측구터파기 덮개 87,365.11 · 돌쌓기 뺀줄+더한줄 52,727.36 · 굴착기 4,757.53) · 일위대가 줄 모달 셋 = API(5,288.67 · 59,610.08 · 4,757.53) · SK 줄 모달 품 0.7 → 121,778.71 = 서버 저장 덮개 · 빼기 · 되살림 · 되돌림 · 일위대가 줄 모달 옵션 지역 서울 → 규격 칸 · 품 0.03 → 6,501.85 · 저장 = 줄 패치 + 입력값 · 구조물 쪽 모달 [적용] = 줄 패치 · M01 셋 전후 같음 · 마스터 층 읽기만 고침 칸 0 · 밝음 · 어두움 · 768 · 시험 21 통과 · typecheck 0 · 만든 것 지움
## 725 브레인 화면 검증 흠 (요구 561-2 · 720~724 뒤 · 근거 tmp/brain_verify/_결과_720-722.md)
- 정함(브레인): 더한줄 로직 입력 = 화면 공통 옵션 → 로직 기본값 차례로 채움 · 그래도 빈 입력 · 수량 없는 일위대가 줄 = 그 줄만 「—」 · 까닭 글 · 나머지 셈 계속 · 그 줄 빼기 늘 됨 · M01 셈(`Store_Flow.py` strict)은 안 고침
- [x] 725-1 (sub7) [항목 추가]로 입력 있는 로직(측구터파기 토사 GF000099 · 「지역」) 넣으면 SK 셈 통째 멈춤 · 줄 빼기 못 함(`Sangeun_Pick.ts:85` 입력값 {}) — 확인 = GF000099 넣고 계 숫자 = API · 줄 빼기 · 공통 옵션 바꿈 따라감
- 검증완료 — 시험 test_725_1 5 · 715 · 717 · 719 · 721 · 723 통과 · typecheck 0 · ORCA 8009 개인 층 GF000099 더한줄 5,288.67(전국평균) → 지역 서울 5,297.37 = M01 셈 · 계 10,595 = API 10,594.75
- [x] 725-2 (sub7) [항목 추가]로 일위대가 넣으면 「수량 없음」으로 SK 셈 멈춤(723-1 × 721 · `Labor_Expand.py:156` · `Sangeun_Calc.py` `_bundles`) — 확인 = 횡단개거 넣고 나머지 줄 계 = API · 그 줄 「수량 없음」 · 빼기
- 검증완료 — 횡단개거 줄만 금액 — · 띠 「못 셈 줄 — … 횡단개거」 · 계 10,595 그대로 · 줄 빼기 → 더한줄 1 · 띠 없음 · 밝음 · 어두움 한 장씩 · sub7임시SK 지움
- [x] 725-3 (sub2) 바탕 없는 SK 이름 · 단위만 고쳐도 거짓 「M01 개정」(`Sangeun_Doc.py:384` empty_row 가 이름 · 단위를 바탕 줄에) — 확인 = 새 SK 단위 고침 → 배지 없음 · 진짜 개정은 그대로 뜸
- 검증완료 — 새 SK 단위 식→m = 배지 · 띠 없음 · 바탕 GF000099 + 바탕판 틀림 = 「M01 개정 — 확인」 뜸 · 시험 717_2b 통과 · typecheck 0
- [x] 725-4 (sub2) 「단가산출로도 저장」 새 SK 가 나무에 안 보임(새로고침 뒤만 · `Labor_RowModal.ts:176` 뒤) · M02 더한 인력 · 재료 줄 모달 「단가 없음」 거짓(`LogicLab_Modal.ts:504` searchElements 길 안 탐) — 확인 = 바로 나무에 · 석공 줄 모달 268,908
- 검증완료 — 「단가산출로도 저장」 [적용] 뒤 단가산출 나무에 새 SK 바로 · 더한 석공 줄 모달 268,908 · 한 줄 풀이 단가 268,908 × 1 · 합판 줄 물가 넷 정상 · M01 데이터 파일 안 고침 · typecheck 0
- [x] 725-6 (sub7) 다시 검증 남은 둘 — 바탕 없는 단가산출에 공통 옵션 칸 없음(더한줄 로직 입력 「지역」을 못 바꿈 → 더한줄 로직 입력 모음을 공통 옵션 칸으로) · 단가산출 상세 보기 못 셈 줄 금액 칸 빈칸(→ 「—」 + 까닭 풍선 · 인력/재료/경비 보기와 같게) — 확인 = 바탕 없이 GF000099 넣고 지역 서울 → 5,297.37 · 횡단개거 줄 「—」
- 검증완료 — 시험 test_725_1 7(바탕 없음 지역 서울 5,297.37 · 화면 짜임) · 715 · 717 · 719 · 721 · 723 통과 42 · typecheck 0 · ORCA 8009 바탕 없는 새 SK 에 GF000099 → 공통 옵션 칸(지역 · 보정작업) 서울 → 계 5,297 = M01 셈 · 횡단개거 줄 상세 「—」 + 풍선 「수량 없음 — 쓰는 자리에서 연결」 · M01 상세 줄 금액 칸 전후 같음 · 밝음 · 어두움 · sub7임시 지움
- [x] 725-5 (sub6) M02 낡은 시험 8 파일(test_m02_item_list dateText 가짜 모듈 · 20 대 19 · hopyo_screen:344 · layer_screen:230 · practice:56 · structure_def_screen:102 · structure_option_groups:108 · structure_options:112 · df_convert 400 s 넘음) — 낡음이면 새 꼴로 · 진짜 흠이면 고치지 않고 보고 — 확인 = 8 파일 통과 · df_convert 시간
- 검증완료 — 8 파일 통과(7 파일 52건 21초 · df_convert 3건 86초, 옛 12분 → 열 줄에 하나) · 코드 고침 없음 · 진짜 흠 없음 · 05234f1f6