knowledge(요구): 요구서 내역12 · 조사 넷 — M01 단가산출 로직 보기 · 엔진 바닥 · M02 단가산출 신설 · 메뉴 · 불러오기 · 프로젝트 복사(PLAN 709~719)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
# 내역 12-A — M01 단가산출 로직 화면 요구 1 · 2 조사 (거시 + 미시)
|
||||
|
||||
읽기 전용 · 코드 읽기로만 판정(서버 · 브라우저 안 켬). 경로 앞 `M01_MasterData/` = `M01/` · `ui_template/` = `ui/` 로 줄임.
|
||||
|
||||
## ① 결론 다섯 줄
|
||||
|
||||
1. 표 높이 = 모든 M01 표가 CSS 한 줄(`M01/M01_MasterData_UI_Style.css:88-91` `max-height: calc(100dvh - 300px)` · 표 안 스크롤) + 고정 줄 수(요소 50 · 표 목록 · 로직 목록 30) · 쪽 단추는 표 **위**. 쪽 단추 = M01 `buildPager` 하나(`M01/M01_MasterData_UI_Cells.ts:98-119`) — ui_template 에 없음 · M02 목록 둘도 빌려 씀 → 부품 상자로 옮기고 표 아래로 · 줄 수는 화면 높이로 셈.
|
||||
2. 상세 화면 = `buildLabDetail`(`M01/M01_MasterData_UI_LogicLab_Detail.ts:476-496`) 한 곳이 네 덩이(기본정보 · 시험 계산 · 단가산출 상세 · 텍스트 수식)를 늘 다 그림 → 보기 고르기 = 머리줄(`M01/M01_MasterData_UI_LogicLab.ts:580-591`) [신규 로직] 앞에 「분할 고르기」 + 나눔선 · Detail 이 고른 덩이만 그림. 시험 계산 칸은 숨겨도 DOM 은 남겨야 계산이 돎.
|
||||
3. 「단가 2행」은 설계가 아니라 **CSS 흠** — `.m01-logic__money { display: block }`(`M01/M01_MasterData_UI_Logic_Style.css:207-212`)이 `<td>` 에 붙어 단가 · 금액 두 칸이 한 칸에 위아래로 쌓임(금액 열은 빔). 「수량」 열 = 수량 식 조각(로직)을 보임 · 고른 수량 값은 `/calc` 답 `CalcLine.수량`(`M01/M01_MasterData_UI_Logic_Api.ts:88-104`)에 이미 있음(계산 뒤만).
|
||||
4. EST 식 보기 — B09 단가산출근거(카드 · 표 보기)는 서버 단독 · B09 공사 단가 · 노/재/경 **열** 꼴 · 읽기만 → 자료 길 재사용 불가 · 화면 부품만 쓸 만함. 바탕은 M01 `/text` 답(이미 비목별 묶음 · 소계 · 계 · 조각)과 M02 계산서 보기(704-2 `M02/M02_MasterTemplete_Labor_Sheet.ts` · 비목 묶음 식 줄)가 더 가까움. 모자란 것 = 그룹마다 바꿀 변수 목록(줄 ↔ 입력 이름 짝) · 바꾸면 다시 셈.
|
||||
5. 모달 둘 = 시험 계산 `M01/M01_MasterData_UI_Logic_PickTable.ts`(마스터 표 · 찾기 · 쪽 · 누르면 고름) 대 상세 `openMaterialModal`(`M01/M01_MasterData_UI_LogicLab_Modal.ts:287-395` · 값 칸 세로 · 후보 100 · 읽기만) → 상세 쪽에 찾기 · 고름을 얹어 하나로 · PickTable 은 기계 · M02 일위대가 [바꾸기]가 써서 남김. M02 공용 = API 길 `/m01`(관리자만) 하드코딩 셋 + 마스터 이동 · 로직 열기 등록이 묶음 → 길 주입 + M02 `logic-lib` 읽기 길 넓힘(L).
|
||||
|
||||
## ② 거시
|
||||
|
||||
### 화면 덩어리
|
||||
|
||||
```
|
||||
M01 페이지(UI_Page) ─ 왼쪽 패널(UI_Side · 컨테이너 9)
|
||||
├ 요소 보기 : 머리(UI_Head) · 알림 · 몸 ─ renderRows(인력 · 재료 · 유가전력 · 기계 · 환율 · 요율)
|
||||
│ └ renderTables(소요량 · 계수 → 표 목록 → 표 하나)
|
||||
└ 로직 보기 : mountM01LogicLab(LogicLab · 늦게 import)
|
||||
머리줄 [← 목록] 제목 · 고친 수 · [신규 로직][로직 복사/생성][삭제][버리기][저장]
|
||||
├ 목록(Logic_List · 30 줄 쪽)
|
||||
└ 상세(LogicLab_Side: 왼쪽 지금 내용 | 오른쪽 접는 패널 흐름도 · 원문)
|
||||
왼쪽 = buildLabDetail
|
||||
① 기본정보(infoBox)
|
||||
② 시험 계산(buildCalc → Logic_Calc + CalcPick)
|
||||
③ 단가산출 상세(hoBox · 인력/재료/경비/그 밖 표 + 소계 + 계) ┐ 흐름 로직이면
|
||||
④ 텍스트 수식(buildFormula) ┘ FlowView 한 칸으로 갈음
|
||||
```
|
||||
|
||||
### 파일 지도(줄 수)
|
||||
|
||||
| 몫 | 파일 | 줄 |
|
||||
|---|---|---|
|
||||
| 페이지 · 요소 표 | `UI_Page.ts` 291 · `UI_Rows.ts` 309 · `UI_Tables.ts` 274 · `UI_Cells.ts` 134(쪽 단추) · `UI_Style.css` 176 · `UI_Head.ts` 36 | |
|
||||
| 로직 틀 | `UI_LogicLab.ts` **624** · `UI_Logic_List.ts` 190 · `UI_LogicLab_Side.ts` 80 | 700 근접 |
|
||||
| 상세 | `UI_LogicLab_Detail.ts` 496 · `UI_LogicLab_Formula.ts` 105 · `UI_LogicLab_FlowView.ts` 200 · `UI_LogicLab_FlowRows.ts` 122 · `UI_LogicLab_Pill.ts` 47 | |
|
||||
| 시험 계산 | `UI_Logic_Calc.ts` 306 · `UI_Logic_CalcPick.ts` 171 · `UI_Logic_PickTable.ts` 130 | |
|
||||
| 모달 | `UI_LogicLab_Modal.ts` 432 · `UI_Logic_Note.ts` 291(표 읽기) | |
|
||||
| 길 | `UI_Logic_Api.ts` 388 · `Api_Fetch.ts` 188 | |
|
||||
| CSS | `UI_Logic_Style.css` 289 · `UI_LogicLab_Style.css` 187 · `UI_LogicLab_Formula.css` 46 | |
|
||||
|
||||
### 자료 흐름(로직 하나 열 때)
|
||||
|
||||
1. `fetchLogic(key)` → 줄(`LogicRow`: 입력 · 중간 · 호표 · 덧줄) + `prices`(요소 · 재료 조건 → 단가 요약) (`UI_LogicLab.ts:386-403`).
|
||||
2. `buildCalc` 가 그리며 곧장 `POST /text`(값 없이 미리보기) → `onText` → 상세 다시 그림(`UI_Logic_Calc.ts:136-149`).
|
||||
3. 입력 없으면 바로 계산 · 있으면 `GET /logic/auto` 견본값 채우고 계산(`:150-166`) → `POST /calc` + `POST /text` → `onLines` · `onText` → `drawEditor` → `buildLabDetail` 통째 다시 그림(`UI_LogicLab.ts:207-262`).
|
||||
4. 시험 계산 값 = `opened.values`(로직마다 · Proxy 로 흐름도 예시값과 짝) · 고른 재료 = `CalcPick` 의 WeakMap → 요청 몸 `고름`. 저장 안 함.
|
||||
5. 계산은 서버 단독(③ 꼴 · `/api/m01` 전체 `system_admin_only` · `main.py:546`).
|
||||
|
||||
### 지금 자료 사정(짧게 · 자세한 것은 다른 에이전트 몫)
|
||||
|
||||
- 마스터 로직 1,469 · 호표 있는 것 1,439 · 흐름 로직 0(흐름은 자체 로직만). 호표 줄 종류 = 인력 3,462 · 로직 1,075 · 재료 729 · **기계 0**(기계는 로직 부르기로 들어옴) · 로직 줄 `비목` 1,075 모두 비어 있음 · 덧줄 비목 = 경비 509 · 재료비 130 · 노무비 6.
|
||||
- 그래서 계산 전에는 로직 줄이 「그 밖」 묶음(`Detail.ts:88-90`) · 계산 뒤에는 서버 `CalcLine.비목` 몫으로 노/재/경에 갈라 넣음(`Detail.ts:217-235` `spread`). 화면이 받아야 할 것 = 계산 답의 줄별 비목 몫(이미 옴) + `/text` 비목 묶음(이미 옴).
|
||||
|
||||
## ③ 미시
|
||||
|
||||
### 1. 마스터 요소 표 높이 · 쪽 단추
|
||||
|
||||
- 지금
|
||||
- 높이 = 공용 클래스 `.m01-master__grid-wrap` 의 `max-height: calc(100dvh - 300px)` · 넘치면 표 안 스크롤 · 머리 고정(`UI_Style.css:88-110`). `max-height` 라 짧으면 이미 딸려 올라감. 300px 은 어림값 — 화면마다 위 높이가 달라 맞지 않음.
|
||||
- 줄 수 = 요소 표 50(`UI_Rows.ts:33` · 서버 쪽 · `size` 인자 있음) · 표 목록 30(`UI_Tables.ts:34` · 서버 쪽) · 로직 목록 30(`UI_Logic_List.ts:44` · 화면에서 자름) · 표 하나(`UI_Tables.ts:148-274`) = 쪽 없음 전부 · 품목 고르기 모달 30.
|
||||
- 쪽 단추 자리 = 요소 표는 위 도구줄 안(`UI_Rows.ts:211-214`) · 표 목록은 거름과 표 사이(`UI_Tables.ts:124-129`) · 로직 목록은 찾기 줄 안(`UI_Logic_List.ts:149-155`).
|
||||
- 부품 = ui_template 에 쪽 단추 없음(grep 0). M01 `buildPager`(`UI_Cells.ts:98-119` · 단추 부품 둘 + 글) · M02 `ItemList.ts:11 · 166-186` · `Library_List.ts:18 · 108` 이 M01 것을 import.
|
||||
- 고칠 자리
|
||||
- 부품 상자에 `ui/ui_template_pager.ts`(쪽 단추 + 「화면 높이에 드는 줄 수」 셈 도우미) · 부품 모음 견본(`ui/ui_template_ui_kit_parts.ts`). `buildPager` 는 새 부품으로 갈음.
|
||||
- 높이 = 공용 한 곳(`UI_Style.css:88-91`)에서 화면 아래까지 · 줄 수 = 표 칸 위치에서 남은 높이 ÷ 줄 높이(40) · 창 크기 바뀌면 다시 셈(첫 줄 차례 유지).
|
||||
- 쪽 단추 자리 = 부르는 곳 넷(Rows · Tables 목록 · Logic_List · M02 둘)마다 표 **아래**로 옮김 — 표마다 한 줄씩.
|
||||
- 크기 M · 위험 = M02 목록 둘도 같이 바뀜(같은 부품) · 요소 표 줄에 단추가 든 칸이 있어도 한 줄 40 유지 확인 필요 · 시험 `test_553_5_m01_m02.py` 같은 글 찾기 시험이 클래스 이름을 봄.
|
||||
|
||||
### 2. 상세 세 덩이 → 보기 고르기
|
||||
|
||||
- 지금
|
||||
- `buildLabDetail` 이 `infoBox` · `section(시험 계산, calcHost)` · (흐름 로직이면 `flowHost` · 아니면 `hoBox` + `section(텍스트 수식)`) 을 매번 통째로 `replaceChildren`(`Detail.ts:476-496`) · 고치던 칸 포커스를 손으로 되살림.
|
||||
- 흐름 로직 = `buildFlowView` 가 `flowHost` 에 단가산출 상세 + 텍스트 수식 두 칸을 함께 그림(`FlowView.ts:152-200` · 부르는 곳 `LogicLab_Flow.ts:194-196`).
|
||||
- 머리줄 = `buildHeadBar({ lead: [back], title, status: [pending], buttons: [신규 로직, 로직 복사/생성, 삭제, 버리기, 저장] })`(`LogicLab.ts:580-591`).
|
||||
- 고칠 자리
|
||||
- 머리줄 단추 앞에 `createSegment`(`ui/ui_template_segment.ts`) + 나눔선 — 나눔선은 도구줄 부품 `"divider"`(`ui/ui_template_toolbar.ts:16-41`)로 단추들을 `createToolbar` 에 담아 씀. 로직을 열었을 때만 보임(목록일 때 숨김).
|
||||
- 보기 값 → `DetailContext.view` → Detail 은 고른 덩이만 그림 · 시험 계산은 늘 그려 두고 숨김만(`[data-calc-run]` 을 `click()` 하는 자동 셈이 숨은 칸에서도 돎 · `LogicLab.ts:195 · 340`).
|
||||
- 흐름 로직은 `buildFlowView` 에 「어느 칸」 인자 하나.
|
||||
- `LogicLab.ts` 624 줄 → 고르기 · 기억은 새 파일(예 `UI_LogicLab_View.ts`)에.
|
||||
- 크기 M · 위험 = 단가산출 상세 보기만 볼 때 입력을 바꿀 자리가 안 보임(시험 계산이 숨음) → 결정 거리 ③ · 지금 입력 칸 · 결과가 한 화면이던 흐름(바꿈 → 결과)이 보기 사이로 갈림.
|
||||
|
||||
### 3. 새 보기 「EST 식 단가산출」
|
||||
|
||||
- B09 단가산출 상세 = 「단가산출근거」 탭 `sg`
|
||||
- 화면 = `B09/B09_Estimation_UI_Tabs_Sangeun.ts:75-169`(표 열: 공종 · 산출내역 글 · 합계 · 노무비 · 재료비 · 경비 · 비고) · 카드/표 고르기 `B09/B09_Estimation_UI_Tabs_Groups.ts:266-318` + 하단 스위치 `B09/B09_Estimation_UI_Dock.ts:62-87` · 카드 = 공용 `ui/ui_template_group_cards.ts`(줄마다 `parts` = [노무, 재료, 경비] 열) · 머리 입력 · 중간 칸 = `B09/B09_Estimation_UI_Haul_Steps.ts` `headSteps`.
|
||||
- 자료 = 서버 단독 `B09/B09_Estimation_Sangeun.py`(634 줄) — 공사 사본 · B09 굳힌 단가(노무비목록표 · 중기목록표 · 자재단가대비표)로 셈 · 저장 안 함 · 「이 탭엔 조작 없음」(`Tabs_Sangeun.ts:4`).
|
||||
- 같은 것 = 줄마다 노 · 재 · 경 몫 · 줄 산출 글 · 머리(입력 · 중간 Q) · 총계.
|
||||
- 모자란 것 = **그룹 구분 없음**(노/재/경이 열 · 묶음 머리 없음) · **값 바꾸기 없음** · 단가 출처가 B09 공사 책(M01 마스터 단가 아님) · M01 로직 하나를 받는 길 없음(공사 사본 열쇠).
|
||||
- 판정 = 자료 길 재사용 불가 · 화면 부품(`group_cards` 의 묶음 상자 · `headSteps` 입력 칸 꼴)만 빌릴 만함.
|
||||
- 더 가까운 바탕
|
||||
- M01 `/text` 답 = `groups[{비목, 줄[{이름, 글, 이름글, 조각, 요소조각, 금액, 까닭}], 소계, 끝수}]` · `계`(`Logic_Api.ts:136-157`) — 이미 비목 묶음.
|
||||
- M01 `/calc` 답 = 줄별 `수량 · 단가 · 금액 · 비목 몫 · 품목`(`Logic_Api.ts:88-104`).
|
||||
- M02 계산서 보기(704-2) `M02/M02_MasterTemplete_Labor_Sheet.ts:21-76` = 비목마다 「이름 | 식 | 금액」 줄 · 소계 · 계 · 부품 `ui/ui_template_calc_row.ts`(`createCalcFormulaRow` · 값 줄 `createCalcRow` = 이름 | 입력/고르기 | 덧칸). 서버 `/m02/logic-lib/sheet`(로그인)는 `바꿈` 이 「규격 축 대표 값」만 받음(`M02_Logic_Standard.py:312-320`) → M01 보기는 `/calc` · `/text` 를 씀.
|
||||
- 화면이 받아야 할 것
|
||||
- 그룹(노무비 · 재료비 · 경비)마다: 줄(이름 · 수량 · 단위 · 단가 · 금액 또는 산출 글) · 소계 — 위 두 답으로 충분.
|
||||
- 그룹마다 바꿀 것: (가) 입력 중 그 그룹 줄이 쓰는 것(고르기 = 고르기 칸 · 범위 = 수 칸) (나) 재료 그룹 = 재료 줄마다 품목 고르기 (다) 경비 그룹 = 기계 고르기 입력 · 여러 그룹이 같이 쓰는 입력(지역 · 보정작업 · 시공조건) = 맨 위 「공통」.
|
||||
- 줄 ↔ 입력 짝 = **지금 답에 없음**. 서버 `/text` 조각에 이름 조각(`{kind: "값", 글: 이름, 값}` · `resources/master_data/scripts/master_text.py:357-366`)이 수량 식 몫만 있고 중간 식을 거친 입력은 안 보임 → 서버가 줄마다 「쓰는 입력 이름」을 주는 편이 확실(B09 `Sangeun.py:271` `_captured` 꼴) · 화면 짐작(식 글에서 이름 찾기)은 이름 겹침 위험.
|
||||
- 바꾸면 = `values[이름]` 고침 → 시험 계산 `[data-calc-run]` 다시 누름(지금 길 그대로) → 묶음 다시 그림.
|
||||
- 고칠 자리 = 새 파일(예 `UI_LogicLab_Est.ts`) + 묶음 · 변수 가르기 순수 셈 `M01/logic/`(CLAUDE.md 4장) · Detail 의 보기 갈래 한 줄.
|
||||
- 크기 L(서버 「쓰는 입력」 포함) · 위험 = 계산 전엔 로직 줄이 그룹에 못 들어감(비목 빈칸) · 흐름 로직은 FlowView 쪽 묶음을 따로 받아야 함(지금 마스터엔 0).
|
||||
|
||||
### 4. 단가산출 상세 열
|
||||
|
||||
- 지금 열 = 이름 · 단위 · 수량 · 단가 · 금액(`Detail.ts:392-398`) · 줄 = `lineRow`(`:346-371`).
|
||||
- 「수량」 칸 = 꼬리표(수 · 표 · 식 · `Logic_Edit.ts:113-118`) + 서버 조각 알약(`attachPieces` · `:308-342`) — 곧 **수량 식(로직)**. 조각이 없으면 원식 글 `item.수량`.
|
||||
- 「단가 2행」 = CSS 흠. `cellOf(e.price, "m01-logic__money")` · `cellOf(금액, "m01-logic__money")`(`:364-365`) → `.m01-logic__money { display: block }`(`Logic_Style.css:207-212`) 가 `<td>` 를 칸이 아니게 만듦 → 이웃한 두 칸이 이름 없는 한 칸에 위아래로 쌓임 → 단가 열 = 위 1 단위 값 · 아래 수량 반영 금액 · 금액 열 빔. 같은 클래스가 끝 칸에만 붙은 곳(FlowView 값 · 소계 · 시험 계산 금액 · 후보 값)은 멀쩡함.
|
||||
- 선정 수량 값 = `CalcLine.수량`(% 덧줄은 `pctView` 로 율 · `Logic_Api.ts:107-112`) — `ctx.lines[i]`(`Detail.ts:241`)로 이미 손에 있음 · 계산 전엔 없음.
|
||||
- 고칠 자리 = `lineRow` · `groupTable` 머리 · 빈 줄 colspan 5 → 6 · 소계 colspan 4 → 5(`Detail.ts:373-416`) · 열 폭 `LogicLab_Style.css:44-63` · 돈 칸 CSS 를 `<td>` 에선 칸 그대로(`Logic_Style.css:207`). 새 열 차례 = 이름 · 수량 · 단위 · 로직 · 단가 · 금액.
|
||||
- 크기 S · 위험 = M02 `Labor_Detail.ts:77` 도 `LogicLab_Style.css` 를 실음(열 폭 규칙은 `.m01lab__ho` 한정이라 영향 작음).
|
||||
|
||||
### 5. 시험 계산 칸
|
||||
|
||||
- 지금 = 입력 칸 + 재료 줄을 한 격자에 섞음(`Logic_Calc.ts:197-204`) · 2 열 고정(`Logic_Style.css:78-81`) · 이름 10 자 넘으면 한 줄 통째(`Logic_Calc.ts:125-130`) · 재료 줄은 늘 한 줄 통째 + 「잡힌 품목 글 + [품목 고르기]」(`CalcPick.ts:52-56 · 83-102`) · 기계 입력도 [기계 고르기] 단추(`CalcPick.ts:152-169`).
|
||||
- 고칠 자리 = 격자 둘(옵션 · 자재)로 나눔 + 사이 수평선 · 4 열(`Logic_Style.css:78-81`) · 「넓은 칸」 규칙 = 2 칸 차지로 · 재료 칸 = 품목 이름을 링크 단추(`createButton({ variant: "link" })` · 쓰는 예 `UI_Tables.ts:221`)로 · 누르면 6 의 합친 모달.
|
||||
- 수평선 부품 = ui_template 에 가로 나눔선 없음(도구줄 나눔선은 세로) → `ui/ui_template_panel_head.ts` 의 `divider`(밑줄) 소제목 「옵션」 · 「자재」로 갈음하거나 부품 상자에 가로 나눔선 더함.
|
||||
- 크기 S · 위험 = `test_149_4_pct_extra.py:58` 가 `Logic_Calc.ts` 글을 읽음.
|
||||
|
||||
### 6. 모달 둘 → 하나
|
||||
|
||||
| | 시험 계산 품목 고르기 | 상세 재료 줄 모달 |
|
||||
|---|---|---|
|
||||
| 파일 | `Logic_PickTable.ts:45-130` | `LogicLab_Modal.ts:287-395`(+ `priceView` 179-208 · `candidateView` 224-276) |
|
||||
| 위 | 찾기 칸 · 쪽 단추 | 잡힌 품목 한 장(이름 · 키 · 규격 · 값 · 출처 · 값 칸 다섯 = **세로 dl**) + [마스터 화면에서 보기] |
|
||||
| 목록 | 마스터 `/rows` 자재품목 표 30 줄 쪽(키 · 구분 · 상세구분 · 이름 · 규격 · 단위 · 물가자료 · 유통물가 · 물가정보 · 거래가격) | `/elements` 재료 이름 찾기 100 건 끝(이름 · 규격 · 단위 · **값**) · 잡힌 줄 노랑 · **누름 없음(읽기만)** |
|
||||
| 아래 | 없음 | 한 줄 풀이(단가 × 수량 조각) · 원문 수량 식(접힘) |
|
||||
| 폭 | 1040 | 모달 기본 |
|
||||
|
||||
- 합치는 길(상세 쪽 기준): `openMaterialModal` 에 `onPick?` 하나 — 있으면 후보 줄 누름 = 고름(`CalcPick` `picksOf(values)` 에 넣고 다시 셈). 후보에 찾기 칸 + 쪽 단추(PickTable 의 것 옮김). 위 값 칸 = 가로 한 줄(물가자료 · 유통물가 · 물가정보 · 거래가격 · 관급 — 서버 칸 이름 `master_material.py:18` `SLOTS`) · 부품 후보 = `ui/ui_template_stat.ts` 카드 줄(`.ui-stat-grid`). 아래 목록 「값」 열 뺌.
|
||||
- 후보 출처 = 지금 `/elements`(이름 찾기 · 품셈재료 줄이 섞일 수 있음) → `/materials`(조건 · 단위 거름 · 값 다섯 · `기본` 줄 · `M01_MasterData_Store.py:491-505`) 권함.
|
||||
- 시험 계산 쪽은 계산 전이라 `qtyFrag` · `unitFrag` 이 없음 → 모달은 이미 그 칸들이 선택 칸이라 그대로 됨.
|
||||
- PickTable = 남김 — 기계 고르기(`CalcPick.ts:155`) · M02 일위대가 자재 [바꾸기](`M02/M02_MasterTemplete_Labor_LogicMats.ts:13 · 87`)가 씀.
|
||||
- 크기 M · 위험 = `Modal.ts` 432 → 약 520 · `test_modal_top_and_add_word.py:49` 가 PickTable 글을 읽음 · M02 LogicMats 가 `headWord` 를 Modal 에서 import(이름 유지).
|
||||
|
||||
### 7. 텍스트 수식 누름 → 바꾸기
|
||||
|
||||
- 지금 = 서버 `/text` 줄의 `이름글`(변수 이름 식) · `글`(값 든 식) **평글 두 칸**만 찍음 · 누름 = 짝 줄 밝히기만(`Formula.ts:42-104`).
|
||||
- 이미 오는 것 = 줄마다 `조각`(수량 식) · `요소조각`(단가 자리) — kind 요소 · 표 · 로직 · 값 · 기호 · 글 + `참조`. 이름 조각은 `{kind: "값", 글: 이름, 값: 값}` 으로 옴(`master_text.py:357-366`) — TS 형(`Logic_Api.ts:124-135` `TextPiece`)에 `값` 칸이 빠져 있음.
|
||||
- 이을 자리 = 오른쪽 칸을 평글 대신 조각으로(상세 수량 칸이 이미 쓰는 `toFragments` · `fragmentRow` · `Detail.ts:41-57` · `Pill.ts:36-47`) · 누름 갈래: 이름 조각이 입력이면 그 입력 고르기/수 칸(작은 모달 또는 시험 계산 칸으로 포커스) → `values` 고침 → 다시 셈 · 요소 = 6 의 합친 모달(고름) · 표 = 표 모달(읽기만 · `Modal.ts:423-432`) · 중간 이름 = 누름 없음.
|
||||
- 크기 M · 위험 = 조각은 수량 식 · 단가 자리 몫만 — 줄 앞뒤 글(「이름 : … = 금액」)은 화면이 이어 붙여야 함 · 계산 전 미리보기(`계산됨: false`)엔 값이 빔.
|
||||
|
||||
### 8. M02 「단가산출」 칸에서 같은 상세 쓰기
|
||||
|
||||
| 묶인 곳 | 근거 | 떼는 길 |
|
||||
|---|---|---|
|
||||
| API 길 `/m01` 하드코딩 | `Logic_Api.ts:193-203` `request` · `Api_Fetch.ts:93`(`fetchRows` — CalcPick · PickTable) · `Logic_Note.ts:34`(`loadTable`) | 길 앞머리를 주입(상세 · 모달 · 시험 계산이 받는 `api` 한 벌) |
|
||||
| 관리자 권한 | 서버 `/api/m01` 전체 `system_admin_only`(`main.py:546`) · M02 `logic-lib` 로그인 길은 logics · subs · logic · auto · inputs · standard · sheet · source 뿐(`M02_MasterTemplete_Router_Combos.py:92-150`) | `logic-lib` 에 읽기 길 넓힘 — calc · text · elements · materials · rows(자재 · 기계) · table · (흐름 로직 쓰면) logic/flow · 같은 M01 store 함수 얇게 감쌈. M02 층(회사 · 개인)은 일반 사용자가 읽음(`M02_Layer_Access.py:1-9`) |
|
||||
| 화면 쪽 관리자 표시 | `LogicLab.ts:126-128`(`admin` → 기본정보 글 · 흐름도 읽기 전용) | 부르는 쪽이 넘김(이미 ctx 칸) |
|
||||
| 마스터 화면 이동 | `Modal.ts:171-177` `goButton` → `UI_Side.ts:74-78` `jumpToMaster`(M01 페이지가 등록) | M02 에선 단추 숨김(등록 없으면 지금은 눌러도 무반응) |
|
||||
| 로직 알약 → 그 로직 열기 | `Modal.ts:27-34` `setLogicOpener` — M01 LogicLab 이 등록(`LogicLab.ts:622`) | M02 가 자기 열기(모달) 등록 |
|
||||
| 초안 · 저장 | `LogicLab.ts:98-109 · 485-519`(sessionStorage `m01_logic_drafts_lab` · `/m01/save`) · 자체 로직 편집기(`Detail.ts:418-441` `buildEditor` · `openPicker`) | 상세 그리기와 무관 — M02 는 자기 저장 길(연결 정보 · 다른 에이전트 몫) · 편집기는 M02 에서 끔 |
|
||||
| 원문 패널 | `LogicLab_Source.ts` `createSourceView({ path, pdf })` | 이미 주입형(M02 `Labor_Sheet.ts:24-27` 가 씀) — 본보기 |
|
||||
|
||||
- 파일 자리 = M01 에 둔 채 주입(M02 가 M01 화면 파일을 import 하는 앞선 예 많음 — `ItemList` · `Library_List` · `Labor_LogicMats` · `Labor_Detail`). 옮기지 않음.
|
||||
- 크기 L(서버 길 6 남짓 + 화면 주입 + M02 칸) · 위험 = `M02_MasterTemplete_UI_Main.ts` 665 줄 — 새 칸은 다른 파일로 · `/calc` 가 `row`(저장 안 한 줄)를 받는 길을 로그인에 열면 셈 부하만 늘고 쓰기는 없음(받을지 결정).
|
||||
|
||||
### 덧 — 2 번 아래 「단위 변환」 · 「기준단위」 줄
|
||||
|
||||
화면 몫 아님(계산 로직 · 다른 에이전트). 화면 닿는 곳만 = 단위 다름 꼬리표 `CalcLine.단위경고`(`Detail.ts:356` · `Logic_Calc.ts:236-238`) — 환산이 생기면 이 꼬리표가 줄어듦.
|
||||
|
||||
## ④ 결정 거리
|
||||
|
||||
1. 표 줄 수 — (가) 화면 높이로 셈 · 표 안 스크롤 없음 · 쪽 단추로만 넘김 **권함** (나) 지금 50 / 30 그대로 · 표 칸만 화면 끝까지 · 표 안 스크롤 + 쪽 단추.
|
||||
2. 표 하나(소요량 · 계수 표 한 장) — 쪽 없이 화면 높이 안 스크롤 **권함** / 쪽 나눔.
|
||||
3. 보기 고르기 항목 — 단가산출 상세 · EST 식 · 시험 계산 · 텍스트 수식 넷 **권함** · 기본정보 = 늘 맨 위 접힘 한 줄 **권함**(보기에 넣으면 다섯).
|
||||
4. 보기 기억 — 로직을 바꿔도 이 화면 안에선 고른 보기 유지 · 새로 들어오면 단가산출 상세 **권함** / 계정에 기억.
|
||||
5. 입력 바꾸는 자리 — 단가산출 상세 = 보기 전용 · 바꾸기는 EST 식 · 시험 계산 · 텍스트 수식에서 **권함** / 단가산출 상세 위에도 입력 한 줄.
|
||||
6. EST 식 줄 꼴 — 산출근거 글 꼴(「석공 : 268,908 × 품 = 금액」 · M02 계산서 보기 줄 꼴) + 그룹 머리 변수 칸 **권함** / 표 꼴(단가산출 상세와 겹침).
|
||||
7. 그룹 변수 가르기 — 서버가 `/text` 줄마다 「쓰는 입력」 을 줌 **권함** / 화면이 식 글에서 짐작.
|
||||
8. 단가산출 상세 열 — 이름 · 수량 · 단위 · 로직 · 단가 · 금액(금액 열 유지) **권함** · 계산 전 수량 칸 = 「—」 **권함**.
|
||||
9. 합친 모달 후보 출처 — `/materials`(조건 · 단위 거름 · 값 다섯) **권함** / 지금 `/elements` 이름 찾기 · 위 가로 칸 = 값 있는 칸만 · 시험 계산이 쓴 값(최저) 굵게 **권함**.
|
||||
10. 기계 고르기 — PickTable 그대로(재료만 합침) **권함** / 기계도 같은 모달 꼴로.
|
||||
11. 시험 계산 수평선 — panel_head 밑줄 소제목 「옵션」 · 「자재」 **권함** / 부품 상자에 가로 나눔선 새로.
|
||||
12. M02 공용 — M01 파일에 둔 채 API 길 주입 + `logic-lib` 읽기 길 넓힘 **권함** / 공용 폴더로 옮김 · 로그인 `/calc` 에 `row` 받기 = M02 단가산출(고친 로직)이 쓰려면 필요 · 받음 **권함**(쓰기 없음).
|
||||
|
||||
## ⑤ 단계 제안
|
||||
|
||||
| 차례 | 창 | 파일(경계) | 크기 |
|
||||
|---|---|---|---|
|
||||
| 1 | A 상세 틀 | CSS 흠(`Logic_Style.css:207` 돈 칸) · 열 고침(`Detail.ts` lineRow · groupTable · `LogicLab_Style.css:44-63`) · 보기 고르기(새 `UI_LogicLab_View.ts` · `LogicLab.ts` 머리줄 · `Detail.ts` 갈래 · `FlowView.ts` 칸 인자 · `LogicLab_Flow.ts:194-196`) | M |
|
||||
| 1 (함께) | B 표 높이 | 새 `ui/ui_template_pager.ts` · `ui_kit_parts.ts` 견본 · `UI_Cells.ts` · `UI_Rows.ts` · `UI_Tables.ts` · `UI_Logic_List.ts` · `UI_Style.css` · M02 `ItemList.ts` · `Library_List.ts` | M |
|
||||
| 2 | C 시험 계산 · 모달 | `Logic_Calc.ts` · `CalcPick.ts` · `LogicLab_Modal.ts` · `Logic_Style.css:78-81`(A 와 같은 파일 — A 끝난 뒤) | M |
|
||||
| 3 | D EST 식 · 텍스트 수식 | 새 `UI_LogicLab_Est.ts` · 새 `M01/logic/` 묶음 · 변수 셈 · `Formula.ts` · `Logic_Api.ts` `TextPiece` · (서버 「쓰는 입력」 = 로직 자료 에이전트와 짝) | L |
|
||||
| 4 | E M02 공용 | `Logic_Api.ts` · `Api_Fetch.ts` · `Logic_Note.ts` 길 주입 · `M02_MasterTemplete_Router_Combos.py` 읽기 길 · M02 새 칸(UI_Main 밖 새 파일) | L |
|
||||
|
||||
- 700 줄 넘을 곳 = `UI_LogicLab.ts` 624(보기 고르기는 새 파일로) · `M02_MasterTemplete_UI_Main.ts` 665(M02 칸은 새 파일로) · `LogicLab_Modal.ts` 432 → 약 520(괜찮음) · `Detail.ts` 496(EST 는 새 파일로).
|
||||
- 먼저 할 것 = A 의 CSS 흠 한 줄(단가 2 행이 곧 풀림) · B(다른 창과 안 겹침).
|
||||
- 같은 파일 겹침 = `Logic_Style.css`(A · C) · `Detail.ts`(A · D) · `Logic_Api.ts`(D · E) → 차례로.
|
||||
@@ -0,0 +1,296 @@
|
||||
# 내역 12-B — M01 단가산출 로직 원론 · 단위 변환 · 기준단위 (조사 에이전트 · 11-01)
|
||||
|
||||
읽기 전용 조사. 코드 · 자료 안 고침. 수치 = `resources/master_data/` 첫 층 JSON 을 일회 스크립트로 직접 센 값(스크립트는 지움).
|
||||
경로 줄임 — `MD/` = `resources/master_data/` · `S/` = `MD/scripts/` · `M01/` = `M01_MasterData/M01_MasterData_` · `M02/` = `M02_MasterTemplete/` · `원문/` = `resources/knowledge/original/원가계산/`.
|
||||
|
||||
## ① 결론 다섯 줄
|
||||
|
||||
1. 로직 1,469 개 = 장 파일 56 개(산림 330 · 건설 1,139)의 JSON 줄 하나씩 · 목록은 파일 「차례」대로 이어 붙인 평평한 한 목록. 인력 · 재료 · 경비 · 연결 · 판을 보이는 칸이 목록에 없음. 소유는 전부 「공용」 · 자체 로직(GX)은 0 개.
|
||||
2. 「한 내용이 여럿으로 갈림」은 꼴이 다섯 가지임. ㉮ 작업량 로직과 단가 로직으로 나뉜 짝 24. ㉯ 한 절에 로직이 둘 넘는 절 118 곳(로직 323). ㉰ 원문 소절대로 갈린 같은 공종 64 묶음(로직 266 · 예 구조물터파기 18). ㉱ (인력)·(장비) 갈래 45. ㉲ 다른 부문에 같은 품 23 쌍. 대부분 원문 절 짜임을 그대로 따른 것이라 틀린 것은 아님. 다만 실무자 눈에는 「입력 하나로 고를 것을 줄 여럿으로 늘어놓은 것」으로 보임.
|
||||
3. 로직끼리 잇는 장치는 `로직(키, 입력=값)` 한 가지임. 부르는 자리 1,116 곳 · 간선 777 · 깊이 최대 2 · 고리 0 · 셈 때 깊이 20 · 검사 · 저장 때 고리를 막음. 그중 1,044 곳은 기계경비(8장) 부르기임. 원문 주 · 비고 참조로 실제 이은 것은 59 곳(작업량 24 · 산림 12장 복합 구조물 등 35)뿐임. 나머지 주 참조는 표 찾기(다른 절 출처 칸 1,002)로 잇거나, 비고 글(「별도」 726 로직)로만 남음.
|
||||
4. 인력 · 재료 · 경비를 가르는 칸은 없음. 그래도 줄마다 이미 있는 `비목` 칸과 「대상 로직이 원/시간 기계경비인가」만 보면 5,911 줄 가운데 5,880 줄(99.5 %)을 자동으로 가름. 못 가르는 31 줄은 복합 하위 로직(합판거푸집 · 철근가공 등) 부르기임. 구분은 정본에 칸을 더하지 않고 셈 때 파생하는 것이 맞음.
|
||||
5. 기준단위 · 단위 변환
|
||||
- 원문 표 머리의 기준(「인/㎡당」 · 「㎥/㎡당」 · 「일당」 · 「10㎡당」)은 표 `기준` 칸에만 글로 남음 — 271 꼴 · 빈 칸 41 % · 엔진이 안 씀.
|
||||
- 「원/10㎡」 같은 배 처리는 로직마다 들쭉날쭉임(배 유지 54 · 식에서 나눔 32 · 확인 필요 6).
|
||||
- 단위 변환은 같은 성격(무게 · 길이 · 넓이 · 부피) 환산 한 벌뿐이고, 비슷한 환산이 다섯 자리에 흩어져 있음. 부피↔무게 · 개수 별칭 · 결과단위 배 읽기를 한 벌로 모으는 일이 필요함.
|
||||
|
||||
## ② 거시
|
||||
|
||||
### 2-1 로직 자료 꼴
|
||||
|
||||
- 자리 = `MD/로직_<원문>_<NN>장_<장 제목>.json` · 머리 `{그룹, 원문, 차례, 판, 줄:[…]}` · 줄 하나 = 로직 하나(`MD/_틀.md:166-205`).
|
||||
- 줄 칸 = 키 · 원문번호 · 구분 · 상세구분 · 이름 · 결과단위 · 출처 · 소유 · 비고 · 입력 · 중간 · 호표 · 덧줄 · 끝수 (+ 돈 아닌 로직 `결과` 27 · `시험입력` 193). `흐름` 칸 0 · `별칭` 0.
|
||||
- 호표 줄 = `{종류(인력·재료·기계·로직), 요소, 이름, 단위, 수량(식), 비목(노무비·재료비·경비)}` · 덧줄 = `{이름, 식, 비목}`(`MD/_틀.md:201-206`).
|
||||
- 값은 로직에 박지 않음. 표(소요량 · 계수 3,033 · 로직이 부르는 것 2,011)를 `찾기(…)` 로 부름.
|
||||
|
||||
### 2-2 셈 흐름 (서버 단독 · `S/master_formula.py:564-660`)
|
||||
|
||||
```
|
||||
입력(설계 값 · 고르기) → 중간(식 · 표 찾기 · 작업량 로직) → 호표 줄마다 수량 × 단가
|
||||
단가 = 인력 LB 노임 · 재료 검색어→자재품목(같은 성격 단위 환산) · 로직 = 하위 로직 「계」
|
||||
비목 칸 없는 로직 줄 = 하위 노무비·재료비·경비를 수량만큼 나눠 얹음(:588-599)
|
||||
→ 덧줄(공구손료 · 잡재료 = 비목 합 × %) → 끝수 → {줄, 노무비, 재료비, 경비, 계}
|
||||
```
|
||||
|
||||
- M01 화면 시험 계산도 서버 `/calc`(`M01/UI_Logic_Api.ts:253`) — 브라우저 셈 없음(③ 서버 단독).
|
||||
|
||||
### 2-3 참조 그래프
|
||||
|
||||
```
|
||||
┌─ 호표 로직(…) 1,044 ─▶ [기계경비 로직 · 원/시간 · 8장 10 + 산림 1]
|
||||
│ └ 안: 조종원(인력) · 주연료(재료) · 덧줄 손료(경비)
|
||||
[부르는 로직 506] ─┼─ 중간 로직(…) 40 ────▶ [작업량 로직 27 · ㎥/시간] (같은 절 짝 24)
|
||||
├─ 호표 로직(…) 31 ────▶ [복합 하위 로직 · 산림 12장 타설·거푸집·철근·비닐 등]
|
||||
└─ 찾기(…) ───────────▶ [표 2,011] (다른 절 출처 칸 1,002 — 8-1-7 지역 · 보정 등)
|
||||
깊이: 0 = 963 · 1 = 502 · 2 = 4 · 고리 0 · ID 간선 GC→GC 583 · GF→GC 136 · GF→GF 58
|
||||
```
|
||||
|
||||
## ③ 미시
|
||||
|
||||
### 1. 로직 목록의 꼴
|
||||
|
||||
| 항목 | 지금 |
|
||||
|---|---|
|
||||
| 저장 | 장 파일 JSON 줄(위 2-1) · 키 = 영문 2 + 6 자리 · 한 번 준 키 안 바뀜(`MD/_틀.md:28-33`) |
|
||||
| 목록 만들기 | `M01/Store.py:334-372` — 로직 파일을 머리 `차례`(산림 3→14장 → 건설 공통 → 토목 → 건축 → 기계설비 → 유지관리)로 이어 붙임 · 구분 · 상세구분 · 소유 · 찾기 · 막힘으로 거름 |
|
||||
| 목록 칸 | 키 · 원문번호 · 구분 · 상세구분 · 이름 · 결과단위 · 출처 · 소유 · 별칭 · 막힘(`:351-370`) |
|
||||
| 화면 | 한 번 받아 화면에서 거름 · 쪽 나눔 · 왼쪽 「전체」 + 구분 → 상세구분(`M01/UI_Logic_List.ts:1-5`) |
|
||||
| 수 | 1,469 · 산림 330(3장 10 · 4장 9 · 5장 47 · 6장 15 · 7장 25 · 8장 17 · 9장 77 · 10장 24 · 11장 5 · 12장 56 · 13장 43 · 14장 2 · 1·2장 없음 = 표만) · 건설 공통 278 · 토목 282 · 건축 163 · 기계설비 272 · 유지관리 144 · 큰 파일 = 플랜트 123 · 측량 107 · 가설 82 · 산림 토공 77 |
|
||||
| 돈 아닌 로직 | 27(작업량 · 산림 9장 20) — 목록에 단가 로직과 나란히 섞여 보임 |
|
||||
|
||||
- 없는 것 — 인력 · 재료 · 경비 구성 · 부르는/불리는 수 · 판 · 금액. 같은 절 · 같은 공종 묶음 접기.
|
||||
- 고칠 자리 — `M01/Store.py:351-370` 목록 칸 + `M01/UI_Logic_List.ts`. 크기 S. 위험 낮음(읽기 칸만 더함).
|
||||
|
||||
### 2. 「하나의 내용인데 갈라진 것」
|
||||
|
||||
| 꼴 | 수 | 예 |
|
||||
|---|---|---|
|
||||
| ㉮ 작업량 + 단가 짝(같은 절) | 24 짝 · 48 로직 | GF000102 작업량 → GF000103 「구조물터파기 육상토사(1~2m)」 |
|
||||
| ㉯ 한 절에 로직 둘 이상 | 118 절 · 323 로직(절당 최대 10) | 건설 공통 8 기계경비 10 · 6-4-1 PSC빔 7 · 토목 9-3-3 택지조성측량 6 · 5-1-7 앵커 6 |
|
||||
| ㉯-1 같은 절 + 이름 뿌리 같음 | 27 묶음 · 73 로직 | 9-5-1 시운전·조정 5 · 8-4-2 대구경 보링 천공 4 |
|
||||
| ㉰ 상위 절 같고 소절 갈림(첫 낱말 같음 · 3 개 넘음) | 64 묶음 · 266 로직 | 산림 9-13 구조물터파기 18 · 유지관리 2-1 소파보수 9 · 공통 3-3 암발파 7 |
|
||||
| ㉱ 이름 끝 (인력) · (기계) · (장비) | 27 · 10 · 8 | 13-4-1 메쌓기(인력) ↔ 13-4-2 메쌓기(장비) |
|
||||
| ㉲ 다른 부문에 같은 품 | 23 쌍 · 46 로직 | 차선도색 토목 1-8-9 ↔ 유지관리 2-1-15 · 관목식재 건설 공통 ↔ 산림 |
|
||||
|
||||
표본 대조(원문 ↔ 로직):
|
||||
|
||||
| 원문 | 원문 꼴 | 로직 | 판단 |
|
||||
|---|---|---|---|
|
||||
| 산림 9-13 구조물터파기(`원문/산림_표준품셈/본문/제09장_토공/9-13_구조물터파기.md`) | 소절 18 = 토질 3 × 육상·용수 2 × 깊이 3 · 머리 「인력 10%+기계 90%」 · 「0~1m와 동일」 참조 | GF000100~111(작업량 6 + 단가 6) + GF000265~276(12) = 24 | 원문 소절대로 · 입력 셋(토질 · 육상/용수 · 깊이)으로 묶을 후보 |
|
||||
| 산림 13-4 돌쌓기 | 13-4-1 메 인력 · 13-4-2 메 장비 · 13-4-4 찰 인력 · 13-4-5 찰 장비 | GF000219~222 | 원문 소절대로 · 조합 알약은 이미 괄호 떼고 한 알약(`M01/Store_Combo.py:160-166`) |
|
||||
| 건설 공통 8 기계경비 | 8-1~8-4 규정 한 벌 | GC000267~276 · 10(굴착기 · 부착물 · 조종원 없음 · 손료 보정 · 손료만) | 기종 갈래로 나눔 · 엔진 「만약」 으로 합칠 수 있으나 1,044 곳이 부름 — 그대로 둘 것 |
|
||||
| 건설 토목 9-3-3 택지조성측량 | 한 표(지대 × 등급) | 6 로직(촌락·구릉 × 가·나·다) | 입력 둘로 합칠 후보 |
|
||||
| 건설 공통 6-4-1 PSC빔 | 한 절 · 공정 표 여럿 | 7 로직(제작대 · 쉬즈관 · 정착구 · 강연선 · 인장 · 그라우팅 …) | 공정마다 따로 쓰는 실무 꼴 — 그대로 |
|
||||
| 산림 13-3-1 기초다짐 | 한 절 표 | 3 로직(모래·자갈 · 조약돌 · 돌쌓기 뒤채움) | 입력 하나로 합칠 후보 |
|
||||
| 토목 1-8-9 ↔ 유지관리 2-1-15 차선도색 | 두 부문에 같은 품 | 5 + 5 | 원문이 둘 — 합치지 않음 · 찾기에서 함께 보이기 |
|
||||
|
||||
- 고칠 자리 — 정본은 그대로 두고 목록에 「묶음」 파생 칸을 더함(같은 절 · 이름 뿌리 · 작업량 짝 · 상위 절). 크기 M.
|
||||
- 위험 — 정본 합치기는 키 불변 규칙(`MD/_틀.md:31`)과 M02 · 프로젝트 사본 연결(키로 담음)을 깸 → 크기 L · 피함.
|
||||
|
||||
### 3. 원문 주(註) 참조로 이은 로직
|
||||
|
||||
장치:
|
||||
- `로직(키, 입력=값 …)` — 호표 `요소`(종류 「로직」) · `중간` 식 · `덧줄` 식에 씀(`S/master_formula.py:232-235` 읽기 · `:481-486` 셈).
|
||||
- 돈 로직은 묶음 `.노무비 .재료비 .경비 .계` · 돈 아닌 로직은 수 하나(`MD/_틀.md:252`).
|
||||
- 입력을 모두 넘겨야 함 — 빠짐 · 남음은 검사 오류(`S/master_formula_check.py:112-124`).
|
||||
- 고리 막음 셋:
|
||||
- 셈 때 깊이 20 넘음 = 오류(`S/master_formula.py:482-483`)
|
||||
- 검사 `find_loops`(`S/master_formula_check.py:211-227` · `S/check_master.py:445`)
|
||||
- 저장 때 고친 줄과 그 줄을 부르던 줄만 다시 검사(`M01/Store_Cache.py:207-245` → `M01/Store.py:676-680` 422)
|
||||
- 거꾸로 보기 — 표 → 로직은 `용도.로직키`(`S/build_용도.py`). 로직 → 「나를 부르는 로직」은 저장 검사 안에만 있고 화면에는 없음(조합만 `M01/Store_Combo.py:196`).
|
||||
|
||||
수치:
|
||||
|
||||
| 무엇 | 수 |
|
||||
|---|---|
|
||||
| 부르는 자리 | 1,116(호표 1,075 · 중간 40 · 덧줄 1) · 간선 777 · 부르는 로직 506 · 불리는 로직 42 |
|
||||
| 기계경비 부르기 | 1,044 — GC000268 317 · GC000267 150 · GC000273 99 · GC000275 51 · GC000271 37 · GC000270 31 · GC000272 28 |
|
||||
| 기계 밖 부르기 | 59 간선 · 부르는 40 · 불리는 33 — 같은 절(작업량) 24 · 다른 절 35 |
|
||||
| 다른 절 35 | 산림 10장 골재운반 → 10-3 작업량 3 · 덤프 기계경비 1 · 산림 12장 측구 · 관 · 날개벽 · 면벽 · 집수정 · 맨홀 · 다웰바 → 12-1-1 타설 · 12-4 합판거푸집(10) · 12-3 철근가공(7) · 12-37 타설(4) · 12-25 기초잡석 · 12-33 비닐깔기 |
|
||||
| 표로 이은 다른 절 | 칸 출처 1,002(로직 549) — 건설 공통 8-1-7 5 지역 495 · 8-1-7 1 보정작업 141 · 토목 6-1-1 8 시공조건 56 · 공통 8-1-3 5 조종원 51 · 산림 2-1-2 34 · 12-4 30 |
|
||||
| 칸 출처에 「주」 | 1,162 |
|
||||
| 글로만 남은 참조 | 비고 「별도」 726 로직(절번호 함께 220) · 「미반영」 13(예 GF000103 「관보호공 30% 가산 미반영」) |
|
||||
|
||||
사례:
|
||||
- GF000169 L형 측구 = 레미콘 + `로직(GF000155 무근 타설)` + `로직(GF000160 합판거푸집 4회)` + `로직(GF000159 철근가공 간단)` × 30 % + `로직(GF000205 비닐깔기)`(`MD/로직_산림품셈_12장_철근콘크리트.json:1265-1300`). 원문 표 규격 칸의 참조를 로직 부르기로 바꾼 것으로, 사실상 일위대가 꼴임.
|
||||
|
||||
- 고칠 자리 — 화면에 「부르는 로직 · 불리는 로직」 표시(서버는 이미 지도를 셈: `M01/Store_Cache.py:207-219`). 크기 S. 「별도」 글 참조를 「관련 로직」 링크 칸(보기 전용)으로 올리는 일은 크기 M.
|
||||
- 위험 — 복합 로직(산림 12장 31 줄)은 M02 일위대가와 겹치는 역할 → M02 단가산출 신설 때 「로직 안 로직」과 「일위대가 안 로직」 경계를 정해야 함.
|
||||
|
||||
### 4. 인력 · 자재 · 경비 구분
|
||||
|
||||
지금 줄을 가르는 것 = `종류` + `비목`. 구분 칸은 없음.
|
||||
|
||||
| 줄 | 종류 / 비목 | 수 | 자동 묶음 |
|
||||
|---|---|---|---|
|
||||
| 호표 | 인력 / 노무비 | 3,462 | 인력 |
|
||||
| 호표 | 재료 / 재료비 | 726 | 재료 |
|
||||
| 호표 | 재료 / 경비 | 3(체인톱 손료 · GF000002 · GF000056 · GF000076) | 경비(비목 따라) |
|
||||
| 호표 | 로직 / 비목 없음 → 대상 원/시간 기계경비 | 1,044 | 경비(장비) · 돈은 노·재·경으로 나뉜 채 |
|
||||
| 호표 | 로직 / 비목 없음 → 복합 하위 로직 | 31(원/㎡ 12 · 원/㎥ 11 · 원/ton 8) | 못 가름 — 펼치거나 「하위 산출」 한 줄 |
|
||||
| 호표 | 기계 | 0 | 종류 「기계」는 틀에만 있고 안 씀 — 기계는 모두 기계경비 로직으로 |
|
||||
| 덧줄 | 경비 509 · 재료비 130 · 노무비 6 | 645 | 비목 따라(공구손료및경장비 396 · 잡재료 · 설치비 = 재료비의 % → 노무비) |
|
||||
|
||||
- 자동 비율 = 5,880 / 5,911 = 99.5 %. 남는 31 줄도 하위 로직을 펼치면 같은 규칙으로 가려짐 → 100 %.
|
||||
- 규칙 한 줄: 「호표 · 덧줄 = 비목 → 묶음 · 로직 줄 = 대상이 원/시간이면 경비(장비) · 아니면 펼침」.
|
||||
- 기계경비 로직을 알아보는 규칙이 지금 셋으로 갈림. 하나로 모아야 함.
|
||||
|
||||
| 자리 | 규칙 |
|
||||
|---|---|
|
||||
| `M02/M02_Hopyo_Ours.py:86-87` | 이름에 「시간당」(작업량 로직도 걸릴 수 있음) |
|
||||
| `B09_Estimation/B09_Estimation_Sangeun.py:245` | 입력 이름 「기계」 |
|
||||
| 이번 셈 | 결과단위 「원/시간」(정확) |
|
||||
|
||||
- 비슷한 분류가 이미 있음 — `M02/M02_Hopyo_Ours.py:120-170` L(인력) · X(장비) · M(자재) · S(딸린 로직). 엑셀 맞춤 전용임.
|
||||
- 구분 칸 자리:
|
||||
- 권함 = 셈 때 파생. `S/master_formula.py` `run` 결과 줄에 `묶음` 덧칸 · 함수 한 벌을 M01 `/calc` · B09 산근 · M02 맞춤이 같이 씀.
|
||||
- 정본에 칸을 더하는 길(5,911 줄)은 규칙으로 다 나오므로 필요 없음. 예외 덮개는 생길 때만.
|
||||
- 크기 S~M. 위험 — 기계경비 줄을 「경비」 한 묶음에 둘지, 노·재·경 세 줄로 쪼갤지는 사용자 결정 몫(B09 텍스트 수식은 이미 세 줄 · `B09_Estimation_Sangeun.py:27-28`).
|
||||
|
||||
### 5. 기준단위
|
||||
|
||||
원문:
|
||||
|
||||
| 셈 | 값 |
|
||||
|---|---|
|
||||
| 절 / 기준 머리 있는 절 | 1,780 / 1,067 |
|
||||
| 머리 수 · 꼴 | 1,328 · 129 꼴(산림 「(단위: ㎥당)」 · 건설 「(일당)」 줄) |
|
||||
| 「인/㎡당」 · 「㎥/㎡당」 꼴(자원/기준) | 73 |
|
||||
| 10 · 100 · 1,000 배 머리 | 102 |
|
||||
| 한 절에 기준이 둘 넘게 다름 | 73 절(예 13-4-4 「인/㎡당 · ㎥/㎡당」 · 12-17-1 「㎥/일당 · ㎥당」 · 건설 6-3-1 「㎡당 · 조/㎡당 · 100개소당 · 일당」) |
|
||||
|
||||
→ 정규식 두 개(`\(단위\s*:\s*…\)` · `^\((…당)\)$`)로 뽑힘. 절 제목 기준으로 표와 이음.
|
||||
|
||||
마스터:
|
||||
- 표 `기준` 칸 = 3,033 표 중 1,776 채움 · 빈 칸 1,257(41 %).
|
||||
- 꼴 271 — 「ton당 57 · ton 당 23 · 톤당 16」처럼 같은 뜻이 세 꼴임. 「인력품 162 · 정의 34 · 할증 15」처럼 단위가 아닌 글도 섞임.
|
||||
- `기준` 은 엔진이 안 읽음(`S/master_formula.py` 에 없음). 사람이 보는 글일 뿐임.
|
||||
- 로직은 `결과단위` 한 칸(86 꼴). 줄마다 기준단위 칸은 없음 — 줄 단위는 `단위`(인 · ㎥ · 시간)뿐임.
|
||||
- 배 처리(10 · 100 기준 표를 부르는 로직 92 짝):
|
||||
|
||||
| 처리 | 짝 수 |
|
||||
|---|---|
|
||||
| 결과단위도 같은 배(「원/10㎡」) | 54 |
|
||||
| 식에서 「/ 10」 으로 1 단위로 나눔 | 32 |
|
||||
| 확인 필요 | 6 — GC000482~485 「10㎞」 → 원/노선 · GF000319 「100본/ha당」 → 원/ha · GF000081 「160ha당」 → 원/ha |
|
||||
|
||||
- 결과단위 분모 앞에 수가 있는 로직 86. 결과단위가 여럿이거나 괄호인 로직 26(「원/㎡ · 원/㎥(단위 따름)」).
|
||||
|
||||
표본 열(원문 머리 → 표 기준 → 결과단위 · 처리):
|
||||
|
||||
| # | 원문 | 원문 머리 | 표 기준 | 결과단위 | 처리 |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | 산림 9-13-1 구조물터파기 | ㎥당(인력·장비 한 머리) | QF000270 ㎥당 | 원/㎥ | 장비 = 1 / 작업량 Q |
|
||||
| 2 | 산림 13-4-1 메쌓기(인력) | 인/㎡당 · ㎡당 | QF000421 「1㎡」 · QF000422 빈 | 원/㎡ | 그대로 |
|
||||
| 3 | 산림 13-4-4 찰쌓기(인력) | 인/㎡당(인력) · ㎥/㎡당(채움 콘크리트) | QF000433 · 434 둘 다 「㎡당」 | 원/㎡ | 재료의 「㎥/」 는 값칸 단위로만 |
|
||||
| 4 | 산림 13-6-1 큰돌쌓기 | 10㎡당 | QF000443 10㎡당 | 원/10㎡ | 배 유지 |
|
||||
| 5 | 산림 9-19-1 토사면 고르기 | 10㎡당 | QF000294 10㎡당 | 원/10㎡ | 배 유지 |
|
||||
| 6 | 산림 12-11-2 흄관 | m당 · 개소당 | QF000371 「1m」 | 원/m · 원/개소(로직 둘) | 기준마다 로직을 나눔 |
|
||||
| 7 | 산림 12-17-1 펌프카 | ㎥/일당(편성) · ㎥당(재료) | QF000380 「1일」 · 나머지 빈 | 원/㎥ | 「인원 / 시공량」 식 |
|
||||
| 8 | 건설 토목 6-7-2 파형강관 | 본당 | QC000699 본당 | 원/본 | m 당은 쓰는 쪽에서(경쟁사는 ÷6m 줄 · 내역 7 5-2) |
|
||||
| 9 | 산림 12-3 철근 가공조립 | ton당 | QF000356 ton당 | 원/ton | B08 철근 kg → 손 「/1000」(`B08_Quantity/B08_Quantity_Material_Calc.py:97`) |
|
||||
| 10 | 건설 공통 2-8-7 철골 안전망 | 10㎡당 | QC000084 · 085 10㎡당 | 원/㎡ | 재료 줄 「/ 10」 |
|
||||
| 11 | 산림 13-10-2 나무 말뚝박기 | 인/개당 · 1일당 | QF000451 개당 | 원/개 | 그대로 |
|
||||
|
||||
쓰면 쉬워지는 것:
|
||||
- 표 기준 = 「배 · 단위」 두 칸(정규화)이면 로직 결과단위와 기계적으로 대조됨 → 「/ 10」 빠짐 · 배 어긋남 검사(지금 6 건 손 확인)를 자동으로 함.
|
||||
- 인력 · 재료 · 경비 묶음마다 원문 기준을 머리에 찍음(EST 산근 「㎡당」 머리 꼴) → 「단가산출 상세」 묶음 보기의 머리줄이 됨.
|
||||
- M02 일위대가 「기준단위 1 단가」(내역 12 원문 89줄)를 결과단위 배 파싱 대신 정규 칸으로 셈.
|
||||
|
||||
고칠 자리:
|
||||
- 빌더 한 벌(원문 머리 → 표 `기준배` · `기준단위` 파생 · 빈 기준 1,257 중 로직이 부르는 표 먼저).
|
||||
- 검사 `check_master` 에 「배 대조」 더함.
|
||||
- 크기 M. 위험 — 원문 머리 없는 표(빈 41 %)는 손 확인이 필요함. 「인력품」 · 「할증」 같은 비단위 기준은 따로 갈래로 둠.
|
||||
|
||||
### 6. 단위 변환
|
||||
|
||||
지금 있는 것:
|
||||
|
||||
| 자리 | 하는 일 | 근거 |
|
||||
|---|---|---|
|
||||
| 재료 단가 → 줄 단위 | 같은 성격만(무게 g·kg·톤 · 길이 mm~km · 넓이 ㎠·㎡ · 부피 ㎤·ℓ·㎥) · 다르면 그대로 + `단위경고` | `S/master_pick.py:16-22` · `:75-81` · `:163-165` · `MD/_틀.md:231-232` |
|
||||
| 별칭 | ea→개 · ton·t→톤 · l·리터→ℓ · set·세트→조 · NFKC | `S/master_material.py:30` · `:43-45` |
|
||||
| 결과단위 배 읽기 | 「원/10㎡」 → 10 — 정규식 두 벌 | `M01/Store_Combo.py:153` · `:170-193` · `M02/M02_Hopyo_Ours.py:37` · `:97-99` (B09 산근은 앞 것을 부름 `B09_Estimation_Sangeun.py:197-200`) |
|
||||
| 반영 = 기준 × 수량 ÷ 배 | M02 일위대가 · 파이썬·TS 짝 | `M02/M02_Labor_Doc.py:10` · 거울 시험 `test_m02_labor_calc_mirror.py` |
|
||||
| 엑셀 맞춤 | 같은 성격 단위표 + 규격 B·T 로 넓이↔부피 추정 | `M02/M02_Hopyo_Match.py:176-198` |
|
||||
| B08 자재 | 「/1000」(kg→ton) · 「/40」(kg→40kg 대) 손 식 | `B08_Quantity/B08_Quantity_Material_Calc.py:97` |
|
||||
| B09 내역 연결 | 단위 다름 알림만 · TS 정규화에 별칭 없음(톤 ≠ ton) | `B09_Estimation/B09_Estimation_UI_Tabs_Bill_Edit.ts:213` · `:228-232` |
|
||||
| 로직 식 안 | ×1000 · ÷1000 손 환산 12 줄(산소 L · 용접봉 g→㎏) · 단위중량 입력 11 로직 · 단위중량 표 CC000337(47 줄 · ㎏/㎥)을 부르는 로직 2 | GF000156 · GF000157 |
|
||||
| common_util | 단위 변환 모듈 없음 | — |
|
||||
|
||||
수치:
|
||||
- 재료 줄 729 · 단위 꼴 28 · 환산표 밖 단위 232 줄(개 132 · 매 27 · 본 16 · ㎾h 10 · 조 9 · EA 7 …).
|
||||
- 검색어가 정해진 재료 줄 562 — 단위 같음 538 · 같은 성격 환산 2(㎏↔Ton · g↔kg) · 성격 다름 22. 성격 다름의 짝:
|
||||
- kg·㎏ ↔ ℓ 4
|
||||
- 본 · 개 · 매 · m 섞임 7
|
||||
- D/M ↔ ℓ 2
|
||||
- ㎥ ↔ 포 1 · ㎥ ↔ 조 1 · ℓ ↔ ㎾h 1 · 빈 단위 2 …
|
||||
- 단위 경고(검사) 31.
|
||||
- 로직 줄 단위 ≠ 대상 결과단위 분모 = 0. 로직끼리 잇는 단위는 깨끗함.
|
||||
|
||||
틀리거나 빠진 것:
|
||||
- 개수 단위(개 · EA · 본 · 매 · 조 · SET)끼리 묶음이 없음. 「본 ↔ 개」도 경고가 뜸.
|
||||
- 부피 ↔ 무게(㎥ ↔ ton) 일반 길이 없음. 로직마다 단위중량 입력이나 표를 따로 둠. 원문은 「시험으로 정함이 원칙」이라 설계자가 골라야 함.
|
||||
- 결과단위 배 파서가 두 벌임. 여러 분모 결과단위(26)는 「㎡ · ㎥」 한 글로 뭉침(`M01/Store_Combo.py:183` ponytail).
|
||||
- 표 `기준` 의 배(10㎡당)를 엔진이 모름 — 식에 손으로 「/ 10」.
|
||||
|
||||
필요 범위:
|
||||
- 1단계 — 한 벌 모듈(파이썬 · 서버)에 모음. 쓰는 곳 다섯(master_pick · Store_Combo · Hopyo_Ours · Hopyo_Match · B08 손 식)이 이것을 부름. TS 는 서버가 준 정규 단위만 씀.
|
||||
- 별칭 · 개수 묶음
|
||||
- 결과단위 · 표 기준 「배 · 단위」 읽기
|
||||
- 같은 성격 환산
|
||||
- 「환산 근거」 글
|
||||
- 2단계 — 부피 ↔ 무게 = 단위중량 표(CC000337) 고르기 + 근거 표시. 길이 ↔ 개수(관 1본 길이)는 입력으로.
|
||||
- 크기 M. 위험 — M02 짝(Labor_Calc TS 거울)에 닿으면 거울 시험을 같이 고쳐야 함. 단위 결과가 바뀌는 줄은 B09 금액이 바뀌므로 전후 대조가 필요함.
|
||||
|
||||
### 7. 불변 규칙 · 판 · 연결/복사
|
||||
|
||||
| 물음 | 지금 | 근거 |
|
||||
|---|---|---|
|
||||
| 누가 고치나 | `/api/m01` 전체 = 시스템 관리자 | `main.py:545-546` |
|
||||
| 정본 로직 고치기 | 막힘과 열림이 섞임. `/logic/edit` · `/logic/delete` = `로직_자체.json` 만(정본 403). `/save` · 흐름 저장은 정본 장 파일 줄도 고침(검사 422 만) | `M01/Store_Make.py:18` · `:286-288` · `M01/Store.py:661-695` · `M01/Store_Flow.py:378-406` |
|
||||
| 개정 길 | 원문 md 갱신 → 표 빌더(일부) · 손 → 로직 빌더 없음 → M01 화면 · 파일 손 편집 → `check_master` | `MD/_갱신절차.md:119-138` |
|
||||
| 판 장치 | 파일 머리 「판」 하나뿐(45 파일 「2026」 · 12 파일 「2026-01-01」 — 섞임) · 파일 sha256 16 자 = 동시 저장 막이(409)일 뿐 | `M01/Store.py:55-56` · `:663-665` |
|
||||
| 이력 | 없음 — 덮어씀(`os.replace` · `M01/Store.py:689-691`) · 되돌림은 git 뿐 · 로직 줄마다 판 · 개정일 칸 없음 · 「바뀐 로직 목록」 없음 | — |
|
||||
| 자체 · 소유 | 자체 로직(GX) 0 개 · 소유 「공용」 1,469 | `MD/로직_자체.json` |
|
||||
| M02 | 연결 — 일위대가 문서 `담은로직:[{로직: 키}]` · UA 조합도 키 → M01 로직이 바뀌면 바로 따라감(판 고정 없음) | `M02/M02_Labor_Doc.py:3-10` · `MD/_틀.md:279-282` |
|
||||
| 프로젝트 | 복사 — 구조물 사본 `단가.json` = 담은 로직 · 하위 로직 · 표 · 요소 닫힌 묶음 · 원본 바뀜 배지 → [재적용] | `M02/M02_Item_Prices.py:1-17` · `M02/M02_Item_Copy.py:89-95` |
|
||||
|
||||
- 내역 12 원문의 「M01 불변 · M02 연결 · 프로젝트 복사」 틀이 이미 뼈대로는 있음.
|
||||
- 빈 곳 둘 — 정본 고치기 길이 둘로 갈림(403 길 · `/save` 길), 개정 판 · 이력이 없음.
|
||||
- 고칠 자리:
|
||||
- `/save` 에 「정본 로직 줄 고침 = 개정 표시 필수」 확인을 더함
|
||||
- 로직 줄 `개정` 칸(원문 판 · 고친 날)
|
||||
- 저장 때 옛 줄 사본(`_이력/`)
|
||||
- 크기 M. 위험 — M02 연결이 판을 고정하지 않으므로 정본 고침이 모든 회사 M02 금액을 곧바로 바꿈(의도대로이나 알림이 필요함).
|
||||
|
||||
## ④ 결정 거리 (사용자에게 물을 것 · 권함)
|
||||
|
||||
1. 갈라진 로직 — 정본을 합칠지, 목록에서만 묶어 보일지. 권함: 정본은 원문 절 짜임 그대로 두고 목록에 「묶음 접기」(같은 절 · 작업량 짝 · 상위 절)만 더함. 합치면 키 · M02 · 프로젝트 연결이 깨짐.
|
||||
2. 작업량 로직 27 — 목록에 따로 보일지. 권함: 부르는 단가 로직 밑으로 접어 숨김.
|
||||
3. 인력 · 재료 · 경비 구분 — 정본 칸인지 셈 때 파생인지. 권함: 파생(비목 + 「대상 원/시간 = 경비(장비)」 규칙 · 99.5 % 자동) · 기계경비 판별 규칙 셋을 하나로.
|
||||
4. 기계경비 줄 묶음 — 「경비(장비)」 한 줄로 둘지, 노무비(조종원) · 재료비(연료) · 경비(손료)로 쪼개 각 묶음에 넣을지. 권함: 묶음은 경비(장비) 한 줄 · 금액 칸만 노·재·경으로 나눔(EST 산근 꼴).
|
||||
5. 복합 하위 로직(산림 12장 31 줄) — 펼쳐서 각 묶음에 넣을지, 「하위 단가산출」 한 줄로 둘지. 권함: 한 줄 + 펼침.
|
||||
6. 기준단위 — 결과단위를 모두 1 단위로 고칠지(86 로직 정본 손질), 원문 배 그대로 두고 보기 · M02 에서 환산할지. 권함: 원문 배 그대로 · 표 `기준` 만 「배 · 단위」로 정규화 · 보기에 「10 ㎡ 당 → 1 ㎡ 당 ÷10」 근거 표시.
|
||||
7. 단위 변환 범위 — 권함: 1단계 별칭 · 개수 묶음 · 배 파서 한 벌. 2단계 부피↔무게(단위중량 표 고르기). 밀도(kg↔ℓ) · ㎾h 등은 경고 유지.
|
||||
8. 정본 개정 장치 — 로직 줄 판 · 이력을 둘지. 권함: 파일 머리 판 통일 + 줄 `개정` 칸 + 저장 때 옛 줄 사본. M02 는 판 고정 없이 연결 유지(원문 「연결정보 저장」대로).
|
||||
9. 정본 고치기 길 — `/save` 로 정본 로직을 고치는 길을 열어 둘지. 권함: 시스템 관리자에게 열어 두되 「원문 개정 반영」 확인 · 개정 판 입력을 거침.
|
||||
10. 비고 「별도」 참조(726 로직 · 절번호 220) — 링크로 올릴지. 권함: 계산에 안 넣는 「관련 로직」 보기 링크만.
|
||||
11. 확인 필요 배 어긋남 6 건(GC000482~485 · GF000319 · GF000081) — 시스템 관리자가 원문으로 확인함.
|
||||
|
||||
## ⑤ 단계 제안
|
||||
|
||||
| 차례 | 일 | 갈래 | 크기 | 짝 |
|
||||
|---|---|---|---|---|
|
||||
| A1 | 표 `기준` → `기준배` · `기준단위` 파생 빌더(원문 머리 정규식 · 로직이 부르는 표 먼저) · `check_master` 배 대조 | 자료 손질 | M | 파이썬 단독 |
|
||||
| A2 | 로직 파일 머리 「판」 꼴 통일 · 어긋남 6 건 확인 | 자료 손질 | S | — |
|
||||
| B1 | `묶음` 파생 함수 한 벌(인력 · 재료 · 경비(장비) · 하위) — `run` 줄 덧칸 · Hopyo_Ours · B09 산근이 같이 씀 · 기계경비 판별 = 결과단위 원/시간 | 엔진 | S~M | ③ 서버 단독 · 짝 없음 |
|
||||
| B2 | 단위 모듈 한 벌(별칭 · 개수 묶음 · 배 · 같은 성격 · 근거 글) → 다섯 자리 갈아 끼움 · 2단계 단위중량 | 엔진 | M | 서버 단독 · M02 Labor_Calc 짝에 닿으면 거울 시험 갱신 |
|
||||
| B3 | 목록 API 칸 — 묶음(같은 절 · 작업량 짝 · 상위 절) · 부르는/불리는 수 · 인력/재료/경비 줄 수 | 엔진 | S | 서버 단독 |
|
||||
| B4 | 정본 개정 — `/save` 정본 줄 확인 · 줄 `개정` 칸 · 옛 줄 사본 | 엔진 | M | 서버 단독 |
|
||||
| C1 | M01 목록 — 묶음 접기 · 작업량 숨김 · 연결 수 표시 | 화면 | S | TS 표시만 |
|
||||
| C2 | 단가산출 상세 인력 · 재료 · 경비 묶음 보기(B09 단가산출 상세 재사용 — 화면 몫 에이전트와 맞춤) · 묶음 머리에 원문 기준 · 환산 근거 | 화면 | M | TS 표시만(셈은 서버 `/calc`) |
|
||||
|
||||
- 차례 근거 — B1 · B2 가 C2(내역 12 M01 2 번 보기 · M02 단가산출 신설)의 바닥임. A1 은 B2 의 배 읽기를 칸으로 바꿔 줌.
|
||||
- 파이썬 · TS 짝 — M01 셈은 서버 `/calc` 단독(③)이라 새 짝은 없음. 단, 단위 · 배를 M02 일위대가 짝(`M02_Labor_Doc` ↔ `M02_MasterTemplete_Labor_Calc.ts`)에 넣으면 거울 시험을 같이 고침.
|
||||
- 지식DB 는 근거 · 후보일 뿐 — 기준단위 정규화 값 · 단위중량 기본값은 사용자 협의로 확정.
|
||||
@@ -0,0 +1,265 @@
|
||||
# 내역 12-C — M02 「새 단가산출 칸」 자료 모델 (거시 + 미시)
|
||||
|
||||
읽기 전용 조사 · 11-01 · 코드 · 자료 · git · 서버 안 만짐. 근거 = `파일:줄`(코드 읽기). 추측 = 「추정」.
|
||||
경로 줄임 — `M01/` = `M01_MasterData/` · `M02/` = `M02_MasterTemplete/` · `B09/` = `B09_Estimation/B09_Estimation_` · `MF` = `resources/master_data/scripts/master_formula.py` · `MT/` = `resources/master_template/`.
|
||||
B09 쪽 줄 번호 = 하위 조사(코드 읽기)를 옮겨 적음 · 주요 줄은 다시 확인.
|
||||
|
||||
## ① 결론 다섯 줄
|
||||
|
||||
1. **뼈대는 이미 있음.** 사전조합 「로직 줄」 = M01 로직 키 연결 + 넣을 값 · 고른 자재 · 켜쌓기율 · 자재 세 칸(= 바꾼 것만 저장)이고, 층 사전조합 로직 줄 17 중 10 줄이 넣을 값을 품은 「이름 없는 M02 단가산출」임. 없는 것 = 로직 안 줄(호표) 품 · 단가 고침 · 줄 더하기 · 빼기 · 이름 붙여 다시 쓰기 · 단가산출 폴더.
|
||||
2. **권함 = 새 서고 종류 `sangeun`(키 `SK-######`)** — 사전조합(SC)이 쓰는 참조 · 위 층 규칙 · 층 복사 · 지우기 막음 · 프로젝트 굳힘 · 폴더 길을 그대로 탐. 문서 = `{바탕(M01 로직 키 | SK 참조), 넣을 값 · 고름 · 켜쌓기율 · 자재표시, 덮개 {줄 정체: {qty · labor · material · expense}}, 더한줄, 뺀줄}` — 줄 정체 · 덮개 칸은 B09 702 덮개(`kind:키#n`) 꼴 그대로.
|
||||
3. **셈 = 바탕 M01 줄을 메모리에서 「고친 줄」로 바꿔 M01 엔진 한 벌로 돌림**(M01 시험 계산 `_swap` 길 · 엔진엔 줄 덧칸 둘 `단가` · `묶음` 만 더함) — 덧줄 %(공구손료 등)까지 엔진이 다시 셈 · M01 개정 = 다음 셈에 저절로 따라감 · 덮개 자리가 사라지면 남김 + 알림(702 와 같음).
|
||||
4. **프로젝트로 갈 때 = 고친 줄을 풀어 사본 단가 묶음(`단가.json`)에 로직 줄로 굳힘** — 지금도 구조물 · 서고 사본은 M01 로직 줄 자체를 굳혀 가서 길은 있음. 막힘 셋 = B09 산근 → 일위대가 셈 없음 · 산근 시트에 덮개 없음 · 넷 자리가 아직 지금 M01 을 읽음(임시 키를 모름).
|
||||
5. **폴더는 사전조합에 이미 있음**(158-1 · 우클릭 새 폴더 · 이름 · 옮기기 · 빈 폴더만 지움). 구조물 조합 꼴(안에 든 것째 지움 · 여럿 고름 · 복사 붙여넣기)과 차이만 메우고, 새 칸은 사전조합 폴더 길이 종류 하나 더 받게 넓힘(서버 S · 화면 M).
|
||||
|
||||
## ② 거시
|
||||
|
||||
### 2-1 지금 흐름
|
||||
|
||||
```
|
||||
M01 단가산출 로직 (GF·GC 1,469 · 불변 · 관리자 · 엔진 = 파이썬 MF)
|
||||
│ 키 연결 — 층 문서는 셈마다 지금 M01 을 읽음
|
||||
▼
|
||||
M02 일위대가 사전조합 SC (층 마스터 · 회사 · 개인 · 자유 폴더 158-1 · 1 단위 값)
|
||||
줄 = 로직{키 + 넣을값 + 고름 + 켜쌓기율} | 참조 SC(위 층만) | 고정(705) | 자재
|
||||
▼ 참조
|
||||
M02 구조물 조합 일위대가 (labor/<열>.json · 구조물 1 단위 · 수량 = 면적 알약 · 규격 열)
|
||||
▼ 복사 (B05·B06 [저장] · B09 단가연결)
|
||||
프로젝트 사본 = 일위대가.json(+ M01 로직 줄 굳힘) · 참조사본(SC 굳힘) · 단가.json(닫힌 묶음) · manifest 원본판
|
||||
▼
|
||||
B09 = 단가 책 · 대가 블록 · 산근 · 702 덮개(user_values) · [업데이트](703-3) · 내 자료집(703-2)
|
||||
```
|
||||
|
||||
### 2-2 바뀔 꼴
|
||||
|
||||
```
|
||||
M01 로직 (불변) ──────────────┐
|
||||
│ 연결(바탕 키) │ 연결(더한줄 · 로직 줄)
|
||||
▼ ▼
|
||||
M02 단가산출 SK (새 · 층 · 폴더) ← SK 끼리 바탕 사슬(회사 SK → 개인 SK)
|
||||
바꾼 것만 = 넣을값 · 고름 · 덮개(줄 품 · 단가 · 덧줄 율) · 더한줄(M01 요소 · M01 로직 · SK · SC · 고정) · 뺀줄
|
||||
▼ 참조
|
||||
M02 일위대가 사전조합 SC (1 단위 값) — 줄 = 로직 | SK | SC | 고정 | 자재
|
||||
▼ 참조
|
||||
M02 구조물 조합 (구조물 1 단위 · 수량 = 면적 · 설계 정보)
|
||||
▼ 복사 = 풀어 굳힘(연결 끊음)
|
||||
프로젝트 = 고친 줄 → 단가.json 로직 줄 · SK 문서 → 참조사본(원값 · 덮개 근거) · 702 덮개는 그 위
|
||||
▲ [업데이트] = 원본판 비교 → 미리 보기 → 다시 굳힘(프로젝트 덮개 지킴)
|
||||
└ 「내 자료집에 저장」 = 품셈 블록 품 · 단가 덮개 → 개인 층 SK 덮개(지금 버리는 몫)
|
||||
```
|
||||
|
||||
### 2-3 지금 대 바뀔 꼴
|
||||
|
||||
| 칸 | 지금 | 바뀔 꼴 |
|
||||
| --- | --- | --- |
|
||||
| M01 로직 고쳐 쓰기 | 관리자 「본떠 만들기」 GX(한 파일 · 0 줄) · 일반 ✕ | 층마다 SK(연결 + 바꾼 것) · 일반 사용자 = 개인 층 |
|
||||
| 로직 안 줄 품 | 못 고침 · 로직 통째 배수만 | SK 덮개 `qty` |
|
||||
| 일위대가 줄이 가리키는 것 | M01 로직 · SC · 고정 · 자재 | + SK |
|
||||
| 단가산출이 가리키는 것 | M01 요소 · M01 로직(엔진 안) | + SK · SC · 고정(엔진 덧칸 `묶음`) |
|
||||
| 폴더 | 구조물 조합 · 사전조합 | + 단가산출(사전조합 길 공유) |
|
||||
| 프로젝트 | M01 로직 줄 · SC 굳힘 | + 고친 줄 굳힘 · SK 근거 |
|
||||
| 공사 → 내 자료집 | 맨 위 줄 수량만 · 품 · 단가 덮개 버림 | 품셈 블록 덮개 → SK |
|
||||
|
||||
## ③ 미시
|
||||
|
||||
### 1. 층 · 폴더
|
||||
|
||||
지금
|
||||
- 층 넷 자리 `M02/M02_Template_Layers.py:3-14` · 서고 종류 `LIBRARY_KINDS = ("precombo",)` `:32-33` · 서고 문서 = `{층}/precombo/SC-######.json`.
|
||||
- 권한 한 벌 `M02/M02_Layer_Access.py:1-9` — 마스터 = 시스템 관리자 · 회사 = 그 회사 관리자 · 개인 = 본인(+ 회사 관리자).
|
||||
- 참조 = 위 층만 `M02/M02_Labor_Ref.py:102-112` · 층 사이 복사 = 받는 층이 못 읽는 참조는 같이 복사 `:345-370` · 지우기 = 쓰는 곳 있으면 409 `:311-333` · `M02/M02_MasterTemplete_Store.py:207-214`.
|
||||
- 구조물 조합 폴더 = 집계표 문서 안(`열.경로` · `폴더`) `M02/M02_MasterTemplete_Tree.py:1-11` · 길 `POST /layers/{층}/tree` `M02/M02_MasterTemplete_Router_Items.py:250-260` · 지우기 = 폴더 안 항목째 `Tree.py:306-314` · 여럿 고름 · F2 · Delete · 복사 붙여넣기 `M02/M02_MasterTemplete_TreePanel.ts:6-8`.
|
||||
- 사전조합 폴더 = **이미 있음**(158-1) — 층 뿌리 `precombo_폴더.json` `{폴더, 자리}` · 문서 파일은 안 옮김 `M02/M02_Precombo_Folders.py:1-7` · 길 `GET/POST /layers/{층}/precombo-tree` `M02/M02_Labor_Router.py:131-149` · 화면 우클릭 새 폴더 · 여기에 새 사전조합 · 이름 바꾸기 · 지우기 · 끌어 옮기기 `M02/M02_MasterTemplete_UI_Side_Precombo.ts:5-7` · 지우기 = 빈 폴더만(안에 있으면 409) `Precombo_Folders.py:113-116`. 실자료 = 개인 1/10 폴더 하나에 SC 셋.
|
||||
- 좌측 차례 `M02/M02_MasterTemplete_UI_Side.ts:185-193` = 구조물 조합 · 사전조합 · 일위대가 실무자료 · (마스터만) 구조물 옵션 정의 · 도면 양식 · 실무문서.
|
||||
- 구조물 옵션 정의 = 정본 `MT/구조물정의.json` · 길 `/api/m02/structure-options` `M02/StructOptions/M02_SO_Router.py:50-74` · 화면 `buildOptionsSection` `UI_Side.ts:124-129` → M01 이동은 화면 붙이는 자리만.
|
||||
|
||||
| 칸 | 구조물 조합 | 사전조합 | 새 단가산출(권함) |
|
||||
| --- | --- | --- | --- |
|
||||
| 폴더 자리 | 집계표 문서 안 | 층 뿌리 `precombo_폴더.json` | 층 뿌리 `sangeun_폴더.json` |
|
||||
| 고침 | 폴더 · 항목 더하기 · 이름 · 옮기기 · 지우기 | 폴더 더하기 · 이름 · 옮기기 · 지우기 · 문서 옮기기 | 사전조합과 같음 |
|
||||
| 폴더 지우기 | 안 항목째 | 빈 폴더만 | 결정 거리 8 |
|
||||
| 여럿 · 복사 붙여넣기 | ○ | ✕ | 2차 |
|
||||
|
||||
고칠 자리
|
||||
- `Precombo_Folders.py` → 종류 인자(파일 `{종류}_폴더.json` · 키 = `{층}/{종류}/*.json`) · 길에 kind. **S**.
|
||||
- `Template_Layers.LIBRARY_KINDS` += `sangeun` · 뼈대 검사 `:176` · `Store._server` 서고 갈래 `Store.py:573-584` · 키 내주기 `Labor_Ref.create` `:259-272`. **S**.
|
||||
- 화면 = `UI_Side_Precombo.ts`(346 줄)를 「서고 칸 만들기」로 넓혀 두 번 씀(제목 · 종류 · 새 문서 몸만 다름). **M**.
|
||||
- 좌측 차례 · 구분선 = `UI_Side.ts:185-193` 한 곳. **S**.
|
||||
|
||||
위험 — 회사 · 개인 층 storage 는 데스크탑과 같이 감(공유) → 쓰는 시험은 임시 storage.
|
||||
|
||||
### 2. 연결 정보 저장
|
||||
|
||||
지금
|
||||
- 일위대가 · 사전조합 로직 줄 = `{로직: 키, 입력값, 고름, 켜쌓기율, 자재표시, 수량}` `M02/M02_Labor_Doc.py:1-11` · 정리 `:133-165` — M01 로직을 **키로만** 잡음(연결) · 층 문서 셈은 늘 지금 M01 `run_line` `:534-550`.
|
||||
- 로직 안 줄(호표)을 고칠 칸 없음 — 품셈 숫자는 식 속(GF000219 석공 수량 = `찾기(QF000421, …).석공 * (1 + 증가율 / 100)`).
|
||||
- M01 쪽 복사 길 = 「본떠 만들기」 GX `M01/M01_MasterData_Store_Make.py:18-19` — 관리자 · 한 파일 · 지금 `로직_자체.json` 0 줄.
|
||||
- M01 시험 계산 = 저장 전 고친 줄을 메모리 사본에 바꿔 셈 `M01/M01_MasterData_Store.py:520-556`(`_swap` · `calc`) — 길은 관리자 전용 `main.py:546`.
|
||||
- 702 덮개 = B09 `user_values.json` `daega_cover {블록 cover: {cid: {qty · labor · material · expense}}}` `B09/Calc_Labor.py:22-24` · 적용 `_cover` `:106-114` · cid = `kind:키#n` `B09/Labor_Source.py:98-114` · % 줄 = 덮인 노무 합에서 다시 셈 `Calc_Labor.py:136-150` · 짝 잃음 = 남김 + 알림 `:275-285`. 품셈 블록 줄(로직 호표 줄 `labor:LB…#0`)은 덮이나 단가산출(비승격) 줄 · 산근 시트는 안 덮임.
|
||||
- M01 호표 줄에 줄 id 없음 — 5,266 줄 전부(인력 3,462 · 로직 1,075 · 재료 729) · 정체 = 차례 · 요소 키 · 이름.
|
||||
|
||||
702 장치 재사용 판정
|
||||
|
||||
| 쓸 것 | 그대로? | 까닭 |
|
||||
| --- | --- | --- |
|
||||
| 줄 정체 `kind:키#n` | ○ | 호표 줄 요소 키(LB · MT · GC…)로 가름 — 차례가 바뀌어도 맞는 줄 |
|
||||
| 덮개 칸 qty · 노 · 재 · 경 | ○ | 같은 말 → B09 ↔ M02 오갈 때 1:1 |
|
||||
| 적용 자리 | ✕ | 702 = 엔진 답 위에 덮음 · M02 = 엔진 **앞**(고친 줄)에서 덮어야 덧줄 % · 중간 식이 다시 셈 |
|
||||
| 짝 잃음 알림 | ○ | 같은 규칙(남김 · 지우지 않음) |
|
||||
|
||||
바꾼 것 꼴 후보
|
||||
|
||||
| 꼴 | 저장 칸 | 셈 자리 | 지금 |
|
||||
| --- | --- | --- | --- |
|
||||
| 옵션 값 고정 | `입력값` | 엔진 입력 | ○ 줄 칸 |
|
||||
| 재료 고르기 | `고름 {차례: MT}` | 엔진 choosing | ○ |
|
||||
| 켜쌓기율 · 자재 세 칸 | `켜쌓기율` · `자재표시` | `layered` · `drop_apart` | ○ |
|
||||
| 줄 품 | `덮개[cid].qty` | 호표 `수량` 식 → 수 | 새 |
|
||||
| 줄 단가(손 단가) | `덮개[cid].labor · material · expense` | 엔진 줄 덧칸 `단가` | 새(엔진 몇 줄) |
|
||||
| 단가 출처(물가자료 · 유통 · 정보 · 거래) | `출처 {cid: 칸}` | 셈 때 그 칸 지금 값 → `단가` | 새 |
|
||||
| 줄 더하기 | `더한줄 [{종류, 요소 \| 참조 \| 고정, 수량, 비목}]` | 인력 · 재료 · M01 로직 = 엔진 그대로 · SK · SC · 고정 = 먼저 셈한 노 · 재 · 경 → 덧칸 `묶음` | 새 |
|
||||
| 줄 빼기 | `뺀줄 [cid]` | 호표에서 지움 | 새(B09 에도 없음) |
|
||||
| 덧줄 율 | `덮개[pct cid].qty` | 덧줄 율 → 수 | 새 |
|
||||
| 식 고치기 | 안 받음 | — | 관리자 몫 · 336 실측 = 실무자는 식 아닌 품 숫자를 바꿈 |
|
||||
|
||||
M01 이 바뀌어 덮개 자리가 없어질 때
|
||||
- 정체가 사라짐(줄 지움 · 요소 키 바뀜) → 짝 잃은 덮개 = 남김 + 목록 · 상세 「짝 잃은 고친 칸 n」.
|
||||
- 덮개에 그때 M01 값 `원값` 같이 적음 → 「M01 0.072 → 0.080 · 내 값 0.070」 비교.
|
||||
- 문서 `바탕판` = 바탕 줄 지문 → 다르면 「M01 개정 — 확인」 배지(구조물 사본 원본판 꼴 `M02/M02_Item_Copy.py:89-95`).
|
||||
- 같은 요소 줄이 앞에 끼면 `#n` 이 밀림(추정 · 드묾) → 원값이 다르면 짝 잃음으로 봄.
|
||||
|
||||
크기 **M** · 위험
|
||||
- 덧줄이 줄 이름 대신 중간 값 · 요소 값으로 짜인 로직(GC000996 「(보링공 * LB000014 + …) * 11 / 100」)은 줄 품 덮개가 덧줄에 안 번질 수 있음 → 덧줄 율 덮개로 메우거나 알림(추정 · 시험 거리).
|
||||
- 옵션을 열어 둔 단가산출(설계 때 정함)에 품 숫자 덮개 → 옵션이 바뀌어도 수는 그대로(결정 거리 2).
|
||||
- `MF` 686 줄 · `M01_MasterData_Store.py` 695 줄 — 엔진 덧칸은 `master_pick.py`(206 줄) 쪽 · `_swap` 은 M02 새 파일에서 부름.
|
||||
- 계산 자리(5장) — M01 엔진은 파이썬 단독(③). 지금 M02 일위대가도 「기준 = 서버 셈 길(저장 안 함) · 수량 · 합 = TS 짝」 꼴 `M02/M02_MasterTemplete_Labor_Calc.ts:1-10` → SK 도 같은 꼴(조작 = 서버 셈 길 · 최신 응답만) · TS 엔진 옮김은 안 함.
|
||||
|
||||
### 3. 참조 그래프
|
||||
|
||||
지금 — 누가 무엇을 가리키나
|
||||
|
||||
| 가리키는 쪽 ↓ / 가리켜지는 쪽 → | M01 로직 | M01 요소(노임 · 자재 · 기계) | 사전조합 SC | M02 단가산출 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| M01 로직 | ○ 엔진 `로직(GC…)` 호표 1,075 줄 · 깊이 20 `MF:483` · 순환 검사 `master_formula_check.py:211-227` | ○ | ✕ | ✕ |
|
||||
| 사전조합 · 일위대가 | ○ 로직 줄 | 자재 ○ · 노임 · 기계 = 고정 줄 이음(705) | ○ 위 층만 | — |
|
||||
| B09 대가 | ○ | ○ | ○ `B09/Labor_Source.py:202-221` | — |
|
||||
| B09 산근 | ○ 산근 → 산근 `B09/Sangeun.py:462-479` | ○ | ✕ 산근 → 대가 없음 | — |
|
||||
|
||||
- 셈 엔진 자리 — M01 로직 기준 = 서버 단독 `MF:564-` · M02 짝 = 수량 · 반영 · 합만(`Labor_Doc.py:433-462` ↔ `Labor_Calc.ts`) · B09 대가 짝 = `B09/Calc_Labor.py` ↔ `.ts` · `Labor_Source.py` = 서버만.
|
||||
- 순환 · 깊이 — M02 저장 때 `_no_loop` `Labor_Ref.py:236-247` · 셈 때 `Expand` trail `:379-394` · DEPTH 8 `:35` / B09 SC 8 `Labor_Source.py:257-259` · 산근 4 `Sangeun.py:60` · 펼침 화면 3 `Bill_Fold.ts:47` / 엔진 20.
|
||||
- 셈 차례 — M02 = `Expand` 깊이 우선 + 키별 캐시(위상 차례 저절로) · B09 = 단계 고정 base → 산근 → 대가 → 내역 → 총괄 `B09/Router.py:153-175`(두 번 `:178-190`).
|
||||
|
||||
바뀔 꼴
|
||||
- SK = 서고 키 하나 더 — `_KEY` `(SP|SC)` → `(SP|SC|SK)` `Labor_Ref.py:37` · `kind_of` `:48` · `check_ref` · `users` · `carry` · `frozen` · `Expand` 갈래 하나 → 순환 · 깊이 · 위 층 규칙 그대로 탐.
|
||||
- 순환 길 = M02 문서끼리만(SK ↔ SC) — M01 은 M02 를 안 가리킴(불변) → ref_id 그래프 한 벌로 저장 때 막음.
|
||||
- SK 셈 = ① 더한줄 안 SK · SC 먼저 `Expand`(캐시) ② 바탕 M01 줄 + 패치 → 고친 줄 ③ 메모리 사본 로직 파일에 임시 키(GX 9xxxxx · `_swap` 꼴)로 얹어 엔진 한 번. M01 로직 부르기는 엔진 안 그대로.
|
||||
- 깊이 한 값 — 저장 8 · B09 산근 4 → 8.
|
||||
|
||||
크기 서버 **M** · B09 **L** · 위험 — 단가산출이 일위대가를 담으면 B09 단계 차례(산근 → 대가)가 거꾸로(결정 거리 4).
|
||||
|
||||
### 4. 기준단위 1
|
||||
|
||||
지금
|
||||
- 사전조합 = 1 단위 값 — 「값 = Σ 안 줄 1 단위 값 × 수량(로직 줄 = 기준 ÷ 배)」 `Labor_Ref.py:7-12` · 배 = 결과단위 앞 수(「원/100m」 → 100) `M01/M01_MasterData_Store_Combo.py:180-192`.
|
||||
- 구조물 조합 일위대가 = 구조물 1 단위 당 · 줄 수량 = 면적 알약 칸 · 손 `Labor_Doc.py:9-10` · 규격 열(704-4) — 수량이 「섞이는」 유일한 자리지만 설계 정보 자리라 요구와 맞음(마스터 labor 55 줄 중 54 줄 = 면적 칸).
|
||||
- 프로젝트 총수량 = B08 → B09 곱하기에서만 `B09/Calc_Bill.py:253-278`(5-B ②) · 702 덮개 qty = 구성 수량.
|
||||
- 빈 곳 — 사전조합 `단위` 빈칸 허용 `Labor_Ref.py:142-147` · 실자료 11 중 3 빈칸 → 「1 단위」가 무엇인지 모름 · 단위 바꿈(㎥ ↔ t · m ↔ 본)은 없고 배(같은 단위 크기)만.
|
||||
|
||||
고칠 자리 — SK · SC 저장 때 단위 필수(빈칸 400) · 상세 머리 「1 ㎡ 당」 · 단위 바꿈은 M01 요구(단위 변환 로직)와 함께. **S** · 위험 낮음.
|
||||
|
||||
### 5. 프로젝트로 옮길 때 복사
|
||||
|
||||
지금
|
||||
|
||||
| 길 | 굳히는 것 | 근거 |
|
||||
| --- | --- | --- |
|
||||
| 구조물 사본 | 일위대가.json = 문서 + M01 로직 줄 원본 · 참조사본 = 닿는 SC 전부(깊이 8 · 알약째) · 단가.json = 닫힌 묶음(로직 · 하위 로직 · 표 · 자재 · 노임) · manifest 원본판 | `M02/M02_Item_Source.py:96-135, 155-191` · `M02/M02_Labor_Ref.py:537-564` · `M02/M02_Item_Snapshot.py:138-159` |
|
||||
| B09 서고 사본(SC) | 참조사본 + 안 로직 줄까지 단가.json · 원본판 없음 | `B09/Bill_Library.py:89-111, 227-251` |
|
||||
| 사본 셈 | 사본만 읽음(지금 M01 안 읽음) | `M02/M02_Item_Prices.py:255-259` |
|
||||
| 사본 고침 | 일위대가 거절 · 넣을 값만 · 고침은 B09 덮개 | `M02/M02_Item_Copy.py:168-170` |
|
||||
| [재적용] | 원본에서 다시 만듦 · 넣을 값 · 고른자재 남김 | `M02/M02_Item_Copy.py:240-282` |
|
||||
| [업데이트] 703-3 | 구조물 사본 = 원본판 다르면 재적용 · 단가 책 다시 굳힘 · 서고 사본 = 단가만 · 덮개 안 건드림 | `B09/Refresh.py:21-28, 63-72` · `B09/Prices.py:185-187` |
|
||||
| 내 자료집에 저장 703-2 | 맨 위 줄 수량 덮개만 손 수량에 구움 · 품셈 블록 품 덮개 · 단가 덮개 = 버림(수만 알림) | `B09/Daega_Personal.py:1-6, 122-132` |
|
||||
|
||||
- 아직 지금 M01 을 읽는 자리(굳힘 밖) — 산근 단위 알약 `B09/Sangeun.py:199` · 손 줄 로직 `:547` · 운반 창 입력 이름 `:518` · `B09/Labor_Source.py:246-250`.
|
||||
|
||||
바뀔 꼴(풀어 굳힘)
|
||||
- SK 가 닿는 사본 = 고친 줄(패치를 푼 M01 줄)을 단가.json 로직 파일에 굳힘(키 = 사본 안 새 키) · SK 문서는 참조사본에(원값 · 덮개 근거 = 「M02 에서 고침」 표시용) · 프로젝트 셈 = 지금 엔진 그대로.
|
||||
- 프로젝트 안 고침 = 702 덮개 그대로(굳힌 고친 줄 위) · [모두 품셈 값으로] 기준 = 결정 거리 5.
|
||||
- 새 판 = 서고 사본에도 원본판 → [업데이트] 미리 보기 「M02 단가산출 바뀜 n」 → 다시 굳힘 · 프로젝트 덮개는 cid 로 지킴(703-3 한 단추에 합침).
|
||||
- 내 자료집에 저장 = 품셈 블록 `P:` 품 · 단가 덮개 → 개인 층 SK `덮개`(같은 cid) — `Daega_Personal.py:4-6` 이 「안 담는 것」으로 남긴 몫을 살림.
|
||||
|
||||
크기 **L** · 위험 — 임시 키 로직을 위 넷 자리가 「없는 로직」으로 봄 → 굳힌 묶음에서 읽게 · `B09/Sangeun.py` 634 줄 · `B09/Router.py` 651 줄.
|
||||
|
||||
### 6. 일위대가 상세 = 호표 한 장 · 단가산출 모달
|
||||
|
||||
지금
|
||||
|
||||
| 화면 | 부품 | 공유 |
|
||||
| --- | --- | --- |
|
||||
| B09 일위대가표 | `ui_template/ui_template_hopyo_grid.ts:157`(704-3) | M02 카드 · 상세와 같은 격자 |
|
||||
| M02 일위대가 상세 | 같은 격자 + `M02/M02_MasterTemplete_Labor_Detail.ts`(700 줄) · 줄 인라인 펼침 `Labor_Rows.ts:271-275` | — |
|
||||
| B09 산근 | `B09/UI_Tabs_Sangeun.ts:75-169` 자기 표 | 따로 |
|
||||
| B09 카드 보기 | `B09/UI_Tabs_Groups.ts` → `ui_template_group_cards.ts` · 호표마다 · 줄에 노 · 재 · 경 칸 | 따로 |
|
||||
| M01 단가산출 상세 | `M01/M01_MasterData_UI_LogicLab_Detail.ts:1-7` ③ 인력 · 자재 · 경비 · 그 밖 + 소계 · 조립 `:476-496` | 따로 |
|
||||
| 계산서 보기 모달 | `M02/M02_MasterTemplete_Labor_Sheet.ts:22` 비목 묶음 · B09 도 씀 · 지금 M01 만 읽음 `M02/M02_Logic_Standard.py:325` | M02 · B09 |
|
||||
|
||||
- 일위대가 줄 → 단가산출 여는 길 = B09 산근 줄 → 산근 탭 · 곁 창 보기만(303-2 `B09/UI_Popup.ts`) / M02 = 인라인 펼침. 고치는 모달 없음.
|
||||
|
||||
고친 값 저장 자리
|
||||
|
||||
| 자리 | 좋은 점 | 나쁜 점 |
|
||||
| --- | --- | --- |
|
||||
| 일위대가 줄 쪽(줄에 `덮개` 칸 — 넣을 값 · 고름과 같은 자리) | 그 일위대가만 · 남에게 안 번짐 · 지금 줄 꼴 그대로 | 같은 고침 되풀이 |
|
||||
| 단가산출(SK) 쪽 | 한 번 고쳐 여러 일위대가 | 남의 일위대가까지 바뀜 · 회사 SK 는 일반 사용자 못 고침 |
|
||||
|
||||
- 권함 = 일위대가 줄 쪽 + [단가산출로 저장](이름 붙여 SK 로 올리고 줄을 SK 참조로 바꿈) · 줄이 SK 참조면 모달에서 「이 일위대가만 · 단가산출 원본(권한 있을 때)」 고름 · 줄 패치 꼴 = SK 문서 꼴(한 벌).
|
||||
|
||||
고칠 자리 — M01 상세 부품을 「줄 · 셈 답 · 고칠 칸 콜백」 받게 나눔(M01 상세 개편 12-A 와 같은 파일) → M02 SK 상세 · 일위대가 줄 모달 · B09 산근 곁 창이 같은 부품. **L** · 위험 — `Labor_Detail.ts` 700 · `Labor_Rows.ts` 671 · B09 산근 시트 덮개는 새로(지금 702 밖).
|
||||
|
||||
### 7. 경쟁사(EST)에서 단가산출 고쳐 쓰기
|
||||
|
||||
| 물음 | EST | 근거 |
|
||||
| --- | --- | --- |
|
||||
| 기준 자료 | 공급사가 반기마다 통째 배포 · main 산근 1,569 · 일위 1,468 · 숫자 박은 글 · 규격마다 따로 | `_분석_내역7` ① 1~2 |
|
||||
| 고쳐 쓰기 | 공사 파일 = 원천 표 사본째 · 고치면 그 파일만 · 「원본 참조 + 차이만 저장」 아님 | `_분석_내역1-A_EST.md:79` |
|
||||
| 단가산출 편집 | 자유 글 + 식(「이름 = 식 = 결과」) · 줄 성격 노 · 재 · 경 · 소계 지정 · 사용자 단가입력(명칭 + 노 · 재 · 경) · 기계경비 공식 · 전역변수 | `_분석_내역1-A_EST.md:68` · `_분석_내역3-A_EST_화면.md:60-69` |
|
||||
| 고친 표시 | 목록 「사용자입력」 체크 칸 하나 · 품셈 원값 되돌리기 없음 | `_분석_내역3-A_EST_화면.md:143` · `_분석_내역1-A_EST.md:25, 82` |
|
||||
| 재활용 | 지난 공사 파일 · 설계참고철 · 폴더 통합검색 · 회사 · 개인 층 없음 · 같은 이름 안 들어옴 | `_분석_내역1-A_EST.md:28, 97-103` |
|
||||
| 갱신 | 단가만(노임 · 기계 · 자재 · 유류 · 표준 · 환율) · 일위 · 단가산출 구성은 그대로 · 「복원할 수 없습니다」 | `_분석_내역1-A_EST.md:85-87` |
|
||||
| 일위 안 비목 | 우클릭 「비목별 단가 불러오기 ▸ 노무비만 · 재료비만 · 경비만 · 전체」 | `_분석_내역3-A_EST_화면.md:56` |
|
||||
|
||||
- 시사 — EST 의 쉬움 = 「복사본을 그 자리에서 숫자로 고침」. SK = 같은 손맛(숫자 칸 고침) + EST 에 없는 것(M01 개정 따라감 · 원값 곁에 · 고친 칸 표시 · 층) · 식 편집은 따라 하지 않음.
|
||||
|
||||
## ④ 결정 거리 (사용자에게 물을 것 · 권함)
|
||||
|
||||
1. **새 칸 이름 · 키** — 화면 「단가산출」 · 서고 종류 `sangeun` · 키 `SK-######`(SG = B09 산근 id · SU = 일위대가번과 겹침). 권함 = 그대로.
|
||||
2. **줄 품 덮개 꼴** — (가) 숫자 고정(702 와 같음) (나) 배율(품셈 × 1.1). 권함 = (가) · 옵션(넣을 값)을 고정한 단가산출만 품 덮개 받음 · 옵션을 열어 둔 것은 배율만.
|
||||
3. **바탕 없는 단가산출**(M01 로직 없이 줄만) — 권함 = 허용(줄 = M01 요소 · 고정 · 다른 단가산출 · 수만 · 식 없음) · M01 GX 자체 로직은 관리자 몫 그대로.
|
||||
4. **단가산출 안 일위대가 줄** — (가) 받음 + B09 산근 → 대가 셈 새로(단계 차례 바꿈 · L) (나) 받음 + 프로젝트로 갈 때 그 단가산출을 일위대가 블록으로 펼침(산근 시트엔 안 나옴) (다) 1차 막음. 권함 = (나) — 인력 · 자재 · 경비 보기는 그대로 · B09 셈 차례 안 건드림.
|
||||
5. **프로젝트 [모두 품셈 값으로] 기준** — (가) M02 단가산출 값 (나) M01 원값. 권함 = (가) · M01 원값은 곁에 보이기만.
|
||||
6. **일위대가 상세 모달에서 고친 값 자리** — 권함 = 일위대가 줄 덮개(그 일위대가만) + [단가산출로 저장] · SK 원본 고침은 권한 있을 때 고름.
|
||||
7. **M01 개정 때 덮개** — 권함 = 저절로 지우지 않음 · 짝 잃음 알림 · 원값 비교 · 「M01 개정 — 확인」 배지.
|
||||
8. **사전조합 · 단가산출 폴더 지우기** — 지금 빈 폴더만 → 구조물 조합처럼 안에 든 것째(쓰는 곳 있으면 409 · 그 이름). 권함 = 안에 든 것째 + 확인 창 · 여럿 고름 · 복사 붙여넣기는 2차.
|
||||
9. **노임 줄 손 단가 덮개** — 노임 새 판을 안 따라감. 권함 = 받되 「손 단가」 꼬리표(705 고정 줄 꼴) · 자재는 출처 칸 고르기를 먼저 보임.
|
||||
10. **기존 사전조합 로직 줄(넣을 값 품은 10 줄)** — 권함 = 자동 옮김 안 함 · [단가산출로 저장]으로 사용자가 올림.
|
||||
|
||||
## ⑤ 단계 제안
|
||||
|
||||
먼저 할 틀(한 창 · 다른 창이 기대는 계약)
|
||||
- **T0** = SK 문서 꼴 · 줄 정체 · 패치 → 고친 줄 함수 · 엔진 줄 덧칸 둘(`단가` · `묶음`) · M02 SK 셈 길(로그인 + 층 읽기 · 저장 안 함) · 시험 = 고친 줄 값 = 손셈 · 덧줄 다시 셈 · 짝 잃음 · 순환 422.
|
||||
|
||||
창 나누기(파일 경계)
|
||||
|
||||
| 창 | 몫 | 파일(★ = 새) | 크기 |
|
||||
| --- | --- | --- | --- |
|
||||
| A 서버 틀 | T0 + 서고 종류 · 참조 · 순환 · 지우기 막음 · 층 복사 | ★`M02_Sangeun_Doc.py`(꼴 · 검사 · 패치) · ★`M02_Sangeun_Calc.py`(고친 줄 · `_swap` · 엔진) · `M02_Labor_Ref.py`(`_KEY` · `kind_of` · `Expand` 갈래) · `M02_Template_Layers.py` · `M02_MasterTemplete_Store.py`(`_server` 한 줄) · `master_pick.py`(단가 덧칸) · `master_formula.py`(묶음 한 줄) | M |
|
||||
| B 폴더 · 좌측 | 폴더 길 종류 인자 · 서고 칸 화면 두 번 · 좌측 차례 · 폴더 지우기 꼴 | `M02_Precombo_Folders.py` · `M02_Labor_Router.py` · `M02_MasterTemplete_UI_Side_Precombo.ts` → ★`M02_MasterTemplete_UI_Side_Library.ts` · `M02_MasterTemplete_UI_Side.ts` · `M02_MasterTemplete_Api_Fetch.ts` | M |
|
||||
| C 상세 화면 | M01 상세 부품 나눔(콜백) · SK 상세 · 일위대가 줄 모달 | `M01_MasterData_UI_LogicLab_Detail.ts` 등(12-A M01 개편 창과 같은 파일 → 한 창) · ★`M02_MasterTemplete_Sangeun_Detail.ts` · `M02_MasterTemplete_Labor_Detail.ts`(손대기 전 나눔) | L |
|
||||
| D 일위대가 쪽 | 사전조합 · 일위대가 줄에 SK 참조 · 줄 덮개 · [단가산출로 저장] | `M02_Labor_Doc.py`(줄 덮개 정리는 ★`M02_Labor_Patch.py` 로) · `M02_MasterTemplete_Labor_Calc.ts` 짝 · 거울 시험 | M |
|
||||
| E 프로젝트 | 풀어 굳힘 · 서고 원본판 · [업데이트] · 내 자료집 SK · 지금 M01 읽는 넷 자리 | `M02_Item_Source.py` · `M02_Item_Prices.py` · `B09_Estimation_Bill_Library.py` · `B09_Estimation_Refresh.py` · `B09_Estimation_Daega_Personal.py` · `B09_Estimation_Sangeun.py` · `B09_Estimation_Labor_Source.py` | L |
|
||||
|
||||
- 차례 = A → (B · D 함께) → C(12-A M01 개편 뒤) → E.
|
||||
- 700 줄 넘을 파일 — `M02_MasterTemplete_Labor_Detail.ts` 700 · `M02_MasterTemplete_TreePanel.ts` 700(손 안 댐) · `M02_Table_Fill.py` 698(손 안 댐) · `M01_MasterData_Store.py` 695(손 안 대고 부르기만) · `master_formula.py` 686 · `M02_Labor_Doc.py` 684 · `M02_MasterTemplete_Labor_Rows.ts` 671 · `B09_Estimation_Router.py` 651 · `B09_Estimation_Sangeun.py` 634 · `M02_Labor_Ref.py` 584(SK 갈래로 넘을 공산 → `Expand` 를 따로 떼어 둠).
|
||||
- 옛 자료 옮김 — 없음. 층 사전조합 11(마스터 1 · 개인 10) · 새 종류는 빈 폴더로 시작 · 옛 문서는 그대로 읽힘.
|
||||
- 시험 — `resources/tester` 에 SK 꼴 · 셈 · 순환 · 층 복사 · 굳힘 · 덮개 지킴 · 쓰는 시험은 임시 storage.
|
||||
@@ -0,0 +1,228 @@
|
||||
# 내역 12-D — M02 화면 구성 · 메뉴 · 불러오기 · 별칭 장부 (조사)
|
||||
|
||||
조사 에이전트 · 읽기 전용 · 2026-11-01 · 근거 = 요구 원문 `docs/raw/요구_내역서/사용자요구_내역서.md:81-93` · 코드 main_laptop_1 23772023d.
|
||||
경로 약어: `M02/` = `M02_MasterTemplete/` · `M01/` = `M01_MasterData/` · `SO/` = `M02_MasterTemplete/StructOptions/` · `B01/` = `B01_Dashboard/`.
|
||||
|
||||
## ① 결론 다섯 줄
|
||||
|
||||
1. M02 좌측 판 지금 차례 = 구조물 조합 › 일위대가 사전조합 › 일위대가 실무자료 › 구조물 옵션 정의 › 도면 양식 › 실무문서. 지금 이름은 「일위대가 불러오기」가 아니라 「일위대가 실무자료」 → 바꿀 것은 실무자료 → 불러오기. 좌측 판용 수평 구분선 부품 없음 → 부품 상자에 하나 더해야 함.
|
||||
2. 구조물 옵션 정의는 **화면 입구만 M01 로** 옮기면 끊기는 곳 0. 파일 · `/api/m02/structure-definition` 길 · B05 · B07 · B08 · M02 서버 import 일곱 곳은 그대로 둠. 대가 = 일반 · 회사 관리자의 읽기 화면이 사라짐(M01 = 시스템 관리자만).
|
||||
3. ☰ 메뉴와 대시보드 「설계 기본값」이 한 표(`settingLinks`)를 같이 씀 → M02 가 칸별로 셋(구조물 조합 · 옵션 · 도면)이나 보임. 표를 둘로 가름: ☰ = M01 · M02 둘 · 대시보드 = 칸별 줄(`?open=`). M02 는 `open` 인자가 이미 있고 M01 은 없음 → M01 에 `open` 인자 하나 더함.
|
||||
4. 일위대가 불러오기는 지금 **올린 파일을 층에 계속 둠**(`실무자료/HP-*.json` + 격자 + 맞춤셈 캐시) · [로직 추가] 창이 이 층 · 위 층 파일을 계속 읽음 · 결과는 개인 층 사전조합에만 감(단가산출 칸 없음). B09 통째 불러오기(707-7)는 이미 임시 폴더 일회성 → 같은 꼴로 걷을 수 있음.
|
||||
5. 별칭 장부 = 층 파일 `실무자료/맞춤.json`(개인 → 회사 → 마스터 차례로 읽음 · 마스터 층 장부는 아직 0 줄). 마스터 층이 이미 읽기 차례 끝에 있어 **모아서 마스터에 승인해 넣기만 하면** 모든 사용자 매칭이 오름 · 쓰기 길(`/layers/system/hopyo-ledger`)도 이미 있음. 새로 필요 = 모으기 함수 하나 · M01 관리 화면.
|
||||
|
||||
## ② 거시 — 지금 지도 → 바뀔 지도
|
||||
|
||||
### 지금
|
||||
|
||||
| 자리 | 칸 · 항목 | 보는 사람 |
|
||||
|---|---|---|
|
||||
| M01 마스터 요소 | 인력 · 재료 · 유가 · 전력 · 기계 · 소요량 · 계수 · 환율 · 요율 · 단가산출 로직 | 시스템 관리자만(`M01/M01_MasterData_UI_Page.ts:57-61`) |
|
||||
| M02 마스터 템플릿 | 구조물 조합 · 일위대가 사전조합 · 일위대가 실무자료 · (마스터 층) 구조물 옵션 정의 · 도면 양식 · (마스터 층 + 시스템 관리자) 실무문서 | 로그인 누구나 · 쓰기 = 층 권한 |
|
||||
| ☰ 메뉴(M01 · M02 안) | 🏠 + 마스터 데이터 · 구조물 조합 · 구조물 옵션 · 도면 양식(시스템 관리자) / 구조물 조합(그 밖) | `settingLinks` 한 벌 |
|
||||
| 대시보드 › 시스템 관리 › 설계 기본값 | 같은 표 + 계산 자리 · 묶음 「마스터 데이터」 · 「구조물 · 도면」 · 「계산」 | 시스템 관리자 |
|
||||
| 대시보드 › 회사 설계 기본값 · 내 정보 › 내 설계 기본값 | 같은 표 중 구조물 조합 한 줄 | 일반 · 회사 관리자 |
|
||||
|
||||
### 바뀔 지도(권함)
|
||||
|
||||
| 자리 | 칸 · 항목 |
|
||||
|---|---|
|
||||
| M01 | 인력 … 요율 · 단가산출 로직 · ─ 구분선 ─ · 구조물 옵션 정의 · 별칭 장부(마스터 · 모인 후보) |
|
||||
| M02 | 단가산출(새) · 일위대가(옛 사전조합) · 구조물 조합 · ─ 구분선 ─ · 일위대가 불러오기(옛 실무자료 · 한시) · 도면 양식(마스터 층) · 실무문서(결정 거리 2) |
|
||||
| ☰ 메뉴 | 🏠 + M01(시스템 관리자) · M02 — 페이지 둘만 |
|
||||
| 대시보드 설계 기본값 | 마스터 데이터 묶음(마스터 요소 · 단가산출 로직 · 구조물 옵션 정의 · 별칭 장부 → M01 `?open=`) · 마스터 템플릿 묶음(단가산출 · 일위대가 · 구조물 조합 · 도면 양식 → M02 `?open=`) · 계산 자리 |
|
||||
|
||||
## ③ 미시
|
||||
|
||||
### 1. M02 좌측 판 차례 · 이름
|
||||
|
||||
**지금** — 그리는 곳 `M02/M02_MasterTemplete_UI_Side.ts:184-193`(listHost children 차례).
|
||||
|
||||
| 차례 | 이름 | 이름 자리 | 만드는 줄 | 보임 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 구조물 조합 | 화면 글 키 `M02_KindTable`(`ui_template/ui_template_locale_m2.ts:11`) | `UI_Side.ts:139-145` · 나무 = `UI_Page.ts:255-258` | 모든 층 |
|
||||
| 2 | 일위대가 사전조합 | 하드코딩 `PRECOMBO_TITLE`(`M02/M02_MasterTemplete_UI_Side_Precombo.ts:45`) | `UI_Side.ts:147-153` | 모든 층 |
|
||||
| 3 | 일위대가 실무자료 | 하드코딩 `HOPYO_TITLE`(`M02/M02_MasterTemplete_Hopyo_Side.ts:15`) | `UI_Side.ts:178-183` | 모든 층 |
|
||||
| 4 | 구조물 옵션 정의 | `SO/M02_SO_Text.ts:9`(Title) | `UI_Side.ts:124-129 · 164` | 마스터 층 |
|
||||
| 5 | 도면 양식 | 화면 글 키 `M02_KindDrawing`(`locale_m2.ts:12`) | `UI_Side.ts:165` | 마스터 층 |
|
||||
| 6 | 실무문서 | 화면 글 키 `M02_PracticeTitle`(`locale_m2.ts:165`) | `UI_Side.ts:169-176` | 마스터 층 + 시스템 관리자 |
|
||||
|
||||
- 수평 구분선 부품 없음 — `ui_template/` 에 좌측 판 구분선 없음(툴바 세로 나눔선 `ui_template_toolbar.css:22` · 패널 머리 밑줄 `ui_template_panel_head.css:10` 뿐) · 페이지마다 날 `hr`(`A00_Common/design/design_dock.ts:63` · `B05_Profile_UI_Panel_Settings.ts:157`).
|
||||
- `attachCollapsible`(`ui_template_collapsible.ts:64-70`)은 제목 누름만 봄 → 사이에 구분선을 끼워도 안전.
|
||||
- 「일위대가 사전조합」 폴더 · 층 단추 = 이미 있음(자유 폴더 158-1 · 컨테이너마다 층 134-3 · `UI_Side_Precombo.ts:1-10`) → 요구 82줄 「사전조합도 폴더」는 이미 됨. 빈 곳 = 구조물 조합의 층 단추 옆 「+」(`UI_Page.ts:141-149` add)가 사전조합 층 단추(`UI_Page.ts:238-247`)엔 없음 · 우클릭만.
|
||||
|
||||
**고칠 자리**
|
||||
- 부품 상자: `ui_template/ui_template_overlay.css`(좌측 판 공용 틀 · 403줄 근처)에 `.ui-sidebar-divider` 한 벌 · 부품 모음 견본(`ui_template_ui_kit_frames.ts`).
|
||||
- 화면 글 키: `locale_m2.ts` 에 새 키 셋(단가산출 · 일위대가 · 일위대가 불러오기) · 하드코딩 두 곳(`PRECOMBO_TITLE` · `HOPYO_TITLE`)을 키로.
|
||||
- 차례: `UI_Side.ts:184-193` 한 곳 · 옵션 줄 빼기(124-129 · 164 · 247 · 349-354 `reveal` 옵션 갈래).
|
||||
- 이름 따라가는 글: `M02_MasterTemplete_Labor_Text.ts:104 · 159-164`(Lib_Precombo …) · `Hopyo_Check.ts`(「확인하고 사전조합 만들기」 단추) — 화면 글만 · 주석 · 파일 이름 · API 길 · `precombo` 종류 이름은 그대로.
|
||||
|
||||
크기 S~M · 위험 = 시험 글 박힘(`helper_m02_precombo_scope.cjs` · `test_m02_hopyo_screen.py`) · A05 가이드 글(가이드 고침은 지시 때 몰아서).
|
||||
|
||||
### 2. 구조물 옵션 정의 → M01
|
||||
|
||||
**지금**
|
||||
|
||||
| 무엇 | 근거 |
|
||||
|---|---|
|
||||
| 좌측 줄 | `SO/M02_SO_Options.ts:31-53`(줄 하나 → `openDefScreen`) |
|
||||
| 정의 화면 | `SO/M02_SO_Def.ts`(418줄) + `SO/M02_SO_Def_*.ts` 열셋 · CSS `SO/M02_SO_Style.css` · 글 `SO/M02_SO_Text.ts` |
|
||||
| 화면 → 서버 | `SO/M02_SO_Api.ts:18-29` → `/api/m02/structure-definition`(+version · history) |
|
||||
| 서버 길 · 권한 | `SO/M02_SO_Router.py` — 읽기 = 로그인(`read_router` · `main.py:556`) · 쓰기 = 시스템 관리자(`access.require(write=True)` · `M02_SO_Router.py:112`) · 보이기 · 그룹 옛 길 = `system_admin_only`(`main.py:555`) |
|
||||
| 정본 | `resources/master_template/구조물정의.json` + `구조물정의_이력/` |
|
||||
|
||||
**옮길 때 끊기는 곳** — 화면 입구만 옮기면 0 · 폴더째 옮기면 아래 전부.
|
||||
|
||||
| 읽는 곳 | 근거 | 입구만 옮김 | 폴더째 옮김 |
|
||||
|---|---|---|---|
|
||||
| M02 구조물 조합 일위대가 상세 · 고르기 창(구분 › 상세구분) | `M02/M02_MasterTemplete_Labor_Detail.ts:74 · 613` · `Labor_Pick.ts:35 · 314` · `UI_Side_Precombo.ts:34`(타입) | 그대로 | import 셋 고침 |
|
||||
| B05 · B06 구조물 종류 캐시 | `B05_Profile/B05_Profile_Api_Structures.ts:209 · 274`(API 길) | 그대로 | 길 바뀌면 고침 |
|
||||
| 서버 import | `B05_Profile_Structures_Router.py:54` · `B05_Profile_Structures_Repository.py:21` · `B05_Profile_Engine_Sections_Node.py:50` · `B07_DesignDetail_Engine_Cad_CulvertNote.py:246` · `B08_Quantity_Router_Summary.py:63` · `M02_Item_Snapshot.py:280` · `M02_Table_Fill.py:155` | 그대로 | 일곱 곳 고침 |
|
||||
| B07 Node 묶음 | `B07_DesignDetail_Note_Options_Node.ts:11`(같은 꼴) | 그대로 | 다시 지음 |
|
||||
|
||||
**고칠 자리(입구만 옮김)**
|
||||
- `M01/M01_MasterData_UI_Side.ts:478-489` — 로직 칸 뒤 구분선 + 옵션 칸(`buildOptionsSection` 을 M02 에서 import · M02 가 이미 M01 을 import 하는 길이 있음 → 양쪽 import 문제없음).
|
||||
- `M01/M01_MasterData_UI_Page.ts:91 · 115-118` — 본 칸 셋째 모드(옵션) · `show(label, node)` 손잡이(고침 표시 돌려줌) 흉내 · M01 은 나가기 물음이 없음(초안 sessionStorage) → **정의 화면 저장 안 한 고침만** 칸 바꿀 때 · 페이지 떠날 때 물음(`setLeaveGuard` · `A00_Common/router.ts:103`).
|
||||
- M02 쪽: `UI_Side.ts` 옵션 줄 빼기 · `M02_MasterTemplete_Layer.ts:19 · 32` `open=옵션` → M01 `?open=옵션` 로 돌려보냄(옛 즐겨찾기).
|
||||
- 권한: M01 화면 = 시스템 관리자만이라 정의 쓰기 권한과 같음 · 서버는 그대로.
|
||||
|
||||
크기 M · 위험 = 일반 · 회사 관리자가 M02 마스터 층에서 보던 읽기 화면 사라짐(`UI_Side.ts:160` 주석 「다른 역할은 읽기만」) · 시험 `test_197_1_dashboard_option_card.py`(카드 → M02 옵션 열림) 낡음.
|
||||
|
||||
### 3. ☰ 메뉴 · 대시보드 설계 기본값
|
||||
|
||||
**지금 방식** — 표 하나 `settingLinks`(`A00_Common/m_settings_nav.ts:35-77`) · 역할로 줄을 숨김 · M02 줄은 `?open=&root=` 로 같은 페이지의 칸을 고름.
|
||||
|
||||
| 역할 | 줄(☰ = 계산 자리 뺌 · `m_settings_nav.ts:86`) | 근거 |
|
||||
|---|---|---|
|
||||
| 시스템 관리자 | 마스터 데이터(M01) · 구조물 조합(open=구조물조합 · root=개인 또는 master) · 구조물 옵션(open=옵션 · master) · 도면 양식(open=도면 · master) · 계산 자리(대시보드 창) | `:48-67` |
|
||||
| 회사 관리자(ADMIN · is_master) | 구조물 조합(root = 회사 있으면 personal · 없으면 company) | `:69-76` |
|
||||
| 일반(USER · FOREST) | 구조물 조합(root personal) | `:69-76` |
|
||||
|
||||
- ☰ = `mountSettingsDrawer`(`m_settings_nav.ts:80-99`) — M01(`M01_MasterData_UI_Page.ts:64` 열쇠 m01) · M02(`UI_Page.ts:286` 열쇠 = `entry.open`) · 강조 = 열쇠가 같은 줄.
|
||||
- 대시보드 쓰는 곳 셋: `B01/B01_Dashboard_UI_View_SysDefaults.ts:16-36`(묶음 표 `GROUP_OF` 16-22) · `B01_Dashboard_UI_View_CompanyDefaults.ts:19` · `B01_Dashboard_UI_View_Me.ts:53-54`(열쇠 「구조물조합」 거름) · 메뉴 등록 `B01_Dashboard_UI_Views.ts:68 · 74`.
|
||||
- 「그 칸을 고른 채 열기」 장치: M02 = 있음(`entryFromHash` `M02_MasterTemplete_Layer.ts:39-52` → `side.reveal` `UI_Page.ts:285` · 옵션은 줄까지 누름 `UI_Side.ts:349-354`) · M01 = **없음**(주소 인자 안 읽음 · 로직 칸만 sessionStorage `m01.logic.pending` 장치 `M01_MasterData_UI_Side.ts:40-68`).
|
||||
- 다른 페이지에서 M02 로 오는 길: `B09_Estimation_UI_Shell.ts:446`(open=일위대가조합) · `ui_template/ui_template_item_picker.ts:74`(open=구조물조합) → 열쇠 이름 유지.
|
||||
|
||||
**고칠 자리**
|
||||
- `m_settings_nav.ts` — 표를 둘로: `pageLinks`(☰ · M01 · M02 둘 · 아이콘 `:32`) / `settingLinks`(대시보드 줄 · M01 `?open=로직|옵션|별칭` · M02 `?open=단가산출|일위대가조합|구조물조합|도면`). `mountSettingsDrawer` 열쇠 = 「m01」 · 「m02」.
|
||||
- `UI_Page.ts:286` 열쇠 `entry.open` → 「m02」.
|
||||
- `M01_MasterData_UI_Page.ts:55-65` — `currentQuery().get("open")` 읽어 그 칸 펼침 · 누름(M02 `reveal` 꼴 · `M01_MasterData_UI_Side.ts` 에 reveal 하나).
|
||||
- `B01_Dashboard_UI_View_SysDefaults.ts:16-22` 묶음 표 새 열쇠로.
|
||||
- 역할 차이는 그대로(M01 줄 = 시스템 관리자만 · M02 = 누구나).
|
||||
|
||||
크기 M · 위험 = `test_b01_settings_cards.py`(줄 · 해시 대조) · `test_309_2_calc_sites.py` 낡음 · 같은 주소(M02 → M02) 이동은 머리 가드가 안 물어 `go`(`m_settings_nav.ts:101-105`)가 먼저 물음 — 칸 줄이 ☰ 에서 빠지면 이 갈래는 M01 ↔ M02 만 남음.
|
||||
|
||||
### 4. 일위대가 불러오기 = 한시
|
||||
|
||||
**지금 쥐고 있는 것**
|
||||
|
||||
| 무엇 | 자리 | 근거 |
|
||||
|---|---|---|
|
||||
| 읽은 결과 | 층 `실무자료/HP-######.json`(원본 엑셀 안 둠) | `M02/M02_Hopyo_Store.py:1-6 · 75-100` |
|
||||
| 엑셀꼴 격자 | 층 `실무자료/격자/HP-######.json` | `Hopyo_Store.py:102-108` |
|
||||
| 맞춤셈 캐시 | `tmp/m02_hopyo/맞춤_<HP16>_<판16>.json` | `M02/M02_Hopyo_Fit.py:1-14` |
|
||||
| 별칭 장부 | 층 `실무자료/맞춤.json` | 5 절 |
|
||||
| 지금 쌓인 파일(공유 storage 실측) | 개인 1/10 HP 둘 · 1/3 HP 하나 · 1/9 HP 하나 · 회사 1 HP 하나 · 마스터 0 | `storage/*/…/templates/실무자료/` |
|
||||
|
||||
**목록 · 계속 읽는 곳**
|
||||
- 좌측 판 파일 줄(`Hopyo_Side.ts:85-100`) · 올리기 층 = 페이지 층(구조물 조합 층 · `pageScope` `Hopyo_Api.ts:321`).
|
||||
- [로직 추가] 창 「실무 호표」 줄 — `withHopyo`(`M02/M02_MasterTemplete_Hopyo_Pick.ts:19-41` · 내보냄 `Labor_Pick.ts:41`) → `GET /layers/{층}/hopyo-picks`(`M02_Labor_Router.py:228-245`) → 이 층 · 위 층 HP 파일 전부(`M02_Hopyo_Match.py:477-501`).
|
||||
- 목록 열 때마다 맞춤셈 예약(`M02_Labor_Router.py:221-224`).
|
||||
|
||||
**결과가 들어가는 길**
|
||||
- 엑셀 보기 창(`Hopyo_Sheet.ts`) [모두 고정으로 들여오기](`/hopyo-build-all` · `Labor_Router.py:396-408`) 또는 호표별 확인 창(`Hopyo_Check.ts`) [확인하고 사전조합 만들기](`/hopyo-build` · `:371-393`) → **개인 층 사전조합 SC**(목표 고정 `Hopyo_Side.ts:116`) · 문서 `본뜬` = HP 키 · 원본 층(`M02_Hopyo_Build.py:58-90` mark · confirmed) · 같은 본뜬이면 덮음.
|
||||
- 엑셀 단가산출(단산 블록 `M02_Hopyo_Excel.py:9-21`)은 사전조합 안 로직 줄(입력값)로만 들어감 — M02 단가산출 칸이 없음 → 요구 87줄 「M02 단가산출과 일위대가로」의 단가산출 쪽 길 없음.
|
||||
- 선례: B09 통째 불러오기(707-7)는 이미 일회성 — 임시 폴더에서 만들고 사본으로 굳힘 · 층 쓰기 0(`B09_Estimation/B09_Estimation_Bill_Hopyo.py:1-11 · 110`). 단 고정 줄 길이라 장부 안 씀.
|
||||
|
||||
**일회성으로 바꿀 때 걷을 것 · 남길 것**
|
||||
|
||||
| 걷음 | 남김 |
|
||||
|---|---|
|
||||
| 좌측 파일 목록(영구 목록) → [불러오기] 단추 + 마법사(올림 → 보기 · 확인 → 만들기 → 끝) | 엑셀 읽기 `Hopyo_Excel` · `Hopyo_Stmate` · 격자 `Hopyo_Grid` |
|
||||
| 「실무 호표」 줄 `withHopyo` · `hopyo-picks` 길 | 맞춤 엔진 `Hopyo_Match` · `Hopyo_Fit` · `Hopyo_Line` |
|
||||
| 목록 열 때 맞춤셈 예약 | 만들기 `Hopyo_Build` · 장부 `Hopyo_Ledger` |
|
||||
| 끝낼 때 HP · 격자 · 캐시 지움 | 붙여넣기(705-2 `Labor_Paste` · 일위대가 상세 안 기능) · 다시 잇기(`Hopyo_Relink`) |
|
||||
|
||||
크기 M~L(단가산출로 가는 길은 6 절 뒤) · 위험 = 마법사가 요청 여러 번(보기 · 호표별 확인 · 뒤 셈)에 걸쳐 B09 처럼 한 요청 임시 폴더로 못 함 → 「작업 중 보관 + [끝내기] 지움」 꼴 · HP 를 지우면 `confirmed` 짝이 사라져 같은 호표를 다시 만들면 덮지 않고 새 키(겹침) · 결과 층이 페이지 층과 따로 놂(구분선 아래로 가면 더 헷갈림).
|
||||
|
||||
### 5. 별칭 장부 — 층 · 모으기
|
||||
|
||||
**지금 쌓이는 꼴**
|
||||
|
||||
| 기억 | 파일 · 칸 | 쓰는 때 · 층 | 읽는 차례 | 근거 |
|
||||
|---|---|---|---|---|
|
||||
| 일위대가 줄 ↔ 우리 로직 · 자재(별칭 장부) | 층 `실무자료/맞춤.json` `{줄: {품명\|규격\|단위: {원래, 갈래 짝 · 우리에 없음 · 안 씀, 짝 [{로직\|자재, 입력값, 배, 몫}], 누가, 때, 처음파일, 엑셀조항, 판}}}` · 호표 통째 = 「호표\|…」 | [확인하고 사전조합 만들기](만든 층 · 불러오기 판에선 개인 고정) · 장부 [저장](그 층 쓰기) | 개인 → 회사 → 마스터 · 아래 층 이김 · 정확 열쇠 → 품명\|단위 느슨 열쇠 | `M02_Hopyo_Ledger.py:1-12 · 88-120 · 237-267` · `Hopyo_Build.py:340-343` · `Hopyo_Store.py:122-143` |
|
||||
| B09 내역 줄 ↔ 우리 공종(707-4) | 층 `실무자료/내역맞춤.json` `{확정: 줄 키, 이름}` · 잊음 표시 | 잇기 때 회사(관리자) 아니면 개인 | 회사 + 개인(마스터 안 읽음) | `B09_Estimation_Bill_Link.py:34-36` · `B09_Estimation_Router_Link.py:40-67` |
|
||||
| 붙여넣기 열 짝(705-2) | 브라우저 localStorage | — | — | `M02_MasterTemplete_Labor_Paste.ts:4` |
|
||||
| 공사(프로젝트) 층 | 없음 — B09 통째 불러오기는 고정 줄 · 장부 안 씀 | — | — | `B09_Estimation_Bill_Hopyo.py:1-11` |
|
||||
|
||||
- 지금 쌓인 양(공유 storage 실측): 맞춤 = 개인 1/10 5 줄 · 1/3 5 줄 · 회사 · 마스터 0 · 내역맞춤 = 회사 1 10 줄.
|
||||
- 관리 화면 = M02 좌측 [별칭 장부](`Hopyo_Side.ts:54-59 · 127-135` → `Hopyo_Ledger.ts` 368줄) · 서버 `GET · PUT /layers/{층}/hopyo-ledger`(`M02_Labor_Router.py:411-437` · 층 system 도 받음 · 쓰기 = 시스템 관리자).
|
||||
- 앞선 결정: 338 설계에서 「자동 올림 · 자동 합침 · 쓰인 횟수 · 회사로 올리기」를 **안 둠**으로 정함(`docs/raw/조사/2026-10-15_338_일위대가맞춤_설계.md:380 · 547` · `Hopyo_Ledger.ts:9`) → 이번 요구가 이 결정을 뒤집음.
|
||||
|
||||
**매칭률 수치(기록 인용)** — `docs/raw/조사/2026-10-15_336_재검토_로직조합맞춤.md`
|
||||
|
||||
| 상황 | 1순위 맞음 | 근거 줄 |
|
||||
|---|---|---|
|
||||
| 맞춤 약할 때 기억 얹음(씨앗 켬) | 71.4 → 80.2 %(도움 11 · 해 0) | :112 |
|
||||
| 다 쌓은 맨 위 | 92.9 → 92.9 %(기억 몫 = 사람 확인 없이 바로 24 줄 · 모두 맞음) | :115 · :120 |
|
||||
| 처음 보는 파일(STmate · 거창) 씨앗 짝 | 41.9 → 65.1 % · 같은 발주처 기억 바로 72.1 % | :127 · :131-132 |
|
||||
| 씨앗(마스터 층 기억) 끔 ↔ 켬 | 85.7 ↔ 88.9 % | 338 설계 :138 |
|
||||
| 해로운 예 | 다른 발주처 기억 1 줄(면고르기 · 산림 ↔ 건설) 틀림 | :156 |
|
||||
|
||||
→ 시스템 단위 모음의 값어치 = 처음 쓰는 고객의 「처음 보는 파일」 칸(41.9 → 65~72 %)이 가장 큼.
|
||||
|
||||
**모으는 길(권함 · 서버 단독 ③)**
|
||||
1. 모으기 — 서버가 storage 의 회사 `{C}/templates/실무자료/맞춤.json` · 개인 `{C}/{U}/templates/실무자료/맞춤.json` 을 훑어 열쇠마다 `{짝 → 회사 수 · 사람 수 · 마지막 때}` 묶음(시스템 관리자 길만 · 저장 안 함 · 필요하면 `_derived` 지문 캐시).
|
||||
2. 익명 — `누가` · `처음파일`(파일 이름에 공사명 · 발주처) 뺌 · 숫자(회사 수 · 사람 수)만.
|
||||
3. 충돌 — 같은 열쇠 다른 짝 = 한 줄에 답마다 표 수 · 마스터에 이미 있으면 「마스터와 다름」 꼬리표.
|
||||
4. 승인 — 시스템 관리자가 M01 에서 골라 [마스터에 넣기] → 기존 `ledger.put(system)` 그대로 → 읽기 차례 끝(마스터)이라 바로 모든 사용자 제안에 씀 · 개인 · 회사 기억이 여전히 이김 · 자동 반영 없음(해로운 예 때문).
|
||||
- 관리 화면 자리 = M01 좌측 로직 칸 아래 구분선 → 구조물 옵션 정의 → **별칭 장부** · 본 칸 = `buildHopyoLedger({scope:{layer:"system", owner:null}, canWrite:true})` 재사용(지금 바로 붙음) + 「모인 후보」 표 새로.
|
||||
- 내역맞춤(B09)은 마스터를 안 읽음(`Router_Link.py:52-57`) → 같이 모으려면 읽기 차례에 마스터 더함 · 뒤 물결 권함.
|
||||
|
||||
크기 M(맞춤만) · L(내역맞춤까지) · 위험 = 마스터 층 폴더 `resources/master_template/실무자료/` 는 ignore 규칙에 안 걸림(check-ignore 빈 답) → 승인한 장부가 서버 쪽 미커밋 변경으로 남음(M02 시스템 층 쓰기와 같은 사정) · storage = 두 PC Synology 동기화라 모으기는 읽기만.
|
||||
|
||||
### 6. 새 M02 단가산출 칸 껍데기
|
||||
|
||||
**붙일 자리**
|
||||
|
||||
| 무엇 | 지금 본보기 | 고칠 자리 |
|
||||
|---|---|---|
|
||||
| 좌측 칸(층 단추 · 자유 폴더 나무 · 우클릭 [새 폴더] [여기에 새 …] [이름] [지우기] · 끌기 · 켜진 층 단추 다시 = 목록표) | 사전조합 `UI_Side_Precombo.ts:83-346`(종류 「precombo」 박힘 — `:13-20 · 132 · 270`) | 종류 인자로 넓혀 두 칸이 같이 씀 · `UI_Side.ts:184` 맨 앞에 끼움 |
|
||||
| 칸 층 상태(페이지 층과 따로) | `UI_Page.ts:219-247`(preScope · setPre · 주소 `pre`) | 같은 꼴 하나 더 · 주소 인자 하나(`Layer.ts:21-30 · 39-61`) |
|
||||
| 목록표(생성 · 복사 · 삭제) | `Library_List.ts`(kind 받음) · 여는 갈래 `UI_Main.ts:506-519`(precombo 만) | 서고 종류 일반으로 |
|
||||
| 상세 | 사전조합 = `UI_Main.ts:418-440` → `Labor_Detail` | `at.kind === 새 종류` 갈래 → M01 단가산출 로직 상세 공용 부품(다른 에이전트 몫) mount · UI_Main 665줄 → 갈래를 새 파일로 |
|
||||
| 화면 종류 | `M02_MasterTemplete_Api_Fetch.ts:14` Kind | 새 종류 더함 |
|
||||
| 서버 서고 종류 · 키 머리 | `M02_Template_Layers.py:32` LIBRARY_KINDS · `M02_Labor_Ref.py:33` PREFIX · `:48-49` kind_of(SP → promote · 그 밖 precombo 두 갈래) | 셋째 갈래 |
|
||||
| 폴더 자리 파일 | `M02_Precombo_Folders.py:19 · 23`(파일 이름 · 종류 박힘) · 길 `M02_Labor_Router.py:131 · 139` | 종류별 파일(`<종류>_폴더.json`) |
|
||||
|
||||
**선례(중요)** — 옛 「단가승격」 서고(promote · `{층}/promote/SP-######.json` · `{종류:"단가승격", 키, 이름, 단위, 배, 담은로직:[{로직, 입력값}]}` · `M02_Labor_Ref.py:4-6`)가 바로 「M01 로직에 연결 + 바꾼 입력값」 꼴 · 값 = 로직 기준 ÷ 배(`:409`) · 프로젝트로 갈 때 참조사본으로 굳힘(`M02_Item_Source.py:8 · 169`) = 요구 83줄 「연결 저장 · M08/M09 로 갈 때 복사」와 같은 꼴. 134-2 에서 사용자 요구로 지움(`docs/raw/요구_1009/사용자요구_1009.md:7-8` 「단가산출 승격 기능은 필요가 없고」) · 읽기 · 셈 · 굳힘 코드는 남음(마스터 `promote/SP-000001.json` 하나 남음).
|
||||
|
||||
크기 M(껍데기만 · 상세 제외) · 위험 = kind_of 두 갈래 가정 곳(`Hopyo_Build.py:66` precombo 글롭 · B09 서고 사본) · UI_Main 700줄 · 「연결」 문서의 M01 로직 판이 바뀔 때(시스템 관리자 갱신) 바꾼 입력값 짝 잃음 처리.
|
||||
|
||||
## ④ 결정 거리(사용자에게 물을 것 · 권함)
|
||||
|
||||
1. 「일위대가 사전조합」 새 이름 — 원문 「(이름변경)」뿐. 권함 = 「일위대가」(원문 89-92줄이 「M02의 일위대가」로 부름).
|
||||
2. 「실무문서」(옛 마스터 일위대가 조합 37 줄 · 맞춤 씨앗 · 시스템 관리자만) 자리 — 원문 차례에 없음. 권함 = 구분선 아래 도면 양식 뒤 그대로.
|
||||
3. 구조물 옵션 정의를 M01 로 옮기면 일반 · 회사 관리자의 읽기 화면 사라짐. 권함 = 받아들임(정의 = 시스템 관리자 바탕) · 코드 · 서버 길은 M02 폴더에 둔 채 화면 입구만 옮김.
|
||||
4. 대시보드 설계 기본값 줄 — 권함 = 마스터 데이터 묶음(마스터 요소 · 단가산출 로직 · 구조물 옵션 정의 · 별칭 장부) + 마스터 템플릿 묶음(단가산출 · 일위대가 · 구조물 조합 · 도면 양식) + 계산 자리 · 일위대가 불러오기 줄은 안 둠(한시).
|
||||
5. 불러오기 일회성 정도 — (가) 마법사 끝에 올린 파일 지움 (나) 작업 중 보관 + [끝내기] 때 지움 (다) 남기고 목록만 숨김. 권함 = (나).
|
||||
6. 불러온 결과가 들어갈 층 — 지금 개인 고정. 권함 = 마법사 첫 단계에서 고름(쓸 수 있는 층만 · 기본 개인).
|
||||
7. 시스템 별칭 모으기 반영 — 자동 vs 시스템 관리자 승인. 권함 = 승인(익명 · 회사 수 · 사람 수만 보임) · 맞춤 먼저 · B09 내역맞춤은 뒤.
|
||||
8. M02 단가산출 문서 종류 — 옛 단가승격(SP) 되살림 vs 새 종류. 권함 = 새 종류(키 머리 새로 · 「단가승격」 이름은 구조물 조합 로직 줄 구분으로 이미 씀) + 옛 SP 펼침 · 굳힘 코드 재사용.
|
||||
9. 단가산출 칸 층 단추 — 칸마다 따로(사전조합처럼) vs 서고 층 하나 공유. 권함 = 칸마다 따로(지금 꼴 · 코드 재사용).
|
||||
|
||||
## ⑤ 단계 제안
|
||||
|
||||
**먼저** — 좌측 판 구분선 부품(`ui_template_overlay.css` + 부품 모음 견본) · 한 창 · 작음. 나머지 창이 다 씀.
|
||||
|
||||
| 창 | 맡을 파일(경계) | 앞 조건 | 시험 |
|
||||
|---|---|---|---|
|
||||
| A 메뉴 · M01 입구 | `A00_Common/m_settings_nav.ts` · `B01/B01_Dashboard_UI_View_SysDefaults.ts` · `…_CompanyDefaults.ts` · `…_Me.ts` · `M01/M01_MasterData_UI_Page.ts` · `M01/M01_MasterData_UI_Side.ts` | 구분선 · 결정 3 · 4 | `test_b01_settings_cards.py` · `test_197_1_dashboard_option_card.py` · `test_309_2_calc_sites.py` |
|
||||
| B M02 좌측 판 차례 · 이름 | `M02/…_UI_Side.ts` · `…_UI_Page.ts`(☰ 열쇠 한 줄) · `…_Layer.ts`(open=옵션 돌려보냄) · `locale_m2.ts` · `…_UI_Side_Precombo.ts`(제목만) · `…_Hopyo_Side.ts`(제목만) · `…_Labor_Text.ts` | 구분선 · 결정 1 · 2 | `helper_m02_precombo_scope.cjs` · `test_m02_hopyo_screen.py` |
|
||||
| C M02 단가산출 껍데기 | `…_UI_Side_Precombo.ts`(종류 인자) · `…_UI_Page.ts`(칸 층) · `…_Library_List.ts` · `…_UI_Main.ts`(갈래 → 새 파일) · `…_Api_Fetch.ts` · `M02_Template_Layers.py` · `M02_Labor_Ref.py` · `M02_Precombo_Folders.py` · `M02_Labor_Router.py`(폴더 길) | B 끝 · 결정 8 · 9 · 공용 상세 부품(다른 에이전트) | `test_m02_precombo_scope` · labor_ref · labor_tree 계열 |
|
||||
| D 불러오기 일회성 | `…_Hopyo_Side.ts` · `…_Hopyo_Pick.ts` · `…_Labor_Pick.ts:41` · `M02_Labor_Router.py`(hopyo 길) · `M02_Hopyo_Store.py` · `…_Hopyo_Sheet.ts` · `…_Hopyo_Check.ts` | B 끝 · 결정 5 · 6 · 단가산출로 가는 길은 C 뒤 | `test_m02_hopyo_*` · `helper_m02_hopyo_*.cjs` |
|
||||
| E 별칭 모으기 · M01 장부 | 새 서버 파일(모으기 · 길) · `main.py` 한 줄 · M01 새 화면 파일(후보 표) · `M01_MasterData_UI_Side.ts`(A 뒤 칸 하나) · `…_Hopyo_Ledger.ts`(재사용 · 고침 최소) | A 끝 · 결정 7 | `test_m02_hopyo_ledger.py` + 새 모으기 시험(임시 storage) |
|
||||
|
||||
- 겹침 = C · D 가 `M02_Labor_Router.py` 같이 만짐(C = 폴더 길 · D = hopyo 길 · 줄 자리 다름) → C 먼저 또는 한 창이 차례로 · `UI_Page.ts` 는 B(한 줄) 뒤 C.
|
||||
- 700줄 넘을 파일: `…_UI_Main.ts` 665(C 갈래 넣으면 넘음 → 새 파일) · `…_Labor_Detail.ts` 700 · `…_TreePanel.ts` 700(만지지 않게) · `…_Labor_Rows.ts` 671 · `…_Hopyo_Check.ts` 654(D 때 주의) · `M01/…_UI_LogicLab.ts` 624 · `M01/…_UI_Side.ts` 501(+칸 둘 · 넉넉).
|
||||
@@ -0,0 +1,103 @@
|
||||
# 요구서 — 내역 12 · M01 단가산출 로직 보기 개선 · M02 단가산출 신설
|
||||
|
||||
원문 = `사용자요구_내역서.md` 내역 12 · 13 · 근거 = 같은 폴더 `_분석_내역12-A_M01상세화면.md` · `-B_로직원론.md` · `-C_M02단가산출_자료모델.md` · `-D_M02화면_메뉴_불러오기.md` · 앞선 개편 = `요구서_내역서_개편.md`(원칙 · 고친 칸 덮개 · 고정 줄) · `docs/raw/plans/2026-10-31_plan_701-708.md`.
|
||||
|
||||
## 1. 한 줄 방향
|
||||
|
||||
- M01 단가산출 로직 = 품셈 원문 그대로의 **불변 바탕** · 화면은 한 번에 한 보기(기본 = 단가산출 상세) · 실무자 눈의 인력 · 재료 · 경비 보기 더함.
|
||||
- M02 단가산출 = **M01 로직에 연결 + 바꾼 것만** 저장한 내 단가산출 · 일위대가 앞 단계 · 층(마스터 · 회사 · 개인) + 폴더.
|
||||
- 프로젝트(B08 · B09)로 갈 때 = 연결을 풀어 **복사** · 그 안에서 고치고 새 판 업데이트.
|
||||
|
||||
## 2. 원칙
|
||||
|
||||
1. M01 로직 정본 = 시스템 관리자가 원문 개정 때만 고침 · 그 밖 화면의 「바꾸기」 = 시험 입력(정본 안 바뀜).
|
||||
2. M02 단가산출 · 일위대가 = 연결 + 덮개(바꾼 칸만) · M01 이 개정되면 다음 셈에 따라감 · 덮개 자리를 잃으면 지우지 않고 알림.
|
||||
3. 프로젝트 사본 = 풀어 굳힌 복사 · 원본 층은 안 건드림 · 고친 칸 덮개 · [업데이트] 때 덮개 지킴(702 · 703-3 그대로).
|
||||
4. 일위대가 = 기준단위 1 당 단가 · 수량은 구조물 조합 · 프로젝트에서만.
|
||||
5. 인력 · 재료 · 경비 구분 = 정본에 칸을 더하지 않고 셈 때 파생(비목 + 기계경비 로직 여부 · 99.5 % 자동).
|
||||
6. 보이는 꼴 = 실무자가 보던 꼴(EST 산근 · 인력 · 재료 · 경비) · 같은 상세 부품을 M01 · M02 단가산출 · 일위대가 모달이 같이 씀.
|
||||
7. 계산 자리 = CLAUDE.md 5장 · M01 셈 = 서버 단독(③) · M02 일위대가 셈 짝(파이썬 · TS)에 닿으면 거울 시험 함께.
|
||||
|
||||
## 3. 요구 · 지금 · 고칠 것
|
||||
|
||||
| # | 요구 | 지금 | 고칠 것 | PLAN |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | M01 표 세로 맞춤 · 아래 쪽 단추 · 짧으면 딸려 올라감 | `calc(100dvh - 300px)` + 고정 50 · 30 줄 · 표 안 스크롤 · 쪽 단추 표 위(M01 전용) | 부품 상자 쪽 단추 · 화면 높이로 줄 수 · 표 아래 · M02 목록 둘도 | 709 |
|
||||
| 2 | 상세 보기 고르기 · 기본 단가산출 상세 | 네 덩이 늘 다 그림 | [신규 로직] 왼쪽 세로 나눔선 + 고르기(단가산출 상세 · 인력·재료·경비 · 시험 계산 · 텍스트 수식) · 기본정보 맨 위 접힘 한 줄 | 710 |
|
||||
| 3 | 열 수량 ↔ 단위 · 수량 = 선정 값 · 로직 열(단가 왼쪽) | 수량 열에 식 글 | 이름 · 수량 · 단위 · 로직 · 단가 · 금액 · 계산 전 수량 「—」 | 710 |
|
||||
| 4 | 단가 2 행 → 1 행 | CSS 흠(`td` 에 `display:block`) | 한 곳 고침 | 710 |
|
||||
| 5 | 시험 계산 옵션 · 자재 구분 · 4 열 · 항목 누르면 모달 | [품목 고르기] 단추 | 밑줄 소제목 둘 · 4 열 · 단추 걷음 | 711 |
|
||||
| 6 | 재료 모달 하나(상세 쪽 꼴) · 위 물가 넷 가로 · 아래 값 열 뺌 | 꼴 다른 모달 둘 | 상세 쪽 모달 + 찾기 · 고르기 · 후보 `/materials` · 기계 고르기는 그대로 | 711 |
|
||||
| 7 | EST 식 인력 · 재료 · 경비 보기 · 그룹마다 고를 것 · 변수 · 바꾸면 값 | 없음 · B09 근거 = 서버 단독 · 열 꼴 · 바꾸기 없음 | M01 `/text` 비목 묶음 + 서버 「줄마다 쓰는 입력」 · 산출근거 글 꼴 + 그룹 머리 변수 칸 · 기준단위 · 환산 근거 | 714 |
|
||||
| 8 | 텍스트 수식 값 · 변수 누르면 고침 | 못 고침 | 누름 → 그 입력 고침(M01 = 시험 입력 · M02 = 덮개) | 714 |
|
||||
| 9 | 단위 변환 | 환산 다섯 자리 흩어짐 · ㎥↔ton · 개수 단위 없음 | 단위 모듈 한 벌(1 단계 별칭 · 개수 · 배 · 2 단계 단위중량) | 712 |
|
||||
| 10 | 원문 기준단위 활용 | 표 `기준` 칸 글만(271 표기 · 빈 41 %) · 10 · 100 배 처리 섞임 | `기준배` · `기준단위` 파생 · 배 대조 · 화면에 환산 근거 | 712 · 714 |
|
||||
| 11 | 목록 원론 — 갈라짐 · 참조 이음 · 인재경 구분 | 평평한 1,469 줄 · 묶음 · 인재경 칸 없음 · 기계경비 판별 세 자리 | 정본 그대로 · 목록 묶음 접기 · 작업량 숨김 · 연결 수 · 인재경 파생 · 판별 한 곳 | 712 · 713 |
|
||||
| 12 | 불변 · 시스템 관리자 개정 | `/logic/edit` 403 이나 `/save` · 흐름 저장은 정본 고침 · 판 없음 | 정본 고침 = 「원문 개정 반영」 확인 + 판 · 줄 `개정` 칸 · 옛 줄 사본 | 713 |
|
||||
| 13 | M02 단가산출 칸 · 층 · 폴더 | 없음(사전조합 로직 줄 10 = 이름 없는 단가산출) | 새 서고 종류 `sangeun`(키 `SK-`) · 사전조합 길(참조 · 층 · 복사 · 지우기 막음 · 굳힘 · 폴더) | 715 · 717 |
|
||||
| 14 | 연결 정보 저장 · 복사 아님 | 사전조합 = M01 키 + 넣을 값만 | SK = 바탕(M01 키 · SK) + 넣을 값 · 고름 · 덮개 · 더한줄 · 뺀줄 · 셈 = M01 엔진 한 벌 | 715 |
|
||||
| 15 | 폴더 만들기 · 지우기(사전조합도) | 사전조합 폴더 있음 · 빈 폴더만 지움 | 안에 든 것째 + 확인 · 쓰는 곳 있으면 막음 | 716 |
|
||||
| 16 | M02 칸 차례 · 이름 | 구조물 조합 › 사전조합 › 실무자료 › 옵션 정의 › 도면 › 실무문서 | 단가산출 › 일위대가 › 구조물 조합 ─ 일위대가 불러오기 › 도면 양식 › 실무문서 | 716 |
|
||||
| 17 | 구조물 옵션 정의 → M01 단가산출 로직 아래(구분선) | M02 칸 | 화면 입구만 옮김 · 서버 길 · import 그대로 | 716 |
|
||||
| 18 | 메뉴 = M01 · M02 둘 · 대시보드 = 그 칸을 고른 상태로 | ☰ · 대시보드 한 표 · M02 셋 | 표 둘로 · 대시보드 줄 = `?open=` · M01 `open` 인자 | 716 |
|
||||
| 19 | 일위대가 불러오기 = 한시 | 올린 파일 층에 계속 · 결과 개인 사전조합만 | 마법사 · 작업 중 보관 · [끝내기] 때 지움 · 층 고름 · 결과 = 단가산출 · 일위대가 | 718 |
|
||||
| 20 | 별칭 장부 시스템 모음 · M01 관리 | 층 `맞춤.json` · 마스터 0 줄 | 모으기(익명) · M01 장부 화면 · 승인 → 마스터 장부 | 718 |
|
||||
| 21 | M02 단가산출 상세 = 로직 상세와 같게 | 상세가 M01 관리자 길에 묶임 | 상세 부품 공용(API 길 주입 · `logic-lib` 읽기 넓힘) | 717 |
|
||||
| 22 | 가져올 것 = M01 · M02 단가산출 · M01 요소 · 일위대가(인재경 구분) | `로직(키)` 부르기뿐 | 참조 갈래 · 순환 막음 · 단가산출 속 일위대가 줄 = 프로젝트로 갈 때 펼침 | 715 |
|
||||
| 23 | 일위대가 상세 = 호표 한 장 · 단가산출 모달 · 고침 | 없음 | 모달(인재경 보기) · 고침 = 그 일위대가 줄 덮개 + [단가산출로 저장] | 717 |
|
||||
| 24 | 프로젝트 = 복사 · 안에서 고침 · 업데이트 | 사본이 M01 줄 굳힘 · SK 모름 · M01 직접 읽는 넷 자리 | SK 풀어 굳힘 · 넷 자리 · [업데이트] 덮개 지킴 | 719 |
|
||||
|
||||
## 4. 정함(브레인) — 사용자가 바꿀 수 있음
|
||||
|
||||
1. 「일위대가 사전조합」 새 이름 = 「일위대가」 · 「일위대가 실무자료」 새 이름 = 「일위대가 불러오기」 · 「실무문서」 = 도면 양식 뒤 그대로.
|
||||
2. 표 줄 수 = 화면 높이로 셈 · 표 안 스크롤 없음 · 소요량 · 계수 표 한 장은 쪽 없이 화면 안 스크롤.
|
||||
3. 보기 = 넷 · 기본정보는 늘 맨 위 접힘 · 보기 기억 = 화면 안에서만(새로 들어오면 단가산출 상세).
|
||||
4. 단가산출 상세 = 보기 전용 · 바꾸기는 인력·재료·경비 · 시험 계산 · 텍스트 수식에서.
|
||||
5. EST 식 줄 꼴 = 산출근거 글(「석공 : 단가 × 품 = 금액」) + 그룹 머리 변수 칸 · 변수 가르기 = 서버가 줄마다 「쓰는 입력」 줌.
|
||||
6. 기계경비 = 경비(장비) 한 줄 · 금액 칸만 노 · 재 · 경 · 복합 하위 로직 = 한 줄 + 펼침.
|
||||
7. 갈라진 로직 = 정본 그대로 · 목록 묶음 접기 · 작업량 로직 27 = 부르는 로직 밑으로 접음 · 비고 「별도」 = 계산 밖 「관련 로직」 링크.
|
||||
8. 기준단위 = 원문 배 그대로 · 표 `기준` → 「배 · 단위」 두 칸 · 화면에 환산 근거.
|
||||
9. 단위 변환 = 1 단계 별칭 · 개수 묶음 · 배 읽기 한 벌 → 2 단계 부피 ↔ 무게(단위중량 표 · 설계자가 고름) · 밀도 · ㎾h 는 경고만.
|
||||
10. 정본 개정 = 파일 머리 판 꼴 통일 + 줄 `개정` 칸 + 저장 때 옛 줄 사본 · `/save` 정본 줄 = 「원문 개정 반영」 확인 · M02 는 판 고정 없이 연결.
|
||||
11. 모달 후보 = `/materials` · 위 가로 칸 = 값 있는 칸만 · 시험 계산이 쓴 값 굵게 · 기계 고르기(PickTable) 그대로.
|
||||
12. M02 단가산출 = 새 종류 `sangeun` · 키 `SK-######` · 옛 단가승격(SP) 펼침 · 굳힘 코드 재사용 · 층 단추 칸마다 따로.
|
||||
13. 줄 품 덮개 = 숫자 고정(702 꼴) · 옵션을 열어 둔 단가산출은 배율만 · 바탕 없는 단가산출 허용.
|
||||
14. 단가산출 속 일위대가 줄 = 받음 · 프로젝트로 갈 때 일위대가 블록으로 펼침(B09 셈 차례 안 바꿈).
|
||||
15. 프로젝트 [모두 품셈 값으로] = M02 단가산출 값으로 · M01 원값은 곁에 보이기만.
|
||||
16. 일위대가 모달 고침 = 그 일위대가 줄 덮개 + [단가산출로 저장] · SK 원본 고침은 권한 있을 때만.
|
||||
17. M01 개정 때 덮개 = 지우지 않음 · 「M01 개정 — 확인」 배지 · 원값 비교.
|
||||
18. 폴더 지우기 = 안에 든 것째 + 확인 창 · 쓰는 곳 있으면 막음(409 · 그 이름) · 여럿 고름 · 복사 붙여넣기는 뒤.
|
||||
19. 노임 손 단가 덮개 = 받되 「손 단가」 꼬리표 · 기존 사전조합 로직 줄 10 = 자동 옮김 없음 · [단가산출로 저장]으로 사용자가 올림.
|
||||
20. 옵션 정의 M01 이동 = 화면 입구만 · 일반 · 회사 관리자 읽기 화면 사라짐 받아들임.
|
||||
21. 대시보드 설계 기본값 = 마스터 데이터 묶음(마스터 요소 · 단가산출 로직 · 구조물 옵션 정의 · 별칭 장부) + 마스터 템플릿 묶음(단가산출 · 일위대가 · 구조물 조합 · 도면 양식) + 계산 자리 · 불러오기 줄 없음.
|
||||
22. 불러오기 = 작업 중 보관 · [끝내기] 때 지움 · 결과 층 = 첫 단계에서 고름(기본 개인).
|
||||
23. 별칭 모으기 = 시스템 관리자 승인 · 익명(회사 수 · 사람 수만) · 일위대가 맞춤 먼저 · B09 내역 맞춤 뒤.
|
||||
|
||||
## 5. 시스템 관리자 확인 거리
|
||||
|
||||
- 배 어긋남 6 건(GC000482~485 · GF000319 · GF000081) — 원문 대조.
|
||||
- 단위중량 기본값(2 단계) — 사용자 협의로 정함.
|
||||
|
||||
## 6. 단계 · 창 (PLAN 709~719)
|
||||
|
||||
| 절 | 무엇 | 창 · 차례 |
|
||||
| --- | --- | --- |
|
||||
| 709 | 구분선 · 쪽 단추 부품 · M01 · M02 표 높이 | sub1 · 1 물결 |
|
||||
| 710 · 711 | M01 상세 열 · 단가 1 행 · 보기 고르기 · 시험 계산 · 모달 | sub2 · 1 물결 |
|
||||
| 712 | 엔진 바닥 — 인재경 파생 · 단위 모듈 · 기준배 | sub3(712-1 · 712-2) · sub4(712-3) · 1 물결 |
|
||||
| 713 | 로직 목록 묶음 · 개정 장치 | sub4 · 709-2 뒤 |
|
||||
| 714 | EST 식 · 텍스트 수식 | sub3(714-1) → sub2(714-2 · 714-3) |
|
||||
| 715 | M02 단가산출 서버 · 참조 · 일위대가 쪽 | sub5 · 712-1 뒤 셈 |
|
||||
| 716 | M02 칸 차례 · 이름 · 옵션 정의 입구 · 메뉴 · 폴더 | sub6 · 709-1 뒤 차례 |
|
||||
| 717 | 상세 부품 공용 · M02 단가산출 칸 · 일위대가 모달 | 2 물결 · 710 · 714 · 715 뒤 |
|
||||
| 718 | 불러오기 한시 · 별칭 모으기 · M01 장부 | sub7(718-1) · sub8(718-2) |
|
||||
| 719 | 프로젝트로 복사 · 업데이트 | 2 물결 · 715 뒤 |
|
||||
|
||||
- 같은 파일 차례 — `Logic_Style.css` · `LogicLab_Detail.ts` = sub2 한 창 · `UI_Logic_List.ts` = sub1 → sub4 · `master_formula.py` = sub3 → sub5 · `M01_MasterData_UI_Side.ts` = sub6 → sub8 · `M02_Labor_Router.py` = sub7(hopyo 길) → 716-4(폴더 길) · `Hopyo_Side.ts` 제목 줄 = sub6.
|
||||
- 700 줄 근처(늘리지 않음 · 새 줄은 새 파일) — `M01_MasterData_UI_LogicLab.ts` 624 · `M02_MasterTemplete_UI_Main.ts` 665 · `M02_MasterTemplete_Labor_Detail.ts` 700 · `M02_MasterTemplete_TreePanel.ts` 700 · `M01_MasterData_Store.py` 695 · `master_formula.py` 686 · `M02_Labor_Doc.py` 684 · `M02_Table_Fill.py` 698 · `M02_MasterTemplete_Hopyo_Check.ts` 654.
|
||||
|
||||
## 7. 검증 기준 (모든 절 공통)
|
||||
|
||||
- 고친 대상 시험 · `npm run typecheck` · 계산 짝은 거울 시험 · M01 셈 값 전후 같음(정본 1,469 로직 표본).
|
||||
- ORCA 사용자 길(자기 포트) · 예외: 빈 값 · 같은 이름 · 저장 안 하고 옮김 · 권한 없음(일반 · 회사 관리자) · 밝음 · 어두움 · 화면 높이 1080 · 768 · 만든 것 되돌림.
|
||||
- M01 정본 · 공유 storage(M02 마스터 · 회사 층)에 쓰지 않음 — 쓰는 시험은 임시 storage · 화면에선 개인 층 · 자기 검증 프로젝트만.
|
||||
Reference in New Issue
Block a user