chore(plan): 10-10 둘째 묶음 요구 31 · 32 · 조사 AA(설계내역서 자유 편집 · 184장)

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-10 12:47:56 +09:00
co-authored by Claude Opus 5.5
parent 2d11682d2a
commit 9483c19ad3
2 changed files with 141 additions and 0 deletions
@@ -43,3 +43,7 @@
28. 지제단가대비표에는 수량열이 빠지는게 맞음.
29. 원가검토 페이지의 상위탭과 하위탭의 구성을 하려고 함. 양식은 B08의 페이지 구성을 보면됨.
30. 원가검토 페이지의 탭구성, 일위대가(일위대가목록표, 일위대가표), 단가산출(단가산출근거목록표, 단가산출근거), 중기(중기목록표, 중기사용료, 중기시간금액집계표, 경비목록표, 경비수량금액집계표), 재료(재료비목록표, 자재단가목록표, 재료비수량금액집계표), 노무(노무비목록표, 노무비수량금액집계표)<<<지정안된 항목들은 상위탭임.
## 추가 (182장 뒤 · 23번 보충)
31. 설계 내역서의 내용은 기본적으로 들어간 내용은 고정이 아님. 초기에 기본적으로 만드는 로직은 있지만 이걸 사용자가 수정할 수 있어야하며 추가하는 행과 삭제도 자유로워야함. 다시 말해 자유롭게 작성이 되고 단가 산출과 일위대가에 연결할 수 있어야한다는 것임.
32. 추가로 특정 셀의 텍스트 입력으로 마우스 우클릭이 브라우져 옵션이 보임. 우리프로그램에서는 우클릭으로 브라우져 옵션보이기는 없는 상태임.참고
@@ -0,0 +1,137 @@
# 조사 AA — B09 설계내역서 자유 편집 (10-10 · 요구 31 · PLAN 184 · 읽기 전용 조사 에이전트)
| 약칭 | 뜻 |
|---|---|
| `B09/` | `B09_Estimation/B09_Estimation_` |
| 자동 줄 | 기본 로직이 B08 수량으로 짠 줄(`sec:` 제목 · `earth:` · `st:` · `haul:` · `mat:` · `fee`) |
| 수기 줄 | 166-2 · 182 사용자 줄(`hand:` · `user.bill.rows`) |
| 덮개 | 사용자 값 `user_values.json` 의 `bill`(고친 칸 · 차례 · 지운 표시) |
| 짝 | 파이썬 · TS 같은 식(CLAUDE.md 5장 계산 자리 ①) |
## 0. 지금 구조 지도
| 자리 | 파일:줄 | 줄 수 |
|---|---|---|
| 자동 줄 짜기(서버 단독) — 토공 17 `EARTH` · 구조물 열 · 운반 6 `HAUL` | `B09/Bill_Items.py:25-43 · 46 · 50-57 · 66-148` | 154 |
| 토공 · 운반 연결 = `ref: None` · 호표 단가 = 빈 묶음 | `B09/Bill_Items.py:80 · 134 · 151-154` | — |
| 공종 나무 고정 14 · 직접비 = 맨 위 1~4 | `B09/Calc_Bill.py:36-53` ↔ `.ts:31-47` | 377 ↔ 363 |
| 항목 셈 · 수량 덮기(`qty_auto`) | `B09/Calc_Bill.py:72-98` ↔ `.ts:64-89` | — |
| 대비표 「별도」 → 4 자재대 · 「관급」 → 관급자재대 | `B09/Calc_Bill.py:101-121 · 270-273` ↔ `.ts:91-110 · 261-265` | — |
| 연결 → 단가 하나(dg · sg · logic · hopyo) | `B09/Calc_Bill.py:129-144` ↔ `.ts:118-135` | — |
| 구조물 열 → 대가 블록마다 한 줄 · 키 꼬리 = 「대가n」 | `B09/Calc_Bill.py:223-245(:237)` ↔ `.ts:214-238(:228)` | — |
| 수기 줄 끼움(`after`) · 레벨(`parent` · 묶음 합) | `B09/Calc_Bill.py:147-220 · 274-280` ↔ `.ts:138-211 · 266-270` | — |
| 조달수수료 줄 · 공종 합(자기 + 부모 하나) · 제목 줄 · `sums` | `B09/Calc_Bill.py:281-365` ↔ `.ts:271-351` | — |
| 저장 다듬기 — `hand:` 키 · 아는 공종만 · `qty` 수만 | `B09/Store.py:95-143` | 213 |
| 표 · 고칠 칸(자동 줄 = 수량만) · 레벨 class · 「연결 ▾」(수기 항목만) | `B09/UI_Tabs_Bill.ts:29-95` | 97 |
| 우클릭 — 줄 추가 · 레벨 · 연결 · 지우기(수기 줄만) · 자동 줄 = 「수량 자동으로」뿐 | `B09/UI_Tabs_Bill_Edit.ts:108-145 · 172-206 · 310-336` | 386 |
| 연결 고르기 창(dg · sg 목록 · M01 로직) | `B09/UI_Tabs_Bill_Edit.ts:209-307` | — |
| 캐시 `b09-estimation`(user 통째) · [저장] PUT · 자동저장 없음 · [초기화] 없음 | `B09/UI_Shell.ts:170-179 · 258-290` | 334 |
| 레벨 CSS lv1~6 | `B09/UI_Page.css:48-81` | 114 |
흐름 — GET 때 서버가 B08 → 자동 줄(`Router.py:115`) → 셈(`Router.py:64-81` · 두 번 셈 `:84-94`) · 조작 중 = 브라우저 짝 셈(`UI_Shell.ts:116-145`) · [저장] = 덮개만 PUT → 서버 정본 다시 셈(`Router.py:139-147`). 내역 결과는 저장 안 함.
### 검증 프로젝트 실측(읽기만 · GET 셈 그대로 · 스크래치 = 시스템 임시 폴더)
| 프로젝트 | 줄 | 제목 | 항목(토공 · 구조물 · 운반 · 자재 · 조달) | 단가 있는 항목 | 빈 줄 | `sums` | 덮개 |
|---|---|---|---|---|---|---|---|
| 검증_랩탑메인 | 40 | 14 | 26 (17 · 1 · 6 · 1 · 1) | 2 | 23 | 넷 다 None | 없음 |
| 엄상준_검증 | 47 | 14 | 33 (17 · 7 · 6 · 2 · 1) | 2 | 29 | 넷 다 None | 없음 |
- 토공 · 운반 23 줄 = 단가 원천 없음(호표 빈 묶음) → 빈 줄 → 원가계산서 전부 빈칸. 자동 줄에 연결을 못 다는 것이 31번의 실제 막힘.
- 구조물 키 = `st:pipe:revet|돌쌓기(찰)|1.5#대가4` 꼴 — 대가 번호가 키에 듦 → 번호가 밀리면 덮개(지금 `bill.qty`도)가 엉뚱한 줄 · 고아.
- 랩탑 storage 의 `user_values.json` = 0 개(옛 덮개 옮길 자료 없음 · 데스크탑 미확인).
## 1. 내역서를 읽는 곳
| 읽는 곳 | 파일:줄 | 받는 것 | 자유 편집 영향 |
|---|---|---|---|
| 총괄 · 원가계산서 셈(짝) | `B09/Calc_Total.py:128-143` ↔ `.ts:108-121` · 부름 `Router.py:78-80` · `UI_Shell.ts:143` | `bill.sums` 넷(재료 · 노무 · 경비 = 직접비 합 · `supply_net` = 관급 순자재대)만 | `sums` 꼴 지키면 안 고침 · 직접비 판정만 셈 안에서 바뀜 |
| 관급자재대 · 조달수수료 | `B09/Calc_Total.py:205-209` | `supply_net` + 율(조달수수료는 따로 셈 · 내역 fee 줄 안 읽음) | 관급 줄이 관급 묶음 밖으로 나가면 금액 어긋남 → 막음 |
| 총괄 「가. 순공사비계」 줄 | `B09/UI_Tabs_Total.ts:151-155` | `total.sums` | 없음 |
| 집계표 넷 역전개 | `B09/Summary.py:47-66` | 항목 줄(`kind == item`) 수량 × `ref`(material · 호표 키) | 자동 줄에 연결 = 역전개에 듦(바라던 것) · 묶음 줄 안 셈 그대로 |
| 재료비목록표 수량(183-1 두 번 셈) | `B09/Router.py:84-94` → `Calc_Base.py:338` | 역전개 총수량 | 위와 같음 · 서버만 |
| 재료비목록표 「쓰는 곳」 | `B09/UI_Tabs_Base.ts:239-240` | 항목 `ref.tab == material` → 「내역 자재대」 | 없음 |
| 산근 손 로직 · 단가 수요 | `B09/Sangeun.py:477-489 · 496` · `Router.py:97-102` | `user.bill.rows[].ref.tab == logic` | 자동 줄 로직 연결도 같은 자리면 그대로 · 「쓰는 곳」 글만 이름 없을 때 키 |
| 연결 점검 「연결 없음」 | `B09/UI_Tabs.ts`(gaps) | 셈 `gaps` | 지운 줄 = gaps 없음 |
## 2. 설계안 비교
공통 전제 — 초기값 = 기본 로직이 지금 B08 로 짠 내역(지금처럼 GET 때 셈 · 저장 안 함). 작업본 = 덮개(`user_values.json`). 캐시 = `b09-estimation`. 덮개가 비면 = 초기값 표. [저장] 때 서버는 B08 원천 + 덮개로 다시 셈(금액 · 원천 수량을 브라우저에서 받아 적지 않음).
| | 안 A 덧칠 넓힘 | 안 B 통째 굳힘 | ⬜ 안 C 차례표 + 원천 덮개(추천) |
|---|---|---|---|
| 저장 꼴 | `qty` → `edit{키: 칸}` · `gone[]` · `move{키: section · after}` · 수기 줄 + 새 공종 줄 | 첫 손질 때 표 전체 값(이름 · 수량 · 연결)을 줄 목록으로 복사 · `src` 키 | `{v: 2, rows: [표 차례 전체 {key, parent, 고친 칸만}], gone: [자동 키]}` |
| B08 수량 바뀜 | 고친 칸 아니면 따라감 | 줄마다 「따라감」 표시 따로 · 이름 · 연결 개선은 안 들어옴 | 칸 없음 = 원천 따라감 · 칸 있음 = 지킴(이름 · 규격 · 단위 · 연결도) |
| 지운 자동 줄 | `gone` | 목록에 없음 · 새 줄 판정 따로 | `gone` |
| 차례 · 레벨 | 기본 차례 + `after` 끈 + `parent` — 두 벌 | 목록 차례 하나 | 목록 차례 + `parent` 하나 |
| 새 1단 공종 | SECTIONS 밖 갈래 · 공종 합 · 다듬기 · 레벨 셈 모두 덧갈래 | 됨 | 됨(맨 위 묶음 줄 · `cost`) |
| 서버 정본 | 맞음 | 굳힌 원천 수량이 낡음 · 받아 적는 꼴 | 맞음(받는 것 = 차례 · 고친 칸뿐) |
| 고칠 양 | 작음 | 큼 | 중간(셈 뼈대 한 번 바꿈) |
| 위험 | 끈 대상 지움 · 자동 줄 사라짐 → 자리 튐 · 갈래 쌓임 | 기본 로직 고침이 옛 프로젝트에 안 닿음 | 셈 짝 큰 손질 · 옛 덮개 읽기 |
### 추천 안 C 세부
- 저장 꼴 — `rows` = 표 차례(부모 먼저 · 자손 이어서) · `parent` 없음 = 맨 위 · 제목 · 묶음 = `kind: "group"`(기본 제목 `sec:*` 포함) · 맨 위 묶음 `cost` = `direct`(기본) | `supply`(`sec:G` 하나) · 자동 줄 칸 = 없음(원천) / 값 / null(일부러 빈칸) 셋 갈래 · 수기 줄 = 모든 칸.
- 셈(짝 ①) 1 — 기본 나무 = 지금 그대로(SECTIONS + 자동 줄 기본 차례) → 덮개 비면 지금 표와 같은 값.
- 셈 2 — v2 면 `rows` 차례 · 부모로 다시 세움 · `gone` 뺌 · `rows` 에 없는 자동 줄(새 구조물 열 · 대비표 새 표시) = 기본 제목 끝(제목 지웠으면 표 끝) + 비고 「새 자동 줄」 · 원천이 안 낸 키 = 안 보임(자리만 남음).
- 셈 3 — 칸 덮기 = 고친 칸 앞섬 · `auto_{칸}`(지금 `qty_auto` 넓힘)로 원천 값 남김 · 연결 덮기 = `ref_price` 하나(구조물 블록 단가보다 사용자 연결 앞섬).
- 셈 4 — 모든 묶음 = 자손 항목 합 + 「빈 줄 n」(`_nest` 일반화 · 공종 합 자기 + 부모 하나 규칙 없앰) · `level` = 깊이 · 번호 = 레벨 1 · 2 묶음 차례 자동(관급 번호 없음).
- 셈 5 — `sums` = `cost: direct` 맨 위 묶음 자손 항목 합(지금 `DIRECT` 1~4 자리) · `supply_net` = `supply` 묶음 자손 항목 재료비 · 조달수수료 줄 = `supply` 묶음 끝 고정 → `Calc_Total` 안 고침.
- 셈 6 — 옛 꼴(v 없음 · `qty` · 수기 줄 `section` · `after`) = 지금 규칙으로 읽음 · 첫 손질 때 v2 로 굳음.
- 구조물 키 꼬리 = 대가 블록 키(`Calc_Bill.py:237` ↔ `.ts:228`) — 번호 밀림에 덮개 안 흔들림.
- 화면 — 모든 줄 우클릭: 위 · 아래 · 하위 줄 추가 · 새 공종(맨 위 묶음) 추가 · 위로 ↑ · 아래로 ↓(같은 부모 형제와 자손째) · 들여쓰기 → · 내어쓰기 ← · 묶음 줄로 · 항목으로 · 연결 ▸ · 연결 풀기 · 자동 값으로 되돌리기(그 줄 고친 칸 지움) · 줄 지우기.
- 화면 — 고칠 칸 = 모든 항목 줄 명칭 · 규격 · 단위 · 수량 · 묶음 줄 이름 · 「연결 ▾」 = 모든 항목 줄 · 고친 칸 = 칸 강조(공용 표 `cellClass` · 183-3) + 풍선 「자동 값 …」.
- 화면 — 첫 손질 = 보이는 줄의 키 · 부모 · 차례만 v2 `rows` 로 굳힘(자동 줄 값은 안 옮김).
- [내역 초기화] — 확인 창(`ui/elements.ts:317` `showConfirmDialog`) → `bill` 뺀 user 로 PUT → 서버 정본(덮개 오버레이 · 5장 허용 자리).
- 안 깨짐 — `mat:` 관급 줄 = 관급 묶음 밖 못 옮김 · 지우기 = 대비표 「관급 · 별도」 표시 풀기로 이음(주인 = 대비표) · 별도 자재 줄 = 직접비 묶음 안 어디든 · `fee` · `sec:G` = 옮기기 · 지우기 · 연결 없음 · `mat:` · `fee` = 연결 메뉴 없음(단가 주인 = 대비표 · 율).
- 5장 지킴 — 캐시 즉시 · 자동저장 없음 · 덮개 오버레이는 [저장] · [초기화]만 · 셈 = 짝 ①(조작 중 브라우저 · [저장] 서버 정본).
## 3. 고칠 파일 · 시험 · 나눌 경계
| 파일 | 지금 | 뒤(추정) | 700 | 고칠 것 |
|---|---|---|---|---|
| `B09_Estimation/B09_Estimation_Calc_Bill.py` | 377 | 440 | 없음 | 나무 다시 세움 · 칸 덮기 · gone · 새 자동 줄 자리 · 묶음 합 · cost 합 · 번호 · 블록 키 · 옛 꼴 |
| `B09_Estimation/B09_Estimation_Calc_Bill.ts` | 363 | 425 | 없음 | 위와 같음(짝) |
| `B09_Estimation/B09_Estimation_Store.py` | 213 | 250 | 없음 | `clean_bill` v2(아무 자동 키 · 칸 셋 갈래 · `gone` · `cost` · 부모 키) · 옛 꼴 통과 |
| `B09_Estimation/B09_Estimation_Sangeun.py` | 563 | 565 | 없음 | `hand_sources` 쓰는 곳 글(이름 없으면 셈 이름) |
| `B09_Estimation/B09_Estimation_UI_Tabs_Bill_Edit.ts` | 386 | 480 | 없음 | 메뉴 전 줄 · 위로 · 아래로 · 새 공종 · 굳힘 · 칸 고침 v2 · 자동 값으로 · 관급 · fee 막음 |
| 새 `B09_Estimation/B09_Estimation_UI_Tabs_Bill_Link.ts` | — | 110 | 없음 | 연결 고르기 창 떼어 냄(`Bill_Edit.ts:209-307`) — Edit 500 넘으면 |
| `B09_Estimation/B09_Estimation_UI_Tabs_Bill.ts` | 97 | 115 | 없음 | 고칠 칸 · 「연결 ▾」 전 항목 · 칸 강조 · 풍선 · 안내 글(「엑셀 꼴 고정」 지움) |
| `B09_Estimation/B09_Estimation_UI_Shell.ts` | 334 | 350 | 없음 | 좌측 [내역 초기화] |
| `B09_Estimation/B09_Estimation_UI_Page.css` | 114 | 122 | 없음 | 고친 칸 강조 |
| `Calc_Total` · `Summary` · `Router` · `UI_Tabs_Base` · `UI_Tabs_Total` | — | — | — | 안 고침(`sums` · 항목 줄 꼴 그대로) |
시험
| 시험 | 할 것 |
|---|---|
| `test_145_3_b09_bill.py:218-235` | 블록 키 꼬리 「대가n」 → 블록 키 · 나머지(제목 · sums · 거울)는 덮개 빈 꼴이라 그대로 통과해야 함 |
| `test_166_2_b09_bill_hand.py:92-135 · 197-231` | 옛 꼴(qty · after) = 「옛 꼴 읽기」 판정으로 남김 · 메뉴 글(자동 줄도 전체 메뉴) 고침 |
| `test_182_b09_bill_level.py:94-146 · 197-` | 제목도 묶음 합 규칙 · 레벨 값 · 메뉴(자동 줄 · 제목) 고침 |
| 돌리기만 | `test_145_4` · `test_145_5` · `test_183_b09_material_list` · `test_155` · `test_145_2`(한 바퀴) · `test_171_1` · `test_181_1` · `test_183_3` |
| 새 `test_184_2_b09_bill_free.py` | 덮개 빈 꼴 = 지금 표 · 자동 줄 칸 덮기(이름 · 규격 · 단위 · 수량 · 연결) · B08 수량 바뀜 = 안 고친 칸 따라감 · 고친 칸 지킴 · null = 빈칸 · gone 안 살아남 · 새 자동 줄 기본 자리 · 원천 사라진 줄 안 보임 · 새 1단 공종 → `sums` 듦 · 관급 갈래 `supply_net` · fee 끝 자리 · 위로 · 아래로 · 들여 · 내어 · 지우기 · 옛 꼴 → v2 · 블록 키 · TS 거울 · 다듬기 왕복 · 자동 줄 로직 연결 → `sg_hand` · 메뉴 TS · [내역 초기화] 배선 |
나눌 경계(두 창 가능 · 차례 있음)
- 창 ① 셈 · 저장 — `Calc_Bill` 짝 · `Store` · `Sangeun` 한 줄 · 셈 · 거울 · 다듬기 시험. 짝 둘은 한 창이 함께.
- 창 ② 화면 — `UI_Tabs_Bill` · `Bill_Edit`(+ `Bill_Link`) · `UI_Shell` · CSS · 메뉴 · 굳힘 · 초기화 TS 시험.
- 계약 = `user.bill` v2 꼴 + 셈 출력 줄 칸(모든 줄 `parent` · `auto` 표시 · `auto_{칸}` · `level` · `no` · `cost`) — PLAN 184 절에 먼저 적음 · ② 는 가짜 rows 로 시험 → ① push 뒤 ② 합침.
- 184-1(`2d11682d2` · `Bill_Edit.ts` 끝 우클릭)은 이미 이 줄에 있음 → 그 뒤에서 시작.
- 크기 — 한 창이면 하루 안 큰 장 하나(셈 짝 뼈대 + 메뉴) · 나누면 ① 반 · ② 반.
## 4. ⬜ 정할 것
- ⬜ AA-a 설계안 — 추천 안 C(차례표 + 원천 덮개).
- ⬜ AA-b 초기값 · [초기화] — 추천 초기값 = 기본 로직이 지금 B08 로 짠 내역(저장 안 함) · [초기화] = 덮개 지움(`initial_snapshot/` 안 씀 · 5장 초기값 층 자리 그대로).
- ⬜ AA-c B08 바뀜 — 추천 안 고친 칸 따라감 · 고친 칸 지킴(수량 · 이름 · 규격 · 단위 · 연결 같은 규칙).
- ⬜ AA-d 원천에서 사라진 자동 줄 — 추천 안 보임(자리만 남음 · 다시 생기면 그 자리) / 고친 칸 있으면 빈칸 줄로 남김.
- ⬜ AA-e 새 자동 줄 자리 — 추천 기본 제목 끝 + 비고 「새 자동 줄」.
- ⬜ AA-f 새 1단 공종 돈 갈래 — 추천 순공사비(직접비)에 듦 · 관급 갈래 = 관급자재대 하나.
- ⬜ AA-g 관급 자재 줄 — 추천 관급자재대 밖 못 옮김 · 지우기 = 대비표 표시 풀기 / 자유(금액 어긋남 감수).
- ⬜ AA-h 묶음 줄 지우기 — 추천 자식 위로 올림(182 그대로) / 자손째 지움(확인 창).
- ⬜ AA-i 옮기기 — 추천 메뉴 위로 ↑ · 아래로 ↓ + 들여 · 내어쓰기 / 끌어 놓기(공용 표 창 그리기라 큼).
- ⬜ AA-j 깊이 한도 — 추천 5 레벨(CSS lv1~6 있음 · 지금 최대 5).
- ⬜ AA-k 번호 — 추천 레벨 1 · 2 묶음 차례 자동(1 · 1.1 · 관급 없음) / 사용자가 이름에 씀.
- ⬜ AA-l 구조물 줄 키 — 추천 꼬리 = 대가 블록 키(번호 밀림 막음).
- ⬜ AA-m [내역 초기화] 자리 — 추천 좌측 패널 단추 + 확인 창 · 바로 PUT / 제목 줄 우클릭 → 캐시만.
- ⬜ AA-n 옛 덮개(166-2 · 182 저장) — 추천 지금 규칙으로 읽고 첫 손질 때 v2(랩탑엔 자료 0 · 데스크탑 견본 대비).