chore(plan): 10-9 요구 검토 — 원문 둘 · 조사 A~G · 분석_정함 · 134~145장 계획 · 115 · 128~133장 기록 이관

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
This commit is contained in:
2026-10-09 14:28:04 +09:00
co-authored by Claude Opus 5.5
parent 47fcf4884b
commit a952a8a1a5
14 changed files with 1228 additions and 0 deletions
@@ -0,0 +1,25 @@
# 상시 계획서 — 115장 기록
115장 근거 = `docs/raw/요구_1008_4/검토_B05_3D_메시변형.md`(검토 · ⬜ 사용자 결정 여덟) · 기록 = `docs/raw/plans/2026-10-08_plan_113-122_*.md`.
## 115. B05 3D 메시 변형 — 검토만
- [x] 115-0 사용자 결정 여덟(10-8 밤 「추천대로」 — 지형 메시 직접 · 구조물 구간 끝 테이퍼 · BOX 본체 밖 원지반 유지 · 날개벽 안쪽 근사 · 브라우저 계산 · 색만 · 측점 사이 지반 = 지형 메시 · 디버그 훅 지움)
- [x] 115-1 1단계 변형 코어 — 새 파일(예 `_Deform.ts`) 역투영 색인 · 정점 규칙 `z' = clamp(지형, 성토선, 절토선)` · 노면부 리본 유지 · 지형은 노면부 끝에서 자르고 경계 z 맞춤 · 사본에만(토글 OFF 원본 복원) · 3D 화면에 새 방식 / 옛 방식 전환 단추(기본 새 방식) (sub4) · 확인 = 합성 격자 시험 · 옛 경로 시험 그대로 · 검증완료 — 합성 격자 시험 6(성토선 98.667 · 절토선 102 · 비탈 끝 밖 원지반 · 보간 · 사본에만 · XY 고정 · 노면부 구멍 0) · 옛 코리도 시험 48 · typecheck · 화면 = 사용자 확인 대기(새/옛 전환)
- [x] 115-2 2단계 구조물 마스크 — 풋프린트 · 아령 외곽 구멍 · 날개 안쪽 성토 금지 고리 · 구조물 구간 = 실루엣 상부 포락선 + 이웃 측점까지 테이퍼 · BOX 본체 밖 원지반(clamp) (sub4) · 확인 = 시험 · 네 세트(84.30 · 149.73 · 200.92 · 275.71) 수치 · 검증완료 — 시험 11(115) + 옛 코리도 · 관련 66 · typecheck · 네 세트 = 내 프로젝트(검증_sub4) 구조물 측점 85.05 관 · 173.09 세월교 · 258.12 관 · 352.14 세월교 — 구간 단면 22 · 구멍 고리 69 · 성토 금지 고리 4 · 측점 ±10 m 정점 올림/내림 655/805 · 528/232 · 2171/211 · 895/662(352.14 성토 금지 42) · 화면 = 사용자 확인 대기(새/옛 전환)
- [x] 115-3 3단계 옛 로직 지움(사용자가 새 / 옛 비교 뒤) — 검토 문서 3절 표 · 버전 올림 · 서버 사전생성 축소 · 디버그 훅 · 시험 넷 정리 → 135-1 로 옮김(사용자 10-9 「제안 3 채택 · 나머지 코드는 old 폴더로 · 삭제는 내가」)
- [x] 115-4 옛 방식 A(08-25 15:41 `6e87dd6cd` 「실루엣 갈아 끼우기」) 별개 단추로 복원 — 비교용 · 그날 그대로(배수관 세트만 · BOX · 세월교 원본 비탈) · 저장 안 함(브라우저 즉석) · 「새 방식」 단추 · 지금 방식 그대로 (sub4) · 확인 = 시험 · 근거 `docs/raw/요구_1008_5/조사_B05_3D_이력.md`
- 검증완료 — 시험 67(새 test_115_4 4 · test_115 · test_b05_corridor_* · cut_merged_loop · patch_skirt · session_keys) · typecheck 0 · 화면 = 사용자 확인 대기
- [x] 115-5 제안 ① 새 방식 개선(조사 `docs/raw/요구_1008_5/조사_B05_3D_새방식_정밀분석.md` 3절) — P0-1 비탈 폭주 막음 · P0-2 코리도 행 자리(노선 길이 기준 · 모든 방식 버그 고침 · BUILD_VERSION 올림) · P1-3 브레이크라인 국소 재삼각분할(비탈 끝 · 노면 끝 · 꺾임 · 색 면 단위) · P1-4 구조물 둘레 드레이프 · P2-5 밴드 좁힘 · 3D 방식 고르기 한 줄(지금 · 옛 A · 새 ① · 제안 ② 자리) (sub4) · 확인 = 시험 + 정밀분석 수치 전후
- 검증완료 — 시험 109(새 test_115_5 9 · test_115 · test_115_4 · test_b05_corridor_* · cut_merged_loop · patch_skirt · session_keys 외) · typecheck 0 · 수치 전후(226 / d22) = 최대 깎임 171 → 8.1 m / 527 → 8.4 m · 10 m 넘게 내려간 정점 1,797 → 0 / 1,957 → 0 · 행 자리 최대 7.23 → 0.3 m(되접힘 18 → 0) · 이음 틈 2.4 → 0.04 % · T자 균열(1 cm 넘음) 298 → 0 / 2 · 구조물 둘레 0.1 m 넘음 57 → 12 % / 11 % · 색 번짐 p90 3.1 → 0 m · 발끝 어긋남 p90 성토 2.0 → 0.15 · 절토 1.1 → 0.05 m · deformTerrain 1.1 s · BUILD_VERSION 93(저장본 · 서버 사전생성 다시 만들어짐) · 제안 ② 자리 = `B05_Profile_UI_Corridor_Modes.ts` `CORRIDOR_MODES` 에 id `proposal2` 한 줄 · 화면 = 사용자 확인 대기
- [x] 115-6 제안 ② 단일 삼각망(TIN) — 측점 단면 점 + 종방향 브레이크라인 + 비탈 끝 폐곡선 경계 + 경계 밖 지형 점 → 제약 들로네 한 번(delaunator + constrainautor) · 구조물 풋프린트 구멍 · 구역 색 · 곡선 안쪽 겹침 청소 · 고르기 ② 자리에 등록 (sub7) · 확인 = 시험 + 정밀분석 수치 · 근거 `docs/raw/요구_1008_5/제안_B05_3D_두가지.md` · `조사_B05_3D_외부.md`
- 검증완료 — 시험 8(새 test_115_6) · typecheck 0 · vite build · 수치(226 / d22 · Node) = 계산 0.97 / 0.81 s(+ 코리도 빌드 0.72 / 0.55) · 제약 실패 0 · 이음 틈(한 번만 쓰인 변) 0(DTM 빈 곳 둘레 7 / 8 뺌) · 노면 끝 3 cm 밖 빈 곳 0.05 / 0.04 % · B06 대비 측점 최대 오차 중앙 0.23 / 0.21 · p90 1.14 / 0.51 m(큰 값은 공용 단면 분류 몫 · ① 과 같은 값) · 비탈 끝 편거리 차 중앙 0.10 / 0.00 · p90 2.2 / 2.0 m · 구조물 둘레 0.1 m 넘음 10.9 / 10.8 % · 0.5 m 넘음 1.1 / 0.45 % · 공사 밖 지형 정점 원본 그대로 · 등록 = `CORRIDOR_MODES` id `proposal2` · 화면 = 사용자 확인 대기
- [x] 115-7 성토 비탈 종단 연속(새 ① · 제안 ② 공통) — 사용자 화면: 성토 쪽 지느러미(행 하나만 50 m 뻗음) · 빗살 구덩이 · 까닭 = 공통 `buildDeformField` 가 행마다 비탈 끝을 따로 찾고 ① 은 이웃 행을 직선 혼합 → 비탈 끝이 튀는 자리마다 수직 벽 · 고침 = 성토 비탈 끝 열을 종단으로 이어 줌(튐 · 못 닫힘 행 → 이웃 보간 · 짧은 튐 올림 · 변화율 1 m/m · 측점 행은 그대로) + ① 비탈 끝 밖 2 m 덧댐 · 절토는 그대로(수치만) (sub4)
- 검증완료 — 시험 76(새 test_115_7 6 · test_115 · 115_4 · 115_5 · 115_6 · test_b05_corridor_*) · typecheck 0 · 실제 까닭 = 긴 지느러미는 단면 끝 너머 연장 구배로 수십 m 밖에서야 닫힌 행(성토 행 6 % 가 10 m 넘게 넘침)을 안전 상한이 눌러 원지반 위 띠가 된 것 · 짧은 튐 · 0 행 틈 = 빗살 → 못 닫힘 = 단면 끝 + max(2 m, 25 %) 넘김으로 잡음 · 원뿔 늘림은 측점 값 + 1 m/m 까지(안 막으면 54 m 가 측점 740 까지 번져 B06 어긋남) · 수치(226 / d22 · 전 → 후) = 지느러미 행 176 → 0 / 131 → 2 · 성토 출렁임 Σ|Δcatch| 192 → 56 / 154 → 55 m/100 m · 절토 그대로 96 / 79 · ① 성토 쪽 70° 넘는 삼각형 2,374 → 1,060 / 1,845 → 1,078 · ① B06 대비 측점 최대 오차 중앙 · p90 · 최대 0.22 · 1.29 · 3.68 → 0.23 · 1.29 · 3.68 / 0.24 · 1.25 · 4.41 → 같음 · ② B06 0.23 · 1.24 → 0.22 · 1.24 / 0.22 · 0.52 → 같음 · ② 70° 넘는 삼각형 312 → 732 / 397 → 694(② 는 덧댐 없어 짧아진 비탈 끝에 턱 — ② 파일 몫) · 제약 실패 0 · 시간 field 0.23 / 0.20 s · deformTerrain 2.0 / 2.2 s · tinTerrain 1.8 / 1.6 s(전과 같은 급) · BUILD_VERSION 그대로(장 계산은 저장본 · 서버 사전생성 밖) · 화면 = 사용자 확인 대기
- [x] 115-8 제안 ③ 측점 횡단 기반 사면 따로 그려 넣음(사용자 안) — 측점마다 B06 설계선(노견 끝 → 비탈 끝) · 측점 사이는 평면도 절성토 외곽선(`B07_DesignDetail_Engine_Cad_PlanKinds.py` slope_pieces — 비탈 끝 오프셋 노선 따라 보간)과 같은 규칙으로 단면 보간 · 비탈 끝 선 높이는 지형에 드레이프(보정량은 노견 끝 0 → 비탈 끝 1) · 지형 이음 · 구조물 구멍 · 구역 색은 제안 ② 기계 재사용 · 도로 · 구조물은 지금 것 · 고르기 「제안 ③」 (sub7)
- 검증완료 — 시험 31(새 test_115_8 8 · test_115_6 8 · test_115_5) · typecheck 0 · 수치(226 / d22 · Node · ① / ② / ③ 같은 잣대 · ① · ② = 115-7 전 코드) = B06 대비 측점 최대 오차 중앙 0.22 · 0.23 · 0.21 / 0.23 · 0.21 · 0.20 m · p90 1.17 · 1.14 · 0.49 / 1.16 · 0.51 · 0.49 m · 지느러미 행(이웃 ±3 m 중앙값 + 3 m 넘는 성토 행) 190 · 193 · 14 / 147 · 132 · 4(③ 남은 것 = 769 측점 B06 성토 24 m 깊이 그대로) · 성토 70° 넘는 삼각형 1,297 · 62 · 125 / 1,013 · 122 · 131(0.5 m² 넘는 것 304 · 12 · 36 / 347 · 29 · 65) · 비탈 끝 출렁임 Σ|Δoffset| 311 · 309 · 51 / 249 · 246 · 63 m / 100 m · 비탈 끝 편거리 차 p90 2.5 · 2.2 · 0.6 / 1.4 · 2.0 · 0.6 m · 이음 틈 ② · ③ 0 · 제약 실패 0 · 계산 1.8 · 1.8 · 1.3 / 2.3 · 2.1 · 1.3 s · ② 결과 115-6 때와 같음(점 30,677 · 삼각형 42,138) · 공사 밖 지형 원본 그대로 · 구조물 둘레 0.1 m 넘음 ③ 24 / 28 %(② 11 %) · 등록 = `CORRIDOR_MODES` id `proposal3` · 화면 = 사용자 확인 대기
- 뒤처리 검증완료(115-7 뒤) — ② 비탈 끝 드레이프(측점 아닌 행 · 지반 차 0.1 m 넘는 행만 · 측점 행은 B06 그대로) · 시험 22(test_115_6 9 · test_115_8 · test_115_7) · typecheck 0 · 수치(226 / d22 · ① · ② · ③) = 성토 닿은 70° 삼각형 591 · 150(고치기 전 760) · 197 / 506 · 138 · 170 · 측점 오차 p90 1.17 · 1.14 · 0.49 / 1.16 · 0.51 · 0.49 m(② 고치기 전과 같음) · 지느러미 행 2 · 5 · 14 / 3 · 3 · 4 · 출렁임 165 · 168 · 51 / 147 · 149 · 63 m/100 m · 이음 틈 ② · ③ 0 · 구조물 둘레 0.1 m 넘음 ② 11.1 / 11.4 % · ③ 24 / 28 % · 계산 1.6 · 1.4 · 1.2 / 1.6 · 1.4 · 1.1 s
- [x] 115-9 제안 ③ 절성토 서피스 부드럽게(사용자 10-9) — 사면(구역 색) 삼각형만 꺾임 법선(three toCreasedNormals · 30° 넘는 꺾임은 나눔 → 소단 또렷) · 부드러운 음영 재질 사본 · 측점 사이 짝 맞춘 꼭짓점 단조 3차(PCHIP) 보간(측점 = B06) · 드레이프 보정량 ±2 m 고르기(비탈 끝은 제 행 값 → 지형 위) · 지형 · 노면 · 구조물 · ① · ② 그대로 (sub7)
- 검증완료 — 시험 25(test_115_8 9 · 새 사면 음영 · 3차 넘침 · test_115_6 · test_115_5) · typecheck 0 · 수치 전후(226 / d22 · ③) = 사면 이웃 면 음영 단차 중앙 1.53 → 0.01° / 1.72 → 0.01° · p90 21.3 → 5.6° / 20.4 → 3.9° · 면 꺾임 각(형상) 중앙 1.53 → 1.50 / 1.72 → 1.69° · p90 21.3 → 21.7 / 20.4 → 20.9° · B06 대비 측점 오차 p90 0.49 → 0.49 / 0.49 → 0.49 m · 비탈 끝 출렁임 51 → 52 / 63 → 66 m/100 m · 이음 틈 0 → 0 · 성토 닿은 70° 삼각형 197 → 232 / 170 → 170 · 계산 1.4 → 1.5 / 1.4 → 1.6 s · 화면 = 사용자 확인 대기
- [x] 115-10 제안 ③ 사면 모양 평활화(사용자 「스무딩 개념을 모르나」 · 화면 = 성토 부채꼴에 빗살 · 곡선 안쪽 뾰족한 원뿔 · 가장자리 톱니) — 까닭 = 사면을 단면 꼭짓점(노견 끝 · 꺾임 · 비탈 끝)만으로 삼각분할 → 긴 실오라기 부채꼴 · 115-9 는 음영만 · 고침 = 사면을 촘촘한 격자(노선 × 사면 방향 약 1 m)로 다시 짬 · 사면 면 평활화(노견 끝 · 소단 · 비탈 끝 선 고정 · 안쪽 점 이웃 평균) · 비탈 끝 선 평면 평활화 + 곡선 안쪽 겹침 포락선 · 절토 · 성토 둘 다 (sub7)
- 검증완료 — 시험 31(새 test_115_10 6 · test_115_8 · test_115_6 · test_115_5) · typecheck 0 · 수치 전후(226 / d22 = 사진 프로젝트 엄상준_검증 · 관 지점 80.4 · 178.3 · 263.2 m) = 사면 실오라기(가로세로비 10 넘음) 17,587 → 853(67 → 1.5 %) / 17,255 → 785(68 → 1.4 %) · 이웃 면 음영 단차 p90 5.6 → 0.02° / 3.9 → 0.02° · 비탈 끝 선 꺾임 609 → 596 / 619 → 596 °/100 m · 꼬임 0 → 0 · 지느러미 행 11 → 0 / 6 → 0 · B06 대비 측점 오차 p90 0.49 → 0.48 / 0.49 → 0.49 m · 이음 틈 0 → 0 · 제약 실패 0 · 계산 1.2 → 1.2 / 1.2 → 1.2 s · 구조물 둘레 0.1 m 넘음 24 → 33 % / 27 → 33 %(격자가 구조물 측점 B06 비탈을 그대로 그려 드러남) · 화면 = 사용자 확인 대기
@@ -0,0 +1,25 @@
# 상시 계획서 — 128~133장 기록
## 128~132. 5차 요구(10-8 밤)
근거 = `docs/raw/요구_1008_5/사용자요구_1008_5.md` · 화면 검증은 사용자.
- [x] 128-1 M02 구조물 조합 다이어그램 [작게] · [크게] · [한눈에] = 아이콘 단추(공용 아이콘 단추 · 글은 title) (sub2)
- [x] 128-2 면적산출 아래 막대 도면 연결 = 알약 대신 라운드 사각 · 값 맞음/다름 = ✓ / ✗ 표시(글 대신 · 뜻은 title) (sub2)
- [x] 128-3 면적산출 아래 막대 알약 · [연결 모두 해제] 글 세로 가운데 (sub2) · 확인 = 시험 · CSS 수치
- 검증완료 — 시험 19 통과(새 128 셋 · area_marks · area_old_links · spreadsheet_set_link · labor_diagram) · typecheck 0 · build:spreadsheet · 화면 = 사용자 확인 대기
- [x] 129-1 B05 종단 우클릭 구조물군 · 종류 목록 = 좌측 패널과 같은 자료(한 벌) (sub8) · 확인 = 시험(두 목록 같음)
- 검증완료 — 시험 26(새 test_129 5 · test_116 · test_126 · new_structure_defaults) · typecheck · 화면 = 사용자 확인 대기
- [x] 130-1 B07 평면도 칸에 [평면도 관리] 단추 → 모달(종류 추가 · 업데이트 · 대피소 자리 · 평면도 고치기 · 미리보기) · 좌측 패널에서 그 칸들 뺌 (sub6) · 확인 = 시험
- 검증완료 — 시험 47(새 test_130 10 · plan_kinds · 119 · landuse · masshaul_basin) · typecheck · 화면 = 사용자 확인 대기
- [x] 131-1 B08 자재 집계표 고침(조사 `docs/raw/요구_1008_5/조사_B08자재집계표.md` — 사슬은 엑셀과 같음 · 빈 까닭 = 단위수량 기본 빈칸 · 횡단배수 밖 구조물 안 들어옴) — 총괄 · 콘크리트 위 빈 까닭 안내(단위수량 빈 줄 n · 서버 notes) · 자재 열 머리 줄바꿈 · 끝수 처리 엑셀 꼴(레미콘 ROUND 2 · 철근 · 와이어메쉬 ROUND 3 · 시멘트 ROUND 0 · 그 밖 올림) · 막자갈 줄(품셈 4 % · 수량 빈칸) · 세월교 관 길이(B06 새 키 · 110 길)를 파형강관 · 커플링에 · 혼합석 할증 · ㎥당 모래 · 자갈은 품셈 그대로 (sub1) · 확인 = 시험 · 거울
- 검증완료 — 시험 71(새 test_131 12 · test_121 · 124 · 120 · 98 · 122 거울 · 110 · b06_pipe_length · b06_design_key_split) · 끝수 줄마다(25-18 31.62 · 철근 1.271 · 와이어메쉬 10.0) · 세월교 9 m × 2련 = 관매설 18 · 커플링 2 · 거울 TS = 파이썬 · typecheck · 화면 = 사용자 확인 대기
- [x] 131-2 ⬜ 사용자 결정 뒤 — 단위수량 기본값 원천 · 횡단배수 밖 구조물 수량(서버 자동 vs 손 줄) · 채집석 공제 → 토공 사토 → 143 으로 옮김(사용자 10-9 「연결 안 된 값은 비움 · 조합 사본 없으면 없음」 = 단위수량 원천 빈칸 · 횡단배수 밖 = 사본 있을 때 서버 자동 · 채집석 공제는 143-4 ⬜)
- [x] 132-1 B08 수리집수면적표 판정 O K = 초록 글 · N G = 붉은 글 (sub5) · 확인 = 시험
- 검증완료 — 시험 27(새 test_132 5 · test_96 · test_110 · test_69) · typecheck · 화면 = 사용자 확인 대기
## 133. B05 계획노선 편집 분석 지형 고르기 (10-9 사용자)
- [x] 133-1 라이다 있는 프로젝트도 수치지형도로 분석 — 편집 모달 「분석 지형: 라이다 · 수치지형도」 고르기(라이다 있을 때만 보임 · 기본 라이다) · 모달 안 지형 쓰는 분석 전부(지반고 · 구간 기울기 · 횡단 미리보기 · 등고선 · 재계획 등) 고른 지형으로 · 확정 지표면 · 종 · 횡단 · 3D 정본은 안 바꿈 · 수치지형도 서피스(dtm_sheet)는 LAS 있어도 이미 만들어 둠 (sub8)
- 검증완료 — 시험 test_133_1 14 · 고친 대상 기존 시험(54_22 · 75 · routeedit 넷) 통과 · typecheck · 검증_sub8 실자료 같은 점 라이다 870.55 m / 수치지형도 876.97 m · [확인] 재계산은 확정 지표면 그대로
- [x] 133-2 고른 분석 지형을 설계 지형으로(사용자 「수치지형도로 분석 · 노선 추천을 받았으면 종횡단 · 배수유역 · 유토곡선 전부 수치지형도로」) — 노선 [확인] 때 고른 지형을 프로젝트 설계 지형으로 · 지표면 쓰는 곳 전부(종 · 횡단 · 배수유역 · 유토곡선 · 3D 지형 등) 한 곳을 보게 · [확인] 안 하면 안 바뀜 (sub8)
- 검증완료 — 시험 test_133_2 9 · test_133_1 14 · 고친 대상 기존 시험(54_22 · 64_1 · 74 · 75 · 76 · B06 측점 둘 · routeedit 둘) 79 통과 · typecheck
+63
View File
@@ -0,0 +1,63 @@
# 10-9 요구 분석 · 정함
근거 — `사용자요구_1009.md` · `사용자요구_1009_추가.md` · 조사 A(M02) · B(B05) · C1(B06 화면) · C2(B06 형상) · D(B07) · E(구조물 조합 연결) · F(원가 엑셀) · G(B08 연결) — 파일:줄은 조사 문서에.
사용자 지시 — 검토 뒤 계획서 · 승인 전 창에 안 넣음 · 화면 검증은 사용자(코더는 고친 코드만 — 시험 · typecheck · build).
## 장 · 창 (안)
| 장 | 내용 | 창 | 모델 |
|---|---|---|---|
| 134 | M02 단가승격 드롭다운 · 승격 기능 지움 · 일위대가 사전조합(층 따로 · 2단 폴더 · 새 분류) · 기본 개인 | sub3 | Opus high |
| 135 | B05 3D ③ 채택 · 나머지 Old · 흑백 지형 · 3D 도수로 띠 | sub4 | Opus high |
| 136 | B05/B06 도수로 · 돌붙임 실시간 · 물넘이 포장 · [삭제] 단추 | sub5 | Opus high |
| 137 | B06 화면 ① 보라 설계선 고름 · 치수 라벨 · 하나만 고름 · 측점 하나 | sub1 | Opus high |
| 138 | B06 화면 ② 비포장 단추 지움 · 확폭 면적 · 알림 줄 고정 · 열 수 · 측구 줄 [상세] 모달 | sub2 | Opus high |
| 139 | B06 형상 관보호공 높이 · 연동 0.1 · 세월교 수평 · 유출 3° 절토 · 흙막이 제약 · 설계선 쉬프트 | sub7 | Opus high |
| 140 | B07 평면도 관리 모달(CAD 만 · 종류/장 합침 · 끌기) · 횡단면도 장 배치 4 × 4 | 데스크탑 메인 | Sonnet high |
| 141 | B07 평면도 엔진 글자 겹침 · 축척 늘림 · 유역 조각 · 여러 장 맞춤선 | sub6 | Opus high |
| 142 | 구조물 조합 고르기 모달 = M02 카드 · 사본 셈 한 벌 · 사본 구멍 메움 | sub3(142-1 · 134 뒤) · sub5(142-2 · 136 뒤) | Opus high |
| 143 | B08 연결 안 된 값 비우기 · 구조물 조합 없으면 없음 · 「연결된 사본」 원천 함수 | sub8 | Opus high |
| 144 | B09 바탕 — 뼈대 · 노무 · 경비 · 환율 · 자재 단가 대비 · 중기 | 데스크탑 보조 | Opus high |
| 145 | B09 호표 · 내역 · 원가 — 산근 · 대가 · 설계내역서 · 총괄 · 원가계산서 · 집계표 | 145-1 · 2 = 먼저 빈 창(142-1 뒤) · 145-3~5 = 데스크탑 보조(144 뒤) | Opus high |
## 정함 (브레인 · 사용자가 바꿀 수 있음)
- 134 — 구분 드롭다운 = [단가산출 | 단가승격] 둘 · 일위조합(SC) 줄 = 글 고정 · 사전조합 안 로직 줄엔 없음 · 저장 = 줄에 `승격: true` · 금액 안 바뀜 · B09 는 사본 `일위대가.json` 담은로직[].승격 을 읽어 호표 · 옛 SP 참조 줄 = 읽을 때 새 꼴(로직 · 입력값 · 승격 true)로 보이고 저장하면 새 꼴 · **마스터 · 개인 파일은 코드로 안 고침** · 서버 옛 펼침은 프로젝트 사본용으로 남김 · 폴더 = 구분 › 상세구분 2단 묶음(27-2b 옛 나무 되살림) · 사전조합 층 단추 = 마스터 · 회사 · 내 개인 · 고른 층은 주소에 · 해시에 층 없을 때도 개인(회사 없으면 마스터).
- 135 — Old 자리 = `B05_Profile/Old/`(tsconfig exclude 이미 · git 추적 · `0_old/` 은 git 무시라 안 씀) · 시험 8개 = `resources/tester/old/` + conftest collect_ignore · 고르기 줄 없앰 · ③ 고정 · ③ 을 못 만들 때 = 원지형 그대로(`_Clip` 도 Old) · 서버 사전생성 · BUILD_VERSION 그대로(③ 이 서버 노면 · 구조물을 받아 씀) · 커밋 둘(등록부 · 옛 A · ① · ② / 지금 꼬리 · 스케치) · 3D 띠 길이 = 유출 구조물 폭 따라감 · 115-3 을 대신함.
- 136 — 실시간 = `applyPipeOptionsToCache` 한 곳에서 chute 얹음 · 물넘이 `ford_chute_*` = 세트 · 오버레이 · B08 키 · [빼기] → [삭제] = 공용 폼 한 번(노면공 상세 · M02 미리보기도 같은 꼴).
- 137 — 라벨 = 사면길이 · 수평 · 높이 · 구배(1:n · 노면 %) · 가린 선 = 보이는 조각만 · 선 고르면 카드도 고름 · 면적 강조도 「하나만」 · 구역 판정(도로 · 절토 · 성토) 함수는 139-6 이 씀 · 종단 노면공 알약 누름 = 구조물 고름(여럿 강조 그대로) · `UI_Cross_View.ts` 700줄 먼저 나눔.
- 138 — 포장 = 노면공 범위만(밖 = 비포장 · 옛 저장값 무시 · 서버 · 브라우저 같은 규칙) · 「포장 권장 ⚠」 = 고정 알림 줄로 · 확폭 면적 = 측점 사이 사다리꼴 Σ(구간 앞뒤 확폭 0 측점까지 · 노면공 범위로 자름) · 표시만(수량 안 넣음) · 열 수 1~6 · 저장 = 보기 설정(pref) · 카드 높이 = 폭 × 3열 비율 · 알림 없어도 줄 유지 · 상세 모달 = 가벼운 CAD 꼴(카드 SVG · 어두운 바탕) + B07 횡단 수량표(값 = 서버 한 길 POST) + 맨 위 글 칸(측점마다 `structure_note`) · 투명 막 · 그 카드 안 가리는 쪽에 · 단추 이름 「상세」.
- 139 — 차례 10 · 11 → 9 → 8 → 7 → 6 · 연동 다시 걸면 굳힌 값 지움 · 세월교 「높을 수 없음」 = 기본 자리 위 금지 · 박스 riseM ≤ 0 · 3° 절토 대상 = 배수 구조물만 · 원지반 못 만나면 복합경사 · 유입 쪽은 이번에 뺌 · 쉬프트 = 쪽마다 노견 확장 값 하나(노폭 안쪽 금지 · 구조물은 노견 0점이라 같이 감) · 관 길이 자리 = 사면 우선 + 붙은 벽 높이 역산(0.1 m) · 걸음 0.1 m · 옛 관 높이 1.5 이고 관경 > 1.0 이면 새 규칙 값으로 · 유입 집수정도 같은 규칙 · [저장] 때 서버가 보통 측점 설계선을 다시 안 내는 의심 = 6 에서 확인 · 고침.
- 140 — 모달 CAD = 새 곁값 `bare`(캔버스만 · M02 미리보기는 그대로) · [확정 풀기] 뺌 · 끄는 단위 = 종류 · 놓는 즉시 저장 · 횡단 장 = 장마다 열 × 행(기본 4 × 4) · 칸 가운데 · 도각 그림칸 고정 · 축척 1/100 그대로 · 겹침 무시.
- 141 — 축척 = 1/500 · 1/600 · 1/1,000 · 1/1,200(기본) · 1/2,500 · 1/3,000 · 1/5,000 · 1/6,000(지식DB 근거 있는 것만) · 실거리 상수 축척화 · 배수유역 = 어느 평면도에나 조각 체크 · 글 우선순위 = 시종점 > 측점 > IP > R > 배수 > 대피소 · 여러 장 = 제안 ①(노선 따라 자르기 유지 + 맞춤선 + 이웃 구간 노선 흐리게 + 돌린 맞춤 흠 고침).
- 143 — 결론: B08 숫자에 조합 사본 값 0곳 · 조합 없어도 시설마다 줄 · 층(마스터 · 회사 · 개인) 바로 읽기 셋 · 고침 = 칸마다 그 칸을 낸 컨테이너 사본이 있을 때만 셈(거름 한 곳 · M02 `assign_items` 규칙 재사용) · 조합 이름 · 구조물도 = 사본에서 · 관경 · 련 빈칸 = 「미입력」(1000 · 1 채움 지움) · 1본 길이 = 프로젝트 값만(시스템 층 폴백 지움) · 토공집계표 거창 계수(0.8 · 0.5) = 빈칸 + 「비율 미정」 · 구조물 쪽 늘 빈 줄 8 뺌 · 수리 박스 수심비 0.8(울진) = 빈칸 · 수리집수면적표 · 토적표 · 운반은 조합 무관이라 그대로 · 자재 셋 = 이번엔 값 없는 줄 숨김 · 품셈 근거 상수(배합 · 할증 · 단위중량)와 관매설 → 파형강관 1 은 그대로 · 구조물 탭 표 넷 = 공용 카드 안 · 사본 자재 → 단위수량 재연결은 144 와 함께 · 131-2 = 단위수량 원천 「연결 안 되면 빈칸」 · 횡단배수 밖 구조물 = 사본 있을 때만 서버 자동(M02 `fill_table`) 로 풀림 · 채집석 공제는 남음.
- 144 · 145 — 원본 = 기번3 공통 xlsx 21탭(보이는 20 · STmate 메타 숨김 1 은 안 옮김) · 사슬 = 자재 단가 대비 · 노임 · 경비 · 환율 → 중기 → 단가산출근거(산근) → 일위대가(대가) → 설계내역서 → 총괄 → 원가계산서 · 집계표 4 는 끝 결과 · 탭 하나 = 화면 표 하나(공용 `createDataTable` · `createCard` · 호표 칸 누름 = 그 탭 그 줄로 이동) · old 코드 안 봄 · 계산 = 호표 합 · 내역 금액 · 제비율 · 끝수는 파이썬 · TS 짝 + 거울(조작 중 브라우저 · [저장] 때 서버 정본) · 로직 기준 단가 · 집계표 전개는 서버 단독 · 끝수 = 엑셀 자리 그대로(줄 ROUNDDOWN 1 · 합 · 금액 · 제비율 ROUNDDOWN 0 · 집계표 ROUND 0 · 관급 ROUNDUP −3) · 공구 안 나눔 · 대가 호표 = 같은 원본 + 같은 단가면 하나 · 산근 = M02 「단가승격」 줄(같은 로직 + 같은 입력값 = 하나) · 조합 밖 토공 · 운반 산근 33 · 준비공 = 빈칸 「연결 없음」(지시) · 자재 적용 단가 = 출처 중 최저 자동 + 사용자 고침 · 요율 고르는 값(추정가격 · 공기 · 공종) = 사용자 입력 칸 · 엑셀에 없는 현행 비목(퇴직공제 · 임금채권 · 석면 · 하도급) = 줄만 두고 빈칸 · 관급 · 별도계상 = 자재 줄에 사용자 표시 · 요율 값은 M01 `요율_조달청제비율.json` 후보(확정 안 함) · 구조물 조합 사본 없으면 그 구조물은 없음(143 원천 함수).
- 142 — 연결은 이미 「참조 + [저장] 때 자료 사본 · [재적용] 때만 다시 가져옴」(9-30 확정) · 메울 구멍 = 관 지점 사본 이름(관 옮겨도 같은 사본 · 이름만 바꿈) · 사본 실패 알림 · 사전조합 안 로직 · 옵션 그룹 정의도 사본 값 · manifest 가져온이 · 「연결된 사본」 원천 함수(B08 · B09 공용) · 모달 「넣을 값」 카드 · 옛 일위대가 조합 이름 줄 지움 · 사본 셈 빈 입력 = M02 와 같이 자동값 · 사본 단위 = 구조물마다(지금 그대로).
## ⬜ 사용자 물음
1. (134) 일위대가 사전조합의 새 구분 · 상세구분 — ① 구조물군(횡단배수 · 종단배수 · 사면안정 · 계류사방 · 안전부대 · 생태녹화 · 노면공) › 종류 + 「공통」(추천 · 옛 실무 조합 37개가 거의 그대로 들어맞음) ② 실무 공종 6분류(토공사 · 구조물공 · 사면피복공 · 운반공 · 자재대 · 관급자재대) ③ 사용자가 짓는 폴더 이름.
2. (139) 관보호공 높이 「관경 + 500 mm」 — ① 땅속 0.5 를 포함한 벽 전체 높이 → 벽 윗면 = 관 윗면(추천 · 10-6 표 Ø1000 = 1.5 와 같음) ② 관 바닥 위 높이 → 벽 윗면 = 관 윗면 + 0.5(지금 그림과 같음 · 폼 값 1.5 와는 어긋남).
3. (139) 「흙막이가 원지반 · 암 경계선에 위치 제약」이 보인 측점 · 구조물 한 곳 — 답 전에는 끝 연결선만 3° 절토로 통일.
4. (141) 축척 따라 평면도 여러 장 — ① 노선 따라 자르기 유지 + 맞춤선(추천) ② 장마다 노선 방향으로 돌린 띠 ③ 격자 타일.
5. (145) 설계내역서 공종 나무 — ① 엑셀 꼴 고정(토공사 › 준비공 · 절토 · 구조물터파기 및 되메우기 · 측구파기 · 유용성토 · 사토 및 다짐공 / 구조물공 › 돌기슭막이공 · 배수공 · 기타구조물 / 운반공 / 자재대 / 관급자재대) + 구조물군 → 공종 짝 표(추천) ② 구조물군 그대로 ③ 사용자가 짓는 나무.
6. (144 · 145) 원가 단가 원천 — ① 프로젝트 한 벌: 원가산출에서 M01 단가를 한 번 복사해 굳힘 · [단가 갱신] 때만 새로 · 대가 · 산근도 이 단가로 셈(한 직종 · 한 자재 = 한 단가 · 추천) ② 구조물 사본마다 복사 때 굳은 단가(연결한 날이 다르면 같은 노임이 둘).
## 파일 겹침 · 차례
| 파일 | 창 | 차례 |
|---|---|---|
| `M02_MasterTemplete_Labor_Detail.ts`(678줄) · `ItemCards.ts` · `M02_Labor_Doc.py` | sub3(134 → 142-1) | 한 창이 이어서 |
| `M02_Item_Copy.py` | sub3(142-1 셈) · sub5(142-2 목록 부분 표시) | 다른 함수 · 늦게 올리는 쪽이 받아 합침 |
| `common_util_culvert_sets.ts` · `B06_Section_Engine_Culvert.py` | sub5(136-2 물넘이 세트) · sub7(139-1 벽 높이 기본) | 다른 자리 |
| `B06_Section_UI_Page_Pipe_Options.ts` | sub5(136-1 chute) · sub7(139-1 높이 칸) | 다른 자리 |
| `B06_Section_UI_Section_View.ts` | sub1(137-4 selectMark · 하나만) · sub2(138-3 고정 줄 · 열 수) | 다른 자리 |
| `B06_Section_UI_Cross_View.ts`(700줄) | sub1(137-1 나눔) | sub2 는 카드 자리만 DOM 으로 · 손대지 않음 |
| `B06_Section_UI_Cross_Design.ts` | sub2(138-1 · 138-4) | 혼자 |
| `B05_Profile_UI_Corridor_Mesh.ts` · `_Tin_Design.ts` · `_Structures.ts` | sub4(135-1 정리 → 135-3 띠) | 한 창이 차례로 |
| 139-6 쉬프트 | sub7 | 137-2 구역 함수가 메인에 들어온 뒤 |
| `B07_DesignDetail_Router_Support_Plan.py` | 데스크탑 메인(140 reorder_kinds) · sub6(141 build_pieces) | 다른 함수 |
| `M02_Item_Snapshot.py` | sub8(143-1 「연결된 사본」 원천 함수) · sub5(142-2 `sync_snapshots` 이름 바꿈) | 다른 함수 |
| `B08_Quantity_Router_Summary.py` | sub8(143) · sub5(136-2 물넘이 chute 키 한 줄) | 늦게 올리는 쪽이 받아 합침 |
| 145-1 · 2 산근 · 대가 | 먼저 빈 창 | 134-1 승격 표시 · 142-1 사본 셈 한 벌이 메인에 들어온 뒤 |
| 143-4 B08 사본 자재 재연결 | sub8 | 142-1 뒤 |
@@ -0,0 +1,43 @@
# 사용자 요구 (2026-10-09 · 원문 그대로)
계획서 = `PLAN.md` 134장부터 · 분석 = 같은 폴더 `분석_정함.md` · 조사 = 같은 폴더 `조사_*.md`.
```
M02 마스터 템플릿
- 일위대가 조합은 단가산출 승격기능은 필요가 없고 대신 구조물 조합의 단가산출 로직의 구분을 드롭다운 메뉴로 단가승격 항목을 선택하게 반영, 이후 B09 내역서에서 이내용을 보고 호표작성을 하겠음.
- 일위대가 조합 컨테이너의 제목을 일위대가 사전조합으로 변경하고 단가산출 승격은 삭제, 내부내용을 별더의 폴더구조로 반영, 마스터, 회사,개인의 선택지를 컨테이너별로 개별동작하게 반영
- 구조물조합과 일위대가 사전조합의 기본 선택은 '개인'으로 변경
- 일위대가 사전조합 항목의 경우 구분과 상세구분은 산림과 건설품셈이 아님, 산림과 건설품셈을 가져와서 조합한 항목임으로 다른 구분과 상세구분이 필요함.
B05
- 3D의 흑백지형 기능 연결안됨.
- 제안 3기능으로 채택 나머지 코드들은 빼서 old 폴더로 옮길것.(삭제는 내가)
- 돌붙입/도수로 형상 로직 연결 안됨. 확인 ( 좌측 패널 컨테이너의 빼기 버튼의 이름을 삭제로 바꾸고 버튼의 양식을 내부 컨테이너의 선택과 동일한 양식 사용)
-
B06
- 횡단도 컨테이너의 비포장 버튼삭제
- 노면공으로 확폭구간 범위를 선택하여 형상을 반영함. 이때 선택 버튼의 우측맞춤으로 해당영역의 확폭면적 값을 넣어줘.
- 횡단도의 측구 버튼이 있는 행에 제일 우측에 버튼을 하나 생성, 버튼을 누르면 모달창이 나오고 여기에는 B07 상세도면에서 사용하는 횡단도 테이블과 상단에 구조물의 상세내용을 작성하는 텍스트 입력창을 넣게함. 단순화된 캐드화면이면 좋겠음. 모달창은 해당 횡단의 그림에 침범하기 안도록 생성
- 제일상단의 성토사면 알림이 있는 행을 상단고정하고 우측 맞춤으로 내부의 레이아웃의 폭 수량을 지정하게 변경. 기본은 값 3이며 3이면 브라우져에 맞춰 3열 구조 배치 사용자가 숫자를 변경하면 레이아웃이 변경되는데 이때 컨테이너 내부의 그래프 영역의 비율은 유지되어야함.
- 횡단도 내부의 +, -, 핏 버튼의 좌측에 라벨을 하나 만들고 여기에는 사용자가 설계의 보라색선을 선택하였을때 치수값을 표현하면 되는데 이때 구조물에 의해 숨겨지거나 직선을 기준으로 분리하여 해당 성분의 치수를 표현. 선택시 하이라이트 기능 부여. 구조물선택과 중복선택 될수 있으니 하나만 선택되게 반영.
- 위내용을 반영하고 선택된 선이 성토측, 절토측, 도로측 영역으로 나누고 좌우 쉬프트가 되어야함. 단, 이동이 가능한 부분은 기존 로직에의해 결정된 노폭을 안쪽으로 갈수 없으며 구조물고 같이 이동되어야함. 단, 구조물중 배관의 길이에 의해 결정되는 위치는 사면 이동위치를 우선하고 배관의 연결되 흙막이(외 다른 구조물의) 들의 높이를 제어하여 맞춤.
- 흙막이류 구조물이 여전히 원지반이나 암경계선에 위치 제약이 있음. 삭제할것.
- 흙막이류 구조물이 원지반이나 암경계선에 뭍힐경우 유출방향으로 수평방향으로 절토를 하여 물흐름에 방해되는 구역은 절토하여야함. 보라색 수평선(각도는 3도 정도 일단 반영)
- 세월교(박스암거 포함)는 방향은 수평방향이야하며 거이에 따라 날개벽의 위치가 결정됨, 좌우는 이동이 되어야하나 도로측으로 들어오거나 높을수는 없음.
- 관보호공 유출/유입의 구조물 높이의 기본값은 배관의 관경보다 높아야함. 관경 + 500mm 로 지정
- 관보호공이 연동이 풀린경우에는 주변의 자동배치된 구조물의 형상은 이동이 0.1 단위로 이동되어야함.(연동이 풀린 순간 위치제어는 별도의 구조물 형상이 되어야함. )
- 노면공에서 구졸물 리스트로 접근할 경우에는 현재처럼 여러 횡단도를 하이라이트 하는게 맞지만 종단, 횡단에서 측점하라는 선택하였을 경우에는 하나의 측점만 선택되어야함.
B07 상세 설계
- 평면도 관리에서 모달창의 우측에서 캐드프로그램으로 조작은 B07 메인화면에서 진행. 캐드 화면만 보여주게 변경, 기타 옵션 하단의 객채스냅 행들은 필요없고 상단의 AISLO CAD 행도 필요없음
- 종류의 드롭다운으로 메뉴를 선택함에 따라 상세에 내용을 보여주면 됨. 현재 평면도 장은 작은 버튼들로 변경하고 순서를 제어할 수 있는 기능 부여, 순서변경은 드래그앤드랍으로
- 평면도 상에 보여주는 글자들은 서로 최대한 안 겹치게 변경
- 평면도 관리의 축척선택에서 스케일은 더 많아야하며 배수유역도 옵션선택에 따라 넣거나 뺄수 있어야함.
- 종류 목록과 평면도 장은 하나로 합쳐도 될듯
- 스케일에 따라 평면도가 여러 장일수도 있음. 제안
- 횡단면도의 기준사요자가 각 장의 배치를 제어할 수 있게 반영, 다른 횡단도로 선이 침범한다고 하더라고 일단은 무시, 기본 배치는 4 X 4 형태임. 이때 도각에 지정된 그림 영역을 최대한 사용하게 변경. 스케일을 바꾸면 안됨.
```
## 함께 받은 말
신규 계획서 작성을 위한 검토 필요.
@@ -0,0 +1,21 @@
# 사용자 요구 추가 (2026-10-09 · 원문 그대로)
앞 요구 = 같은 폴더 `사용자요구_1009.md` · 계획서 · 분석은 함께.
```
B05 : - 좌측 패널의 구조물 조합을 선택할 때 사용되는 모달창의 내용이 예전 내용임. 마스터와 동일한 도면, 일위대가, 면적산출 정보를 보여줘야함.
B08/B09 원가산출
- 연결이 안된값은 임의나 지정한 실무문서의 값을 가져가지 말고 그냥 비워둘것. 확인 후 재연결
- 원가산출 : root\resources\knowledge\original\실무문서\2024년 간선임도(기번3-울진.대흥)(공통)\1. 설계원본\01 내역자료\2024년 간선임도사업(기번3).xlsx
- 참고자료의 탭별로 구분하여 내부 프로그램화하고 old 코드들은 참고하지 말것.
- 마스터/회사/개인으로 만들어진 구조물조합의 정보는 B05/B06의 좌측 패널에서 연결이 됨. 이때 연결 정보를 저장하는게 아니라 데이터를 복사하여 저장이 되어야함.(이력관리를 위함.)
- 다시말해 시간이 지난후 마스터/회사/개인의 데이터를 변경하더라도 프로젝트 내부의 구조물조합 정보는 변경이 되면 안됨.
- 참고 엑셀자료의 하이퍼링크 정보를 보면 해당 정보들의 연결을 이해하기 쉬움
- 대부분 테이블이 원가산출의 결과물이 되며 이때 테이블과 컨테이너의 양식은 공용약식이 있으니 사용
- B08과 B09는 프로젝트 내부의 구조물 조합 정보(면적산출, 일위대가, 일위대가 조합 등)가 없다면 수량산출 단계나 원가산출 단계에 없는게 정상임.
- 검증은 내가 직접 구조물조합을 연결하여 할 생각임. 코더들은 수정한 코드만 검증
```
## 함께 받은 말
추가 계획서의 조사 필요.
+66
View File
@@ -0,0 +1,66 @@
# 조사 A — M02 일위대가 사전조합 · 단가승격 (10-9 · 읽기 전용 조사 에이전트)
파일 = `M02_MasterTemplete/` 아래 · 머리 `M02_MasterTemplete_` 생략 · 「추정」 = 코드로 확인 못 한 판단 · 지난 기록 = 50-3 · 50-4 · 51-3~14(`docs/raw/plans/2026-10-06_plan_43-54_구조물배치_일위대가_정리.md:150-177`) · 27-2b 옛 2단 나무(39-2 에서 지움) · 123-1(`docs/raw/plans/2026-10-08_plan_123_*.md`).
## 1. 단가승격 = 서고 문서 대신 구조물 조합 일위대가 로직 줄 「구분」 드롭다운
- 현재: 좌측 항목 「단가산출 승격」(`UI_Side_Precombo.ts:16-19`) → 목록표 [생성] = 로직 고르기 → `{층}/promote/SP-######.json`(`Library_List.ts:180-193` · 꼴 `M02_Labor_Ref.py:4-6,145-157` — 로직 한 줄 · 입력값 고정 · 배 · 구분 · 연결) → 구조물 일위대가에 참조 줄 `{참조:{층,주인,키}}`(`Labor_Pick.ts:128-152` · `Labor_Detail.ts:446-457`) · 값 = 로직 기준 ÷ 배(`M02_Labor_Ref.py:368-395`) · 프로젝트 = 참조사본으로 굳힘(`M02_Item_Source.py:90-99`) · B09 = 빈 화면(`B09_Estimation/B09_Estimation_UI_Shell.ts:1-8` · 승격 읽는 곳 없음).
- 「구분」 칸 지금: 저장 안 함 · 키 머리에서 읽음(SP- 단가승격 · SC- 일위조합 · 그 밖 단가산출) + 단가산출 줄만 품셈 책 작은 글(`Labor_Rows.ts:44-53,361-368`).
- 빠진 것: 로직 줄에 승격 표시 칸 없음 — 서버 `clean` 이 모르는 칸을 버림(`M02_Labor_Doc.py:118-127`) · 화면 `normalizeLabor`(`Labor_Api.ts:156-182`)도 같음.
- 해석(추정): 단가산출 줄 구분 칸 = 드롭다운 [단가산출 | 단가승격] · 일위조합(SC) 줄 = 「일위조합」 고정 · 저장 = 줄에 `승격: true`(없음 = 단가산출 · 켜쌓기율 · 고름과 같은 덧칸 꼴) · 금액 안 바뀜(거울 셈 무관) · B09 자리 = 스냅샷 `일위대가.json` `줄.담은로직[].승격`(같은 로직 · 입력값 묶음을 호표 하나로 = B09 몫).
- 고칠 자리: `Labor_Rows.ts` `RowHandlers`(:179-192)에 `promote?(i, on)` · 구분 칸 = 손잡이 있으면 드롭다운 · 없으면 글(`kindOf` 가 `row.승격` 읽음) · `Labor_Detail.ts:198-208` 손잡이(화면 캐시만 · 셈 없음) · `Labor_Api.ts:124-136,163-173` 칸 · `M02_Labor_Doc.py:118-127` 통과.
- 지울 것: `UI_Side_Precombo.ts:16-22` · `Library_List.ts:180-193` · `Labor_Detail.ts:88,108,553-560,629,660` · `Labor_Pick.ts:67,135-143` · `Labor_RefEdit.ts:31,48~`(승격 [옵션] 모달) · `Labor_Rows.ts:48,425` · `Labor_Text.ts:143`(`Kind_Promote` 글은 드롭다운에 다시 씀) · `Api_Fetch.ts:14,134` · 서버 `M02_Labor_Ref.py:30-31,45-46,145-157,167-190` · `M02_Template_Layers.py:32,176` · `M02_Labor_Router.py:84` · `Store.py:573` · `M01_MasterData/M01_MasterData_Store_Cache.py:230`.
- 남은 자료: 마스터 `resources/master_template/promote/SP-000001.json` + 그것을 담은 `labor/item3.json:34-37` · 개인 `storage/1/10/templates/promote/SP-000001.json`(쓰는 곳 0) · 프로젝트 13곳 `storage/1/3/<id>/templates/labor/item3.json`(+`_initial` · 스냅샷 참조사본)이 마스터 SP-000001 을 가리킴 → 이관 = 참조 줄을 `{로직, 입력값, 켜쌓기율, 수량, 승격: true}` 로(값 같음 · 한 번 도구 꼴 `M02_Labor_Migrate.py`).
- 재사용: 별칭 칸 꼴(칸 안 입력 · 줄 누름과 따로 `Labor_Rows.ts:194-226`) · `createSelectField({compact})`(`Labor_Pick.ts:58`).
- 시험: `test_m02_labor_ref.py`(승격 다수) · `test_m02_labor_layer.py:86-88` · `test_m02_labor_logic_mats.py:121-124` · `test_m02_card_shell.py:84,154-174` · ui_checks 50-3 · 50-3-4 · 50-4 · 51-3 · 51-4 · 51-6 · 51-10 · 51-11 · 51-12 · 51-13 · 51-14 · 새 = `승격` 저장 왕복.
- 위험: 카드(`ItemCards.ts:313-319` 같은 부품)에도 드롭다운 · 보기 갈래(`Labor_View.ts:91`) = 글만 · 좁은 칸 CSS(`Labor.css:202,355`) · `Labor_Detail.ts` 678줄(승격 지우면 줄어듦).
- 크기: 드롭다운 작음 · 승격 지우기 + 이관 중간.
- ⬜ 물음 1: 선택지 = 단가산출 · 단가승격 둘 · 사전조합 안 로직 줄엔 드롭다운 없음 — 추천 그대로.
- ⬜ 물음 2: 옛 승격 자료 — ① 마스터 · 개인 참조 줄만 이관 · 서버 옛 계산(`Expand._promote`)은 프로젝트 사본용으로 남김 ② 프로젝트까지 이관 후 통째 지움 — 추천 ①(프로젝트는 재생성 때 사라짐).
## 2. 컨테이너 이름 「일위대가 사전조합」 · 승격 지움 · 폴더 나무 · 층 단추 컨테이너마다
- 현재: 제목 = 글 고정 `PRECOMBO_TITLE = "일위대가 조합"`(`UI_Side_Precombo.ts:20` · 로케일 아님 · `UI_Side.ts:145`) · 안 = 층 단추 + 항목 둘(`UI_Side_Precombo.ts:59-62`) · 항목 누름 = 상세 칸 목록표(`UI_Main.ts:503-514` → `Library_List.ts`) · 사전조합 문서에 폴더 칸 없음(`M02_Labor_Ref.py:158-162`).
- 층 공유 원인: 페이지 층 하나 = 해시 `root`(`UI_Page.ts:53-71`) · 두 컨테이너 층 단추 = 같은 `createLayerBar` · `go` = 해시 바꿔 페이지 통째 다시 세움(`UI_Page.ts:97-116,183-188`) · 고칠 권한도 페이지 층 하나(`UI_Page.ts:71` · `UI_Main.ts:248,348,511`) · 서버 길 `owner` = 전역 `activeOwner` 를 같은 층일 때만 붙임(`Api_Fetch.ts:63-77`).
- 고칠 자리: 제목 글 · 항목 둘 → 사전조합 나무 · `UI_Page` 에 사전조합 층 따로(`{root, owner}` · 기본 개인) · 그 층 단추 `go` = 해시 안 바꾸고 나무만 다시 그림 · `Selection`(`UI_Main.ts:42-49`)에 `owner` · `canWrite`(`accessFor` `Layer.ts:84`) · `Api_Fetch` 서고 길에 명시 owner · `UI_Side.ts:143` 고름 비교 층.
- 폴더(추정): 구분 › 상세구분 = 2단 폴더(27-2b 꼴) · 나무 = 그 층 목록(줄에 구분 · 상세구분 이미 실림 `M02_Labor_Ref.py:248-261`)을 묶어 그림 · 문서 누름 = 상세 · 생성 · 복사 · 삭제 = 지금 목록표(켜진 층 단추 다시 누름) 그대로.
- 재사용: `createLayerBar`(`TreePanel_Roots.ts:48` · `go` 만 바꿈) · 공용 나무 `renderTree` · `createTreeRow`(`ui_template/ui_template_tree.ts:104,125`) · 39-2 에서 지운 2단 나무 `git show ab84c763b^:M02_MasterTemplete/M02_MasterTemplete_Labor_Tree.ts`(+ TreePanel `maxDepth` · `item` · `clipKind`) · 서버 나무 고침 `f8d024fc2^` Combo_Store.
- 시험: `test_m02_labor_tree.py:57-63`(층 단추 두 벌 글) · `test_m02_layer_screen.py:90` · ui_checks 51-4 · 51-10 · 새 = 한쪽 층 단추가 다른 쪽을 안 바꿈.
- 위험: `owned()` 는 모든 M02 길이 지남 → 구조물 조합 회귀 · 남의 개인을 보는 중이면 사전조합 길에 그 사람 owner 가 붙음(명시 owner 로 막음) · `UI_Main.ts` 650줄 · `TreePanel.ts` 670줄(옵션 되살리면 700 가까움).
- 크기: 큼.
- ⬜ 물음 3: 폴더 = ① 구분 › 상세구분 2단 묶음(고침은 상세 드롭다운) ② 구조물 조합과 같은 탐색기(오른쪽 클릭 폴더 · 끌어 옮기기 · 깊이 자유 · 서버 나무 길 새로) — 추천 ①.
- ⬜ 물음 4: 사전조합 층 단추 = 마스터 · 회사(볼 회사) · 내 개인 셋(사람 나무 뺌) · 고른 층은 주소에 남김 — 추천 그대로.
## 3. 기본 층 = 개인(구조물 조합 · 일위대가 사전조합)
- 현재: 구조물 조합 = 대시보드 카드가 `root=personal`(회사 있으면 역할 무관 · `B01_Dashboard/B01_Dashboard_UI_Page.ts:176-184,198` · 123-1) · 해시에 root 없음 = 마스터(`Layer.ts:38` · 시험이 못박음 `test_b01_settings_cards.py:241-244`) · 사전조합 = 페이지 층을 따라감.
- 빠진 것(추정): 일위대가 조합 층 단추가 페이지 층을 바꿔 구조물 조합까지 마스터로 남음 — 2 와 한 뿌리.
- 고칠 자리: 사전조합 층 처음 값 = 내 개인 층 있으면(`ownOwner` `Layer.ts:68`) 개인 · 없으면 마스터 · 해시 root 없음도 같은 규칙(`UI_Page.ts:53-58` · 사용자 정보 있는 자리).
- 갈래: 회사 없는 사람 = 마스터만(「회사부터 등록」 `TreePanel_Roots.ts:53-58`) · 시스템 관리자 = 회사 있으면 개인 · 다른 회사를 보는 중이면 구조물 조합 「개인」 = 그 회사 첫 사람(`UI_Page.ts:61-66` · 「나 맨 위」는 자기 회사일 때만 `Router_Layers.py:242-244`).
- 시험: `test_b01_settings_cards.py:218-244` · 크기: 작음(2 에 딸림).
- ⬜ 물음 5: 해시에 root 없을 때도 개인(123-1 은 「그대로」로 정함) — 추천 개인.
## 4. 사전조합 구분 · 상세구분 = 품셈 분류 아닌 새 분류
- 현재: 품셈 장 목록 그대로 — 구분 「건설품셈 공통」 · 「산림품셈」 / 상세구분 「07장 돌공사」(`Router_Combos.py:88-90` → `M01_MasterData/M01_MasterData_Store.py:160-176`) · 생성 처음 값 = 첫 줄(`Library_List.ts:194-203`) · 상세 드롭다운(`Labor_Detail.ts:561-600`) · 서버 = 자유 글(`M02_Labor_Ref.py:162`) · 쓰는 곳 = 목록표 칸(`Library_List.ts:110-112`) · 고르기 창 거름(`Labor_Pick.ts:85-90,167-176`) · B09 없음 · 자료 3개(마스터 SC-000001 빈 값 · 개인 SC-000001 「건설품셈 공통 / 07장 돌공사」 · SC-000002 「산림품셈 / 03장」).
- 후보(근거):
| 후보 | 구분 | 상세구분 | 근거 |
|---|---|---|---|
| ① 구조물군 | A 횡단배수 · B 종단배수 · C 사면안정 · D 계류·사방 · E 안전·부대·용지 · F 생태·녹화 · G 노면공 · 기타 | 그 군 구조물 종류(C = 옹벽 · 돌쌓기(찰) · 돌쌓기(메) · 흙막이 · 큰돌쌓기 · 소단) | `resources/master_template/구조물정의.json` 구조물군 · types(B05 구조물 배치와 같은 갈래) |
| ② 실무 공종 | 토공사 · 구조물공 · 사면피복공 · 운반공 · 자재대 · 관급자재대 | 자유 | `resources/knowledge/original/실무문서/_종합비교/06_수량양식_프로그램.md:20-27`(봉화) |
| ③ 수량 문서 갈래 | 토공 · 배수공 · 구조물 · 비탈면·노면 | 자유 | `resources/knowledge/technical_info/01_임도/04_수량분석정보/` 파일 넷 |
- 참고: 옛 실무 조합 37개(`resources/master_data/일위대가조합.json` 「실무 일위대가」 — 취수장 · 관보호공 · 돌붙임 · BOX 암거 · 차단기 …)는 ① 에 거의 그대로 들어맞음 · 여러 구조물에 쓰는 묶음(콘크리트 · 거푸집 등)은 「공통」 필요(추정).
- 고칠 자리: 목록 출처 하나(① 이면 `fetchStructureDef` `StructOptions/M02_SO_Api.ts:18` + 「공통」) → `Labor_Detail.ts` libMeta 2단 드롭다운 · `Library_List.ts:194-203` 처음 값 = 고른 폴더 · 고르기 창 거름은 섞여도 걸러짐(그대로) · 옛 값 3개 비움(빈 = 「미분류」).
- 시험: ui_checks 51-12 둘(서고 구분 · 고르기 구분) · `test_m02_labor_ref.py`(filled · summary) · 위험: 구조물정의 판이 바뀌면 옛 글이 목록에 없음(「지금 값도 선택지」 `Labor_Detail.ts:566-570` 그대로 씀) · 크기: 중간.
- ⬜ 물음 6: 분류 = ① 구조물군 + 종류 + 공통 ② 실무 공종 6분류 ③ 사용자가 짓는 자유 글(폴더 이름) — 추천 ①.
## 파일 겹침
| 파일 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| `UI_Side_Precombo.ts` · `Library_List.ts` | ● | ● | | ● |
| `UI_Page.ts` · `Layer.ts` · `TreePanel_Roots.ts` | | ● | ● | |
| `UI_Side.ts` · `UI_Main.ts` · `Api_Fetch.ts` | ●(Kind) | ● | | |
| `Labor_Detail.ts` · `Labor_Pick.ts` · `Labor_Text.ts` | ● | ● | | ● |
| `Labor_Rows.ts` · `Labor_Api.ts` · `Labor_RefEdit.ts` · `M02_Labor_Doc.py` | ● | | | |
| `M02_Labor_Ref.py` | ● | ●(폴더) | | ● |
| `M02_Template_Layers.py` · `M02_Labor_Router.py` · `Store.py` · M01 `Store_Cache.py` | ● | | | |
| `B01_Dashboard/B01_Dashboard_UI_Page.ts` · `test_b01_settings_cards.py` | | | ● | |
| 마스터 · 개인 · 프로젝트 자료(SP-000001 · item3) | ● | | | ●(SC 구분) |
+79
View File
@@ -0,0 +1,79 @@
# 조사 B — B05 흑백지형 · 3D ③ 채택 · 돌붙임/도수로 (10-9 · 읽기 전용 조사 에이전트)
약칭: `_X` = `B05_Profile/B05_Profile_UI_Corridor_X.ts` · 뷰어 = `B05_Profile/B05_Profile_UI_Viewer.ts` · 뷰어코리도 = `B05_Profile/B05_Profile_UI_Viewer_Corridor.ts` · 보기줄 = `B05_Profile/B05_Profile_UI_Panel_View.ts`. 화면 확인 없음(코드 · 자료로만).
## 1. 3D 「흑백 지형」 단추가 안 먹음
- 현재: 단추 기본 켬(보기줄:100) → `setSurfaceGrayscale`(뷰어:492) → `applyGrayscaleTo`(뷰어:393-415) = 정점색을 제자리에서 회색으로 덮고 원래 색은 **메시마다 처음 본 값**으로 기억(뷰어:399). 지형 적재 직후 회색 먼저(뷰어:469) → 그 뒤 코리도 조립(뷰어:472).
- 원인(코드로 확인): 예상형상 지형(모든 방식 · ③ 포함)은 밴드 분할본에서 만듦 — 분할본이 **이미 회색인** 지형 색을 복사(`_Split.ts:49`) · near/far 가 색 버퍼 하나 공유(`_Split.ts:113-114`). ③ 망 · 남은 조각이 그 색을 받음(`_Tin.ts:103-106 · 275 · 360-363`) → 새 메시의 「원래 색」 = 회색 → 끄기 눌러도 회색. far 메시를 덮을 때 공유 버퍼까지 바뀌어 다음 [3D 업데이트]에도 번짐. 예상형상을 끄면(원지형) 단추 먹음.
- 고칠 자리: `_Split.ts` 생성자 — 사본 색을 지형 원래 색으로 되돌림 · far 색 버퍼 따로(clone) · 뷰어 `applyGrayscaleTo` — 원래 색 기억을 메시 → 색 버퍼 열쇠(WeakMap 하나 · 새 메시가 같은 far 조각을 감싸도 한 번만). 합 8줄 안팎.
- 다른 길(2줄): 단추 때 `corridor.resetTerrain()` + `rebuild()` — 단추마다 ③ 다시 짬(약 1.2 s · PLAN 115-10 실측).
- 재사용: 절성토 색 남김 표식 `userData.keepColor`(`_Tin.ts:357`) — ③ 사면 색은 흑백에서도 남음(115-1 결정 그대로).
- 시험: 새 1건(분할본 색 = 원래 색 · far 버퍼 분리 · Node 도우미) · 깨질 시험 없음.
- 위험 · 이음매: `_Split.ts` 는 ③ 이 남기는 파일 — 요구 2 와 충돌 없음.
- 크기: 작음.
## 2. 제안 ③ 채택 · 나머지 방식 Old 로
- 현재: 등록부 `_Modes.ts:135-176`(지금 · 옛 A · 새 ① · 제안 ② · ③) · 고르기 줄 보기줄:66-87 · 128-129 · 뷰어코리도가 방식을 골라 그림(:115-120 · 205-216 · 233-261). PLAN 115-3(옛 로직 지움 · 미체크)과 같은 일.
- ③ 사슬(남김): `_Loft` → `_Loft_Profile` · `_Loft_Toe` · `_Loft_Grid` · `_Loft_Shade` · `_Tin`(망 · 지형 이음) · `_Tin_Pslg` · `_Tin_Design:1-140`(TinDesign · structureTopLoops · insideLoop) · `_Deform:184-231` roadRows(+형 셋) · `_Deform_Structure:246-276` noFillLimits(+도움 넷) · `_Region:1-233` CellRegion · `_Split` · `_Terrain` · 바탕 빌드(`_Build` · `_Frames` · `_Station` · `_Station_Structure` · `_Structures*`) · `_Mesh`(노면 · 마구리 · 구조물) · `_Envelope` · `B05_Profile_UI_Corridor.ts`.
- 서버 몫(지우면 안 됨): ③ = 저장본(노면 리본 · 구조물 솔리드 · 외곽 · 마구리)을 받아 지형 망만 브라우저가 새로 짬(저장 안 함) — `B05_Profile_Corridor_Prebuild.py` · `B05_Profile_Corridor_Node.ts` · `B05_Profile_Router_Corridor.py` · `_Envelope`. BUILD_VERSION(`_Envelope:206`) 그대로 — 「지금」 꼬리를 빼도 노면 · 구조물 · 외곽 같음(자르기는 성토 리본만 `_Cut:485`) · 옛 저장본의 남은 몫은 `roadOnly` 가 버림.
| 통째 이동 | 줄 | 까닭 |
|---|---|---|
| `_Modes` | 207 | 등록부 · 지금 심 보정 · 스커트 붙임 |
| `_Legacy` | 60 | 옛 A |
| `_Deform_Terrain` · `_Deform_Breakline` | 317 · 612 | 새 ① |
| `_Plan` · `_Plan_Footprint` · `_Cut` · `_Carve` · `_Carve_Wing` · `_Union` · `_Skirt` | 629 · 348 · 620 · 494 · 256 · 34 · 223 | 지금(스케치 · 자르기 · 패치 · 스커트) |
| `_Clip` | 468 | 지금 · 옛 A 띠 자르기 · ③ 실패 대체(⬜1) |
| 고칠 파일 | 남김 | 빼서 Old 사본에 |
|---|---|---|
| 뷰어코리도 | `roadOnly` + `loftTerrain` 바로 부름(③ 고정) | 방식 고르기 · 느림 알림 · clip 대체(:216) · `__corridorPlanCurves`(:268-285) |
| 보기줄 | 보기 · 표시 단추 | 「3D 방식」 줄(:8-14 · 66-87 · 128-129) |
| `B05_Profile_UI_Corridor.ts` | 캐시 · 저장 | `rememberLegacyInputs`(:32 · 250) |
| `_Deform`(692) | roadRows · 형 셋(약 70) | 변형 장 전부(약 620) |
| `_Deform_Structure`(430) | noFillLimits · setOf · axisOf · 껍질 · 넓이(약 120 · `StationAxis` 형은 안에 적음) | 포락선 · 구조물 단면 · 구멍 · 드레이프 · 관 입구(약 310) |
| `_Tin`(375) | tinTerrain(설계자 인자 필수) | ② `deformDesign`(:176-193) · import 손봄(:21-23) |
| `_Tin_Design`(349) | :1-140 | `buildTinDesign`(:142-349) |
| `_Region`(404) | :1-233 | CorridorStrip · PlanLoopRegion · SubtractedRegion(:235-404) |
| `_Build` | 행 루프 · 리본 · 외곽 · 마구리 · 구조물 | legacy 옵션(:184-188 · 282 · 600) · 깃발(:72 · 90) · 스케치 · 자르기 · 패치 꼬리(:601-633) |
| `_Build_Types` · `_Envelope` · `_Mesh` · `B05_Profile_UI_Viewer_Debug.ts` | 노면 · 구조물 몫 | patch · cellMask · trimTris · cutWalls · planCurves(`_Mesh:39-74 · 159-190 · 411-485`) |
| `_Station` | 측점 분류 | silhouette 옵션(:93-100 · 401-417) |
| `A00_Common/b_page_state.ts` | — | 키 셋 corridor-deform · legacy · mode(:69-74) |
- Old 자리: `B05_Profile/Old/` — 선례(54-24 `fb5ab57c7`) · `tsconfig.json:38` exclude 이미 · git 추적 유지 · vite 는 import 로만 끌어 무관 · ruff 대상 아님. `0_old/` 은 `.gitignore:35` → 다른 창에서 사라짐(사실상 삭제)이라 안 씀. 일부 자른 파일은 손대기 전 원본을 Old 에 같은 이름으로. 번들 낡음 판정이 `B05_Profile` 를 rglob(`common_util/common_util_node_bundle.py:24`) → 옮긴 직후 서버 번들 한 번 다시 만듦(무해).
- 시험: Old 로 = `resources/tester/old/` + `conftest.py:8` collect_ignore 에 "old" — test_115_corridor_deform · 115_4 · 115_5 · 115_6 · 115_7 · b05_cut_merged_loop · b05_patch_skirt · b05_corridor_envelope_flags(+도우미 7). 고침 = test_115_8 등록부 단언(:84-87 · 도우미 :720-732). 그대로 = test_115_10 · b05_corridor_separation · switching · spline · structures_order · router · prune · prebuild · hash_probe · session_keys.
- 디버그 훅: 뺌 `__corridorPlanCurves` · `__corridorSkirt` · `__corridorHoles` · 남김 `__corridorDeform`(③ 수치) · `__corridorClip` · `__corridorBuild`(planCurves 몫만 뺌) · `__corridorScene` · `__corridorSource`.
- 순서: 커밋 둘 — (가) 등록부 · 고르기 줄 · 옛 A · ① · ② (나) 지금 꼬리 + 스케치 파일. 도우미가 TS 를 런타임 require 로 읽어 import 끊기 · 이동은 같은 커밋에서.
- 덤(범위 밖): 저장본에서 절 · 성토 리본까지 빼면 17 MB → 수 MB(추정 · serialize 한 줄).
- 위험: 요구 3 의 3D 띠가 `_Structures` · `_Mesh` · `_Tin_Design` structureTopLoops 를 만짐 → 요구 2 뒤에.
- 크기: 큼(통째 약 4,300줄 + 잘라냄 약 1,800줄 · 기계적).
- ⬜1 ③ 을 못 만들 때(점 구름 지형 = 높이 색인 없음 · 측점 2 미만): (가) 원지형 그대로 · `_Clip` 이동(추천 — 지금 대체는 비탈 자리까지 도려내 빈 구멍 · 추정) (나) 띠 자르기 남김.
## 3. 돌붙임/도수로 형상 · 상자 [빼기]
- 정체: 관 · BOX · 세월교 · 물넘이 포장 폼의 선택 상자 「도수로/돌붙임」(하나만) — 키 `chute_add_{n}_*`(`A00_Common/design/design_structure_guard.ts:149-157`) · 물넘이만 `ford_chute_{n}_*`(`design_structure_ford_pavement.ts:29-32`). 형상 = B06 횡단 띠(유출 성토사면 안쪽 두께 + 돌 · 90-2) `appendChuteBand`(`B06_Section/B06_Section_UI_Cross_Wall_Hatch.ts:323`) ← 관 `_Cross_Culvert.ts:107` · BOX `_Cross_Box.ts:160` · 세월교 `_Cross_Ford.ts:132`. 자료 = 서버 `_chute`(`B06_Section_Engine_Culvert.py:229-251`) ↔ 짝 `chute`(`common_util/common_util_culvert_sets.ts:131-151`).
- 끊긴 곳(코드로 확인):
- ① 실시간 — 폼 → 횡단 캐시 길 `applyPipeOptionsToCache`(`B06_Section_UI_Page_Pipe_Options.ts:48`)가 chute 를 안 얹음 · BOX · 세월교 제어기(`B06_Section_UI_Page_Ford_Controls.ts:257 · 304`)도 · 흙막이 쪽만 `guardSet`(`culvert_sets.ts:244`)으로 얹힘 → 상자 넣어도 [저장] · 새로고침 전엔 띠 없음.
- ② 물넘이 포장 — `ford_chute_*` 읽는 곳 0: 세트(`Engine_Culvert.py:485-515` · `culvert_sets.ts:404`) · 정규식 `chute_add_` 만 · 오버레이(`_Cross_Ford_Pavement.ts:122`) 띠 없음 · B08 집계도 `gchuteadd` 만(`B08_Quantity_Router_Summary.py:252-254`).
- ③ B05 3D — 띠 솔리드 없음(`_Structures:76` 종류 revet · basin · pipe) · 해시에도 없음(`_Structures_Hash`) · 상자에 종방향 길이 칸 없음.
- 고칠 자리: ① `applyPipeOptionsToCache` 한 곳(네 폼이 다 지남)에서 `chute(patch)` → `culvert` · `box` · `ford` 의 chute 갈아 끼움 + 카드 다시 그림(5줄 안팎) ② `chute(values, 머리)` · `_chute` 같은 인자 · 물넘이 세트에 붙임 · 오버레이에 유출측(`inflowSign` 반대) 성토사면 띠 ③ 3D = 유출 성토 조각(`outletFill` · `fillSegments`) 띠를 스윕하는 솔리드 + 해시 키.
- [빼기]: `A00_Common/design/design_structure_form.ts:268-287` — 공용 명세 폼 · 선택 상자 이름표(legend) 안 · 클래스 `b05-route__irregular-btn`. 「내부 컨테이너의 선택」 = 「구조물 조합」 줄 [선택](`B05_Profile_UI_Structures_Summary_Row.ts:42`) — 같은 클래스 + 상자 몸통 작은 단추 틀(높이 26 px · 위아래 여백 0 · `B05_Profile_UI_Style_Structures.css:565` · flex none `:454`). [빼기]는 그 틀에서 일부러 뺌(`:563-564`) → 여백 8 px(`B05_Profile_UI_Style.css:355`) · 이름표 흐림 0.8(`Style_Structures.css:168`).
- 고칠 자리: 글 「삭제」(+title) · CSS 한 규칙(이름표 단추도 작은 단추 틀) · 흐림은 이름표 글에만.
- 바뀌는 곳(공용): 도수로/돌붙임(관 · BOX · 세월교 · 물넘이) · 노면공 「상세 내용」(`design_structure_road.ts:60-63`) · M02 구조물 옵션 미리보기(흙막이 포함 · `M02_SO_Def_Spec.ts:99`). B05 · B06 흙막이는 단 수가 개수를 정해 단추 없음(`B05_Profile_UI_Drainage_Facility.ts:345` · `_Drainage_Revet_Choice.ts:113`).
- 재사용: `chute()` · `_chute` · `appendChuteBand` · `guardSet` · 작은 단추 틀.
- 시험: test_90_chute_band · test_b06_culvert_sets_mirror(파이썬 짝) · test_52_3_structure_spec_ford_pavement 늘림 · 새 1건(폼 → 캐시 chute) · 단추 글을 단언하는 시험 없음.
- 위험 · 이음매: 패널 아래 구조물 [삭제](빨강 · `B05_Profile_UI_Structures_Form.ts:130`)와 이름 겹침(모양 다름) · B06 요구(유출 수평 절토 · 관보호공 높이 · 연동 풀림)와 `Pipe_Options.ts` · `culvert_sets.ts` · `Engine_Culvert.py` 겹침(추정) · 3D 띠는 ③ 구멍(`_Tin_Design:68`)이 뚫지 않게.
- 크기: ① 작음 · ② 중간 · ③ 중간 · 단추 작음.
- ⬜2 「형상 연결 안됨」 범위: (가) 횡단 실시간 ① + 물넘이 ②(추천 · 먼저) (나) + B05 3D ③.
- ⬜3 3D 띠 종방향 길이: (가) 유출 구조물 폭 따라감(관 유출 벽 길이 · BOX/세월교 날개 사이 · 추천) (나) 상자에 길이 칸 더함.
- ⬜4 [삭제] 이름 · 모양: (가) 공용 한 번 — 노면공 상세 · M02 미리보기도 함께(추천) (나) 도수로/돌붙임만.
## 파일 겹침
| 파일 | 요구 1 | 요구 2 | 요구 3 |
|---|---|---|---|
| 뷰어 | ○ | | |
| `_Split` | ○ | 남김 | |
| 뷰어코리도 · 보기줄 · `_Modes` | | ○ | |
| `_Mesh` · `_Tin_Design` | | ○ | ○(3D) |
| `_Structures` · `_Structures_Hash` | | 남김 | ○(3D) |
| `design_structure_form.ts` · `B05_Profile_UI_Style_Structures.css` | | | ○ |
| `Pipe_Options.ts` · `culvert_sets.ts` · `Engine_Culvert.py` · `_Cross_Ford_Pavement.ts` | | | ○(B06 요구 겹침 추정) |
@@ -0,0 +1,79 @@
# 조사 C1 — B06 화면(비포장 · 확폭 · 상세 모달 · 열 수 · 선 고름 · 측점 고름) (10-9 · 읽기 전용 조사 에이전트)
약칭: B6 = `B06_Section\B06_Section_` · CD `UI_Cross_Design.ts` · CC `UI_Cross_Card_Chrome.ts` · CV `UI_Cross_View.ts`(**700줄 = 한도**) · CZ `UI_Cross_View_Zoom.ts` · DL `UI_Cross_Design_Line.ts` · DS `UI_Cross_Design_Surface.ts` · SV `UI_Section_View.ts` · RD `Router_Design.py` · CR `Cross_Refresh.ts` · CSS `UI_Style_Cross.css` / DVC `A00_Common\design\design_view_cross.ts`(684줄) · DW `A00_Common\design\design_structure_widening.ts` · BW `B05_Profile\B05_Profile_UI_Structures_Widening.ts` · T `resources\tester\`
## 1. 횡단 카드 [포장/비포장] 단추 지움
- 현재: 「측구」 줄(설계 바)의 토글 하나 — 켬 「포장」 · 끔 「비포장」(CD:442-446) · 넘치면 ⋯ 로 먼저 가는 칸(CD:460) · 값 = `design.paved` → [저장] patch(B6`UI_Page_Persist.ts`:383) · 같은 단추에 「⚠ 종단경사 법정 상한 초과 — 포장 권장」 배지(CD:448-455 · **이 경고가 보이는 유일한 자리**).
- 값 쓰는 곳: 횡단경사 · 포장층 두께 = 「포장」 그룹 값(B6`Engine_Design.py`:225-227 · 518) · 노면공 없을 때 표준 포장층 그림(DS:80) · 서버 `paved_at` = 노면공(G군) · 물넘이 범위 안 강제 · 밖 = 저장값(RD:113-118 · 452 · 530) · 강제는 끔→켬만(RD:194) · 노선 [확인] 승계 키(RD:151-160).
- 빠진 것: 단추가 없어지면 범위 밖 옛 `paved=true` · 노면공을 지운 뒤 남은 `true` 를 끌 길 없음.
- 고칠 자리: CD 토글 · moveable 에서 뺌(`state.paved` 는 저장값 그대로 emit) · 배지 옮김 · (가)면 RD `paved_at` 저장값 인자 지움 + `enforce_pavement_ranges` 켬↔끔 양쪽 + CR:296 브라우저 재계산 같은 규칙 · 로케일 `B06_Design_Paved_*`(`ui_template_locale_b2.ts`:450-452) 지움.
- 시험: 화면 시험 없음 · (가)면 `T\test_b06_pavement_and_ford.py`:129-134 · `test_74_route_confirm_initial.py`:28 고침 · `test_b06_recompute_keeps_user_values.py` 확인.
- 위험: 단추로만 포장한 옛 프로젝트는 포장이 풀림(횡단경사 · 포장층 · 면적 변함) · 크기: 단추만 작음 · (가) 규칙까지 중간.
- ⬜ 물음 ① 포장 근거 — (가) 노면공 범위만(밖 = 비포장 · 옛 값 무시) / (나) 옛 저장값 둠 → 추천 (가) ② 포장 권장 ⚠ 자리 — 고정 알림 줄(4번)에 「⚠ 포장 권장 · n측점」 / 카드 제목행 경고 / 없앰 → 추천 알림 줄.
## 2. 노면공 확폭 구간 단추 오른쪽 끝에 확폭 면적
- 현재: 노면공 폼 「확폭 구간」 상자(87-3 · B05 · B06 같은 폼) — 확폭 > 0 측점을 이은 구간마다 단추 「4+0 ~ 4+5 · 확폭 2 m」(BW:50-83 · 단추 꼴 = 「선택」과 같은 `b05-route__irregular-btn`) · 켬/끔 → `options.widening_off`(DW:29-63) · 형상 = **포장층만** 규격 폭(88 · `common_util\common_util_structure_pavement.ts`:87-108 → DS:53-64 · 84) · 설계선 노폭 · 절성토는 확폭 그대로(곡선표 + 앞뒤 10 m 테이퍼 `B05_Profile_Engine_Sections_Core.py`:173-215 · 278-).
- 빠진 것: 면적 셈 함수 없음(grep 0) — 정의 옵션 `widening_area_m2` 글만 「비우면 측점 사이 평균 × 거리」(`resources\master_template\구조물정의.json`:3210-3217 · 화면 칸은 은퇴 `design_structure_road.ts`:44-51) · 마스터 집계표는 안 읽음(시험 견본에만).
- 고칠 자리: DW 에 순수 함수 `wideningArea(측점, 구간, 노면공 범위)`(import 없는 파일 · 시험이 옮겨 돌림) · BW 단추 안 오른쪽 끝 `n.nn ㎡`(flex · margin-left:auto) · CSS `B05_Profile_UI_Style_Structures.css`:575-583.
- 셈(추천): 확폭(좌+우) 측점 사이 사다리꼴 Σ(wᵢ+wᵢ₊₁)/2×Δ · 구간 앞뒤 확폭 0 측점까지 이음(한 측점 구간도 면적) · 노면공 시작 · 종료에서 자름.
- 시험: `T\test_87_widening_runs.py`(+ `helper_87_widening.cjs`)에 면적 경우 · 위험: 끈 구간 면적 표시(회색) · 합계 · 횡단 자료 없으면 빈칸 · 크기: 작음.
- ⬜ 물음 ① 셈 — (가) 측점 평균 × 거리(정의 글과 같음 · 추천) / (나) 곡선표 정확값(곡선 길이 + 테이퍼) ② 「형상 반영」 = 포장층 폭(88 됨 · 추천) / 노폭 · 절성토까지(큼) ③ 켠 구간 합을 `widening_area_m2` 에 적어 수량에 쓸지 → 추천 표시만.
## 3. 측구 줄 맨 오른쪽 단추 → 상세 모달(구조물 글 + B07 횡단 표 · 단순 CAD 꼴)
- 줄: 설계 바 = 경사방향 · 측구 · 측구형식 · 복합경사 · 포장 · ⋯(CD:457-470 · 넘치면 뒤에서부터 ⋯ CD:472-517 · ⋯ = margin-left:auto CSS:424) · 붙는 자리 CC:158-161 · 새 단추는 moveable 밖(늘 보임).
- B07 「횡단도 표」 = 횡단 수량 산출표(추정 — 상세도면 표는 이것 하나) `B07_DesignDetail\B07_DesignDetail_Engine_Cad_Table.py`:20-58 · 124-235(폭 108 mm · 8행 · 제목 「No.측점」 · 머리 지반고/계획고/성토고/절토고 · 본문 6행 × 3묶음) · 값 `_Router_Support.py`:221-261 + `_Engine_Cross_Quantity.py`:102-128 — 면적 6칸 = 설계 저장값(브라우저에도 `common_util\common_util_cross_design.ts`:156-171) · 사면 7칸 = `_Engine_SlopeGeometry.py`:234 **파이썬만** · 표토 · 편책 · 제근 · 노면다짐 = 늘 빈칸 · B07 단건 도면 GET 은 B06 확정 뒤만(`B07_DesignDetail_Router.py`:75-101).
- 화면 후보: (가) 가벼운 꼴 — 카드 SVG 복제(어두운 바탕 · CAD 색) + HTML 표(B07 칸 배치 그대로) + 글 칸 / (나) 보기 전용 CAD — `createCadHost`(모달 선례 `B07_DesignDetail_UI_PlanManage.ts`:62 · 194) + 크롬 숨김(`M02_MasterTemplete_DrawingCard.ts`:42-63) + 구조물 엔티티(`B07_DesignDetail_Cross_Overlay.ts`:579) · 땅선 · 표는 서버 `build_cross_drawing` 미리보기 새 길(무거움).
- 표 값: 서버 `_quantity_table` 을 캐시 설계로 돌리는 POST 한 길(코드 한 벌 · 열 때 한 번) / TS 짝 이식(SlopeGeometry 284줄 · 거울 시험) / 브라우저 값만(사면 7칸 「-」).
- 글 저장(정본 = 측점 횡단): 설계 새 키(예 `structure_note`) → `USER_TOUCHED_KEYS` 짝(CR:75-90 · RD:130-148) + `CrossSectionPatch`(B6`Schema.py`:136-195 · 칸 없으면 서버가 버림 — pydantic 기본) + `T\test_b06_user_touched_keys.py` · 대안 = 구조물 `memo`(`B05_Profile_UI_Structures_Form.ts`:94-96 · 측점 아닌 구조물 단위).
- 자리: 공용 `openModal`(`ui_template\ui_template_modal.ts`:19-58)은 전체 어두운 막 · 가운데 → `backdropClass`(투명 · 누름 통과) + 카드 `getBoundingClientRect` 기준 넓은 쪽(좌/우 → 위/아래) 고정 자리 · 열 때 카드 먼저 보이게.
- 위험: 모달 열린 채 카드 다시 그림(조작) → 내용 갱신 · B07 1009 요구 「평면도 관리 캐드 화면만」과 크롬 숨김 공유 · 크기: (가) + 서버 표 값 중간 · (나) 큼.
- ⬜ 물음 ① 화면 (가)/(나) → 추천 (가) ② 표 값 원천 → 추천 서버 한 길 ③ 글 = 측점마다(추천) / 구조물 memo ④ 글을 B07 횡단도에 찍을지(B07 몫 · 뒤로) ⑤ 단추 이름.
## 4. 맨 위 성토사면 알림 줄 상단 고정 + 오른쪽 끝 열 수(기본 3)
- 현재: 알림 줄 = 클래스 없는 div 에 접는 줄 둘(⚠ 성토사면 5 m 초과 · ⓘ 소단 검토 · 없으면 숨음)(B6`UI_Cross_FillSlope_Notice.ts`:58-82) · 카드 칸 첫 자식(SV:113 · 406) · 스크롤 칸 `.b06-section__cards`(CSS:25-34 · flex 세로 · overflow auto) → sticky 가능.
- 열 수 지금 = 자동(보기 칸에 1.5줄 · 카드 폭 400~800 B6`UI_Section_Columns.ts`:26-47 · 상수 `UI_Section_Common.ts`:36-43) · SV:372-377 `repeat(n, 폭px)` · 크기 바뀌면 다시 고름(SV:444-).
- 그래프 높이 = 내용 높이 × 1:1 배율 + 고정 여백 94 px · 바닥 250 px(B6`UI_Cross_View_Metrics.ts`:33-90) · 같은 줄 최댓값(SV:390-) → 폭이 바뀌면 비율 흔들림.
- 고칠 자리: 알림 줄 클래스(sticky · top 0 · 바탕 · z-index) · 오른쪽 끝 숫자 칸(공용 `createInputField` compact) · SV draw 열 수 = 사용자 값(폭 = (칸 폭 − 간격)/n · 400~800 묶음 풂) · `pickCrossColumns` 지움 · 저장 = `A00_Common\b_page_state.ts`:46- 등록표 pref 한 줄(브라우저 + 계정) · 카드 `scroll-margin-top`(CSS:47) = 고정 줄 높이(SV:173 `revealCard` 가 줄 밑에 숨지 않게).
- 비율 후보: (가) 3열 폭으로 그린 SVG 를 CSS 로 늘이고 줄임(viewBox · 비율 정확 · 글자도 따라 변함 · 줌 · 끌기는 화면 비율 환산 `A00_Common\b_svg_zoom_pan.ts`:163-198 · B6`UI_Cross_Panel_Base.ts`:191-198 → 그대로 돎 추정) / (나) 높이 = 폭 × (3열 높이 ÷ 3열 폭) · 글자 그대로.
- 시험: 기존 없음 → 열 수 · 폭 · 높이 순수 함수 새 시험 · 위험: 알림 펼치면 줄이 길어짐(목록 최대 높이) · 좁은 카드에서 좌상단 면적표 · 우상단 줌 · 5번 라벨 겹침 · 열 수 바꾸면 카드 전부 다시 그림(줌은 측점별 기억 그대로) · 크기: 중간.
- ⬜ 물음 ① 열 수 범위 → 추천 1~6 ② 비율 (가)/(나) → 추천 (나) ③ 알림 없을 때도 줄 유지(숫자 칸만) → 추천 유지.
## 5. 보라 설계선 고름 → 치수 라벨(+ − ⤢ 왼쪽) · 강조 · 구조물 고름과 하나만
- 그림 = SVG(CV:319-364 · plotLayer 에 줌 transform) · 보라 = `.b06-chart__design-cross`(B6`UI_Style_Cross_Areas.css`:137-142) · 지금 못 고름(누르면 카드 고름 CV:172).
- 설계선 자료: `design.design_line` = [{offset_m, elevation_m}] = 지반 샘플(0.5 m · ±20 m — 검증 프로젝트 81점) ∪ 설계 꼭짓점(0 · 노면 끝 · 측구 점 · 2단 무릎 · 소단 모서리 · 지반 첫 교차 B6`Engine_Design_Geometry.py`:415-447 · `Engine_Design.py`:284-301) · **종류 꼬리표 없음** · 사면 끝 밖은 원지반 그대로.
- 종류 가르기 재료: +offset = 좌(화면 왼쪽 CV:317) · `road_edges`(노견 끝) · `carriageway_edges`(차도 끝) · `ditch` · `ditch_side` · `section_mode` → 좌우 절/성 역할(`Engine_Design_Geometry.py`:28-39) → 도로측 · 측구 · 절토측 · 성토측 판정 가능(짝 조사 좌우 이동의 바탕).
- 그리기: 점 사이마다 `<line>` 한 토막(DL:175-187 · 0.5 m 조각) · 지반 겹침 토막 생략 · `designTrim`(관 · 세월교 · BOX · 독립 흙막이 B6`UI_Cross_Culvert_Types.ts`:40-52)으로 잘림(DL:112-170) · 배관 성토 사면 = 레이아웃 폴리선(DL:191-206) · 구조물 보라선 = `<polyline>` + 툴팁(Culvert.ts:91-102 · 238-262 · Box.ts:147-190 · Ford.ts:68-78 · Wall.ts:141) · 물넘이 자리 지움(`UI_Cross_Ford_Pavement.ts`:190).
- 가림: 흙막이 · 옹벽은 바탕 덮개째 맨 위(`UI_Cross_Wall.ts`:169-197) — 선은 남고 덮임 → 벽 폴리곤으로 잘라야 · BOX · 세월교 본체도 위에 그려짐(덮는지 추정).
- 고름 지금: 벽 CV:225-246 · 본체 `UI_Cross_View_Bodies.ts`:25-50(`clearArea` 배타) · 면적 CV:275-291 · 전역 벽 고름 `UI_Page_Station_Controls.ts`:267-274(107-1) · 판정면 = 투명 polygon + stopPropagation(Culvert.ts:345-380).
- 고칠 자리(새 파일 하나): 보라 요소 → 같은 방향 토막 합친 직선 조각 → 벽 · 본체 폴리곤 밖 조각만 → 투명 판정 polyline(구조물 판정면 아래) → 강조 + 라벨 · m = CV:317-318 · 387-388 1차식 역산 · 라벨 = CZ:73 줄 첫 칸 · 선 고르면 벽 · 본체 · 면적 풂 / 그 반대도 · 페이지 전체 하나(모듈 한 칸) · 카드 다시 그려도 측점별 기억(`cardZoomStates` 꼴).
- 재사용: 폴리곤 자르기 `B07_DesignDetail_Cross_Overlay.ts`:224-266(export 안 됨 · B07→B06 방향이라 공용으로 옮김) · 시험: 새 Node 도우미(조각 · 가림 · 치수) · `T\test_118_pipe_pick.py` · `test_107_ford_free.py` · `test_b05_b06_selection_single.py` 통과 확인.
- 위험: CV 700줄 — 먼저 떼기 · 짝 조사(선 좌우 이동)가 이 고름 단위 위에 섬 → 5 먼저 · 좁은 카드 라벨 겹침 · 크기: 큼(새 파일 200줄 안팎).
- ⬜ 물음 ① 라벨 값 — 사면길이 · 수평 · 높이 · 구배(1:n · 노면은 %) 넷(추천) / 종류별 하나 ② 가린 선 = 보이는 조각만(추천) ③ 선 고르면 카드도 고름(구조물과 같게 · 추천) ④ 면적 강조도 같은 「하나만」(추천 넣음).
## 12. 종단 · 횡단에서 측점 하나 고르면 카드 하나만
- 현재: 목록 길 = 노면공 고름 → 그 측점 카드 고른 뒤 `markStructure(id)`(B6`UI_Page_Structures_Panel.ts`:198-209) → SV:510-514 `spanMarkId` → 범위 안 카드 전부 `--span`(SV:207-219 · 106-1).
- 원인: 카드 누름(CV:172) · 종단 측점선(B6`UI_Section_View_Profile.ts`:181) → 측점 고름 리스너(DVC:385-402) → `showAtChainage` 가 `resolveSelection` ③ 「측점을 덮는 구조물」로 노면공을 엶(`A00_Common\design\design_selection.ts`:65-96) → DVC:402 `selectMark(노면공)` → 같은 범위 강조.
- 고칠 자리: SV `selectMark(id, span = true)` + 타입(B6`UI_Section_View_Types.ts`:44) · 리스너 DVC:402 는 span 끔(알약 · 폼은 그대로) · 목록 길은 리스너 뒤에 다시 불려 그대로 여럿.
- 시험: `T\test_106_span_highlight_wording.py`:24-28 정규식 고침 · 크기: 작음.
- 위험: 구간형 전부(옹벽 · 독립 흙막이 · 사토장)에 같은 규칙 · B05 종단 측점 고름 → B06 넘김에 구조물 id 가 실리면(DVC:463- `restoreStructurePick` → `selectStructure`) 여럿 강조 남음(추정).
- ⬜ 물음 종단 알약(노면공 알약) 누름 = 구조물 고름 → 여럿 강조 유지(추천) / 측점 하나.
## 파일 겹침
| 파일 | 1 | 2 | 3 | 4 | 5 | 12 |
|---|---|---|---|---|---|---|
| CD `UI_Cross_Design.ts` | 토글 · 배지 | | 새 단추 | | | |
| CC `UI_Cross_Card_Chrome.ts` | 배지 대안 | | 모달 열기 | | | |
| CV `UI_Cross_View.ts`(700) | | | (카드 자리) | | 고름 배선 | |
| CZ · `UI_Cross_View_Bodies.ts` | | | | | 라벨 · 배타 | |
| SV `UI_Section_View.ts` | | | | 고정 줄 · 열 수 | (하나만) | selectMark |
| `UI_Section_Columns.ts` · `UI_Cross_View_Metrics.ts` | | | | 폭 · 높이 | | |
| `UI_Cross_FillSlope_Notice.ts` | 포장 권장 줄 | | | 고정 줄 | | |
| RD · CR · B6`Schema.py` | 포장 규칙 | | 새 키 | | | |
| DVC | | | | | | 리스너 |
| DW · BW | | 면적 | | | | |
| `A00_Common\b_page_state.ts` | | | | pref 키 | | |
| B07 Router · Support(새 미리보기 길) | | | 표 값 | | | |
| CSS 셋 · 로케일 b2 | ● | ● | ● | ● | ● | |
| DL · `UI_Cross_Culvert*.ts` · `UI_Cross_Wall.ts` | | | | | 읽기만 | |
- 짝 조사(형상 이동)와 겹침: 5 ↔ DL · Culvert · Wall · Station_Controls — 5의 고름 단위를 먼저 세우고 이동을 얹음.
+101
View File
@@ -0,0 +1,101 @@
# 조사 C2 — B06 횡단 형상 제어(선 이동 · 흙막이 · 수평 절토 · 세월교 · 관보호공) (10-9 · 읽기 전용 조사 에이전트)
약칭 `B06_Section/B06_Section_` + CG `UI_Cross_Culvert_Geom.ts` · SV `…_Culvert_Solve.ts` · EX `…_Culvert_Extra.ts` · TI `…_Culvert_Tiers.ts` · BS `…_Culvert_Basin.ts` · K `…_Culvert_Const.ts` · CU `UI_Cross_Culvert.ts` · WI `…_Culvert_Wire.ts` · BG `UI_Cross_Body_Guard.ts` · FG `UI_Cross_Ford_Geom.ts` · FP `UI_Cross_Ford_Panel.ts` · BX `UI_Cross_Box_Geom.ts` · BP `UI_Cross_Box_Panel.ts` · RV `UI_Cross_Revetment.ts` · SC `UI_Cross_Structure_Cut.ts` · W `UI_Cross_Wall.ts` · VS `UI_Cross_View_Structure.ts` · VW `UI_Cross_View.ts` · SP `UI_Cross_Structure_Panel.ts` · VF `UI_Cross_View_Ford.ts` · FC `UI_Page_Ford_Controls.ts` · STC `UI_Page_Station_Controls.ts` · LS `UI_Page_Link_Session.ts` · PO `UI_Page_Pipe_Options.ts` · PS `UI_Page_Persist.ts` · CR `Cross_Refresh.ts` · DS `Cross_Design_Session.ts` · SL `Structure_Layouts.ts` · AT `Api_Types.ts` · SCH `Schema.py` · RD `Router_Design.py` · RC `Router_Confirm.py` · PB `Server_Calc_Prebuild.py` · PD `Engine_Design.py` · PG `Engine_Design_Geometry.py` · EC `Engine_Culvert.py` / `common_util/common_util_` + GT `cross_design_geometry.ts` · CD `cross_design.ts` · SA `cross_structure_areas.ts` · CS `culvert_sets.ts` / DJ `resources/master_template/구조물정의.json` · NB `B04_PreProcess/B04_PreProcess_Router_Basins.py` · SF `B05_Profile/B05_Profile_UI_Structures_Fields.ts` · T `resources/tester/`
## 0. 코드 지도
| 층 | 파일 | 계산 자리(5장) | 저장 |
|---|---|---|---|
| 설계선(노면 · 측구 · 사면 · 소단 · 비탈 끝) | GT · CD ↔ PG · PD | ① 짝(T test_b06_cross_design_mirror) | 입력 = 카드 선택 세션 DS + patch · 결과 `design_line` · `road_edges` |
| 구조물 기하(관보호공 · 집수정 · 다단 · 세월교 · 박스 · 흙막이 붙임 · C군 · 벽 한 벌) + 구조물 측점 면적 | CG · SV · EX · TI · BS · K · FG · BX · BG · RV · W · SA | ② TS → 서버 Node(SL → `Server_Calc_Node` · PB) · 3D 도 같은 함수 | `design.revet_adjust`(x · d · h · m) · `ford_adjust` · `box_adjust` · `basin_adjust` · `extra_*` · `revet_link_detached` · 면적은 SL `STRUCTURE_ROW_KEYS` |
| 세트 제원(벽 높이 기본 등) | EC ↔ CS (+ K) | ① 짝(T test_b06_culvert_sets_mirror · test_b06_pipe_wall_height_mirror) | `pipe_points.json` 옵션 |
| 조작 | SP(걸음) · VS(축 · 연동) · STC(제어기 ±10 m L194) · FC(세월교 · 박스) · LS(연동 세션 · 좌측 [연동]) | 브라우저 즉시 | 세션 → [저장] patch(`UI_Page_Patches.ts`) |
| 저장 길 | PS:360-400 → RC save(patch 병합 L108-155) → PB `recompute_server_side`(포장 · 세월교 · 사토장 재계산 L176-201 + Node 면적 · 유토) | 서버 | DB `cross_sections.data.design` |
- (추정) 보통 측점 `design_line` 은 [저장] 때 서버가 다시 안 냄 — patch = 입력 + 브라우저 면적 · B07 은 저장된 선을 그림(`B07_DesignDetail_Router_Support.py:307`).
## 6. 고른 설계선을 성토 · 절토 · 도로 구역으로 나눠 좌우 쉬프트(노폭 안쪽 금지 · 구조물 같이 · 관 길이 자리는 붙은 벽 높이로)
- 현재: 구역 구분 없음 — 설계선 한 줄(`UI_Cross_Design_Line.ts:19` · 실선/점선 = 원지반 겹침뿐) + 구조물 트림 선 · 재료는 있음(`road_edges` · `ditch` · 판정 결과 `section_mode` CD:488-494 · 트림). 쉬프트 자리 없음 — 노폭 = 표준 반폭 + 곡선 확폭(GT:145-148 ↔ PG:66-70) · 사면 시작 = 노견 끝/측구 바깥(GT:243). 구조물은 모두 `road_edges` 가 0점(관 벽 CG:181 · 243 · 423 · 세월교 FG:166 · 박스 BX:149-150 · C군 RV:202) → 노견이 움직이면 같이 옴. 닮은 것 = 관 벽 x(노견 연장 · 안쪽 금지 SV:341 · 노폭 연장 SV:146-184) — 벽마다 · 설계선 · 면적은 안 바뀜.
- 관 길이 자리: 유출 벽 자동 자리를 정수 m 맞춤 루프가 관 축으로 밂(CG:503-567 · 손 벽 · 본체 흙막이 빠짐 L503) · 세월교 흙막이 1 m(BG:152-180).
- 빠진 것: 쪽마다 쉬프트 값(세션 · patch · 정본) · 엔진 입력 · 구역 판정 · 관 길이 → 벽 높이 역산 풀이.
- 고칠 자리(① 짝 + ②): ⓐ 엔진 GT `SectionGeometry`(L121-148) ↔ PG `_SectionGeometry`(L44-70) 에 쪽마다 쉬프트(≥ 0) → `leftExtent`/`rightExtent` · 단면유형 · 측구 자동 판정은 옮기기 전 노견에서(GT:166-189 ↔ PG:103 · 124 — 안 그러면 절 ↔ 성 뒤집힘) · CD 옵션(L82-116) ↔ PD `compute_cross_design`(L160) · 결과에 값 되싣기(확폭 `widening_*` 꼴 CD:513-514).
- ⓑ 저장: DS `CrossDesignChoice`(L16) 칸 → PS:377-389 patch · AT `CrossSectionPatch`(L562) · SCH(L136) · `USER_TOUCHED_KEYS` 두 벌(CR:72 ↔ RD:130) · CR:258-290 재계산 입력. ⓒ 서버: 파이썬 `compute_cross_design` 부르는 11곳(`B06_Section_Router.py:636` · RD:200 · 254 · 352 · 445 · 523 · `Engine_SampleExtend.py:140` · `Engine_SpoilFill.py:197` · B05 `Engine_RouteInitial_Profile.py:162` · `Router_Confirm.py:145` · `Router_Terrain.py:191`)에 저장값(`stored_berm` 꼴 도우미) · [저장] 때 쉬프트 측점 다시 냄(PB L176-201 에 포장 · 사토장 꼴 한 줄).
- ⓓ 구역: 새 TS 함수 하나(도로 = 두 노견 끝 사이 · 절토 = 측구 + 절토 사면 · 성토 = 성토 사면 + 구조물 트림 선) — 짝 조사 화면 고름이 씀. ⓔ 관 길이 자리: 쉬프트 걸린 쪽 유출 벽 = 정수 루프 제외(CG:503 조건) · 대신 관에 붙은 벽(유출 · 유입 · 집수정) 높이 역산 새 풀이(SV · `cutLength` L186 · 0.1 m) · 세월교 `fordPipeFit`(BG:152) 같은 규칙.
- 시험: T test_b06_cross_design_mirror(칸 더함) · test_b06_user_touched_keys · test_b06_curve_widening(.py · .mjs) · test_b07_slope_geometry · test_b08_earthwork_table · test_80_ford_pipe · test_79_guard_shape · test_73_4_body_guard · 새 시험. 크기: 큼.
- 위험: 700줄 — CG 700 · `B06_Section_Router.py` 698 · VW 700 → 먼저 나눔. B08 노면정리(`roadbed_width_m` · `B08_Quantity_Engine_Earthwork.py:119`) · 유토(`common_util_mass_haul.ts:404`) 늘어남. 연동 옆 측점 벽은 자기 노견 기준이라 소유 측점 쉬프트를 안 따라감(추정). [저장] 길이 설계선을 다시 안 내면 B07 에 쉬프트 안 보임(추정 · 0 장 끝).
- ⬜ ① 쉬프트 뜻: (가) 쪽마다 값 하나 = 노견 확장(노체 폭 · 측구 · 사면 · 구조물 같이 · 차도 · 포장 그대로 · 노면정리 늘어남) — 도로 · 사면 어느 구역을 골라도 그 쪽 값 / (나) 도로 구역 = 노폭(포장까지) · 사면 구역 = 사면만 평행 이동(측구는 노견에 남고 사이 평탄) — 추천 (가).
- ⬜ ② 관 길이 자리: (가) 사면 자리 고정 + 붙은 벽 높이 역산으로 정수 m(원문 · 0.1 m 눈금 남는 차는 표기 올림) / (나) 맞춤 없이 표기만 올림(손 벽과 같음) — 추천 (가). ③ 걸음 0.1 m · 측점 하나(고른 카드) — 추천 그대로.
## 7. 흙막이류 원지반 · 암 경계 자리 제약 삭제
- 현재: 벽 **자리** 셈은 이미 원지반 · 암 무관 — 관 벽 `placePipeWall`(SV:317-357 · 54-45) · 다단(EX:295-330 · 91-3 ②) · C군(RV:218) · 세월교 바닥(FG:109 · 107-2) · 박스(BX:134) · 전면 기울기(`common_util_masonry_slope.ts:42-46` · 91-3 ⑤). 암 경계는 벽 기하에 안 쓰임(끝 절토선 SC:25-37 만).
| 남은 자리 | 무엇 | 갈래 · 91-1 |
|---|---|---|
| BS:57-99 · CG:194-217 · BS:385-424 | 유입 형식 자동(고른 형식 없을 때) — 유입 쪽 절토(단면유형 = 원지반 판정) · 유입 성토사면 ≤ 3 m 면 흙막이 대신 집수정 · ㄴ·ㄷ 못 서면 I | 형식 · 판정 밖 |
| CG:272-286 | 유출 사면 끝(설계선 × 원지반)까지 0.5 m 못 되면 관 세트 통째 없음 | 존재 · 판정 밖 |
| RV:172-179 | C군 설치 측 빈 칸 = 단면유형으로 성토 쪽 · 양절토면 안 그림 | 측 · 판정 밖 |
| EX:59-92 · 135-210 · 304-312 · 384-404 · TI:96 · 110 | 끝 연결선(성토부선 · 3° · 수평공간 → 절토)이 원지반에서 끝 · 수평공간이 원지반 만나면 짧아짐 · 다단 등간격 · 「단 추가」 = 끝 성토부 길이 | ⑥ 남김 · 판정 밖 |
| SC:25-37 · 46-92 · BS:236-238 | 끝 절토선 암 무릎(원지반 + `rock_boundary_offset_m`) · I형 집수정 벽 바닥 = 원지반 | 91-4 · ③ 남김 |
| CG:264 · 453 · 517 · RV:226 · W:169 | 뜬 간격 툴팁 · 벽 안 선 가림 | 표시만 |
- 빠진 것 · 원인: 사용자가 본 「위치 제약」이 어느 줄인지 코드로 못 정함(후보 = 끝 연결선 · 유입 자동 집수정 · C군 측 자동 — 추정).
- 고칠 자리(②): 판정된 줄만 — 대신 쓸 규칙 = 손 자리 그대로 · 자동 자리 = 노견 0점(이미). 끝 연결선은 8 로 바뀜. 어긋남: 91-1 ③ · ⑥ 「남김」과 부딪힘(⑥ = 8 과 같은 줄) · 107-2 와 같은 방향 · 110 박스 원지반 경사(SL:170)는 수량 원천이라 남김.
- 시험: T test_91_ground_free · test_107_ford_free · test_b06_wall_shape_unified · test_54_10_soil_tiers. 크기: 작음(판정 뒤).
- ⬜ 제약이 보인 측점 · 구조물 한 곳(91-1 처럼 재현 → 판정) — 추천: 답 전 기본 = 끝 연결선만 8 로 통일 · 형식 자동 · C군 측은 그대로.
## 8. 흙막이가 원지반 · 암에 묻히면 유출 쪽 3° 수평 절토(보라 선 · 절토 면적)
- 현재: 묻힘 판정 있음 — 유출 끝 시작점(관 하단 꼭짓점 · 마지막 단 다음 자리)이 원지반 아래면 3° 내림 선을 원지반 교점까지 셈(EX:384-404 · `kind: "cut"`) · 관보호공은 안 그림(CU:120 · 08-24 사용자) · 면적 밖(TI:47-50 · CG:645 `withCut = !!body`) · 세월교 · 박스 흙막이 유출은 3° 대신 바로 복합경사 절토(TI:96 `cutBerm(0)` · 89-4) · 집수정 계류측 3° 선은 그림만(CU:139-152 · 면적 밖 CG:646).
- 유출 방향: `section.uphill_side`(유입 = 원지반 평균 높은 쪽 · `B05_Profile_Engine_Sections_Core.py:438-448`) → CG:127-134. 암: 암 경계는 원지반 아래라 묻힘 판정은 원지반 하나 · 절토 토사/암 나눔은 SA:156-160 이 이미 함(추정 — 원문 「암경계선에 묻힘」 = 같은 조건).
- 3° 근거: 지식DB 없음 — `PIPE_CONNECT_GRADE`(K:154 · 08-22 사용자) · 원문 곁 = 「유출구로부터 원지반까지 도수로 · 물받이」(`resources/knowledge/technical_info/01_임도/02_상세설계/횡단배수관_암거.md:25`) · 「공작물은 지반선보다 낮게 원지반에 설치」(같은 파일 :59) · 물받이 「기울기 원칙 수평」(같은 폴더 `구조물/골막이.md:88`).
- 고칠 자리(②): CU:120 조건 지움(보라 `planLine`) · CG:645-646 `drawnFillPoints(…, true)` → SA(L126) 폐회로 절토 → Node(PB) → B08 토적 · 유토 · TI:96 세월교 · 박스 유출도 3° · 교점 없음(EX:391 null) 처리 · B07 덧그림은 같은 함수라 따라옴.
- 시험: T test_79_guard_shape · test_91_ground_free(복합경사 유출 기대 바뀜) · test_b06_structure_areas.mjs · test_90_chute_band(돌붙임 띠 = 성토 조각만) · 새 시험. 크기: 작음~중간.
- 위험: 08-24 「안 그림」 · 89-4 「바로 절토」 뒤집음 · 묻힌 관 측점 절토 · 유토 늘어남 · 3D 실루엣은 따로(`B05_Profile_UI_Corridor_Station_Structure.ts`).
- ⬜ ① 대상: 관보호공 유출 · 다단 끝 · 세월교/박스 유출 흙막이 vs C군(물 흐름 없음)까지 — 추천 배수 구조물만. ② 3° 선이 원지반을 못 만나면(유출 쪽 오르막): 샘플 끝까지 / 그때만 복합경사 — 추천 그때만 복합경사(지금 89-4 꼴). ③ 유입 쪽 묻힘(접속선 EX:135-210 · 안 그림 CU:158-160)도 — 추천 이번엔 유출만(원문).
## 9. 세월교(박스 포함) 수평 · 그에 따른 날개벽 · 좌우 이동(도로 쪽 · 위 금지)
- 현재 세월교: 측벽마다 바닥판 = 그 쪽 노견 노면 − 높이(FG:161-166) · 상하 = 1:1.2 대각 `slopeM`(BS:193-196) · 관 = 두 바닥판 잇기 → 횡단경사 · 양쪽 값 차만큼 기움(FG:271) · `slopeM` 음수 허용(FC:188 · FP:135-138 끌기 ±10) → 위 · 도로 쪽으로 들어감 · 좌우 `lateralM` ≥ 0(FG:161 · FC:187) · 날개벽 = 측벽 바깥 바닥판 연장(FG:180) → 끝 따라감.
- 현재 박스: 본체 늘 수평(BX:134-137 · 79-7) · 표고 `riseM` 양방향(FC:384 · BP:128-130) → 노면 − 복토 위로 감 · 길이 `lengthM` ≥ 0(FC:388) · 에이프런 = 끝에서 수평(BX:155-166). 근거: BOX 「구체 수평 설치 원칙 · 날개벽은 현지여건」(`횡단배수관_암거.md:77`) · 세월교 수평 원문 없음(박스 준용 · 추정).
- 고칠 자리(② · 3D `B05_Profile_UI_Corridor_Structures.ts:206` · 서버 면적 SL:122 같은 함수): FG `buildSide`(L154-185) — 바닥판 표고 하나(낮은 쪽 노견 노면 − (관경 + 토피) − 내림) · 쪽마다 좌우만 · 측벽 높이는 결과 · FC update(L179-190) 상하 = 양쪽 한 값 · 아래로만 · VF(L38-48) · FP 끌기 축(대각 → 수직) · 박스 FC:384 · BP:130 `riseM ≤ 0` + BX:137 옛 값 자름 · 옛 `ford_adjust`(쪽마다 heightM · slopeM) 읽어 옮김(박스 79-7 평균 꼴).
- 시험: T test_107_ford_free · test_80_ford_pipe · test_65_ford_defaults · test_73_4_body_guard · test_91_ground_free · test_ford_wall_vertical.mjs · test_108_drag_box_hit · test_b06_adjust_single_form. 크기: 중간.
- 위험: 세월교 그림 · 절성토 면적 · B08 관 길이(`ford_pipe_length_m` SL:188) 바뀜 · 6 과 같은 파일(FG · BG).
- ⬜ 「높을 수 없음」 기준: (가) 기본 자리(세월교 노면 − (관경 + 토피) · 박스 노면 − 복토) 위 금지 / (나) 노면 위만 금지 — 추천 (가).
## 10. 관보호공 유입 · 유출 높이 기본 = 관경 + 500 mm
- 현재: 새 관에 정의 기본 1.5 를 실제 값으로 씀(DJ:204-213 · 268-277 「10-6 배관 기본값 표」 · B05 SF:103-113 · 서버 NB:92-121) — 관경 무관 · 폼 · B08(`B08_Quantity_Router_Summary.py:224-226`)은 이 값. 횡단 그림은 손 높이(`revet_adjust.h`)가 없으면 이 값을 안 읽고 관경 + 1.0(관경 + 0.5 를 0.1 올림 + 근입 0.5 · K:140-142 · 162-164 ↔ EC:84-91 ↔ CS:56-60) · 그림 높이를 폼에 안 적음(`A00_Common/design/design_view_cross.ts:155-166`) → **폼 · 수량 1.5 ↔ 그림 관경 + 1.0 어긋남**. 폼을 한 번 고치면 1.5 가 그림으로 감(PO:113-146) → 높이 = 순수 높이(근입 0.5 포함 · K:130-151 · W:86)라 Ø1200 · 1500 벽 윗면이 관 윗면보다 0.2 · 0.5 m 낮음.
- 실자료: 검증_랩탑메인 관 10개 옵션 모두 1.5(Ø800 · 1000 · 1200 · 1500 섞임) · 횡단 `revet_adjust` 0건(DB SELECT · route 281) → 그림은 전부 관경 + 1.0.
- 고칠 자리(① 짝): SF `optionDefaults`(L103) · NB `_apply_new_defaults`(L92 · 추천 관경 뒤)에 `inlet/outlet_revet_height_m = 관경 + 0.5` · DJ 기본 1.5 걷음 + `default_basis` 글 · 관경 바꿀 때 높이 따라감(`A00_Common/design/design_structure_form.ts:194-201` 갈래 기본 길) · 그림이 칸 값을 읽음(K:140-142 `spec.revet_height_m ?? 자동`) · 빈 칸 자동도 같은 규칙이면 K · EC · CS 셋(B08 Summary:561).
- 영향: 옛 관 1.5 — 그림이 칸을 읽으면 Ø1200 · 1500 벽이 관보다 낮아짐 · B08 벽 수량 · 높이 정본 둘(`pipe_points` 옵션 + 횡단 `revet_adjust.h`).
- 시험: T test_b06_pipe_wall_height_mirror(`(1.0) == 2.0` 고정) · test_b05_new_structure_defaults · test_b05_structures_registry_policy · test_52_structure_spec_pipe. 크기: 작음(옛 자료 옮김 넣으면 중간).
- ⬜ ① 「관경 + 500」 = 칸(순수 높이) 관경 + 0.5 → 벽 윗면 = 관 윗면(Ø1000 = 1.5 = 10-6 표) / 칸 = 관경 + 1.0 → 벽 윗면 = 관 윗면 + 0.5(= 지금 그림) — 추천 앞. ② 옛 1.5 이면서 관경 > 1.0 인 관: 관경 + 0.5 로 옮김 / 그대로 — 추천 옮김(그림이 칸을 읽으면 관보다 낮은 벽). ③ 유입 집수정 높이(1.5)도 같은 규칙 — 추천 예(관경 + 토피 못 되면 관이 노면에 닿음).
## 11. 관보호공 연동을 풀면 옆 측점 자동 배치 벽 = 0.1 m 걸음 · 푸는 순간 따로 선 구조물
- 연동 = 벽 연장(전 · 후)이 걸친 옆 측점 카드가 소유 측점 적용 4축(x · d · h · m)을 물려받음(WI:387-445) · 풀면(`revet_link_detached`) 손댄 벽만 자기 값 · 안 댄 벽은 소유 측점 적용값을 계속 따라감(WI:586-600).
- 현재 걸음: 관 기준벽(유입 · 유출) 1 m(SP:107 · VS:153-154 `fineMove` — 연동 여부 안 봄) · 다단 · 독립 0.1(SP:112) · 끌기도 같은 값(SP:489). 푸는 순간: 카드 [연동] = 높이만 굳힘(VS:206-219) · 좌측 관 보호공 [연동](54-30) = 굳힘 없음(LS:113-139 주석) · 첫 조작 뒤 d = null 이면 그 측점 지형으로 자동 자리 + 관 정수 맞춤을 다시 탐(CG:503 · 튐 기록 VW:625-626 · 추정).
- 고칠 자리(②): VS:153 `fineMove` 에 「연동 카드 · 풀림 → 0.1」 · VS:211-217 + LS:137 푸는 순간 그 카드 적용값 전부(x · d · h · m · `culvertCardState` VS:297)를 그 측점 `revet_adjust` 로 씀 → d 가 차서 정수 맞춤 빠짐(CG:503) · 좌측 길은 카드 상태가 없어 SL `computeStoredLayouts` 로 셈(세션 값 빠짐 주의).
- 시험: T test_revet_link_level.mjs · test_73_4_body_guard(연동 옆 벽) · test_revet_span_source · 새 시험. 크기: 작음. 위험: 푼 뒤엔 소유 측점 이동(6 쉬프트 포함)을 안 따라감(의도) · 3D `detachedControlsOf`(`B05_Profile_UI_Corridor_Structures.ts:46`) 같은 값.
- ⬜ 다시 연동하면 굳힌 값 지움(소유 측점 따라감) vs 남김 — 추천 지움.
## 파일 겹침
| 파일 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|
| GT · CD ↔ PG · PD · 파이썬 호출 11곳 · PB · DS · PS · CR · AT · SCH · RD | ● | | | | | |
| CG(700줄) | ● | ● | ● | | | 읽기 |
| SV | ● | | | | | |
| EX · TI · CU | | ● | ● | | | |
| BG | ● | | | ● | | |
| FG · BS | | ● | | ● | | |
| BX · BP · FP · FC · VF | | | | ● | | |
| RV · SC | | ● | | | | |
| SL | ● | | | ● | | ● |
| VS · SP · LS · WI | 짝 조사 UI | | | | | ● |
| K · EC · CS · DJ · SF · NB | | | | | ● | |
## 차례
1. 10 · 11 먼저(작음 · 다른 요구와 파일 안 겹침).
2. 9(FG · FC · BX) → 8(EX · TI · CU · CG) → 7(재현 판정 뒤 · 8 과 같은 줄).
3. 6 마지막 — 짝 조사(선 고름 · 치수 · 하나만) 뒤 · CG 700줄 나눔 먼저(8 을 한 창이 이어 받음) · 9 의 세월교 수평이 서야 「관 길이 자리 → 높이 맞춤」이 세월교에도 한 규칙.
## 찾은 흠(요구 밖)
- (추정) [저장] 이 보통 측점 설계선을 서버에서 다시 안 냄 — 측구 · 지반유형을 바꾼 측점의 B07 그림이 옛 선일 수 있음(RC:108-155 · PB:176-201 · `B07_DesignDetail_Router_Support.py:307`).
- `inletOptions.revetAllowed` 셈만 하고 쓰는 곳 0(CG:194 → VW:653) · 집수정 계류측 3° 선은 그리는데 면적 밖(CU:139-152 ↔ CG:646).
+89
View File
@@ -0,0 +1,89 @@
# 조사 D — B07 평면도 관리 · 글자 겹침 · 축척 · 횡단면도 배치 (10-9 · 읽기 전용 조사 에이전트)
경로 = 프로젝트 루트 기준(`B07/` = `B07_DesignDetail/B07_DesignDetail_` · `CAD/` = `B07_DesignDetail/openwebcad/src/`) · 「추정」 = 코드로 확인 못 한 판단 · 실측 = 검증 프로젝트 `226fc805…` 읽기만 · 글 폭 = 한글 1.0 · 그 밖 0.6 × 글 크기(추정).
## 1. 모달 오른쪽 = CAD 그림만(「Aislo CAD」 줄 · 객체 스냅 줄 걷기)
- 현재: 오른쪽 = 공용 `createCadHost` iframe 한 벌(같은 CAD 앱) + 머리 줄(장 이름 · 확정 배지 · [확정 풀기] · [CAD 에서 열기]) (`B07/UI_PlanManage.ts:62-66 · 119-155`) · 싣기 곁값 `readOnly · viewOnly · hostTitle · ribbonCollapsed · panelsCollapsed`(:137-150) · 보기 전용(끌기 = 옮기기 · 두 번 = 맞춤 · 명령 막힘)은 이미 있음(`CAD/inputController/input-controller.ts:169 · 314`).
- 남는 겉칸: 제목줄 「Aislo CAD · 평면도 미리보기」(`CAD/components/QuickAccessBar.tsx:17-21` — 숨김은 `hostSave` 때만) · 접힌 리본 탭 줄 26 px · 패널 접기 단추(`InspectorPanel.tsx:19-27`) · 확대 막대(`ViewControls.tsx`) · 상태막대 객체 스냅 · 직교 · 극좌표 · 스냅 추적 · 그리드 · 명령행(`StatusBar.tsx:27-77`) — `Toolbar.tsx:45-70` 이 늘 그림 · `viewOnly` 는 입력만 막음 · 「기타 옵션」 = 화면 글 아님(grep 0) → 「그 밖에」로 읽음(추정).
- 고칠 자리: 곁값 새 칸 `bare`(캔버스만) — `ui_template/cad_host/cad_host.ts:65-83` · `CAD/integration/aislo-drawing-bridge.ts:55-72 · 225-229` · `CAD/state.ts`(hostSave 꼴 뿌리 class `:509-514`) · `Toolbar.tsx` bare 면 겉칸 안 그림 + 높이 변수 0(인라인 `:30-43` 이 class 를 이겨 같은 effect 에서) · `CAD/App.css:58-60` 꼴 · `UI_PlanManage.ts:143-149` 에 `bare: true` · CAD `npm run build`.
- 재사용: `hostSave` 제목줄 숨김 길(`state.ts:510-514` · `App.css:58-60`).
- 시험: `resources/tester/test_130_b07_plan_manage.py:53-57`(곁값 bare) + 헬퍼 · CAD vitest `state.test.ts` 한 줄.
- 위험 · 이음매: `viewOnly` 를 넓히면 M02 미리보기도 바뀜(`M02_MasterTemplete/M02_MasterTemplete_Drawing.ts:289` ← `DataFlow/M02_DF_FuncPanel.ts:583` · `M02_MasterTemplete_ItemCards.ts:392`) → 새 칸 · B06 새 요구 「측구 행 모달 · 단순화된 CAD 화면」이 같은 칸을 쓸 수 있음 · iframe 밖 라이선스 한 줄은 그대로(MIT 표기).
- 크기: 작음.
- ⬜ 1-1 M02 미리보기도 같이 걷기 — 추천: B07 만(새 칸).
- ⬜ 1-2 모달 [확정 풀기] — 「조작은 메인」이면 뺌(메인 [수정]과 같은 서버 길) — 추천: 뺌 · 확정 배지 · [CAD 에서 열기]는 둠.
## 2 · 5. 종류 드롭다운 → 상세 · 장 = 작은 단추 · 끌어 순서 · 종류 목록과 한 블록
- 현재 왼쪽(`UI_PlanManage.ts:166-171`): ①「종류 목록」 줄 = 「이름 · n장」 + ×(:77-97) ②「종류」 폼 = 드롭다운(종류 + 새 종류) · 양식 · 축척 · 이름 · 조각 · [업데이트/추가](`B07/UI_PlanKinds.ts:64-140`) — 드롭다운 바꾸면 폼만 바뀜 · 미리보기 그대로(:74 · 113-122) ③ 대피소 · 사토장(:142-195) ④「평면도 장」 = 좌측과 같은 큰 단추(`b07-drawing-button` 폭 100 % · 높이 34 px `B07/UI_Style.css:89-108` · `UI_PlanManage.ts:99-111`).
- 자료: 종류 파일 `plan_kinds/{id}.json` = {name, pieces, order, layout, scale}(`B07/Router_Support_Plan.py:105-113`) · 목록 = order → id 차례(:177) · 순서 바꾸는 길 없음(업데이트는 order 그대로 :255) · 장 id `plan_{종류}`(·`_{n}`)는 순서와 무관(:575-607) · 도면번호 = 서버 목록 차례(종단 → 횡단 → 평면 → 표지 · 표준 · 토적 `B07/Router_Support.py:104-189`) → 종류 순서 바꾸면 평면도 장 번호끼리만 바뀜 · 번호는 그릴 때 도각에 박힘(:395) → 확정 장은 옛 번호.
- 제안 꼴: 맨 위 [종류 ▼] → 아래 상세(양식 · 축척 · 이름 · 조각 · [업데이트] · [지우기] — × 를 여기로) · 드롭다운 고르면 그 종류 첫 장 미리보기 + 줄 강조 / 「평면도 장」 한 블록(종류 목록 흡수) = 종류마다 한 줄 [≡ 손잡이] 이름 [1][2]…(작은 장 단추 · 한 장이면 이름만) · 줄 끌어 놓기 = 종류 순서 · 장 단추 누름 = 미리보기 + 드롭다운 따라감.
- 고칠 자리: `UI_PlanManage.ts`(kindList · sheetList 합침 · 끌기) · `UI_PlanKinds.ts`(kindForm [지우기] · 드롭다운 바뀜 알림) · `UI_Style.css`(작은 단추) · 서버 `reorder_kinds(root, ids)`(`Router_Support_Plan.py` · `_materialize` 뒤 order 다시 씀 · 번호 바뀐 장 확정 풀기 = update_kind 꼴 :264-272) · 라우트는 `/plan-kinds/{kind_id}` 밖 새 길(예 `PUT /{project}/plan-kinds-order` — 「order」가 `KIND_ID`(:74) 꼴에 맞아 종류 업데이트로 빨려 감) · `B07/Api_Fetch.ts:179-232` 곁 함수 하나.
- 재사용: 끌기 = `ui_template/cad_host/cad_host_tabs.ts:245-268`(draggable · 반 넘으면 뒤 · drop) 꼴(세로 clientY) · `groupPlanSheets`(`UI_PlanKinds.ts:198-217`) · `run`(:45-55).
- 시험: `test_130_b07_plan_manage.py` + `helper_130_b07_plan_manage.cjs`(선택자 `.b07-plan-manage__kinds` · `__sheets` :263-268 · 306-338) 고침 · `test_b07_plan_kinds.py` 순서 시험 새로.
- 위험 · 이음매: 좌측 패널 「평면도」(`UI_PlanKinds.ts:220-247`)도 같은 차례로 따라감(단추 크기 그대로) · 모달 고치기는 지금도 단추마다 서버 길 — 놓기 = 누름 한 번(디바운스 자동저장 아님) · 요구 1 과 같은 파일.
- 크기: 중간(화면 약 100줄 · 서버 약 30줄).
- ⬜ 2-1 끄는 단위 — 종류(장들 함께 · 장 안 차례 = 노선 차례) / 장 하나씩(종류 사이 섞기 · 축척 바꾸면 장 수 달라 꼬임) — 추천: 종류.
- ⬜ 2-2 순서 저장 — 놓는 즉시 / [순서 저장] 단추 — 추천: 즉시(이 모달 다른 고치기와 같은 길).
## 3. 평면도 글자 서로 안 겹치게
- 현재 글(종이 mm 고정 자리 `B07/Engine_Cad_PlanKinds.py:393-506`): IP 이름 = 원 밑 3 mm(:437) · R = 곡선 가운데에서 안쪽 4 m 실거리(:352 · 440) · 측점 NO = 5개마다 법선 쪽 8.1 mm(:460-467) · 시종점 = 법선 9 mm(:481) · 대피소 · 사토장 = 네모 오른쪽(:489) · 배수시설 = 마름모 오른쪽(:504-506) · 필지 상자(용지도) · IP 표(도곽 왼쪽 아래 · 밑 선 자름 `B07/Engine_Cad_IpTable.py:174-201`) · 등고선 값 글 없음.
- 겹침 피하기: 필지 상자만 있음(후보 8방향 × 5고리 · 노선 버퍼 · 놓은 상자와 사각 겹침 `B07/Router_Support_Landuse.py:127-190`) · 나머지 없음.
- 실측(장 1 조각 파일 · 1/1,200): 「지형」 기본 종류 글 112 · 겹친 쌍 40(IP–R 21 · R–R 8 · 배수–IP 3 · R–측점 3 · 배수–측점 3 · 배수–R 2 — R=12 곡선 44개가 붙어 있음) · 노선배치도 1(시점 – NO.0) · 대피소 1 · 같은 조각 1/2,500 이면 75쌍.
- 고칠 자리: 새 파일 `B07/Engine_Cad_PlanLabels.py`(약 120줄 · PlanKinds 605줄이라 따로) — 글 사각(폭 = `balloon_size` 글자 규칙 `B07/Engine_Cad_MassHaul.py:182-188`) · 우선순위 차례로 후보 중 첫 빈 자리(못 찾으면 첫 후보 그대로 · `ponytail:` 한도) · 장애물 = IP 표 칸 · 필지 상자 · 제목 · `_piece_entities` 의 `text()`(:393-399)가 바로 그리지 않고 후보째 모음 → `build_plan_kind_drawing`(:529-544)이 자리 정한 뒤 그림.
- 후보: IP = 원 밑 · 위 · 좌 · 우 / R = 안쪽 3 mm → 6 mm → 바깥 / 측점 = 법선 쪽 → 반대 → 접선 ± / 시종점 = 법선 → 반대 / 대피소 · 배수 = 오른쪽 → 왼 · 위 · 아래(멀면 지시선 `_balloon_entities` `Engine_Cad_MassHaul.py:190-`) · 우선순위(제안) 시종점 > 측점 NO > IP > R > 배수 > 대피소.
- 재사용: 필지 상자 사각 겹침 식(`Router_Support_Landuse.py:150-175`) · `balloon_size`.
- 시험: 새 시험(가까운 IP · R · 배수 둘 · NO.0 + 시점 → 사각 겹침 0 · 글 모두 남음) · `test_b07_plan_kinds.py:192-202 · 265-269` · `test_119_b07_plan_scale.py:101-`(글 있음만 봄 → 그대로일 것 · 추정).
- 위험: 서버 단독 계산(CLAUDE.md 5장 ③) · 확정 장은 옛 자리 · 유역도 양식 배지(`B07/Engine_Cad_Basin.py:183-230`)는 범위 밖 · 글 폭 추정이라 여유 둠 · R · 대피소 실거리 띄움(4 · 8 m)을 종이 mm 후보가 대신 → 4 의 축척 늘림과 함께.
- 크기: 중간.
## 4. 축척 더 · 배수유역도 넣고 빼기
- 현재: 목록 `DRAWING_SCALE_PLAN_CHOICES = (600, 1000, 1200)`(`config/config_system.py:189`) · 화면 목록 = 서버 `scales` 한 곳(`B07/Router_PlanKinds.py:58-67` → `UI_PlanKinds.ts:105-110`) · 유역도 양식 1/6,000 잠금(:99-104 · `Router_Support_Plan.py:98-102`) · 배수유역도 = 종류 하나(양식 유역도 · 한 장) — × 로 빼고 「새 종류」 양식 유역도로 다시 넣기 이미 됨(109-1 · `Engine_Cad_PlanKinds.py:79-105`) · 평면도 양식 조각엔 유역 없음(:48-69).
- 축척 근거(지식DB · 값 확정 아님): 1/1,200 법정(`resources/knowledge/original/법률/산림자원의 조성 및 관리에 관한 법률 시행규칙/별표/별표2_산림관리기반시설의 설계 및 시설기준(제5조제1항 관련).md:60`) · 1/1,000(`original/산림과임업기술(임도)/2. 임도/5. 설계.md:205`) · 1/600 용지도(같은 파일 :290) · 평면도 1/300~1/600(`original/원가계산/건설공사_표준품셈/본문/02_토목부문/제09장_측량/9-03_지형_및_토지측량.md:785`) · 1/500 · 1/2,500(같은 파일 :48) · 1/3,000 · 1/6,000 측량원도(`original/사방기술교본/1. 총론/4. 사방사업의 추진체계.md:178`) · 1/5,000 지형도(`original/산림과임업기술(임도)/2. 임도/3. 임도계획.md:67`) · 관행 후보 500~6,000(`config_system.py:168-180` 토적도용).
- 고칠 자리: 축척 = config 한 줄(검사 `_checked_scale` :206-215 · 장 나눔 `plan_kind_items` :575-607 · 화면 자동) · 실거리 상수 축척화 — 비탈 눈금 2 m(`Engine_Cad_PlanKinds.py:133 · 277` — 1/6,000 이면 0.33 mm 간격 = 검은 띠) · 대피소 8 m(`Router_Support_Plan.py:80`) · R 4 m(`PlanKinds.py:352`) · 필지 버퍼 5 m · 틈 2 m(`Router_Support_Landuse.py:34-35`) → 종이 mm × 축척(scale 은 `build_pieces` :430-438 에 있음).
- 배수유역(⬜ 4-2): (A) 평면도 조각 「배수유역 경계」 · 「유역 번호」 추가 — `watershed_source` basins(`B07/Router_Support_Basin.py:491-553`)를 장 범위로 잘라 · 그림은 유역도 해치 · 배지 재사용(`Engine_Cad_Basin.py:161-230`) / (B) 모달에 「배수유역도 넣기」 체크(지금 × · 새 종류와 같은 일).
- 시험: `test_119_b07_plan_scale.py:38-64` · `test_b07_plan_kinds.py`(조각 목록 통째 비교 :245-250 · 373-394 — 조각 늘면 고침) · `test_b07_landuse_parcel_info.py`.
- 위험: 1/5,000 · 1/6,000 평면도 = 범위 3.5~4.2 km — 받은 도엽 밖은 빈칸 · 엔티티 많음(유역도 메모리 흠 기록 `docs/raw/사용자요구/2026-10-05_수정요구.md:350`) · 1/500 은 장 늘어남(검증 노선 1,196 m: 1/500 3장 · 1/600 2장 · 1/1,000 이상 1장).
- 크기: 축척만 작음 · 상수 축척화 작음 · (A) 중간 · (B) 작음.
- ⬜ 4-1 축척 목록 — 추천(근거 있는 것만): 1/500 · 1/600 · 1/1,000 · 1/1,200(기본) · 1/2,500 · 1/3,000 · 1/5,000 · 1/6,000.
- ⬜ 4-2 「배수유역도 옵션선택으로 넣고 빼기」 뜻 — (A) 어느 평면도에나 유역 경계를 체크로 / (B) 배수유역도 한 장 넣고 빼기 — 추천: (A)(「옵션 선택」 = 조각 체크 꼴 · B 는 지금도 됨).
## 6. 축척 따라 평면도 여러 장 — 제안
- 현재: 이미 됨(119) — 종류 축척으로 `plan_chunks`(`B07/Engine_Cad_Plan.py:96-134`) · 노선 차례로 그림칸(약 701 × 477 mm :81-87)에 드는 데까지 · 경계 측점 하나 겹침(:133) · 장 범위 = 구간 가운데 둔 그림칸 크기(`Router_Support_Basin.py:381-395`) · 목록 「지형 1장 · 2장」.
- 빠진 것: 장 이음 표시(맞춤선 · 「→ 2장」) 없음 · 이웃 구간 노선은 범위 안이어도 안 그림(`Router_Support_Basin.py:408-412`) · 장 색인 없음 · 흠: `fits` 가 돌린 방향도 든다고 봄(`Engine_Cad_Plan.py:114-118`)인데 그림은 안 돌림 → 남북 800 m 노선을 1/1,200 한 장으로 보고 종이 701 × 667 mm(그림칸 높이 477 넘침 · 합성 노선 확인 · 실자료 미확인).
- 안: ① 노선 따라 자르기 유지 + 다듬기 — 돌린 맞춤 빼기(한 줄) · 경계 측점에 맞춤선(노선 직각 점선 + 「MATCH LINE NO.x · n장 이어짐」) · 이웃 구간 노선 흐리게 · 도면명 「n/N장」 — 작음~중간 / ② 장마다 구간 주방향을 가로로 돌린 띠 — 장 수 최소 · 방위표 · 배경 · 지적 함께 돎 — 큼 / ③ 격자 타일(도곽 크기 격자 · 노선 지나는 칸만) — 색인 쉬움 · 굽은 노선이면 장 늘음 — 중간.
- 재사용: `plan_chunks` · `route_frame`(`Engine_Cad_PlanKinds.py:148-158`) · `clip_line_to_box`(`Router_Support_Basin.py:143`).
- 시험: `test_119_b07_plan_scale.py:66-75`(장 수) · 맞춤선 새 시험.
- 위험: 장 수 바뀌면 장 id · 도면번호 바뀜(119 받아들임) · 종류마다 장 수 다름 → 2 의 작은 장 단추가 받음.
- ⬜ 6-1 안 — 추천: ①(② 는 장 수가 문제 될 때).
## 7. 횡단면도 장 배치 — 4 × 4 기본 · 장마다 사용자 · 그림칸 꽉 · 축척 그대로
- 현재(`B07/Engine_Cad_Sheet.py`): 블록 = 단면 + 수량표(폭 108 · 높이 40 + 틈 8 mm) 1/100 자기 크기(:61-95) · 좌하단부터 위로 쌓고 넘치면 오른쪽 열(:98-109 · 159-176) · 장 수 최소로 경계 고름(:131-156) · 도각 = 내용 bbox 가운데(:248-256 · `B07/Engine_Template.py:478-525` fit=False) → 내용 작으면 그림칸 가운데 뭉침 · 장마다 측점 수 다름 · 장 id = 첫 측점(:179-204) · 배치 판 `CROSS_SHEET_LAYOUT = 2`(`Router_Support.py:101` · 옛 판 확정 장 「옛 배치」 :409).
- 그림칸 = 양식 칸 `drawing_area` [42, 47, 812, 567](`resources/master_template/drawing/00_template_A1.json` · 프로젝트 양식 우선 `Engine_Template.py:120-134`) − 여백 2 %(`usable_area` :353-360) = 739.2 × 499.2 mm → 4 × 4 칸 184.8 × 124.8 mm(표 빼면 단면 높이 약 7.4 m 까지).
- 실측(기본 설계로 잰 값 · 실제 B06 설계는 DB 라 추정): 73 측점 · 지금 22장(장당 1~14) · 블록 폭 110~797 · 높이 83~690 mm · 60개가 칸보다 큼 → 4 × 4 면 5장 · 겹침 많음(사용자 「일단 무시」).
- 고칠 자리: `Engine_Cad_Sheet.py` — `_stack_columns · _fits · _max_take · _sheet_breaks · _slots`(약 80줄) 지우고 `grid_slots(n, cols, rows)` = 칸 가운데(차례 그대로 좌하단 → 위 → 오른쪽 · 근거 「좌측횡단에서 상단방향」 `resources/knowledge/original/사방기술교본/3. 야계사방/1. 야계사방의 개요.md:143`) · `plan_cross_sheets(chainages, grids)` · `build_cross_sheet` 는 블록 bbox 가운데를 칸 가운데에(:233) · 도각은 고정 그림칸 bbox(:250) / `Router_Support.py:193-218` 블록 크기 재기 빠짐 · 설정 읽기 · `CROSS_SHEET_LAYOUT = 3` / 저장 `B07_DesignDetail/cross_layout.json` = {default [4, 4], sheets {장 번호: [열, 행]}} · 라우트 GET · PUT(`B07/Router.py` 곁) · `Api_Fetch.ts` / 화면 = 장을 열면 좌측 정보 칸(장 안내 자리 `B07/UI_Panels.ts:203-225`)에 「배치 열 [4] × 행 [4] [적용]」 + 「모든 장 기본」 · 적용 = 서버 쓰기 → 목록 다시 · 같은 장 번호 다시 엶.
- 재사용: `usable_area` · `frame_entities(fit=False)` · 첫 측점 id 규칙 · 「옛 배치」 안내.
- 시험: `test_b07_cross_sheet_pad.py:72-110`(블록 1 mm 테두리 · 장 나눔 — 대부분 그대로 · 추정) · `test_b07_cross_overlay_extent.py` · 새 시험(4 × 4 칸 가운데 · 도각 고정 · 1/100 그대로 · 장마다 다른 배치 · 17번째 측점 = 2장).
- 위험 · 이음매: 장 나눔이 단면 크기와 무관 → 장 id 가 설계 · 덧그림에 안 흔들림(옛 흠 `B07/Router.py:500-503` 사라짐 · 목록 때 Node 덧그림 재기 생략 가능 · 추정) · 배치 바꾸면 뒤 장 id · 확정 · 뒤 도면번호(평면 · 표지 등) 바뀜 → B07 단계 완료(횡단 장 전부 확정 `B07/UI_Page.ts:125-127`) 다시 · 구조물 덧그림은 서버 `cross_placements` 따라감(고칠 것 없음 · 추정).
- 크기: 중간.
- ⬜ 7-1 「장마다 배치」 꼴 — (a) 장마다 열 × 행(기본 4 × 4) / (b) 모든 장 한 벌 / (c) 칸 안 단면 끌어 옮기기 — 추천: (a).
- ⬜ 7-2 칸 안 자리 — 칸 가운데 / 표 밑변을 칸 밑에(줄마다 표 가지런) — 추천: 칸 가운데.
## 파일 겹침
| 파일 | 1 | 2·5 | 3 | 4 | 6 | 7 |
|---|---|---|---|---|---|---|
| `B07/UI_PlanManage.ts` | ○ | ○ | | | | |
| `B07/UI_PlanKinds.ts` · `B07/UI_Style.css` | | ○ | | (B) | | |
| `ui_template/cad_host/cad_host.ts` · `CAD/state.ts` · bridge · `Toolbar.tsx` · `App.css` | ○ | | | | | |
| `B07/Engine_Cad_PlanKinds.py` | | | ○ | ○ | ○ | |
| `B07/Router_Support_Plan.py` | | ○ | | ○ | ○ | |
| `B07/Engine_Cad_Plan.py` · `B07/Router_Support_Basin.py` | | | | (A) | ○ | |
| `B07/Router_Support_Landuse.py` | | | | ○ | | |
| `B07/Router_PlanKinds.py` | | ○ | | | | |
| `B07/Api_Fetch.ts` | | ○ | | | | ○ |
| `B07/Engine_Cad_Sheet.py` · `B07/Router_Support.py` · `B07/Router.py` · `B07/UI_Panels.ts` | | | | | | ○ |
| `config/config_system.py` | | | | ○ | | |
| 시험 `test_130` + 헬퍼 | ○ | ○ | | | | |
| 시험 `test_b07_plan_kinds.py` · `test_119_b07_plan_scale.py` | | ○ | ○ | ○ | ○ | |
| 시험 `test_b07_cross_sheet_pad.py` · `test_b07_cross_overlay_extent.py` | | | | | | ○ |
창 나눔(제안): A = 1 · 2 · 5(모달 · CAD 칸 · CAD 빌드) / B = 3 · 4 · 6(평면도 엔진 — 같은 두 파일이라 한 창) / C = 7(횡단 장) · A–B 겹침 = `Router_Support_Plan.py`(A 새 함수 · B `build_pieces` — 다른 자리) · 시험 파일은 새 함수끼리.
@@ -0,0 +1,76 @@
# 조사 E — B05/B06 구조물 조합 고르기 모달 · 연결 = 자료 사본 (10-9 · 읽기 전용 조사 에이전트)
줄임 = `picker*` → `ui_template/ui_template_item_picker*.ts` · `M02/` → `M02_MasterTemplete/` · 「추정」 = 코드로 확인 못 한 판단 · 지난 기록 = 21-3 · 25-2b · 26-2b · 26-3b(`docs/raw/plans/2026-10-01_plan_B05B06한페이지_M02라이브러리_M01고침.md:77-99,405-445` — 9-30 사용자 확정 「마스터 · 회사 · 개인이 바뀌거나 지워져도 프로젝트는 영향 없음 · [재적용]」 :412) · 39-1c(모달 일위대가 카드 10-4) · 43-4(M02 일위대가 카드 10-6).
## 1. 고르기 모달 = 39-1c 옛 꼴 → M02 와 같은 도면 · 일위대가 · 면적산출 카드
- 현재: 「구조물 조합」 [선택](`B05_Profile_UI_Structures_Summary_Row.ts:39-48`) → `bindSummaryPickers`(`B05_Profile_UI_Structures_Groups.ts:263-310`) → `openItemPicker`(`picker.ts:119-362` · B05 · B06 한 벌 `A00_Common/design/design_shared.ts:190`) · 나무 = 마스터 · 세션 회사 · 세션 개인(`M02/M02_MasterTemplete_Router_Items.py:186-188` · 남 개인 없음 · 처음 펼침 마스터 `picker.ts:248`) · 오른쪽 = 그 구조물 사본이 같은 항목이면 사본 · 아니면 원본 층 읽기만(`picker_detail.ts:168-183`).
- 옛 내용 셋: ① 일위대가 카드 = 글 넉 줄(로직 n · 자재 n · 기준 합 · 반영 합 `picker_labor.ts:37-59` · 머리 「보기 부품이 오면 몸을 바꿈」 :4 — 43-4 뒤 안 바꿈) ② 「넣을 값」 카드(`picker_detail.ts:326,332` · M02 엔 없음 · 입력은 일위대가 줄 [옵션]) ③ 머리 「일위대가 {옛 UA 조합 이름}」(`picker_detail.ts:152,161-163` · `picker_data.ts:179-192` · 마스터 SS 7줄 중 2줄 옛 UA 키). 도면 · 면적산출 카드는 이미 M02 와 한 벌(`createItemCards`).
- 그대로 못 쓰는 까닭: M02 일위대가 카드(`M02/M02_MasterTemplete_ItemCards.ts:283-321` · `Labor_Detail` 카드 갈래)는 층 길로만 읽고 셈(`ItemCards.ts:302` · `Labor_Detail.ts:245,643`) · 읽기 전용 = `!editable`(`ItemCards.ts:316,352`) → 모달 `editable = canCopy` 를 그대로 넘기면 원본 층 [저장]이 열림(모달은 원본 층 안 씀 — `test_item_picker_detail.py:177-195`) · 사본 셈(`M02/M02_Item_Prices.py:268-330`)은 줄 꼴 다름(기준 묶음 · 하위 줄 · 로직 자재 없음) · 빈 입력 = 멈춤(:281-301) ↔ M02 = 자동값(`M02/M02_Labor_Doc.py:425`) → 같은 조합도 금액이 다르게 보임.
- 고칠 자리: `picker_detail.ts` `ensureCards`(:318-337) — `labor` 넘김 · 넣을 값 카드 · `picker_labor.ts` 지움 · 머리 = 일위대가번(SU) · `makeSource`(:168-183)에 일위대가 읽기 · 셈 · 면적 / `M02/M02_MasterTemplete_ItemSource.ts:16-26` `labor?: {read, calc}` / `ItemCards.ts:286-321,347-352` 일위대가 카드 = 자료 자리로 읽음 · 읽기 전용 따로 / `Labor_Detail.ts:76-89,245,641-651` 셈 · 면적 주입(없으면 층 길) · 사본 `입력값.json` 을 줄 입력값으로 얹음 / 서버 = 사본 셈을 층 셈 한 벌로 — `M02_Labor_Doc.calc`(:381-416)에 `whole`(사본 `단가.json` · `load_prices`) · 참조 읽기(굳힌 `참조사본`) · 알약(사본 `알약`) 받음 → `M02_Item_Prices.calc` 대체 · `M02/M02_Project_Items_Router.py:180-184` · `picker_project.ts:215-232`(상태 줄) 맞춤.
- 재사용: `createItemCards` · `Labor_Detail`(`card: true` · `readOnly`) · 사본 길 `GET /api/projects/{id}/items/{폴더}/{일위대가|면적}`(`M02_Project_Items_Router.py:134-138`) · 넣을 값 편집기(`picker_edit.ts`).
- 시험: 고칠 = `test_item_picker_detail.py:129-175` · `test_m02_card_shell.py:62-66` · `helper_item_picker_project.cjs`(laborOf) · `test_m02_item_labor.py` · `test_item_copy_complete.py`(calc 꼴) / 새 = 같은 문서 · 같은 단가면 사본 셈 = 층 셈 · 모달 일위대가 카드 읽기 전용.
- 위험 · 이음매: `Labor_Detail.ts` 678줄(조사 A 1 승격 지움과 같은 파일) · `ItemCards.ts` 562줄 · B08 구조물도 모달(`B08_Quantity_UI_Drawing.ts:120-125`)도 같은 카드(일위대가 켜기는 B08 몫) · 처음 펼침 = 개인(조사 A 3 과 맞춤 · 추정) · 로직 이름 · 입력 목록은 지금 M01(`fetchLogicInputs` · 표시만).
- 크기: 큼(화면 중간 + 서버 셈 한 벌 중간).
- ⬜ 물음 1: 「넣을 값」 카드 — ① 지움 · 사본 입력값 고침은 일위대가 카드 [수정] → 지금 편집 화면 ② 그대로 아래에 — 추천 ①.
- ⬜ 물음 2: 사본 셈 빈 입력 — ① M02 와 같이 자동값(「빈 값 n」 붉은 글 그대로) ② 지금처럼 멈춤 — 추천 ①.
## 2. 연결 = 지금 무엇을 남기나 — 참조 + [저장] 때 자료 사본(이미 됨)
| 자리 | 남는 것 | 언제 · 파일:줄 |
|---|---|---|
| `B05_Profile/route/structures.json` · `B04_PreProcess/drainage/edits/pipe_points.json` | 참조 `summary_item {layer, owner, key, name}` · 그룹 `group_items {그룹 id: 참조}` | 고름 = 세션 초안 → [저장] · `common_util/common_util_summary_item.py:1-12` |
| `{프로젝트}/templates/structures/{구조물 id 또는 pipe@측점}[__그룹 id]/` | `집계.json`(SS 줄 · 열 정의) · `도면.json` · `면적.json` · `일위대가.json`(문서 + 담은 로직 M01 줄 + 알약 + `참조사본` 사슬 깊이 8) · `단가.json`(닿는 M01 줄 닫힌 묶음) · `입력값.json` · `고른자재.json` · `manifest.json`(원본 층 · 주인 · 키 · 이름 · 경로 · 원본판 해시 · 가져온날 · 고침) | [저장] 뒤 서버 `safe_sync`(`B05_Profile_Structures_Router.py:280-284` · `B04_PreProcess_Router_Basins.py:425-429`) · 모달 [수정] = 미리 가져옴(`M02_Item_Copy.py:270-284`) · 꼴 `M02_Item_Snapshot.py:1-17,134-152` · `M02_Item_Source.py:91-99,126-160` · `M02_Labor_Ref.py:463-479` |
| `{프로젝트}/templates/{table,drawing,structure,labor,area}/` + `_initial/` | 시스템 양식 통째(연결과 무관한 씨앗 · B08 은 표 변수만 읽음) | 프로젝트 만들 때 `B02_ProjRegister_Repository.py:50` → `M02_Template_Layers.py:372-392` |
- 실측(읽기만): 연결 있는 프로젝트 2 · 연결 7 = 사본 7 · 검증 프로젝트 226fc805 = 구조물 없음 · 관 지점 12 모두 연결 없음 · 사본 폴더 없음 · `2a505e36…/pipe@85.05__grv6lny` 에 `참조사본` SP-000001 · SC-000001 굳음.
- 층이 바뀌면 프로젝트가 따라가는 길:
| 길 | 따라감 | 파일:줄 |
|---|---|---|
| 있는 사본 | 안 씀(같은 항목이면 건너뜀) · 원본 지워도 그대로 | `M02_Item_Snapshot.py:241-242` |
| [재적용] | 사용자 조작 때만 | `M02_Item_Copy.py:230-264` |
| ⚠ 관 지점 옮김 · 노선 바뀐 뒤 [저장] | 폴더 이름 = `pipe@측점` → 옛 사본 지움(고침이면 `_지난/`) · 지금 층에서 새로 복사 | `M02_Item_Snapshot.py:163-166,253-257` · `common_util/common_util_drainage_pipes.py:17` |
| 옛 사본 빈 파일 | 한 번 채움(단가 · 입력값 · 고른자재 없을 때 지금 원본에서) | `M02_Item_Snapshot.py:271-304` |
| ⚠ 사본 셈 · 사전조합 안 로직 알약(배 · 단위) | 지금 M01 읽음 | `M02_Labor_Ref.py:414-424` → `M01_MasterData/M01_MasterData_Store_Combo.py:172` |
| ⚠ 구조물 옵션 그룹 정의 | 지금 정의로 집계표 행 · 사라진 그룹 연결은 뺌 | `M02_Table_Fill.py:146-169` |
| ⚠ B08 열 이름 · 구조물도 모달 | 지금 M02 목록 · 사본 없으면 원본 층 · 원본 지우면 「없음」 | `B08_Quantity_UI_Summary.ts:7,18` · `B08_Quantity_UI_Drawing.ts:58-88,106-109` |
| 마스터 바뀜 배지 · [초기화] | 읽기만 · 사본 안 건드림 | `M02_Item_Copy.py:85-91` · `common_util/common_util_initial_snapshot.py:41-46` |
## 3. 사본 원칙 — 대부분 됨 · 구멍 메움
- 빠진 것: ① 관 지점 사본 이름 = 측점(2 표) ② 사본 실패가 조용함 — 로그만(`M02_Item_Snapshot.py:246-251,261-268`) → 참조만 남고 B08 이 원본 층으로 메움 ③ 사본 셈 일부가 지금 M01 · 꼴 · 빈 입력 규칙이 M02 와 다름(1절) ④ 이력 = 원본 · 원본판(해시) · 가져온날뿐 · 「누가」 없음 · [재적용]은 제자리 덮음 ⑤ 곁 — [개인에 저장]이 일위대가 문서를 안 가져감(`M02_Item_Personal.py:25,80-81`).
- 고칠 자리: ① `sync_snapshots`(`M02_Item_Snapshot.py:224-258`) — 지울 폴더와 새 폴더가 같은 항목 · 같은 그룹 꼬리면 폴더 이름만 바꿈(가까운 측점 먼저) ② `safe_sync` 결과(못만듦)를 저장 응답에 실음(`B05_Profile_Structures_Router.py:280-296` · `B04_PreProcess_Router_Basins.py:425-432`) · B05 [저장] 알림 한 줄 ③ 1절 셈 한 벌 · `combo_pills(row, whole)` ④ manifest `가져온이`(물음 4) · B08 · B09 원천 = 「연결된 사본」 함수 하나(`M02_Item_Snapshot` · 지정 ∩ 같은 항목 사본 · 부분 표시) — 같은 규칙이 `M02_Table_Fill.assign_items`(:627-670) 안에 있음 → 뽑아 씀.
- 재사용: `assignments` · `same_item` · `retire` · `read_snapshot` · `list_items` · `frozen` · `load_prices`.
- 옛 프로젝트: 연결 7 = 사본 7 → 이관 없음(물음 3 ② 면 폴더 이름 바꿈 한 번).
- 시험: `test_structures_summary_snapshot.py` · `test_item_copy_complete.py` · `test_structure_group_items.py` · `test_m02_item_labor.py` / 새 = 관 옮겨 [저장] → 같은 사본(가져온날 · 고침 그대로 · 원본 바꾼 뒤에도) · 못 만듦 알림.
- 위험: `list_items` 는 사본마다 원본을 다시 모음(0.5초쯤 `picker_project.ts:109`) → B08 · B09 원천엔 대조 뺀 읽기 · 같은 항목 관 둘을 함께 옮기면 이름 바꿈이 엇갈릴 수 있음(고침 · 입력값이 다를 때만 차이 · ponytail 한계) · 프로젝트 층 `labor/` 등(시스템 씨앗)을 원천으로 착각 금지.
- 크기: 중간.
- ⬜ 물음 3: 관 지점 사본 이름 — ① 저장 때 옮긴 관을 같은 항목 · 가까운 측점으로 찾아 이름만 바꿈 ② 관 지점 고정 id(스키마 · 화면 `picker_project.ts:48-51` · `B05_Profile_UI_Structures_Groups.ts:275` · B08 · 옛 폴더 이관) — 추천 ①.
- ⬜ 물음 4: 사본 단위 · 이력 — ① 지금처럼 구조물마다 · 이력 = 원본 · 원본판 · 가져온날 + 가져온이 · B09 는 원본 · 원본판 · 입력값이 같으면 호표 하나 ② 조합마다 한 벌 · [재적용] 때 옛 판 `_지난/` 보관 — 추천 ①.
## 4. 「구조물 조합 없는 구조물」 표시
| 경우 | 프로젝트 자료 | 파일:줄 |
|---|---|---|
| 연결 없음 · 구조물 | `summary_item: null` · `group_items: null`(명시) | `B05_Profile_Structures_Repository.py:32,130` |
| 연결 없음 · 관 지점 | 칸 없음 → 읽으면 None | `common_util/common_util_drainage_pipes.py:118-121` |
| 그룹 일부만 | `group_items` 에 그 그룹 id 없음(그룹 목록 = 지금 정의) | `M02_Table_Fill.py:154-165` |
| 연결 있음 · 사본 실패 | 참조만 · 사본 폴더 없음 | `M02_Item_Snapshot.py:246-251` |
| 사본 있음 · 부분 없음 | 그 파일 없음(원본 층에 없던 것) · 셈 = 404 「일위대가 조합이 없는 항목」 | `M02_Item_Source.py:138-148` · `M02_Item_Copy.py:326-328` |
| 화면 | 「미지정」 · 툴팁 「집계표에 안 들어감」 | `common_util/common_util_summary_item.ts:84-93` |
- 판단 규칙 이미 있음: M02 집계표 채움 = 미지정 · 사본 없음 → 표에 안 넣고 알림(`M02_Table_Fill.py:627-670`).
- 빠진 것: B08 집계표는 설계 값으로 열을 세우고 조합은 덧붙임(`B08_Quantity_Router_Summary.py:88-92` 이하 · 짝 조사 몫) · 사본 목록 길에 부분 표시 없음(`M02_Item_Copy.py:94-120`).
- 고칠 자리: 3절 「연결된 사본」 = `{구조물 id: {항목, 폴더, 부분: [도면, 면적, 일위대가]}}` · 없음 = 키 없음 · `list_items` 에 `부분`(파일 있음만 · 원본 대조 없이).
- 크기: 작음.
## 파일 겹침
| 파일 | 1 | 2·3 | 4 | 다른 조사 |
|---|---|---|---|---|
| `picker_detail.ts` · `picker_labor.ts` · `picker_project.ts` · `picker_data.ts` | ● | | | |
| `M02/M02_MasterTemplete_ItemCards.ts` · `M02_MasterTemplete_ItemSource.ts` | ● | | | B08 모달 |
| `M02/M02_MasterTemplete_Labor_Detail.ts` | ● | | | 조사 A 1 |
| `M02/M02_Labor_Doc.py` · `M02_Item_Prices.py` · `M02_Labor_Ref.py` · M01 `Store_Combo.py` | ● | ● | | 조사 A 1 · 원가산출 |
| `M02/M02_Project_Items_Router.py` · `M02_Item_Copy.py` | ● | ● | ● | |
| `M02/M02_Item_Snapshot.py` | | ● | ● | |
| `M02/M02_Table_Fill.py` | | ● | ● | B08 짝 |
| `B05_Profile_Structures_Router.py` · `B04_PreProcess_Router_Basins.py` | | ● | | |
| `B08_Quantity_UI_Drawing.ts` · `B08_Quantity_UI_Summary.ts` · `B08_Quantity_Router_Summary.py` | 이음 | ● | ● | B08 짝 |
| `M02/M02_Item_Personal.py` | | ●(곁) | | |
@@ -0,0 +1,343 @@
# 조사 F 부록 — 원가산출 엑셀 탭표 (10-9 · 읽기 전용 조사 에이전트)
본문 = 같은 폴더 `조사_F_원가산출엑셀.md` · 원본 = `resources/knowledge/original/실무문서/2024년 간선임도(기번3-울진.대흥)(공통)/1. 설계원본/01 내역자료/2024년 간선임도사업(기번3).xlsx` · 셀 = `탭!셀` · 「추정」 = 엑셀로 확인 못 한 판단 · 표는 스크립트로 셀을 전수로 읽어 만듦(사본 · 원본 안 고침).
## A1. 탭별 칸 (머리 줄 · 보이는 칸 · 숨은 칸)
| 탭 | 머리 | 보이는 칸 | 숨은 칸 · 키 칸 | 이동 칸 |
|---|---|---|---|---|
| 공사원가계산서 | 3~4 | A~C 구분(순공사원가 › 재료비·노무비·경비 › 세목 병합) · D 금액 · E 구성비 · F 비고(산식 글) | G 탭 이름 `CELL("filename")` | H |
| 총괄설계내역서 | 3 | A 공종 · B 명칭 · C 규격 · D 합계 · E 노무비 · F 재료비 · G 경비 | H STmate 메타(DTP 비목 번호 · SRE 밑수 기호) · I 보정 · 관급 원값 · J/L 보정 전 · 후 검산 · M 요율 · N 기초액 · O 조달수수료 · P 0 | Q |
| 설계내역서 | 3~4 | A 공종 · B 명칭 · C 규격 · D 수량 · E 단위 · F/G 합계 단가 · 금액 · H/I 노무 · J/K 재료 · L/M 경비 · N 비고(「대가 5호표」 · 「산근 13호표」 · 「자재 28」) | O 메타(COD 코드 · END 블록 끝) · P 자기 키(E2_1 · B00194_1) · Q 부모 키 · 254줄 숨김(순공사비계 = SUMIF "E10_1") | AC |
| 일위대가목록표 · 단가산출근거목록표 · 중기목록표 | 3 | A 호표 · B 명칭 · C 규격 · D 단위 · E 합계 · F 노무 · G 재료 · H 경비 · I 비고 | J 메타(COD · DET = 블록 첫줄) | K |
| 일위대가표 · 중기사용료 | 3~4 | A 명칭 · B 규격 · C 수량 · D 단위 · E/F 합계 · G/H 노무 · I/J 재료 · K/L 경비(단가 · 금액) · M 비고(「노무 6」 · 「별산자재 14」) | N 블록 메타(BDCOD · POSS · POSE) · O 자기 키 · P 부모 키(T7_1 = 합계 대상 · _1 = 품셈 인용 줄 · 합계 밖) | Z |
| 단가산출근거 | 3~4 | A 공종(출처 표 「자재 7M」 「노무 5L」 「중기 15S」) · B 산출내역(풀이 글 = 식) · C 합계 · D 노무 · E 재료 · F 경비 | G 메타 · H QTY · I 단가 합 · J L(노무) · K M(재료) · L S(경비) 단가 · M 자기 키 · N 꼬리표(T1 소계 · T2 계 · T3 합계 · T7 총계) · O 기계 분해 번호(1_01~03) · X 원본 명칭 | Y · Z~AS 연두 입력(수량 · 계수 · 식 조각) |
| 환율및기초자료 | 2 · 11 | 1 환율(100,000$ 미만 · 이상 · 유로 · 엔) · 2 인건비(운전사 3 일당 → 시간) · 3 단가 및 재료비(6) | I 탭 이름 | J |
| 재료비 · 노무비 · 경비목록표 | 3 | A 호표 · B 명칭 · C 규격 · D 단위 · E 단가 · F 비고 | G 메타(COD · BQC 적용월 · EDT 판) | H |
| 자재단가대비표 | 3~4 | A~D · E/F 조달가격 · G/H 물가정보 · I/J 물가자료 · K/L 적산정보 · M/N 견적단가(단가 · 페이지) · O/P 적용 단가 · 출처 · Q 비고 | R 메타 · T 이전단가 · U/V/W 최소단가 위치 · 값 · 출처 · X/Y 출처 이름표 | S |
| 재료비 · 노무비 · 경비 수량금액집계표 | 3 | A 호표 · B 명칭 · C 규격 · D 수량 · E 단위 · F 단가 · G 금액 · H 비고 | I | J |
| 중기시간금액집계표 | 3 | A~E · F 합계 · G 노무 · H 재료 · I 경비 · J 비고 | K | L |
| 〓 INITIAL 〓 | 5 | 탭 정보(탭 · 열 이름 지도) · 공사정보(M_VER 24.02 · PNAME) · 초기값(환율 · 운전사 계수 `1/8*16/12*25/20` · 대상 직종 L00018 · L00020 · L00021) · 인쇄 이름(JMKN1~6 출처 이름) · PREP(w24.04 · 2024-04-05) | 77줄 숨김 | - |
## A2. 하이퍼링크 갈래 19 (HYPERLINK 식 1,278 + 셀 링크 36)
| 갈래 | 출발 → 도착 | 개수 | 꼴 · 예 |
|---|---|---|---|
| 목차 → 탭 | 목차 D4~D22 → 각 탭 A1 | 19 | `HYPERLINK("#"&공사원가계산서!G2&"!A1", …)` — 탭 이름은 숨은 칸이 `CELL("filename")` 로 냄(탭 이름이 바뀌어도 링크 삶) |
| 탭 → 목차 | 18 탭 오른쪽 위 → 목차 B2 | 18 | 「목차 →」 |
| 안내 → 오류 위치 | 안내 B12 · B16~B22 → 산근 Y3(연두 칸) · 내역 A253 · 총괄 I62 · 대가 I18 · I27 · I235 · 산근 B21 · 중기 I106 | 8 | 「%단위(M% · L%) 는 산식을 넣을 수 없음 → 손료계산 꼴로」 6 · 「이윤보정 임의조정」 1 · 연두 칸 안내 1 |
| 원가 → 총괄 | 원가계산서 H5~H29 → 총괄 D · E · F · G 해당 줄 | 20 | 「총괄표 →」 |
| 총괄 → 내역 | 총괄 Q4~Q48 → 설계내역서 제목 줄 | 45 | 「내역 →」 |
| 내역 → 대가 목록 | 설계내역서 AC → 일위대가목록표 | 45 | 「대가 5 →」 |
| 내역 → 산근 목록 | 설계내역서 AC → 단가산출근거목록표 | 67 | 「산근 13 →」 |
| 내역 → 자재 | 설계내역서 AC → 재료비목록표 | 25 | 「자재 28 →」(조달수수료 줄 포함) |
| 대가 목록 → 대가표 | 일위대가목록표 K → 일위대가표 블록 머리 | 34 | 「대가 1 →」 |
| 대가표 → 아래 | 일위대가표 Z → 자재 34 · 노무 29 · 중기 11 · 산근 69 · 대가 28 | 171 | 줄마다 하나 |
| 산근 목록 → 산근 | 단가산출근거목록표 K → 단가산출근거 블록 머리 | 46 | 「산근 1 →」 |
| 산근 → 아래 | 단가산출근거 Y → 자재 10 · 노무 19 · 중기 212 · 경비 4 · 산근 1 | 246 | 중기는 노 · 재 · 경 세 줄 각각 |
| 중기 목록 → 중기사용료 | 중기목록표 K → 중기사용료 블록 머리 | 25 | 「중기 1 →」 |
| 중기사용료 → 아래 | 중기사용료 Z → 경비 29 · 환율및기초자료 23 · 자재 44 | 96 | 운전사 노임은 기초자료로 감 |
| 기초자료 → 목록 | 환율및기초자료 J → 노무 6 · 자재 3 | 9 | |
| 자재 목록 ↔ 대비표 | 재료비목록표 H → 자재단가대비표 46 · 대비표 S → 재료비목록표 46 | 92 | 서로 |
| 집계표 → 목록 | 집계표 J · L → 자재 28 · 노무 9 · 경비 2 · 중기 23 | 62 | |
| 블록 메타 | 일위대가표 N5 · 단가산출근거 G5 · 중기사용료 N5 꼴(자기 블록 끝줄로) | 105 | 보이는 글 = `BDCOD 코드 · POSS 첫줄 · POSE 끝줄` — 호표 코드(B · D · X) ↔ 줄 범위 지도 |
| INITIAL | INITIAL E~X → 각 탭 머리 칸 · 첫줄 · 끝줄 | 145 | STmate 재등록 지도 |
| 셀 링크(식 아님) | 18 탭 머리 「STmate」 두 칸 → http://www.stma.co.kr/ | 36 | 내용과 무관 |
## A3. 탭 사이 식 (값 읽기 · 목차 · INITIAL 제외)
| 읽는 탭 · 칸 | 대상 탭 · 칸 | 식 수 | 대표 식 (셀) |
|---|---|---|---|
| 공사원가계산서 D | 총괄설계내역서 F | 1 | `=총괄설계내역서!F48-D6+D7` (D5) |
| 공사원가계산서 D | 총괄설계내역서 E | 1 | `=총괄설계내역서!E48` (D9) |
| 공사원가계산서 D | 총괄설계내역서 D | 17 | `=총괄설계내역서!D49` (D10) |
| 공사원가계산서 D | 총괄설계내역서 G | 1 | `=총괄설계내역서!G48` (D12) |
| 공사원가계산서 F | 총괄설계내역서 E | 11 | `=총괄설계내역서!E49` (F10) |
| 공사원가계산서 F | 총괄설계내역서 M | 3 | `="순공사원가 x "&ROUND(총괄설계내역서!M60,5)&"%"` (F23) |
| 총괄설계내역서 D | 설계내역서 G | 45 | `=설계내역서!G5` (D4) |
| 총괄설계내역서 E | 설계내역서 I | 45 | `=설계내역서!I5` (E4) |
| 총괄설계내역서 F | 설계내역서 K | 45 | `=설계내역서!K5` (F4) |
| 총괄설계내역서 G | 설계내역서 M | 45 | `=설계내역서!M5` (G4) |
| 설계내역서 H | 일위대가목록표 F | 45 | `=일위대가목록표!F8` (H9) |
| 설계내역서 H | 단가산출근거목록표 F | 67 | `=단가산출근거목록표!F16` (H14) |
| 설계내역서 J | 일위대가목록표 G | 45 | `=일위대가목록표!G8` (J9) |
| 설계내역서 J | 단가산출근거목록표 G | 67 | `=단가산출근거목록표!G16` (J14) |
| 설계내역서 J | 재료비목록표 E | 24 | `=재료비목록표!E31` (J57) |
| 설계내역서 L | 일위대가목록표 H | 45 | `=일위대가목록표!H8` (L9) |
| 설계내역서 L | 단가산출근거목록표 H | 67 | `=단가산출근거목록표!H16` (L14) |
| 일위대가목록표 E | 일위대가표 F | 34 | `=일위대가표!F11` (E4) |
| 일위대가목록표 F | 일위대가표 H | 34 | `=일위대가표!H11` (F4) |
| 일위대가목록표 G | 일위대가표 J | 34 | `=일위대가표!J11` (G4) |
| 일위대가목록표 H | 일위대가표 L | 34 | `=일위대가표!L11` (H4) |
| 일위대가목록표 J | 일위대가표 A | 34 | STmate 메타(코드 B00049 · 블록 첫줄) (J4) |
| 일위대가표 G | 노무비목록표 E | 29 | `=노무비목록표!E9` (G10) |
| 일위대가표 G | 중기목록표 F | 11 | `=중기목록표!F15` (G19) |
| 일위대가표 G | 단가산출근거목록표 F | 69 | `=단가산출근거목록표!F33` (G52) |
| 일위대가표 G | 일위대가목록표 F | 28 | `=일위대가목록표!F7` (G54) |
| 일위대가표 I | 재료비목록표 E | 31 | `=재료비목록표!E17` (I8) |
| 일위대가표 I | 중기목록표 G | 11 | `=중기목록표!G15` (I19) |
| 일위대가표 I | 단가산출근거목록표 G | 69 | `=단가산출근거목록표!G33` (I52) |
| 일위대가표 I | 일위대가목록표 G | 28 | `=일위대가목록표!G7` (I54) |
| 일위대가표 K | 중기목록표 H | 11 | `=중기목록표!H15` (K19) |
| 일위대가표 K | 단가산출근거목록표 H | 69 | `=단가산출근거목록표!H33` (K52) |
| 일위대가표 K | 일위대가목록표 H | 28 | `=일위대가목록표!H7` (K54) |
| 단가산출근거목록표 E | 단가산출근거 C | 46 | `=단가산출근거!C109` (E4) |
| 단가산출근거목록표 F | 단가산출근거 D | 46 | `=단가산출근거!D109` (F4) |
| 단가산출근거목록표 G | 단가산출근거 E | 46 | `=단가산출근거!E109` (G4) |
| 단가산출근거목록표 H | 단가산출근거 F | 46 | `=단가산출근거!F109` (H4) |
| 단가산출근거목록표 J | 단가산출근거 A | 46 | STmate 메타(코드 D00006 · 블록 첫줄) (J4) |
| 단가산출근거 J | 노무비목록표 E | 19 | `=노무비목록표!E8` (J30) |
| 단가산출근거 J | 중기목록표 F | 69 | `=중기목록표!F18` (J43) |
| 단가산출근거 J | 단가산출근거목록표 F | 1 | `=단가산출근거목록표!F7` (J1997) |
| 단가산출근거 K | 재료비목록표 E | 10 | `=재료비목록표!E10` (K13) |
| 단가산출근거 K | 중기목록표 G | 69 | `=중기목록표!G18` (K45) |
| 단가산출근거 K | 단가산출근거목록표 G | 1 | `=단가산출근거목록표!G7` (K1997) |
| 단가산출근거 L | 중기목록표 H | 74 | `=중기목록표!H18` (L47) |
| 단가산출근거 L | 경비목록표 E | 4 | `=경비목록표!E24` (L980) |
| 단가산출근거 L | 단가산출근거목록표 H | 1 | `=단가산출근거목록표!H7` (L1997) |
| 단가산출근거 X | 재료비목록표 B | 10 | `=재료비목록표!B10&" / "&재료비목록표!C10` (X13) |
| 단가산출근거 X | 재료비목록표 C | 10 | `=재료비목록표!B10&" / "&재료비목록표!C10` (X13) |
| 단가산출근거 X | 노무비목록표 B | 19 | `=노무비목록표!B8&" / "&노무비목록표!C8` (X30) |
| 단가산출근거 X | 노무비목록표 C | 19 | `=노무비목록표!B8&" / "&노무비목록표!C8` (X30) |
| 단가산출근거 X | 중기목록표 B | 212 | `=중기목록표!B18&" / "&중기목록표!C18` (X43) |
| 단가산출근거 X | 중기목록표 C | 212 | `=중기목록표!B18&" / "&중기목록표!C18` (X43) |
| 단가산출근거 X | 경비목록표 B | 4 | `=경비목록표!B24&" / "&경비목록표!C24` (X980) |
| 단가산출근거 X | 경비목록표 C | 4 | `=경비목록표!B24&" / "&경비목록표!C24` (X980) |
| 단가산출근거 X | 단가산출근거목록표 B | 1 | `=단가산출근거목록표!B7&" / "&단가산출근거목록표!C7` (X1997) |
| 단가산출근거 X | 단가산출근거목록표 C | 1 | `=단가산출근거목록표!B7&" / "&단가산출근거목록표!C7` (X1997) |
| 환율및기초자료 D | 노무비목록표 E | 3 | `=노무비목록표!E10` (D6) |
| 환율및기초자료 F | 노무비목록표 E | 3 | `=노무비목록표!E10` (F12) |
| 환율및기초자료 F | 재료비목록표 E | 3 | `=재료비목록표!E4` (F15) |
| 중기목록표 E | 중기사용료 F | 25 | `=중기사용료!F11` (E4) |
| 중기목록표 F | 중기사용료 H | 25 | `=중기사용료!H11` (F4) |
| 중기목록표 G | 중기사용료 J | 25 | `=중기사용료!J11` (G4) |
| 중기목록표 H | 중기사용료 L | 25 | `=중기사용료!L11` (H4) |
| 중기목록표 J | 중기사용료 A | 25 | STmate 메타(코드 X00001 · 블록 첫줄) (J4) |
| 중기사용료 G | 환율및기초자료 G | 23 | `=환율및기초자료!G6` (G8) |
| 중기사용료 I | 재료비목록표 E | 23 | `=재료비목록표!E5` (I9) |
| 중기사용료 K | 경비목록표 E | 29 | `=경비목록표!E4` (K7) |
| 재료비목록표 E | 자재단가대비표 O | 46 | `=자재단가대비표!O5` (E4) |
| 재료비목록표 G | 자재단가대비표 A | 46 | STmate 메타(코드 M00001 · 블록 첫줄) (G4) |
| 재료비수량금액집계표 F | 재료비목록표 E | 28 | `=재료비목록표!E6` (F4) |
| 노무비수량금액집계표 F | 노무비목록표 E | 9 | `=노무비목록표!E4` (F4) |
| 경비수량금액집계표 F | 경비목록표 E | 2 | `=경비목록표!E19` (F4) |
| 중기시간금액집계표 G | 중기목록표 F | 23 | `=ROUND(D4*중기목록표!F4,0)` (G4) |
| 중기시간금액집계표 H | 중기목록표 G | 23 | `=ROUND(D4*중기목록표!G4,0)` (H4) |
| 중기시간금액집계표 I | 중기목록표 H | 23 | `=ROUND(D4*중기목록표!H4,0)` (I4) |
- 「식 수」 = 그 칸에서 대상 탭을 부르는 식 개수 · 중기는 노 · 재 · 경 세 칸이라 줄 수 × 3.
## A4. 일위대가 34 호표 (꼴 = 다른 호표를 부르면 「조합」 · 아니면 「품셈」 · 줄 = 자재 · 노무 · 중기 · %)
| 호표 | 코드 | 명칭 · 규격 | 단위 | 꼴 | 품셈 인용 | 줄(자재·노무·중기·%) | 참조 호표 | 단가 계(노·재·경) |
|---|---|---|---|---|---|---|---|---|
| 대가1 | B00049 | 모르터바르기 1:3 | m3 | 품셈 | 건설표준품셈 6-1-4(모르타르) | 2·1·0·0 | | 109,259 (109,259·0·0) |
| 대가2 | B00064 | 파형강관부설 D=800mm | m | 품셈 | 건설표준품셈 6-7-2 | 1·2·1·1 | | 16,001 (15,002·584·415) |
| 대가3 | B00065 | 파형강관부설 D=1000mm | m | 품셈 | 건설표준품셈 6-7-2 | 1·2·1·1 | | 20,785 (19,553·733·499) |
| 대가4 | B00135 | 글자새김 자당 6*6 | 자 | 품셈 | | 0·1·0·0 | | 20,714 (20,714·0·0) |
| 대가5 | B00194 | 규준틀설치 종단규준틀 | 개소 | 품셈 | | 3·2·0·0 | | 25,821 (21,936·3,885·0) |
| 대가6 | B00353 | 찰쌓기(켜쌓기) L3=55cm이하 | m2 | 품셈 | 건설표준품셈 7-1-2(찰쌓기) | 0·2·1·0 | | 52,995 (39,641·4,939·8,415) |
| 대가7 | B00363 | 임도준공표지석 30x20x60 | 개소 | 조합 | | 1·0·0·0 | 산근30 산근29 대가4 | 434,146 (422,134·11,676·336) |
| 대가8 | B00467 | 규준틀설치 횡단규준틀 | 개소 | 품셈 | | 3·2·0·0 | | 39,974 (33,032·6,942·0) |
| 대가9 | B00839 | 찰붙임 L3=55cm이하 | m2 | 품셈 | 건설표준품셈7-2-2 찰붙임 | 0·2·1·0 | | 52,943 (42,556·3,842·6,545) |
| 대가10 | B00866 | 찰붙임 L3=35cm이하 | m2 | 품셈 | 건설표준품셈 7-2-2(찰붙임) | 0·2·1·0 | | 58,239 (47,358·4,025·6,856) |
| 대가11 | B00884 | 메쌓기(켜쌓기) L3=55cm이하 | m2 | 품셈 | 건설표준품셈 7-1-1(메쌓기) | 0·2·1·0 | | 68,835 (50,534·6,769·11,532) |
| 대가12 | B01143 | 제근 밀림(90㎥/ha) | m2 | 품셈 | 임도표준품셈 2-3.제근 | 0·1·1·0 | | 759 (472·126·161) |
| 대가13 | B01146 | 수로형토사개거 | 개소 | 조합 | | 0·0·0·0 | 산근14 산근19 | 3,969 (2,284·738·947) |
| 대가14 | B01147 | 돌붙임(채집) 찰붙임 L3=45 | m2 | 조합 | | 0·0·0·0 | 산근11 대가9 산근10 산근30 대가1 | 101,522 (77,755·9,519·14,248) |
| 대가15 | B01155 | 관보호공(Φ800m/m) 동물이동통로 돌집수정ㄴ형 | 개소 | 조합 | | 1·0·0·0 | 산근11 산근18 대가6 대가10 대가21 산근30 대가1 산근7 산근6 산근10 | 1,216,838 (919,291·121,969·175,578) |
| 대가16 | B01156 | 관보호공(Φ800m/m) 동물이동통로 돌집수정ㄷ형 | 개소 | 조합 | | 1·0·0·0 | 산근11 산근18 대가6 대가10 대가21 산근30 대가1 산근7 산근6 산근10 | 1,937,206 (1,445,580·201,781·289,845) |
| 대가17 | B01180 | 돌기슭막이(찰쌓기,기초무,구입) H=1.5 L3=45cm | m | 조합 | | 2·0·0·0 | 대가6 산근10 산근6 산근7 산근30 대가1 | 124,594 (96,868·11,309·16,417) |
| 대가18 | B01183 | 돌기슭막이(메쌓기,기초무,구입) H=2.0 L3=45cm | m | 조합 | | 1·0·0·0 | 대가11 산근10 산근6 산근7 | 167,328 (122,311·16,797·28,220) |
| 대가19 | B01184 | 돌기슭막이(메쌓기,기초무,구입) H=2.5 L3=45cm | m | 조합 | | 1·0·0·0 | 대가11 산근10 산근6 산근7 | 209,104 (152,845·20,992·35,267) |
| 대가20 | B01189 | 물넘이 집수부 | 개소 | 조합 | | 1·0·0·0 | 산근34 대가21 산근32 | 183,054 (161,788·17,427·3,839) |
| 대가21 | B01190 | 콘크리트비빔 기계비빔40mm | m3 | 조합 | 건설표준품셈 6-1-2(현장비빔 타설) | 3·2·0·0 | 산근4 | 122,871 (121,559·1,008·304) |
| 대가22 | B01191 | 콘크리트포장(t=0.2m) 물넘이 | m2 | 조합 | | 0·0·0·0 | 대가21 산근33 | 30,193 (29,769·201·223) |
| 대가23 | B01192 | 포장거푸집 T=20cm(양면) | m | 조합 | 건설표준품셈 6-3-3(유로폼) | 1·0·0·0 | 산근29 | 14,653 (12,654·1,620·379) |
| 대가24 | B01195 | 돌기슭막이(찰쌓기,기초무,구입) H=2.0 L3=45cm | m | 조합 | | 2·0·0·0 | 대가6 산근10 산근6 산근7 산근30 대가1 | 166,262 (129,370·15,059·21,833) |
| 대가25 | B01196 | 돌기슭막이(찰쌓기,기초무,구입) H=2.5 L3=45cm | m | 조합 | | 2·0·0·0 | 대가6 산근10 산근6 산근7 산근30 대가1 | 207,377 (161,284·18,804·27,289) |
| 대가26 | B01197 | 돌기슭막이(메쌓기,기초무,구입) H=1.5 L3=45cm | m | 조합 | | 1·0·0·0 | 대가11 산근10 산근6 산근7 | 125,801 (91,958·12,627·21,216) |
| 대가27 | B01198 | 메붙임 L3=55cm이하 | m2 | 품셈 | 건설표준품셈 7-2-1 | 0·2·1·0 | | 61,277 (49,406·4,391·7,480) |
| 대가28 | B01199 | 돌붙임(채집) 메붙임 L3=45 | m2 | 조합 | | 0·0·0·0 | 산근11 대가27 산근10 | 95,396 (70,407·9,866·15,123) |
| 대가29 | B01201 | 파형강관부설 D=1200mm | m | 품셈 | | 1·2·1·1 | | 25,257 (23,801·874·582) |
| 대가30 | B01202 | 기슭막이(H=2.0m)구입 깬돌, 찰쌓기 L3=45 | m | 조합 | | 2·0·0·0 | 대가6 산근10 산근6 산근7 산근29 산근45 산근30 대가1 | 205,678 (163,125·18,909·23,644) |
| 대가31 | B01203 | 기슭막이(H=1.5m)채집 깬돌, 메쌓기 L3=45 | m | 조합 | | 0·0·0·0 | 산근11 대가11 산근10 산근7 산근6 산근29 산근45 | 212,941 (154,426·24,486·34,029) |
| 대가32 | B01204 | 기슭막이(H=2.0m)채집 깬돌, 메쌓기 L3=45 | m | 조합 | | 0·0·0·0 | 산근11 대가11 산근10 산근7 산근6 산근29 산근45 | 270,275 (194,290·31,308·44,677) |
| 대가33 | B01207 | 돌붙임(구입) L3=35 (찰붙임) | m2 | 조합 | 건설표준품셈 7-2-2찰붙임 | 1·2·1·0 | 대가1 산근30 산근10 | 72,985 (61,083·4,489·7,413) |
| 대가34 | B01208 | 돌붙임(채집) L3=35 (메붙임) | m2 | 조합 | 건설표준품셈 7-2-1메붙임 | 0·2·1·0 | 산근18 산근10 | 98,653 (73,921·9,751·14,981) |
- 내역이 바로 쓰는 대가 26 · 대가 안에서만 쓰는 대가 8(1 · 4 · 6 · 9 · 10 · 11 · 21 · 27).
## A5. 산근 46 호표 (꼴 = 스크립트 자동 분류 · 추정 포함 · 쓰임 = 부르는 줄 수)
| 산근 | 명칭 · 규격 / 단위 | 꼴 | 참조(줄 수) | 쓰임 | 총계(노·재·경) |
|---|---|---|---|---|---|
| 1 | 암발파 TYPE-V / m3 | 작업량식 Q→1/Q · % 줄 2 | 자재·2, 노무·2, 중기·9 | 내역·3 | 11,237 (4,243·5,499·1,495) |
| 2 | 측구파기(토사) 굴삭기0.4m3 / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·3 | 2,334 (1,487·410·437) |
| 3 | 구조물터파기(연암) 대형브레카+B/H0.7㎥ / m3 | 작업량식 Q→1/Q | 중기·6, 자재·1 | 내역·3 | 35,404 (18,430·6,085·10,889) |
| 4 | 콘크리트믹서사용 0.45 m3 / m3 | 작업량식 Q→1/Q | 중기·3 | 대가·1, 산근·1 | 7,528 (6,216·1,008·304) |
| 5 | 노면정리 굴삭기 0.7m3 / m2 | 작업량식 Q→1/Q | 중기·3 | 내역·3 | 418 (241·77·100) |
| 6 | 뒷채움 150m/m 내외 / m3 | 품 × 단가 | 노무·1, 중기·3 | 대가·11 | 8,328 (6,878·538·912) |
| 7 | 막자갈채집 기계 / m3 | 작업량식 Q→1/Q | 중기·6 | 대가·11 | 12,701 (7,908·1,963·2,830) |
| 8 | 유용토운반 무대 / m3 | 품 × 단가 | - | 내역·3 | 0 (0·0·0) |
| 9 | 성토사면다짐 굴삭기0.7m3 / m2 | 품 × 단가 | 중기·3 | 내역·3 | 1,290 (716·231·343) |
| 10 | 고임돌채집 기계 / m3 | 작업량식 Q→1/Q | 중기·3 | 대가·15 | 24,816 (18,084·2,498·4,234) |
| 11 | 야면석채집 L3=45cm내외 / m2 | 작업량식 Q→1/Q | 중기·9 | 대가·6 | 30,398 (18,289·5,101·7,008) |
| 12 | 측구파기(연암) 대형브레카+B/H0.7㎥ / m3 | 작업량식 Q→1/Q | 중기·6, 자재·1 | 내역·3 | 35,404 (18,430·6,085·10,889) |
| 13 | 절토(토사) 굴삭기0.7m3 / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·3 | 1,939 (1,116·360·463) |
| 14 | 구조물터파기(토사) 굴삭기0.7m3 / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·3, 대가·1 | 1,641 (944·305·392) |
| 15 | 구조물 되메우기 굴삭기0.7m3 / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·3 | 1,421 (818·264·339) |
| 16 | 절토(연암) 굴삭기0.7m3+대형브레카 / m3 | 작업량식 Q→1/Q | 중기·6, 자재·1 | 내역·3 | 23,875 (12,397·4,097·7,381) |
| 17 | 파쇄석운반(울진군 울진읍 대흥리) L=80.00km / ton | 운반=경비로 적용 · 비교(제외금액) | 중기·7, 경비·1 | 내역·3 | 35,460 (0·0·35,460) |
| 18 | 야면석채집 L3=35cm내외 / m2 | 작업량식 Q→1/Q | 중기·9 | 대가·3 | 29,098 (17,543·4,874·6,681) |
| 19 | 다지기 굴삭기0.7m3 / m3 | 작업량식 Q→1/Q | 중기·3 | 대가·1 | 1,279 (736·238·305) |
| 20 | 사토처리 / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 1,023 (589·190·244) |
| 21 | 중기운반(울진군 울진읍 대흥리) L=19.00km / 대 | 운반=경비로 적용 | 중기·3 | 내역·3 | 535,090 (0·0·535,090) |
| 22 | 모래운반(울진군 울진읍 대흥리) L=16.40km / m3 | 운반=경비로 적용 · 비교(제외금액) | 중기·8 | 내역·3 | 18,383 (0·0·18,383) |
| 23 | 자갈운반(울진군 울진읍 대흥리) L=16.40km / m3 | 운반=경비로 적용 · 비교(제외금액) | 중기·8 | 내역·3 | 19,453 (0·0·19,453) |
| 24 | 시멘트운반(울진군 울진읍 대흥리) L=19.00km / 대 | 운반=경비로 적용 | 경비·1, 노무·1 | 내역·3 | 2,499 (0·0·2,499) |
| 25 | 도자운반-토사 L=40.94m / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 2,049 (906·600·543) |
| 26 | 도자운반-암 L=39.13m / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 2,153 (916·607·630) |
| 27 | 덤프운반-토사 L=64.00m / m3 | 작업량식 Q→1/Q | 중기·9 | 내역·1 | 6,926 (4,415·827·1,684) |
| 28 | 덤프운반-암 L=64.00m / m3 | 비교(제외금액) · 작업량식 Q→1/Q | 중기·12 | 내역·1 | 7,825 (5,005·902·1,918) |
| 29 | 유로폼 설치 및 해체 간단 / m2 | % 줄 3 | 자재·2, 노무·2 | 대가·5 | 36,282 (31,636·3,697·949) |
| 30 | 콘크리트비빔 채움재 / m3 | 품 × 단가 | 노무·2, 산근·3 | 대가·9 | 67,383 (66,071·1,008·304) |
| 31 | 기계운반(울진군 울진읍 대흥리) L=19.00km / 대 | 운반=경비로 적용 | 경비·1 | 내역·3 | 55,909 (0·0·55,909) |
| 32 | 유로폼 설치 및 해체 보통 / m2 | % 줄 3 | 자재·2, 노무·2 | 대가·1 | 41,739 (36,155·4,500·1,084) |
| 33 | 콘크리트포장(B-type) t=20cm / m2 | % 줄 1 | 노무·2 | 대가·1 | 5,621 (5,458·0·163) |
| 34 | 철근가공 및 조립 Type-Ⅱ-2,현장가공조립 / ton | % 줄 2 | 노무·4, 자재·1 | 대가·1 | 970,987 (922,307·13,680·35,000) |
| 35 | 철근운반(울진군 울진읍 대흥리) L=19.00km / 톤 | 운반=경비로 적용 | 경비·1, 노무·1 | 내역·1 | 15,227 (0·0·15,227) |
| 36 | 사토처리 / m3 | 작업량식 Q→1/Q | 중기·6 | 내역·1 | 2,275 (1,309·423·543) |
| 37 | 도자운반-토사 L=43.66m / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 2,248 (994·658·596) |
| 38 | 도자운반-암 L=39.07m / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 2,248 (957·633·658) |
| 39 | 덤프운반-토사 L=293.78m / m3 | 작업량식 Q→1/Q | 중기·9 | 내역·1 | 7,745 (4,853·1,054·1,838) |
| 40 | 덤프운반-암 L=318.60m / m3 | 비교(제외금액) · 작업량식 Q→1/Q | 중기·12 | 내역·1 | 8,750 (5,514·1,176·2,060) |
| 41 | 도자운반-토사 L=38.30m / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 1,851 (818·542·491) |
| 42 | 도자운반-암 L=40.90m / m3 | 작업량식 Q→1/Q | 중기·3 | 내역·1 | 2,301 (979·648·674) |
| 43 | 덤프운반-토사 L=385.00m / m3 | 작업량식 Q→1/Q | 중기·9 | 내역·1 | 8,068 (5,029·1,139·1,900) |
| 44 | 덤프운반-암 L=353.00m / m3 | 비교(제외금액) · 작업량식 Q→1/Q | 중기·12 | 내역·1 | 8,879 (5,584·1,215·2,080) |
| 45 | 레미콘타설 무근(장비사용타설) / m3 | % 줄 1 | 노무·2, 중기·3 | 대가·3 | 27,665 (22,142·2,285·3,238) |
| 46 | 사토처리 대흥2공구 L=0.118km / m3 | 비교(제외금액) · 작업량식 Q→1/Q | 중기·12 | 내역·1 | 3,908 (2,501·587·820) |
- 대가가 쓰는 산근 14(4 · 6 · 7 · 10 · 11 · 14 · 18 · 19 · 29 · 30 · 32 · 33 · 34 · 45 — 14 는 내역도 씀) · 내역이 바로 쓰는 산근 33(토공 · 운반 · 사토).
- 「비교(제외금액)」 = 덤프 15톤 · 24톤 등 두 안을 셈해 하나를 버린 소계(꼬리표가 달라 총계 SUMIF 에서 빠짐).
## A6. 중기 25 호표 (블록 줄 = 손료(경비 · 천원당 계수) · 운전사(노무 · 시간 노임) · 연료(재료 · L/hr) · 잡품(재료 · 주연료의 %))
| 중기 | 코드 | 명칭 · 규격 | 시간당 계 (노·재·경) |
|---|---|---|---|
| 중기1 | X00001 | 불도우저19ton (토사) | 126,000 (55,700·36,888·33,412) |
| 중기2 | X00003 | 굴삭기(0.2m3) | 76,436 (55,700·7,695·13,041) |
| 중기3 | X00004 | 굴삭기(0.4m3) | 87,441 (55,700·15,363·16,378) |
| 중기4 | X00005 | 굴삭기(0.7m3) | 96,829 (55,700·18,001·23,128) |
| 중기5 | X00006 | 굴삭기(1.0m3) | 113,861 (55,700·30,260·27,901) |
| 중기6 | X00009 | 굴삭기(0.7m3) 0.7㎥,(암석) | 100,378 (55,700·18,001·26,677) |
| 중기7 | X00014 | 굴삭기+브레카(0.7m3) | 106,713 (55,700·17,116·33,897) |
| 중기8 | X00028 | 덤프트럭15ton(토사) | 103,241 (55,700·27,910·19,631) |
| 중기9 | X00030 | 덤프트럭10.5ton(암) 할증율:1.25 | 85,203 (47,231·24,750·13,222) |
| 중기10 | X00031 | 덤프트럭15ton(암) 할증율:1.25 | 106,687 (55,700·27,910·23,077) |
| 중기11 | X00032 | 덤프자동덮개 15톤 | 414 (0·0·414) |
| 중기12 | X00044 | 트럭탑재형크레인 5톤 | 65,009 (47,231·7,784·9,994) |
| 중기13 | X00046 | 트럭 트랙터 및 평판트레일러 20Ton | 101,226 (55,700·29,173·16,353) |
| 중기14 | X00048 | 콘크리트믹서0.45m3 | 40,659 (33,571·5,445·1,643) |
| 중기15 | X00055 | 크로울러드릴 탑승유압식 | 108,123 (55,700·29,100·23,323) |
| 중기16 | X00074 | 덤프트럭2.5ton(토사) | 58,490 (47,231·5,090·6,169) |
| 중기17 | X00084 | 불도우저19ton (암) | 130,908 (55,700·36,888·38,320) |
| 중기18 | X00086 | 덤프자동덮개 24톤 | 481 (0·0·481) |
| 중기19 | X00087 | 덤프트럭24ton(토사) | 127,479 (55,700·40,373·31,406) |
| 중기20 | X00089 | 굴삭기+부착용 집게(0.6m3) | 105,164 (55,700·18,296·31,168) |
| 중기21 | X00092 | 덤프트럭4.5ton(암) | 64,583 (47,231·8,776·8,576) |
| 중기22 | X00099 | 굴삭기+진동콤팩터 0.7m3 | 100,355 (55,700·18,001·26,654) |
| 중기23 | X00101 | 굴삭기(1.0m3) 할증율:1.20 | 118,143 (55,700·30,260·32,183) |
| 중기24 | X00102 | 덤프트럭 10.5톤 | 83,249 (47,231·24,770·11,248) |
| 중기25 | X00105 | 굴삭기(타이어) 0.6㎥,(부착용집게,0.7~0.8㎥) | 105,178 (55,700·18,310·31,168) |
## A7. 설계내역서 공종 나무 ↔ Aislo 수량 원천 (1공구 차례 · 2 · 3공구에만 있는 항목 포함)
나무 = □ 2024년 간선임도사업(T5 · 설계내역서 5줄) › □ 1~3공구(T4 · 6 · 85 · 165줄 · L=1.20 · 1.20 · 1.10km) › 1 토공사 · 2 구조물공 · 3 운반공 · 4 자재대(T3) › 1.1~2.3(T2) › 항목 + □ 관급자재대(공구 밖 · 「(제외금액)」 · 순공사비 합에서 빠짐).
| 공종 | 항목 · 규격 · 단위 | 단가 호표 | 수량 원천(Aislo) | 상태 |
|---|---|---|---|---|
| 1.1 준비공 | 규준틀설치 종단 · 횡단 · 개소 | 대가5 · 대가8 | 없음 | 빈칸 |
| 1.1 준비공 | 제근 밀림(90㎥/ha) · m2 | 대가12 | B08 토적표 「제근」(B07 값 없어 빈칸 · `B08_Quantity_Engine_Earthwork.py` 머리) | 빈칸 |
| 1.2 절토 | 절토(토사) 굴삭기0.7m3 · m3 | 산근13 | B08 토공집계표 흙깍기 · 토사 | 있음 |
| 1.2 절토 | 절토(연암) 굴삭기+브레카 · m3 | 산근16 | 흙깍기 · 연암(암 × 연암 %) | 있음 |
| 1.2 절토 | 암발파 TYPE-V · m3 | 산근1 | 흙깍기 · 경암(발파 + 굴삭기) | 있음(경암 = 발파 짝은 추정) |
| 1.3 구조물터파기 및 되메우기 | 구조물터파기(토사) · (연암) · 구조물 되메우기 · m3 | 산근14 · 3 · 15 | 토공집계표 줄은 있고 값 None(「구조물 수량」) | 빈칸 |
| 1.4 측구파기 | 측구파기(토사) 굴삭기0.4m3 · (연암) · m3 | 산근2 · 12 | 토공집계표 측구 터파기 토사 · 연암 | 있음 |
| 1.5 유용성토 | 유용토운반 무대 · m3 | 산근8(0원) | 유용토 소계(횡방향 + 종방향) | 있음 |
| 1.5 유용성토 | 도자운반-토사 · 암 L=43.66 · 39.07m · m3 | 산근37 · 38(공구마다 다른 L → 다른 산근) | 토사운반 19TON B/D · 평균운반거리 불도우저 | 일부(토사 · 암 나눔 없음 — 추정) |
| 1.5 유용성토 | 덤프운반-토사 · 암 L=293.78 · 318.60m · m3 | 산근39 · 40 | 토사운반 BH+DT+BH · 평균운반거리 덤프 | 일부(〃) |
| 1.6 사토 및 다짐공 | 사토처리 · m3 | 산근36(2공구 46 · 3공구 20) | 잔토처리 | 있음 |
| 1.6 사토 및 다짐공 | 성토사면다짐 굴삭기0.7m3 · m2 | 산근9 | 성토면다짐(성토면 80 %) | 있음 |
| 1.6 사토 및 다짐공 | 노면정리 굴삭기0.7m3 · m2 | 산근5 | B08 토적표 노면정리(노면 폭) | 있음 |
| 2.1 돌기슭막이공 | 돌기슭막이 찰 · 메쌓기 · 기초무 · 구입 · 채집 · H=1.5~2.5 · L3=45 · m | 대가17~19 · 24~26 · 30~32 | B08 구조물집계표 흙막이 › 형태 › H · m(계) | 구조물 사본 있을 때 |
| 2.2 배수공 | 파형강관부설 D=800 · 1000 · 1200mm · m | 대가2 · 3 · 29 | 구조물집계표 관 공 › Φ › 관매설 | 사본 있을 때 |
| 2.2 배수공 | 관보호공(Φ800) 동물이동통로 돌집수정 ㄴ형 · ㄷ형 · 개소 | 대가15 · 16 | 관 공 › 관보호공(선 집수정 모양마다 1) | 사본 있을 때 |
| 2.2 배수공 | 수로형토사개거 · 개소 | 대가13 | 개거(B05 구조물 개소) | 사본 있을 때(추정) |
| 2.2 배수공 | 콘크리트포장(t=0.2m) 물넘이 · m2 · 포장거푸집 T=20cm · m · 물넘이 집수부 · 개소(3공구) | 대가22 · 23 · 20 | 물넘이포장 › 월류 폭 · m(단위 다름) · 거푸집 · 집수부 원천 없음 | 일부(추정) |
| 2.3 기타구조물 | 돌붙임 찰 · 메붙임 L3=35 · 45 · 구입 · 채집 · m2 | 대가14 · 28 · 33 · 34 | 구조물집계표 돌붙임 › 찰붙임 · 메붙임 · ㎡ | 사본 있을 때 |
| 2.3 기타구조물 | 국가지점번호판 임도(말뚝형) · 개소 | 자재28(재료비 직접) | 없음 | 빈칸 |
| 2.3 기타구조물 | 임도준공표지석 30x20x60 · 개소 | 대가7 | 없음 | 빈칸 |
| 3 운반공 | 중기운반 · 기계운반 L=19.00km · 대 | 산근21 · 31 | 없음(1대 — 사용자 입력) | 빈칸 |
| 3 운반공 | 모래 · 자갈 L=16.40km · m3 · 파쇄석 L=80.00km · ton · 시멘트 · 대 · 철근(3공구) · 톤 | 산근22 · 23 · 17 · 24 · 35 | 수량 = B08 총괄자재수량집계표(할증 포함) · 거리 L = 사용자 입력 | 수량 있음 · 거리 빈칸 |
| 4 자재대 | 모래 · 자갈(40m/m) · 파쇄암 · 시멘트 · 와이어메쉬 · 이형철근(3공구) | 자재24 · 22 · 29 · 21 · 33 · 36 | B08 총괄자재수량집계표 | 있음(파쇄암 짝 = 추정) |
| 관급자재대 | 레미콘 25-18-80 · M3 · 파형강관 Φ800 · 1000 · 1200 · M · 이음관 Φ800 · 1000 · 1200 · 개 | 자재44 · 26 · 30 · 45 · 37 · 38 · 46 | B08 자재수량 · 구조물집계표 관매설 · 커플링 | 있음 — 관급 표시 원천 없음 |
| 관급자재대 | 조달수수료 재료비 × 0.54 % | 자재12(밑수 J253 = 관급 재료비 합이 상수로 박힘) | 밑수 = 셈 · 율 = 사용자 입력 | 율 빈칸 |
## A8. 손입력 상수 칸 전수 (숫자 상수 · 식 아님)
| 탭 | 칸 | 개수(0 아님) | 뜻 | 예 |
|---|---|---|---|---|
| 공사원가계산서 | D6 · D7 | 2(0) | 간접재료비 · 작업설 부산물(△) | 0 |
| 총괄설계내역서 | M49~M64 | 14 | 비목 요율 % | M49 14.5 · M64 10 |
| 총괄설계내역서 | N55 | 1 | 안전관리비 기초액 | 5,349,000 |
| 총괄설계내역서 | I62 · I66 | 2 | 이윤 보정 · 관급(순자재대 + 수수료) | 905,980 · 69,849,380 |
| 총괄설계내역서 | O66 · M66 | 2 | 조달수수료 · 관급 끝수 자리(추정) | 375,160 · 3 |
| 설계내역서 | D | 137 | 항목 수량 | D9 14 · D11 2,498 |
| 설계내역서 | J253 | 1 | 조달수수료 밑수(관급 재료비 합) | 69,474,220 |
| 일위대가표 | C | 170 | 품(인 · 시간 · 단위당) · 개소당 수량 · % | C10 0.66 · C106 8.3 |
| 일위대가표 | I18 · I27 · I235 | 3 | % 줄 밑수(같은 블록 노무 합이 값으로 박힘) | 13,037.6 |
| 단가산출근거 | Z~AQ | 795 | 연두 입력(품 · q · k · f · E · Cm · L · V · t · 배수) | Z13 0.31 · AD74 0.55 · Z885 73 |
| 단가산출근거 | K21 | 1 | % 줄 밑수(잡재료비 5 % 밑) | 4,097.5 |
| 환율및기초자료 | C3~G3 | 4 | 환율 | 1,289 · 1,000 |
| 환율및기초자료 | G6~G8 식 안 | 3 | 운전사 시간 계수 0.20833333334(= 1/8 × 16/12 × 25/20) | - |
| 중기사용료 | C | 98 | 손료계수(천원당) · 운전사 1인 · 연료 L/hr · 잡품 % | C7 0.1811 · C9 25 · C10 16 |
| 중기사용료 | I106 | 1 | % 줄 밑수 | 23,659.2 |
| 노무비목록표 | E | 12 | 노임 원/일 | 268,058 |
| 경비목록표 | E | 23 | 기계 손료 기준가(천원) · 회 단가 | 184,499 · 61,500/회 |
| 자재단가대비표 | E · G · I · K · M (+ F · H · J · L · N 페이지) | 15 · 9 · 9 · 0 · 7 | 출처별 단가 | E7 500,661 |
| 자재단가대비표 | O · T | 30 · 30 | 적용 단가 · 이전단가(0 = 별도계상 · % 줄 16) | O5 1,369 |
| 집계표 4 | D | 28 · 9 · 2 · 23 | 총수량(STmate 전개값이 상수로 박힘) | D4 0.56 |
## A9. 끝수 자리 전수 (식에서 셈)
| 탭 | 칸 | 함수(자리) × 개수 | 뜻 |
|---|---|---|---|
| 총괄설계내역서 | D49~D58 · D60 · D62 · D64 | ROUNDDOWN(0) × 13 | 제비율 줄마다 원 버림(밑수 = 앞 줄 버린 값 · 안전관리비는 기초액 더한 뒤) |
| 총괄설계내역서 | D66 · J66 · L66 | ROUNDUP(−3) × 3 | 관급자재대 천원 올림 |
| 총괄 · 원가계산서 | E · F | ROUND(5) × 15 | 산식 글 속 요율 표시만 |
| 설계내역서 | I · K · M | ROUNDDOWN(0) × 137 × 3 | 금액 = 단가 × 수량 원 버림(비목마다) |
| 일위대가표 · 중기사용료 | H · J · L | ROUNDDOWN(1) × 171 · 98 (×3) | 줄 금액 0.1원 버림 · % 줄 = 밑수 × % / 100 |
| 일위대가표 · 중기사용료 | H · J · L 합계 | ROUNDDOWN(0) × 34 · 25 (×3) | 블록 합계 원 버림 |
| 단가산출근거 | D · E · F | ROUNDDOWN(1) × 약 259 (×3) | 줄 금액 · % 줄 = 밑수 × % / 100 |
| 단가산출근거 | D · E · F 총계 | ROUNDDOWN(0) × 39 · 39 · 46 | 총계 원 버림(운반 7 = 세 비목 각각 버린 뒤 F 한 칸에 더함 · D · E = 0) |
| 단가산출근거 | AB~AS | TEXT(ROUND(2)) × 약 230 · ROUND(13) × 6 | 작업량 Q · 계수 소수 2자리(글로 바뀐 뒤 1/Q 에 쓰임) |
| 환율및기초자료 | G6~G8 | ROUNDDOWN(0) × 3 | 운전사 시간 노임 |
| 자재단가대비표 | U · V | MIN · MAX · TRUNC | 최소단가 찾기(참고 칸) |
| 집계표 4 | G(· H · I) | ROUND(0) × 28 · 9 · 2 · 69 | 금액 반올림(여기만 반올림) |
## A10. 검산 값 (거울 시험 기준 후보)
| 값 | 셀 | 금액 |
|---|---|---|
| 순공사비 = 1공구 + 2공구 + 3공구 | 설계내역서 G254 = G6 + G85 + G165 | 710,359,136 = 229,635,562 + 201,184,151 + 279,539,423 |
| 직접재료비 · 직접노무비 · 산출경비 | 원가계산서 D5 · D9 · D12 | 194,234,417 · 346,800,554 · 169,324,165 |
| 나.소계(순공사원가) · 다.소계 | 총괄 D59 · D61 | 868,874,829 · 921,007,318 |
| 이윤 보정 전 · 후 | 총괄 J62 · D62 | 109,015,935 · 108,109,955 |
| 공급가액 · 부가세 · 도급공사비 | 총괄 D63 · D64 · D65 | 1,029,117,273 · 102,911,727 · 1,132,029,000 |
| 관급자재대 · 총공사비 | 총괄 D66 · D67 | 69,850,000 · 1,201,879,000 |
| 안전관리비 A안 · B안 | 총괄 E55 글 | 16,586,996(채택) · 18,494,700 |
| 대가 예 | 일위대가표 F117 · F131 | 관보호공 ㄴ형 1,216,838 · ㄷ형 1,937,206 /개소 |
| 산근 예 | 단가산출근거 C109 | 암발파 11,237 /m3(4,243 · 5,499 · 1,495) |
| 중기 예 | 중기사용료 F11 | 불도우저19ton 126,000 /시간(55,700 · 36,888 · 33,412) |
@@ -0,0 +1,119 @@
# 조사 F — 원가산출 실무 엑셀(기번3 공통) 탭별 명세 (10-9 · 읽기 전용 조사 에이전트)
원본 = `resources/knowledge/original/실무문서/2024년 간선임도(기번3-울진.대흥)(공통)/1. 설계원본/01 내역자료/2024년 간선임도사업(기번3).xlsx`(STmate w24.04 내보냄 · 사본으로 전수 읽기 · 원본 안 고침) · 부록 = 같은 폴더 `조사_F_부록_탭표.md`(A1~A10) · 셀 = `탭!셀` · 「추정」 = 엑셀로 확인 못 한 판단 · old 코드 안 봄.
## 1. 탭 목록
| # | 탭 | 숨김 | 범위 · 줄 | 한 줄 = | 역할 |
|---|---|---|---|---|---|
| 1 | 〓 목 차 〓 | - | B1:D22 · 22 | 탭 | 목차(이동 링크 19) |
| 2 | ※※안내※※ | - | A2:J22 · 22 | 알림 | 작성 안내 + 오류 위치 7(「%단위는 산식 불가」 6 · 이윤보정 손조정 1) |
| 3 | 공사원가계산서 | - | A1:H29 · 29 | 비목 | 원가계산서 — 금액 · 산식 글 모두 총괄에서 읽음 · 구성비 |
| 4 | 총괄설계내역서 | - | A1:Q67 · 67 | 공종 제목 45 · 비목 19 | 공종별 합(내역 제목 줄) + 원가 제비율 셈(숨은 M 요율) |
| 5 | 설계내역서 | - | A1:AC265 · 265 | 제목 44 · 항목 137 | 공종별 내역서 — 수량 × 호표(대가 · 산근) · 자재 단가 |
| 6 | 일위대가목록표 | - | A1:K37 · 37 | 대가 호표 34 | 일위대가 목록 |
| 7 | 일위대가표 | - | A1:Z290 · 290 | 블록 34 · 줄 171 | 일위대가표(품셈 13 · 조합 21) |
| 8 | 단가산출근거목록표 | - | A1:K49 · 49 | 산근 호표 46 | 단가산출 목록 |
| 9 | 단가산출근거 | - | A1:AS3294 · 3,294 | 블록 46 · 줄 약 259 | 단가산출서(품셈 풀이 글 · 작업량 Q 식 · 연두 입력 칸) |
| 10 | 환율및기초자료 | - | A1:J18 · 18 | 환율 · 직종 | 환율 4 · 운전사 3 일당 → 시간 노임 |
| 11 | 중기목록표 | - | A1:K28 · 28 | 중기 호표 25 | 중기 시간 단가 목록 |
| 12 | 중기사용료 | - | A1:Z177 · 177 | 블록 25 | 중기 손료 = 손료(경비) + 운전사(노무) + 연료 · 잡품(재료) |
| 13 | 재료비목록표 | - | A1:H49 · 49 | 자재 46 | 자재 단가(0원 16 = 별도계상 9 · % 줄 7) |
| 14 | 노무비목록표 | - | A1:H15 · 15 | 직종 12 | 노임 단가(손입력) |
| 15 | 경비목록표 | - | A1:H26 · 26 | 기계 23 | 손료 기준가(천원) · 회 단가(손입력) |
| 16 | 자재단가대비표 | - | A1:Y50 · 50 | 자재 46 | 출처 5갈래 단가 · 페이지 → 적용 단가 |
| 17~20 | 재료비 · 노무비 · 경비 수량금액집계표 · 중기시간금액집계표 | - | J31 · J12 · J5 · L26 | 자원 28 · 9 · 2 · 23 | 결과 — 총수량 × 단가(수량 = STmate 전개값 박힘) |
| 21 | 〓 INITIAL 〓 | veryHidden | B2:X79 · 79 | 메타 | STmate 재등록 지도(탭 · 열 · 인쇄 이름) — 옮기지 않음 |
- 탭마다 숨은 메타 칸 1(`COD` 코드 · 블록 범위) · 오른쪽 이동 칸(→) · 묶음 = 숨은 키 칸 SUMIF(자기 키 · 부모 키 · 꼬리표) — 부록 A1.
## 2. 사슬(하이퍼링크 · 탭 사이 식)
- 하이퍼링크 = `HYPERLINK` 식 1,278(갈래 19 · 부록 A2) + 셀 링크 36(머리 「STmate」 → 누리집 · 무관) · 탭 사이 값 읽기 = 부록 A3 · 명칭 · 규격 · 단위는 글로 박힘(안내 B7 「산식은 단가만 부름」).
| 단계 | 읽는 탭 · 칸 | ← 대상 탭 · 칸 | 식 | 링크 | 뜻 |
|---|---|---|---|---|---|
| 원가 | 공사원가계산서 D · F | 총괄 D~G · E 글 · M | 34 | 20 | 원가계산서 = 총괄 값 거울 |
| 총괄 | 총괄 D~G 4~48 | 설계내역서 제목 줄 G · I · K · M | 180 | 45 | 공종 제목 줄만 옮김 · 49~67 제비율은 총괄 안 셈 |
| 내역 | 설계내역서 H · J · L | 대가목록 F~H · 산근목록 F~H · 재료비 E | 135 · 201 · 24 | 45 · 67 · 25 | 항목 단가 = 대가 45 · 산근 67 · 자재 25 |
| 대가 | 일위대가목록표 E~H | 일위대가표 합계 줄 | 136 | 34 | 목록 = 블록 합계 |
| 대가 줄 | 일위대가표 G · I · K | 노무 · 자재 · 중기 · 산근 · 대가 목록 | 384 | 171 | 줄 단가 · 대가 → 대가 28줄(겹 호표) |
| 산근 | 단가산출근거목록표 E~H | 단가산출근거 총계 줄 | 184 | 46 | 목록 = 블록 총계 |
| 산근 줄 | 단가산출근거 J · K · L | 노무 · 자재 · 중기(212) · 경비 · 산근 | 248 | 246 | 산근 → 산근 1(30 → 4) |
| 중기 | 중기목록표 E~H · 중기사용료 G · I · K | 중기사용료 합계 · 기초자료 G · 자재 · 경비 | 100 · 75 | 25 · 96 | 시간 단가 = 손료 + 운전사 + 연료 |
| 기초 · 자재 | 기초자료 D · F · 재료비목록표 E | 노무 · 자재 · 자재단가대비표 O | 9 · 46 | 9 · 92 | 운전사 일당 · 적용 단가 |
| 결과 | 집계표 4 F(· G · H · I) | 각 목록표 E · 중기 F~H | 108 | 62 | 끝 결과(되먹임 없음) |
- 흐름(아래 → 위) = 자재단가대비표 · 노무 · 경비 · 환율 → 중기사용료 → 산근 → 대가 → 설계내역서 → 총괄(+ 제비율) → 원가계산서 · 겹 깊이 = 대가15 → 대가21 → 산근4 → 중기14.
- 블록 메타 링크 105 = `BDCOD 코드 · POSS 첫줄 · POSE 끝줄`(대가 B · 산근 D · 중기 X 코드 ↔ 줄 범위) — 호표 정체 = 코드.
## 3. 탭별 꼴 · 입력 · 셈 · 출력
| 꼴 | 탭 | 한 줄 · 묶음 · 합계 | 셈 · 끝수 | 손입력 |
|---|---|---|---|---|
| 원가표 | 공사원가계산서 · 총괄 | 비목 · 나~바 소계 · 총괄 = 제목 45 + 제비율 | 5절 표 · 줄마다 ROUNDDOWN 0 · 관급 ROUNDUP −3 | 요율 · 기초액 · 보정 · 간접재료비 · 작업설 |
| 내역표 | 설계내역서 | 나무 T5 총괄 › T4 공구 › T3 공사 › T2 공종 › 항목 · 제목 = SUMIF(부모 키) · 관급 단락 「(제외금액)」 · 숨은 254줄 = 순공사비계 | 금액 = ROUNDDOWN(단가 × 수량, 0) 비목마다 · 합계 = 셋 합 | 수량 137 · 조달수수료 밑수 |
| 목록표 | 대가 · 산근 · 중기 목록표 | 호표 하나 = 한 줄 | 블록 합계 읽기 | 없음 |
| 블록표 | 일위대가표 · 중기사용료 | 머리(호표) · 이름 줄 · [품셈 인용 줄] · 줄 · 합계 | 줄 = ROUNDDOWN(단가 × 수량, 1) · % 줄 = 밑수 × %/100 · 합계 ROUNDDOWN 0 | 품 · 개소당 수량 · % 밑수(값 박힘) |
| 풀이표 | 단가산출근거 | 단원(재료비 · 노무비 · 장비마다) › 소계 T1 · 계 T2 · 합계 T3 · 총계 T7 · 비교 버린 안 7 | 줄 ROUNDDOWN 1 · 총계 0 · Q = ROUND(식, 2) → 1/Q · 운반 7 = 총계를 경비로 몰아 적음 | 연두 칸 Z~AQ 상수 795(q · k · f · E · Cm · L · V · t) |
| 단가표 | 재료비 · 노무비 · 경비목록표 · 기초자료 | 자원 하나 = 한 줄 | 재료 = 대비표 적용 단가 · 운전사 시간 = ROUNDDOWN(일당 × 1/8 × 16/12 × 25/20, 0) | 노임 · 경비 · 환율 |
| 대비표 | 자재단가대비표 | 자재 하나 = 한 줄 · 조달 · 물가정보 · 물가자료 · 적산정보 · 견적 · 적용 | 적용 = 손입력(옆 칸 최소단가 식) — 46줄 모두 적용 = 최저 | 출처 단가 · 페이지 · 적용 |
| 집계표 | 집계표 4 | 자원 하나 = 한 줄 · 합계 줄 없음 | 금액 = ROUND(수량 × 단가, 0)(반올림 — 여기만) | 수량(전개값 박힘) |
- 별도계상 = 같은 자재의 0원 짝 코드(시멘트 · 모래 · 자갈 · 파쇄암 · 깬돌 · 파형강관 9) — 대가 안 0원 · 자재대 · 관급 단락에서 값 셈(두 번 안 셈 · B08 자재 집계표 머리 경고와 같은 뜻).
- 칸 전부 · 손입력 전수 · 끝수 자리 전수 = 부록 A1 · A8 · A9.
## 4. 밖에서 들어오는 값 → Aislo 원천 (없으면 빈칸)
| 갈래 | 엑셀 칸 | Aislo 원천 | 상태 |
|---|---|---|---|
| 토공 수량(절토 · 암 · 측구 · 유용 · 운반 · 사토 · 다짐 · 노면정리) | 내역 D14~D37 | B08 `GET …/quantity/earthwork`(토공집계표 · 평균운반거리 · 토적표) | 있음 · 구조물터파기 · 되메우기 · 제근 = B08 도 빈칸 · 운반 토사/암 나눔 없음(추정) |
| 구조물 수량(기슭막이 · 관 · 관보호공 · 돌붙임 · 개거 · 물넘이) | 내역 D41~D58 | B08 `GET …/quantity/summary` 열 계(열마다 `combos`) | 구조물 사본 있을 때만 |
| 자재대 · 운반 · 관급 수량 | 내역 D63~D72 · D246~D252 | B08 `GET …/quantity/materials`(총괄자재 · 할증) · 관매설 · 커플링 | 있음 · 관급 · 별도계상 표시 없음 |
| 대가 품 · 개소당 수량 | 일위대가표 C(170) | 구조물 사본 `일위대가.json`(담은로직 · 수량 ← `면적.json` 알약) · 기준 단가 = 사본 `단가.json` 으로 서버 셈 | 사본 있을 때 |
| 산근 풀이 인자 | 산근 Z~AQ | 승격 줄 로직 `입력값.json` · M01 로직 입력 | 승격 줄만 · 토공 · 운반 산근 33 = 원천 없음 |
| 노임 · 기계 · 연료 · 환율 | 노무 E · 경비 E · 중기사용료 C · 기초자료 | M01 `인력.json` · `기계.json` · `재료_유가전력.json` · `환율_한국은행환율.json` + 엔진 `master_formula.py` | 있음 · 손료 · 운전사 · 연료 분해 꺼내기 확인 필요(추정) |
| 자재 단가 · 출처 · 페이지 | 대비표 E~O | M01 `재료_자재품목.json`(물가자료 · 유통물가 · 물가정보 · 거래가격 · 관급 · 면수) | 있음 · 갈래 짝 다름(엑셀 조달 · 물가정보 · 물가자료 · 적산정보 · 견적 ↔ M01 칸 · 추정) |
| 원가 요율 · 기초액 | 총괄 M49~M64 · N55 | M01 `요율_조달청제비율.json` RT000001~19(구간 · 연도) | 있음 · 고르는 값(추정가격 · 공기 · 공종) 없음 |
| 준비공 · 부대 수량(규준틀 · 번호판 · 표지석 · 중기운반 대수) · 운반거리 L | 내역 D9 · D10 · D57 · D58 · C61~C66 · 산근 연두 L1 포장 · L2 비포장 | 없음 | 빈칸 |
| 이윤 보정 · 부가세 조정 · 간접재료비 · 작업설 · 조달수수료율 | 총괄 I62 · I64 · 원가 D6 · D7 · 내역 D253 | 사용자 입력 | 빈칸 |
| 공종 체계(제목 이름 · 차례 · 항목 배정) · 공구 | 내역 A · B 제목 줄 | 없음 | 빈칸(⬜1 · 2) |
- 셈으로 채움: % 줄 밑수 · 관급 순자재대 · 조달수수료 · 집계표 수량(내역 수량 × 호표 품 전개).
- 이을 자리 — B08 = 결과 저장 없음(GET 때 서버 셈) · 사용자 값 `project_settings.json › quantity`(material_sheets · rock_ratios_pct · material_surcharge_pct) · 홍수량 `B08_Quantity/quantities/hydro_inputs.json` / 구조물 사본 = `storage/{회사}/{사용자}/{프로젝트}/templates/structures/{구조물id}/`(집계 · 도면 · 면적 · 일위대가 · 단가 · 입력값 · 고른자재 · manifest — 원본이 바뀌어도 그대로 · `M02_Item_Snapshot.py`) · 셈 길 `POST /api/projects/{id}/items/{폴더}/calc` / M01 = `resources/master_data/`(로직_* 57 · 계수_* 27 · 소요량_*) / B09 = `B09_Estimation/B09_Estimation_UI_Shell.ts`(제목 · 단계 막대만).
## 5. 원가계산서 요율 (총괄 49~67 · 2024 값 — 후보로만 · 확정 안 함)
| 비목 | 칸 | 밑수(엑셀 식) | 요율 | 끝수 | 엑셀 값 | 지식DB 후보 |
|---|---|---|---|---|---|---|
| 간접노무비 | D49 | 직노 E48 | 14.5 | ROUNDDOWN 0 | 50,286,080 | 토목 18.9~21.0 · RT000008 |
| 산재 · 고용 | D50 · D51 | 직노 + 간노 | 3.56 · 1.01 | 〃 | 14,136,284 · 4,010,575 | 3.56 · 등급 1.01~1.57 · RT000001 · 2 |
| 건강 · 연금 | D52 · D54 | 직노 | 3.545 · 4.5 | 〃 | 12,294,079 · 15,606,024 | 3.595 · 4.75(2026 · 해마다 +0.25) · RT000003 · 4 |
| 노인장기요양 | D53 | 건강보험료 D52 | 12.95 | 〃 | 1,592,083 | 13.14 · RT000005 |
| 산업안전보건관리비 | D55 | (직노 + 재료비 + (관급 I66 − 수수료 O66) ÷ 1.1) × 율 + 기초액 N55 | 1.86 + 5,349,000 | 기초액 더한 뒤 ROUNDDOWN 0 · A(관급 포함) · B(× 1.2) 중 작은 A | 16,586,996 | 토목 5억↓ 3.15 · 5~50억 2.53 + 330만 · RT000006 · 7 |
| 기타경비 | D56 | 직노 + 간노 + 재료비 | 6 | 〃 | 35,479,263 | 토목 5.5~8.1 · RT000009 |
| 환경보전비 · 기계대여보증 | D57 · D58 | 순공사비 D48 | 0.8 · 0.4 | 〃 | 5,682,873 · 2,841,436 | 도로 0.9 / 그 밖 0.8 미정 · 0.4 · RT000010 · 15 |
| 일반관리비 | D60 | 나.소계 D59 | 6 | 〃 | 52,132,489 | 5억↓ 8.0 · RT000017 |
| 이윤 | D62 | 다.소계 − 재료비 | 15 | ROUNDDOWN 0 − 보정 I62 905,980(손) | 108,109,955 | 5억↓ 15 · RT000018 · 보정 = 설계자가 넣을 때만 |
| 부가가치세 | D64 | 공급가액 D63 | 10 | ROUNDDOWN 0 + 조정 I64 | 102,911,727 | 10 · RT000019 |
| 관급자재대 | D66 | 순자재대 69,474,220 + 조달수수료 375,160(= I66) | 수수료 0.54(내역 D253) | ROUNDUP −3 | 69,850,000 | 단가계약 0.54 · 조달수수료 고시 |
- 소계 = 나(D59 순공사원가 868,874,829) · 다(+ 일반관리비) · 라(+ 이윤 = 공급가액) · 마(+ 부가세 = 도급 1,132,029,000) · 바(+ 관급 = 총공사비 1,201,879,000) · 이윤 보정 = 총공사비를 정한 금액에 맞춘 손조정(안내 C17) · 엑셀에 없는 현행 비목 = 퇴직공제부금 2.3 · 임금채권 0.09 · 석면 0.006 · 하도급 · 이행보증(RT000011~14 · 16).
- 근거 = `technical_info/01_임도/05_원가정보/제비율.md` · `원가계산_체계.md` · `단수처리_규칙.md` · `original/행정규칙/토목공사원가계산 제비율 적용기준/현행_20260413.md` · `original/행정규칙/건설업 산업안전보건관리비 계상 및 사용기준/` · `original/실무문서/_종합비교/01_원가_제비율.md` · M01 `요율_조달청제비율.json` 처리규칙(끝수 · 안전 A/B · 관급 · 이윤 보정).
## 6. 옮길 차례 · 크기 (탭 하나 = 화면 표 하나)
| 차례 | B09 탭(엑셀 탭) | 입력 → 셈 → 출력 | 크기 |
|---|---|---|---|
| 0 | 뼈대 · 연결 점검(목차 · 안내) | 탭 바 · 빈칸 · 연결 없음 목록 + 이동 | 작음 |
| 1 | 노무비 · 경비목록표 · 환율및기초자료 | M01 인력 · 기계 · 환율 → 운전사 시간 노임 → 2~5 | 작음 |
| 2 | 자재단가대비표 · 재료비목록표 | M01 재료_자재품목 · 유가전력 → 적용 단가(⬜6) → 3~7 | 중간 |
| 3 | 중기사용료 · 중기목록표 | 1 · 2 + 기계 → 손료 + 운전사 + 연료 + 잡품 → 4 · 5 | 중간(엔진 분해 확인) |
| 4 | 단가산출근거 · 목록표 | 사본 「단가승격」 줄 · 입력값 → 로직 풀이 · 소계~총계 → 5 · 7 | 큼 |
| 5 | 일위대가표 · 목록표 | 사본 일위대가 · 면적 · 단가 · 사전조합 → 줄 = 단가 × 품 · 합계 → 7 | 큼 |
| 6 | 설계내역서 | B08 GET 넷 + 공종 나무 + 4 · 5 단가 → 금액 · 제목 합 → 7 | 큼 |
| 7 | 총괄설계내역서 · 공사원가계산서 | 6 제목 줄 + 요율 · 손입력 → 제비율 → 끝 | 중간 |
| 8 | 집계표 4 | 6 · 5 · 4 · 3 → 품 역전개 · ROUND → 끝(보고용) | 중간 |
- 호표 대응(부록 A4~A6): 대가 「조합」 21(관보호공 · 기슭막이 · 돌붙임 …) = 구조물 사본 `일위대가.json` 줄(같은 원본 + 같은 셈 = 한 호표 ⬜3) · 대가 「품셈」 13(찰쌓기 · 파형강관부설 · 규준틀 …) = 승격 아닌 로직 줄을 노무 · 재료 · 중기로 펼친 꼴(품셈 인용 줄 = 로직 출처) · 사전조합(SC-) = 겹 대가(대가21 콘크리트비빔 꼴 · 추정) · 산근 중 대가가 쓰는 14 = M02 일위대가 로직 줄 「단가승격」(`승격: true` · 같은 로직 + 입력값 = 산근 하나 · 조사 A 1절) · 내역이 바로 쓰는 산근 33(토공 · 운반) = 구조물 조합 밖(⬜4) · 중기 25 = 엔진 기계 단가.
- 계산 자리(CLAUDE.md 5장): 로직 기준 단가 = ③ 서버 단독(`resources/master_data/scripts/master_formula.py` + 사본 `단가.json`) · B09 셈(호표 합 · 내역 금액 · 제비율 · 끝수) = ① 파이썬 · TS 짝 + 거울 시험(본뜰 꼴 = `M02_MasterTemplete_Labor_Calc.ts` ↔ `M02_Labor_Doc.py` `settle`) · 집계표 전개 = ③ · 조작(요율 · 적용 단가 · 보정 · 공종 배정) = 브라우저 즉시 · [저장] = 사용자 값만 쓰고 서버가 정본 다시 셈(B08 꼴 · 추정 권고).
- 표 · 컨테이너 = `createDataTable`(`ui_template/ui_template_data_table.ts` — 묶음 머리 · 고정 열 · 합계 줄 · 칸 고침 · 줄 누름) · `createCard`(`ui_template_elements.ts`) · `attachCollapsible` · `createWorkflowLayout`(B08 과 같은 넷) · 호표 칸 누름 = 대상 탭 · 줄로 이동(엑셀 → 대신) · 나무 · 블록 머리 줄 꼴은 공용 표에 없음(덧칸 필요 · 추정).
## 7. ⬜ 물음 (선택지 + 추천 한 줄)
1. 공종 체계 — ① 엑셀 꼴 고정(토공사 › 준비공 · 절토 · 구조물터파기 및 되메우기 · 측구파기 · 유용성토 · 사토 및 다짐공 / 구조물공 › 돌기슭막이공 · 배수공 · 기타구조물 / 운반공 / 자재대 / 관급자재대) + 구조물군 → 공종 짝 표 ② 구조물정의 구조물군 그대로 ③ 사용자가 짓는 나무 — 추천 ①.
2. 공구 — ① 나누지 않음(프로젝트 = 한 덩이 · T4 생략) ② 노선 구간으로 나눔 — 추천 ①.
3. 대가 호표 묶음 — ① 같은 원본 + 같은 셈 단가 = 한 호표(엑셀 꼴) ② 구조물마다 한 호표 — 추천 ①.
4. 구조물 조합 밖 산근 33(토공 · 운반 · 사토) · 준비공 대가 — ① 빈칸 · 연결 없음으로 두고 원천은 따로 정함 ② B09 에서 M01 로직을 바로 고름 ③ M02 에 토공 · 운반 조합 신설 — 추천 ①(지시 「연결 안 된 값은 비움」).
5. 끝수 — ① 엑셀 자리 그대로(줄 ROUNDDOWN 1 · 합 · 금액 · 제비율 ROUNDDOWN 0 · 집계표 ROUND 0 · 관급 ROUNDUP −3 · Q 소수 2) ② 엔진 소수 그대로 · 끝에서만 원 — 추천 ①(`단수처리_규칙.md` 5공사지 일치).
6. 자재 적용 단가 — ① 출처 중 최저 자동 + 사용자가 바꿈 ② 사용자 고름만 — 추천 ①(엑셀 46줄 모두 적용 = 최저).
7. 요율 고르는 값(추정가격 · 공기 · 공종 · 연도) — ① 사용자 입력 칸(빈칸 시작) ② 직접공사비로 반복 수렴 자동 — 추천 ① 첫판.
8. 엑셀에 없는 현행 비목(퇴직공제 · 임금채권 · 석면 · 하도급보증) — ① 줄만 두고 빈칸 ② 넣지 않음 — 추천 ①.
9. 관급 · 별도계상 구분 — ① 자재 줄에 사용자 표시 ② M01 `관급` 값 있으면 관급 — 추천 ①.
@@ -0,0 +1,99 @@
# 조사 G — B08 값 원천 · 연결 안 된 값 비우기 · 구조물 조합 없으면 없음 (10-9 · 읽기 전용 조사 에이전트)
파일 = `B08_Quantity/B08_Quantity_` 생략 · 갈래 ① 프로젝트 자료 ② 프로젝트 안 조합 사본 ③a 코드 상수(근거 있음) ③b 임의 ④ 실무문서 ⑤ 빈칸 · 「추정」 = 코드로 확인 못 한 판단 · 실자료 = 226fc805(관 10 · 세월교 2 · 조합 0 · 사본 폴더 없음 · 설정 파일 없음).
결론 — B08 숫자에 ② 0곳(사본은 구조물도 모달 보기만) · 조합 유무와 무관하게 시설마다 줄 · 층(마스터 · 회사 · 개인) 바로 읽기 셋 · 실무 꼴 고정 줄(자재 셋 · 토공집계표) · 실무 계수 다섯(토공 넷 · 수리 하나).
## 1. 표별 값 원천
| 표 · 칸 | 원천 | 갈래 | 파일:줄 |
|---|---|---|---|
| 집계표 측점 줄 | 놓인 구조물 · 관 지점 전부 | ① | `UI_Summary.ts:209-214` |
| 횡단배수 칸(관 연장 · 집수정 · BOX · 세월교 관 길이 · 흙막이 · 돌붙임 · 날개벽 · 개소) | B06 설계 키 · B06 패널 옵션 · 흙막이 빈 높이 = 그림 규칙(관 최소 · 박스 높이 · 세월교 미입력) | ① | `Router_Summary.py:224-226 · 453-457 · 487-562` |
| 관경 · 련 빈칸 / 커플링 1본 | 1000 · 1 / 프로젝트 층 표 변수 → 없으면 시스템 층 8 m(KCS 44 40 10 「1본 = 8m」) | ③b / ③a · 층 | `Router_Summary.py:342-343 · 375-376 · 522` / `:95-102` |
| 머리 · 조합 이름 · 「관 공」 머리 | 구조물정의(마스터 · 조합 아님) · 층 목록 `GET /api/m02/items?all=1` | 층 | `Router_Summary.py:586` · `UI_Summary.ts:188 · 198-208` |
| 조합 열 칸(B05 구조물) | 늘 빈칸 | ⑤ | `UI_Summary.ts:151` |
| 구조물도 모달 | 사본(같은 항목) → 없으면 층 | ② · 층 | `UI_Drawing.ts:56-89` |
| 자재수량 열 25 | 2공구 F~AD 고정 | ④ | `Material_Calc.py:28-54` · `.ts:79-104` |
| 자재수량 C · 단위수량 | 집계표 계 · 손 입력(빈칸) · 관매설 → 파형강관 1 | ① · ⑤ · ③b(항등) | `Router_Material.py:36-47` · `Material_Calc.py:231` · `.ts:240` |
| 콘크리트소요 5줄 · ㎥당 | 2공구 줄(c25 · 무근 · 1:2 는 끌어올 곳 없어 늘 빈 줄) · 산림 12-1-3 QF000353 (B) · CC000337 · 건축 9-1-1 · 무근 빈칸 | ④ · ③a | `Material_Calc.py:56-75` · `.ts:106-113` |
| 총괄 21줄 + 관경 · 규격 글 · 끝수 · 할증 | 2공구 꼴 · G열 / 1-3-1(지식DB · M01 CC000001~008 있음) · 모래 · 자갈 · 시멘트 = 좌측 패널 12 · 5 · 3(124 확정) | ④ / ③a · ① | `Material_Calc.py:78-111` · `.ts:116-144` |
| 토적표 · 면 계열 · 운반 | B06 설계 · B07 `derived_cells` · 유토곡선 배분 · 환산계수(품셈 범위 제안 · B06 공용) · 연암 90(122 확정) · 폴백(빈 면적 0 · 측구 안분 사유 표시 · 암 종류 없으면 리핑) | ① · ③a · ③b | `Router_Earthwork.py:56-65` · `Engine_Earthwork.py:54 · 109-111 · 191-198` |
| 토공집계표 줄 · 공종 · 규격 글 | 거창 워크북 C5:G37 | ④ | `Engine_Earthwork_Summary.py:95-146` |
| 성토면다짐 ×0.8 · 초류종자 성토 ×0.5 · 지장목 (성토 ×0.5 + 절토) ×0.8 | 거창 계수(품셈 · 지식DB 에 없음) | ④ | `Engine_Earthwork_Summary.py:102 · 124 · 126-133 · 136` |
| 토공 늘 빈 줄 15(구조물 쪽 8 = 구조물터파기 다섯 · 토사다짐 · 되메우기 · 잔토 / 나머지 7 = 풍화암 · 보통암 넷 · 표토제거 · 법면보호공 · 운반성토) | — | ⑤ | `Engine_Earthwork_Summary.py:106-145` |
| 수리 A · L · H · 치수 · 하상경사 · R24 | B05 세부유역 · 관 지점 옵션 · B06 경사 · B04 강우량표 | ① | `Hydro_Defaults.py:97-120` · `Hydro_Site.py:1-9` |
| 수리 표준값 | 할증 2.0 · 재현 100(별표2) · f 0.8(08-05 확정) · 도달 5분 · 박스 n 0.013(KDS 콘크리트관) · 파형 n 0.024(KDS 없음 · B05 같은 값) · 월류 폭 10 m(10-7 사용자) | ③a | `Hydro_Defaults.py:29-68` · `config/config_system_design.py:170-176` |
| 수리 박스 수심비 0.8 · 할증 고르기 1.5 | 울진 산출서 · 견본 | ④ | `Hydro_Defaults.py:23-24 · 59-62` |
## 2. 임의 · 실무문서 값으로 채우는 곳 → 빈칸 · 재연결
| # | 자리 | 바꿈 | 재연결(확인 뒤) |
|---|---|---|---|
| 1 | 관경 · 련 `or 1000` · `or 1`(`Router_Summary.py:342-343 · 375-376 · 522`) | 「미입력」 열(흙막이 `fill.EMPTY_LABEL` 꼴) | B05/B06 패널 칸 |
| 2 | 1본 시스템 층 폴백(`Router_Summary.py:97` · `Router_Options.py:59`) | 프로젝트 사본만 · 없으면 빈칸 + 있던 알림(`:574-575`) | 프로젝트 표 변수(좌측 패널) |
| 3 | 자재 열 25 · 콘크리트 5줄 · 총괄 21줄(2공구 꼴) | 값 없는 줄 숨김(화면만) | 사본 일위대가 `줄.자재[]` · 로직 재료 합(`M02_Item_Copy.py:323-335` calc · `M02_Labor_Doc.py:438-470`) — 추정 |
| 4 | 관매설 → 파형강관 단위수량 1(`Material_Calc.py:231` · `.ts:240`) | ⬜6 | 사본 일위대가 파형강관 자재 |
| 5 | 토공집계표 계수 0.8 · 0.5(거창) | 빈칸 + 「비율 미정」 | 좌측 패널 칸(사용자 확인 뒤) |
| 6 | 토공 구조물 쪽 늘 빈 줄 8 | 뺌(⬜4) | 사본 터파기 · 되메우기 수량(추정) |
| 7 | 수리 박스 수심비 0.8(울진) | 빈칸(손 입력 · 빈칸이면 계산 멈춤 알림 — 추정) | — |
- 그대로 둠 — 끝수 규칙 · 규격 글(꼴 · 값 아님 · 추정) · 토적표 폴백(옛 저장분 · 사유 표시) · 좌측 패널 기본(8 · 90 · 12 · 5 · 3 — 근거 · 확정) · 배합 · 할증 · 단위중량 상수(③a · 재연결 = M01 표 키 QF000353 · CC000337 · CC000001~008).
## 3. 구조물 조합 없는 줄
| 표 | 지금 | 바꾸면 |
|---|---|---|
| 집계표 측점 줄 | 놓인 것 전부(`UI_Summary.ts:209-214`) | 사본 있는 것만 |
| 횡단배수 열 · 칸 | 시설마다 · `combos` 는 목록일 뿐(`Router_Summary.py:490-562` · 빈 값도 열 세움 `:181`) | 그 칸을 낸 조합 사본이 있을 때만 — 거름 한 곳 = 잇기 목록(`:491-499`)을 사본으로 거르고 `_Sheet.add`(`:163`) 「combos 모두 없음 → 안 셈」 · 세월교 날 잇기(`:449`)도 사본 확인 · 세월교 관 몫 combos 에 본체 잇기 더함(`:378`) |
| 조합 열(B05 구조물) | 이미 조합 있는 것만(`Summary_Data.ts:63-85`) | 사본 기준 · 이름 = 사본 |
| 자재 셋 | 집계표 열마다 줄 + 고정 줄 · 열 | 집계표 따라 빠짐 · 고정 줄은 숨김(⬜5) |
| 토공집계표 구조물 쪽 줄 | 늘 빈칸 고정 | 뺌(⬜4) |
| 토적표 · 토공 나머지 · 운반 둘 | B06 · 유토곡선(조합 무관) | 그대로 |
| 수리집수면적표 | 관 지점 전부(`Hydro_Defaults.py:123-156`) | 그대로 추천(⬜2) |
- 실자료 226fc805 — 바꾸면 구조물 탭 넷 = 안내 한 줄(「조합 사본 없는 시설 12곳 — B05 · B06 좌측 패널에서 조합 연결 · [저장]」) · 토공 · 수리 그대로 · B07 도면 · 수량표는 조합 무관이라 B08 과 갈림은 의도(추정).
## 4. 구조물 조합 읽는 길
| 길 | 지금 | 사본 원칙 |
|---|---|---|
| 조합 이름 · 「관 공」 머리 · 모달 줄 | 층 목록 `loadPickerRows`(`UI_Summary.ts:188 · 198-208 · 234`) · 층에 없으면 「M02 에 없음」(`Summary_Data.ts:73-78` · `ui_template_locale_b4.ts:47`) | 사본 manifest `원본.경로`(`M02_Item_Snapshot.py:92-98`)를 집계 응답에 실음 — `GET …/items` 는 항목당 0.5 s(`ui_template_item_picker_project.ts:109`) |
| 구조물도 모달 | 사본 → 층 폴백 · 층 줄 `열` · `도번` 요구(`UI_Drawing.ts:80-88 · 112-123`) — 층에서 지우면 사본이 있어도 「없음」 | 사본만 · 없으면 「사본 없음」 |
| 조합 있음 판정 | `summary_item` · `group_items` 참조(`M02_Table_Fill.py:119 · 138 · 157-168`) | 사본 폴더(`templates/structures/{구조물 id}[__{그룹}]/manifest.json` · `M02_Item_Snapshot.py:155-172 · 307-312`) |
| 1본 길이 | 프로젝트 층 → 시스템 층 | 프로젝트만(2-2) |
| 구조물정의 이름 · 그룹 정의 | 마스터(`Router_Summary.py:586` · `M02_Table_Fill.py:152-154`) | 그대로(조합 아님 · B05/B06 도 같은 정의 — 추정) |
- 재사용 — M02 `assign_items`(`M02_Table_Fill.py:627-670`)가 이미 「미지정 · 사본 없음 = 표에 안 넣음 · 열 = 사본 것 · 알림 한 줄」 · B08 알림도 같은 글 꼴 · 사본 자리는 짝 조사(B05/B06) 결론을 따름 — B08 은 판정 · 이름 읽는 도우미 하나만 바꿈.
## 5. 131-2 와의 관계
- 단위수량 기본값 원천 → 풀림 = 「연결 안 되면 빈칸」(2공구 값 · 지식DB 원단위 · 옛 엔진 안 씀) · 재연결 = 사본 일위대가 자재 · 로직 재료(추정 · B09 조사와 맞춤).
- 횡단배수 밖 구조물 수량 → 「사본 있을 때만 · 서버 자동」 쪽 — M02 `fill_table`(`M02_Table_Fill.py:673-685` · 값 = 사본 열 바인딩 개소 · 길이 · 칸 키) 재사용 · 바인딩 없는 사본은 빈칸(예 2a505e36 `SS000054` 열 바인딩 없음) · 손 줄 갈래는 필요 없어짐(추정).
- 채집석 공제 → 안 풀림(⬜ 그대로) — 자재가 사본에서 오면 돌(채집) 합으로 다시.
## 6. 고칠 자리 · 시험 · 크기
| # | 일 | 자리 | 시험 | 크기 |
|---|---|---|---|---|
| G1 | 집계표 서버 — 사본 거름 · 관경/련 미입력 · 「사본 없음 n곳」 알림 · 사본 이름 실음 | `Router_Summary.py:163-182 · 342-343 · 375-378 · 449 · 490-582`(601줄 · 700 안) · 재사용 `M02_Item_Snapshot` | test_98 · test_120 기대 고침 + 새 「사본 없으면 없음」(픽스처에 사본 폴더) | 중간 |
| G2 | 집계표 화면 — 층 목록 대신 응답 이름 · 측점 = 사본 있는 것 | `UI_Summary.ts:186-235` · `Summary_Data.ts:63-85` · locale b4 `:47 · :53` | test_61_1 · test_120 `:241` | 중간 |
| G3 | 구조물도 모달 사본만 | `UI_Drawing.ts:56-89 · 112-123` · locale b4 `:31 · :38` | test_61_2 `:35-38` | 작음 |
| G4 | 자재 셋 값 없는 줄 숨김(화면) | `UI_Material.ts:150-226` | test_121 · test_131 | 작음 |
| G5 | 토공집계표 계수 빈칸 · 구조물 쪽 줄 뺌 | `Engine_Earthwork_Summary.py:102-146` · `UI_Earthwork_Sheets.ts:29-32` | test_69 `:198-201` · test_122 거울 | 작음 |
| G6 | 1본 프로젝트만 | `Router_Summary.py:97` · `Router_Options.py:56-59` | test_98 `:197-210` · test_122 | 작음 |
| G7 | 수리 박스 수심비 빈칸 | `Hydro_Defaults.py:59-62` · `Engine_Hydro.py` | test_73_11 `:60 · 119` | 작음 |
| G8 | 구조물 탭 표 넷 공용 카드 안(토공 `tableCard` `UI_Earthwork.ts:156-161` 꼴) | `UI_Summary.ts:226-239` · `UI_Material.ts:303` | test_61_1 | 작음 |
| G9 | 재연결(사본 자재 → 단위수량 · 사본 바인딩 → 조합 열 수량) | `Material_Calc.py/.ts` 짝 · `Router_Material.py` · M02 `fill_table` | 거울 시험 새로 | 큼 · 별도 |
## 7. ⬜ 물음 (선택지 + 추천 한 줄)
1. 거름 단위 — (가) 칸마다 그 칸을 낸 컨테이너 사본(관 · 유입 · 유출 · 흙막이 n · 돌붙임 n · 본체 = 98 `combos`) (나) 시설 본체 사본 하나면 그 시설 칸 전부 — 추천 (가).
2. 수리집수면적표 — (가) 그대로(설계 검토 · 조합 무관) (나) 사본 있는 시설만 — 추천 (가).
3. 토공집계표 계수 0.8 · 0.5 — (가) 빈칸 + 「비율 미정」 (나) 좌측 패널 칸(기본 빈칸) (다) 그대로 — 추천 (가) · 확인 뒤 (나).
4. 토공 늘 빈 줄 15 — (가) 구조물 쪽 8 뺌 · 나머지 7 빈칸 유지 (나) 15 다 뺌 (다) 그대로 — 추천 (가)(법면보호공 갈래는 추정).
5. 자재 셋 — (가) 이번엔 값 없는 줄 숨김 · 열 25 · 손 단위수량 유지 (나) 열 · 줄 · 단위수량 = 사본 일위대가 자재 · 로직 재료 합(원가 결과물) — 추천 (가) · (나)는 B09 조사와 함께.
6. 관매설 → 파형강관 단위수량 1 — (가) 그대로(같은 관 길이) (나) 빈칸 — 추천 (가).
7. 품셈 근거 상수(배합 · 할증 · 1본 8 m) — (가) 그대로 (나) M01 표 키로 재연결 (다) 빈칸 — 추천 (가) · 재연결 때 (나).
8. 수리 박스 수심비 0.8(울진) — (가) 빈칸 (나) 그대로 — 추천 (가) · n 0.013 은 KDS 라 그대로.
9. 구조물 탭 표 카드 — (가) 공용 카드 안 (나) 그대로 — 추천 (가).
## 파일 겹침
| 파일 | G1 | G2 | G3 | G4 | G5 | G6 | G7 | G8 | 짝 B05/B06 | 짝 B09 |
|---|---|---|---|---|---|---|---|---|---|---|
| `Router_Summary.py` · `Router_Options.py` | ● | | | | | ● | | | ●(사본 자리) | |
| `UI_Summary.ts` · `Summary_Data.ts` | | ● | | | | | | ● | | |
| `UI_Drawing.ts` · `ui_template_locale_b4.ts` | | ●(글) | ● | | | | | | | |
| `UI_Material.ts` · `Material_Calc.py/.ts` · `Router_Material.py` | | | | ● | | | | ● | | ●(자재 = 원가 결과물) |
| `Engine_Earthwork_Summary.py` · `UI_Earthwork_Sheets.ts` | | | | | ● | | | | | |
| `Hydro_Defaults.py` · `Engine_Hydro.py` | | | | | | | ● | | | |
| `M02_Item_Snapshot.py` · `M02_Table_Fill.py`(읽기 재사용) | ● | ● | | | | | | | ● | |