From b7cafc6221106b5fad0a5cf97b5acc2896349aea Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 10:10:08 +0900 Subject: [PATCH 1/5] =?UTF-8?q?chore(sync):=20=EA=B3=B5=EC=9C=A0=20docs=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=8B=B4=EC=9D=8C=20=E2=80=94=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=BB=A4=EB=B0=8B=EA=B3=BC=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=2017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- docs/raw/M01_쉬운단가/로직판_A_설계초안.md | 205 +++++++++++++ docs/raw/M01_쉬운단가/로직판_A_정함.md | 40 +++ docs/raw/M01_쉬운단가/로직판_관계제어_점검.md | 63 ++++ docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md | 161 ++++++++++ .../로직판_조사_A_견적프로그램.md | 100 +++++++ .../M01_쉬운단가/로직판_조사_B_노코드도구.md | 95 ++++++ docs/raw/M01_쉬운단가/설계.md | 98 ++++++ .../M01_쉬운단가/쉬운단가_검토_A_데이터.md | 251 ++++++++++++++++ docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md | 141 +++++++++ docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md | 282 ++++++++++++++++++ .../M01_쉬운단가/쉬운단가_검토_D_지난시도.md | 96 ++++++ docs/raw/M01_쉬운단가/시트로직_정함.md | 38 +++ docs/raw/M01_쉬운단가/시험판_단추_점검.md | 110 +++++++ docs/raw/M01_쉬운단가/원가다이어그램_정함.md | 40 +++ docs/raw/M01_쉬운단가/흐름도_적용_정함.md | 37 +++ docs/raw/M01_쉬운단가/흐름도_적용_조사.md | 121 ++++++++ docs/raw/M01_쉬운단가/흐름도_정함.md | 38 +++ 17 files changed, 1916 insertions(+) create mode 100644 docs/raw/M01_쉬운단가/로직판_A_설계초안.md create mode 100644 docs/raw/M01_쉬운단가/로직판_A_정함.md create mode 100644 docs/raw/M01_쉬운단가/로직판_관계제어_점검.md create mode 100644 docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md create mode 100644 docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md create mode 100644 docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md create mode 100644 docs/raw/M01_쉬운단가/설계.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md create mode 100644 docs/raw/M01_쉬운단가/시트로직_정함.md create mode 100644 docs/raw/M01_쉬운단가/시험판_단추_점검.md create mode 100644 docs/raw/M01_쉬운단가/원가다이어그램_정함.md create mode 100644 docs/raw/M01_쉬운단가/흐름도_적용_정함.md create mode 100644 docs/raw/M01_쉬운단가/흐름도_적용_조사.md create mode 100644 docs/raw/M01_쉬운단가/흐름도_정함.md diff --git a/docs/raw/M01_쉬운단가/로직판_A_설계초안.md b/docs/raw/M01_쉬운단가/로직판_A_설계초안.md new file mode 100644 index 000000000..3b105749a --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_A_설계초안.md @@ -0,0 +1,205 @@ +# 로직 만들기 판 시험판 A(세 칸 판) — 조사 · 설계 초안 (35-2 · sub7) + +조사 · 초안만 · 코드 · git · docs 안 건드림. 셈은 `resources/master_data/로직_*.json` 1,469개 · 표 3,033개(시험 해석기 = 저장소 밖 scratch `lb/survey.ts` · 엔진 `master_formula._Parser` 와 같은 문법). + +## 0. 한눈에 + +| 물음 | 답 | +| --- | --- | +| ① 블록으로 읽고 다시 쓰기 | **됨** — 6개 모두 다 읽힘 · 다시 쓰기 같음. 마스터 **1,396 / 1,469(95%)** 가 ①~⑤ 블록으로 다 읽힘 · 식 하나하나가 문장 틀(값 · 곱나눔 · 할증 · 조건 목록 · 최소최대 · 올림)로 읽히는 것 1,299(88%) | +| ② 표 칸 고치면 시험 계산에 바로 | **지금 안 됨** — `/calc` 에 표 덮어쓰기 길 없음 · 현장(자체) 표 키 없음(QF · QC · CF · CC 뿐) → 서버 두 가지 필요(⬜) | +| ③ 단계 안내로 새로 만들기 | **거의 됨** — `/sections` · `/tables?section=` · `/table` · `/table/options` · `/logic/new` 다 있음 · 「로직에 안 이어진 표」 거름 칸만 없음(절 단위 `logics` 수로 대신 가능) | +| ④ 해당 없음/중복 · 빈틈 · 기대값 시험표 | 해당 없음/중복 = `/calc` 줄 까닭 글로 지금 됨(글 해석) · 빈틈 = 길 없음(서버 하나 ⬜) · 기대값 시험표 = `/calc` 여러 번으로 지금 됨 · 저장 자리는 정할 것 | +| ⑤ 파일 나누기 | 7절 — 6 파일 + 서버 3 길(⬜) · 창 다섯 | + +## 1. 블록 구조 — 로직 한 벌을 ①~⑤ 로 + +### 1-1 블록 모양 + +| 블록 | 지금 로직 칸 | 블록이 쥘 것 | +| --- | --- | --- | +| ① 입력값 | `입력` | 이름 · 단위 · 선택 목록(`고르기`) · 범위 · 설명 · 출처 — 선택 목록은 표 조건 칸에서 저절로(`/table/options`) | +| ② 표 조회 | 식 속 `찾기(표, 조건=값 …).결과칸` | 표 키 · 조건 칸마다 **입력값 / 고정값 / 계산값** · 결과 칸 · 쓰인 자리(중간 · 수량 · 비율 · 결과) | +| ③ 계산 | `중간` + 수량 · 비율 · 결과 식의 나머지 | 이름 붙은 값 · 틀: 값 · 곱나눔(사슬) · 할증(`× (1 + p/100)`) · 더하기 · 조건 목록(만약 사슬) · 최소/최대 · 올림/버림/반올림 | +| ④ 항목 연결 | `호표` · `덧줄` | 종류(노무 · 재료 · 장비 · 일위대가 · 비율) · 요소 · 수량 출처(② · ③ · 숫자) · 비목 · 비율은 바탕(비목 · 사람 줄 노임 합) × 율 | +| ⑤ 결과값 | `결과단위` · `결과` · `끝수` | 금액(원/…) 또는 값(㎥/시간 — `결과` 식) · 다른 로직이 부르는 자리(`로직(키, 넘길 값)`) | + +다시 쓰기 = **글 갈아끼우기** — 고친 조각의 자리만 새 글로 바꾸고 나머지 글자는 그대로(Cond `writeRead` · Table `replaceFinds` 와 같은 길). 안 고친 로직은 바이트까지 같음. + +### 1-2 대상 6개 + +| 로직 | ① | ② | ③ | ④ | ⑤ | 읽기 | +| --- | --- | --- | --- | --- | --- | --- | +| GF000208 암거이음받침 채움재 | 없음 | 없음 | 없음 | 재료 1(검색어 JOINT FILLER · 1㎡) | 원/㎡ | 다 읽힘 | +| GF000219 돌쌓기 메쌓기(인력) | 뒷길이 · 돌 · 쌓기(선택) · 높이 · 초과증가율(범위 80~100) | QF000421(조건 셋 → 석공 · 보통인부) · QF000422(높이 범위 → 증가율) | 증가율 = 조건 목록(높이 ≤3 → 0 · ≤7.5 → 표 · 그 외 → 초과증가율) · 수량 = 표 × 할증 | 노무 2 | 원/㎡ | 다 읽힘 | +| GF000025 떼붙임(재배잔디) | 품(숫자) · 비탈구배(선택) | QF000099(구분 고정 → 값) | 품 × (1 + 조건 목록(해당 없음 → 0 · 그 외 → 표) / 100) | 노무 1 | 원/100㎡ | 다 읽힘 | +| GF000249 다짐(플레이트콤펙터 1.5ton) | 지역(선택) | 없음 | 작업량 = 다른 로직 결과값(GF000114) · 수량 = 1 ÷ 작업량 | 장비 1(기계경비 GC000272 · 넘길 값 기계 고정 · 지역 입력값) | 원/㎥ | 다 읽힘 | +| GF000114 다짐 시간당 작업량 | 없음 | QF000289 여섯 번(기호 고정 A · N · H · f · E · P → 적용) | 결과 = 반올림(A×N×H×f×E÷P, 3) | 없음 | 값 ㎥/시간 | 다 읽힘 | +| GF000133 덤프트럭 시간당 작업량 | qt · f · E · Cm(숫자) | 없음 | 결과 = 반올림(60×qt×f×E÷Cm, 3) | 없음 | 값 ㎥/시간 | 다 읽힘 | +| GC000051 보행자 안전통로 | 없음 | QC000115(구분 고정 → 수량) · QC000116(구분 고정 → 값) | 비계공 = 표 | 노무 1 · 비율 1(사람 줄 노임 × 표 값 %) | 원/m | 다 읽힘 | + +- 6개 모두 왕복 같음 · Model(EasyCalc) 은 GC000051 의 비율을 「잠금」으로 봄(율이 숫자 아님) — 블록에서는 율 = ② 표 조회로 읽힘. +- 다짐은 두 로직(작업량 GF000114 → 금액 GF000249) — ⑤ 결과값 넘기기의 견본. + +### 1-3 마스터 전체 + +| 셈 | 수 | +| --- | --- | +| 식 자리(중간 · 수량 · 장비 요소 · 비율 · 결과) | 10,179 · 블록으로 읽힘 10,037(98.6%) | +| 로직 — 모든 식이 블록으로 읽힘 | **1,396 / 1,469(95.0%)** | +| 로직 — 모든 식이 문장 틀(칸 안 한 겹 묶음까지) | 1,299(88.4%) · 나머지 97개는 「여러 단계」 식이 섞임(단계 목록으로 펼쳐 보임 — 선택은 되나 김) | +| 다시 쓰기(해석 → 글) 같음 | 1,464(99.7%) · 다른 5개는 따옴표 · 빈칸 꼴 차이(글 갈아끼우기면 영향 없음) | +| 못 읽는 까닭 | 표 조건 칸에 계산(`최소(시공높이m, 7.2)` · `만약(…)` 등) 68 식 · 그리고/또는 69 식 · 로직 넘길 값에 계산 5 식 | +| 식 틀 갈래(식 수) | 값 5,362 · 곱나눔 2,655 · 묶음 사슬 1,231 · 조건 목록 515 · 여러 단계 168 · 할증 108 · 더하기 91 · 올림 43 · 최소최대 6 | +| 항목 종류(호표 줄) | 인력 3,462 · 로직(장비 · 일위대가) 1,075 · 재료 723 | + +### 1-4 EasyCalc 해석기 다시 쓰기 + +| 부품 | 쓰임 | 그대로? | +| --- | --- | --- | +| Model `toDoc · toRow` | ④ 항목 카드 · ⑤ 금액 · 왕복 100%(1,469) | 그대로 — 비율 율이 표 조회인 꼴만 블록 쪽에서 덧읽음 | +| Table `readFinds · writeFind · replaceFinds · literalValue` | ② 표 조회 읽기 · 조건 값 바꾸기 | 그대로 | +| Cond `readCond · writeRead · writeCond` | ③ 조건 목록 · 최소최대 · 올림 | 그대로(식 속 덩어리까지 · 줄 자체 조건 93%) | +| Api `calcLater · copyEasy · editEasy · newEasy · usesOf · listMachines · machineCall` | 예시값 계산 · 저장 · 장비 잇기 | 그대로 | +| Cards · Sheet | 오른쪽 결과 칸 | 그대로(읽기 · 고치기 둘 다) | +| 없는 것 | 사칙 사슬(곱나눔 · 할증 · 더하기 · 단계) 읽기 · 중간 값 그래프(어느 값이 어느 값을 씀) · 결과 식 로직 | LogicBuilder `Blocks` 가 새로 — 문법은 Cond 해석기와 같은 엔진 문법 | + +## 2. 표 칸 고치기 + +- **`/calc` 에 표 덮어쓰기 길 없음** — 몸 = `key · inputs · row · file · 고름` · 로직 줄만 메모리에서 바꿔 셈(`Store._swap`). 표는 언제나 파일 것. +- **현장(자체) 표 키 없음** — 표 ID 는 QF · QC(소요량) · CF · CC(계수)뿐 · `소요량_자체.json` 같은 자리 없음. M01 표 편집(칸 눌러 고침)은 `/save` 로 **표준 파일을 바로 고침** — 시험판은 부르지 않음. +- 서버가 가볍게 받을 수 있는 까닭 — `cm.load` 가 부를 때마다 파일을 새로 읽음(캐시 없음) → 메모리 사본에 표를 바꿔 끼워도 다른 요청에 안 번짐. + +최소로 필요한 것(⬜ 서버 · 폴더 밖): + +1. **`CalcBody.tables`** — `[{키, …표 통째}]` · `calc` · `text` 가 `_swap` 처럼 메모리 사본의 그 키 표를 바꿈(약 15줄) → 왼쪽 칸에서 고친 숫자가 저장 전 금액에 바로. +2. **현장 표** — 표 ID `QX`(소요량 자체) 하나 · 파일 `소요량_자체.json` · `master_keys.TABLES[("소요량", "자체")] = "QX"` · 길 `/table/copy · /table/edit · /table/delete`(현장 파일만 · `logic_*` 와 같은 틀 · 409 · 422) · 검사(`check_master` 틀 · 본문 대조에서 「자체」 표는 본문 대조 뺌). +3. 저장 차례 — 표준 로직을 연 채 표 칸을 고치면: 로직 복사 편집(GX) → 그 표 사본(QX) → GX 의 `찾기(QF…)` 머리를 `찾기(QX…)` 로 바꿈 → 한 번에 저장. **표준 표 · 로직은 안 고침**. + +정할 것 — 현장 표 사본을 로직마다 따로 둘지(간단 · 표가 늘어남) · 같은 표를 여러 현장 로직이 함께 쓸지(개정 한 번에 반영 · 사용처 관리 필요). + +## 3. 새로 만들기 — 단계 안내 6단계와 서버 길 + +| 단계 | 쓰는 길 | 있나 | +| --- | --- | --- | +| 1 절 찾기 | `GET /sections?book=산림품셈|건설품셈&q=` — 절마다 `tables` · `logics` 수 | 있음 · `logics = 0` 이고 `tables > 0` 인 절 = 새로 만들 자리 | +| 1 그 절의 표 | `GET /tables?group=소요량|계수§ion=13-4-1` | 있음 · 단 목록 머리에 `용도`(이어진 로직) 없음 — 「안 이어진 표」 거름은 절 수로 대신 · 꼭 필요하면 `_TABLE_HEADS` 에 `용도` 한 칸(⬜) | +| 2 칸 역할 | `GET /table`(통째) · `/table/options`(조건 칸 값) | 있음 — 조건 · 값칸 · 범위규칙 · 주 | +| 3 결과 단위 | 표 `기준`(「1㎡」) | 있음 | +| 4 계산 | 화면(Cond 틀 · 할증 · 곱나눔) | 서버 길 필요 없음 | +| 5 항목 연결 | `GET /pick?kind=job&q=석공` · `/materials` · Api `listMachines · machineCall` · `/logics` | 있음 — 값 칸 이름 = 직종 이름이면 저절로 | +| 6 이름 · 저장 | `POST /logic/new`(GX · 원문번호 · 출처 「산림품셈 13-4-1」 꼴 허용) · 저장 전 `/calc`(`key ""` + `row`) | 있음 | + +- 표가 아직 없는 절(엑셀 붙여넣기)은 2절 현장 표 길(⬜)이 있어야 저장됨 — 시험판 1차는 「표가 있는 절」만. +- 안 이어진 표 1,010개(용도.로직키 빈 것 · 제안서 1,018 과 8 차이 — 그 사이 이어짐). + +## 4. 조사로 더할 것 셋 + +| 것 | 지금 API | 판정 | +| --- | --- | --- | +| 표 조회 해당 없음 / 중복 | `/calc` 줄이 비고 `까닭` 「표 QF…에 뒷길이 25 · 돌 견치돌 인 줄이 없음」 / 「… 인 줄이 2개」(엔진 `find` → `NoRow`) | **지금 됨** — 글로 갈라 읽음(약함) · 단단히 하려면 까닭에 `종류: 없음|중복` 칸(⬜ 작음) | +| 빈틈 검사(입력값 조합 중 표에 없는 것) | 길 없음 · `/calc` 를 조합마다 부르면 됨(메쌓기 7×4×2 = 56번 · 빈틈 16) — 느림 | **서버 길 하나(⬜)** `/table/gaps?key=` — `master_auto._uses`(어느 입력이 어느 조건으로 가나) + `mf.find` 로 조합을 돌려 「없음 · 중복」 목록 · 판정이 엔진과 같아야 해서 화면 짝 구현(범위규칙 네 가지)보다 서버 단독이 맞음 | +| 기대값 시험표 | `/calc` 를 줄마다(입력값 → `lines[i].수량` · 결과값) 부르면 됨 | **지금 됨**(계산) · 저장 자리 정할 것 — 현장 로직 줄의 새 칸(`시험표` · `check_master` 가 로직의 모르는 칸을 막지는 않음 · `_clean` 이 칸 차례 밖 칸을 뒤에 붙여 둠) 또는 따로 파일 · 시험판 1차는 저장 없이 화면에만 | + +## 5. 표준 · 현장 규칙 (화면 한 줄) + +- 표준(품셈 원문 · 로직 GF · GC · 표 QF · QC · CF · CC) = 읽기 · 예시값 계산 · 복사 편집만. +- 현장(로직 GX · 표 QX⬜) = 고치기 · 지우기 · `로직_자체.json`(+ `소요량_자체.json`⬜) 만 씀. +- 「품셈이 개정돼도 현장 일위대가는 안 바뀜」 — 저장 화면 머리에 한 줄. + +## 6. 화면 세 칸과 부품 + +``` +┌ 원문(Source) ─────────┐┌ 산출근거(Steps) ───────────────┐┌ 결과(Result) ──────┐ +│ 표 머리 역할 칩 ││ ① 입력값 선택 목록 칩 ││ EasyCalc Cards │ +│ 조건 · 고정 · 결과 · 주 ││ ② 표 조회 조건 칸 ← 입력값/고정 ││ (읽기 · 고치기) │ +│ 걸린 줄 노랑 ││ · 해당 없음/중복 표시 ││ 큰 합계 · 일위대가표 │ +│ 칸 눌러 고침(사본만) ││ ③ 계산 Cond 문장 · 할증 · 곱나눔 ││ 예시값 띠 │ +│ 빈틈 · 시험표 단추 ││ ④ 항목 연결 노무 · 재료 · 장비 … ││ 기대값 시험표 │ +│ ││ ⑤ 결과값 금액 / 값 · 넘기기 ││ │ +└─────────────────────────┘└────────────────────────────────┘└────────────────────┘ +처음 만들 때 = 가운데 칸이 단계 안내(물음 하나씩) · 답할 때마다 한 줄씩 채워짐 +``` + +## 7. 파일 나누기 초안 (`M01_MasterData/LogicBuilder/` · 파일마다 700줄 안 · 글 [한, 영] 짝은 파일 머리) + +| 파일 | 하는 일 | DOM | 맡을 창(안) | +| --- | --- | --- | --- | +| `M01_LB_Blocks.ts` | 로직 줄 ↔ 블록(①~⑤) 읽기 · 글 갈아끼우기 쓰기 · 사칙 사슬 · 중간 값 그래프 · 결과 식 — EasyCalc Model · Table · Cond 해석기를 가져다 씀 | 없음 | A(Model 쓴 창) | +| `M01_LB_Source.ts` + css | 왼쪽 원문 — 표(`/table`) · 칸 역할 칩 · 주 · 걸린 줄(`/text` 표 조각 `참조.줄`) · 칸 고치기(메모리 사본) · 해당 없음/중복/빈틈 표시 | 있음 | B(Table 쓴 창) | +| `M01_LB_Steps.ts` + css | 가운데 산출근거 ①~⑤ 카드 — 모두 선택 · Cond 문장 · 할증 · 곱나눔 · 항목 연결(Pick 다시 씀) | 있음 | C(Cond · Cards 쓴 창) | +| `M01_LB_Wizard.ts` + css | 단계 안내 6단계 — 절 찾기 → 표 · 칸 역할 → 단위 → 계산 → 항목 → 이름 · 답을 Blocks 에 쌓음 | 있음 | D | +| `M01_LB_Check.ts` | 기대값 시험표 · 빈틈 결과 정리 · `/calc` 여러 번(최신만) | 거의 없음 | D 또는 B | +| `M01_LB_Entry.ts` + css | 단추(「로직 만들기(시험)」 · 쉬운 단가산출 옆) · 세 칸 틀 · 오른쪽 결과(EasyCalc Cards · Sheet 붙임) · 열기 · 복사 편집 · 저장(EasyCalc Api) · 실행 취소 · 저장 안 함 표시 | 있음 | E(Entry 잇기 창) | +| 서버(폴더 밖 · ⬜) | `CalcBody.tables` · 현장 표 QX 길 셋 · `/table/gaps` · (작음) 까닭 종류 칸 · `/tables` 머리에 `용도` | — | 브레인 지명 한 창 | + +### 7-1 서로 맞출 모양 (안) + +```ts +// Blocks (A) +export type LbRef = + | { k: "input"; name: string } // ① 입력값 + | { k: "fixed"; value: number | string } // 고정값 + | { k: "lookup"; id: string } // ② 표 조회 결과 + | { k: "calc"; name: string } // ③ 이름 붙은 계산값(중간) + | { k: "logic"; key: string; field: string | null } // 다른 로직 결과값(.노무비 등) + | { k: "cost"; name: "노무비" | "재료비" | "경비" | "사람줄합" }; +export interface LbLookup { + id: string; // 화면 번호 · 저장 안 함 + table: string; // QF000421 · 현장 사본이면 QX… + conds: { col: string; from: LbRef | { k: "expr"; text: string } }[]; + col: string; // 결과 칸 + at: { part: "중간" | "수량" | "비율" | "결과" | "요소"; index: number; start: number; end: number }[]; +} +export type LbCalcKind = "값" | "곱나눔" | "할증" | "더하기" | "조건목록" | "최소최대" | "올림" | "단계"; +export interface LbCalc { + name: string | null; // 중간 이름 · 수량 자리면 null + kind: LbCalcKind; + parts: LbRef[]; // 곱나눔 · 더하기 · 할증(바탕 · 율) + ops?: ("*" | "/" | "+" | "-")[]; + cond?: CondRead; // 조건목록 · 최소최대 · 올림 — Cond 것 그대로 + at: { part: "중간" | "수량" | "비율" | "결과"; index: number }; + text: string; // 원래 글(안 고치면 그대로 씀) +} +export interface LbLogic { + doc: EasyDoc; // ④ 항목 · ⑤ 금액 — Model 것 그대로 + inputs: LogicInput[]; // ① + lookups: LbLookup[]; // ② + calcs: LbCalc[]; // ③ + result: { kind: "금액"; unit: string } | { kind: "값"; unit: string; calc: LbCalc }; // ⑤ + blocked: string[]; // 못 읽은 까닭(쉬운 말) — 비면 다 읽힘 +} +readLogic(row: LogicRow, meta): LbLogic +writeLogic(lb: LbLogic): LogicRow // 고친 조각 자리만 글 갈아끼우기 +setCond(lb, lookupId, col, from): LbLogic · setCalc(lb, calc, patch) · setLookupTable(lb, id, newKey) + +// Source (B) +export interface TableEdit { table: string; row: number; col: string; value: number | string | [number | null, number | null] } +renderSource(host, lb, tables: Record, hits: Record, on: { edit(e: TableEdit): void; role(table: string, col: string, role: "조건" | "고정" | "결과"): void }) + +// Steps (C) +renderSteps(host, lb, ans: CalcAnswer | null, on: { change(lb: LbLogic): void }) + +// Wizard (D) +openWizard(): Promise +// Check (D|B) +runExpect(lb, rows: { inputs: Record; expect: Record }[]): Promise<{ ok: boolean; got: Record }[]> +gaps(lb): Promise<{ table: string; conds: Record; kind: "없음" | "중복" }[]> // ⬜ /table/gaps + +// Entry (E) +createLogicBuilderButton(): HTMLButtonElement +// 예시값 계산 = EasyCalc Api calcLater(row, trial, …) + 고친 표(⬜ CalcBody.tables) +``` + +### 7-2 차례(제안서 「나눠 만드는 차례」와 맞춤) + +1. **확인** — Blocks(A) + Entry 틀(E) + Source 읽기(B) + Steps 읽기(C) — 6개 로직을 세 칸으로 열어 읽기만 · 서버 변경 없이 됨. +2. **고치기** — Steps 선택 고치기(C) · Source 칸 고치기(B · ⬜ `CalcBody.tables` · 현장 표 QX) · 복사 편집 저장(E). +3. **만들기** — Wizard(D) — 표가 있는 절부터. +4. **넘기기 · 검사** — 결과값 넘기기 · 장비 잇기(C) · Check(D · ⬜ `/table/gaps`). + +## 8. ⬜ 브레인 답 필요 + +1. 서버 변경(폴더 밖) 허락 — `CalcBody.tables`(표 덮어 시험 계산) · 현장 표 QX(파일 · 키 · 길 셋 · 검사) · `/table/gaps` · (작음) 까닭 종류 칸 · `/tables` 머리 `용도`. 없으면 시험판은 「표 칸 고치기」 · 「빈틈 검사」를 뺀 범위. +2. 현장 표 사본 — 로직마다 따로 / 여러 현장 로직이 함께. +3. 기대값 시험표 저장 자리 — 현장 로직 줄 새 칸 / 따로 파일 / 화면에만(1차). diff --git a/docs/raw/M01_쉬운단가/로직판_A_정함.md b/docs/raw/M01_쉬운단가/로직판_A_정함.md new file mode 100644 index 000000000..b5f7a099b --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_A_정함.md @@ -0,0 +1,40 @@ +# 로직 만들기 판 시험판 A — 정함 (PLAN 35-2 · 브레인 · 10-01) + +근거 = 같은 폴더 `로직판_A_설계초안.md`(sub7 · 블록 구조 · 파일 나누기 7절 · 맞출 모양 7-1) · `로직판_엑셀로직_지도.md`(sub4 · A 대 B) · `로직판_조사_A · B`(인터넷) · 제안서 https://claude.ai/artifact/U4rkgpYWL4Em5VKBEVa4oY. + +## 목적 (모든 창이 이것으로 판단) + +사용자가 브레인 · 코딩 없이 품셈 원문을 보며 단가산출 로직을 직접 ① 원문 대조로 확인 ② 품셈 숫자가 바뀌면 직접 고침(예: 인원 2~3 → 3~4) ③ 혼자 새로 만듦(초등학생도) ④ 많은 수를 검증 ⑤ 서버 엔진과 같은 값. + +## 정함 + +1. 갈래 = A 세 칸 판(왼쪽 원문 표 · 가운데 산출근거 · 오른쪽 결과). B 엑셀 시트형은 따로 안 만듦(단가 붙이기 · 표 사본 · 엔진 둘에서 막힘) — 엑셀 부품(격자 · 단계 값 · 선택 목록)만 빌림. +2. 복수 시험 = 가운데 칸 보기 둘 — **문장 보기**(Steps) · **격자 보기**(Grid · 엑셀처럼 줄 · 칸 · 칸마다 선택 · 값 · 식 없음) · 위 단추로 바꿔 봄 · 같은 LbLogic · 같은 on.change. +3. 폴더 `M01_MasterData/LogicBuilder/` · 단추 「로직 만들기(시험)」 = 「쉬운 단가산출(시험)」 옆 · 폴더째 지우면 끝. EasyCalc(유지 확정) 파일은 가져다 쓰기만 · 안 고침. +4. 서버 — 기존 서버 파일은 안 고침. 표 칸 고친 값으로 시험 계산은 폴더 안 새 파이썬 모듈(`M01_LB_Calc.py` · `POST /api/m01/lb/calc {row, inputs, tables}`)이 엔진을 같은 방식으로 부르되 전역 캐시를 바꾸지 않고 사본으로 셈 · 등록은 한 줄. 엔진에 고리가 꼭 필요하면 기본값 있는 선택 인자 하나만(지워도 안 깨짐) — 그 경우 보고에 적음. +5. 표 칸 고치기 = 메모리 사본 + 예시값 즉시 재계산 + 영향 보기(그 표를 쓰는 로직 · `용도.로직키`) · **저장 안 함**(표준 표 고치기 · 현장 표 사본은 사용자 결정 뒤) · 화면에 「표 고침은 미리 보기 — 저장은 결정 뒤」 한 줄. +6. 로직 저장 = 현장 일위대가(`/logic/new · edit` · GX)만 · 표준은 「복사 편집」 뒤. +7. 빈틈 검사 = 브라우저에서(입력값 선택 목록 조합 × 표 줄) · 해당 없음 / 중복 = `/calc` 까닭 + 표 줄 대조 · 기대값 시험표 = 화면 초안(sessionStorage)만 · 저장 안 함. +8. 오른쪽 결과 = 큰 합계 + 일위대가표(EasyCalc Sheet renderSheet) + LB 자체 예시값 띠(새 용어) — EasyCalc Cards 는 안 붙임(옛 낱말). +9. 용어 = 제안서 2판 「용어 — 단어로」 제안 그대로: 입력값 · 고정값 · 결과(값) · 조건/고정/결과(표 칸 역할) · 선택 · 표 조회 · 계산 · 산출근거 · 항목 연결 · 노무/재료/장비/일위대가/비율/기타 · 노무비/재료비/경비 · 조건/그 외 · 무관 · 해당 없음/중복 · 표준/현장 · 복사 편집 · 자동 · 직접 입력 · 조건 편집 · 예시값 · 단계 안내 · 변경/실행 취소/삭제/추가 · 규격/사용처/출처 · 일위대가표 · 적용 품셈. +10. 시험 로직 6개 — GF000208 암거이음받침 채움재 · GF000219 돌쌓기 메쌓기(인력) · GF000025 떼붙임(재배잔디) · GF000249 다짐(플레이트콤펙터) · GF000133 덤프트럭 시간당 작업량 · GC000051 보행자 안전통로 — 시작 화면에 이 6개를 먼저 보이고 찾기로 다른 것도 엶. + +## 파일 · 창 + +| 파일 | 창 | 하는 일 | +| --- | --- | --- | +| `M01_LB_Blocks.ts` | sub7 | 로직 ↔ 블록(①~⑤) · 설계초안 7-1 타입 · 먼저 타입 올림 | +| `M01_LB_Calc.py` + 등록 한 줄 · `M01_LB_Api.ts` | sub4 | 표 덮어 시험 계산 서버 길 · 화면 부르기(calcLater 꼴 · 최신만) · 영향 보기(표 → 로직) | +| `M01_LB_Source.ts` + css · `M01_LB_Check.ts` | sub8 | 왼쪽 원문(격자 · 칸 역할 · 주 · 걸린 줄 · 칸 고치기 · 해당 없음/중복/빈틈) · 빈틈 · 기대값 시험표 | +| `M01_LB_Steps.ts` + css | sub2 | 가운데 문장 보기 | +| `M01_LB_Grid.ts` + css | sub5 | 가운데 격자 보기 | +| `M01_LB_Wizard.ts` + css | sub3 | 단계 안내 6단계 | +| `M01_LB_Entry.ts` + css | sub1 | 단추 · 세 칸 틀 · 보기 바꿈 · 열기 · 복사 편집 · 저장 · 실행 취소 · 오른쪽 결과 · 잇기 · 끝 검증(목적 다섯) | + +## 맞출 모양 + +설계초안 7-1 그대로 + 더함: +- Grid: `renderGrid(host, lb, ans, on: { change(lb): void })` — Steps 와 같은 꼴. +- Source: `renderSource(host, lb, tables, hits, on: { edit(e: TableEdit); role(table, col, role) })` — tables = 표 키 → 표 사본(고친 값 포함). +- Api(sub4): `lbCalcLater(row, inputs, tables, onDone(ans | null, plain | null))` · `tableUsers(tableKey): Promise<{ key; 이름 }[]>` · `fetchLbTable(key)`. +- Check: `gaps(lb, tables)` 는 브라우저 셈 · `runExpect(lb, tables, rows)`. diff --git a/docs/raw/M01_쉬운단가/로직판_관계제어_점검.md b/docs/raw/M01_쉬운단가/로직판_관계제어_점검.md new file mode 100644 index 000000000..94c353e78 --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_관계제어_점검.md @@ -0,0 +1,63 @@ +# 35-3 점검 — 로직 만들기(시험)에서 「표끼리의 관계」를 초등학생이 제어할 수 있나 (sub6 · 확인만) + +- 대상: 내 포트 8008 · 5181 → M01 → 단가산출 로직 → 「로직 만들기(시험)」. git-sync 로 dev 최신(105 커밋)을 받은 뒤 서버를 다시 띄움. 판정 직전 세션 SYSTEM_ADMIN 확인. +- 시험 로직: 돌쌓기 메쌓기(인력) — 표준 GF000219 은 읽기만이라, 이미 있는 현장 사본 GX000001(같은 식)을 열어 메모리에서만 고침. **저장 · 복사 편집 · 삭제는 안 누름**. 끝에 「실행 취소」 10번으로 모두 되돌린 것 확인. 서버 로직 수 그대로 · git 깨끗. 덤프트럭 시간당 작업량 GF000133 · 그것을 부르는 골재운반 모래 GF000134 는 읽기만. +- 사진: `tmp/로직판_관계_사진/` (r01 표준 열기 · r02 현장 사본 · r03 문턱만 바꿈 → 금액 멈춤 · r04 표 칸까지 고침 → 할증 걸림 · r05 격자 · r06 비율 더하기 · r07 격자 칠하기 · r08 로직 부름). +- 걸음 = 고칠 화면이 열린 뒤 누름 수(칸에 글 넣기 1 번 = 1). 들어가기는 M01 → 단가산출 로직 → 로직 만들기(시험) → 로직 고름 = 3 누름. 표준이면 「복사 편집」 1 더(누르는 순간 서버에 현장 사본이 써짐 · 저장 단추를 거치지 않음). + +## 한 줄 결론 + +**이미 있는 관계의 「값 칸」을 바꾸는 일(문턱 숫자 · 할증율 · 조건을 고정값으로)은 고르기 하나 · 숫자 하나로 되고 식은 안 씀. 그러나 관계 자체를 더하고 · 지우고 · 다른 표나 다른 결과 칸으로 잇는 일은 화면에 단추가 없어 거의 안 됨.** 품셈에 없는 관계(새 입력값 · 새 조건 · 새 표)는 만들 수 없고, 「+ 비율」 한 갈래만 있음. 초등학생 판정은 바꾸기 = 중, 더하기 · 지우기 · 다시 잇기 = 불가. + +## 시나리오 표 + +| # | 할 일 | 됨 | 걸음 | 지나간 화면 | 막힌 곳 | 모를 낱말 | 식을 쓰나 | 초등 | 까닭 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| S1① | 높이 할증 문턱 3m → 2.5m | 일부 | 3 (문턱 칸 1 + 원문 표 칸 「3~4」→「2.5~4」 2) | 산출근거 ③ 계산 · 원문 표 | 문턱만 바꾸면 2.5~3m 에서 증가율 표에 맞는 줄이 없어 금액이 「—」로 멈춤. 표 칸 고침은 「미리 보기 — 저장은 결정 뒤」라 저장되는 것은 문턱뿐. 멈출 때 위 알림은 「서버와 이어지지 않음」(실제 까닭은 「표 QF000422 에 높이 2.7 인 줄이 없음」) | 조건 목록 · 「위에서 처음 맞는 줄의 값을 씀」 · 그 외 · 해당 없음 | 아니요 | 하 | 칸은 쉬우나 문턱과 표 범위가 엮인 것이 안 보이고, 깨진 뒤 까닭이 엉뚱함 | +| S1② | 높이 할증을 석공에만 · 보통인부는 빼기 | 됨(꼼수) | 1 (계산 3 율 칸 「계산 · 증가율」→「고정값」 · 0 이 저절로) | ③ 계산 | 「할증 빼기」 단추는 없음 — 율 0% 로 둠. 계산 3 은 남음 | 바탕 · 율 · 「% 를 더 얹음」 · 계산 · 증가율 | 아니요 | 중 | 문장 「표 조회 3 · 보통인부 에 계산 · 증가율 = 30 % 를 더 얹음」을 읽어야 고를 칸을 찾음 | +| S1③ | 증가율 표 대신 고정 30% | 됨(일부) | 4 (계산 2 · 3 율 칸 → 고정값 → 30 · 두 번) | ③ 계산 | 높이와 상관없이 늘 30%(3m 아래도). 「3m 넘을 때만 30%」는 계산 1 둘째 줄 「표에서 찾은 값」을 숫자로 못 바꿔 안 됨. 안 쓰게 된 계산 1 · 표 조회 1 을 지울 길 없음 | 고정값 · 율 | 아니요 | 중 | 율 칸 둘을 따로 바꿔야 함을 스스로 알아야 함 | +| S2① | 조건 칸 「돌」 입력값 → 고정 「깬돌」 | 됨 | 4 (표 조회 2 「돌」 고르기 → 고정값 → 「깬돌」 글 · 표 조회 3 에 또) | ② 표 조회 | 같은 표를 석공 · 보통인부 두 번 조회 — 한쪽만 바꾸면 석공은 깬돌 · 보통인부는 깬잡석 품으로 섞여 계산됨(실측 121,863원 · 경고 없음). 예시값 뒷길이 25 에는 깬돌 줄이 없어 「—」. 원문 표 칸 역할 알약도 「고정」으로 바뀌지만 어느 조회 것인지 안 보임 | 표 조회 · 무관(조건에서 뺌) · 고정값 | 아니요(글 「깬돌」은 손으로 적음) | 중 | 고르기는 쉬우나 같은 조건이 두 곳에 있음 · 오타면 해당 없음 | +| S2② | 쓰는 표 바꾸기(메쌓기 → 찰쌓기 표) | 안 됨 | — | ② 표 조회 | 표 이름은 글자 조각 — 누를 곳 없음. 바꾸는 함수(`setLookupTable` · `M01_LB_Blocks.ts:627`)는 있으나 화면에 안 붙음 | — | — | 불가 | 화면에 길 없음 | +| S2③ | 결과 칸 바꾸기(석공 → 보통인부 칸) | 안 됨(꼼수 하나) | 원문 칸 알약 1 → 「결과 칸 바꾸기는 아직 안 됨」 | 원문 · ② 표 조회 | 「인 줄의 석공」은 글자 조각. 알약은 조건 → 고정 → 결과로 돌고, 결과 칸을 조건으로 돌리면 「「석공」 을(를) 조건으로 쓰려면 같은 이름 입력값이 있어야 함」. 꼼수: 계산 2 바탕을 「표 조회 3 · 보통인부」로 고르면 석공 줄이 보통인부 품을 씀(고르기 목록에 있음 · 실측 안 함) | 결과 · 바탕 | 아니요 | 불가 | 표 조회의 결과 칸을 고르는 곳이 없음 | +| S3① | 새 입력값 「경사」(완 / 급) · 「급이면 석공 품 10% 더함」 | 안 됨 | — | ① 입력값 · ③ 계산 | 입력값 더하기 · 지우기 단추 없음(① 은 단위 · 범위만 고침 · 선택 목록 낱말도 못 고침). 계산 더하기 없음. 단계 안내(새로 만들기)에서만 숫자 입력값을 「입력값으로 받음」으로 만들 수 있음 — 선택(완/급) 꼴 아님 · 모든 결과 칸에 같이 걸림 | — | — | 불가 | 화면에 길 없음 | +| S3② | 품셈에 없는 작은 표 만들어 잇기 | 안 됨 | — | 원문 | 표 만들기 화면 없음(이 판 · 옛 M01 표 화면 모두). 원문 표 칸 고침은 미리 보기만 · 줄 더하기도 없음 | — | — | 불가 | 표는 품셈 원문에서만 옴 | +| S3③ | 새 항목 「잡재료 = 노무비의 2%」 | 일부 | 2 (「+ 비율」 · 2 입력 · 바탕 노무비는 기본) | ④ 항목 연결 | 2,437원 더해짐. 그러나 이름 칸 없음(일위대가표에 이름 빈 「1 식」) · 넣을 자리 고르기 없음 → 경비로 들어감(잡재료는 재료비여야). 단계 안내에서는 이름 · 넣을 자리 있음 | 비율 · 노무 줄의 합 | 아니요 | 중 | 덧붙임 한 갈래만 · 이름 · 자리 못 정함 | +| S4 | 관계 지우기(할증 · 표 조회 · 입력값) | 안 됨 | — | ② ③ ① | 할증 · 표 조회 · 입력값 · 계산 모두 지움 단추 없음(할증은 율 0 꼼수). 항목 「지움」은 1 누름 · 안 물음 — 보통인부를 지워도 그 줄이 쓰던 표 조회 3 · 계산 3 이 화면에 남고 알림 없음. 「실행 취소」 10번으로 표 칸 고침까지 다 되돌아옴(확인) · 로직 삭제는 쓰는 곳 검사 뒤 물음 | — | 아니요 | 불가 (항목만 상) | 관계를 지우는 길이 없음 | +| S5 | 관계 한눈에 보기 | 일부 | 0 (보기 바꿈 1) | 문장 · 격자 · 원문 | **문장 보기**: ① → ⑤ 차례 · 「표 조회 2 메쌓기(인력) 에서 뒷길이 이 입력값 · 뒷길이 … 인 줄의 석공」 → 「계산 2 석공 수량 표 조회 2 · 석공 에 계산 · 증가율 = 30 % 를 더 얹음」 → 「【노무】 석공 이 계산 2 = 0.195 인 = 52,437 원」 — 번호를 거꾸로 따라가면 길이 보이나 선 · 화살표 없음. **격자 보기**: 줄을 누르면 그 줄이 쓰는 줄 하나만 칠함(석공 → 계산 2 · 표 조회 · 입력값까지 안 이어짐) · 값 칸이 오른쪽에 잘려 고정값(30 · 깬돌)이 안 보임 · 표 이름 대신 QF000421. **원문**: 「이 표를 쓰는 로직 1 개」 · 주③ 「계산에 쓰임」 · 칸 역할 알약 | 표 조회 1 · 2 · 3 번호 · 바탕 · QF 번호 | 아니요 | 중 | 읽을 수는 있으나 한 장 그림이 아님 | +| S6 | 로직끼리 관계(작업량 로직 → 받는 로직) | 보기 일부 · 바꾸기 안 됨 | 0 | 산출근거 | 골재운반 모래(GF000134) 에 「계산 1 작업량 = 60 · 골재운반 덤프트럭 시간당 작업량」 글자만. 넘기는 값(qt=qt · f=f · E=E · Cm=Cm) 안 보임 · 눌러서 그 로직 열기 없음 · 고르기 목록에 「다른 로직」 없음. GF000133 쪽에 「이 로직을 쓰는 로직」 목록 없음(표에만 있음 · 실제는 GF000134 · 135 · 136 셋). 계산 2 문장이 「1 = 1 ÷ 작업량 = 60」으로 읽기 어색 | qt · f · E · Cm(기호 그대로) | 아니요 | 하 | 보이기만 하고 따라가기 · 바꾸기 길 없음 | + +## 안 되는 것이 왜 안 되나 (코드 근거) + +1. 블록 모형이 「있는 관계 고치기」 세 함수뿐 — `setCond`(조건 칸 출처) · `setLookupTable`(쓰는 표 · 화면에 안 붙음) · `setCalc`(계산 조각 · 틀) — `M01_LB_Blocks.ts:604-645`. 표 조회 · 계산 · 입력값을 **더하거나 지우는 함수가 없음**. 고침은 원래 식 글의 그 자리만 갈아끼우는 방식이라 새 자리를 만들 수 없음. +2. 화면 쪽도 같은 범위 — 문장 보기는 항목 카드만 더하기 · 지우기(`M01_LB_Steps.ts:172` `addCard` · `:249` `removeCard`) · 격자 보기는 `setCond` · `setCalc` 만(`M01_LB_Grid.ts:369-412`) · 계산 틀(할증 → 값 등)은 못 바꿈. +3. 값 고르기 목록 = 입력값 · 표 조회 · 다른 계산 · 고정값(숫자)만(`M01_LB_Steps_Cell.ts:235-275`). 「다른 로직」 · 「글 고정값」은 목록에 없어 로직 부름 줄은 글자 조각으로만 보임. +4. 표 조회의 결과 칸 바꾸기는 「아직 안 됨」으로 막아 둠(`M01_LB_Entry.ts:86` · `:437`). +5. 표 칸 고침은 정함 5대로 메모리 사본 · 저장 안 함 — 그래서 S1① 처럼 관계와 표 범위를 함께 바꿔야 하는 일은 저장 뒤 깨짐. +6. 새 입력값 · 새 표 · 조건 「급이면」 같은 품셈에 없는 관계는 단계 안내(새로 만들기)에만 일부(숫자 입력값 · 품셈 절의 다른 표로 할증 조건 목록) — 고치는 화면에는 길이 없음. +7. 「+ 비율」 카드에는 이름 · 넣을 자리 칸이 없음(단계 안내의 덧줄은 있음) — 같은 뜻의 두 길이 서로 다름. + +## 지금 화면(옛 단가산출)에서는 + +공통: 표준 로직은 못 고침 → 「본떠 만들기」로 자체 사본을 만든 뒤 편집기에서 식 글을 고침(34-1B 실측 + 코드). 거의 다 되지만 모두 **식을 써야 함 → 초등 하**. + +| # | 옛 화면 | 어떻게 | +| --- | --- | --- | +| S1① | 됨 · 식 | 중간 값 식 `만약(높이 <= 3, 0, …)` 의 3 → 2.5 (표 범위 문제는 같음) | +| S1② | 됨 · 식 | 보통인부 수량 식 끝 `* (1 + 증가율 / 100)` 지움 | +| S1③ | 됨 · 식 | 수량 식을 `… * 1.3` 으로 · 또는 중간 값 증가율 = 30 | +| S2① | 됨 · 식 | `찾기(QF000421, …, 돌=돌, …)` → `돌='깬돌'` (두 줄 다) | +| S2② | 됨 · 식 | 식 안 QF 번호 고침 · 또는 「표」 단추(수량 칸을 통째로 바꿈) | +| S2③ | 됨 · 식 | 식 끝 `.석공` → `.보통인부` | +| S3① | 됨 · 식 | 설계에서 받을 값 「줄 추가」(이름 경사 · 고르기 「완, 급」) + 수량 식에 `* 만약(경사 == '급', 1.1, 1)` | +| S3② | 안 됨 | 표 만들기 없음 · `만약` 식으로 흉내만 | +| S3③ | 됨 · 식 조금 | 덧줄 「줄 추가」 · 이름 잡재료 · 식 `노무비 * 0.02` · 비목 재료비 | +| S4 | 됨 · 안 물음 | 칸마다 × — 쓰는 곳 검사 없음 · 저장 때 엔진 검사(422)로만 걸림 | +| S5 | 일부 | 텍스트 수식(이름 식 · 값 식 두 칸) · 알약 누르면 표 창 | +| S6 | 됨 · 식 | 중간 값 `로직(GF000133, qt=qt, f=f, E=E, Cm=Cm)` 글 고침 · 알약 「로직」 누르면 그 로직을 엶 | + +## 덧붙여 본 것 + +- 계산이 멈추면 위 알림이 「서버와 이어지지 않음 — 잠시 뒤 다시 해 주세요」 — 서버는 `ok:true` 와 줄마다 까닭(「표 QF000422(13-4-1)에 높이 2.7 인 줄이 없음」)을 줌. 원문 표 위의 「해당 없음 — 예시값에 맞는 줄이 없음」만 맞는 말. +- 칸 고침은 글을 넣고 칸을 떠나야(Enter · 다른 곳 누름) 반영됨. +- 고친 뒤 처음 값으로 다 되돌리면 「닫기」가 묻지 않고 닫힘(맞는 동작) · 「저장 안 함」 표시는 그대로 남아 있었음. +- 원문 칸 역할 알약은 조건 → 고정 → 결과로 돌기만 하고 무엇이 바뀌는지 미리 말하지 않음. diff --git a/docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md b/docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md new file mode 100644 index 000000000..554843ff2 --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md @@ -0,0 +1,161 @@ +# 로직판 조사 — 「엑셀(스프레드시트)로 만드는 로직」 지도 (35-2 · sub4) + +조사만 · 코드 · git · docs 안 건드림 · 근거 = sub_laptop_4 작업 트리(2026-10-01 · 안 받은 dev 28 커밋은 스프레드시트 파일을 안 건드림 — `git log HEAD..origin/dev` 로 확인). +`ss/` = `A00_Common/spreadsheet/`. + +## 결론 셋 + +1. **시트가 계산 규칙으로 쓰이는 곳은 한 곳뿐** — M02 구조물 「면적산출 · 재료산출」 통합문서. 칸 → 알약(입력값 키) 연결까지는 저장되지만 **그다음(일위대가 입력값 · 금액)으로 이어지는 코드가 없음** — 단가 계산은 `면적.json` · `재료.json` · `계산값` 을 읽지 않음. B08 · B09 는 빈 화면. +2. **자체 엔진은 엑셀 기본기를 거의 갖춤** — IF · IFS · IFERROR · VLOOKUP · XLOOKUP · INDEX/MATCH · SUMIFS · MINIFS · ROUND 계열 · 이름 정의 · 시트 사이 참조 · 선택 목록(데이터 유효성) · 계산 단계 보기 · 선행/종속 화살표. 서버는 저장 때 **같은 TS 엔진을 Node 로 다시 셈**(계산 자리 ②). 없는 것 — 다른 통합문서 참조 · LAMBDA/LET · INDIRECT/OFFSET · 마스터(노임 · 자재 · 기계 · 다른 로직)를 읽는 함수. +3. **B(시트로 로직) 는 「표 찾기 · 조건 · 할증 · 비율」 은 시트로 옮길 수 있으나 「단가 붙이기(노임 · 자재 검색 · 기계경비 로직 부르기)」 와 「여러 로직이 한 원문 표를 함께 씀」 에서 막힘** — 시트 엔진 고침 + 새 연결 없이는 로직 ↔ 시트 왕복이 안 되고, 엔진이 둘(파이썬 정본 · TS 시트)이 되어 같은 값 보장이 새 짐. **판단: A(세 칸 판)를 본 갈래로 · B 는 「원문 표 보기 · 계산 단계 보기」 같은 부품만 빌려 씀.** B 시험판을 만들면 「제한된 시트(찾기 · 단가 함수를 엔진에 더함)」 꼴로 범위를 좁혀야 함. + +--- + +## 1. 스프레드시트가 로직(계산 규칙)으로 쓰이는 곳 + +| # | 자리 | 하는 일 | 핵심 코드 | 저장 | 화면 | +| --- | --- | --- | --- | --- | --- | +| 1 | M02 구조물 면적산출 | 집계표 열(꼴 「수」) 하나마다 면적 셈 시트 | `M02_MasterTemplete_Store.py:66-72`(PARTS · `SHEETS = ("area","material")`) · `:282-301`(빈 통합문서) · `:169-170`(저장 때 서버 셈) | 층: `resources/master_template/area/<열id>.json` · 회사 · 개인 층도 같은 자리 · 프로젝트: `templates/structures/<구조물id>/면적.json`(옛 `templates/items/…`) | 큰 편집기 `M02_MasterTemplete_UI_Main.ts:273-361`(수식 입력 줄 · 주소 칸 = `ss/spreadsheet_editor.ts`) · 카드 미리보기 읽기 `M02_MasterTemplete_ItemCards.ts:314-317` · 관리자 카드 편집 `M02_MasterTemplete_Structure.ts:305-359,417-422` + 저장 단추 `M02_MasterTemplete_CardShell.ts:69-120` · 프로젝트 사본 편집 `ui_template/ui_template_item_picker_edit.ts:103-129` | +| 2 | M02 재료산출 | 같은 열의 재료 수량 시트 | 위와 같음(`material/<열id>.json` · 프로젝트 `재료.json`) | 연결 칸에 `자재: {코드: MT…}` 가 더 붙음 | 위와 같음 + 자재 찾기 알약 | +| 3 | 알약 줄(칸 ↔ 입력값 연결) | 시트 아래 알약 막대 · 알약을 칸에 놓으면 「이 칸 값 = 이 입력값」 | `ss/spreadsheet_links.ts:1-9,124-381` · 늦게 불러옴 `ss/spreadsheet.ts:151-163` | `Sheet.연결: [{키, 이름?, 단위?, 칸: "O6", 자재?}]`(`ss/spreadsheet_types.ts:200,211-219`) | 알약 = 조합 물량 `GET /combos/key/{key}/inputs`(`M02_MasterTemplete_Router_Combos.py:99-123` ← `M01_MasterData_Store_Combo.py:168-191`, 키 「로직이름|단위」) + 입력 알약 `GET /layers/{layer}/items/{key}/pills`(`M02_MasterTemplete_Router_Items.py:169` ← `M02_MasterTemplete_Inputs.py:190-218`, 키 「입력|로직|입력」) | +| 4 | 입력 자리 정하기(입력연결) | 일위대가 입력값마다 받는 자리 = 면적 · 재료 · 선택 | `M02_MasterTemplete_Inputs.ts:4-10` · `M02_MasterTemplete_Inputs.py:8-10,144-184` | `inputs/<열id>.json` = `{판, 줄: [{로직, 입력, 자리, 알약?}]}` · 프로젝트 `입력연결.json` | 「선택 입력」 카드 | +| — | (다른 엔진) 구조물집계표 표 수식 | 집계표 칸 수식(설계 값 채우기) | `ui_template/sheet/ui_template_sheet_recalc.ts` · 서버 `common_util/common_util_sheet_recalc.py:30-40` ← `M02_Table_Fill.py:654-660` | 표 템플릿 | 집계표 화면 — **이 갈래 엔진은 스프레드시트 엔진과 따로임** | +| — | 자재조합 | 자재 목록뿐 · 수량 · 단가 없음(「재료산출 몫」) | `M02_MasterTemplete_Matset.py:1-4` | `자재조합.json` | M02 자재 조합 | +| — | B08 수량 · B09 견적 | 빈 화면(다시 짓는 중) | `B08_Quantity/B08_Quantity_UI_Page.ts:3-6` · `B09_Estimation/B09_Estimation_UI_Shell.ts:3-6` | — | — | + +실제 프로젝트 사본 한 벌(`storage/1/3/…/templates/items/system_none_SS000002/면적.json`): + +```json +"칸": {"M6": {"값": 2}, "N6": {"값": 3}, "O6": {"식": "N6*M6"}, "M8": {"식": "O6/M6*0.2"}}, +"연결": [{"키": "GF000222", "이름": "돌쌓기 찰쌓기", "칸": "O6", "단위": "㎡"}], +"계산값": {"s1": {"O6": {"수": "6"}, "M8": {"수": "0.6"}}} +``` + +### 1-1. 값 흐름 — 어디서 끊기나 + +1. 시트 칸(수식) → 알약 키 연결(`Sheet.연결`) — **저장됨**. +2. 브라우저 `getLinkedValues()`(`ss/spreadsheet.ts:275-283`) — 부르는 곳은 시험 하네스뿐(`resources/tester/spreadsheet/harness_links.ts:3`). +3. 프로젝트 단가 계산 `POST /api/projects/{id}/items/{folder}/calc` → `M02_Item_Copy.py:326-337` → `M02_Item_Prices.calc`(`:211`) — 읽는 것 = `입력값.json` · `고른자재.json` · `단가.json` · `일위대가.json` 뿐. 면적 · 재료 자리 입력은 `missing_inputs`(`:195-208`)에서 「입력 없음」 으로 멈춤 · 값 카드는 「선택」 자리 입력만 받음(`M02_MasterTemplete_Inputs.ts:291-295`). + - 주의: `M02_Item_Prices.py:81` 의 `연결` 은 품셈재료 연결(마스터 줄 칸)이지 시트 칸 연결이 아님. + +→ **「시트 칸 → 일위대가 입력값 → 금액」 은 아직 안 이어짐.** 시트는 지금 「구조물 물량 계산기」 이지 단가산출 로직이 아님. + +### 1-2. 계약 어긋남(덤) + +- 형식 · 실제 파일은 `시트[i].연결`(시트마다) · `resources/tester/spreadsheet/test_spreadsheet_store.py:54,92,111` 와 `M02_MasterTemplete_Store.py:158,306` 설명은 문서 머리 `연결` 이라 적음. +- 데이터 유효성 규칙이 행 · 열 넣기/지우기 때 안 옮겨짐(`remapValidationRanges` 부르는 곳 없음) · 붙여넣기 · 채우기는 검사 안 거침 · 서버는 유효성 검사 안 함. + +--- + +## 2. 자체 스프레드시트 엔진이 되는 것 + +### 2-1. 함수 (`ss/spreadsheet_functions.ts:16-21` 에서 네 파일을 합침 · 모르는 이름 `#NAME?` · 인자 수는 풀이 때 검사) + +| 갈래 | 있음 (파일:줄) | +| --- | --- | +| 논리 | IF(misc 160) · AND 170 · OR 179 · NOT 188 · IFERROR 196 · IFS(lookup 471) · SWITCH 482 | +| 찾기 · 참조 | VLOOKUP(lookup 132) · HLOOKUP 166 · INDEX 200 · MATCH 233 · CHOOSE 269 · XLOOKUP 496 | +| 조건 집계 | COUNT · COUNTA · COUNTIF · SUMIF 319 · SUMIFS 345 · COUNTIFS · AVERAGEIF(S) · MAXIFS · MINIFS | +| 수학 · 끝수 | SUM 189 · PRODUCT · SUMPRODUCT 205 · ROUND 232 · ROUNDUP 243 · ROUNDDOWN 254 · INT 265 · TRUNC · CEILING 285 · FLOOR 300 · MIN 393 · MAX 401 · MROUND · ABS · MOD · POWER · SQRT · 삼각 · LOG · EXP | +| 글 | CONCATENATE · TEXT · TEXTJOIN · LEFT/RIGHT/MID · SUBSTITUTE · FIND/SEARCH … | +| 정보 · 날짜 · 통계 | ISNUMBER · ISBLANK · ISERROR · NA · DATE 계열 · MEDIAN · STDEV · RANK · LARGE/SMALL … | +| **없음** | XMATCH · LET · LAMBDA · INDIRECT · OFFSET · CONCAT · IFNA · ROW/COLUMN · 다른 통합문서 참조 · 마스터 자료를 읽는 함수 | + +연산 — `- + % ^ * / & = <> < <= > >=` · 범위 `A1:B5` `A:A` `$` · 합집합 `(A1,B1)` · 교차(빈칸) · 계산된 범위는 없음(`ss/spreadsheet_parser.ts:4-5,20-24,125,226-269`). 오류값에 엑셀에 없는 `#CYCLE!`. + +### 2-2. 이름 정의 · 시트 사이 참조 · 선택 목록 + +- **이름 정의** — `Sheet.이름정의: [{이름, 범위}]`(`ss/spreadsheet_types.ts:193,553-556`) · 범위만(상수 · 식 이름 없음) · 제 시트 먼저 → 다른 시트 · 대소문자 무시(`ss/spreadsheet_names.ts:47-60` · `ss/spreadsheet_graph.ts:87-113,150`) · 이름 상자 · 이름 관리자(`ss/spreadsheet_editor.ts:556-568` · `ss/spreadsheet_data_menu.ts:183`) — 계산에 실제로 붙음(형식 파일의 「안 이음」 설명은 낡음). +- **시트 사이 참조** — `Sheet2!A1` · `'시트 이름'!A1:B3` 됨(`ss/spreadsheet_parser.ts:21,39-42` · `ss/spreadsheet_eval.ts:252-254`) · 이름 바꾸면 다른 수식도 고침 · 3D(`S1:S3!`) · 다른 통합문서(`[Book]`) 없음. +- **선택 목록(데이터 유효성)** — `Sheet.유효성: [{범위, 규칙: {종류: "목록", 값들} | {종류: "수범위", 아래, 위}, 어기면: 막음 | 경고}]`(`ss/spreadsheet_types.ts:540-550`) · 칸 옆 ▼ 목록(`ss/spreadsheet_data_menu.ts:225-255`) · 들어갈 때 검사(`ss/spreadsheet_editor.ts:420-424`). +- **확인 도구** — 계산 단계 보기(`ss/spreadsheet_eval_steps.ts` — 엑셀 「수식 계산」 처럼 한 조각씩 값으로 바꿈 · IF 는 조건부터) · 선행/종속 화살표(`ss/spreadsheet_trace.ts`) · 오류 검사 ⚠(`ss/spreadsheet_errcheck.ts`) · 수식 칸 참조 색 테두리. + +### 2-3. 계산 · 크기 + +- 의존 그래프 · 바뀐 칸과 딸린 칸만 다시 셈 · 순환은 그 칸들만 `#CYCLE!`(`ss/spreadsheet_graph.ts:3-5,131-136,204-227,277-325,350-378`). +- 수 = BigInt 분수(`@ui/sheet/ui_template_sheet_frac` — 집계표와 끝수 한 벌 · `ss/spreadsheet_types.ts:7-9`) · 파이썬 단가 엔진은 `Decimal` — **같은 식이라도 두 엔진의 끝자리가 다를 수 있음**(대조 시험 필요). +- 파일 모양 — `Workbook {종류: "통합문서", 판, 열, 서식[], 시트[{id, 이름, 칸: {A1: {값 | 식, 서식}}, 병합, 열, 행, 유효성, 이름정의, 연결 …}], 계산값}`(`ss/spreadsheet_types.ts:95-102,198-242`) · 수식은 「=」 없이 · `계산값` 은 서버만 씀(브라우저 것은 버림). +- **128 KB 는 시트 파일 한도가 아님** — 브라우저가 M02 시트를 열 때 받는 코드 조각의 gzip 예산(엔진 48 + 화면 72 + css 8 KB · `ss/spreadsheet_types.ts:15-16` · 재는 곳 `resources/tester/spreadsheet/test_spreadsheet_size.py:19,41-45`). 시트 파일 크기 한도는 없음(행 1,048,576 · 열 16,384 만). +- 더할 수 있는 것(예산 안) — 함수 하나는 수십 줄 · 수 KB 미만이라 `찾기(표, 조건…)` · `단가(키)` 같은 자체 함수 몇 개는 엔진 48 KB 안에 들어갈 여지가 큼(지금 빌드 크기는 이번 조사에서 안 잼 — F 시험으로 잼). 단 `spreadsheet_types.ts` 머리 규칙상 엔진 · 계약은 「0 계약 주인」 만 고침 · 외부 라이브러리 0. + +--- + +## 3. 시트 계산을 누가 하나 + +| 때 | 누가 | 근거 | +| --- | --- | --- | +| 화면에서 고칠 때 | 브라우저 TS 엔진(보이기용) | `ss/spreadsheet.ts:199-214,269` | +| [저장](마스터 · 회사 · 개인 층) | **서버 — 파이썬이 같은 TS 엔진 Node 묶음을 부름** · 브라우저 `계산값` 은 버리고 서버 값으로 | `common_util/common_util_spreadsheet.py:17-57`(묶음 `config/spreadsheet_node/…` · 낡으면 `npm run build:spreadsheet` 로 다시 묶음 `:27-34`) · `common_util/common_util_node_bundle.py:60-93` · 부르는 곳 `M02_MasterTemplete_Store.py:169-170,462` · `M02_MasterTemplete_Router_Layers.py:318-324` | +| 프로젝트 사본 저장 | 서버 Node | `M02_Project_Items_Router.py:139-155` → `M02_Item_Copy.py:200-201` | +| 층 안 열 사이 복사 · 개인 층 저장 · 항목 복사 | 서버 Node | `M02_MasterTemplete_Store.py:316,364` · `M02_Item_Personal.py:107` · `M02_MasterTemplete_Items.py:155` | +| 프로젝트로 복사(templates/apply · seed · reset · 스냅숏) | **다시 안 셈** — 바이트 그대로(따라온 `계산값` 을 믿음) | `M02_MasterTemplete_Router_Layers.py:412-454` · `M02_Template_Layers.py:305,345,368` · `M02_Item_Snapshot.py:97-102,180-210` | +| B08 · B09 | 없음(빈 화면) | 위 1절 | +| 실패 | Node 실패 = `RecalcError` → 503 · 저장 막힘 · 묶기 300 초 · 돌리기 600 초 한도 | `common_util_node_bundle.py:27-28` | + +CLAUDE.md 5장과 대조: + +- 시트 자체는 **② 「TS 를 서버 Node 로」** 에 맞음(화면과 같은 코드 · 저장 때 서버가 다시 셈 · 브라우저 값 안 받아 적음). +- 프로젝트 복사 때 안 다시 셈 — 「초기값은 서버가 한 번 계산해 영구저장」 과는 맞으나, 마스터 쪽 단가가 바뀌어도 시트 `계산값` 은 그대로 따라감(시트는 마스터를 안 읽으니 지금은 문제 없음). +- 단가산출 로직은 **③ 서버 단독(파이썬 `master_formula`)** · 시트로 로직을 만들면 같은 값을 두 엔진(파이썬 정본 · TS 시트)이 내게 되어 「코드는 한 벌」 에 어긋남 → B 를 하려면 ① 「짝 + 거울 시험」 이거나, 시트는 편집기일 뿐 저장 때 로직 형식으로 바꿔 파이썬이 셈(시트 → 로직 변환이 필수). + +--- + +## 4. B 갈래 — 단가산출 로직 한 벌을 시트로 + +꼴(가정): 시트 ① 원문 표(표마다 한 시트) · ② 입력값 칸(선택 목록) · ③ 산출근거 칸(이름 붙은 수식) · ④ 항목 칸(종류 · 이름 · 단위 · 수량 · 단가 · 금액 · 비목). + +### 4-1. 로직 → 시트 (지금 형식 하나하나) + +| 로직 구성 | 시트로 | 됨? | 막힘 · 까닭 | +| --- | --- | --- | --- | +| 입력 · 고르기 | 입력 칸 + 선택 목록 | 됨 | 서버가 유효성 검사 안 함 · 붙여넣기는 검사 안 거침 | +| 입력 · 범위 | 수범위 유효성 | 됨 | 같음 | +| 입력 · 수 | 빈 칸 | 됨 | — | +| 중간(이름 = 식) | 이름 정의한 칸 + 수식 | 됨 | 이름은 범위만 · 칸 이름이 한글이면 엔진 이름 규칙 확인 필요 | +| 찾기 · 같음 조건 | `SUMIFS`/`MAXIFS`(수 값) 또는 `XLOOKUP`(묶은 열쇠 열) | 반쯤 | 「맞는 줄 없음 · 둘 이상」 을 엔진은 멈춤으로 알리는데 SUMIFS 는 0 을 조용히 냄 → 틀린 금액이 숨음 · 「빈 조건 칸 = 무관」 은 조건마다 `(칸="" 또는 칸=값)` 을 더 써야 함 | +| 찾기 · 범위 조건 | 아래 · 위 두 열 + MINIFS 등 | 어렵 | 범위규칙 다섯 가지(초과·이하 · 이상·미만 + 「마지막 칸은 이하 포함」 · 이하 = 위 끝 가장 작은 줄 · 이상·이하)(`master_formula.py:331-384`)를 수식마다 손으로 흉내 | +| 찾기 · 값 칸이 식 글(「L/V×2×60」) · 범위 값 [아래, 위] | 열 둘로 펴기 · 식 글은 따로 | 어렵 | 표 모양을 시트로 바꾸는 규칙이 새로 필요 | +| 만약 · 비교 · 그리고/또는 | IF · AND · OR | 됨 | — | +| 최소 · 최대 · 올림 · 버림 · 반올림(자리) | MIN · MAX · ROUNDUP · ROUNDDOWN · ROUND | 됨 | 수 표현(분수 대 Decimal) 끝자리 대조 필요 | +| 할증 `(1 + 율/100)` · % | 수식 · `%` | 됨 | — | +| 호표 수량 | 항목 칸 수량 = 수식 | 됨 | — | +| **호표 단가 — 인력 노임(LB)** | 단가 칸을 마스터에서 채워야 함 | **막힘** | 시트에 마스터를 읽는 함수 없음 · 다른 통합문서 참조 없음 → 서버가 칸을 채워 주는 새 연결(또는 `단가()` 함수) 필요 | +| **호표 단가 — 재료 검색어 고르기** | 〃 | **막힘** | 자동값 차례 · 단위 환산 · 지역 · 계약종별(`master_pick`)을 시트가 못 함 | +| **호표 — 기계(기계경비 로직 부름)** · 다른 로직 부름(1,075 줄 · 506 로직) | 〃 | **막힘** | 인자를 넘겨 다른 로직을 부르는 길 없음(LAMBDA · 다른 통합문서 없음) | +| 틀 키 `EQ:{기계}.가격` · `LB:{직종}` | 기계 · 인력 표 사본 + INDEX/MATCH | 막힘에 가까움 | 마스터 654 기계 줄을 시트마다 복사 | +| 덧줄 · 비목 합 × 비율 | `SUMIF(비목 열, "노무비", 금액 열) * 율` | 됨 | — | +| 덧줄 `줄.'이름'` | 칸 참조 | 됨 | — | +| 끝수 묶음 | 계 칸 ROUNDDOWN | 됨 | — | +| 돈 아닌 결과 식(작업량) | 결과 칸 하나 | 됨 | 다른 로직이 그 결과를 부르는 길은 위 「로직 부름」 과 같이 막힘 | + +### 4-2. 시트 → 로직 (거꾸로) + +- 자유 수식(A1 참조 · SUMIFS · INDEX · TEXT …)은 로직 식 문법(`_틀.md` 8장 — `+ - * /` · 비교 · 그리고/또는 · 찾기 · 로직 · 만약 · 올림/버림/반올림 · 최소/최대)에 짝이 없음 → **아무 시트나 로직으로 바꿀 수는 없음**. +- 되는 꼴 = 「제한된 시트」 — 칸 자리(입력 · 산출근거 · 항목)를 틀로 고정하고, 수식은 로직 문법 안의 함수만 · 표 찾기는 자체 함수 `찾기(표, 조건=…)` 하나로 → 이러면 사실상 「시트 옷을 입은 로직 식」 이고, 사용자는 여전히 식을 씀. +- 원문 표가 시트 안에 사본으로 들어가면 표 3,033개(로직이 부르는 것 2,015 · 한 표를 여러 로직이 씀)가 로직마다 복사 → 품셈 숫자가 바뀌면 사본마다 고쳐야 함. 피하려면 원문 표 시트를 「마스터 표를 비추는 읽기 시트」 로 두는 새 기능 필요(다른 통합문서 참조에 해당). + +### 4-3. B 를 하려면 새로 필요한 것 + +1. 엔진에 자체 함수 — `찾기(표키, 조건…)`(범위규칙 · 무관 · 해당 없음/중복 멈춤까지 파이썬과 같게) · `단가(키 또는 검색어)` · `로직(키, 인자…)` — 엔진 · 계약 주인의 고침 + 마스터 자료를 엔진에 넣는 길(브라우저 · Node 둘 다). +2. 시트 → 로직 변환기(저장 때) + 로직 → 시트 생성기(열 때) + 왕복 시험 1,469 개. +3. 또는 시트를 정본으로 두면 파이썬 엔진과 TS 시트 엔진의 거울 시험(분수 대 Decimal). +4. 알약 → 입력값 → 금액 사슬 잇기(지금 끊김 — 1-1). + +--- + +## 5. A 대 B 판단 거리 + +| 목적 | A 세 칸 판(원문 표 · 산출근거 · 결과 · 고르기) | B 엑셀 시트형 | +| --- | --- | --- | +| ① 원문 대조 확인 | **좋음** — 왼쪽에 마스터 표 그대로(사본 아님) · 걸린 줄 칠함 · 출처 칩 · 산출근거는 문장. 걱정: 원문 「주」 글은 표 밖이라 연결 표시를 따로 만들어야 함 | 좋음 · 걱정 — 표는 엑셀처럼 보이나 규칙은 칸 수식 속에 숨음(A1 참조) · 계산 단계 보기 · 화살표로 따라갈 수는 있음(`ss/spreadsheet_eval_steps.ts` · `ss/spreadsheet_trace.ts`) | +| ② 품셈 숫자 바뀜 직접 고침 | **좋음** — 마스터 표 칸 하나 고치면 그 표를 쓰는 모든 로직에 반영(표는 한 벌 · `용도.로직키` 로 영향 보기) | **걱정 큼** — 표가 로직마다 시트 사본이면 사본마다 고침 · 피하려면 「마스터 표를 비추는 시트」 새 기능 | +| ③ 혼자 새로 만들기(초등학생) | 좋음 — 단계 안내 · 선택 · 문장 틀(할증 · 나누기 · 조건 목록) · 식 안 씀. 걱정: 틀 밖 규칙(드문 식 10 %)은 「직접 입력 식」 으로 남음 | **걱정 큼** — 결국 수식 쓰기(SUMIFS · 무관 · 범위규칙) · 9-21 「식으로 새로 만들기」 와 같은 벽 · 엑셀 아는 어른에게만 쉬움 | +| ④ 많은 수 검증 | 좋음 — 표 조회 「해당 없음 / 중복」 검사 · 기대값 시험표 · 진행표 · 서버 일괄(`check_master 계산전부`)을 그대로 씀 | 반쯤 — 시트 하나씩은 단계 보기가 좋으나 1,469 개를 시트로 바꾸는 일 자체가 큼 · SUMIFS 가 0 을 조용히 내면 틀림을 놓침 | +| ⑤ 서버 엔진과 같은 값 | **좋음** — 저장은 지금 로직 형식 · 계산은 파이썬 정본 한 벌(③) · 판은 편집기일 뿐 | **걱정 큼** — 시트 값(TS · 분수)과 정본(파이썬 · Decimal) 두 엔진 · 단가 붙이기(노임 · 자재 · 기계경비)는 시트가 못 해 서버 칸 채우기 필요 · 거울 시험 새 짐 | + +### 5-1. 정리 + +- **본 갈래 = A.** 정본 형식 · 엔진 · 마스터 표를 그대로 두고 화면만 바꿈 — 다섯 목적 모두 「좋음」 쪽. 오늘 만든 쉬운 단가산출(Api · 카드 · 일위대가표)이 오른쪽 「결과」 칸으로 그대로 들어감. +- **B 에서 빌려 올 것(작게)** — ① 왼쪽 원문 표를 스프레드시트 격자(읽기 · 칸 눌러 고침)로 보이기 ② 계산 단계 보기처럼 「산출근거 한 줄씩 값으로 풀기」 ③ 입력값 선택 목록(데이터 유효성 모양) ④ 선행/종속 화살표 → 「이 값이 어디서 왔나」. +- **B 시험판을 꼭 만든다면** — 범위를 「제한된 시트」 로: 원문 표 시트(마스터 표 비춤 · 읽기) + 입력 칸 + 산출근거 칸(로직 문법 함수만 + `찾기()` 자체 함수) + 항목 칸(단가는 서버가 채움) · 저장은 로직 형식으로 바꿔 파이썬이 셈. 필요한 엔진 고침(자체 함수 · 마스터 자료 주입)은 「0 계약 주인」 몫이라 브레인 결정 필요. +- **따로 알릴 것** — M02 면적 · 재료 시트의 「알약 → 입력값 → 금액」 사슬이 끊겨 있음(1-1) · B 와 상관없이 B08 · B09 다시 지을 때 이을 자리. diff --git a/docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md b/docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md new file mode 100644 index 000000000..f48d12a6f --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md @@ -0,0 +1,100 @@ +# 35-0 조사 A — 견적 · 단가산출 프로그램은 로직을 어떻게 만들고 고치게 하나 (sub6 · 조사만) + +- 웹 검색 · 읽기만. 로그인 · 결제 필요한 곳은 겉 설명만. 「(추정)」 = 소개문만 보고 짐작 · 화면 · 설명서로 확인 못 함. +- 주소는 실제로 열었거나 검색 결과에 나온 것만. 「(검색만)」 = 열기 실패 · 요약만 봄. 사진 주소는 쪽 안 상대 경로를 펼친 것이라 직접 열어 보지 않음. + +## 0. 한 줄 결론 + +1. 국내 프로그램은 거의 모두 「**기초단가(단가대비표) → 일위대가(호표 행) → 내역서 → 원가계산서**」 한 줄 흐름 · 일위대가 행 = 품명 · 규격 · 단위 · 수량 × 단가 → 재료비 · 노무비 · 경비. 품셈 식을 사용자가 짜는 화면은 없음 — **표준일위대가 DB를 받아 수량 · 단가만 고치는 꼴**이 기본. +2. 품셈 개정 = 회사가 **DB 갱신으로 내려 줌**(조달청 표준일위대가 연 1회 · 노임 상 · 하반기 · 자재 달마다 · 2025년부터 품셈 상반기 1월 · 하반기 8월). 「품셈 연도 골라 쓰기」를 밝힌 곳 없음. +3. 해외는 「**입력값 → 계산 → 결과**」를 갈라 보이고(InEight), 입력을 **물음 · 고르기**로 받아 줄이 바로 생기게 하고(DESTINI · PlanSwift), **조회 표를 한 줄 종류로**(Sage 1 · 2차원 표) 둠. 라이브러리와 사본의 관계(복사 / 연결 / 새 견적만 반영)를 **한 규칙으로 정해 화면에 밝힘**. +4. 산림(임도 · 사방) 전용 일위대가 도구는 못 찾음 — 산림청은 「산림사업 표준품셈」 PDF만 배포 · 실무는 범용 프로그램이나 엑셀로 보임(추정). 우리 판의 빈자리. + +## 1. 국내 + +| 프로그램 | 사용자가 하는 일 | 화면 모양 | 좋음 | 걱정 | 개정 반영 | 우리 판에 가져올 것 | 주소 | +| --- | --- | --- | --- | --- | --- | --- | --- | +| EST plus (다산소프트) | 기초대가(노임 · 자재 · 중기) → 일위대가 · 단가산출 → 내역서 · 원가계산서 | 풀다운 메뉴 + 그리드 + 트리 · 설계서 9개 동시 비교 | 기초대가 하나로 문서 일괄 | 화면 세부 미확인 | 인터넷 무상 갱신 · 조달청 표준일위대가를 연 1회 EST 형식으로 배포 | 「기초단가 한 곳 → 모든 일위대가 따라 바뀜」 | dasansoft.com/products/?mname=products01&sub=2 · 사진: dasansoft.com/products/images/est01.gif ~ est005.gif | +| EMS7 (고려전산) | 표준품셈 DB에서 일위대가 · 단가산출서 입력 → 설계 · 견적 · 실행 · 기성 · 설계변경까지 | 트리 / 그리드 · 두 프로젝트 비교(일부 추정) | 한 번 입력으로 전 과정 · 조달청 호환(C3R) | 유료 · 배우기 어렵다는 말 | 「수시 업데이트 품셈 개정 · 단가 DB」 온라인 갱신 | 당초 / 변경 비교 보기 | koreasoft.co.kr/m/pub/product/ems.asp · 사진: koreasoft.co.kr/img/ems01.jpg · ems02.jpg | +| Easy 2.0 (건설연구원 — 품셈 책 출판사) | 등록된 표준일위대가 · 재료비 · 노무비 · 경비를 **찾아 가져다 씀** · 엑셀로 바꿔 수정 | 찾기 중심 목록(추정) | 품셈 원문 곁에 만든 곳 · 조달청 호환 인증 | 분야별 따로 판매 | 재료비 달마다 · 품셈 정오표 공지 | 입구 = 「찾아서 가져오기」 | 04info.co.kr | +| XCOST / XCOST Pro (하우코스트) | 프로젝트 → 단가대비표를 자재 화면에 붙여넣기 → 일위대가 목록을 내역 화면에 붙여넣기 → 같은 코드면 일위대가 자동 생성 · 없으면 새 자재코드 → 「품목구분」을 일위대가로 바꿔야 고칠 수 있음 | 듀얼 화면(수량산출서 ↔ 내역서) · 엑셀식 붙여넣기 | 무료판 · 엑셀 호환 | 붙여넣은 일위대가가 처음엔 「자재」로 잠김(숨은 규칙) | 달마다 통합 일위대가 배포(예 2025-11판 = 하반기 노임 + 11월 자재 + 2025.8 품셈 + 10월 조달청 단가) · 조달청 표준공사코드 병기 | 판마다 「무엇이 들어간 판인지」 한 줄 표시 | xcost.me/bbs/board.php?bo_table=tip&wr_id=128 · xcost.me/bbs/board.php?bo_table=data&wr_id=241 | +| SGS2025 (나스) | 기초자원(자재 · 노임 · 견적) → 단가산출(산식 사전 · 선 그리기로 도표) → 일위대가 자동 → 예산내역서 | 위아래 2단 · **작업 화면 = 인쇄 결과물** · 오른쪽 클릭 메뉴 · 관급 / 사급 색 구분 | 화면과 출력물이 같아 실무자가 바로 읽음 | 단가 일괄 인상 · 인하 기능 오용 위험 | 노임 · 건설기계 가격 상 · 하반기 무상 · 「최신 단가 자동 변경 링크」 | 「실무 일위대가표로 보기」를 화면 모양 그대로 | nas.co.kr/nas/product/sgs02.php · nas.co.kr/nas/product/sub_page_sgs/sgs_intro_slide12.php · 사진: nas.co.kr/nas/img/sgs_flow/12_img01.jpg | +| EBS (글로텍) | 기초단가(재료 · 노무 · 경비 · 기계경비) → 일위대가(산출근거 · 호표 · 별표) → 내역서 | 미확인 | 연도별 제경비율 자동 | 공개 정보 적음 | 물가지 DB · 노임 적용 | — | glotechsoft.com/ebs · 사진: glotechsoft.com/resources/img/works/ebs.png | +| EG 견적 (이지테크) | 일위대가 품명 · 규격 입력 → [≡2] 단추로 세부 → Tab 으로 자재 불러오기 / 직접 → 옵션계산 → Ctrl+I 「내현장 일위대가」 → 결정수량 | 총괄표 / 세부 계층 그리드 | 분야(전기) 도움말 자세함 | 단축키 · 기호 단추 의존 | 미확인 | 「내 현장 일위대가」 = 우리 「내가 만든 것」과 같은 갈래 | 2156.co.kr/egHelp/eg9_4.html (검색만) | +| JOINT (아성정보) | 자재 수량 입력 → 재료비 · 노무비 · 경비 자동 · 일위대가 목록 · 단가대비표 일괄 출력 | 미확인 | 조달청 호환 | 홍보성 정보만 | 「표준품셈 입력 제공」 · 정부노임 | — | m.cafe.daum.net/lineone/4QR6/5496 | +| KICA 공사비산정 (정보통신공사협회 · 웹 무료) | 품셈 공종 고름 → 규격 · 단위 · 수량 → **할증 칸** → 기계경비(장비 · 규격 · 사용시간) · 기타경비(10개까지) → [산정하기] → 엑셀 저장 | 웹 폼 · 칸 묶음마다 저장 · 복사 · 수정 · 삭제 | 무료 · 8,187 공종 · 연관 검색어 | 정보통신 전용 | 해마다 「20XX년도 적용 품셈」 · 노임 · 조달청 간접비 기준으로 통째 교체 | **순서 있는 물음 폼**(무엇 → 얼마 → 할증 → 기계) · 「적용 품셈 연도」를 화면 머리에 | ictis.kica.or.kr/tech/testConstructCost/inquiry · koit.co.kr/news/articleView.html?idxno=102431 | +| 조달청 공사원가통합관리(NPCCS) · 통합원가계산 | 내역서 → 자원(자재 · 노무 · 경비) → 일괄 재계산 → 원가계산서 탭 | 웹 탭(추정) | 표준공사코드 · 표준시장단가 · 자원코드 = 공식 기준 | 공동인증서 필요 · 열람 못 함 | 표준일위대가를 해마다 개정 품셈으로 다시 공개 · 자원코드 · 시장단가는 공공데이터포털 반기 | 공식 코드를 곁에 적어 둘 칸 | npccs.g2b.go.kr (검색만) · data.go.kr/data/15151298/fileData.do (검색만) | +| 한국물가정보(KPI) 적산정보 | 표준 · 실용 일위대가 **조회 · 출력** · 표준 일위대가로 간이 내역서 | 공종 분류 트리 → 일위대가 표 | 물가와 연동 | 「미적용 품목」 있음 · 현장마다 다를 수 있음을 스스로 밝힘 | 반기(1월 · 9월) | 「이 값은 표준 · 현장 따라 다름」 한 줄 | kpi.or.kr/www/estimate/ · kpi.or.kr/www/2020/kpi_juseinfo.asp | +| 산림 분야 | 전용 일위대가 도구 못 찾음 · 산림청 「산림사업 표준품셈」 PDF(조림 · 숲가꾸기 · 사방 · 임도 등 7개 사업 통합 · 2024 개정판 2025.1.1 시행) · 공공데이터 「산림토목 사업종별 기준 단가」 | — | 무료 · 통합 | 만드는 도구 없음 | 품셈 PDF 개정판 | 우리 판이 채울 빈자리 | ftims.forest.go.kr/cop/bbs/selectArticleDetail.do?nttId=2696&bbsId=BBSMSTR_000000000001 · data.go.kr/data/15041979/fileData.do (검색만) | + +- 이름만 나오고 근거를 못 찾은 것: STmate · 코스트맨 · 견적왕 · A-Cost · 빌드코스트 · CostPlanner. 한국물가협회는 일위대가 DB(1만 2천여 건)만 확인. +- 품셈 개정 흐름: 국토부 공고 · 한국건설기술연구원 공사비원가관리센터 관리 · 2025년부터 「수요응답형」 상 · 하반기 반영(koscaj.com/news/articleView.html?idxno=112754 · sankun.com 블로그 · codil.or.kr (검색만)). + +### 1-1. 표준 서식 열 (조달청 「설계내역서 작성 매뉴얼」 PDF 본문 확인) + +- 일위대가표 머리 = 번호(호표) + 품명 + 단위 — 예 「1-1 가설전력인입 (일위대가) 식」 · 아래 행 = 자재 행 + 「노무비 배전전공 인」 행. +- 일위대가표 열 = 일위대가표번호 · 자재코드 · 품명 · 규격 · 단위 · 수량 · 재료비 · 노무비 · 경비 · 합계(각 단가 · 금액). +- 일위대가 목록 = 코드 · 품명 · 규격 · 단위 · 재료비 · 노무비 · 경비. +- 내역서 = 품명 · 규격 · 단위 · 수량 · 재료비 · 노무비 · 경비 · 합계(단가 · 금액) · 비고. +- 단가대비표 = 품명 · 규격별 가격 출처(물가자료 · 거래가격 · 유통물가 · 조사가격)를 나란히 놓고 적용단가 고름(열 이름은 추정). +- 실무 흐름 = 단가대비표로 자재 · 노임 · 중기 단가 확정 → 품셈 항목 골라 호표 행 입력(재료 수량은 할증 포함 · 노무 인수 · 공구손료 · 잡재료 % 행) → 행마다 수량 × 단가 → 재료비 · 노무비 · 경비 합 → 일위대가 목록 → 내역서 → 원가계산서. +- 「별도」 표기 = 시멘트 · 모래처럼 일위대가에서 빼고 따로 잡는 재료. +- 주소: kira.or.kr/gongji_2008/조달요청 건축공사 설계내역서 작성 매뉴얼(최종).pdf · ktword.co.kr/test/view/view.php?no=2264 (검색만) + +## 2. 해외 + +| 제품 | 사용자가 하는 일 | 화면 모양 | 표(생산량 · 계수) 연결 | 개정판 관리 | 좋음 | 걱정 | 우리 판에 가져올 것 | 주소 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| RSMeans Data Online | 단가 줄 · assembly 고름 → 「Customize Assembly」 = 구성 줄 Add / **Swap** / Remove · 수량 · 「Insert Custom Line」 · 고친 줄에 **연필 표시** | 견적 그리드 → assembly 펼치면 구성 목록 | 줄마다 **Crew**(예 C-1 = 목수 4 + 인부 1) · **Daily Output**(8시간당 생산량) · 노무시간/단위 = 작업조 시간 ÷ 생산량 · Material / Labor / Equipment 갈라 봄 | 견적 만들 때 **Release(연도 · 분기) · Location · Labor Type** 고름 | 작업조 → 생산량 → 단가 사슬이 눈에 보임 | 직접 넣은 줄은 자동 계산 없음 | 「바꾸기(Swap)」 단추 · 고친 줄 연필 표시 · 판(연도) 고르기 | rsmeans.com/resources/creating-unit-assembly-estimates-rsmeans-online · gordian.com/resources/cost-item-assemblies-improving-accuracy/ | +| Sage Estimating | 물량 뽑기 → 「Save As Assembly」(**Database** 재사용 / **One-time** 이 견적만) → Insert 로 줄 추가 · 오른쪽 클릭 Substitute · 줄마다 계산 방법 | assembly 줄 그리드 + 물량 뽑기 때 **변수 칸** | 줄 계산 기호 I(식) · *(계수) · F(고른 식) · fy(사용자 식) · **Item table 1 · 2차원**(예 경간 × 규격 → 장선) · 「Select-at-takeoff」 = 그때 고르라는 물음 | 「Price Update」 미리보기 · **기본 DB 단가 고쳐도 이미 만든 견적은 안 바뀜**(새 견적부터) · +x% 뒤 −x% 해도 원값 아님 경고 | 2차원 조회 표가 강함 | 한 글자 기호가 암호 | 「표 보고 고르기」를 한 줄 종류로 · 고친 값이 어디까지 퍼지는지 한 줄 | help-sageestimating.na.sage.com/en-us/23_1/Content/assembly/item_grid_assembly_window.htm · …/item_tables_concept.htm · …/22_1/Content/pricing/updating_database_prices_by_category.htm · …/21_1/Content/takeoff/saving_items_as_an_assembly.htm · 사진(추정): …/23_1/Content/Resources/Images/it-2dim.gif | +| InEight Estimate | 다섯 걸음 — ① 결과 **Cost Items** ② **Inputs**(값 · 표 · 글 입력 · 최소 / 최대 검사 · 기본값 · 조건부 보임) ③ **Tables** ④ **Calculations** ⑤ 칸 오른쪽 클릭 「Link this field to Calculation Result」 | assembly 한 장에 블록 — Cost Items 트리 · Inputs · Calculations · Tables · **Notes(근거 · 그림)** · 식 편집기(칸 · 상수 · 연산 · 함수 고르기) | `[Length]*[Width]*[Thickness]/27` · 표는 assembly 전용 · 프로젝트 · **Master** 세 층 · 결과를 생산량 · 자원 수량에 이음 · **틀린 식은 「?」 · 적용 막음** | 라이브러리 = 마스터 · 새 폴더는 마스터를 **복사** · 지역 · 임금 구역 거름 · 「마지막 고친 사람 / 때」 | 입력 → 계산 → 결과 갈라 보기 + 근거 메모 | 초보에게 무거움(변수 이름 · 괄호 문법) | 깨진 결과 「?」 · 로직마다 「근거」 칸 · 입력 기본값 · 범위 검사 | learn.ineight.com/Estimate-On-Premise/Content/15-CI-Assemblies/15%202%20Cost%20Item%20Assembly%20Creation.htm · learn.ineight.com/Estimate/Content/3-LibrarySetup/3%201%20Library%20Overview.htm | +| DESTINI Estimator (Beck) | 물량(면적 · 둘레 · 높이) 넣음 → **물음 4개쯤**(고르기)에 답하면 **오른쪽에 줄이 바로 생김** → 단가 → % 물음(손실)로 수량 더함 | 왼쪽 물음 판 · 오른쪽 줄 목록(실시간) | assembly = 줄 + 고르기 + 식 · 식 이름에 단위를 넣음(`fx_FootingVolumeCUYD`) | Cloud Cost Library(세부 못 찾음) | 「가장 경험 적은 견적자를 위해 설계」 | 로직 짜는 일은 여전히 전문가 몫 | 물음에 답하면 줄이 생기는 마법사 · 이름에 단위 | beck-technology.com/blog/destini-estimator-assemblies-tutorial · …/how-to-build-assemblies-tips-and-tricks · 사진: beck-technology.com/hs-fs/hubfs/Blog%20Images/Assembly%20Map.jpg | +| RIB CostX | 단가 라이브러리에 Rate(코드 · 지역 · 묶음 · 단위) → 복합 단가는 **build-up 시트** · 단가를 워크북에 끌면 식이 자동 | 단가 목록 + 엑셀형 워크북 + build-up 시트 | `XGETRATE` · `XSUMRATE` · `XGETNAMEDCELL`(할증 · %) · 코드 머리 L / P / M / S(노무 · 장비 · 재료 · 외주) | 복합 단가가 원 단가를 **참조** → 노임 오르면 모두 따라 바뀜 · 워크북을 다른 라이브러리로 바꿔 재계산 · 관리자 잠금 · 지역별 라이브러리 | 연결 단가 + 지역 · 연도 라이브러리 통째 바꾸기 | 식 함수가 엑셀 말 | 「단가 판(연도 · 지역) 바꾸기 → 한 번에 재계산」 | rib-software.com/en/blogs/rib-costx-rate-library · …/rib-costx-database-rate-libraries · …/rib-costx-functions | +| CCS Candy | 분석 워크시트에 자원 코드를 치거나 목록에서 끌어 넣음 · 오른쪽 클릭 「Edit/New resource」 | 글 계산 줄 워크시트 + 자원 목록 | 단순 / 복합 자원(9층까지 · 예 「콘크리트 작업조」) · `#` = **아래 줄에 함께 쓰는 생산량**(예 400㎥/일) · `+5%waste` 손실 | 자원 단가 고치면 모든 워크시트 · Nett 단가 갱신 | 손계산처럼 읽힘 · 근거 추적 강함 | 쳐 넣는 문법이라 실수 쉬움 | 「공통 계수 한 줄」(줄마다 반복 대신) · 손실 % 칸 | slideshare.net/slideshow/candy-construction-estimating-valuations-rev-201/10113582 · constructioncomputersoftware.com/products/candy/candy-features/estimating/ (검색만) | +| Causeway Estimating | 라이브러리 자원을 **rate build-up** 에 끌어 넣음 · 노무 · 장비 · 재료를 재사용 「activity resource」로 묶음 | 라이브러리 트리 + build-up 그리드(추정) | 자원에 손실 · 탄소 값 | 자원 단가 고치면 「다음에 쓸 때」 반영(기존은 그대로인 듯 · 추정) | 끌어 넣기 | 연결인지 사본인지 흐림 | — | causeway.com/blog/estimating-efficiency-with-causewayones-library-maintenance-feature-0 | +| Cubit (Buildsoft) | **Rate Sheet** 에서 복합 단가(예 문 한 짝) 짬 · **Simple / Material·Labour 두 모드** | Rate Sheet 그리드 | 라이브러리 가격표 틀 | 못 찾음 | 쉬운 모드 전환 | — | 「쉬운 보기 / 실무 보기」 전환 | bsoft.zendesk.com/hc/en-us/articles/232310448 (검색만) | +| HCSS HeavyBid | Master Estimate · **Activity Codebook** 에서 활동을 가져옴 · 작업조 바꾸기(Edit > Replace Crews) | 공종 → 활동 → 자원 세부 판 | 코드북 활동에 기본 작업조 · 자원 · 생산량 · 물량 계산 · 현장(HeavyJob) 생산 이력 | 회사 코드북을 견적에 **복사** | 현장 실적에서 생산량 | 작업조가 너무 많아짐(업체 글: 12개 → 3개로 줄이라) | 처음엔 몇 개 기본 묶음만 | hcss.com/blog/spring2018-codebooks/ · heavybid.ewksol.com/index.php/2017/05/30/simplify-your-crews-and-activity-codebook/ | +| B2W Estimate | Crew Template 에 구성(노무 · 장비) · 하루 시간 · 기본 생산량 · 재료는 Task / Item 틀에 | 목록 탭 + 세부 탭 | 생산량 단위 UM/DY · DY/UM · UM/PH · UM/MH 등 | 틀을 넣으면 「**carbon copy**」 · 뒤에 원본 고쳐도 안 바뀜 · 생산량 바꾼 **이력(옛 값 → 새 값)** | 복사 규칙이 분명 · 바뀜 기록 | 사본이 원본과 멀어짐 | 옛 값 → 새 값 기록 | help.trimble.com/doc/b2w-estimate/b2w-estimate/about-resources/costing-resources/crew-templates-resource | +| PlanSwift | 부품 · assembly 를 물량 위로 끌면 **변수 창 하나**가 떠 모든 입력을 한 번에 → OK | 틀 판 + 변수 창 | 고급 속성 식 `[!sum(Price Total)]` | 기본 DB | 입력을 한 창에서 다 물음 | 식 문법이 숨겨진 곳에 | 「설계 때 정하는 값」을 한 창에서 | planswift.com/blog/use-parts-assemblies/ | +| ProEst (Autodesk) | DB 에서 단가 줄 · assembly 추가 · assembly 는 「식 변수에서 생성」(교육 목차만) | 미확인(도움말 403) | 지역 단가 · 계수 2만 3천 줄 | 자체 DB 가져오기 / 기본 DB | 큰 시작 DB | 식 작동 공개 설명 적음 | — | autodesk.com/products/proest/overview · learnacc.autodesk.com/proest-estimator (검색만) | +| RIB iTWO 4.0 | 공개 설명 못 찾음(assembly 마스터 → 자원 · 수량 · 원가 계수 · 수량 식 — 추정) | — | — | — | — | 공개 문서 없음 | — | — | + +### 2-1. 해외에서 우리 판에 가져올 것 (갈래 순 · 설계 후보) + +1. 로직 한 장을 **설계 때 정하는 값(입력) → 줄(계산) → 합계(결과)** 세 칸 + **근거 메모** 칸으로(InEight Notes). 브레인 제안서 세 칸(원문 표 · 만드는 줄 · 결과)과 같은 갈래 — 「원문 표」 칸이 근거 메모 몫. +2. 입력은 기본값 · 범위 검사 · 한 창에서 다 물음(InEight · PlanSwift) — 우리 「설계 때 정하는 값」 띠. +3. 물음에 답하면 줄이 바로 생김(DESTINI) — 우리 「물음 셋(무엇 → 어떤 것 → 얼마)」과 같은 갈래 · 근거 있음. +4. **조회 표를 한 줄 종류로**(Sage 1 · 2차원 표 · InEight Tables) — 우리 2단계 「표 보고 고르기」 근거. +5. **공통 계수 한 줄**(Candy `#`) · 손실 % 칸 — 우리 「덧붙임(%)」 카드. +6. 깨진 결과는 「?」 + 저장 막음(InEight) — 우리 「잘못 넣음은 그 카드 안 한 줄」. +7. 라이브러리 ↔ 사본 규칙을 하나로 정해 화면에 밝힘 — B2W(사본 · 원본 고쳐도 안 바뀜) · CostX · Candy(연결 · 따라 바뀜) · Sage(새 견적부터). 우리 「품셈 기본 → 이걸 바탕으로 고치기」(사본)는 B2W 갈래 — 「품셈이 개정돼도 내가 만든 것은 안 바뀜」 한 줄 필요. +8. 고친 줄 표시(RSMeans 연필) · 옛 값 → 새 값 기록(B2W) · 「바꾸기(Swap)」 단추(RSMeans) — 단가 자료 바꾸기 걸음을 줄 하나로. +9. 판(연도 · 지역) 고르기 · 통째 바꿔 재계산(RSMeans Release · CostX) — 국내 KICA 「20XX년도 적용 품셈」 머리와 같은 갈래. +10. 쉬운 보기 / 실무 보기 전환(Cubit Simple · Material/Labour 모드 · 국내 SGS 「화면 = 출력물」) — 우리 「실무 일위대가표로 보기」(읽기) 근거. + +## 3. 용어 표 — 우리 화면 낱말 고를 근거 + +| 뜻 | 국내에서 쓰는 말 | 해외에서 쓰는 말 | 우리 설계 낱말(설계.md 8) | 메모 | +| --- | --- | --- | --- | --- | +| 단가산출 로직 한 벌 | 일위대가 · 일위대가표 · 단가산출서 · 단가산출조서 · 내현장 일위대가(EG) · 실용 일위대가(KPI) | Assembly · Cost Item Assembly · Rate build-up · Composite rate · Recipe · Activity | 일위대가 · 내가 만든 것 · 품셈 기본 | 국내 실무는 「일위대가」가 압도적 | +| 한 벌의 번호 | 호표 · 별표 · 일위대가표번호 · 코드 | Item code · Rate code | (숨김) | 서식 머리 「1-1 …」 꼴 | +| 줄(자원) | 재료 · 노무 · 경비 · 기계경비 · 중기 · 자재 · 노임 | Resource(Labor · Equipment/Plant · Material · Subcontract) · Component · Part | 사람 · 재료 · 기계 · 다른 일위대가 | 국내 서식 열은 재료비 · 노무비 · 경비 | +| 넣을 자리(비목) | 재료비 · 노무비 · 경비 · 직접 / 간접노무비 · 산출경비 | Material / Labor / Equipment cost · Bare cost | 재료값(재료비) · 사람 품값(노무비) · 기계·경비(경비) | 괄호 속 공식어를 같이 두는 것이 실무 이해에 맞음 | +| 입력값 | 설계수량 · 결정수량 · 수량 | Variable · Input · Takeoff dimension · Question / Choice · Select-at-takeoff | 설계 때 정하는 값 | 해외는 「물음」 꼴로도 받음 | +| 고정값 · 기본 단가 | 기초단가 · 기초대가 · 기초자원 · 적용단가 · 단가대비표 | Constant · Default value · Bare cost · Simple resource · Rate | (단가는 마스터에서 자동) | 단가대비표 = 가격 출처 나란히 · 우리 시험 계산의 물가 넷과 같음 | +| 결과값 | 단가 · 합계 · 금액 · 일위대가 단가 | Calculation result · Nett rate · Composite rate · Total | 큰 합계 「1㎡ 만드는 데 … 원」 | — | +| 품 · 작업조 | 품 · 인(예 0.17인/㎡) · 인부 · 공 | Crew · Gang · Labor-hours per unit · Man-hour | 사람 · 「[0.072] 인 일함」 | 「인」 단위 그대로가 실무 말 | +| 생산량 | 작업량 · 시간당 작업량 · 시공량 · 1일 작업량 | Daily Output · Production rate (UM/DY · UM/PH) · Productivity · Applied factor | (결과 식 로직 · 쉬운 길로 못 엶) | — | +| 조회 | 표 · 품셈 표 · 적용 기준 · 조건(횡단경사 등) | Item table(1 · 2D) · Lookup · Table · Codebook · XGETRATE | 「표 보고 고르기」(2단계) | — | +| 할증 · 덧붙임 | 할증 · 재료할증(벽돌 5% 등) · 공구손료(노무비 3%) · 잡재료(2%) · 제경비율 | Factor · Applied factor · Waste % · Markup · O&P · Location factor | 덧붙임(%) | 국내 서식은 공구손료 · 잡재료를 % 행으로 둠 = 덧붙임 카드와 같은 꼴 | +| 산출근거 | 산출근거 · 단가산출서 · 수량산출서 · 「별도」 표기 · 정오표 | Notes · Basis · Rate build-up · Analytical worksheet · Event log · Last changed by/on | 원문 표(제안서 첫 칸) · 실무 일위대가표로 보기 | 근거 = 품셈 원문 번호 + 표 | +| 판(개정) | 20XX년도 적용 품셈 · 상 · 하반기 노임 · 표준일위대가 개정 · 품셈 정오표 | Release · Update · Price update · Library version · Location | (없음 — 후보) | 화면 머리에 「적용 품셈 · 단가 때」 한 줄 후보 | +| 사본 / 원본 | 표준일위대가 ↔ 내현장 일위대가 · 「품목구분」 바꿔야 고침(XCOST) | Database vs One-time(Sage) · Carbon copy(B2W) · Linked rate(CostX) · Master / Standard / Local table(InEight) | 품셈 기본 · 내가 만든 것 · 「이걸 바탕으로 고치기」 | XCOST 의 「잠긴 자재 → 품목구분 바꿈」은 우리 지금 화면의 「본떠 만들기」와 같은 숨은 규칙 — 피할 것 | + +## 4. 걱정 — 남들이 겪은 것 + +- 국내 프로그램은 DB 를 받아 고치는 꼴이라 품셈 식 자체를 고치는 화면이 드묾 — 「코딩 없이 품셈 원문 보며 로직 만들기」는 남이 안 한 영역 · 따라 할 견본이 적음. +- 숨은 기호 · 단축키(Sage 한 글자 계산 기호 · EG [≡2] · Ctrl+I · Candy `#` 문법)는 다 「배우기 어렵다」로 이어짐. +- 사본 방식(B2W · HeavyBid)은 원본 개정과 멀어짐 · 연결 방식(CostX)은 한 곳 고치면 어디까지 퍼지는지 모름 — 어느 쪽이든 규칙을 화면에 적어야 함. +- 단가 일괄 인상 · 인하(SGS) · +x% −x% 함정(Sage) — 숫자를 한꺼번에 바꾸는 단추는 위험. +- 작업조 · 틀이 늘어나면 고르기가 어려워짐(HeavyBid 12 → 3 권고) — 처음 고르기 목록은 짧게. diff --git a/docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md b/docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md new file mode 100644 index 000000000..4d658fab8 --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md @@ -0,0 +1,95 @@ +# 로직판 조사 B — 코딩 모르는 사람이 계산 규칙을 만드는 도구 (35-0 · sub8 · 10-01) + +조사만 · 코드 · git · docs 안 고침. 세 갈래 24개 도구를 공식 문서 · 교육 자료 · 비평으로 봄(인터넷 조사 창 셋 · 주소는 조사 창이 열어 본 것만). 비교 기준 = 브레인 제안서 「세 칸 판(원문 표 · 만드는 줄 · 결과) + 물음 여섯」. + +## 0. 한눈에 — 우리 판에 가져올 것 열 + +| # | 가져올 것 | 본보기 | 우리 판 자리 | +|---|---|---|---| +| 1 | **표 찾기 = 카드 한 장**(표 · 맞출 칸 · 꺼낼 칸 · 못 찾을 때) — 선 잇기 없음 | Zapier Lookup Table(Fallback 값) · Unreal Get Data Table Row(Row Found / Row Not Found) · CPQ 조회 질의(시험할 칸 ↔ 표 칸 → 가져올 칸) | 가운데 ② 「표에서 꺼냄」 | +| 2 | **맞는 줄 0개 · 2개 이상을 늘 검사해 보임** | CPQ(2줄 이상이면 계산 실패) · Airtable(목록 결과) · Workday(맞는 구간 없으면 빈 값) | ② 카드 아래 한 줄 · 저장 전 검사 | +| 3 | **조건은 줄 목록 — 위에서부터 처음 맞는 줄 · 맨 끝 「그 밖」** · 식 대신 고르기 | Glide 만약→그러면→아니면 칸 · Workday 표현식 평가(기본값) · Make Router(fallback 갈래) | ③ 「셈」의 「만약 ~면」 문장 틀 | +| 4 | **범위는 말로 고름(이상 · 미만 · 초과 · 이하) · 빈칸 = 「상관없음」** | DMN 빈칸 `-` · Trisotech 괄호(열림/닫힘이 초보 함정) · Workday 범위 구간 | 왼쪽 표 머리 · ③ 문장 칩 | +| 5 | **겹침 규칙은 고르게 하지 않음** — 「한 줄만 맞아야 함」 하나 · 할증처럼 여러 줄 더하기만 「모두 더함」 | DMN 적중 정책(U · F · C+) — First 는 따지기 어렵다고 Camunda 문서가 경고 | 엔진 규칙 그대로 · 화면엔 안 보임 | +| 6 | **빈틈 · 겹침 자동 검사 단추** — 설계 때 고르는 값의 조합 가운데 표에 줄 없는 것 · 둘 걸리는 것 | Trisotech Method & Style 분석 · Drools 정적 분석(빈틈 · 겹침 · 가려진 줄) | 원문 대조 진행표 · 저장 전 | +| 7 | **견본 값 고정 + 고칠 때마다 즉시 결과 + 한 단계씩 값** | Notion 실시간 미리 보기 · n8n 데이터 고정(pin) · Excel 「수식 계산」(한 단계씩) · Guidewire 요율 워크시트(어느 표 어느 줄 → 얼마) | 가운데 칸 ①~⑤ 칸마다 값 · 오른쪽 결과 | +| 8 | **기대값 시험표** — 넣은 값 → 원문 기대 → 실제 → 통과/실패 · 한 번 누르면 전부 다시 | Oracle Intelligent Advisor 시험 문서(PASS/FAIL) · Drools 시험 시나리오 | 「많은 수를 확인하는 길」 진행표 | +| 9 | **이름 붙인 결과를 다음 로직이 받음 · 정의 순서 · 물고 도는 것은 화면이 막음** | Excel 이름 정의 · Coda 이름 붙인 수식 · ConvertCalculator 변수(뒤에 정의된 것 부르면 오류) | ⑤ 「다음 로직이 부르는 이름」 | +| 10 | **저장마다 판 + 전후 비교 · 적용 시점 있는 값** | Camunda 버전 「Show changes」 · Make 저장마다 판(60일) · Guidewire 요율집 적용일 · 시프티 시급 적용 시점 | 품셈 개정판 · 되돌리기 | + +피할 것 — 선 잇는 흐름 그림(스파게티 · 9-21 지운 흐름 그림과 같은 벽) · 「고급 보기」로 식이 다시 나오는 길(Power Automate · n8n · Node-RED) · IF 겹치기 · 삼항(`? :`) · 적중 정책 고르기 · 이름 없는 변수(Unity A · B · ConvertCalculator QA · VA). + +## 1. 규칙 · 결정 표 + +| 도구 | 조회(표) 연결 | 조건 | 변수 · 입력 정의 | 초보가 막히는 곳 | 검증 | 되돌리기 · 이력 | 우리 판에 가져올 것 | 사진 · 설명 주소 | +|---|---|---|---|---|---|---|---|---| +| Camunda DMN | 표 하나 = 입력 칸 + 출력 칸 + 규칙 줄 · 왼쪽 위 적중 정책 | FEEL `<= 3` · `[3..7.5]` · 빈칸 `-` = 상관없음 | 칸마다 입력식 · 형식 | 적중 정책 고르기(First 는 문서가 경고) · FEEL 괄호 | Play 모드 — 값 넣고 바로 실행 | 버전 스냅숏 · 「Show changes」 비교 | 「모두 더함(C+)」 = 할증 합 | 사진 docs.camunda.io/assets/images/dish-table-8fddefbddf97d60eb60d5ff7fbacebe8.png · https://docs.camunda.io/docs/components/modeler/dmn/decision-table/ | +| Trisotech DMN | 이중선 왼쪽 입력 · 오른쪽 출력 | `(620..660)` · `[75..80]` · `< 620` | 형식에 허용 범위 | 열림 · 닫힘 괄호 · U 표인데 줄 겹침 | 분석 한 번에 빈틈 · 겹침 · 합칠 줄 · 시험 사례 | 못 찾음 | **빈틈 · 겹침 검사 단추** | 사진 methodandstyle.com/blog/dmn-101/loan-prequal-table-600x765.png · https://www.trisotech.com/dmn-101/ · https://www.trisotech.com/dmn-hit-policy-explained/ | +| Drools / Kogito DMN | DMN 표 · 머리 「Manage」 로 값 목록 | FEEL · 열거 · 범위 제약 | 형식에 열거 · 범위 | 다 만들기 전까지 빨간 오류가 계속 뜸 | 정적 분석(빈틈 · 겹침 · 가려진 줄) · 시험 시나리오 기대 대 실제 | 못 찾음 | 「가려진 줄」 경고 | https://docs.drools.org/8.38.0.Final/drools-docs/docs-website/drools/DMN/index.html | +| Oracle Intelligent Advisor | 엑셀 안 규칙표 · 칸 서식으로 조건 / 결론 구분 | `>3` · between · `else` | 속성마다 자료형 먼저 | 선언 안 한 속성은 못 씀 | 엑셀 시험 문서 — 기대 칸 · Run · PASS/FAIL | 못 찾음 | **기대값 + 통과/실패 시험표** | https://docs.oracle.com/en/cloud/saas/intelligent-advisor/using-policy-modeling/Content/Guides/Use_Intelligent_Advisor/Use_Policy_Modeling/Work_with_rules/Write_rules_in_Excel/Create_a_rule_table_in_Excel.htm | +| Guidewire Rating | 요율표(매개변수 칸 → 요율계수) · 요율 루틴이 조회 · 사칙을 단계로 이음 | 일치 · 범위 · 할증 최소 · 최대 % | 매개변수 묶음 | 루틴이 길어져 따라가기 어려움 | **요율 워크시트 — 계산 단계를 하나하나** | 요율집 초안 → 승인 → 적용 · 적용일 | **계산 과정 단계표** | https://docs.guidewire.com/cloud/apd/laslenas/create/topics/c_rate-modifiers.html | +| Salesforce CPQ 가격 규칙 | 조회 질의 = 시험할 칸 + 연산자 + 조회표 칸 → 넣을 칸 | 조건 줄(칸 · 연산자 · 값 고르기) · 모두 / 하나라도 / 직접 조합 | 사용자 정의 개체 = 조회표 | **2줄 이상 걸리면 실패** · 수식 문법 검사 없음 | 따로 없음 | 못 찾음 | 조합 중복 금지 · 「찾을 칸 ↔ 표 칸」 짝 줄 | 사진 res.cloudinary.com/hy4kyit2a/f_auto/fl_lossy/q_70/learn/modules/price-rules-in-salesforce-cpq/formulate-your-conditions-and-actions/images/a11a3fc5b6676b9a81c5e40c9553a668_kix.21xradbunzew.png · https://trailhead.salesforce.com/content/learn/modules/price-rules-in-salesforce-cpq/formulate-your-conditions-and-actions | +| Workday 계산 필드 | 범위 구간 조회(시작 ~ 끝 · 없으면 빈 값) | 표현식 평가 — 위에서 처음 참 · 기본값 | 결과 형식 먼저 · 칸마다 드롭다운 | 조건 순서가 결과를 바꿈 · 함수 종류 혼동 | 못 찾음 | 못 찾음 | **식 대신 고르기 칸 + 기본값 칸** | https://doc.workday.com/admin-guide/en-us/manage-workday/tenant-configuration/calculated-fields/calculated-field-functions/dan1370796323223.html | +| 시프티 실급여정산(한국어) | 근로정보(시급)로 수당 자동 | 고정 항목(연장 · 야간 · 휴일 · 주휴) | 시급마다 적용 시점 | 못 찾음 | **수식이 남는 엑셀로 내보내 사람이 검산** | 적용 시점별 이력 | 적용 시점 있는 값 · 검산 내보내기 | https://shiftee.io/ko/help/article/payroll | + +덕크릭(Duck Creek)은 공개 문서가 모자라 뺌. + +## 2. 노코드 수식 · 계산기 · 견적 규칙 + +| 도구 | 조회(표) 연결 | 조건 | 변수 · 입력 정의 | 초보가 막히는 곳 | 검증 | 되돌리기 · 이력 | 우리 판에 가져올 것 | 사진 · 설명 주소 | +|---|---|---|---|---|---|---|---|---| +| Excel(한국어판) | XLOOKUP(찾을 값 · 찾을 범위 · 돌려줄 범위 · 찾을 수 없음) · 조건 둘이면 겹침 | IF 겹치기 | 이름 정의 · 이름 관리자 · LAMBDA · 데이터 유효성 검사(고르기 목록) | IF 겹치기 · 순환 참조 · #CALC! | **수식 계산 — 밑줄 친 곳을 한 단계씩** · 조사식 창 | 실행 취소 · 파일 버전 기록 | **한 단계씩 계산 보기** | https://support.microsoft.com/ko-kr/excel/detect-formula-errors-in-excel · https://support.microsoft.com/ko-kr/office/xlookup-함수-b7fd680e-6d10-43e6-84f9-88eae8bf5929 · https://support.microsoft.com/en-us/office/lambda-function-bd212d27-1cd1-4321-a34a-ccbf254b8b67 | +| Airtable | 연결 레코드 → 조회 칸에서 가져올 칸 고름 · 조건 거름 | IF 수식 | `{칸 이름}` | 결과가 목록이라 바로 못 셈 · 연결 안 돼 빈칸 · 종류 불일치 #ERROR | 색 · 괄호 짝 표시 | 레코드 값 기록만 · 수식 설정 기록 없음 | 0건 · 여러 건 경고 | https://support.airtable.com/docs/formula-field-overview · https://support.airtable.com/docs/lookup-field-overview | +| Notion(한국어판) | 관계형 · 롤업 | if · ifs · 삼항 | 속성 · let()(중간값) | 「종류 불일치」 · 빈 값 처리 | **편집하며 그 행 결과 즉시 · 오류 자리 표시** | 못 찾음 | 견본 행 결과 즉시 | https://www.notion.com/help/formulas · https://www.notion.com/ko/help/formula-syntax · https://www.notion.com/help/common-formula-errors | +| Coda | 관계 칸(옛 이름 조회 칸) · Filter() | If · Filter | 이름 붙인 수식을 변수처럼 | Filter 이어 쓰기 문법 | 못 찾음 | 문서 기록은 복사만 · 복원은 지원 요청 | **결과에 이름 붙여 넘기기** | https://help.coda.io/formulas/using-lookups | +| Glide | 관계 칸(짝 칸) → 조회 칸(가져올 칸) | **만약 → 그러면 → 아니면 줄 목록 · 처음 맞는 줄** | 계산 칸에 「price + shipping」 처럼 말로 쓰고 낱말마다 실제 칸 짝 | 줄 차례 실수 · 조건 칸 안에서는 셈 못 함 | 못 찾음 | 못 찾음 | **조건 줄 쌓기 + 「말로 쓴 식 + 낱말 짝」** | https://www.glideapps.com/docs/automation/computed-columns/if-then-else-column · https://www.glideapps.com/docs/automation/computed-columns/math-column · https://www.glideapps.com/docs/automation/computed-columns/lookup-column | +| ConvertCalculator | 데이터시트(작은 표) · FINDIFS(값 칸, 조건 칸1, 입력1, …) 정확히 맞는 첫 줄 | IF · IFS | 질문 QA · 변수 VA | 정의 차례(뒤 것 부르면 오류) · 줄 번호 0부터 | 결과 미리 보기 · 오류 표시 | 못 찾음 | **여러 조건으로 표 한 줄** — 뒷길이 × 돌 × 쌓기와 같은 꼴 | https://www.convertcalculator.com/help/building/datasheets/ · https://www.convertcalculator.com/help/building/variables/ | +| Outgrow | 못 찾음 | 삼항 `Q1<4.5 ? 50 : 90` 겹침 | 질문 끌어 놓으면 Q1 · Q2 | 괄호 겹치기 | 못 찾음 | 못 찾음 | 끌어 놓기 입력 · 삼항은 피함 | https://support.outgrow.co/docs/create-calculator-using-conditional-logic | +| Salesforce CPQ 조회 질의 | 조회 개체 + 조회 질의(시험할 칸 · 비교 · 조회 칸) → 가져올 칸 | 가격 조건 줄(기준 종류 = 값 · 변수 · 수식) | 견적 칸 · 요약 변수 | 2줄 이상이면 실패 · 문법 검사 단추 없음 | 임시 수식 칸으로 우회 | 못 찾음 | **「찾을 칸 ↔ 표 칸」 짝 + 「정확히 1줄」 검사** | https://trailhead.salesforce.com/content/learn/modules/price-rules-in-salesforce-cpq/consolidate-price-rules-by-using-lookup-queries · 사진 res.cloudinary.com/hy4kyit2a/f_auto/fl_lossy/q_70/learn/modules/price-rules-in-salesforce-cpq/consolidate-price-rules-by-using-lookup-queries/images/84164c812826823c1b9e557360507574_kix.uodfoac0wvp9.png | + +## 3. 블록 · 흐름(끼우기 · 잇기) + +| 도구 | 조회(표) 연결 | 조건 | 변수 · 입력 정의 | 초보가 막히는 곳 | 검증 | 되돌리기 · 이력 | 우리 판에 가져올 것 | 사진 · 설명 주소 | +|---|---|---|---|---|---|---|---|---| +| Scratch(한국어) | 표 없음 · 리스트 항목뿐 | 「만약 ~라면」 블록 빈칸에 참 · 거짓 끼움 | 「변수 만들기」 → 「~로 정하기」 | 블록이 늘면 큰 식 · 복합 조건이 번거로움 | 블록 누르면 바로 실행 | 못 찾음 | 빈칸에 끼우는 모양 = 조건 칸 생김새 | https://test.scratch-wiki.info/wiki/Kor:변수 | +| Blockly | lists 블록(표 조회 없음) | if / else 블록 | 변수 get / set · 기본은 형식 없음 | 식 · 복합 조건이 길어짐 | 만든 쪽 몫 | 만든 쪽 몫 | **그림자 블록 — 칸에 기본값이 들어 있고 숫자를 바로 침** | https://docs.blockly.com/guides/configure/toolboxes/preset/ | +| Node-RED | Change 노드(JSONata) · Function(JS) | Switch 노드 규칙 · otherwise | msg 속성 · Inject | 조금만 복잡해도 JSONata · JS 로 넘어감 | Debug 노드 → 옆 패널 · Inject 단추 | 편집기 닫으면 실행 취소 사라짐 | 칸마다 값이 바로 보이게 | https://nodered.org/docs/user-guide/nodes · 사진 nodered.org/docs/user-guide/images/node_switch.png | +| n8n | Merge 「맞는 칸으로 합치기」 | IF · Switch(규칙 / 식 · Fallback 출구) | 칸마다 고정 / 식 전환 · `{{ $json.x }}` | 식은 결국 JS 조각 · 형식 다르면 소리 없이 빠짐 | **Test step · 데이터 고정(pin) · 지난 실행 불러오기** | 실행 기록 · 버전 기록 따로 | **견본 입력 고정 · 고칠 때마다 다시 셈** | https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch | +| Zapier | **Formatter 「Lookup Table」 — 왼쪽 키 · 오른쪽 값 · Fallback 값** | Paths(and / or · 왼쪽부터) · Filter | 앞 단계 출력 칸 고름 | 완전 일치 · 대소문자 — 안 맞으면 Fallback | Test step | 판 되돌리기(유료만) | **못 찾았을 때 쓸 값 칸** | https://help.zapier.com/hc/en-us/articles/8496305146765 · 사진 cdn.zapier.com/hc/article_attachments/31169646468749 | +| Make | 못 찾음 | Router + 갈래 Filter · 위 → 아래 · fallback 갈래 | 앞 모듈 결과 끌어 잇기 | 갈래 차례 · 겹친 조건 | Run once · 지난 실행 다시 | **저장마다 판 · 60일 · 저장 안 한 것도 복구** | 조건 갈래 차례 + 「그 밖」 | https://help.make.com/router · https://help.make.com/restore-a-previous-scenario-version | +| Power Automate | 표 조회 블록 없음 | Condition 카드(줄 · and / or) → 「Edit in advanced mode」 | 번개 아이콘 동적 값 | 조금만 복잡해도 `@and(equals(…))` 식이 다시 나옴 | Test → 실행 결과 | 못 찾음 | 쉬운 화면 조건을 글로 보여 주되 글로 고치게는 안 함 | https://learn.microsoft.com/en-us/power-automate/use-expressions-in-conditions | +| Unreal Blueprints(한국어 문서 있음) | **Get Data Table Row — 표 · 줄 이름 → Row Found / Row Not Found 두 출구** | Branch(분기) | 변수 · 입력 / 출력 핀 · 핀 기본값 | **「말 그대로 스파게티」 · 몇 줄 식이 노드 30~40개 · 정리가 따로 배울 기술** | 중단점 · 한 단계 실행 · 값 지켜보기 | Ctrl+Z · 판은 바깥 도구 | **Math Expression — 식을 글로 치면 핀이 저절로** | https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Utilities/GetDataTableRow · 사진 d1iv7db44yhgxn.cloudfront.net/documentation/images/f44ed18c-0c2e-4aea-8c18-815b5850e7ee/mathnodeexample.png | +| Unity Visual Scripting | — | If · Formula | Formula 인수 A · B …(최대 10) | 인수 이름이 A · B 라 뜻 모름 | 실행 중 포트 값 | 편집기 실행 취소 | 식 한 칸 + 입력 칸 목록 · 이름은 뜻 있는 말로 | https://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/manual/vs-formula.html | + +블록 · 흐름 방식이 수식 · 규칙 정의에 쓰일 때 + +- 좋음 — 문법 오류가 안 생김(끼워지는 칸만 끼워짐) · 갈래와 「못 찾음」 출구가 눈에 보여 빠뜨리기 어려움 · 칸마다 중간값 보이기 좋음. +- 나쁨 — 산술식은 블록 · 노드로 만들면 폭발적으로 늘어남(Unreal · Unity 도 결국 「식 한 칸」 노드를 둠) · 선 정리가 또 하나의 일(스파게티 · 스크롤 · 검색 어려움) · 복잡해지면 식(JSONata · `{{ }}` · `@and(…)`)이 다시 나오고 초보는 거기서 막힘. +- 우리 판 뜻 — 흐름 그림은 「어느 결과가 어느 줄로 가나」 정도의 읽기만 · 만들기는 카드 + 문장 칩. + +## 4. 낱말 대조 + +| 도구 | 입력 | 고정값 | 결과 | 조회 | 조건 | +|---|---|---|---|---|---| +| DMN(Camunda · Trisotech · Drools) | Input / Input Data | Literal(상수 칸 따로 없음) | Output | Decision Table + Hit Policy | Input Entry(unary test) | +| Oracle IA | Base attribute | Value | Conclusion | Rule table | Condition | +| Guidewire | Parameter | Factor(요율계수) | Rate / Premium | Rate table | Match(일치 · 범위) | +| Salesforce CPQ | Tested field | Value | Target field | Lookup query / object | Price condition | +| Workday | Source field | Default value | Return value | Lookup Range Band | Condition | +| 시프티(한국어) | 근로정보 · 시급 | 시급(적용 시점) | 실급여정산 | — | — | +| Excel(한국어) | 셀 · 이름 상자 · 데이터 유효성 검사 | 상수 · 이름 정의 | 수식 결과 | XLOOKUP(찾을 값 · 찾을 범위 · 돌려줄 범위) | IF | +| Notion(한국어) | 속성 | 값 | 수식 | 관계형 · 롤업 | if · ifs | +| Glide | 칸 · 사용자 정보 | 짝지은 값 | 계산 칸 | 관계 → 조회 | 만약 · 그러면 · 아니면 | +| ConvertCalculator | 질문(QA) | 변수(VA) | 수식 | 데이터시트 · FINDIFS | IF · IFS | +| Scratch(한국어) | 변수(「변수 만들기」) | 칸에 바로 쓴 숫자 | 값 블록 | 리스트 항목 | 만약 ~라면 / 아니면 | +| Zapier | Lookup Key | Value | step output | Lookup Table | Paths · Filter / Fallback value | +| n8n | input item | Fixed | output | Merge(맞는 칸) | IF · Switch / Fallback | +| Unreal(한국어) | 변수 · 입력 핀 | 기본값 · Literal | 출력 핀 · Return Value | Get Data Table Row | Branch(분기) | + +우리 판 낱말 후보(브레인 · 사용자 결정 몫) — 입력 = **설계 때 고름** · 고정값 = **늘 이 값** · 결과 = **꺼낼 값**(표) / **결과**(로직) · 조회 = **표에서 찾기** · 조건 = **만약 ~면 / 그 밖** · 빈 조건 = **상관없음** · 못 찾음 = **맞는 줄 없음** · 여러 줄 = **두 줄이 걸림**. 제안서 낱말(받는 값 · 표에서 꺼냄 · 셈 · 줄로 보냄)과 겹치지 않게 하나로 맞출 것. + +## 5. 제안서(세 칸 판)에 비춰 본 것 + +- 맞음 — 표를 왼쪽에 그대로 두고 머리 칸에 역할(설계 때 고름 / 꺼낼 값)을 색으로 붙임 = OPA 칸 서식 · DMN 입력 / 출력 칸과 같은 생각. 식 대신 칩 고르기 = Workday · Glide 와 같은 길. +- 더할 것 — ② 카드에 「맞는 줄 없음 / 두 줄이 걸림」 줄(0 · 1 · 2+ 검사) · ③ 조건을 「위에서 처음 맞는 줄 + 그 밖」 목록으로 · 「빈틈 검사」 단추(설계 때 고르는 값 조합 가운데 표에 없는 것) · 기대값 시험표(원문 숫자 → 실제 → 통과 / 실패) · 가운데 칸 단계마다 값(계산 과정 단계표). +- 조심할 것 — 할증 · 나누기 같은 산술을 블록으로 쪼개지 않음(한 문장 틀 + 숫자 칩) · 「고급」 으로 식을 다시 꺼내는 길을 두지 않음 · 판 · 전후 비교 · 적용 시점(품셈 연도판)은 처음부터 자리를 잡음(도구 대부분이 설정 이력이 약해 뒤에 붙이기 어려움). diff --git a/docs/raw/M01_쉬운단가/설계.md b/docs/raw/M01_쉬운단가/설계.md new file mode 100644 index 000000000..dbb59d778 --- /dev/null +++ b/docs/raw/M01_쉬운단가/설계.md @@ -0,0 +1,98 @@ +# 쉬운 단가산출 설계 (PLAN 34-2 · 브레인 정함 · 10-01) + +근거 = 같은 폴더 `쉬운단가_검토_A_데이터.md`(형식 · API · 쓰임 세기) · `_C_갈래.md`(실무 모양 · 갈래 다섯) · `_D_지난시도.md`(지난 시도 열넷 · 원인 다섯). 사용자가 바꿀 수 있음. + +## 1. 정함 + +1. 갈래 = **문장 카드**(C 문서 B) — 줄 하나 = 문장 하나 「【사람】 석공 이 [0.072] 인 일함 = 18,643 원」. 입구 = 비슷한 것 찾기(E) · 줄 추가 = 물음 셋(무엇 → 어떤 것 → 얼마) · 아래 접힌 「실무 일위대가표로 보기」(읽기만). +2. 카드는 묶음 + 소계 — 사람 · 재료 · 기계·경비 · 다른 일위대가 · 그 아래 덧붙임(%) · 맨 위 큰 합계 「1㎡ 만드는 데 53,788 원」. +3. 품셈 기본 로직(정본)은 읽기만 — 큰 단추 하나 「이걸 바탕으로 고치기」 = `/logic/copy` 뒤 바로 그 복사본을 고치는 화면(사용자 확정 09-21 「정본 못 고침」을 의식하지 않게). +4. 쓰기 길 = `/logic/new` · `/logic/copy` · `/logic/edit` · `/logic/delete` 만. **`/save` 안 씀**(정본을 가리지 않음). +5. 금액 = 고칠 때마다 서버 `/calc` 를 뒤에서(입력 멈춘 뒤 0.3초 · 최신 응답만) · 기다리는 동안 옛 금액을 흐리게 — 계산 자리 ③ 서버 단독(엔진 한 벌). +6. 1단계 범위 = 사람 · 재료 · 기계 · 다른 일위대가 · 덧붙임(%) 카드의 **숫자 수량** 추가 · 고치기 · 지우기 · 차례 바꾸기. 식 수량 · 표 찾기 · 조건 · 그 밖 덧줄 = **잠금 카드**(쉬운 말 한 줄 + 값 + 「숫자로 바꾸기」 확인 한 번). 설계 값 = 위 띠 「설계 때 정하는 값」(시험값만 바꿔 금액 봄 · 새로 만들기는 지금 화면). 결과 식 로직(작업량 27개)은 목록에 「쉬운 길로 못 엶」. +7. 2단계 = 「표 보고 고르기」(잠금 카드의 표를 그림으로 보여 칸을 눌러 고름) → 그다음 조건 카드. +8. 낱말 — 화면에 **키 · 식 · 호표 · 덧줄 · 비목 · 중간 값 · 끝수 · 정본 · 자체 · 별칭** 안 씀. 쓰는 말: 사람 · 재료 · 기계 · 다른 일위대가 · 덧붙임 · 사람 품값(노무비) · 재료값(재료비) · 기계·경비(경비) · 품셈 기본 · 내가 만든 것 · 설계 때 정하는 값 · 크기(규격). +9. 덧붙임 카드의 넣을 자리 기본 = 마스터에서 같은 이름 덧줄이 가장 많이 쓴 비목 · 카드 안 고르기로 바꿈. +10. 되돌리기 늘 보임(Ctrl+Z) · 줄 지우기는 안 물음 · 로직 지우기만 물음(쓰는 곳 먼저 보임 · 쓰는 곳 있으면 못 지움 까닭 한 줄) · 저장 안 하고 닫으면 물음 · 「저장 안 함」 표시. +11. 잘못 넣음은 그 카드 안 한 줄 — 숫자 아님 · 0 · 음수 · 빈 이름 · 같은 이름(내가 만든 것 안) · 너무 큼(단위별 어림 기준 하나 — 사람 1단위에 10인 넘음 등 · 물음 꼴 경고만). +12. 지금 화면 · `LogicLab_*` 파일은 안 고침 — 부르는 것은 덜 바뀌는 `Logic_Api` · `Api_Fetch` · `Logic_Money` · `Logic_Text` · `ui_template` 만. + +## 2. 파일 · 맡은 창 (모두 `M01_MasterData/EasyCalc/` · 파일마다 700줄 안 · 글 [한, 영] 짝은 각 파일 머리 · css 는 파일마다 따로) + +| 파일 | 맡음 | 하는 일 | +| --- | --- | --- | +| `M01_EasyCalc_Model.ts` | sub7 | 로직 줄 ↔ 카드 바꾸기 · 카드 더하기 · 고치기 · 지우기 · 차례 · 검사(쉬운 말) · 되돌리기 기록 · 저장 안 함 표시 — DOM 없음 | +| `M01_EasyCalc_Api.ts` | sub4 | 서버 길 감싸기(목록 · 찾기 · 열기 + 자동값 · 시험 계산 뒤에서 · 새로 · 본뜨기 · 고치기 · 지우기 · 쓰는 곳) · 403 · 409 · 422 를 쉬운 말로 · 기계 기종 → 부를 기계경비 로직 · 넘길 값 | +| `M01_EasyCalc_Entry.ts` + `_Style.css` | sub1 | 큰 창 틀 · 시작 화면(무엇과 비슷한가요? 찾기 · 내가 만든 것 · 빈 종이로 새로) · 위 띠(이름 · 크기 · 단위 · 큰 합계 · 되돌리기 · 저장 · 지우기 · 닫기) · 화면 사이 오감 · 모든 파일 잇기(마지막에 붙이는 창) | +| `M01_EasyCalc_Cards.ts` + `.css` | sub2 | 카드 그리기 · 세 묶음 + 소계 · 문장 칸 · 잠금 카드 · 지움 · ▲▼ · 카드 안 경고 · [+ 사람] [+ 재료] [+ 기계] [+ 다른 일위대가] [+ 덧붙임] | +| `M01_EasyCalc_Pick.ts` + `.css` | sub3 | 물음 셋 고르기 창(무엇 → 어떤 것 찾기 · 목록 → 얼마) | +| `M01_EasyCalc_Sheet.ts` + `.css` | sub5 | 실무 일위대가표 보기(읽기) · 설계 때 정하는 값 띠 | +| `M01_EasyCalc_Table.ts` + `.css` | sub8 | 2단계 표 보고 고르기 | + +## 3. 서로 맞출 모양 (이 이름 · 칸 그대로) + +```ts +// Model (sub7) +export type CardKind = "person" | "material" | "machine" | "logic" | "percent" | "locked"; +export type CostKind = "노무비" | "재료비" | "경비"; +export interface EasyCard { + id: string; // 화면 번호 · 저장 안 함 + kind: CardKind; + name: string; // 보이는 이름(호표 · 덧줄 이름) + spec: string; // 크기(규격) · 없으면 "" + unit: string; // 인 · ㎥ · 시간 · % … + qty: number | null; // 숫자 수량 · 식이면 null + qtyFormula: string | null; // 잠금 식(원문 그대로) · 숫자면 null + cost: CostKind | null; // 넣을 자리 · 다른 일위대가 · 기계는 null(엔진이 나눔) + percentBase: CostKind | "사람줄합" | null; // 덧붙임 바탕 · 덧붙임 아니면 null + element: unknown; // 호표 「요소」 칸 값 그대로(인력 LB 키 · 재료 검색어 묶음 · 로직 부름 글) + lockedWhy: string | null; // 잠금 까닭 쉬운 말 · 아니면 null + source: { part: "호표" | "덧줄"; index: number } | null; // 원래 자리 · 새 카드 null + raw: unknown; // 원래 줄 통째 — 카드가 안 다룬 칸을 저장 때 그대로 살림 +} +export interface EasyDoc { + key: string | null; // 새 로직 null + version: string | null; // 판본(409 대조) + isBase: boolean; // 품셈 기본 = 읽기만 + name: string; spec: string; resultUnit: string; // 결과단위 「원/㎡」 + inputs: LogicInput[]; // 설계 때 정하는 값 + cards: EasyCard[]; + row: LogicRow; // 원래 로직 줄(새 로직은 최소 칸 줄) +} +toDoc(row, meta: { key; version; isBase }): EasyDoc +toRow(doc): LogicRow // 카드 → 호표 · 덧줄 · 필요한 입력(기계 「지역」 등) · 안 다룬 칸 보존 +addCard(doc, pick: PickResult): EasyDoc · updateCard(doc, id, patch) · removeCard(doc, id) · moveCard(doc, id, -1|1) +checkCard(card, doc): string | null // 쉬운 말 경고 한 줄 +class EasyHistory { push(doc); undo(): EasyDoc | null; canUndo; dirty; markSaved() } +export interface PickResult // Model 에 둠 · Pick 이 가져다 씀 + +// Pick (sub3) +// PickResult { kind: "person" | "material" | "machine" | "logic"; name: string; spec: string; unit: string; element: unknown; qty: number | null; needInputs?: LogicInput[] } +openEasyPick(kind?: PickResult["kind"]): Promise + +// Api (sub4) — CalcAnswer · LogicRow · LogicInput 은 Logic_Api 것 그대로 +listEasy(q: string): Promise // 이름 · 품셈 기본/내가 만든 것 · 결과단위 · 쉬운 길로 못 엶 여부 +openEasy(key): Promise<{ row; version; isBase; trial: Record }> // 자동값 포함 +calcLater(row, trial, onDone: (ans: CalcAnswer | null, plain: string | null) => void): void // 0.3초 · 최신만 +newEasy(row) · copyEasy(key) · editEasy(key, version, row) · deleteEasy(key, version) · usesOf(key) +listMachines(q): Promise<{ 분류번호: string; 이름: string; 규격: string; 단위: string }[]> +machineElement(기종 분류번호): Promise<{ element: string; needInputs: LogicInput[] }> +plainError(e): string // 403 · 409 · 422 · 날식 걸름 + +// Cards (sub2) +renderCards(host, doc, ans: CalcAnswer | null, on: { change(doc): void }): void // 더하기 · 다시 고르기(openEasyPick) · 숫자로 바꾸기 · 지움 · ▲▼ 를 Cards 가 직접 하고 change 로 알림 + +// Sheet (sub5) +renderSheet(host, head: { name: string; resultUnit: string }, ans: CalcAnswer | null): void // 실무 일위대가표(명칭 · 규격 · 수량 · 단위 · 합계 · 노무비 · 재료비 · 경비) +renderTrialStrip(host, inputs, trial, onChange(trial)): void + +// Table (sub8) +openEasyTable(card, doc): Promise // 고른 표 찾기 식(잠금 카드의 새 qtyFormula) · 취소 null +``` + +## 4. 모두 지킬 것 + +- 지금 화면 · `LogicLab_*` · `Logic_Edit` 안 고침 · 폴더 밖 참조는 `LogicLab.ts` 의 두 줄만. +- 시험 · 검증 저장은 자기 폴더 `resources/master_data/로직_자체.json` 에만 · 끝나면 화면 · API 로 지움 · 파일이 남으면 커밋 전에 `tmp/` 로 옮김 — **`resources/master_data/` 를 커밋에 넣지 않음**. +- 마스터 정본 파일 · 표 · 요소 안 고침 · 시험은 진짜 마스터 내용에 기대지 않음(견본 줄을 시험 안에 둠). +- 걸음 재기 — 대표 일 여섯(① 새 로직 ② 줄 추가 ③ 수량 ④ 단가 자료 ⑤ 줄 지우기 ⑥ 로직 지우기 · 되돌리기) · 목표 여섯 합 36 안쪽. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md new file mode 100644 index 000000000..5b3251996 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md @@ -0,0 +1,251 @@ +# 쉬운 단가산출 검토 A — 데이터 · 계산 지도 (34-1 · sub4) + +조사만 · 파일 안 고침 · 저장·지우기 API 안 부름. 세기는 `resources/master_data/로직_*.json` 56 파일 · 로직 1,469 줄(2026-10-01 sub_laptop_4 판). +다시 세기 — `./venv/Scripts/python.exe tmp/쉬운단가_검토_A_세기.py` · `…_단계.py` · 최소 칸 시험 `…_최소칸.py`(메모리만 · 파일 안 씀). + +## 결론 셋 + +1. **형식 · 자리** — 로직 = JSON 한 줄(머리 + 입력 · 중간 · 호표 · 덧줄 · 결과 · 끝수). 층은 마스터 하나뿐(회사 · 개인 층 없음 · 프로젝트는 계산 때 닫힌 사본). 새 길이 쓸 집 = `로직_자체.json`(키 `GX`) — 지금 **0 줄 · 파일도 없음**. 기존 API 만으로 추가 · 고치기 · 지우기 · 시험 계산 · 고르기 후보 다 됨 → **새 API 불필요**. +2. **「인력 · 재료 · 기계 줄 × 수량 × 단가」 만으로 되는 로직 = 1.8 %(26)** · 엄격히(입력 · 중간 · 덧줄 없이 맨 수) 0.1 %(1). 마스터는 **표 찾기가 95 %(1,399)** — 표 찾기를 더하면 29.5 % · 기계(기계경비 로직 부름) 41.2 % · % 덧줄 58.3 % · 조건(만약) 89.7 % · 나머지 10.3 %. +3. **함정 둘** — ① 검사는 통과하는데 계산이 멈추는 꼴(호표 종류 「기계」 + `EQ` 키 → 「Decimal * dict」) · 기계는 반드시 「기계 시간당 경비 로직」 부르기로. ② 지금 화면 [저장](`/save`)은 정본 파일까지 고침 — 새 길은 `/logic/new · edit · delete`(자체만 · 정본 403)로 묶어야 안전. + +--- + +## 1. 저장 형식 · API · 권한 · 층 + +### 1-1. 자리 + +| 무엇 | 자리 | 근거 | +| --- | --- | --- | +| 정본 로직 | `resources/master_data/로직_<원문>_장_<장 제목>.json` 56 파일 · 산림 330 · 건설 1,139 | `_틀.md:22` | +| 자체 로직(새 길) | `resources/master_data/로직_자체.json` 한 파일 · 없으면 서버가 머리만 두고 만듦 | `M01_MasterData_Store_Make.py:18,135` | +| 키 | `_키대장.json` 다음 번호 — 정본 `GF`(산림) · `GC`(건설) · 자체 `GX` · 화면은 키를 안 만듦 | `_틀.md:33,40` · `_화면_계약.md:99` | +| git | `resources/master_data/` 는 git 추적(정크션 아님) · `로직_자체.json` 은 ignore 아님 → 만들면 커밋 대상 | `git check-ignore` 빈 답 | + +파일 머리 `{그룹: "로직", 원문, 차례, 판, 부문?, 줄: [...]}` — 줄 하나가 로직 하나. + +### 1-2. 칸 이름 (로직 한 줄 · 열 차례 그대로) + +| 칸 | 모양 | 줄 수 | 비고 | +| --- | --- | --- | --- | +| 키 | `GF000123` | 1,469 | 서버가 줌 | +| 원문번호 | 절 번호 `13-4-1` · 자체는 빈 글 가능 | 1,469 | 칸은 반드시 | +| 구분 · 상세구분 | 「산림품셈」·「13장 구조물」 · 자체는 서버가 「자체」·장 | 1,469 | 서버가 넣음 | +| 이름 | 글 | 1,469 | 필수 | +| 결과단위 | 「원/㎡」(돈 로직) · 「㎥/시간」(돈 아닌 로직) | 1,469 | `원` 으로 시작하면 돈 | +| 출처 | 「산림품셈 13-4-1」 · 「건설품셈 공통 8-4-1」 · 「자체」 | 1,469 | 모양 검사 | +| 소유 | 「공용」(정본 전부) · 「현장」(자체 기본) | 1,469 | 권한 아님 · 표시 | +| 비고 | 글 | 1,395 | 선택 | +| 입력 | `[{이름, 설명?, 단위?, 고르기? \| 범위?, 출처?, 비고?}]` | 1,469 | 빈 목록 가능 | +| 중간 | `[{이름, 식, 출처?}]` | 1,469 | 빈 목록 가능 | +| 호표 | `[{종류, 요소, 이름, 단위, 수량, 비목?, 출처?, 비고?}]` | 1,442 | 돈 로직 | +| 덧줄 | `[{이름, 식, 비목, 출처}]` | 1,442 | 빈 목록 가능 | +| 결과 | `{식, 출처}` | 27 | 돈 아닌 로직 | +| 끝수 | `null` · 글자(설명만) · 묶음 `{대상, 자리, 방법}` | 1,469 | 마스터는 null 1,432 · 글자 37 · 묶음 0 | +| 시험입력 | `{입력 이름: 값}` | 193 | 일괄 시험 전용 | + +근거 — `_틀.md:166-243`(7장) · `_틀.md:245-258`(8장 식) · `check_master.py:81`(로직 필수 칸). + +### 1-3. 짧은 예시 — 가장 단순한 정본 `GF000208` 암거이음받침 채움재(T=20㎜) + +```json +{ + "키": "GF000208", "원문번호": "12-34-4", "구분": "산림품셈", "상세구분": "12장 철근콘크리트", + "이름": "암거이음받침 채움재(T=20㎜)", "결과단위": "원/㎡", "출처": "산림품셈 12-34-4", "소유": "공용", + "비고": "해석: 원문 재료비 「JOINT FILLER」 뿐 — ㎡당 1㎡ · 설치 품 원문 없음", + "입력": [], "중간": [], + "호표": [{ "종류": "재료", "요소": { "구분": "도료·방수·접착", "상세구분": "방수·실링", "검색어": "JOINT FILLER" }, + "이름": "JOINT FILLER(T=20㎜)", "단위": "㎡", "수량": "1", "비목": "재료비" }], + "덧줄": [], "끝수": null +} +``` + +### 1-4. 불러오기 · 저장 · 지우기 API (`/api/m01`) + +| 일 | 길 | 받음 → 줌 | 근거 | +| --- | --- | --- | --- | +| 목록 | `GET /logics` | `sub · detail · q · blocked · owner` → `{logics: [{file, 키, 이름, 결과단위, 소유, blocked, reasons}]}` | `Router.py:180` · `Store.py:336` | +| 하나 | `GET /logic` | `key` → `{file, version, logic, blocked, reasons, prices}` | `Router.py:187` · `Store.py:376` | +| 견본 입력 | `GET /logic/auto` | `key` → `{값}` | `Router.py:192` | +| 새로 | `POST /logic/new` | `{logic, owner?}` → `{file, version, key, logic}` | `Router.py:240` · `Make.py:207` | +| 본뜨기 | `POST /logic/copy` | `{key, 이름?, owner?}` → 같음(정본도 됨) | `Router.py:245` · `Make.py:215` | +| 고치기 | `POST /logic/edit` | `{key, version, logic}` → `{file, version, logic}` · 정본 403 | `Router.py:250` · `Make.py:225,149` | +| 지우기 | `POST /logic/delete` | `{key, version}` · 정본 403 · 부르는 로직 · 담은 조합 있으면 422 | `Router.py:255` · `Make.py:274` · `_화면_계약.md:113` | +| 식으로 새로 | `POST /logic/draft` | `{text, decided, head?, save?}` | `Router.py:278` | +| 복사해 만들기 | `GET /logic/formula` · `POST /logic/formula/save · preview` | 별칭 꼴 식 | `Router.py:260-273` | +| 파일 묶음 저장 | `POST /save` | `{files: [{file, version, changes: [{op: edit·add·delete, key, row}]}]}` — **소유 막음 없음 · 정본 파일도 고침** | `Router.py:235` · `Store.py:632,665` | +| 이 로직 담은 조합 | `GET /logic/combos` | `key` | `Router.py:285` | + +- 판본 대조 — `version` = 파일 해시 16자 · 다르면 409 `{stale}`(`Store.py:52,667`). +- 검사 — 저장 직전 메모리에서 「고친 뒤 **새로 생긴** 걸림」만 막음(422 `{errors}`) · 하나라도 걸리면 아무것도 안 씀(`Store.py:665-699` · `Store_Cache.py:209`). +- 지금 화면 [저장]은 `/save` 길(`M01_MasterData_UI_LogicLab.ts:319,335`) — 정본도 바로 고침. + +### 1-5. 권한 + +- `/api/m01` 통째 = **시스템 관리자만**(`main.py:639-640` · `system_admin_only`) · 아니면 403. 회사 관리자 · 일반 사용자는 못 들어옴. +- `소유`(공용 · 현장)는 권한이 아니라 표시 · 고치기 막음은 「파일이 `로직_자체.json` 인가」 하나(`Make.py:149`). + +### 1-6. 층 + +| 층 | 로직 있나 | 근거 | +| --- | --- | --- | +| 마스터 | 있음 — 위 56 파일 + 자체 한 파일 | `_틀.md:3` | +| 회사 · 개인 | **없음** — M02 층 양식 종류는 `table · drawing · structure · area · material` 뿐 | `M02_Template_Layers.py:30` | +| 프로젝트 | 로직 원본 없음 · 집계 항목이 일위대가 조합의 로직 + 하위 로직 + 표 + 요소를 **닫힌 사본** `단가.json` 으로 떠서 계산(마스터 현재값 안 읽음) | `M02_Item_Prices.py:1-14,211` | + +→ 새 로직을 프로젝트에서 쓰려면 일위대가 조합(`일위대가조합.json` · `UA`)에 담고, 프로젝트가 사본을 다시 떠야 보임. + +--- + +## 2. 구성 요소 종류 + +지금 화면 낱말 — 「호표 줄 추가 · 설계 값 추가 · 표 찾기 추가 · 덧줄 추가」(`M01_MasterData_UI_Logic_Text.ts:127-130`). + +| # | 종류 | 무엇 | 사용자가 정해야 하는 칸 | 로직 수 | 줄 수 | +| --- | --- | --- | --- | --- | --- | +| 1 | 머리 | 로직 이름표 | 이름 · 결과단위 · 출처(「자체」 가능) · (원문번호 · 비고 · 끝수 선택) | 1,469 | — | +| 2 | 설계 값 · 고르기 | 설계자가 목록에서 고름(돌 종류 · 지역 · 기계) | 이름 · 고르기 목록 · (설명) | 1,090 | 2,603 | +| 3 | 설계 값 · 수 | 설계자가 수를 넣음(면적 · 높이) | 이름 · 단위 · (설명) | 392 | 752 | +| 4 | 설계 값 · 범위 | 수 + 원문 범위 막음 | 이름 · 범위 [아래, 위] | 134 | 153 | +| 5 | 호표 · 인력 | 직종 노임 × 품 | 직종(LB 키) · 수량 · 비목(노무비) · 이름 · 단위(인) | 1,378 | 3,462 | +| 6 | 호표 · 재료(고르기 조건) | 자재품목에서 검색어로 찾은 값 × 수량 | 구분 · 상세구분 · 검색어(· 규격 · 이름) · 수량 · 단위 · 비목(재료비) | 230 | 672 | +| 7 | 호표 · 재료(유가 키 `MO`) | 휘발유 · 경유 등 | 유가 키 · 수량 | — | 51 | +| 8 | 호표 · 기계 | **종류 「로직」** + `로직(GC00026x, 기계='분류번호', 지역=지역 …)` · 비목 칸 없음 → 노무비·재료비·경비로 나눠 얹음 | 기종(분류번호) · 지역(설계 값으로 넘김) · 수량(시간) | 500 | 1,043 | +| 9 | 호표 · 다른 로직 | 하위 로직 결과를 단가로(합판거푸집 · 철근가공 …) | 로직 키 · 넘길 입력 · 수량 | 13 | 32 | +| 10 | 표 찾기 | `찾기(표키, 조건=값…).값칸` — 소요량 · 계수 표에서 품·비율을 꺼냄 | 표 · 조건마다 값(고정 글 또는 설계 값) · 값 칸 | **1,399** | 중간 2,667 · 수량 2,593 · 덧줄 255 | +| 11 | 중간 값 | 「이름 = 식」 — 표 찾기 결과 보관 · 시공량 나누기 · 할증률 | 이름 · 식 | 1,182 | 3,166 | +| 12 | 덧줄 · % 줄 | 호표 밖 금액 — 「공구손료 및 경장비」 389 · 잡재료 · 잡품 · 소모자재 | 이름 · 기준(비목 합 또는 고른 인력 줄) · 비율(수 또는 표 찾기) · 비목 | 555 | 602 | +| 13 | 덧줄 · 그밖 | 기계손료(`EQ.손료계수 × 가격`) · 주재료비 × % · 제잡비 | 이름 · 식 · 비목 | — | 49 | +| 14 | 할증 | `수량 × (1 + 율/100)` — 율은 표 찾기 · 만약 | 율(수 또는 표) · 걸리는 줄 | 153 | 305 식 | +| 15 | 조건 · 만약 | `만약(조건, 참, 거짓)` · 비교 `== <=` | 조건(설계 값 == 값) · 참 값 · 거짓 값 | 537 | 중간 593 · 수량 498 · 덧줄 41 | +| 16 | 끊기 · 최소 · 최대 | 올림 · 버림 · 반올림 · 최소 · 최대 | 대상 · 자리 | 134 | 중간 188 · 결과 26 | +| 17 | 틀 키 `{입력}` | `EQ:{기계}.가격` · `LB:{직종}` · `MO:경유:{지역}` · 재료 조건 `"규격": "{관경}"` | 설계 값 이름 | 91 | — | +| 18 | 다른 로직 부름(식 안) | `로직(GF000114)` — 작업량 등 돈 아닌 로직 | 로직 키 · 넘길 입력 | 40 | 중간 40 · 덧줄 1 | +| 19 | 돈 아닌 결과 식 | 작업량 · 시간당 처리량(다른 로직이 부름) | 결과 식 · 결과단위 | 27 | 27 | +| 20 | 줄 금액 집기 | 덧줄에서 `줄.'호표 줄 이름'` | 줄 이름 | 3 | 4 | +| 21 | 끝수 묶음 | 계 끝 끊기 `{대상: 계, 자리: 0, 방법: 버림}` | 대상 · 자리 · 방법 | 0 | — | +| 22 | 시험입력 | 일괄 시험용 견본 입력 | 입력 이름 · 값 | 193 | — | + +- 비목 = 노무비 · 재료비 · 경비 셋뿐 · 덧줄 식에서 비목 합을 이름(`노무비`)으로 씀. +- 호표 종류 「기계」 줄은 마스터에 **0** — 기계는 모두 8번 꼴. 가장 많이 불리는 것 `GC000268` 기계 시간당 기계경비 562 회 · `GC000273` 163 · `GC000267` 158. +- 호표 「수량」 은 대개 중간 값 이름(「보통인부」 476 · 「특별인부」 234) — 중간에서 표를 찾아 담고 수량은 그 이름만 부르는 꼴. + +### 종류별 가장 짧은 실제 예 + +| 종류 | 키 · 이름 | 줄 모양 | +| --- | --- | --- | +| 표 찾기 수량 | `GF000040` 식재면 관리 | 호표 둘 · 수량 `찾기(QF000142, 구분='조경공').수량` | +| 기계 | `GF000249` 다짐(플레이트콤펙터) | 입력 지역 · 중간 `작업량 = 로직(GF000114)` · 호표 `로직(GC000272, 기계='1730-0015', 지역=지역)` × `1 / 작업량` | +| % 덧줄 | `GC000051` 보행자 안전통로 | 덧줄 `(비계공 * LB000006) * 찾기(QC000116, …).값 / 100` · 비목 경비 | +| 할증 + 조건 | `GF000025` 떼붙임(재배잔디) | 수량 `품 * (1 + 만약(비탈구배 == '해당 없음', 0, 찾기(QF000099, …).값) / 100)` | +| 조건 | `GF000231` 막돌쌓기 | 수량 `찾기(…).수량 * 만약(구분 == '붙임', 찾기(CF000148, …).적용 / 100, 1)` | +| 돈 아닌 결과 | `GF000133` 덤프트럭 시간당 작업량 | 결과 `반올림(60 * qt * f * E / Cm, 3)` | + +--- + +## 3. 쓰임 세기 (마스터 1,469) + +### 3-1. 단계별 누적 (뒤 단계는 앞 단계 것을 다 품음) + +| 단계 | 쓰는 것 | 로직 수 | 비율 | 누적 | +| --- | --- | --- | --- | --- | +| L0 | 인력 · 재료 줄 × 수량(수 · 설계 값 · 중간 산술) × 단가 + 비목 합 × 비율 덧줄 | 26 | 1.8 % | 1.8 % | +| L1 | + 표 찾기 | 407 | 27.7 % | 29.5 % | +| L2 | + 기계(기계경비 로직 부름 · 기종 고정) | 172 | 11.7 % | 41.2 % | +| L3 | + % 덧줄(고른 인력 줄 노임 × 비율) | 251 | 17.1 % | 58.3 % | +| L4 | + 기계 값 칸 직접(`EQ.손료계수`) | 3 | 0.2 % | 58.5 % | +| L5 | + 조건 · 끊기(만약 · 비교 · 최소 · 최대 · 올림) | 458 | 31.2 % | 89.7 % | +| L6 | 그밖 — 다른 로직 부름 · 틀 키 `{입력}` · `줄.` · 돈 아닌 결과 · 기계경비 로직 자신 | 152 | 10.3 % | 100 % | + +- 엄격한 「줄 × 맨 수 × 단가」(입력 · 중간 · 덧줄 없음) = **1 개(0.1 %)** — `GF000208`. +- 특징별(겹침 있음) — 표 찾기 1,399 · 조건 537 · 기계경비 부름 500 · 인력 노임 직접(덧줄) 398 · 틀 키 91 · 다른 로직 부름 40 · EQ 칸 37 · 결과 식 27 · `줄.` 3. + +### 3-2. 크기 분포 (10 = 10 이상) + +| 개수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10+ | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 호표 줄 | 30 | 183 | 498 | 272 | 160 | 116 | 66 | 34 | 32 | 15 | 63 | +| 설계 값 | 280 | 307 | 341 | 215 | 156 | 72 | 37 | 12 | 12 | 8 | 29 | +| 중간 | 287 | 364 | 298 | 268 | 113 | 63 | 21 | 15 | 14 | 7 | 19 | +| 덧줄 | 907 | 480 | 75 | 7 | — | — | — | — | — | — | — | + +→ 호표 1~5 줄 · 설계 값 0~4 개 · 덧줄 0~1 줄이 대부분. + +### 3-3. 가장 단순 3 · 가장 복잡 3 + +점수 = 설계 값 + 중간 + 호표 + 덧줄 + 2 × (찾기 · 로직 · 만약 부름 수). + +| 갈래 | 키 · 이름 | 설계 값 · 중간 · 호표 · 덧줄 · 부름 | +| --- | --- | --- | +| 단순 1 | `GF000208` 암거이음받침 채움재(T=20㎜) | 0 · 0 · 1 · 0 · 0 | +| 단순 2 | `GF000204` 전선관 설치(P.V.C ø54㎜) | 0 · 0 · 1 · 1 · 0 | +| 단순 3 | `GF000216` 조약돌 기초다짐 지름 9~15㎝(인력) | 1 · 0 · 1 · 0 · 0 | +| 복잡 1 | `GC000920` 터빈 설치(공정별) — JSON 19,944 자 | 31 · 7 · 12 · 0 · 557 | +| 복잡 2 | `GC000921` 발전기 설치(공정별) | 19 · 7 · 11 · 0 · 308 | +| 복잡 3 | `GC000914` 보일러 드럼 설치(공정별) | 20 · 12 · 17 · 0 · 275 | + +(다음 자리 — `GC000993` 플랜트 설치 소모자재 호표 40 줄 · `GC000510` 정사영상 · `GC000346` 터널굴착 1발파당 인력.) + +--- + +## 4. 계산 길 + +| 무엇 | 어디 | 근거 | +| --- | --- | --- | +| 계산 엔진 | **서버 단독**(파이썬) — `master_formula.run` · 브라우저는 `/calc` · `/text` 답을 찍기만(계산 자리 ③) | `master_formula.py:538` · `UI_Logic_Calc.ts:142,184` | +| 시험 계산 | `POST /calc {key, inputs, row?, file?, 고름?}` — 새 로직은 `key: ""` + `row` 통째 · 메모리에만 얹고 셈(파일 안 씀) | `Router.py:222` · `Store.py:524,543` · `_화면_계약.md:48-57` | +| 읽는 식 줄 | `POST /text` — 같은 몸 · 「단가 × 수량 = 금액」 줄 | `Router.py:228` · `Store.py:572` | +| 프로젝트 계산 | 사본 `단가.json` 으로 같은 `mf.run` | `M02_Item_Prices.py:211` | +| 답 모양 | 됨 `{ok, lines: [{이름, 단위, 수량, 단가, 금액, 비목}], sums: {노무비, 재료비, 경비, 계}, middle}` · 멈춤 `{ok: false, reason}`(200) | `Store.py:543-560` | + +### 4-1. 새 로직이 검사를 통과하는 최소 칸 (메모리 시험 `tmp/쉬운단가_검토_A_최소칸.py`) + +최소 통과 줄 = 머리 + 인력 호표 한 줄: + +``` +{원문번호: "", 구분, 상세구분, 이름, 결과단위: "원/㎡", 출처: "자체", 소유, 입력: [], 중간: [], + 호표: [{종류: "인력", 요소: "LB000002", 이름, 단위, 수량: "0.5", 비목: "노무비"}], 덧줄: [], 끝수: null} +``` +→ 시험 계산 됨 — 보통인부 0.5 인 × 172,068 = 86,034 원. + +| 뺀 · 바꾼 것 | 결과 | +| --- | --- | +| 원문번호 · 구분 · 상세구분 · 결과단위 · 출처 · 소유 · 입력 · 중간 · 끝수 **칸** 하나라도 없음 | 걸림 「칸 「X」 없음」 — 단 구분 · 상세구분 · 소유 · 키는 `/logic/new` 서버가 채움(`Make.py:154`) | +| 호표도 결과도 없음 | 걸림 「「호표」 도 「결과」 도 없음」(`check_master.py:316`) | +| 출처 = 빈 글 · 「내 메모」 | 걸림 「출처 모양」 — 「자체」 또는 「산림품셈 …」 꼴만(`check_master.py:63`) | +| 호표 비목 뺌(인력 · 재료) | 걸림 「비목 None」 | +| 호표 종류 ≠ 요소 그룹(인력에 EQ 키) | 걸림 「요소 그룹이 종류와 다름」 | +| 수량에 정의 안 된 이름 | 걸림 「모르는 이름 「면적」」 → 설계 값으로 만들면 통과 | +| 덧줄 칸 없음 · 호표 이름 · 단위 없음 · 호표 빈 목록 · 덧줄 출처 없음 | **통과**(검사가 안 봄) | +| 호표 종류 「기계」 + 요소 `EQ000001` | **검사 통과 · 계산 멈춤** 「unsupported operand … Decimal and dict」 — 새 길이 막아야 할 꼴 | +| 기계 줄 = `로직(GC000268, 기계='0201-0070', 지역='서울')` | 통과 · 계산 됨(노무비 · 재료비 · 경비로 나눠 얹힘) — 부를 로직의 입력을 **빠짐없이** 넘겨야 함(`master_formula.py:744`) | +| 재료 줄 = `{검색어: "시멘트"}` | 통과 · 계산 됨 — 단 검색어가 넓으면 엉뚱한 품목(「포시몰」)이 자동값 → 구분 · 상세구분 · 규격 조건 권장 | + +꼭 채울 것 정리 — **이름 · 결과단위(「원/…」) · 출처(「자체」) · 호표 줄마다 종류 · 요소 · 수량 · 비목(로직 줄 빼고) · 수량 식에 쓴 이름은 설계 값 또는 중간에 있어야 함**. 빈 칸 기본값: 원문번호 "" · 입력 [] · 중간 [] · 덧줄 [] · 끝수 null. + +--- + +## 5. 새 길이 지금 API 만으로 되나 + +| 일 | 지금 API | 됨? | 비고 | +| --- | --- | --- | --- | +| 목록 · 열기 | `GET /logics?owner=현장` · `GET /logic` | 됨 | 자체만 거름 가능 | +| 새로 | `POST /logic/new` | 됨 | 키 GX 서버 · 소유 현장 | +| 정본을 바탕으로 | `POST /logic/copy` → 자체로 | 됨 | 정본은 그대로 · 조합 · 다른 로직은 계속 정본 키를 봄 | +| 고치기 | `POST /logic/edit`(자체만) | 됨 | 정본은 403 — 본뜬 뒤 고침 | +| 지우기 | `POST /logic/delete`(자체만) | 됨 | 부르는 로직 · 담은 조합 있으면 422 · 화면은 `GET /logic/combos` 로 먼저 알림 | +| 시험 계산 | `POST /calc` · `/text`(`key ""` + `row`) | 됨 | 저장 전에도 | +| 인력 고르기 | `GET /pick?kind=job` | 됨 | 공표 직종 | +| 재료 고르기 | `GET /materials` · `GET /pick?kind=price` | 됨 | 구분 → 상세구분 → 후보 | +| 기계 고르기 | `GET /logic?key=GC000268` 의 입력 「기계」 고르기 목록 + `GET /elements?group=기계&q=` 이름 | 됨(두 번 부름) | 기종 목록이 기계경비 로직마다 다름(어느 로직을 부를지 고르는 일이 남음) | +| 표 찾기 | `GET /tables?group=소요량` · `GET /table/options` | 됨 | 조건 값 목록까지 | +| 저장 걸림 보이기 | 422 `{errors: [글…]}` | 됨 | 글이 키 · 엔진 말투 — 쉬운 말 바꾸기는 화면 몫 | + +- **새 API 필요 없음.** 만들면 좋은 것(필수 아님) 하나 — 「기계 고르기 한 번에」(기종 → 부를 기계경비 로직 키 · 넘길 입력을 짝지어 줌). 지금은 화면이 GC000267~276 열 개 가운데 고르는 규칙을 품어야 함. +- `/save` 는 쓰지 않는 것을 권함 — 소유 막음이 없어 정본 파일을 고치고 지울 수 있음(`Store.py:632`). `/logic/*` 길은 `로직_자체.json` 만 건드림(`Make.py:149`). +- 새 길이 「초등학생」 수준으로 덮을 범위 후보(브레인 판단 몫) — L0 ~ L3(호표 인력 · 재료 · 기계 + 표 찾기 + % 덧줄) = 마스터의 58 %. 조건 · 할증(L5)까지 = 90 %. + +## 덧 — 세는 법 + +- 「표 찾기」 = 식 나무에 `find` 마디 · 「조건」 = `만약 · 올림 · 버림 · 반올림 · 최소 · 최대` 부름 또는 비교 · 「기계경비 부름」 = `로직(…)` 대상이 `로직_건설품셈_08장_건설기계.json`(GC000267~276) · 「인력 노임 직접」 = 덧줄 · 중간 식의 고정 `LB · MT · MO` 키 · 해석은 엔진 `master_formula.parse · walk` 그대로. +- 「할증」 = 식 안 `(1 + …` 꼴(어림) · 「% 줄」 = 덧줄 식에 `/ 100`. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md new file mode 100644 index 000000000..66d047bc6 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md @@ -0,0 +1,141 @@ +# 34-1B 지금 단가산출 화면 걸음 재기 (sub6 · 조사만) + +⬜ 브레인 답 필요 — 화면에 「추가」라는 글의 단추가 없음. 사용자가 말한 「추가」 = 위 단추 줄 첫째 진한 단추 「식으로 새로 만들기」로 봄(유일한 새로 만들기 단추). 다르면 34-3a 단추 자리가 바뀜. + +- 서버 8008 · 화면 5181 · ORCA 탭 하나(끝나고 닫음) · 판정 전 세션 SYSTEM_ADMIN 확인. +- 저장 · 지우기 안 누름. 줄 추가 · 수량 · 단가 바꾸기는 캐시 초안(sessionStorage)에만 넣어 재고 끝에 지움. 끝난 뒤 서버 로직 1,469 개 · 자체(GX) 0 개 그대로 · git 깨끗. +- 사진 — `tmp/쉬운단가_B_사진/` (s01 목록 … s10 알약 창). + +## 1. 화면 자리 + +| 무엇 | 화면 위치 | 파일:줄 | +| --- | --- | --- | +| 들어가는 곳 | 왼쪽 패널 맨 아래 「단가산출 로직 ▸」 상자 | `M01_MasterData_UI_Side.ts:439-440` · 전환 `M01_MasterData_UI_Page.ts` `openLogicTab` | +| 로직 목록 | 가운데 표 · 30 줄씩 49 쪽 · 1,469 줄 · 이름 찾기 · 「막힘만」 | `M01_MasterData_UI_Logic_List.ts` · 걸기 `M01_MasterData_UI_LogicLab.ts:97` | +| 상세 | 줄 누르면 네 상자 — 기본정보 · 단가산출 상세 · 텍스트 수식 · 시험 계산 | `M01_MasterData_UI_LogicLab_Detail.ts:479-505` | +| 위 단추 줄 | 「← 로직 목록」 「단가산출 로직」 (빈칸) [식으로 새로 만들기] [로직 지우기] [고친 것 버리기] [저장] [본떠 만들기] | `M01_MasterData_UI_LogicLab.ts:394-418` | +| 「추가」로 본 단추 | 「식으로 새로 만들기」 — 진한 남색 · 단추 줄 왼쪽 첫째 | `M01_MasterData_UI_LogicLab.ts:400` | +| 그 옆 빈 자리 | 제목과 첫 단추 사이 넓은 빈칸(제목 오른쪽 여백 auto) — `pending`(「저장 안 한 로직 N 개」) 글 뒤 · `:400` 앞에 끼우면 「식으로 새로 만들기」 바로 왼쪽 | `M01_MasterData_UI_LogicLab.ts:398-400` · 줄 모양 `M01_MasterData_UI_Logic_Style.css:64-75` | + +- 목록일 때도 「로직 지우기」(빨강) · 「본떠 만들기」가 켜져 있음 — 누르면 아무 일 없음 / 「먼저 로직을 고르세요」 알림. + +## 2. 대표 일 여섯 — 걸음 + +누름 = 단추 누름 + 칸에 글 넣기 1 번씩. 창 = 지나간 화면·띄움창 수. + +| 일 | 길 | 누름 | 창 | 막힌 곳 | +| --- | --- | --- | --- | --- | +| ① 새 로직(인력 2 · 재료 1 · 경비 1) | 식으로 새로 만들기 | 38 | 5~6 | 첫 식이 단위 검사에 걸림 · 기계 고르기 깨짐 · 시험 계산 멈춤 | +| ② 있는 로직에 줄 하나 | 기본 로직 → 본떠 만들기 → 사본 편집기 | 10 (자체 로직이면 5) | 5 | 기본 로직은 줄 추가 단추 없음 · 사본 시트도 호표 줄 추가 없음 | +| ③ 수량 바꾸기 | 기본: 본떠 만들기 / 자체: 수량 칸 | 5 / 2 | 3 / 1 | 원본은 못 바꿈(사본이 생김) · 수량 칸이 식 글 | +| ④ 단가 자료 바꾸기 | 자체 로직 「찾기」 | 인력 3 · 재료 불가 · 기계 글 고침 | 2 | 재료 조건 줄 로직은 편집기 빈 화면 · 기계는 코드 글 | +| ⑤ 줄 지우기 | 자체 로직 「×」 | 2 | 1 | 기본 로직은 불가 · 확인창 없음 · 줄 하나 되돌리기 없음 | +| ⑥ 로직 지우기 · 되돌리기 | 로직 지우기 → 확인 → 저장 | 4 | 2 | 저장 뒤 되돌릴 길 없음 · 확인창이 원문번호로 부름 | + +### ① 새 로직 — 「식으로 새로 만들기」 (실측) + +1. 「단가산출 로직」 1 · 「식으로 새로 만들기」 1 · 식 적기 1 · 「분석」 1 = 4 +2. 처음 적은 식 `공사비 = 0.5 * 보통인부 + 0.2 * 특별인부 + 1.1 * 시멘트 + 0.3 * 굴착기` → 「「+」 양쪽 단위가 다름 — 원/인 + 원/포」. 수량마다 이름을 붙여 다시 적고(1) 다시 분석(1) = 2 +3. 마스터 요소 넷 — 무엇인가 1 · 고르기 1 · 고름 1 = 인력 3 × 2. 재료 · 기계는 고르기 창이 늘 「인력」으로 열려 종류 바꿈 1 · 찾기 글 1 더 = 5 × 2. 기계는 단위 칸 「[object Object]」 고침 1 더 = 17 +4. 고정값 넷(보통인부품 · 특별인부품 · 시멘트량 · 굴착기시간) — 무엇인가 · 값 · 단위 = 3 × 4 = 12 +5. 로직 이름 1 · 결과 단위 1 · 저장 1 = 3 +6. 합 38 · 창 = 본 화면 + 고르기 창 4 (+ 단가 없는 자재를 바꾸려면 「자재품목 고르기」 1) +7. 결과 — 시험 계산 「멈춤 · 이 조건으로는 셈하지 못함 — 입력값 · 표에 그 조합이 있는지 확인」. 실제 까닭은 고른 시멘트(MT004177)에 단가 없음. 고르기 창이 재료 값을 안 보여 줘 미리 알 길 없음. 멈춤인데도 [저장] 켜짐. +8. 「본떠 만들기」 길(비슷한 로직 사본) = 줄 누름 1 · 본떠 만들기 1 · 이름 1 · 저장(자체 로직) 1 = 4 — 그러나 사본 시트에서는 호표 줄 추가 · 지우기 불가 → 사본 상세 편집기에서 다시 고쳐야 함. + +### ② 있는 로직에 줄 하나 (편집기는 캐시 초안으로 실측) + +- 기본 로직 1,469 개 모두 상세가 읽기 전용(「기본 로직은 품셈 원문 그대로라 여기서 고치지 못함 — 비고만 고칠 수 있음」). +- 길: 찾기 글 1 · 줄 누름 1 · 본떠 만들기 1 · 저장(자체 로직) 1 → 사본 상세 · 호표 「줄 추가」 1 · 「찾기」 1 · 고름 1 · 수량 1 · 저장 1 = 9 (재료면 종류 바꿈 +1 = 10). +- 사본 상세(자체 로직) 편집기에는 같은 이름 「줄 추가」 단추가 넷 — 설계에서 받을 값 · 호표 · 중간 값 · 덧줄. +- 새 줄 기본값 = 종류 인력 · 단위 인 · 비목 노무비 · 요소 · 이름 · 수량 빈칸. +- 금액 보려면 시험 계산 — 초안은 견본값이 안 채워져 받을 값 셋(횡단경사 · 지역 · 보정작업)을 넣을 때마다 「「지역」 값을 아직 안 넣었습니다」로 하나씩 멈춤 → 3 칸 + 계산 1 = 4 더. + +### ③ 수량 바꾸기 + +- 자체 로직 — 수량 칸 글 고침 1 · 저장 1. 칸 값이 `찾기(QC000544, 도색=도색).특별인부 / 시공량` 같은 식 글. +- 기본 로직 — 본떠 만들기 시트의 식 줄 칸(`(절토량 / 작업량) * (1 + 할증 / 100)`)을 고쳐 저장(자체 로직) → 원본 대신 「… 복사본」이 하나 더 생김. +- 표 안 숫자(예 시공량 700)는 이 화면에서 못 고침 — 알약 → 「마스터 화면에서 보기」로 소요량 표 화면에 가야 함. + +### ④ 단가 자료(자재 · 노임) 바꾸기 + +- 인력 줄(요소 = `LB000002`) — 「찾기」 1 · 고름 1 · 저장 1 = 3. +- 재료 조건 줄(요소 = `{구분 · 상세구분 · 검색어}`) — 이런 줄이 든 로직 230 개(재료 줄 672). 사본을 열면 상세가 빈 화면(2장 흠 B2) → 불가. +- 경비(기계) 줄 — 마스터에 「기계」 종류 줄 0 · 모두 `로직(GC000267, 기계='0201-0020', 지역=지역, 보정작업=보정작업)` 부르기(1,075 줄). 굴착기 0.2㎥ → 0.4㎥는 글 속 코드 `'0201-0020'`를 손으로 바꿔야 함. 「찾기」는 로직 1,469 개를 보여 주고 고르면 괄호 속 인자(기계= …)가 사라짐. +- 「이름·규격」 칸은 꼬리표일 뿐 — 바꿔도 단가 그대로. +- 시험 계산의 「품목 고르기」(물가자료 · 유통물가 · 물가정보 · 거래가격 넷 보임)는 시험에만 쓰고 로직에 안 남음 — 바꾼 줄로 착각 쉬움. + +### ⑤ 줄 지우기 + +- 자체 로직 — 줄 끝 「×」 1 · 저장 1. 확인창 없음. +- 되돌리기 = 「고친 것 버리기」 하나뿐 — 모든 로직의 고친 것을 통째로 버림. 줄 하나 되살리기 없음. +- 기본 로직 · 본떠 만들기 시트 — 줄 지우기 단추 없음. + +### ⑥ 로직 지우기 · 되돌리기 + +- 줄 누름 1 · 로직 지우기 1 · 확인 1 · 저장 1 = 4 (실측은 확인창에서 취소). +- 확인창 글 「로직 「3-4-2」 을 지울까요? [저장] 때 파일에서 빠짐」 — 이름이 아니라 원문번호로 부름. 같은 3-4-2 가 GF000003 · GF000004 둘. +- 「고치지 못함」 기본 로직도 지우기는 됨(서버 `/save` 가 지움을 막지 않음 · 다른 로직이 부르면 저장 때 검사로 막힘). +- 저장 전 되돌리기 = 「고친 것 버리기」(전부) · 저장 뒤 = 길 없음(휴지통 · 초기화 없음). +- 저장 안 한 새 로직을 지우면 확인 뒤 바로 사라짐. + +## 3. 처음 보는 사람이 모를 낱말 + +- 호표 · 덧줄 · 중간 값 · 끝수 · 비목 · 몫(「노무비 몫」) · 소계 · 결과 단위 · 원문번호 · 출처 · 막힘 +- 기본 로직 · 정본 · 자체 로직 · 본뜸 · 복사본 +- 별칭(복사 시트 「부르는 표·로직」 상자) · 그대로 부르기 · 같이 복사하기 · 표 바꾸기 +- 마스터 요소 · 설계 입력 · 고정값 · 표 찾기 · 덧줄 비목 · 「비목 합 — 덧줄에서만 쓰는 이름」 · 식으로 정해짐 +- 키 머리글 — GF · GC · GX · LB · MT · EQ · QF · QC +- 식 낱말 — `찾기(QF000028, 구분='m당 절토량').값` · `로직(GC000267, 기계='0201-0020', …)` · `만약(횡단경사 >= 55, …, 0)` · `LB:{공수직종}` · `MO:휘발유:{지역}` +- 소유 — 세 화면이 다 다름: 식 화면 빈 글칸 · 편집기 「공용 / 개인」 · 복사 시트 「현장 / 공용」 +- 시험 계산 — 계산 때 · 고친 줄로 계산(저장 전) · 멈춤 · 물가자료 · 유통물가 · 물가정보 · 거래가격 · 대표 +- 텍스트 수식 속 기계가 지은 이름 — `굴착기무한궤도노무비단가` · 알약 꼬리표 `실선 · 5ton`(표 칸 `트럭2_5ton` 줄임) + +## 4. 화면에 안 보이는 규칙 + +1. 기본 로직은 줄 · 수량 · 단가 모두 못 고침 → 먼저 「본떠 만들기」로 자체 사본을 만들어야 함. 원본은 그대로. +2. 본떠 만들기 시트는 호표 줄 추가 · 지우기 불가 — 덧줄 추가만. +3. 「같이 복사하기」는 [저장] 없이 그 자리에서 서버에 새 로직을 씀 — 시트를 취소해도 남음(`M01_MasterData_UI_LogicLab_Copy.ts:197` → `/logic/copy` → `M01_MasterData_Store_Make.py:215` `logic_new`). +4. 「식으로 새로 만들기」는 위 [저장]과 따로 — ④ 칸의 [저장]이 바로 서버에 씀 · 캐시에 안 쌓임 · 「닫기」는 묻지 않고 다 버림. 한 화면에 [저장] 둘. +5. 식의 숫자는 단위가 없어 바로 곱하면 단위 검사에 걸림 — 수량마다 고정값 변수 + 단위를 적어야 통과. +6. 변수 목록은 식 순서가 아니라 가나다 순. +7. 경비(기계)는 요소가 아니라 「기계 시간당 경비 로직」을 기계 코드로 부르는 꼴. 식 화면은 기계 요소(EQ)를 바로 넣어 마스터와 다른 모양을 만듦. +8. 한 기계 줄이 인력 · 재료 · 경비 세 묶음에 「몫」으로 쪼개 보임 — 실제 줄은 하나. +9. 「이름」 칸은 꼬리표 — 단가 자료는 「요소」 칸 글이 정함. +10. 고르기 창이 셋 — 식 화면 「마스터 요소」(50 개 · 구분 거름 · 재료 값 안 보임) · 편집기 「요소 찾기」(100 개 · 거름 없음) · 시험 계산 「자재품목 고르기」(물가 넷). 열 때마다 종류가 「인력」으로 돌아가고 변수 이름으로 미리 찾아 두지 않음. +11. 시험 계산 견본값은 저장된 로직만 자동으로 채움(`M01_MasterData_UI_Logic_Calc.ts:153-155`) — 기본 로직은 바로 금액이 나오나 새 로직 · 사본 초안은 빈칸이라 받을 값을 다 채울 때까지 한 칸씩 멈춤. +12. 「고친 것 버리기」는 로직 하나가 아니라 저장 안 한 모든 로직을 버림. +13. 식 화면은 결과(원)와 결과 단위(원/㎡)가 어긋나도 검사 안 함. +14. 고르기 창 단위와 줄 단위가 다를 수 있음 — 노임 「원/일」을 골라도 줄 단위는 「인」. + +## 5. 다섯 기능 — 하려던 것 · 어려운 것 + +- **본떠 만들기** — 고칠 수 없는 기본 로직의 사본(자체)을 떠서 고치게 하려던 것. 어려움: 줄 추가 · 지우기 불가(덧줄만, 그마저 안 보임) · 별칭 상자와 「그대로 부르기 / 같이 복사하기」(즉시 저장) 갈래를 알아야 함 · 사본 뒤 다시 편집기로 가야 함. +- **식으로 새로 만들기** — 「이름 = 식」 글 몇 줄로 새 로직을 짓게 하려던 것. 어려움: 빈 글에서 식 문법과 단위 맞춤을 알아야 함 · 변수마다 무엇인가 네 갈래 · 기계 고르기 깨짐 · 닫기에 안 물음. +- **텍스트 수식** — 계산을 「변수 이름 식 = 값 넣은 식」 두 칸 글로 보여 검산하게 하려던 것. 어려움: 읽기만 · 기계가 지은 긴 이름 · 계산 전엔 오른쪽이 「시험 계산을 누르면 식이 글로 나옴」. +- **시험 계산** — 받을 값을 넣어 금액을 미리 보게 하려던 것. 어려움: 새 로직 · 초안은 한 칸씩 멈춤 · 멈춤 까닭이 엉뚱할 때 있음 · 품목 고르기가 시험에만 남음. +- **알약** — 수량 식 속 표 · 요소 · 로직 이름을 누르면 그 자료(걸린 줄 노란색)를 바로 보이려던 것. 창 자체는 쉬움. 어려움: 보기만(고치기는 「마스터 화면에서 보기」로 딴 화면) · 꼬리표가 표 칸 줄임 · 로직에 따라 알약 대신 글자만(GF000004). + +## 6. 쓰다 만난 흠 (고치지 않음 · 새 길이 같은 자리를 밟지 않게) + +| # | 흠 | 자리 | 사진 | +| --- | --- | --- | --- | +| B1 | 기계 고르기 창에 날 JSON(`{"가격":66538,…}`) · 이름이 한 글자씩 세로 · 고르면 단위 「[object Object]」 · 결과 「원/[object Object]」 | `M01_MasterData_UI_LogicLab_New_Find.ts:124-147` (기계 줄의 값 · 단위가 객체) | s02 | +| B2 | 재료 조건 줄이 든 자체 로직을 열면 상세 빈 화면 — `item.요소.includes is not a function` · 대상 230 로직(본뜨면 터짐) | `M01_MasterData_UI_Logic_Edit.ts:278` · 같은 꼴 `:294` | — | +| B3 | 본떠 만들기 「덧줄 추가」를 눌러도 새 줄이 안 보임 — 안 보이는 덧줄(식 0)이 저장엔 실림 | `M01_MasterData_UI_LogicLab_Copy.ts:236` · `:296` (줄 목록이 서버 첫 응답만) | s06 | +| B4 | 상세 표의 금액이 「금액」 칸이 아니라 단가 밑 둘째 줄에 앉음 | `M01_MasterData_UI_LogicLab_Detail.ts` 묶음 표 | s05 · s09 | +| B5 | 시험 계산 멈춤 까닭이 엉뚱 — 단가 없는 자재인데 「입력값 · 표 조합 확인」 | `safeReason` `M01_MasterData_UI_Logic_Text.ts` | — | +| B6 | 복사 시트 「취소」 단추가 세로로 찌그러짐(「취/소」) | 복사 시트 머리 | s06 | +| B7 | 목록에서 「로직 지우기」 · 「본떠 만들기」가 켜진 채 | `M01_MasterData_UI_LogicLab.ts:401-417` | s01 | + +## 7. 새 길이 피할 것 (설계 후보 · 정함은 브레인 몫) + +1. 사용자가 「본뜨기」 · 「자체 / 기본」을 몰라도 되게 — 기본 로직에서 바로 고치기를 누르면 사본이 생긴다는 것을 한 줄로 알림. +2. 줄은 인력 · 재료 · 경비 세 상자에 한 줄씩 — 몫 쪼개기 · 덧줄 · 중간 값을 처음 화면에 안 보임. +3. 고르기 창 하나 — 그 상자 종류로 열림 · 줄 이름으로 미리 찾음 · 단가가 보임 · 단가 없는 품목은 흐리게. +4. 수량은 숫자 칸 먼저 · 단위는 줄 단위에서 자동 · 식은 「고급」 뒤로. +5. 경비(기계)는 「기계 고르기」로 — 속에서는 지금 형식 `로직(GC…, 기계='코드', …)`으로 읽고 씀. +6. 재료 조건 줄(`{구분 · 상세구분 · 검색어}`)을 읽고 쓸 수 있어야 함 — 230 로직. +7. [저장] 하나 · 닫기 전 물음 · 줄 하나 되돌리기. +8. 새 로직 · 사본에도 시험 견본값을 채워(`/logic/auto` 꼴) 한 번에 금액이 나오게 · 멈춤 까닭은 줄 이름으로. +9. 지울 때 이름으로 묻기 · 저장 전까지 되살리기. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md new file mode 100644 index 000000000..cf2514bc0 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md @@ -0,0 +1,282 @@ +# 쉬운 단가산출 검토 C — 실무 일위대가 모양 + 쉬운 제어 갈래 (sub7 · PLAN 34-1) + +조사 · 그림만 · 코드 안 고침. 그림 숫자는 실무 엑셀 호표 3(찰쌓기) + 공구손료 2% 가정. + +## 0. 한눈에 + +- **추천 = 갈래 B 「문장 카드」** — 줄 하나 = 쉬운 문장 하나(「석공이 [0.072]인 일함 = 18,643원」). 시작은 E 「비슷한 것 본뜨기」, 줄 더하기는 C 의 물음 셋, 맨 아래 실무 일위대가표 미리보기(읽기만). +- 까닭 — 지금 화면이 이미 실무 표 꼴이라 표(A)로는 같은 벽 · 카드 하나가 지금 형식의 줄 하나와 1:1 · 알림·잠금이 들어갈 자리가 카드 안에 있음 · 걸음은 표와 거의 같음(여섯 일 합 36 대 33). +- 큰 벽 — 정본 로직 수량의 97%가 식(숫자 146 줄뿐). 어느 갈래든 식은 「잠금 값」으로 보이고, 쉬운 길에서 새로 만드는 로직은 실무처럼 숫자 수량. + +## 1. 실무자가 일위대가를 적고 읽는 모양 + +근거: `resources/knowledge/original/실무문서/2024년 간선임도(기번3-울진.대흥)(공통)/…xlsx` 시트 `일위대가표`·`중기사용료`·`일위대가목록표`(STmate 출력) · `경쟁사 프로그램/STmate 분석/20_분석/31_일위대가_레시피_사전.md` · 산림품셈 1-2-6 · 건설품셈 1-3-1. + +### 1-1 일위대가표 칸 차례 (A~M 열) + +``` +명칭 | 규격 | 수량 | 단위 | 합계(단가·금액) | 노무비(단가·금액) | 재료비(단가·금액) | 경비(단가·금액) | 비고 +``` + +호표 하나의 모양 (일위대가표 16~22행): + +``` +제 3 호표 +찰쌓기(켜쌓기) L3=55cm이하 m2 대가 3 +건설표준품셈 7-1-2(찰쌓기) 0 ← 근거 줄(금액 0) +석공 0.072 인 258,935 18,643 258,935 18,643 0 0 0 0 노무 3 +보통인부 0.036 인 165,545 5,960 165,545 5,960 0 0 0 0 노무 6 +굴삭기+부착용 집게(0.6m3) 0.27 시간 105,164 28,394 55,700 15,039 18,296 4,940 31,168 8,415 중기 20 +합 계 52,995 39,641 4,939 8,415 +``` + +- % 줄 (146행): `공구손료 | 인건비의 % | 2 | % | 13,037.6(바탕 금액) | 260.7 | … 재료비 칸에 260.7 | 자재 24` +- 다른 호표 부르기 (89행): `찰쌓기(켜쌓기) | L3=55cm이하 | 1.57 | m2 | 52,995 | 83,202 | … | 대가 3호표` +- 중기사용료 호표 (불도우저 19ton /시간): 손료 0.1811 천원(경비) · 건설기계운전사 1인(노무) · 경유 25L(재료) · 잡품 주연료의 16%(재료) +- 목록표 칸: `호표 | 명칭 | 규격 | 단위 | 합계 | 노무비 | 재료비 | 경비 | 비고` + +### 1-2 실무 규칙 + +| 무엇 | 실무 모양 | +|---|---| +| 한 줄 | 무엇 · 규격 · 얼마(수량) · 단위 — 단가는 목록에서 옴 · 금액 = 수량 × 단가 | +| 비목 | 사람 줄은 노무비 칸만 · 재료는 재료비 · 기계(중기 호표)는 세 칸에 나뉨 | +| % 줄 | 명칭 = 공구손료·잡품·잡재료비 · 규격 = 「노무비의 %」「주연료의 %」 · 수량 = % 수 · 단가 = 바탕 금액 | +| 다른 일위대가 | 한 줄로 부름 · 비고 「대가 N호표」 · 조합 350 중 150(43%)이 2단 이상 | +| 근거 줄 | 「건설표준품셈 7-1-2」 금액 0 줄을 맨 위에 | +| 규격 갈래 | 규격만 다르면 호표 따로(기슭막이 H=1.5·2.0·2.5 = 호표 12·13·14) · 구성 같고 수량만 비례 | +| 수량 | **숫자** — 품셈 표에서 사람이 골라 적은 결과 | +| 줄 수 | 평균 4.9 · 4줄 최다(중기) · 최대 17 | +| 끝수 | 줄 금액 소수 첫째 · 비목 합 원 미만 버림 | +| 할증 | 재료 할증(시멘트 정치식 2·기타 3% 등, 건설품셈 1-3-1)은 수량에 녹이거나 따로 줄 · 품셈 항목에 들어 있으면 안 붙임 | +| 공구손료·잡재료 | 산림품셈 1-2-6 주재료비 2~5% · 항목마다 「인력품의 3%」(12-38) 등 · 실무 엑셀은 **재료비** 칸, 산림품셈 12-27 표는 **경비** — 줄마다 비목 고를 자리 필요 | + +### 1-3 실무자가 적는 차례 · 읽는 차례 + +``` +적기 ① 품셈 절 찾기 → ② 표에서 규격 맞는 줄의 품 숫자 → ③ 사람·재료·기계 줄 적기(단가는 목록이 채움) + → ④ % 줄(공구손료·잡품) → ⑤ 합계 확인 → ⑥ 다른 규격은 호표 복사 뒤 수량만 바꿈 +읽기 목록표 합계 → 호표 열어 큰 줄 → 비고로 단가 출처 → 근거 줄로 품셈 절 +``` + +## 2. 지금 로직 형식 (쉬운 길이 그대로 읽고 쓸 것) + +근거: `resources/master_data/_틀.md` 7·8·10장 · `M01_MasterData_UI_Logic_Api.ts` `LogicRow` · 로직 파일 1,469개 셈(전부 정본 · 공용). + +| 형식 칸 | 뜻 | 실무 대응 | 수 | +|---|---|---|---| +| 머리 | 이름 · 결과단위(원/㎡) · 출처 · 소유 | 호표 머리 줄 + 근거 줄 | — | +| 입력 | 설계 때 받을 값(뒷길이 · 돌 종류) | 없음 — 실무는 규격마다 호표 따로 | 1,189 로직 | +| 중간 | 이름 붙인 식 | 품셈 표를 읽는 과정 | 1,182 로직 | +| 호표 줄 | 종류(인력·재료·로직) · 요소 · 수량 · 비목 | 일위대가표 한 줄 | 5,260 줄 (인력 3,462 · 로직 1,075 · 재료 723 · 기계는 로직 줄로 부름) | +| 수량 | 숫자 146 · 이름 하나 1,957 · 찾기 하나 668 · 그 밖 식 2,489 | 수량 칸 숫자 | 숫자는 3% | +| 덧줄 | % 꼴 599 / 651 (바탕 = 사람 줄 합 321 · 이름 하나 176 · 그 밖 102) | % 줄 | 562 로직 | +| 결과 식 | 돈 아닌 로직(작업량) | 단가산출근거(Q식) | 27 | +| 끝수 | `{대상, 자리, 방법}` | 원 미만 버림 | 37 | +| 재료 요소 | 키 대신 검색어 묶음 | 명칭·규격 | — | + +서버 길(엔진 안 바꿈): `POST /calc`(저장 없이 셈) · `/save` · 자체 로직 만들기·본뜨기·고치기·지우기(`Store_Make`) · 쓰는 곳 찾기(`master_combo.using`). + +## 3. 대표 일 여섯 (모든 갈래 같은 예) + +예: 「찰쌓기(켜쌓기) L3=55cm이하 /㎡」 = 석공 0.072인 · 보통인부 0.036인 · 굴삭기+집게 0.27시간 · 공구손료 노무비의 2% + +| | 일 | 예 | +|---|---|---| +| ① | 새 로직 만들기 | 위 네 줄을 처음부터 | +| ② | 줄 추가 | 모르터바르기 0.009㎥ (다른 일위대가 부르기) | +| ③ | 수량 바꾸기 | 석공 0.072 → 0.08 | +| ④ | 단가 자료 바꾸기 | 굴삭기 0.6㎥ → 0.7㎥ (줄이 쓰는 요소를 바꿈 · 마스터 단가는 안 고침) | +| ⑤ | 줄 지우기 | 보통인부 줄 | +| ⑥ | 로직 지우기 · 되돌리기 | 자체 로직 지우기 / 방금 한 일 되돌리기 | + +걸음 = 누르기 한 번 또는 칸 하나 채우기(쳐서 엔터) · 저장 1 넣음 · 로직 열기는 뺌(①⑥은 목록에서 셈) · 지금 화면 걸음은 sub6 값. + +## 4. 갈래 다섯 + +### A. 엑셀 표 — 실무 일위대가표 그대로 + +``` +┌ 쉬운 단가산출 ─────────────────────────────────────── [되돌리기] [저장] ┐ +│ 찰쌓기(켜쌓기) L3=55cm이하 1 ㎡ 당 합계 53,788 원 │ +├──────────────┬────────────┬───────┬──────┬─────────┬─────────┬──────┤ +│ 명칭 │ 규격 │ 수량 │ 단위 │ 단가 │ 금액 │ │ +├──────────────┼────────────┼───────┼──────┼─────────┼─────────┼──────┤ +│ 석공 │ │ 0.072 │ 인 │ 258,935 │ 18,643 │ [×] │ +│ 보통인부 │ │ 0.036 │ 인 │ 165,545 │ 5,960 │ [×] │ +│ 굴삭기+집게 │ 0.6㎥ │ 0.27 │ 시간 │ 105,164 │ 28,394 │ [×] │ +│ 공구손료 │ 노무비의 % │ 2 │ % │ 39,641 │ 793 │ [×] │ +│ (여기에 이름을 쳐서 줄 더하기 …) │ +├──────────────┴────────────┴───────┴──────┴─────────┴─────────┴──────┤ +│ 노무비 39,641 · 재료비 5,732 · 경비 8,415 │ +└──────────────────────────────────────────────────────────────────────┘ +``` + +- 걸음: ① 17 · ② 4 · ③ 3 · ④ 4 · ⑤ 2 · ⑥ 3 / 1 +- 형식: 줄 = 호표 줄 · % 줄 = 덧줄(`노무비 * 2 / 100`) · 명칭 후보가 일위대가면 종류 「로직」 · 비목 칸은 숨김(줄 종류로 정함) +- 못 덮음: 식 수량 → 칸에 회색 「자동 0.50」 · 입력·중간 → 표 위 접힌 띠 +- 좋음: 인쇄 일위대가표와 같은 모양 · 고치기 걸음 가장 적음 · 한 화면에 전체 +- 나쁨: **지금 화면(`Logic_Edit` 「실무 단가산출 상세(호표) 모양」)이 이미 표 꼴 — 표만으로 어려움이 안 풀린 길** · 칸 머리를 알아야 읽힘 · 칸 안에 알림 자리 없음 · 휴대폰 폭 안 맞음 + +### B. 문장 카드 — 빈칸 채우기 + +``` +┌ 쉬운 단가산출 ──────────────────────────────────────── [↶ 되돌리기] [저장] ┐ +│ 이 일의 이름 [찰쌓기(켜쌓기)] 크기 [L3=55cm이하] [1 ㎡ ▾] 당 │ +│ ▶ 1㎡ 만드는 데 53,788 원 │ +├────────────────────────────────────────────────────────────────────────────┤ +│ 【사람】 [석공 ▾] 이 [0.072] 인 일함 = 18,643 원 [지움] │ +│ 【사람】 [보통인부 ▾] 이 [0.036] 인 일함 = 5,960 원 [지움] │ +│ 【기계】 [굴삭기+집게 0.6㎥ ▾] 를 [0.27] 시간 씀 = 28,394 원 [지움] │ +│ 【덧붙임】 [사람 품값 ▾] 의 [2] % 를 [공구손료] 로 더함 = 793 원 [지움] │ +│ │ +│ [+ 사람] [+ 재료] [+ 기계] [+ 다른 일위대가] [+ 덧붙임 %] │ +├────────────────────────────────────────────────────────────────────────────┤ +│ ▸ 실무 일위대가표로 보기 (읽기만 · 1-1 모양) │ +└────────────────────────────────────────────────────────────────────────────┘ + +잠금 카드 (정본을 본뜬 로직): +│ 【사람】 [석공 ▾] 이 (자동 0.50 · 산림품셈 13-4-1 표에서) 인 일함 = 129,468 원 │ +│ └ [숫자로 바꾸기] [그대로 둠] │ +잘못 넣음: +│ 【사람】 [석공 ▾] 이 [0.72] 인 일함 ⚠ 1㎡ 에 석공 0.72인은 많음 — 0.072 ? │ +``` + +- 걸음: ① 20 · ② 5 · ③ 3 · ④ 3 · ⑤ 2 · ⑥ 3 / 1 +- 형식: 카드 = 호표 줄 / 덧줄 / 로직 줄 1:1 · 【덧붙임】 바탕 「사람 품값」 = 사람 줄 합(덧줄 321개 꼴) · 「노무비·재료비·경비·주재료비」 = 이름 하나(176개 꼴) +- 못 덮음: 식 수량 → 잠금 값 + 「숫자로 바꾸기」 · 그 밖 덧줄 → 잠금 카드 「자동 덧붙임」 +- 좋음: 칸 머리 없이 문장으로 읽힘 · 알림·잠금이 카드 안에 들어감 · 휴대폰 폭 맞음 · 카드 순서 ▲▼ +- 나쁨: 줄 17개 로직은 길어짐(카드 한 줄 접기로 보완) · 실무 표와 모양 다름(아래 미리보기로 보완) + +### C. 단계 안내 — 마법사 + +``` +┌ 새 일위대가 만들기 ─────────────────────────── 4 / 7 단계 ┐ +│ │ +│ 이 일에 기계가 들어가나요? │ +│ │ +│ [ 굴삭기+집게 0.6㎥ ▾ ] [ 0.27 ] 시간 = 28,394 원 │ +│ [ + 기계 하나 더 ] │ +│ │ +│ 지금까지 1㎡ 당 52,995 원 │ +│ │ +│ [ ← 앞으로 ] [ 기계 없음 ] [ 다음 → ] │ +└───────────────────────────────────────────────────────────┘ +단계: ① 이름·단위 ② 사람 ③ 재료 ④ 기계 ⑤ 다른 일위대가 ⑥ 덧붙임(%) ⑦ 확인·저장 +``` + +- 걸음: ① 24 · ② 6 · ③ 5 · ④ 5 · ⑤ 4 · ⑥ 3 / 1 (고치기 = 단계로 건너뛰기 → 고침 → 확인 → 저장) +- 형식: 단계마다 호표 줄 종류 하나 · 끝 단계에서 한 번에 씀 +- 못 덮음: B 와 같음 · 줄 차례는 종류별로 묶임(지금 상세 화면 묶음과 같음) +- 좋음: 한 화면 한 물음 — 가장 「초등학생」 · 길을 잃지 않음 · ① 에 강함 +- 나쁨: 고치기가 느림 · 전체가 끝 단계에서만 보임 · 단계 사이 오감이 잦음 + +### D. 블록 끌어다 놓기 + +``` +┌ 서랍 ──────────┐┌ 판 ─────────────────────────────────── [↶] [저장] ┐ +│ [▭ 사람] ││ ┏━ 찰쌓기(켜쌓기) L3=55cm이하 · 1㎡ ━━━━━━━━━━━━━┓ │ +│ [▭ 재료] ││ ┃ ▭ 사람 [석공] [0.072] 인 18,643원 ┃ │ +│ [▭ 기계] ││ ┃ ▭ 사람 [보통인부] [0.036] 인 5,960원 ┃ │ +│ [▭ 다른 일위대가]││ ┃ ▭ 기계 [굴삭기+집게] [0.27] 시간 28,394원 ┃ │ +│ [▭ 덧붙임 %] ││ ┃ ▭ % [사람 품값] 의 [2] % 793원 ┃ │ +│ ││ ┗━ 합계 53,788원 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ +│ [휴지통] ││ │ +└─────────────────┘└───────────────────────────────────────────────────┘ +``` + +- 걸음: ① 20 · ② 5 · ③ 3 · ④ 4 · ⑤ 2 · ⑥ 3 / 1 +- 형식: 블록 = 카드 · 판의 차례 = 호표 줄 차례 +- 못 덮음: B 와 같음 +- 좋음: 스크래치처럼 어린이에게 익숙 · 지우기가 휴지통으로 눈에 보임 +- 나쁨: 호표는 일렬 목록이라 블록이 카드보다 더 주는 것 없음 · 끌기가 터치패드·키보드에 약함 · 만들기 품 가장 큼 + +### E. 비슷한 것 골라 고치기 — 본뜨기 (입구) + +``` +┌ 무엇과 비슷한가요? ────────────────────────────────────────────────┐ +│ [ 찰쌓기 찾기 ] │ +│ │ +│ ○ 찰쌓기(켜쌓기) L3=55cm이하 /㎡ 52,995원 석공 · 보통인부 · 굴삭기 │ +│ ○ 메쌓기(켜쌓기) L3=55cm이하 /㎡ 68,835원 석공 · 보통인부 · 굴삭기 │ +│ ○ 돌쌓기 메쌓기(인력) [정본] /㎡ 설계 값 필요 석공 · 보통인부 │ +│ │ +│ [ 이것으로 시작 → ] │ +└────────────────────────────────────────────────────────────────────┘ +→ 고치기 화면(A 또는 B) · 위 띠 「본뜬 것: 찰쌓기(켜쌓기)」 · 바뀐 칸 노랑 +``` + +- 걸음: ① 9 (비슷한 것이 있을 때 · 찾기 1 · 고르기 1 · 시작 1 · 이름 1 · 수량 2칸 4 · 저장 1) · ②~⑥ 은 고치기 화면 걸음 +- 형식: 지금 본뜨기 서버 길 그대로(`Store_Make` · `LogicLab_Copy`) +- 좋음: 실무 습관 그대로(호표 복사 뒤 수량만) · 빈 종이로 시작하지 않음 +- 나쁨: 혼자 서지 못함 · 정본을 본뜨면 잠금 값이 따라옴 + +## 5. 갈래 비교 + +| | A 표 | **B 문장 카드** | C 마법사 | D 블록 | E 본뜨기(입구) | +|---|---|---|---|---|---| +| ① 새로 | 17 | 20 | 24 | 20 | 9 | +| ② 줄 추가 | 4 | 5 | 6 | 5 | 고치기 화면 | +| ③ 수량 | 3 | 3 | 5 | 3 | 〃 | +| ④ 단가 자료 | 4 | 3 | 5 | 4 | 〃 | +| ⑤ 줄 지우기 | 2 | 2 | 4 | 2 | 〃 | +| ⑥ 지우기 / 되돌리기 | 3 / 1 | 3 / 1 | 3 / 1 | 3 / 1 | 3 / 1 | +| 여섯 합 | 33 | 36 | 47 | 37 | — | +| 품셈 몰라도 읽힘 | 중 | 상 | 상 | 상 | 상 | +| 실무 표 모양 | 상 | 중(미리보기) | 하 | 중 | — | +| 한 화면 한 가지 | 하 | 중 | 상 | 중 | 상 | +| 알림 자리 | 하 | 상 | 상 | 중 | — | +| 휴대폰 폭 | 하 | 상 | 상 | 하 | 상 | +| 만들기 품 | 하 | 중 | 중 | 상 | 하 | +| 지금 형식 읽고 씀 | 됨 | 됨 | 새로 만들기만 자연 | 됨 | 됨 | + +## 6. 못 덮는 형식 요소와 할 일 (모든 갈래 공통) + +| 요소 | 수 | 쉬운 길에서 | 그때 할 일 | +|---|---|---|---| +| 식 수량(찾기·만약·이름) | 5,114 줄 | 잠금 값 「자동 0.50 · 산림품셈 13-4-1 표」 | 「숫자로 바꾸기」(확인 한 번) 또는 「표에서 고르기」 = 조건을 고정값으로 넣은 찾기(`찾기(QF…, 뒷길이=45, 돌='깬돌').석공`) | +| 입력(설계 때 받을 값) | 1,189 로직 | 위 띠 「설계 때 정하는 값: 뒷길이 · 돌」 읽기만 · 시험값만 넣어 금액 봄 | 새 입력 만들기는 지금 화면 | +| 중간 식 | 1,182 로직 | 숨김(잠금 값 안에서만 보임) | 지금 화면 | +| 덧줄 % 꼴 | 599 줄 | % 카드 · 율이 찾기면 잠금 % | — | +| 덧줄 그 밖 꼴(손료 식 등) | 52 줄 | 잠금 카드 「자동 덧붙임 · 금액」 | 지금 화면 | +| 로직 부르기 + 넘길 값 | 1,075 줄 | 다른 일위대가 카드 · 받는 값은 카드 안 고르기 칸 | 넘길 값이 식이면 잠금 | +| 결과 식(작업량 · Q식) | 27 로직 | 목록에 회색 「쉬운 길로 못 엶」 | 지금 화면 | +| 끝수 묶음 | 37 로직 | 읽기만 한 줄 「합계 원 미만 버림」 | 새 로직은 엔진 기본 | +| 정본(공용) | 1,469 로직 | 읽기만 + [본떠 만들기] | 정본은 안 고침 | +| 재료 요소 | 723 줄 | 이름 쳐서 고르기 → 검색어 묶음으로 씀 | — | +| 로직 지우기 | 자체만 | 쓰는 곳(다른 로직 · 조합)이 있으면 「○곳에서 씀 — 먼저 빼기」 | — | + +## 7. 「초등학생」 원칙 + +1. **낱말** — 키·식·비목·호표·덧줄 안 씀 → 사람 · 재료 · 기계 · 다른 일위대가 · 덧붙임(%) · 사람 품값 · 재료값 · 기계·경비. +2. **한 화면 한 가지 일** — 고치기 화면에 목록·시험 계산·식 풀이를 같이 두지 않음. +3. **결과 금액이 바로 보임** — 줄마다 금액 · 맨 위 큰 합계 · 바뀐 금액은 잠깐 칠함. +4. **고르기가 쓰기보다 먼저** — 이름은 후보에서 · 단위는 고른 것이 정함 · 숫자 칸만 침. +5. **보기 글** — 빈 칸에 회색 「예: 0.072」. +6. **잘못 넣으면 바로 그 자리에 한 줄** — 숫자 아님 · 0 · 음수 · 너무 큼(1㎡ 에 사람 10인 넘음 등) · 같은 이름 · 빈 이름. +7. **되돌리기 늘 보임** — 줄 지우기는 묻지 않고 되돌리기로 · 로직 통째 지우기만 확인 한 번. +8. **저장 전엔 아무것도 안 바뀜** — 「저장 안 함」 표시 · 저장 안 하고 닫으면 물음. +9. **정본은 안 깨짐** — 정본은 읽기 + 본뜨기만. +10. **어려운 것은 잠금** — 식·표 찾기는 잠금 값으로 · 열어 보기는 되지만 고칠 필요 없음. +11. **실무와 같은 차례** — 이름 · 크기(규격) · 얼마 · 단위 · 금액 · 인쇄 일위대가표와 같은 숫자. +12. **큰 단추 · 글 크게 · 색만으로 뜻 안 전함** — 글 + 표시 함께 · 밝음 · 어두움 둘 다. + +## 8. 추천 — B 문장 카드 (E 입구 · C 물음 셋 · 실무 표 미리보기) + +까닭: + +1. 지금 화면은 이미 실무 표 꼴 — 표(A) 모양만으로는 어려움이 안 풀렸음. 바꿀 것은 모양이 아니라 **읽는 법**(칸 머리 → 문장). +2. 카드 하나 = 지금 형식의 줄 하나(호표 줄 · 덧줄 · 로직 줄) — 그대로 읽고 씀 · 엔진 안 바꿈. +3. 「석공이 0.072인 일함 = 18,643원」은 품셈을 몰라도 읽힘 — 초등학생 원칙 1·3·11. +4. 알림·잠금·「숫자로 바꾸기」가 들어갈 자리가 카드 안에 있음 — 표 칸에는 없음. +5. 걸음은 표와 거의 같음(여섯 합 36 대 33) · 마법사보다 11 적음. +6. 블록(D)의 쉬움을 끌기 품 없이 얻음 — 호표는 일렬이라 블록 = 카드 + 끌기. +7. 실무 습관(비슷한 호표 복사 뒤 수량만)은 E 입구로 · 처음 쓰는 사람은 [+ 사람] 뒤 C 물음 셋(무엇 → 어떤 것 → 얼마). + +브레인 정할 것: + +- **바로 보이는 금액** — 숫자 줄은 화면에서 곱하고 식 줄은 `/calc` 를 뒤에서(최신 응답만) · CLAUDE.md 5장 「조작 중 네트워크 왕복 금지」와 맞출 길. +- **「숫자로 바꾸기」 허용** — 정본을 본뜬 자체 로직에서 식을 숫자로 덮는 일(표 연결이 끊김). +- **공구손료 비목 기본** — 실무 엑셀 재료비 칸 · 산림품셈 12-27 경비(원문 대 실무). +- **「지금 화면에서 고치세요」 길** — 폴더 밖 참조 한 곳 원칙과 맞출 방법(글 + 키 복사만 · 링크 없음 등). +- **쉬운 길 새 로직에 입력을 둘지** — 실무는 규격마다 호표 따로라 입력 없이도 됨. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md new file mode 100644 index 000000000..30d4841f5 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md @@ -0,0 +1,96 @@ +# 쉬운 단가산출 검토 D — 지난 시도에서 배우기 (34-1 · sub8 · 10-01) + +조사만 · 코드 안 고침. 근거 = `git log -- M01_MasterData`(133 커밋) · `docs/raw/plans/2026-09-22·09-25·10-01` · `resources/master_data/ref/_설계_로직_만들기.md`·`_검증_테스트_컨테이너.md`·`_분석_로직컨테이너_통합.md`·`_검증_화면글.md`·`_검증_화면늦음.md` · 지금 코드 머리 주석 · 사용자 대화 기록(시각은 한국 시각). + +## 0. 한눈에 + +- 열흘(09-19 ~ 09-30) 동안 시도 열넷. 큰 갈아엎기 셋 — ① 09-20 밤 방식 A·B·C ② 09-21 낮 흐름 그림 + 마법사 모달 ③ 09-21 밤 「식으로 새로 만들기」 · 「본떠 만들기」. +- 09-21 밤 뒤로는 **보기(읽기)만 다듬음** — 보기 쪽 파일 고친 커밋 24 · 만들기·고치기 파일 고친 커밋 2(둘 다 이름 바꾸기·합치기). 사용자가 어렵다는 **추가 · 삭제 · 수정 길은 09-21 모습 그대로**. +- 지금 남은 만들기·고치기 길 = 식 글자 셋(식으로 새로 만들기 · 본떠 만들기 별칭 식 · 자체 로직 편집기). + +## 1. 시도마다 한 줄 + +| # | 언제 · 커밋 | 시도 | 풀려던 것 | 사용자에게 요구한 것 | 남은 어려움 · 근거 | 지금 | +|---|---|---|---|---|---|---| +| 1 | 09-19 `3a36a037` `10598f36` | 호표 편집기(옛 로직 칸 · `Logic_Edit`) | 화면에서 로직 고치기 · 시험 계산 | 줄마다 종류 · 요소 키 · **수량 식 글자** · 중간 값 · 결과 식 · 덧줄 · 끝수 칸 · 요소 찾기 창 | 사용자 09-21 「중간 값과 덧줄, 끝수 등 의미가 이해하기 어려움」 · 정본도 바로 고쳐 저장됨 → 사용자 확정으로 버림(7-1) | 옛 컨테이너는 `old_code/` · 편집기는 **자체 로직 고치기로 살아 있음** | +| 2 | 09-20 `292568e6` | 방식 A 질문·답 마법사(테스트 컨테이너) | 식 없이 입력만 물어 계산 | 공종 → 조건 질문 하나씩 → 재료·기계 고르기 | 읽기·계산만 · 로직을 만들지 못함 — 사용자 09-21 07:39 「신규 등록일 경우 첫번째 방식이 괜찮고 … 문제는 로직생성 … 누락」 | 09-21 걷음(`f458da7f`) | +| 3 | 09-20 `2436899c` | 방식 B 호표 + 옆 설명 카드 | 「이 수량은 어디서 왔나」 | 줄 누름 → 옆 카드(원문 표 · 할증 · 쉬운 말 풀이) · 식 고치기는 고급 뒤 | 화면 확인 없이 typecheck 만으로 마감(커밋 글) · 사용자 09-21 08:06 「A, B, C 화면 구성 삭제」 | 카드 속은 `Logic_Note` 로 남아 모달이 씀 | +| 4 | 09-20 `17838d00` | 방식 C 흐름 그림(설계 값 → 표 찾기 → 수량 → × 단가 → 할증·덧줄 → 비목 합계 → 계) | 계산 흐름을 한눈에 | 상자 누름 → 값 · 출처 | 사용자 09-21 07:39 「등록 후 전체를 볼 때는 … 칸반보드 타입이 눈에 잘 들어옴」 → 채택(09:13) → 10시간 뒤(19:17) 삭제 지시 「기존 일위대가 로직을 기준으로 개선」(까닭 글 없음 · 실무 호표 모양과 다른 탓으로 보임 — 추정) | 09-21 걷음(`5b693242`) | +| 5 | 09-21 `946425af` `beea3fac` | 새로 만들기 모달 = 방식 A 만들기(`Wizard` 9 파일 1,885 줄) | 품셈 모르는 사람이 빈 화면에서 로직 만들기 | **여덟 걸음** 이름 → 원문 절 → 중간 값 → 호표 줄 → 설계 입력 → 할증·끝수 → 시험 계산 → 저장 · 수량 = 직접 값 / 표에서 찾기 / 다른 로직 블록 · 블록 두 겹 넘으면 고급 | 금액은 맞음(메쌓기 132,132.78) · 걸음 길고 품셈 속 낱말(원문 절 · 중간 값 · 할증·끝수) · 사용자가 같은 날 「수식베이스」로 갈음(09-21 19:17 7번 · 까닭 글 없음) | 09-21 걷음 | +| 6 | 09-21 `98e40f44` `f2052b12` `83752f86` `ce518434` | 흐름 그림을 기본 보기로 + 상자 고치기 + 본떠 만들기 · 컨테이너 셋(기존 · 하이브리드 · C 단독) | 보기·고치기를 한 그림에서 | 상자 안 [고치기] · 정본은 본뜬 뒤 | 사용자 09-21 12:08 「분명히 기존의 방식을 유지하고 하위에 추가 컨테이너로 구현해달라고 했는데」 — 기본 보기를 바꿔 지시 어긋남 · 7시간 뒤 둘 다 삭제 | 09-21 걷음 | +| 7 | 09-21 `4a93cfdf` `42243ba1` | 「로직 개선 시험」 상세 = 컨테이너 넷 · 인력·재료·경비 묶음 · 줄 누르면 자료 모달 | 읽기 쉽게 | 줄 누름 → 모달 | 사용자 09-24 「재료 그룹 항목들은 무반응」 · 표 하나(QF000357)로 뭉침 → 고침 · **읽기용 — 추가·삭제·수정 안 다룸** | 지금 「단가산출 로직」 | +| 8 | 09-21 `448ef666` `c4a5087f` · 09-22 `abd37e89` | 텍스트 수식(두 칸 · 이름 식 / 값 식) | 중간 값 · 덧줄 · 끝수를 줄 글에 녹여 읽게 | 처음엔 [계산] 눌러야 보임 | 사용자 09-22 「내가 해당 단가산출을 접근했을때 바로 보여줘야지」 → 고침 · 이름 식 별칭 안 읽힘(표 키 1,188 · 번호 별칭 654) → 고침 · 그래도 꼴은 `석공노임 * 메쌓기인력.석공 * (1 + 증가율 %) = 석공비` — 점 · 괄호 · % 식 | 있음 | +| 9 | 09-21 `e9447ae7` `be8868ca` | 식으로 새로 만들기(`LogicLab_New*` 4 파일) | 완전 새 로직 — 사용자 제안(09-21 7번 「A X B - C = D … 분석 … 변수 정의」) | `이름 = 식` 줄 적기 → [분석] → 변수마다 「마스터 요소 / 설계 입력 / 고정값 / 표 찾기」 → 단위 → 비목 → 표 찾기는 표 · 값 칸 · **조건 칸마다 식** → 이름 · 결과 단위 · 소유(글자 칸) → 시험 계산 → 저장 | 첫 칸 보기 글부터 식(`잡재료비 = 노무비 * 0.05`) · 변수 갈래 넷 · 비목 · 금액은 ④ 걸음에서야 | 있음(막대 「식으로 새로 만들기」) | +| 10 | 09-21 `e73ef5d3` `c57f0ea0` | 본떠 만들기(복사해서 만들기 · `LogicLab_Copy` 391 줄) | 정본은 못 고침(사용자 확정 3-0) → 수정 = 복사본 | 별칭 꼴 **식 줄 글 칸** 고치기 · 표 바꾸기 모달 · 「그대로 부르기 / 같이 복사하기」 · 소유 · 시험 계산 · 저장 | 식을 직접 고침 · 갈래 말(별칭 · 같이 복사) · 저장 뒤 다른 편집기(#1)로 열림 → **수정 길 두 벌** | 있음(막대 「본떠 만들기」) | +| 11 | 09-21 `cd2e8df3` · 09-22 `f7dd8668` | 알약 — 모달 안 알약 → 수량 칸 안 알약 + 사칙연산 | 계산에 든 표를 하나씩 | 알약 누름 → 그 표 모달 | 사용자 09-22 「모달창 내부 알약을 외부로」 · 알약 글이 처음엔 키(「표 QF000421」) → 「찾은 줄 · 칸」으로 고침 · 같은 표 알약 겹친 로직 564(3장 실측) · **읽기 다듬기** | 있음 | +| 12 | 09-22~24 `79c42224` `cb1b82c1` `4eb81f2b` `f29dc14c` | 열자마자 자동값으로 계산 · 견본 딱지 | 비어서 멈춘 화면(멈춤 180) 없애기 | 없음(자동) | 규칙은 사용자가 정함(09-24 「숫자는 낮은 값 · 글은 첫째 · 참거짓은 거짓」) · 견본 딱지는 「뜻 없음」으로 없앰 · 1,354 멈춤 0 | 있음 — **살릴 것** | +| 13 | 09-24 `f21a6cfb` `af842c03` | 시험 계산 재료·기계 고르기 = 마스터 표 모달 | 키 대신 이름 · 드롭다운 걷음 | 「품목 고르기」 → 표 모달 → 한 줄 | 단위 다르면 경고 딱지 · 저장 안 함 | 있음 — **살릴 것** | +| 14 | 09-24 5·6장 | 무작위 · 전수 점검(1,354) | 보이는 글의 흠 | — | 보이는 글에 엔진 날식이 계속 샘 — 「만약(지게차 == '사용', …)」 · 「로직(GC000268, 기계='0602-0025', 지역=지역)」 · 「{연료}:{지역}」 · `Decimal('100')` · `MT000018.거래가격` — 다 고쳤으나 **식을 보이는 화면은 샘을 끝없이 막아야 함** | 끝 | + +이름 바꾸기도 세 번 — 일위대가 로직 → 단가산출 로직(09-21) · 일위대가 호표 → 단가산출 상세(09-21) · 로직 개선 시험 → 단가산출 로직(09-22). 사용자도 되물음(09-21 23:17 「단가산출 조직을 단가산출 상세로 바꾸는건 아니지?」). + +## 2. 공통 원인 다섯 + +1. **낱말이 만든 사람 말** — 호표 · 덧줄 · 끝수 · 중간 값 · 비목 · 몫 · 별칭 · 정본 / 자체 · GX · 키 · 표 찾기 · 값 칸 · 조건 칸 · 소유(현장 / 공용) · 마스터 요소 · 설계 입력. 근거 — 사용자 「중간 값과 덧줄, 끝수 등 의미가 이해하기 어려움」(09-21) · 같은 표를 「호표」·「단가산출 상세」 두 이름(`_검증_화면글.md` ①) · 이름 세 번 바뀜. +2. **만들기·고치기가 끝내 식 글자** — 지금 남은 길 셋이 모두 식 칸(`이름 = 식` · 별칭 식 · 수량 식·결과 식). 식 없는 시도(#2 · #5 블록)는 하루 안에 걷힘. 식을 보이니 엔진 날식이 화면에 새어 수십 건 막음(#14). +3. **한 화면 · 한 일에 너무 많음, 길은 여러 벌** — 막대 단추 늘 여섯(목록 · 식으로 새로 만들기 · 로직 지우기 · 고친 것 버리기 · 저장 · 본떠 만들기) · 상세 컨테이너 넷 + 편집기 + 접힌 소계 표 · 마법사 여덟 걸음 · 수정 길 둘(#10 별칭 식 ↔ #1 원문 식) · 저장 길 셋(`/save` · `/logic/formula/save` · `/logic/draft` save) · 시험 계산 입력 많게는 19칸(GF000181 맨홀). +4. **결과 · 뒷일이 바로 안 보이고 되돌리기 거침** — 예전 텍스트 수식은 [계산] 뒤에만(사용자 09-22 지적 · 지금은 고침) · 식으로 새로 만들기는 변수를 다 정한 ④ 걸음에서야 금액 · 「로직 지우기」는 표시만 하고 [저장]을 또 눌러야 지워짐 · 「고친 것 버리기」는 통째(한 걸음 되돌리기 없음) · 지우기 전 「이 로직을 누가 쓰나」 안 보임(길 `/logic/combos` 는 있으나 화면이 안 부름). +5. **쉬움을 잰 적 없음** — 검증 줄이 모두 「금액 같음 · typecheck · 날글 0」 · 대표 일을 몇 걸음에 끝내나 · 처음 쓰는 사람이 되나는 안 잼 · 방식 B 는 화면 확인 없이 마감 · 시도 수명 짧음(A·B·C 12시간 · 흐름 그림·마법사 10시간 · 하이브리드·C 단독 7시간) · 09-21 뒤 고친 것은 보기 쪽 24 대 만들기·고치기 2(이름만). + +정해진 틀(원인 아님 · 새 길이 안고 갈 것) — 정본은 못 고침(사용자 확정 09-21) → 수정은 늘 「복사본 만들기」부터. 새 길은 이 걸음을 사용자가 의식하지 않게 한 단추로 감쌀 자리. + +## 3. 새 길이 피할 것 + +- 기본 화면에 식 글자 칸(`이름 = 식` · `찾기(…)` · `만약(…)` · 별칭 식) — 식은 보기 한 줄까지만. +- 위 1번 낱말 — 화면 글은 일상 말로(무슨 말로 바꿀지는 브레인 · 사용자 몫). +- 단추를 늘 다 보이기 — 그 순간 할 수 있는 것만(정본을 연 채 「로직 지우기」가 보이는 일 같은 것). +- 같은 일을 두 길로 — 추가 · 삭제 · 수정 저마다 한 길 · 저장 한 길. +- 지우기를 「표시 → 저장」 두 단계로 · 지우기 전에 쓰는 곳(부르는 로직 · 담은 조합)을 안 보이기. +- 일반 저장 길 `/save` 로 로직 쓰기 — 이 길은 정본을 가리지 않음(코드 읽기 `M01_MasterData_Store.py` `_apply` · **실측 안 함**). 지금 화면 「로직 지우기」도 이 길이라 정본 지우기가 막히는지 확인 필요(브레인 판단). +- 품셈 속 걸음(원문 절 · 중간 값 · 할증·끝수)을 사용자 앞에 늘어놓는 긴 마법사. +- 엔진 날식 · 키(`GC000268` · `QF000421` · `MT000018.거래가격` · `{지역}`)가 화면 글로 새는 것 — 서버 조각 글만 찍음. +- 지금 화면 손대기 — 09-21 낮 기본 보기를 바꿔 버린 일(사용자 12:08 지적)(지시 어긋남)의 되풀이 금지 · 34장 확정대로 `EasyCalc/` 안에서만. +- 「금액 같음」만으로 끝내기 — 34-4 대표 일 여섯 걸음 수 · 예외로 잼. + +## 4. 새 길이 살려 쓸 것 + +### 4-1. 서버 길(`/api/m01` · 엔진 그대로) + +| 길 | 하는 일 | 새 길 쓰임 · 주의 | +|---|---|---| +| `GET /logics?owner=` | 로직 목록 · 소유 거름 | 첫 부름 5.6초 · 다음 0.6초(`_검증_화면늦음.md`) — 첫 화면 기다림 글 필요 | +| `GET /logic?key=` | 로직 한 줄 | 열기 | +| `GET /logic/auto?key=` | 자동값(고르기 첫째 · 수 가장 낮은 값) | 열자마자 계산된 모습 | +| `POST /calc` | 저장 전 초안(`key` "" · `row`)도 계산 · `고름` · 빈 값은 그 줄만 비움 | 고치는 즉시 금액 보이기 — 핵심 | +| `POST /text` | 사람이 읽는 줄 · 조각(알약 · 날식 걸러짐) · 이름 식 / 값 식 | 「어떻게 셈했나」 한 줄 | +| `POST /logic/new` · `/logic/copy` · `/logic/edit` · `/logic/delete` | 자체 로직 전용 · 키 GX 서버 발급 · 정본 403 · 낡은 판본 409 · 검사 422 · 부르는 로직 있으면 지우기 422 | **지금 어느 화면도 안 부름** · 시험 `test_m01_make.py` 8 — 새 길의 추가 · 수정 · 삭제 한 길로 알맞음 | +| `GET /logic/combos?key=` | 이 로직을 담은 일위대가 조합 | 지우기 전 알림 · 지금 안 부름 · 조합이 M02 층으로 옮겨진 뒤 답이 맞는지 확인 필요 | +| `GET /sections` · `/tables?section=` · `GET /table/options` · `GET /table` | 원문 절 · 절의 표 · 표 조건 값 목록 · 표 통째 | 고르기 목록(식 대신 고르기) | +| `GET /elements` · `/pick` · `/materials` · `/rows` | 요소 찾기 · 직종 · 재료 후보 · 마스터 표 | 사람 · 재료 · 장비 고르기 | +| `GET /logic/formula` · `POST /logic/formula/preview` · `/logic/formula/save` | 별칭 식 펴기 · 되돌리기 · 저장 | 화면에 식을 안 보여도 「복사해서 한 칸만 바꾸기」 속 일꾼으로 | +| `POST /logic/draft` | 식 → 변수 뽑기 · 단위 검사 · 물고 도는 식 막기 · 저장 | 고르기로 조립한 식의 검사용 | + +### 4-2. 화면 함수(부를 만한 것) + +| 파일 | 함수 | 하는 일 | +|---|---|---| +| `M01_MasterData_UI_Logic_Api.ts` | `fetchLogics` · `fetchLogic` · `fetchAuto` · `runCalc` · `runText` · `searchElements` · `fetchMaterials` · `copyLogic` · `fetchLogicFormula` · `previewLogicFormula` · `saveLogicFormula` · `draftLogic` · 타입 `LogicRow` · `HoLine` · `LogicInput` · `CalcAnswer` · `TextLine` | 서버 길 부르기 · 로직 모양 | +| `M01_MasterData_Api_Fetch.ts` | `fetchTables` · `fetchTable` · `fetchRows` · `fetchPick` · `searchMaterials` | 표 · 마스터 줄 · 직종 · 재료 찾기 | +| `M01_MasterData_UI_Logic_Money.ts` | `formatMoney` · `formatPrice` | 돈 정수 · 200원 미만 단가 유효숫자 | +| `M01_MasterData_UI_Logic_Text.ts` | `plainReason` · `safeReason` | 멈춤 까닭 쉬운 말 · 날글 거름 | +| `M01_MasterData_UI_Logic_Note.ts` | `loadTable` · `matchRow` · `explain` | 원문 표 읽기 · 걸린 줄 · 식 풀이 | +| `M01_MasterData_UI_Logic_PickTable.ts` | `openPickTable` | 재료 · 기계 표 모달(검색 칸 채워 엶 · 잡힌 줄 칠함) | +| `M01_MasterData_UI_LogicLab_Modal.ts` | `openMaterialModal` · `openTableModal` · `openLogic` | 줄 자료 · 표 모달 | +| `M01_MasterData_UI_LogicLab_Pill.ts` | `pillButton` · `fragmentRow` | 조각 → 알약 · 글자 줄 | +| `ui_template/` | `createButton` · `createInputField` · `createSelectField` · `showConfirmDialog` · `showToast` · 항목 고르기 모달 · 공용 나무 보기(21-5) | 공용 틀 | + +주의 — `LogicLab_*` 는 지금 화면과 같이 바뀌는 파일. `EasyCalc/` 는 `Logic_Api` · `Api_Fetch` · `Logic_Money` · `Logic_Text` · `ui_template` 처럼 덜 바뀌는 것만 부르는 편이 폴더째 지우기 · 지금 화면 고치기 양쪽에 안전. + +### 4-3. 살릴 생각(사용자가 좋다고 한 것) + +- 한 번에 질문 하나(방식 A) — 「신규 등록일 경우 첫번째 방식이 괜찮고」(09-21). +- 한눈에 보는 흐름(방식 C) — 「등록 후 전체를 볼 때는 … 눈에 잘 들어옴」(09-21). +- 인력 · 재료 · 경비 세 묶음 + 소계(09-21 사용자 지시 · 지금 화면). +- 열자마자 계산된 모습 · 돈은 정수(09-24 사용자 규칙). +- 표는 누르면 그 표만 · 재료는 키 아닌 이름 · 고르기는 마스터 표 모달. +- 값이 비면 그 줄만 비우고 계속(전체 멈춤 없음). diff --git a/docs/raw/M01_쉬운단가/시트로직_정함.md b/docs/raw/M01_쉬운단가/시트로직_정함.md new file mode 100644 index 000000000..a3f21d53f --- /dev/null +++ b/docs/raw/M01_쉬운단가/시트로직_정함.md @@ -0,0 +1,38 @@ +# 시트 로직 시험판 — 정함 (PLAN 35-5 · 브레인 · 10-01 오후) + +사용자 허락(그대로): 「일단 이해한대로 시험판을 만들어보자. 완전히 새로운 품셈을 사용자가 만들려면 기존에 있는 정보를 가져올수도 있지만 새로 만들기도 되어야하면 그럴려면 저장이 되어야할것같아. 일단은 시험판이니까 임시폴더 내부에 저장하고 이상하면 한번에 삭제하는거야.」 +제안서 = https://claude.ai/artifact/4iCAGPhE9maauGNTkXg5he · 근거 = 같은 폴더 `로직판_관계제어_점검.md`(지금 시험판은 관계 더하기 · 지우기 · 다시 잇기 · 새 표가 안 됨) · `로직판_엑셀로직_지도.md` 2 · 3절(우리 스프레드시트 엔진 · 서버 Node 다시 셈). + +## 목적 + +사용자가 코딩 · 브레인 없이, 품셈에 묶이지 않고 단가산출 로직을 새로 만들고 · 기존 정보(품셈 표 · 노임 · 자재 · 장비 · 기존 로직)를 가져오고 · 관계를 더하고 · 바꾸고 · 지움. 관계 = 진짜 엑셀 수식 · 입출력 칸 = 알약. + +## 정함 + +1. **로직 한 벌 = 통합문서 하나**(우리 스프레드시트 Workbook) · **상자 하나 = 시트 하나** · **알약 = 이름 붙은 칸**(입력 알약 · 출력 알약). +2. **선 = 입력 알약 칸에 다른 시트 칸 참조 수식을 저절로 씀**(`='표 · 메쌓기'!E7`) — 엔진이 시트 사이 참조를 이미 셈 · 선을 지우면 그 수식을 지움 · 순환은 엔진 `#CYCLE!` + 그을 때 막음. +3. 상자 종류 — 입력값 · 고정값 · 표 · 계산 · 항목 · 다른 로직 · 결과. 모든 상자 아래 판은 같은 시트 편집기 + 종류별 손잡이. +4. **바깥 값 넣기** — 품셈 표 줄 · 노임 · 자재 · 장비 단가 · 기존 로직 결과는 시트에 「바깥 값」 칸으로 넣음: 화면은 열 때 API 로 받아 넣고, 저장 때 서버가 마스터에서 다시 넣은 뒤 셈(브라우저 값 안 받아 적음). 품셈 표는 사본으로 들고 있지 않음(열 때 · 저장 때 마스터에서 새로). +5. **계산 = 우리 스프레드시트 엔진 한 벌** — 화면은 브라우저, 저장은 서버가 같은 TS 엔진을 Node 로(`common_util/common_util_spreadsheet.py` 길 · 계산 자리 ②). 지금 로직 1,469개(파이썬 엔진)는 안 건드림. +6. **저장 = 임시 폴더** `M01_MasterData/SheetLogic/_data/` (폴더 안 `.gitignore` 로 git 밖) · 키 = `SL-0001` 꼴(자체 번호 · `_키대장.json` 안 씀) · 사용자 표도 여기. 폴더 `SheetLogic/` 를 지우면 코드 · 자료가 한 번에 사라짐. +7. **폴더 밖** — 단추 한 곳(LogicLab.ts 가져오기 한 줄 + 부르기 한 줄 · 「로직 만들기(시험)」 옆 「시트 로직(시험)」) · 서버 등록 한 줄(main.py). 기존 서버 · 엔진 · 마스터 파일 · EasyCalc · LogicBuilder 파일은 안 고침(가져다 쓰기만). +8. **화면** — 위 가로 다이어그램 띠(입력값 → 표 → 계산 → 항목 → 결과 · 단계마다 세로 쌓기 · 자리는 저절로 · 상자 양옆에 입력 · 출력 알약 · 출력 알약을 끌어 입력 자리에 놓으면 선) · 아래 왼쪽 = 고른 상자의 시트 판 · 아래 오른쪽 = 결과(합계 · 노무비 · 재료비 · 경비 · 일위대가표 · 예시값). +9. **가져오기** — 기존 로직을 시트 로직으로 바꿔 가져옴(LogicBuilder Blocks 로 읽고 엑셀 수식으로: 만약 → IF · 최소/최대 → MIN/MAX · 올림/버림/반올림 → ROUNDUP/ROUNDDOWN/ROUND · 표 찾기 → 표 상자 + XLOOKUP 또는 INDEX/MATCH) · 시험 로직 6개(GF000208 · GF000219 · GF000025 · GF000249 · GF000133 · GC000051)는 바꾼 값 = 지금 /calc 값이어야 함. +10. **용어** — 시트 로직 · 상자 · 선 · 입력 알약 · 출력 알약 · 입력값 · 고정값 · 표 · 계산 · 항목(노무 · 재료 · 장비 · 일위대가 · 비율) · 다른 로직 · 결과 · 예시값 · 품셈 표 / 내 표 · 노무비 · 재료비 · 경비. + +## 파일 · 창 (모두 `M01_MasterData/SheetLogic/` · 파일마다 700줄 안) + +| 파일 | 창 | 하는 일 | +| --- | --- | --- | +| `M01_SL_Model.ts` · `M01_SL_Eval.ts` | sub7 | 타입(먼저 올림) · 상자 더하기 / 지우기(시트 만들기 · 지우기) · 선 잇기 / 끊기(참조 수식 쓰기 · 지우기) · 알약 정하기 · 검사(순환 · 빈 입력) · 화면 계산(바깥 값 넣기 → 엔진 → 출력 알약 · 결과 읽기) | +| `M01_SL_Router.py` · `M01_SL_Api.ts` · `.gitignore` | sub4 | `_data` 목록 · 열기 · 저장 · 지우기 · 저장 때 바깥 값 다시 넣고 Node 로 셈 · 바깥 값 한 번에 받기(표 · 노임 · 자재 · 장비 · 기존 로직 결과) · 등록 한 줄 | +| `M01_SL_Diagram.ts` + css | sub8 | 위 가로 띠 · 상자 · 알약 · 선(끌어 잇기 · 고르기 · 지우기) · 「+」 상자 더하기 · 이어진 선 진하게 | +| `M01_SL_Panel.ts` + css | sub2 | 아래 시트 판(우리 스프레드시트 편집기 넣기) · 칸 → 입력 / 출력 알약 정하기 · 칸 위 알약 표시 · 틀 단추(할증 · 나누기 · 만약 · 표에서 찾기 — 진짜 수식을 넣어 줌) | +| `M01_SL_Table.ts` + css | sub3 | 표 상자 손잡이 — 품셈 표 고르기(절 · 이름 찾기) → 시트에 넣기 · 내 표(빈 표 · 엑셀 붙여넣기) · 조건 칸 / 결과 칸 알약 · 「표에서 찾기」 수식 돕기 | +| `M01_SL_Item.ts` · `M01_SL_Result.ts` + css | sub5 | 항목 상자 손잡이(노무 · 재료 · 장비 · 일위대가 고르기 → 단가 바깥 값 · 수량 알약 · 노무비 / 재료비 / 경비 출력) · 결과 칸(합계 · 비목 · 일위대가표 · 예시값) | +| `M01_SL_Import.ts` | sub6 | 기존 로직 → 시트 로직(정함 9) · 6개 같은 값 시험 | +| `M01_SL_Entry.ts` + css | sub1 | 단추 · 큰 창 · 시작 화면(내 시트 로직 · 새로 · 기존 로직 가져오기) · 세 칸 틀 · 저장 · 지우기 · 실행 취소 · 저장 안 함 물음 · 잇기 · 끝 검증 | + +## 끝 검증 (sub1 · 사용자처럼) + +관계 제어 점검 여섯이 모두 되어야 함 — S1 할증 문턱 · 석공에만 · 고정 30% · S2 조건을 고정값으로 · 쓰는 표 바꾸기 · 결과 칸 바꾸기 · S3 새 입력값 「경사」 + 「급이면 10%」 · 내 표 만들어 잇기 · 새 항목 · S4 관계 지우기 · S5 한눈에 보기 · S6 로직끼리 잇기 + 완전히 새 로직 하나(품셈 없이) 만들어 저장 → 다시 열기 → 지우기 · 기존 로직 6개 가져와 값 같음 · 저장 때 서버 값 = 화면 값. diff --git a/docs/raw/M01_쉬운단가/시험판_단추_점검.md b/docs/raw/M01_쉬운단가/시험판_단추_점검.md new file mode 100644 index 000000000..f3ed3d65c --- /dev/null +++ b/docs/raw/M01_쉬운단가/시험판_단추_점검.md @@ -0,0 +1,110 @@ +# 시험판 단추 공용 양식 점검 (35-5 · sub7 · 확인만) + +대상 = `M01_MasterData/EasyCalc` · `LogicBuilder` · `SheetLogic` 의 누르는 것 전부. 화면 수치 = 내 포트 5182 ORCA · `getComputedStyle`(전환 끔 · 밝음 · 어두움) · 판정 직전 `/api/auth/session` 200. + +## 0. 한눈에 + +- **날 단추(`el("button")` 직접) 23 자리** — EasyCalc 5 · LogicBuilder 12 · SheetLogic 6(목록 줄 8 · 칩 11 · 「석공 ▾」 2 · 그림 알약 1 · 글 링크 1). 모두 자체 css 꼴(회색 바탕 · 16px · 테두리 1.75px · 둥글기 8 · 999 · **2px**). +- **공용 `createButton` 을 쓰되 css 가 모양을 덮음 4 곳** — 작은(sm 18px · 12px)을 44px · 16px 로(EasyCalc Cards · LB Steps · SL Panel) · 큰 시작 단추 56px(세 시작 화면). +- **한 화면 안 크기가 섞임** — SL 「+ 상자」 「상자 지우기」 18px 옆에 시트 판 단추 44px · LB 「문장 / 격자」 「빈틈 검사」 18px 옆에 산출근거 단추 44px. +- 색은 모두 테마 토큰 — 어두움에서 자체 꼴도 바뀜(SL 상자 · 알약 · 시트 판 알약 확인) · 문제는 **모양(높이 · 둥글기 · 글 크기 · 테두리)**. +- 시험판 들어가는 단추 셋(「쉬운 단가산출(시험)」 「로직 만들기(시험)」 「시트 로직(시험)」)은 공용 filled md 그대로 — 옆 「식으로 새로 만들기」와 같음(32px · 8px · 14px). + +## 1. 공용 양식 + +| 공용 꼴 | 어디 | 모양(밝음 실측) | 쓰임 | +| --- | --- | --- | --- | +| `createButton` md | `ui_template_elements.ts:43` · 꼴 `ui_template_elements_styles.ts:17-80` | 높이 32 · 둥글기 8px(`--radius-buttons`) · 14px · 500 · 테두리 1px | 모든 단추 | +| `createButton` sm | 같음 `.ui-btn--sm` | 높이 18 · 12px · 안쪽 2px 8px | 표 칸 · 카드 머리 작은 단추 | +| 종류 | `filled` 바탕 rgb(38,17,74) 흰 글 · `ghost` 투명 + 보라 테두리 · `pill` 투명 · 둥글기 1440 · `is-active` 때 mist-violet · `danger` 빨강 · `glass` 3D 위 | 어두움 = filled rgb(185,154,255) · ghost 글 같은 보라 | 탭 · 보기 바꿈 = `pill` + `is-active`(전용 탭 부품 없음) | +| `createTag` | `ui_template_elements.ts:217` · `.ui-tag` | 둥글기 1440 · 12px · 안쪽 4px 16px · accent · neutral · success · warning · danger | 누르지 않는 글 알약 | +| 목록 줄 `.ui-sidebar-row` | `ui_template_overlay.css:384-437` (M01 · M02 공용) | 투명 바탕 · 14px · 둥글기 8 · 안쪽 4px 8px · hover paper · `is-active` mist-violet | 왼쪽 목록 · 찾기 결과 줄 | +| 나무 줄 `createTreeRow` | `ui_template_tree.ts:118` | `.ui-sidebar-row` + 화살표 · 아이콘 · 수 | M02 나무 | +| 모달 `openModal` | `ui_template_modal.ts:20` | 머리 줄 닫기 = ghost md | 세 시험판 모두 씀 ✔ | +| (M01 자체) 알약 `pillButton` | `M01_MasterData_UI_LogicLab_Pill.ts:18` `.m01lab__pill` | M01 지금 화면 것 — ui_template 아님 | 수량 칸 안 표 조각 | +| (엔진 공용) 시트 도구막대 `ss-brush` 등 | `A00_Common/spreadsheet` | 25px · 13px · 테두리 없음 | M02 시트와 같음 — 그대로 | + +## 2. 누르는 것 전수 + +✔ = 공용 그대로 · ▲ = 공용인데 css 가 모양을 덮음 · ✖ = 날 단추(자체 꼴) + +### EasyCalc (쉬운 단가산출) + +| 파일:줄 | 화면 글 | 만드는 법 | 실측(높이 · 둥글기 · 바탕 · 글) | 같은 일의 공용 꼴 | 고칠 안 | +| --- | --- | --- | --- | --- | --- | +| `M01_EasyCalc_Entry.ts:177` | 시작 목록 줄 「돌쌓기 메쌓기(인력) · 내가 만든 것」 | ✖ `m01-easycalc__item` | 42 · 8 · rgb(246,247,250) · 16px · 테두리 0.9 | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_EasyCalc_Entry.ts:565` | 빈 종이로 새로 만들기 | ▲ filled + `m01-easycalc__big` | **56** · 8 · 16px | 없음(큰 크기 없음) | 그대로(초등학생 큰 시작 단추) — 공용에 큰 크기 하나 청하면 덮기 지움 | +| `M01_EasyCalc_Entry.ts` 위 띠 | 되돌리기 · 저장 · 지우기 · 닫기 | ✔ ghost · filled · danger md | 32 · 8 · 14px | — | 그대로 | +| `M01_EasyCalc_Cards.ts:273` | 「석공 ▾」(다시 고르기) | ✖ `m01-easycards-name--pick` | 44 · 8 · 회색 · 16px · 400 | `createButton` ghost | 공용 createButton(ghost)로 | +| `M01_EasyCalc_Cards.css:145` | ▲ ▼ 지움 · 숫자로 바꾸기 | ▲ ghost **sm** → css 44px · 16px | 44 · 8 · 16px | sm 18px | 공용 createButton(ghost · md)로 · sm 덮기 지움 | +| `M01_EasyCalc_Cards.css:179` | + 사람 · + 재료 · + 기계 · + 다른 일위대가 · + 덧붙임 | ▲ ghost md → 44px · 16px | 44 · 8 · 16px | md 32 | 그대로 or 공용 큰 크기(청함) | +| `M01_EasyCalc_Cond.ts:421` | 「표에서 찾은 값」 칩 | ✖ `m01-easycond__chip` 점선 · 1440 | 36 · 999 · 투명 · 16px | `pill` 단추 | 공용 createButton(pill)로 | +| `M01_EasyCalc_Pick.ts:288` | 사람 · 재료 · 기계 · 다른 일위대가(무엇) | ✖ `m01-easypick__kind` | (큰 칸) | `pill` + `is-active` | 공용 pill 로 | +| `M01_EasyCalc_Pick.ts:433` | 고르기 목록 줄 「보통인부 인 하루 172,068」 | ✖ `m01-easypick__row` | **52** · 8 · 회색 · **18px** · 테두리 1.75 | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_EasyCalc_Pick.ts` 아래 | 넣기 · 닫기 | ✔ filled · ghost md | 32 | — | 그대로 | +| `M01_EasyCalc_Table.ts:630` | 표 줄 누르기(tr) | 표 칸 | — | 표 | 그대로(표 줄 고르기) | +| `M01_EasyCalc_Table.ts` 5 곳 | 표 고르기 단추 | ✔ ghost · sm | 18 | — | 그대로 | + +### LogicBuilder (로직 만들기) + +| 파일:줄 | 화면 글 | 만드는 법 | 실측 | 같은 일의 공용 꼴 | 고칠 안 | +| --- | --- | --- | --- | --- | --- | +| `M01_LB_Entry.ts:194` | 시작 목록 줄 「돌쌓기 메쌓기(인력) 표준 1㎡」 | ✖ `m01-lb__item` | 42 · 8 · 회색 · 16px | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_LB_Entry.ts:691` | 단계 안내로 새로 만들기 | ▲ filled + `m01-lb__big` | **56** · 16px | — | 그대로(큰 시작) · 공용 큰 크기 청함 | +| `M01_LB_Entry.ts:585-593` | 문장 / 격자(보기 바꿈) | ✔ sm 인데 filled ↔ ghost 를 바꿔 끼움 | **18** · 8 · 12px | `pill` + `is-active`(탭 꼴) | 공용 createButton(pill) + `is-active` 로 | +| `M01_LB_Entry_Result.ts` | 빈틈 검사 · 지금 예시값으로 한 줄 더하기 · 모두 돌리기 | ✔ ghost sm | 18 · 12px | — | 공용 그대로 · 단 옆 산출근거 44px 와 크기 다름 → md 로 | +| `M01_LB_Source.ts:177` | 표 머리 역할 칩 「조건」 「결과」 「고정」 | ✖ `m01-lbsrc__chip` | 20 · 999 · 옅은 보라 / 초록 · 12px | `createTag`(accent · success) 꼴 + 누름 | 공용 pill sm 로(색은 tag 갈래) | +| `M01_LB_Source.ts:241` | 이 표를 쓰는 로직 N 개 | ✖ `m01-lbsrc__users` 글 단추 | 21 · 0 · 테두리 없음 · 14px | 없음(글 링크) | 그대로(글 링크) 또는 ghost sm | +| `M01_LB_Source.ts:286` | 표 칸 누르기(td) | 표 칸 | — | — | 그대로 | +| `M01_LB_Steps.ts:206` | 「석공 ▾」 | ✖ `m01-lbsteps-pick` | (EasyCalc 와 같은 꼴) | ghost | 공용 createButton(ghost)로 | +| `M01_LB_Steps.css:163` | 산출근거 안 단추 모두 | ▲ `.m01-lbsteps .ui-btn` → 44px · 16px | 44 | — | 공용 md 로(덮기 지움) | +| `M01_LB_Grid.ts:509` | 격자 줄 누르기(tr) | 표 줄 | — | — | 그대로 | +| `M01_LB_Wizard.ts:250 · 291` | 단계 안내 절 · 표 목록 줄 | ✖ `m01-lbw__row` | (목록 줄) | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_LB_Wizard.ts:376` | 칸 역할 「조건 · 고정 · 결과」 | ✖ `m01-lbw__role` | (역할 칩) | pill + is-active | 공용 pill 로 | +| `M01_LB_Wizard.ts:499` · `Wizard_Calc.ts:199 · 448 · 459` | 종류 · 틀 · 항목 연결 · 건너뛰기 칩 | ✖ `m01-lbw__chip` | (칩) | pill + is-active | 공용 pill 로 | +| `M01_LB_Wizard_Calc.ts:172` | 주 고르기 | ✖ `m01-lbw__note` | (칩) | pill + is-active | 공용 pill 로 | + +### SheetLogic (시트 로직) + +| 파일:줄 | 화면 글 | 만드는 법 | 실측 | 같은 일의 공용 꼴 | 고칠 안 | +| --- | --- | --- | --- | --- | --- | +| `M01_SL_Entry.ts:178` | 시작 목록 줄(기존 로직 가져오기) | ✖ `m01-sl__item` | 42 · 8 · 회색 · 16px | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_SL_Entry.ts:297` | 새로 만들기(빈 판) | ▲ filled + `m01-sl__big` | **56** · 16px | — | 그대로(큰 시작) · 공용 큰 크기 청함 | +| `M01_SL_Entry_Paper.ts` | 실행 취소 · 저장 · 지우기 · 닫기 | ✔ ghost · filled · danger md | 32 | — | 그대로 | +| `M01_SL_Diagram.ts` | + 상자 · 상자 지우기 | ✔ filled sm · danger sm | **18** · 12px | — | 공용 md 로(옆 시트 판 44px 와 맞춤) | +| `M01_SL_Diagram.ts:181` | 상자 양옆 알약 「뒷길이 25」 「? 단가 268,908」 | ✖ `m01-sldg__pill` | 20 · 999 · 입력 옅은 주황 / 출력 옅은 보라 / 빈 칸 점선 · 12px | 그림 요소(공용 없음) | 그대로(다이어그램 그림) — 둥글기 · 글은 tag 와 같음 | +| `M01_SL_Diagram.ts:249` | 상자 누르기(div) | 그림 상자 | 80~152 · 8 | — | 그대로 | +| `M01_SL_Panel.ts:323` | 시트 판 알약 「입력 · 뒷길이 (B2)」 | ✖ `m01-slpanel-pill` | **44** · 1440 · 회색 · 16px · 테두리 1.75 | pill 단추 · 그림 알약(20px)과 같은 것인데 꼴 다름 | 공용 pill 로 · 다이어그램 알약과 한 꼴 | +| `M01_SL_Panel.css:35` | 입력 알약으로 · 출력 알약으로 · 할증 · 나누기 · 만약 · 표에서 찾기 | ▲ ghost **sm** → 44px · 16px | 44 · 8 | sm 18 | 공용 md 로 · sm 덮기 지움 | +| `M01_SL_Table.ts:301 · 338` | 품셈 표 찾기 결과 줄 | ✖ `m01-sltbl__row` | (목록 줄) | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_SL_Table.ts:509` | 칸 역할 「높이 조건 → 입력 알약」 | ✖ `m01-sltbl__role` | **63** · **2px**(토큰 밖) · 회색 · 16px · 테두리 1.75 실선 / 점선 | pill + is-active | 공용 pill 로 · 둥글기 2px 버림 | +| `M01_SL_Item.ts` | 종류 고르기 · 다시 고르기 · 단가 다시 가져오기 | ✔ ghost · sm | — | — | 그대로 | +| 시트 도구막대 | 서식… · 붓 · ↑ … | 엔진 `ss-brush` | 25 · 0 · 13px | M02 시트와 같음 | 그대로 | + +## 3. 어두움(실측 — SL) + +| 꼴 | 바탕 | 글 | +| --- | --- | --- | +| filled md · sm | rgb(185,154,255) | rgb(22,18,31) | +| ghost | 투명 | rgb(185,154,255) | +| danger sm | rgb(232,105,90) | rgb(22,18,31) | +| `m01-sldg__box` | rgb(30,25,48) | rgb(228,224,240) | +| `m01-sldg__pill`(입력) | 어두운 주황 | rgb(229,168,102) | +| `m01-slpanel-pill` | rgb(30,25,48) | rgb(228,224,240) | + +→ 자체 꼴도 토큰이라 어두움에서 깨지지 않음 · 고칠 것은 모양뿐. + +## 4. 고칠 안 (갈래별) + +1. **목록 줄 8 자리**(Easy 시작 · Easy 고르기 · LB 시작 · LB 단계 절 · 표 · SL 시작 · SL 표 찾기 둘) → 공용 `.ui-sidebar-row` 꼴. 초등학생용 큰 줄이 필요하면 ⬜ 공용에 「큰 줄」 갈래 하나를 청함(자체 css 로 덮지 않음). +2. **칩 · 역할 · 틀 11 자리 + 보기 바꿈 1**(Cond 칩 · Pick 종류 · LB 역할 칩 · 단계 안내 칩 넷 · 역할 · 주 · SL 칸 역할 · SL 시트 판 알약 + LB 문장/격자) → 공용 `createButton({ variant: "pill" })` + `is-active`. 역할 색(조건 보라 · 결과 초록)은 `ui-tag` 색 갈래를 빌림. +3. **「석공 ▾」 다시 고르기 2 곳**(Easy Cards · LB Steps) → 공용 `createButton({ variant: "ghost" })`. +4. **sm 를 44px 로 덮는 css 3 곳**(Easy Cards · LB Steps · SL Panel) → 덮기 지우고 공용 md(32px). 한 화면에 18 · 32 · 44 가 섞이지 않게 — SL 「+ 상자」 · LB 「빈틈 검사」 sm 도 md 로. +5. **큰 시작 단추 3 곳**(56px) → 그대로(설계 「초등학생 큰 단추」) · ⬜ 공용에 큰 크기(`lg`)를 더하면 그것으로 바꿈. +6. **그대로** — 다이어그램 상자 · 알약(그림 요소) · 표 줄 · 표 칸 누르기 · 시트 도구막대(엔진 공용) · 「이 표를 쓰는 로직 N 개」 글 링크. +7. SL 칸 역할 둥글기 **2px** 는 토큰(8 · 1440) 밖 — 2번에서 함께 바뀜. + +## 덧 + +- EasyCalc 시작 화면 「내가 만든 것」 줄이 **53 개** — 여러 창의 시험 저장이 `로직_자체.json`(공유 storage)에 남은 것으로 보임(점검 범위 밖 · 사실만). +- 측정 주의 — 보기 바꿈처럼 class 를 바꾼 직후 `getComputedStyle` 은 0.12 초 전환 중 값을 줌 → 전환을 끈 뒤 잼. diff --git a/docs/raw/M01_쉬운단가/원가다이어그램_정함.md b/docs/raw/M01_쉬운단가/원가다이어그램_정함.md new file mode 100644 index 000000000..bc9680deb --- /dev/null +++ b/docs/raw/M01_쉬운단가/원가다이어그램_정함.md @@ -0,0 +1,40 @@ +# 단가산출 다이어그램 시험판 — 정함 (PLAN 35-7 · 브레인 · 10-01 오후) + +사용자 기준(10-01 14시 무렵 · 요약): 다이어그램은 요소 종류로 칸을 나누지 않고 자유 배치 · 단가산출 로직 = 최종 원가를 내는 로직 · 상자는 입력 · 함수 · 출력 · 입력 상자 = M01 저장 그룹(인력 · 재료 · 유가/전력 · 기계 · 소요량 · 계수 · 환율) · 입력 상자를 누르면 그 정보 — M01 그룹 내용 · 요소 고르기 · M01 표 「추가」 화면을 다시 써서 추가 / 삭제 · 그룹 밖 정보(면적 · 길이 · 부피)는 변수 + 입력 정의 · 함수 상자도 변수 + 입력 정의 · 함수 상자는 받은 입력을 엑셀로 셈해 결과를 다음으로 · 함수 상자 하나 = 함수 하나(연속 연산 가능 · 출력은 하나) · 함수 상자 직렬 · 병렬 · 모든 상자 오른쪽 위에 단위(무차원 · 글 · 어려우면 「-」) · 출력 상자는 입력 · 함수 상자에 이어지고 어떤 비용인지(노무비 · 재료비 · 경비 …) 정함 · 품셈 분석보다 사용자와 브레인이 같이 쓸 프로그램이 먼저 · 상자 색 지정 · 엑셀 · 다이어그램 영역 더 높게 · 「상자와 선」 이름은 「다이어그램」 · 별도 단추로 시험판 페이지 · M02 폴더 · 기존 시험판과 다른 폴더 · 화면에 보일 임시 파일도 같은 폴더. + +## 기준 점검 — 빠진 곳 · 두 뜻인 곳과 브레인 정함(사용자가 바꿀 수 있음) + +1. **요율이 입력 그룹에 없음** — M01 에는 요율(19줄 · 공구손료 등 비율)이 있음 → 입력 그룹에 넣음. +2. **유가/전력 · 품셈재료** — M01 에서는 재료 그룹 안의 파일 → 입력 그룹에서 유가/전력은 따로 · 품셈재료는 재료 안. +3. **소요량 · 계수는 조건 표** — 요소 하나가 아니라 「조건 칸 → 값 칸」 표 → 입력 상자는 표(또는 고른 줄 하나)를 내보내고, 조건에 맞는 줄 찾기는 함수 상자의 엑셀 수식(XLOOKUP · INDEX/MATCH)이 함. +4. **함수 상자 「함수 하나 · 연속 연산 · 출력 하나」** — 상자 안에서는 여러 칸으로 이어 셈해도 되고, 밖으로 나가는 출력은 한 칸만. +5. **비용이 아닌 출력** — 시간당 작업량처럼 다른 로직이 받을 값도 있음 → 출력 종류에 「값(비용 아님)」 더함. +6. **최종 원가 합계** — 출력 상자들을 비목별로 모아 원가(노무비 · 재료비 · 경비 · 계 · 기준단위당)를 보이는 칸을 둠. +7. **「추가 / 삭제」 뜻** — 입력 상자에 넣을 요소를 M01 그룹 화면에서 골라 넣고 빼는 것. 그룹에 없는 새 요소는 M01 표 「추가」 화면 꼴로 만들되 마스터에 쓰지 않고 시험 폴더에 「사용자 요소」로 저장. +8. **단위** — 상자 오른쪽 위 = 그 상자 출력의 단위 · 입력 상자는 요소 단위를 따름(요소가 여럿이면 알약마다 · 상자 표시는 「-」) · 함수 · 출력 상자는 사용자가 정함(기본 「-」). +9. **색** — 종류별 기본 색(입력 · 함수 · 출력이 서로 다름) + 상자마다 색 바꾸기. +10. **들어가는 곳** — 별도 단추 「단가산출 다이어그램(시험)」 = M01 단가산출 막대의 다른 시험판 단추 옆 · 누르면 화면 전체를 덮는 시험판 페이지(닫기로 돌아감) — 길잡이(router)는 안 고침. +11. **폴더** — `M02_MasterTemplete/CostFlow/` · 저장 · 임시 파일 = 그 안 `_data/`(git 밖) · 화면에 처음 보일 견본 로직 = 그 안 `_sample/` · 폴더째 지우면 끝 · SheetLogic · LogicBuilder 폴더에 기대지 않음(필요한 코드는 새 폴더로 옮겨 고쳐 씀 · 엔진 · ui_template · M01 Api 는 가져다 씀). +12. **다이어그램** — 상자는 끌어 자유 배치(자리 저장) · 판 끌기 · 확대 / 축소 · 선은 굽은 선 · 고른 상자와 이어진 선만 진하게 · 「다이어그램」 이름 · 높이 크게(화면 위쪽 큰 영역) · 아래 고른 상자 판도 크게(안쪽 스크롤 없이). +13. **우선** — 품셈 1,469 로직 옮기기 · 분석은 안 함 · 사용자와 브레인이 같이 쓰는 프로그램 먼저. + +## 상자 · 선 약속 + +- 입력 상자: 갈래 = 그룹(인력 · 재료 · 유가/전력 · 기계 · 소요량 · 계수 · 환율 · 요율) 또는 변수 · 그룹이면 고른 요소마다 출력 알약(이름 · 값 · 단위) · 소요량 / 계수면 표(또는 한 줄) 알약 · 변수면 변수마다 알약(이름 · 갈래 숫자 / 선택 / 글 · 단위 · 범위 · 예시값). +- 함수 상자: 시트 하나 · 입력 알약(받는 칸) 여럿 · 변수(입력 정의) · **출력 알약 하나** · 단위. +- 출력 상자: 받는 자리 하나 · 비용 종류(노무비 · 재료비 · 경비 · 값) · 단위. +- 선: 입력 → 함수 · 입력 → 출력 · 함수 → 함수(직렬) · 여러 함수 → 한 함수(병렬 모음) · 함수 → 출력. 출력에서 나가는 선 없음 · 순환 막음. +- 계산: 우리 스프레드시트 엔진 한 벌 · 화면은 브라우저 · 저장은 서버가 같은 엔진 Node 로 다시 셈 · 입력 값(노임 · 단가 · 표)은 열 때 · 저장 때 마스터에서. + +## 파일 · 창 (`M02_MasterTemplete/CostFlow/` · 700줄 안) + +| 파일 | 창 | +| --- | --- | +| `M02_CF_Model.ts` · `M02_CF_Eval.ts` | sub7 — 타입 먼저 | +| `M02_CF_Router.py` · `M02_CF_Api.ts` · `.gitignore` | sub4 | +| `M02_CF_Diagram.ts` + css | sub8 | +| `M02_CF_FuncPanel.ts` + css | sub2 | +| `M02_CF_InputPanel.ts` + css | sub3 | +| `M02_CF_OutputPanel.ts` · `M02_CF_Summary.ts` + css | sub5 | +| `_sample/*.json` · `M02_CF_Sample.ts` | sub6 | +| `M02_CF_Entry.ts` + css | sub1 — 단추 · 시험판 페이지 · 잇기 · 끝 검증 | diff --git a/docs/raw/M01_쉬운단가/흐름도_적용_정함.md b/docs/raw/M01_쉬운단가/흐름도_적용_정함.md new file mode 100644 index 000000000..2536a147b --- /dev/null +++ b/docs/raw/M01_쉬운단가/흐름도_적용_정함.md @@ -0,0 +1,37 @@ +# 흐름도 본 프로그램 적용 — 정함 (PLAN 36 · 브레인 · 10-01 23시) + +사용자 지시 · 결정은 PLAN.md 36장 머리 줄(그대로 인용)이 기준. 아래는 창끼리 맞출 약속. + +## 목적 + +「단가산출 로직」 화면에서 로직을 열면 왼쪽 = 지금 내용(보기) · 오른쪽 = 같은 로직의 흐름도(고치는 곳). 한 로직 · 두 보기 · 고칠 곳은 흐름도 한 곳. 옛 로직은 열 때 흐름도로 자동 변환(파일은 안 바뀜) · 흐름도로 [저장]하면 그 로직은 흐름도가 정본. + +## 약속 + +1. **로직 줄 「흐름」 칸** — 마스터 로직 줄(`resources/master_data/로직_*.json` 의 `줄[]`)에 `흐름`(CfLogic JSON · DataFlow Model 꼴 그대로). 있으면 흐름도가 정본. 쓰는 때 = 화면 [저장](기존 LogicLab `POST /save` 의 줄에 실어 보냄)뿐 · 자동 변환 결과를 파일에 쓰지 않음. 서버는 저장 때 흐름을 검사(Model 검사 꼴)하고 서버 셈으로 다시 셈. +2. **흐름 받기 길** — `GET /api/m01/logic/flow?file=&key=` → `{flow: CfLogic, converted: bool, notes: string[]}` · 줄에 `흐름` 이 있으면 그대로(converted false) · 없으면 변환(converted true · notes = 못 옮긴 곳 쉬운 말). 변환 모듈 = `M02_MasterTemplete/DataFlow/M02_DF_Convert.py`(sub7 · 서버 단독 · 옛 식 파서는 지금 서버가 쓰는 것을 그대로 씀). +3. **변환 규칙** — 입력 → 입력 상자(변수 · 고르기 = choice · 범위) · 중간 식 → 함수 상자(식 하나 = 결과 하나) · 호표 줄 → 요소 알약(단가) + 수량 함수 + 출력 상자(비목별: 노무비 · 재료비 · 경비) · 결과 식 · 덧줄 · 끝수 → 함수 · 끝수 · 옛 식에 나온 이름마다 알약을 칸에 연결하고 식은 칸 주소로(M02 방식) · 만약 → IF · 또는 → OR · 최대/최소 → MAX/MIN · 올림/반올림/버림 → ROUNDUP/ROUND/ROUNDDOWN · 찾기(표, 조건=값).칸 → 표 알약 + 선 규칙 「표에서 찾기」 · 로직(…) → 다른 로직 입력 상자 · 자동 배치(입력 왼쪽 → 함수 가운데 → 출력 오른쪽 · 겹침 없음). 전수 대조 = 1,472 로직마다 옛 셈 값(기본 입력 · 시험입력) = 변환 흐름도 셈 값 · 맞는 비율 · 안 맞는 까닭 목록(읽기만 · 파일 안 씀). +4. **계산 길** — 기존 M01 계산(`/calc` 꼴 · 시험 계산 · 다른 화면이 부르는 셈)이 줄에 `흐름` 이 있으면 DataFlow 서버 셈(`M02_DF_Compute.py`)으로 · 없으면 지금 셈 그대로. 입력 이름 = 흐름의 「설계 때 정할 것」(변수 이름) 그대로. +5. **오른쪽 패널** — `M02_MasterTemplete/DataFlow/M02_DF_Panel.ts`(sub8) `mountFlowPanel(host, opts) → handle` · opts = { logic: CfLogic; readOnly?: boolean; title: string; onChange(lg: CfLogic): void; logics?(key) } · handle = { set(lg), destroy(), expand() } · 다이어그램 · 상세 내용 · 원가 · 검증 칸을 패널 안에(세로로) · 너비 끌어 조절 · 접기 · 「크게 보기」(전체 화면 · 닫으면 패널로) · 저장 단추는 패널에 없음(페이지 [저장] 하나) · 실행 취소는 패널 안. +6. **페이지 저장 하나** — 패널 조작 = 페이지 캐시(drafts · sessionStorage)에 쌓임 · [저장] 한 번에 줄(흐름 포함) 보냄 · [고친 것 버리기] = 흐름도 고친 것도 버림 · 자동저장 없음. +7. **왼쪽 보기(흐름 로직)** — 기본정보(지금대로) · 단가산출 상세 = 흐름도 출력 상자를 비용 종류별 줄(이름 · 단위 · 값) · 소계 · 계 · 텍스트 수식 = 함수 상자마다 「식 보기」 두 줄(이름 식 · 값 식) · 시험 계산 = 계산 길(4) 그대로. 흐름 없는 옛 로직의 왼쪽은 지금 그대로. +8. **식 보기 · 조건 만들기** — `M02_DF_FormulaView.ts`(sub2) `formulaLines(box: CfBox, values) → { name: string; named: string; valued: string; branches?: {when: string; then: string; now: boolean}[] }[]` (칸 주소 → 연결 알약 이름 · ×, ÷ · IF 는 만약 / 아니면 줄) — 상세 내용 함수 판과 왼쪽 텍스트 수식(sub5)이 함께 씀. 「조건 만들기」 = 엑셀 시트 안 기능(`A00_Common/spreadsheet/spreadsheet_condition.ts` 새 파일 · 편집기 우클릭 「조건 만들기」 · 부르는 쪽이 `conditions` 선택을 줄 때만 보임 → M02 화면은 그대로) · 만약 [칸 · 알약] [비교] [값] → [칸 · 값] 줄 · 아니면 만약 · 아니면 → 고른 칸에 IF 식 · 값 목록은 부르는 쪽 `valuesFor(a1)` 이 줌. +9. **선 조건(조건 통과)** — 웹앱 모양 그대로 · CfRule gate = `{ kind: "gate"; conds: { from: CfPort; op; value }[]; join: "그리고" | "또는" }`(옛 한 줄 꼴도 읽음) · Model `valueChoices(lg, port) → (string | number)[] | null`(변수 고르기 · 표 칸 값 · 재료 규격 · 없으면 null = 숫자 칸 + 범위 검사) · 규칙 → 받는 칸 엑셀 식 · 서버 Compute 같은 뜻 · 선 이름표 「지반 = 토사 그리고 높이 ≥ 3 일 때만」. +10. **단추** — 「식으로 새로 만들기」 지움 · 「신규 로직」(빈 흐름도 + 기본정보 칸 이름 · 원문번호 · 결과 단위 · 출처 · 구분 자체 → drafts 새 줄 → [저장] 때 서버가 GX 새 키) · 「본떠 만들기」 → 「로직 복사/생성」(신규 로직 오른쪽 · 흐름도 있으면 함께 복사) · 「시험판 ▾」 과 시험판 단추 둘 지움. +11. **다른 로직 입력** — 고를 대상 = 마스터 로직 전체(기존 로직 목록 찾기) · 내보내는 알약 = 그 로직 출력(흐름이면 출력 상자 · 옛 로직이면 노무비 · 재료비 · 경비 · 계) · 받는 알약 = 그 로직 입력 · 값 = 서버 계산 길(4). +12. **권한** — 흐름도 고치기 · 저장 = 시스템 관리자(공용 로직 포함) · 그 밖은 보기만. +13. **안전** — 서버는 환경 변수 `AISLO_MASTER_DIR` 가 있으면 그 폴더를 마스터 폴더로(없으면 지금대로 · sub4). 화면 저장 시험은 자기 폴더 `tmp/master_copy_36/`(resources/master_data 사본) + 그 변수로 띄운 자기 서버에서만 · 끝나면 git status 로 resources/master_data 안 바뀜 확인. 시험(pytest)은 사본 폴더 · 마스터 내용에 기대지 않음. +14. **정리** — DataFlow · CostFlow 폴더 그대로 · 흐름도 시작 화면 견본 목록 지움 · 시험이 쓰는 견본은 `resources/tester/fixtures_df/` 로 옮기고 그 밖 견본 지움 · 시험판 입구 지움. + +## 창 + +| 창 | 맡음 | +| --- | --- | +| sub7 | 36-0b 선 조건 틀(gate conds · join · valueChoices · Rule 식 · 시험) 먼저 → 36-2 변환(M02_DF_Convert.py · 자동 배치 · 전수 대조) | +| sub2 | 36-0 상세 내용 함수 판 「식 보기」 · 칸 연결 표 · 칸 색 · M02_DF_FormulaView.ts · 엑셀 「조건 만들기」(spreadsheet_condition.ts) · LinkPanel 조건 여러 줄 · 값 목록 고르기 | +| sub6 | 36-1 조사(옛 식 문법 전수 · 파서 위치 · 못 옮기는 꼴 · 계산 길을 부르는 곳) → sub7 에 넘김 → 36-7 정리(견본 · 시험 옮김) | +| sub8 | 36-3 M02_DF_Panel.ts(패널 꼴 · 너비 · 접기 · 크게 보기) · 선 이름표 여러 조건 | +| sub4 | 36-4 서버 — 「흐름」 칸 저장 · 검사 · /api/m01/logic/flow · 계산 길 갈래 · 신규 GX · 복사에 흐름 · 권한 · AISLO_MASTER_DIR · Compute 여러 조건 | +| sub5 | 36-4 왼쪽 보기(흐름 로직의 단가산출 상세 · 텍스트 수식 · 시험 계산) | +| sub3 | 36-6 다른 로직 입력 = 마스터 로직 고르기 · 값 | +| sub1 | 36-5 단추 · 시험판 지움 · LogicLab 두 칸 배치 · 패널 잇기 · drafts 저장 하나 → 36-8 끝 검증 | diff --git a/docs/raw/M01_쉬운단가/흐름도_적용_조사.md b/docs/raw/M01_쉬운단가/흐름도_적용_조사.md new file mode 100644 index 000000000..c2672300d --- /dev/null +++ b/docs/raw/M01_쉬운단가/흐름도_적용_조사.md @@ -0,0 +1,121 @@ +# 흐름도 본 프로그램 적용 — 36-1 옛 식 조사 (sub6 · 읽기만) + +근거 = 마스터 로직 파일 57 개 · 로직 줄 **1,472**(자체 `로직_자체.json` 포함) · 식을 지금 서버 파서(`master_formula.parse`)로 전부 읽음 — **못 읽는 식 0** · 파일 안 씀. +수 칸 = 「나온 수(식 마디 수) / 그 꼴이 든 로직 수」 · 예 = 키 + 식 앞부분. + +## ① 옛 식을 푸는 서버 코드 + +| 무엇 | 자리 | +| --- | --- | +| 식 문법 · 파서(`_Parser` — 또는 → 그리고 → 비교 → + - → * / → 부호 · `.칸` → 기본) | `resources/master_data/scripts/master_formula.py:56`(`parse` :225 · 함수 목록 `FUNCS` :23 = 만약 · 올림 · 버림 · 반올림 · 최소 · 최대 · 비교 `_OPS` :27) | +| 기본 마디 — `( )` · `'글'` · 수 · `찾기(표, 조건=값…)` · `로직(키, 넘길=값…)` · 함수 · 요소 키(`LB000002`) · `ID:원문번호{입력}`(`EQ:{기계}`) · 이름 | 같은 파일 `primary` :185 · 요소 키 판정 `mk.KEY`(`master_keys.py`) | +| 셈(나무 풀기) — 이름 · 요소 값 · 찾기 · 로직 부름 · 함수 · 사칙 · 비교 · 그리고 / 또는(지름길) | `master_formula.py:385` `evaluate` | +| 표 찾기 — 빈 조건 칸 = 무엇이든 · 범위규칙(초과·이하 · 이상·이하 · 이상·미만 · 이하) · 여러 줄이면 위 끝 최소 · 찾는 칸 있는 줄 | `master_formula.py:331` `_match` · `:362` `find` | +| 로직 한 줄 셈 — 입력 검사 → 중간 차례 → 결과 식 또는 호표 줄(수량 × 단가 · 로직 줄은 비목 나눔) → 덧줄(앞 줄까지 비목 합) → 끝수 | `master_formula.py:538` `run` · 입력 `_inputs` :489 · 빈 가격 입력 `fill_empty` :479 · 끝수 `cut` :468 · `{입력}` 채우기 `fill` :314 | +| 요소 값 · 재료 단가 | `master_material.py:238` `element` · `master_pick.py:130` `priced` · `:123` `pick`(검색어 묶음 → 품목) | +| 정적 검사(저장 때) | `master_formula.py:744` `check_logic` · `M01_MasterData_Store_Cache.py:69` `_check` | +| M01 셈 진입 | `M01_MasterData/M01_MasterData_Store.py:543` `calc`(사본 읽기 → 줄 바꿔 끼움 `_swap` :524 → `cm.calc`) · `:572` `text`(읽는 식 줄 `master_text.py:493 lines`) · `:563` `auto`(견본 입력) | +| 일괄 | `check_master.py:174` `calc` · `:511` `calc_all`(시험입력으로 전 로직) | + +## ② 1,472 로직 식 말 전수 + +| 꼴 | 나온 수 | 로직 수 | 예(3) | +| --- | --- | --- | --- | +| 따옴표 글 | 12,536 | 1,085 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000273, 기계='6516-0060')` | +| 이름 = 입력 | 10,815 | 1,178 | GC000994 `찾기(QC001863, 지반구분=지반구분).시공량` · GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 찾기(…).칸 | 8,156 | 1,401 | GC000994 `찾기(QC001863, 지반구분=지반구분).시공량` · GC000995 `찾기(QC001864).시공량` · GC000996 `찾기(QC001865).시공량` | +| 찾기(표 · 조건) | 8,156 | 1,401 | GC000994 `찾기(QC001863, 지반구분=지반구분).시공량` · GC000995 `찾기(QC001864).시공량` · GC000996 `찾기(QC001865).시공량` | +| 사칙 * | 7,697 | 1,037 | GC000994 `찾기(QC000237).크롤러드릴_공기식 * 8 / 시공량` · GC000996 `찾기(QC001865).'그라우팅 믹서(190×2ℓ)' * 8 / 시공량` · GC000997 `찾기(QC001866).크레인 * 8 / 시공량` | +| 이름 = 중간값 | 7,367 | 1,184 | GC000994 `찾기(QC000237).보링공 / 시공량` · GC000995 `찾기(QC001864).철근공 / 시공량` · GC000996 `찾기(QC001865).보링공 / 시공량` | +| 사칙 / | 3,824 | 1,019 | GC000994 `찾기(QC000237).보링공 / 시공량` · GC000995 `찾기(QC001864).철근공 / 시공량` · GC000996 `찾기(QC001865).보링공 / 시공량` | +| 비교 == | 3,736 | 451 | GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` · GC000999 `만약(시공구분 == '기계시공', 찾기(QC001868, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` · GC001000 `만약(시공구분 == '기계시공', 찾기(QC001869, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` | +| 함수 만약 | 3,541 | 477 | GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` · GC000999 `만약(시공구분 == '기계시공', 찾기(QC001868, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` · GC001000 `만약(시공구분 == '기계시공', 찾기(QC001869, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` | +| 호표 요소 = 키(인력) | 3,451 | 1,369 | GC000994 `LB000014` · GC000995 `LB000008` · GC000996 `LB000014` | +| 사칙 + | 3,094 | 668 | GC000996 `(보링공 * LB000014 + 기계설비공 * LB000051 + 특별인부 * LB000003) * 11 / 100` · GC000997 `(중급기술자 * LB000286 + 보링공 * LB000014 + 특별인부 * LB000003 + 보통인부 * LB000002` · GC000998 `(철공 * LB000009 + 보통인부 * LB000002) * 3 / 100` | +| 로직(다른 로직 부르기) | 1,116 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 로직 넘길 값 있음 | 1,089 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 호표 요소 = 로직 부르기(장비 · 일위대가) | 1,075 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 호표 비목 없음(로직 줄 → 비목 나눔) | 1,075 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 찾기 조건 없음(표 한 줄) | 1,022 | 286 | GC000994 `찾기(QC000237).보링공 / 시공량` · GC000995 `찾기(QC001864).시공량` · GC000996 `찾기(QC001865).시공량` | +| 요소 키 부르기(인력) | 924 | 393 | GC000996 `(보링공 * LB000014 + 기계설비공 * LB000051 + 특별인부 * LB000003) * 11 / 100` · GC000997 `(중급기술자 * LB000286 + 보링공 * LB000014 + 특별인부 * LB000003 + 보통인부 * LB000002` · GC000998 `(철공 * LB000009 + 보통인부 * LB000002) * 3 / 100` | +| 호표 요소 = 재료 고르기 묶음(구분 · 상세구분 · 검색어) | 673 | 231 | GC000319 `{"구분": "도료·방수·접착", "상세구분": "도료", "검색어": "융착식 프라이머"}` · GC000337 `{"구분": "철근·강재", "상세구분": "철망·와이어메쉬", "검색어": "철망 Φ3.2."}` · GC000723 `{"구분": "잡재료", "상세구분": "용접·가스", "검색어": ""}` | +| 논리 또는 | 297 | 35 | GC000346 `(만약(공법군 == '발파굴착A군' 또는 공법군 == '기계굴착A군', 착암공인원, 0)) * 배율` · GC000111 `만약(토질_암분류 == '호박돌 섞인 고결토・경질토' 또는 토질_암분류 == '풍화암', 로직(GC000267, 기계='020` · GC001136 `찾기(QC002058, '규격(㎜)범위'=만약(규격 == 'ø15' 또는 규격 == '20' 또는 규격 == '25' 또는 규` | +| 사칙 - | 273 | 156 | GC000998 `찾기(QC001867).시공량 * (1 - (수직고초과단계 * 9 - 경사가산) / 100)` · GC001008 `찾기(QC001880, 기계구분=기계구분).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC00` · GC001009 `찾기(QC001883).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC001884, 연간시공횟` | +| 논리 그리고 | 199 | 23 | GC001120 `만약(부위 == '뿜칠재' 그리고 뿜칠면 == '콘크리트면', 1.2, 1)` · GC000753 `찾기(QC001431, '배관규격(mm)'=배관규격, 보온재=보온재, 보온두께=보온두께).시공량 * (1 + (0 - 만약(설` · GC000769 `만약((규격 >= 15 그리고 규격 <= 25) 또는 (규격 >= 32 그리고 규격 <= 50), 0, 찾기(QC001447,` | +| 시험입력 있음 | 195 | 0 | | +| 요소키.칸(요소 칸 값) | 160 | 49 | GC001043 `EQ000532.주연료2 * 찾기(QC001933, 맨홀구분=맨홀구분).'모르타르 믹서(0.3㎥)' * 8 / 시공량` · GC000137 `찾기(QC000264).IC진동롤러_자주식 * 8 * EQ000098.주연료 * 찾기(QC000270, 구분='주연료 할증')` · GC000138 `EQ:{장비}.주연료종류` | +| 이름 = 비목 합(노무비 · 재료비 · 경비) | 153 | 146 | GC000722 `노무비 * 기계경비율 / 100` · GC000723 `노무비 * 기계경비율 / 100` · GC000724 `노무비 * 기계경비율 / 100` | +| 비교 <= | 123 | 36 | GC000570 `만약(층수 <= 10, 0, 만약(층수 <= 15, 4, 4 + 올림((층수 - 15) / 5)))` · GC000346 `만약(갱구거리 <= 500, 0, 찾기(CC000077, 갱구에서뚫기점까지의거리=갱구거리).할증률)` · GC000185 `만약(타설깊이 <= 25, 찾기(QC000348, L='25이하').t_1, 만약(타설깊이 <= 30, 찾기(QC000348,` | +| 함수 최대 | 122 | 43 | GC000750 `올림(최대(댐퍼면적 - 0.1, 0) / 0.1)` · GC000373 `최대(찾기(CC000125, 형식=만약(형식 == '박스거더' 또는 형식 == '강바닥판 박스거더', '박스거더', '박스거더` · GC000203 `최대(만약(용도 == '신구-콘크리트 접착제바르기', 찾기(QC000412, 용도=용도, 재료명='Epoxy신구-콘크리트접착제` | +| 비교 > | 99 | 44 | GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000576 `찾기(QC001212, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000580 `찾기(QC001218, '시공높이(m)'=최소(시공높이m, 7.2), '블록규격(mm)'=블록규격mm, 마감=마감).시공량 *` | +| 요소 부르기 ID:원문번호(+{입력}) | 84 | 14 | GC000138 `EQ:{장비}.주연료종류` · GC000139 `EQ:{장비}.주연료종류` · GC000267 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) * (1 + 가산비율 / ` | +| 요소 키 부르기(기계) | 78 | 37 | GC001043 `EQ000532.주연료2 * 찾기(QC001933, 맨홀구분=맨홀구분).'모르타르 믹서(0.3㎥)' * 8 / 시공량` · GC000137 `찾기(QC000264).IC진동롤러_자주식 * 8 * EQ000098.주연료 * 찾기(QC000270, 구분='주연료 할증')` · GC000140 `EQ000004.주연료종류` | +| 찾기 조건 값이 식 | 70 | 33 | GC001008 `(특별인부 * LB000003 + 보통인부 * LB000002 + 그물막인부 * LB000002) * 찾기(QC001882, ` · GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000576 `찾기(QC001212, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` | +| 함수 올림 | 67 | 53 | GC000570 `만약(층수 <= 10, 0, 만약(층수 <= 15, 4, 4 + 올림((층수 - 15) / 5)))` · GC000750 `올림(최대(댐퍼면적 - 0.1, 0) / 0.1)` · GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` | +| 호표 요소 = 자리 표시 {입력}(LB:{직종} 등) | 66 | 57 | GC000559 `LB:{공수직종}` · GC001043 `MO:휘발유:{지역}` · GC000137 `MO:경유:{지역}` | +| 함수 최소 | 51 | 18 | GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000576 `찾기(QC001212, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000580 `찾기(QC001218, '시공높이(m)'=최소(시공높이m, 7.2), '블록규격(mm)'=블록규격mm, 마감=마감).시공량 *` | +| 빼기 부호(-x) | 47 | 28 | GC001008 `찾기(QC001880, 기계구분=기계구분).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC00` · GC001009 `찾기(QC001883).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC001884, 연간시공횟` · GC001012 `찾기(QC001889).시공량 * (1 - (-살포량증감) / 100)` | +| 비교 < | 46 | 26 | GC000561 `만약(층수층 < 6, 찾기(CC000157, '강재사용량(㎏/㎡)'=강재사용량).'보정치(a)' * 찾기(CC000159, '` · GC000564 `만약(강재총사용량 < 300, 1, 찾기(CC000165, '강재총사용량(t)'=강재총사용량, '1t당 볼트본수(본)'=볼트본` · GC000101 `만약(수심증감 == '적용 안 함', 0, 만약(수심 < 2.5, 0 - 찾기(QC000204, 수심=수심).감, 만약(수심 ` | +| 함수 반올림 | 42 | 41 | GF000003 `반올림(3600 * q * K * f * E / Cm, 3)` · GF000042 `반올림(3600 * q * K * f * E / Cm, 3)` · GF000088 `반올림(3600 * q * K * f * E / Cm, 3)` | +| 재료 묶음에 {입력} | 32 | 19 | GC000264 `{"구분": "레미콘", "상세구분": "레미콘", "검색어": "레미콘 {굵은골재최대치수}-{강도}-{슬럼프}"}` · GC000431 `{"구분": "기계·설비", "상세구분": "기계류", "검색어": "싱글코아바렐 {규격}"}` · GC000432 `{"구분": "기계·설비", "상세구분": "기계류", "검색어": "더블코아바렐 {규격}"}` | +| 함수 버림 | 32 | 17 | GC000267 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) * (1 + 가산비율 / ` · GC000268 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) + EQ:{기계}.관리비계` · GC000269 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) * (1 + 가산비율 / ` | +| 결과 식 로직(돈 아님) | 27 | 27 | GC000422 `a * E` · GF000003 `반올림(3600 * q * K * f * E / Cm, 3)` · GF000042 `반올림(3600 * q * K * f * E / Cm, 3)` | +| 요소 키 부르기(재료) | 23 | 8 | GC000360 `((찾기(QC000648, 품명='아세틸렌', 레일규격=레일규격).수량) * MT003163 + (찾기(QC000648, 품명` · GC000361 `((찾기(QC000650, 품명='테르밋용재', 레일규격=레일규격, 규격='점화용').수량) * MT030628 + (찾기(Q` · GC000374 `(찾기(QC000664, 품명='용접봉').수량 * MT003191 + 찾기(QC000664, 품명='산소').수량 * 100` | +| 비교 >= | 21 | 11 | GC000101 `만약(수심증감 == '적용 안 함', 0, 만약(수심 < 2.5, 0 - 찾기(QC000204, 수심=수심).감, 만약(수심 ` · GC000769 `만약((규격 >= 15 그리고 규격 <= 25) 또는 (규격 >= 32 그리고 규격 <= 50), 0, 찾기(QC001447,` · GC000774 `만약((규격 >= 15 그리고 규격 <= 25) 또는 (규격 >= 32 그리고 규격 <= 50), 0, 찾기(QC001452,` | +| 로직(…).칸(비목 · 계) | 14 | 11 | GC000087 `로직(GC000271, 기계='0201-0100', 브레이커='0230-0010', 지역=지역, 보정작업=보정작업).계 * (` · GC000090 `로직(GC000271, 기계='0201-0100', 브레이커='0230-0010', 지역=지역, 보정작업=보정작업).계 * (` · GC000091 `로직(GC000268, 기계='5405-0110', 지역=지역).계 * (찾기(QC000189).유압식크롤러드릴)` | +| 비교 != | 12 | 8 | GC000068 `만약(작업 != '목재 붙이기', 찾기(QC000143, 구분='보통인부', 작업=작업).수량, 0)` · GC000176 `만약(비트 != '오거비트', 해머압축기대수 * T / 60, 0)` · GC000183 `만약(재질 != '토사', T1 / T * T / 60, 0)` | +| 줄.'호표 이름'(호표 줄 금액) | 7 | 3 | GC000211 `(줄.'합판(내수 12㎜)' + 줄.'각재') * 찾기(QC000428, 사용횟수=사용횟수).소모자재 / 100` · GF000185 `(노무비 + 재료비 + 경비 - 줄.'구체콘크리트(철근) 레미콘') * 찾기(QF000387, 구분='구체콘크리트(철근) - ` · GF000210 `(줄.'패널' + 줄.'내부패널') * 찾기(QF000418, 구분=유형).요율 / 100` | +| 로직 넘길 값이 식 | 5 | 5 | GC000332 `로직(GC000267, 기계=만약(형식 == 'A-Type', '0201-0040', '0201-0020'), 지역=지역, 보` · GF000294 `로직(GC000268, 기계=만약(근원직경 < 20, '2105-0010', 만약(찾기(QF000063, '근원직경(cm)'=` · GF000297 `로직(GC000268, 기계=만약(흉고직경 < 18, '2105-0010', 만약(찾기(QF000081, '흉고직경(cm)'=` | +| (글자) 이름( 꼴(함수 아닌 이름 뒤 괄호) | 1,177 | — | GC000996 `찾기(QC001865).'그라우팅 믹서(190×2ℓ)' * 8 / 시공량` · GC000996 `찾기(QC001865).'그라우팅 펌프(30∼60ℓ/min)' * 8 / 시공량` · GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` | +| (글자) ∼ · ~ 물결 | 63 | — | GC000996 `찾기(QC001865).'그라우팅 펌프(30∼60ℓ/min)' * 8 / 시공량` · GC001026 `찾기(QC001905, 절단폭=절단폭, 차로차단=차로차단).'굴착기+브레이커(0.2㎥~0.6㎥)' * 8 / 시공량` · GC000573 `찾기(QC001207, 구분='그라우팅펌프', 규격='40∼125(ℓ/min)').수량` | +| (글자) % 글자 | 62 | — | GC000298 `찾기(QC000519, 포장=포장).시공량 * (1 - 만약(포장 == '공항포장', 만약(지장물 == '연속 포설 불가', ` · GC000299 `찾기(QC000520, 포장=포장).시공량 * (1 - 만약(포장 == '공항포장', 만약(지장물 == '연속 포설 불가', ` · GC000303 `찾기(QC000524, 형식=형식).시공량 * (1 - 만약(유도블록 == '아님', 0, 찾기(QC000583, 구분='유도` | +| (글자) {} 자리 표시 | 50 | — | GC000138 `EQ:{장비}.주연료종류` · GC000138 `1 * 8 / 시공량 * EQ:{장비}.주연료 * 찾기(QC000266, 구분='주연료 할증').값 / 100` · GC000139 `EQ:{장비}.주연료종류` | +| (글자) & 글자 | 53 | — | GC000931 `(찾기(QC001700, 공정별='Draft tube설치 가설된 Concrete tube에 이어서 Leveling & Cent` · GC000931 `(찾기(QC001700, 공정별='소운반').비계공 + 찾기(QC001700, 공정별='Draft tube설치 가설된 Conc` · GC000931 `(찾기(QC001700, 공정별='Draft tube설치 가설된 Concrete tube에 이어서 Leveling & Cent` | +- 「요소 부르기 꼴 `보통인부(…)`」 — **문법에 없음**(이름 뒤 괄호는 함수 · 찾기 · 로직만). 글자로 1,177 번 보이는 「이름(」 은 모두 따옴표 칸 이름 안(`찾기(…).'고소작업차(5ton)'`). 요소는 키로만 부름(`LB000006` · `EQ000532.주연료2` · `EQ:{기계}.가격`). +- `&` · `∼`/`~` · `%` · `{ }` 글자 — `&` · `∼` · `%` 는 모두 따옴표 글(조건 값 · 칸 이름) 안 · `{ }` 는 `ID:원문번호{입력}` 와 재료 검색어 · 자리 표시 안(아래 ③). +- 끝수 — 1,472 중 묶음(`{대상, 자리, 방법}`) **0** · 설명 글 37 · 없음 1,435 → 엔진이 끝수를 실제로 붙이는 로직은 지금 없음(덧줄 · 함수 안 `반올림(…)` 으로 씀). +- 표 — 로직이 찾는 표 1,865 · 범위 조건이 있는 표 106(범위규칙 글 40 꼴 — 첫 낱말은 넷뿐) · 값 칸에 「1/1.30」 같은 식 글이 든 표 104(엔진이 식으로 풂). + +## ③ 흐름도로 옮기기 어려운 꼴 + +| 꼴 | 수(마디 / 로직) | 왜 어려운가 | 이렇게 옮기면 됨 | +| --- | --- | --- | --- | +| 요소 칸 값 `EQ000532.주연료2` · `EQ000098.주연료` | 160 / 49 | 요소의 값이 아니라 **요소의 다른 칸**(기계 주연료 · 가격 · 계수) | 입력 상자 「기계」 요소 알약을 칸별로(바깥 값 「기계 key + field」 — Api 에 이미 있음 `CfQuery 기계 field`) | +| `ID:원문번호{입력}` — `EQ:{기계}.가격` · `EQ:{장비}.주연료` | 84 / 14 | 부를 요소가 **입력값에 따라 바뀜**(기계경비 로직 GC000267 등 핵심 로직) | 「재료 자리」 처럼 「기계 자리」(선택 자리 · 입력 알약 값으로 키 고름) — 지금 흐름도에 없음 → **새 입력 방식 필요(⬜ 브레인)** · 그 전엔 「다른 로직 입력」 으로 기계경비 로직을 통째로 부름 | +| 호표 요소 자리 표시 `LB:{공수직종}` · `MO:경유:{지역}` | 66 / 57 | 노임 직종 · 유가 지역이 입력값에 따라 바뀜 | 같은 「선택 자리」(인력 · 유가전력) — 재료 방식 셋을 다른 그룹에도 | +| 재료 묶음 검색어에 `{입력}` — `레미콘 {굵은골재최대치수}-{강도}-{슬럼프}` | 32 / 19 | 검색어가 입력값으로 만들어짐 | 재료 「조건 찾기」(이름 / 규격에 알약 값) — 알약 여럿을 이어 붙인 글이 필요 → 함수 상자로 글을 만들어 조건 알약으로 | +| 호표 로직 줄(비목 없음) `로직(GC000267, 기계='0201-0020', 지역=지역)` | 1,075 / 506 | 한 줄 금액이 **노무비 · 재료비 · 경비 셋으로 나뉨** | 다른 로직 입력 상자의 출력 알약 셋(노무비 · 재료비 · 경비) × 수량 함수 셋 → 출력 셋 | +| 로직 넘길 값이 식 `기계=만약(형식 == 'A-Type', '0201-0040', …)` | 5 / 5 | 넘길 값이 조건으로 바뀜 | 함수 상자(IF)로 값을 만들어 다른 로직의 받는 알약에 선 | +| 찾기 조건 값이 식 `'시공높이(m)'=최소(시공높이m, 7.2)` | 70 / 33 | 조건 값이 계산값 | 함수 상자로 먼저 셈 → 「표에서 찾기」 조건 알약에 그 출력 | +| 덧줄의 비목 합 `노무비 * 기계경비율 / 100` | 153 / 146 | 바탕이 **앞 줄까지의 비목 합**(덧줄이 덧줄을 바탕으로 쓸 수 있음) | 출력 상자 비목별 모음 함수(앞 줄 차례대로) → 비율 함수 · 앞 덧줄도 받는 알약으로 | +| 호표 줄 금액 `줄.'합판(내수 12㎜)'` | 7 / 3 | 특정 호표 줄 금액을 다시 씀 | 그 줄 금액 함수 출력에서 선 | +| 로직 결과 칸 `로직(…).계` | 14 / 11 | 다른 로직 돈 결과의 한 칸 | 다른 로직 입력의 그 비목 · 계 알약 | +| 표 한 줄(조건 없는 찾기) `찾기(QC001864).시공량` | 1,022 / 286 | 조건이 없어 「줄 하나」 표 | 「표에서 찾기」 조건 없이 칸만(표 첫 줄) — 줄이 둘 이상이면 옛 엔진도 오류 | +| 범위 조건 표(범위규칙 넷 · 위 끝 최소) | 표 106 | 엑셀 한 식으로 쓰기 어려움(빈 칸 = 무엇이든 · 규칙별 경계) | 선 규칙 「표에서 찾기」 가 엔진 `find` 와 같은 뜻으로(줄마다 맞음 칸 + INDEX/MATCH — 옛 가져오기에서 쓴 꼴) | +| 표 값의 식 글 「1/1.30」 | 표 104 | 엔진은 글을 식으로 풂 · 엑셀은 글 | 서버가 표 블록을 줄 때 수로 바꿔 줌 | +| 결과 식 로직(돈 아님) | 27 / 27 | 출력이 비용 아님 | 출력 종류 「값」 | +| 빈 입력 · 표에 없는 조건 | — | 엔진은 **그 줄만 비우고** 계속(합에서 뺌) | 흐름도 「끊긴 곳」 + 그 출력 0 으로 셈(같은 합) | + +## ④ 계산 길(로직 셈)을 부르는 곳 + +| 어디 | 무엇 | 자리 | +| --- | --- | --- | +| 서버 `POST /api/m01/calc` | 시험 계산(화면 · 저장 전 줄 포함) | `M01_MasterData_Router.py:222` → `Store.calc` :543 | +| 서버 `POST /api/m01/text` | 읽는 식 줄(텍스트 수식) | `M01_MasterData_Router.py:228` → `Store.text` :572 | +| 서버 `GET /api/m01/logic/auto` | 견본 입력값 | `M01_MasterData_Router.py:192` → `Store.auto` :563 → `master_auto.values` :80 | +| 화면 M01 단가산출 시험 계산 | `/calc` · `/text` · `/logic/auto` | `M01_MasterData_UI_Logic_Api.ts:224 · :229 · :245` · 부름 `M01_MasterData_UI_Logic_Calc.ts:142 · :155 · :184` | +| 서버 일위대가 조합 미리보기 | 조합에 담긴 로직마다 셈 | `M01_MasterData_Store_Combo.py:259 combo_preview` → `master_combo.py:106 run`(:128 `mf.run`) · M02 `POST /api/m02/layers/{layer}/combos/preview` `M02_MasterTemplete_Router_Combos.py:195` → `M02_MasterTemplete_Combo_Store.py:193` | +| 서버 프로젝트 사본 계산 | 프로젝트 항목 단가(복사본 표 · 노임) | `POST /api/m02/projects/{id}/items/{folder}/calc` `M02_Project_Items_Router.py:178` → `M02_Item_Copy.py:326` → `M02_Item_Prices.py:211`(:230 `mf.run`) · 화면 `ui_template/ui_template_item_picker_project.ts:218` | +| 흐름도 서버 | 단가 · 다른 로직 값(호표 한 줄 견본 로직으로 옛 셈 부름) | `M02_DF_Values.py:68 · :105 · :229 · :262`(`store.calc`) · `M02_DF_Router.py:216 logic_value`(흐름도 셈 `M02_DF_Compute`) | +| 옛 시험판 서버(CostFlow · 남김) | 같은 꼴 | `M02_CF_Router.py:230 · :267 · :390 · :421` | +| 일괄 · 대조 스크립트 | 전 로직 시험 계산 · 견적 대조 | `check_master.py:511 calc_all` · `compare_estx.py:258 · :456` · `master_text.py:504` | + +갈래(정함 4)를 넣을 곳 = **`Store.calc` · `Store.text` 둘**(M01 화면 · 흐름도 값이 모두 여기를 지남) + 조합 미리보기 `master_combo.run` · 프로젝트 `M02_Item_Prices.calc`(이 둘은 `mf.run` 을 바로 부름 — 흐름이 있는 로직을 거르려면 여기도). + +## ⑤ 시험입력 · 기본 입력 + +- 줄에 `시험입력` 이 있는 로직 **195**(1,472 중) — 일부 입력만 적힘(예 GF000219 `{"높이": 4.0, "돌": "깬잡석"}`). +- 기본 입력 만드는 법이 **둘**이고 범위에서 갈림: + - 일괄 시험(`check_master.py:496 시험입력`) — 고르기 첫 값 · 범위 **위 끝** · 그 밖 1 · 줄의 `시험입력` 이 이김. + - 화면 견본(`master_auto.py:80 values` · `/logic/auto`) — 고르기 첫 값 · 범위 **아래 끝** · 그 밖 = 그 입력으로 찾는 표의 가장 낮은 값(없으면 나누는 수면 1 · 아니면 0) · 단위에 「원」 이면 비움. +- 전수 대조(정함 3)는 **`check_master.시험입력`**(일괄 시험과 같은 값) 을 쓰는 것을 권함 — 흐름도 변환의 변수 예시값도 같은 규칙으로(⬜ 브레인 정함 필요: 화면 견본과 범위 끝이 다름). diff --git a/docs/raw/M01_쉬운단가/흐름도_정함.md b/docs/raw/M01_쉬운단가/흐름도_정함.md new file mode 100644 index 000000000..25134226b --- /dev/null +++ b/docs/raw/M01_쉬운단가/흐름도_정함.md @@ -0,0 +1,38 @@ +# 단가산출 흐름도 시험판 — 정함 (PLAN 35-9 · 브레인 · 10-01 17시 무렵) + +사용자 지시(그대로): 「전체에 대해 너가 제어해서 시험판을 하나 만들어봐. 이때 이전에 검토하였던 단가산출 다이어그램(시험)을 제외한 다른 시험판 들은 삭제해줘. 이번에 만드는 시험판도 신규 폴더에 넣어서 작업해줘. 필요없으면 바로 삭제할수 있게. … 너가 끝까지 구현하고 검증까지 진행해봐. 다시말하지만 자유도 높고 내가 이해하기 쉬운 화면을 만드는게 중요해.」 · 「데이터의 흐름과 값의 연결에 집중해야해. 이것만 잘 연결되면 단가산출 로직들을 만드는건 쉽게 해결될거야.」 +계획 = PLAN.md 35-8(a~o) 전체 · 근거 = 같은 폴더 `원가다이어그램_정함.md`(1판 약속 — 그대로 이어받음). + +## 목적 + +값 하나가 **어디서 생겨(출처) · 어떤 길과 규칙을 지나(선 · 선 규칙 · 함수) · 어디로 가는지(도착)** 를 사용자가 자유롭게 만들고 · 한눈에 따라가고 · 고칠 수 있게. 원가 숫자가 아니라 이 흐름이 검증 기준. + +## 정함 + +1. 폴더 `M02_MasterTemplete/DataFlow/` · 파일 머리 `M02_DF_` · 서버 길 `/api/m02/df/*` · 키 `DF-0001` · 저장 · 임시 = `_data/`(git 밖) · 견본 = `_sample/` · 단위 · 금액 표준 처음 값 = `_standard/` · 폴더째 지우면 끝. 1판(CostFlow)을 옮겨 시작하되 import 로 기대지 않음(CostFlow 는 그대로 남음). +2. 들어가는 곳 = 단가산출 막대 「시험판 ▾」 목록의 「단가산출 흐름도(시험)」 · 전체 화면 페이지. +3. 옛 시험판 셋(EasyCalc · LogicBuilder · SheetLogic) 폴더 · 그 시험 파일 · 막대 목록 항목 · 서버 등록 줄을 지움(사용자 지시) · `로직_자체.json` 의 사용자 로직(GX)은 마스터 자료라 그대로. +4. **흐름 넷** — ① 출처: 입력 상자(그룹 요소 · 표 · 변수 · **재료 자리** · **다른 로직**) ② 길: 선(알약 → 받는 자리) + **선 규칙** 하나(표에서 찾기 · 조건 통과 · 바꾸기 · 끝수) ③ 처리: 함수 상자(엑셀 · 출력 하나) ④ 도착: 출력 상자(비용 종류 · 값) · 다른 로직의 입력 · 「설계 때 정할 것」. +5. **재료 요소 방식 셋**(재료만) — 고정(품목 하나) · 선택 자리(범위 = 구분 · 상세구분 · 찾는 말 · 기본 품목 · 검증 칸 · 프로젝트에서 고름) · 조건 찾기(범위 + 「규격 / 이름에 [알약] 포함 / 같음」 · 맞음 0 · 여럿 알림) · 알약 이름 = 자리 이름. 다른 그룹은 상자를 늘림. +6. **다른 로직 입력** — 저장한 흐름도 로직(또는 견본)을 입력 상자로 불러 그 출력(비용 · 값)을 내보내는 알약으로 · 그 로직의 「설계 때 정할 것」(변수 · 재료 자리)은 이 상자의 받는 알약으로(이어 주지 않으면 그 로직의 예시값). +7. **선 규칙**(선 하나에 하나 · 없으면 그대로) — 표에서 찾기(조건 칸마다 맞출 알약 · 꺼낼 칸) · 조건 통과(알약 · 같음 · 다름 · 이상 · 이하 · 초과 · 미만 · 값 — 아니면 넘기지 않음) · 바꾸기(× · ÷ · +% · −% · 단위 바꾸기 계수) · 끝수(자리 · 반올림 / 올림 / 버림). 규칙은 받는 칸의 엑셀 수식으로 바뀌어 엔진 한 벌 · 선 위 규칙 글 늘 보임 · 한 알약에서 나간 조건 선의 겹침 · 어느 것도 안 맞음을 알림. +8. **흐름 따라가기** — 알약 · 선을 고르면 그 값이 온 길(출처 사슬)과 가는 길을 다이어그램에서 칠하고 상세 내용에 줄로 · 끊긴 곳(빈 받는 자리 · 통과 안 된 조건 · 표에 없는 조건 · 맞는 재료 없음)을 상자 · 선 위에 표시. +9. **상세 내용**(옛 「고른 상자」) — 상자 · 알약 · 선 무엇을 골라도 바뀜 · 머리 왼쪽 「상세 내용」 · 오른쪽 고른 상자 제목 · 알약이면 그 옆에 알약 이름 · 칸 차례 = 머리 · 설정 · 본문 · 경고. +10. **단위는 고르기** — 치면 걸러진 목록 · 고르기는 사용자 · 손글 안 받음 · 목록 = 단위 표준 + 마스터 결과단위 + 원 · 「-」 = 없음. +11. **단위 표준 · 금액 단위 표준** — 산림품셈 1-2-2(원문 `resources/knowledge/original/원가계산/산림_표준품셈/본문/제01장_적용기준/1-02_설계_및_수량.md`) 「설계서의 단위 및 소수의 표준」(종목 · 규격 단위 · 소수자리 · 단위수량 단위 · 소수자리 · 비고 · 주 ①~③ · 소수자리 「-」 = 0 · 단위 「-」 = 없음) + 「금액의 단위표준」(총액 1,000원 · 소계 · 금액란 · 일위대가표 계금 1원 · 일위대가표 금액란 0.1원 · 미만 버림) · 시험판 안에서 표로 보고 고침(사용자가 원문 흠을 고침 · 저장 `_data`). +12. **끝수** — 함수 출력 · 출력 상자 · 선 규칙에 소수자리 · 방법 · 단위를 고르면 단위 표준에서 자리 제안(주 ① 반올림 · ② 항목 값 우선) · 출력(비용) 기본 = 일위대가표 금액란 0.1원 미만 버림 · 원가 합계 기본 = 계금 1원 미만 버림. +13. **화면** — 자유 배치 다이어그램(위 · 크게) · 판 옮기기 = 가운데 단추 끌기 · 고르기 = 왼쪽 누름 · 왼쪽 끌기로 글자 선택 안 됨 · 상자 옮기기 = 상자 머리 왼쪽 끌기 · 아래 상세 내용 · 오른쪽 아래 검증 칸(예시값 + 재료 자리 + 다른 로직의 설계 때 정할 것) · 단추 · 칸은 공용 작은 크기(createButton size "sm" · 덮어쓰기 금지) · 쉬운 말 · 밝음 · 어두움. +14. 보고 · 검증 기준 = 흐름(값이 어디서 와서 · 어떤 규칙을 지나 · 어디로 가는지가 화면에서 따라가지는지 · 끊긴 곳이 보이는지 · 몇 걸음에 만드나). 원가 숫자는 내부 확인만. + +## 파일 · 창 + +| 창 | 맡음 | +| --- | --- | +| sub7 | 0걸음: CostFlow → DataFlow 옮기기(이름 · 길 · 키 · 폴더 · 시험 사본) · 그다음 Model · Eval 넓히기(정함 5 · 6 · 7 · 8 · 12 · 설계 때 정할 것 목록) — 타입 먼저 | +| sub4 | 서버(정함 5 · 6 · 11 · 12) — 재료 자리 · 조건 찾기 단가 · 자재 찾기(쪽 · 띄어쓰기 AND · 규격) · 다른 로직 값 · 설계 때 정할 것 · 표준 표 읽기 · 쓰기 · 저장 다시 셈의 끝수 | +| sub8 | 다이어그램(정함 7 · 8 · 13) — 선 위 규칙 글 · 선 고르기 · 흐름 길 칠하기 · 끊긴 곳 표시 · 마우스 | +| sub2 | 상세 내용 판(정함 7 · 9 · 10 · 12 · 13) — 선 규칙 판 · 알약 판 · 함수 판 손질(작은 단추) · 단위 고르기 공용 파일 `M02_DF_UnitPick.ts` · 끝수 고르기 | +| sub3 | 입력 판(정함 5 · 6 · 10) — 재료 방식 셋 · 범위 · 조건 · 기본 품목 · 자재 찾기 고침 · 다른 로직 입력 | +| sub5 | 출력 판 · 검증 칸(정함 5 · 6 · 11 · 12) — 재료 자리 고르기 · 다른 로직 설계 값 · 출력 끝수 · 금액 표준 기본 · 끊긴 곳 목록 | +| sub6 | 표준 표 · 견본(정함 11 · 견본) — `_standard/단위표준.json` · `금액단위표준.json` · 시험판 안 표 보기 · 고치기 판 · 견본 넷(메쌓기 · 지반 가르기 · 흄관 조건 찾기 · 다른 로직 잇기) | +| sub1 | 옛 시험판 지우기(정함 3) · 막대 목록 · 들어가는 페이지 · 상세 내용 머리 · 잇기 · 끝 검증(흐름 기준) | From ff044bfe7b38ee748ebcb67bab129a89fc36c638 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 10:10:14 +0900 Subject: [PATCH 2/5] =?UTF-8?q?chore(sync):=20=EA=B3=B5=EC=9C=A0=20docs=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=8B=B4=EC=9D=8C=20=E2=80=94=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=BB=A4=EB=B0=8B=EA=B3=BC=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=2017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- docs/raw/M01_쉬운단가/로직판_A_설계초안.md | 205 +++++++++++++ docs/raw/M01_쉬운단가/로직판_A_정함.md | 40 +++ docs/raw/M01_쉬운단가/로직판_관계제어_점검.md | 63 ++++ docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md | 161 ++++++++++ .../로직판_조사_A_견적프로그램.md | 100 +++++++ .../M01_쉬운단가/로직판_조사_B_노코드도구.md | 95 ++++++ docs/raw/M01_쉬운단가/설계.md | 98 ++++++ .../M01_쉬운단가/쉬운단가_검토_A_데이터.md | 251 ++++++++++++++++ docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md | 141 +++++++++ docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md | 282 ++++++++++++++++++ .../M01_쉬운단가/쉬운단가_검토_D_지난시도.md | 96 ++++++ docs/raw/M01_쉬운단가/시트로직_정함.md | 38 +++ docs/raw/M01_쉬운단가/시험판_단추_점검.md | 110 +++++++ docs/raw/M01_쉬운단가/원가다이어그램_정함.md | 40 +++ docs/raw/M01_쉬운단가/흐름도_적용_정함.md | 37 +++ docs/raw/M01_쉬운단가/흐름도_적용_조사.md | 121 ++++++++ docs/raw/M01_쉬운단가/흐름도_정함.md | 38 +++ 17 files changed, 1916 insertions(+) create mode 100644 docs/raw/M01_쉬운단가/로직판_A_설계초안.md create mode 100644 docs/raw/M01_쉬운단가/로직판_A_정함.md create mode 100644 docs/raw/M01_쉬운단가/로직판_관계제어_점검.md create mode 100644 docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md create mode 100644 docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md create mode 100644 docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md create mode 100644 docs/raw/M01_쉬운단가/설계.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md create mode 100644 docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md create mode 100644 docs/raw/M01_쉬운단가/시트로직_정함.md create mode 100644 docs/raw/M01_쉬운단가/시험판_단추_점검.md create mode 100644 docs/raw/M01_쉬운단가/원가다이어그램_정함.md create mode 100644 docs/raw/M01_쉬운단가/흐름도_적용_정함.md create mode 100644 docs/raw/M01_쉬운단가/흐름도_적용_조사.md create mode 100644 docs/raw/M01_쉬운단가/흐름도_정함.md diff --git a/docs/raw/M01_쉬운단가/로직판_A_설계초안.md b/docs/raw/M01_쉬운단가/로직판_A_설계초안.md new file mode 100644 index 000000000..3b105749a --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_A_설계초안.md @@ -0,0 +1,205 @@ +# 로직 만들기 판 시험판 A(세 칸 판) — 조사 · 설계 초안 (35-2 · sub7) + +조사 · 초안만 · 코드 · git · docs 안 건드림. 셈은 `resources/master_data/로직_*.json` 1,469개 · 표 3,033개(시험 해석기 = 저장소 밖 scratch `lb/survey.ts` · 엔진 `master_formula._Parser` 와 같은 문법). + +## 0. 한눈에 + +| 물음 | 답 | +| --- | --- | +| ① 블록으로 읽고 다시 쓰기 | **됨** — 6개 모두 다 읽힘 · 다시 쓰기 같음. 마스터 **1,396 / 1,469(95%)** 가 ①~⑤ 블록으로 다 읽힘 · 식 하나하나가 문장 틀(값 · 곱나눔 · 할증 · 조건 목록 · 최소최대 · 올림)로 읽히는 것 1,299(88%) | +| ② 표 칸 고치면 시험 계산에 바로 | **지금 안 됨** — `/calc` 에 표 덮어쓰기 길 없음 · 현장(자체) 표 키 없음(QF · QC · CF · CC 뿐) → 서버 두 가지 필요(⬜) | +| ③ 단계 안내로 새로 만들기 | **거의 됨** — `/sections` · `/tables?section=` · `/table` · `/table/options` · `/logic/new` 다 있음 · 「로직에 안 이어진 표」 거름 칸만 없음(절 단위 `logics` 수로 대신 가능) | +| ④ 해당 없음/중복 · 빈틈 · 기대값 시험표 | 해당 없음/중복 = `/calc` 줄 까닭 글로 지금 됨(글 해석) · 빈틈 = 길 없음(서버 하나 ⬜) · 기대값 시험표 = `/calc` 여러 번으로 지금 됨 · 저장 자리는 정할 것 | +| ⑤ 파일 나누기 | 7절 — 6 파일 + 서버 3 길(⬜) · 창 다섯 | + +## 1. 블록 구조 — 로직 한 벌을 ①~⑤ 로 + +### 1-1 블록 모양 + +| 블록 | 지금 로직 칸 | 블록이 쥘 것 | +| --- | --- | --- | +| ① 입력값 | `입력` | 이름 · 단위 · 선택 목록(`고르기`) · 범위 · 설명 · 출처 — 선택 목록은 표 조건 칸에서 저절로(`/table/options`) | +| ② 표 조회 | 식 속 `찾기(표, 조건=값 …).결과칸` | 표 키 · 조건 칸마다 **입력값 / 고정값 / 계산값** · 결과 칸 · 쓰인 자리(중간 · 수량 · 비율 · 결과) | +| ③ 계산 | `중간` + 수량 · 비율 · 결과 식의 나머지 | 이름 붙은 값 · 틀: 값 · 곱나눔(사슬) · 할증(`× (1 + p/100)`) · 더하기 · 조건 목록(만약 사슬) · 최소/최대 · 올림/버림/반올림 | +| ④ 항목 연결 | `호표` · `덧줄` | 종류(노무 · 재료 · 장비 · 일위대가 · 비율) · 요소 · 수량 출처(② · ③ · 숫자) · 비목 · 비율은 바탕(비목 · 사람 줄 노임 합) × 율 | +| ⑤ 결과값 | `결과단위` · `결과` · `끝수` | 금액(원/…) 또는 값(㎥/시간 — `결과` 식) · 다른 로직이 부르는 자리(`로직(키, 넘길 값)`) | + +다시 쓰기 = **글 갈아끼우기** — 고친 조각의 자리만 새 글로 바꾸고 나머지 글자는 그대로(Cond `writeRead` · Table `replaceFinds` 와 같은 길). 안 고친 로직은 바이트까지 같음. + +### 1-2 대상 6개 + +| 로직 | ① | ② | ③ | ④ | ⑤ | 읽기 | +| --- | --- | --- | --- | --- | --- | --- | +| GF000208 암거이음받침 채움재 | 없음 | 없음 | 없음 | 재료 1(검색어 JOINT FILLER · 1㎡) | 원/㎡ | 다 읽힘 | +| GF000219 돌쌓기 메쌓기(인력) | 뒷길이 · 돌 · 쌓기(선택) · 높이 · 초과증가율(범위 80~100) | QF000421(조건 셋 → 석공 · 보통인부) · QF000422(높이 범위 → 증가율) | 증가율 = 조건 목록(높이 ≤3 → 0 · ≤7.5 → 표 · 그 외 → 초과증가율) · 수량 = 표 × 할증 | 노무 2 | 원/㎡ | 다 읽힘 | +| GF000025 떼붙임(재배잔디) | 품(숫자) · 비탈구배(선택) | QF000099(구분 고정 → 값) | 품 × (1 + 조건 목록(해당 없음 → 0 · 그 외 → 표) / 100) | 노무 1 | 원/100㎡ | 다 읽힘 | +| GF000249 다짐(플레이트콤펙터 1.5ton) | 지역(선택) | 없음 | 작업량 = 다른 로직 결과값(GF000114) · 수량 = 1 ÷ 작업량 | 장비 1(기계경비 GC000272 · 넘길 값 기계 고정 · 지역 입력값) | 원/㎥ | 다 읽힘 | +| GF000114 다짐 시간당 작업량 | 없음 | QF000289 여섯 번(기호 고정 A · N · H · f · E · P → 적용) | 결과 = 반올림(A×N×H×f×E÷P, 3) | 없음 | 값 ㎥/시간 | 다 읽힘 | +| GF000133 덤프트럭 시간당 작업량 | qt · f · E · Cm(숫자) | 없음 | 결과 = 반올림(60×qt×f×E÷Cm, 3) | 없음 | 값 ㎥/시간 | 다 읽힘 | +| GC000051 보행자 안전통로 | 없음 | QC000115(구분 고정 → 수량) · QC000116(구분 고정 → 값) | 비계공 = 표 | 노무 1 · 비율 1(사람 줄 노임 × 표 값 %) | 원/m | 다 읽힘 | + +- 6개 모두 왕복 같음 · Model(EasyCalc) 은 GC000051 의 비율을 「잠금」으로 봄(율이 숫자 아님) — 블록에서는 율 = ② 표 조회로 읽힘. +- 다짐은 두 로직(작업량 GF000114 → 금액 GF000249) — ⑤ 결과값 넘기기의 견본. + +### 1-3 마스터 전체 + +| 셈 | 수 | +| --- | --- | +| 식 자리(중간 · 수량 · 장비 요소 · 비율 · 결과) | 10,179 · 블록으로 읽힘 10,037(98.6%) | +| 로직 — 모든 식이 블록으로 읽힘 | **1,396 / 1,469(95.0%)** | +| 로직 — 모든 식이 문장 틀(칸 안 한 겹 묶음까지) | 1,299(88.4%) · 나머지 97개는 「여러 단계」 식이 섞임(단계 목록으로 펼쳐 보임 — 선택은 되나 김) | +| 다시 쓰기(해석 → 글) 같음 | 1,464(99.7%) · 다른 5개는 따옴표 · 빈칸 꼴 차이(글 갈아끼우기면 영향 없음) | +| 못 읽는 까닭 | 표 조건 칸에 계산(`최소(시공높이m, 7.2)` · `만약(…)` 등) 68 식 · 그리고/또는 69 식 · 로직 넘길 값에 계산 5 식 | +| 식 틀 갈래(식 수) | 값 5,362 · 곱나눔 2,655 · 묶음 사슬 1,231 · 조건 목록 515 · 여러 단계 168 · 할증 108 · 더하기 91 · 올림 43 · 최소최대 6 | +| 항목 종류(호표 줄) | 인력 3,462 · 로직(장비 · 일위대가) 1,075 · 재료 723 | + +### 1-4 EasyCalc 해석기 다시 쓰기 + +| 부품 | 쓰임 | 그대로? | +| --- | --- | --- | +| Model `toDoc · toRow` | ④ 항목 카드 · ⑤ 금액 · 왕복 100%(1,469) | 그대로 — 비율 율이 표 조회인 꼴만 블록 쪽에서 덧읽음 | +| Table `readFinds · writeFind · replaceFinds · literalValue` | ② 표 조회 읽기 · 조건 값 바꾸기 | 그대로 | +| Cond `readCond · writeRead · writeCond` | ③ 조건 목록 · 최소최대 · 올림 | 그대로(식 속 덩어리까지 · 줄 자체 조건 93%) | +| Api `calcLater · copyEasy · editEasy · newEasy · usesOf · listMachines · machineCall` | 예시값 계산 · 저장 · 장비 잇기 | 그대로 | +| Cards · Sheet | 오른쪽 결과 칸 | 그대로(읽기 · 고치기 둘 다) | +| 없는 것 | 사칙 사슬(곱나눔 · 할증 · 더하기 · 단계) 읽기 · 중간 값 그래프(어느 값이 어느 값을 씀) · 결과 식 로직 | LogicBuilder `Blocks` 가 새로 — 문법은 Cond 해석기와 같은 엔진 문법 | + +## 2. 표 칸 고치기 + +- **`/calc` 에 표 덮어쓰기 길 없음** — 몸 = `key · inputs · row · file · 고름` · 로직 줄만 메모리에서 바꿔 셈(`Store._swap`). 표는 언제나 파일 것. +- **현장(자체) 표 키 없음** — 표 ID 는 QF · QC(소요량) · CF · CC(계수)뿐 · `소요량_자체.json` 같은 자리 없음. M01 표 편집(칸 눌러 고침)은 `/save` 로 **표준 파일을 바로 고침** — 시험판은 부르지 않음. +- 서버가 가볍게 받을 수 있는 까닭 — `cm.load` 가 부를 때마다 파일을 새로 읽음(캐시 없음) → 메모리 사본에 표를 바꿔 끼워도 다른 요청에 안 번짐. + +최소로 필요한 것(⬜ 서버 · 폴더 밖): + +1. **`CalcBody.tables`** — `[{키, …표 통째}]` · `calc` · `text` 가 `_swap` 처럼 메모리 사본의 그 키 표를 바꿈(약 15줄) → 왼쪽 칸에서 고친 숫자가 저장 전 금액에 바로. +2. **현장 표** — 표 ID `QX`(소요량 자체) 하나 · 파일 `소요량_자체.json` · `master_keys.TABLES[("소요량", "자체")] = "QX"` · 길 `/table/copy · /table/edit · /table/delete`(현장 파일만 · `logic_*` 와 같은 틀 · 409 · 422) · 검사(`check_master` 틀 · 본문 대조에서 「자체」 표는 본문 대조 뺌). +3. 저장 차례 — 표준 로직을 연 채 표 칸을 고치면: 로직 복사 편집(GX) → 그 표 사본(QX) → GX 의 `찾기(QF…)` 머리를 `찾기(QX…)` 로 바꿈 → 한 번에 저장. **표준 표 · 로직은 안 고침**. + +정할 것 — 현장 표 사본을 로직마다 따로 둘지(간단 · 표가 늘어남) · 같은 표를 여러 현장 로직이 함께 쓸지(개정 한 번에 반영 · 사용처 관리 필요). + +## 3. 새로 만들기 — 단계 안내 6단계와 서버 길 + +| 단계 | 쓰는 길 | 있나 | +| --- | --- | --- | +| 1 절 찾기 | `GET /sections?book=산림품셈|건설품셈&q=` — 절마다 `tables` · `logics` 수 | 있음 · `logics = 0` 이고 `tables > 0` 인 절 = 새로 만들 자리 | +| 1 그 절의 표 | `GET /tables?group=소요량|계수§ion=13-4-1` | 있음 · 단 목록 머리에 `용도`(이어진 로직) 없음 — 「안 이어진 표」 거름은 절 수로 대신 · 꼭 필요하면 `_TABLE_HEADS` 에 `용도` 한 칸(⬜) | +| 2 칸 역할 | `GET /table`(통째) · `/table/options`(조건 칸 값) | 있음 — 조건 · 값칸 · 범위규칙 · 주 | +| 3 결과 단위 | 표 `기준`(「1㎡」) | 있음 | +| 4 계산 | 화면(Cond 틀 · 할증 · 곱나눔) | 서버 길 필요 없음 | +| 5 항목 연결 | `GET /pick?kind=job&q=석공` · `/materials` · Api `listMachines · machineCall` · `/logics` | 있음 — 값 칸 이름 = 직종 이름이면 저절로 | +| 6 이름 · 저장 | `POST /logic/new`(GX · 원문번호 · 출처 「산림품셈 13-4-1」 꼴 허용) · 저장 전 `/calc`(`key ""` + `row`) | 있음 | + +- 표가 아직 없는 절(엑셀 붙여넣기)은 2절 현장 표 길(⬜)이 있어야 저장됨 — 시험판 1차는 「표가 있는 절」만. +- 안 이어진 표 1,010개(용도.로직키 빈 것 · 제안서 1,018 과 8 차이 — 그 사이 이어짐). + +## 4. 조사로 더할 것 셋 + +| 것 | 지금 API | 판정 | +| --- | --- | --- | +| 표 조회 해당 없음 / 중복 | `/calc` 줄이 비고 `까닭` 「표 QF…에 뒷길이 25 · 돌 견치돌 인 줄이 없음」 / 「… 인 줄이 2개」(엔진 `find` → `NoRow`) | **지금 됨** — 글로 갈라 읽음(약함) · 단단히 하려면 까닭에 `종류: 없음|중복` 칸(⬜ 작음) | +| 빈틈 검사(입력값 조합 중 표에 없는 것) | 길 없음 · `/calc` 를 조합마다 부르면 됨(메쌓기 7×4×2 = 56번 · 빈틈 16) — 느림 | **서버 길 하나(⬜)** `/table/gaps?key=` — `master_auto._uses`(어느 입력이 어느 조건으로 가나) + `mf.find` 로 조합을 돌려 「없음 · 중복」 목록 · 판정이 엔진과 같아야 해서 화면 짝 구현(범위규칙 네 가지)보다 서버 단독이 맞음 | +| 기대값 시험표 | `/calc` 를 줄마다(입력값 → `lines[i].수량` · 결과값) 부르면 됨 | **지금 됨**(계산) · 저장 자리 정할 것 — 현장 로직 줄의 새 칸(`시험표` · `check_master` 가 로직의 모르는 칸을 막지는 않음 · `_clean` 이 칸 차례 밖 칸을 뒤에 붙여 둠) 또는 따로 파일 · 시험판 1차는 저장 없이 화면에만 | + +## 5. 표준 · 현장 규칙 (화면 한 줄) + +- 표준(품셈 원문 · 로직 GF · GC · 표 QF · QC · CF · CC) = 읽기 · 예시값 계산 · 복사 편집만. +- 현장(로직 GX · 표 QX⬜) = 고치기 · 지우기 · `로직_자체.json`(+ `소요량_자체.json`⬜) 만 씀. +- 「품셈이 개정돼도 현장 일위대가는 안 바뀜」 — 저장 화면 머리에 한 줄. + +## 6. 화면 세 칸과 부품 + +``` +┌ 원문(Source) ─────────┐┌ 산출근거(Steps) ───────────────┐┌ 결과(Result) ──────┐ +│ 표 머리 역할 칩 ││ ① 입력값 선택 목록 칩 ││ EasyCalc Cards │ +│ 조건 · 고정 · 결과 · 주 ││ ② 표 조회 조건 칸 ← 입력값/고정 ││ (읽기 · 고치기) │ +│ 걸린 줄 노랑 ││ · 해당 없음/중복 표시 ││ 큰 합계 · 일위대가표 │ +│ 칸 눌러 고침(사본만) ││ ③ 계산 Cond 문장 · 할증 · 곱나눔 ││ 예시값 띠 │ +│ 빈틈 · 시험표 단추 ││ ④ 항목 연결 노무 · 재료 · 장비 … ││ 기대값 시험표 │ +│ ││ ⑤ 결과값 금액 / 값 · 넘기기 ││ │ +└─────────────────────────┘└────────────────────────────────┘└────────────────────┘ +처음 만들 때 = 가운데 칸이 단계 안내(물음 하나씩) · 답할 때마다 한 줄씩 채워짐 +``` + +## 7. 파일 나누기 초안 (`M01_MasterData/LogicBuilder/` · 파일마다 700줄 안 · 글 [한, 영] 짝은 파일 머리) + +| 파일 | 하는 일 | DOM | 맡을 창(안) | +| --- | --- | --- | --- | +| `M01_LB_Blocks.ts` | 로직 줄 ↔ 블록(①~⑤) 읽기 · 글 갈아끼우기 쓰기 · 사칙 사슬 · 중간 값 그래프 · 결과 식 — EasyCalc Model · Table · Cond 해석기를 가져다 씀 | 없음 | A(Model 쓴 창) | +| `M01_LB_Source.ts` + css | 왼쪽 원문 — 표(`/table`) · 칸 역할 칩 · 주 · 걸린 줄(`/text` 표 조각 `참조.줄`) · 칸 고치기(메모리 사본) · 해당 없음/중복/빈틈 표시 | 있음 | B(Table 쓴 창) | +| `M01_LB_Steps.ts` + css | 가운데 산출근거 ①~⑤ 카드 — 모두 선택 · Cond 문장 · 할증 · 곱나눔 · 항목 연결(Pick 다시 씀) | 있음 | C(Cond · Cards 쓴 창) | +| `M01_LB_Wizard.ts` + css | 단계 안내 6단계 — 절 찾기 → 표 · 칸 역할 → 단위 → 계산 → 항목 → 이름 · 답을 Blocks 에 쌓음 | 있음 | D | +| `M01_LB_Check.ts` | 기대값 시험표 · 빈틈 결과 정리 · `/calc` 여러 번(최신만) | 거의 없음 | D 또는 B | +| `M01_LB_Entry.ts` + css | 단추(「로직 만들기(시험)」 · 쉬운 단가산출 옆) · 세 칸 틀 · 오른쪽 결과(EasyCalc Cards · Sheet 붙임) · 열기 · 복사 편집 · 저장(EasyCalc Api) · 실행 취소 · 저장 안 함 표시 | 있음 | E(Entry 잇기 창) | +| 서버(폴더 밖 · ⬜) | `CalcBody.tables` · 현장 표 QX 길 셋 · `/table/gaps` · (작음) 까닭 종류 칸 · `/tables` 머리에 `용도` | — | 브레인 지명 한 창 | + +### 7-1 서로 맞출 모양 (안) + +```ts +// Blocks (A) +export type LbRef = + | { k: "input"; name: string } // ① 입력값 + | { k: "fixed"; value: number | string } // 고정값 + | { k: "lookup"; id: string } // ② 표 조회 결과 + | { k: "calc"; name: string } // ③ 이름 붙은 계산값(중간) + | { k: "logic"; key: string; field: string | null } // 다른 로직 결과값(.노무비 등) + | { k: "cost"; name: "노무비" | "재료비" | "경비" | "사람줄합" }; +export interface LbLookup { + id: string; // 화면 번호 · 저장 안 함 + table: string; // QF000421 · 현장 사본이면 QX… + conds: { col: string; from: LbRef | { k: "expr"; text: string } }[]; + col: string; // 결과 칸 + at: { part: "중간" | "수량" | "비율" | "결과" | "요소"; index: number; start: number; end: number }[]; +} +export type LbCalcKind = "값" | "곱나눔" | "할증" | "더하기" | "조건목록" | "최소최대" | "올림" | "단계"; +export interface LbCalc { + name: string | null; // 중간 이름 · 수량 자리면 null + kind: LbCalcKind; + parts: LbRef[]; // 곱나눔 · 더하기 · 할증(바탕 · 율) + ops?: ("*" | "/" | "+" | "-")[]; + cond?: CondRead; // 조건목록 · 최소최대 · 올림 — Cond 것 그대로 + at: { part: "중간" | "수량" | "비율" | "결과"; index: number }; + text: string; // 원래 글(안 고치면 그대로 씀) +} +export interface LbLogic { + doc: EasyDoc; // ④ 항목 · ⑤ 금액 — Model 것 그대로 + inputs: LogicInput[]; // ① + lookups: LbLookup[]; // ② + calcs: LbCalc[]; // ③ + result: { kind: "금액"; unit: string } | { kind: "값"; unit: string; calc: LbCalc }; // ⑤ + blocked: string[]; // 못 읽은 까닭(쉬운 말) — 비면 다 읽힘 +} +readLogic(row: LogicRow, meta): LbLogic +writeLogic(lb: LbLogic): LogicRow // 고친 조각 자리만 글 갈아끼우기 +setCond(lb, lookupId, col, from): LbLogic · setCalc(lb, calc, patch) · setLookupTable(lb, id, newKey) + +// Source (B) +export interface TableEdit { table: string; row: number; col: string; value: number | string | [number | null, number | null] } +renderSource(host, lb, tables: Record, hits: Record, on: { edit(e: TableEdit): void; role(table: string, col: string, role: "조건" | "고정" | "결과"): void }) + +// Steps (C) +renderSteps(host, lb, ans: CalcAnswer | null, on: { change(lb: LbLogic): void }) + +// Wizard (D) +openWizard(): Promise +// Check (D|B) +runExpect(lb, rows: { inputs: Record; expect: Record }[]): Promise<{ ok: boolean; got: Record }[]> +gaps(lb): Promise<{ table: string; conds: Record; kind: "없음" | "중복" }[]> // ⬜ /table/gaps + +// Entry (E) +createLogicBuilderButton(): HTMLButtonElement +// 예시값 계산 = EasyCalc Api calcLater(row, trial, …) + 고친 표(⬜ CalcBody.tables) +``` + +### 7-2 차례(제안서 「나눠 만드는 차례」와 맞춤) + +1. **확인** — Blocks(A) + Entry 틀(E) + Source 읽기(B) + Steps 읽기(C) — 6개 로직을 세 칸으로 열어 읽기만 · 서버 변경 없이 됨. +2. **고치기** — Steps 선택 고치기(C) · Source 칸 고치기(B · ⬜ `CalcBody.tables` · 현장 표 QX) · 복사 편집 저장(E). +3. **만들기** — Wizard(D) — 표가 있는 절부터. +4. **넘기기 · 검사** — 결과값 넘기기 · 장비 잇기(C) · Check(D · ⬜ `/table/gaps`). + +## 8. ⬜ 브레인 답 필요 + +1. 서버 변경(폴더 밖) 허락 — `CalcBody.tables`(표 덮어 시험 계산) · 현장 표 QX(파일 · 키 · 길 셋 · 검사) · `/table/gaps` · (작음) 까닭 종류 칸 · `/tables` 머리 `용도`. 없으면 시험판은 「표 칸 고치기」 · 「빈틈 검사」를 뺀 범위. +2. 현장 표 사본 — 로직마다 따로 / 여러 현장 로직이 함께. +3. 기대값 시험표 저장 자리 — 현장 로직 줄 새 칸 / 따로 파일 / 화면에만(1차). diff --git a/docs/raw/M01_쉬운단가/로직판_A_정함.md b/docs/raw/M01_쉬운단가/로직판_A_정함.md new file mode 100644 index 000000000..b5f7a099b --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_A_정함.md @@ -0,0 +1,40 @@ +# 로직 만들기 판 시험판 A — 정함 (PLAN 35-2 · 브레인 · 10-01) + +근거 = 같은 폴더 `로직판_A_설계초안.md`(sub7 · 블록 구조 · 파일 나누기 7절 · 맞출 모양 7-1) · `로직판_엑셀로직_지도.md`(sub4 · A 대 B) · `로직판_조사_A · B`(인터넷) · 제안서 https://claude.ai/artifact/U4rkgpYWL4Em5VKBEVa4oY. + +## 목적 (모든 창이 이것으로 판단) + +사용자가 브레인 · 코딩 없이 품셈 원문을 보며 단가산출 로직을 직접 ① 원문 대조로 확인 ② 품셈 숫자가 바뀌면 직접 고침(예: 인원 2~3 → 3~4) ③ 혼자 새로 만듦(초등학생도) ④ 많은 수를 검증 ⑤ 서버 엔진과 같은 값. + +## 정함 + +1. 갈래 = A 세 칸 판(왼쪽 원문 표 · 가운데 산출근거 · 오른쪽 결과). B 엑셀 시트형은 따로 안 만듦(단가 붙이기 · 표 사본 · 엔진 둘에서 막힘) — 엑셀 부품(격자 · 단계 값 · 선택 목록)만 빌림. +2. 복수 시험 = 가운데 칸 보기 둘 — **문장 보기**(Steps) · **격자 보기**(Grid · 엑셀처럼 줄 · 칸 · 칸마다 선택 · 값 · 식 없음) · 위 단추로 바꿔 봄 · 같은 LbLogic · 같은 on.change. +3. 폴더 `M01_MasterData/LogicBuilder/` · 단추 「로직 만들기(시험)」 = 「쉬운 단가산출(시험)」 옆 · 폴더째 지우면 끝. EasyCalc(유지 확정) 파일은 가져다 쓰기만 · 안 고침. +4. 서버 — 기존 서버 파일은 안 고침. 표 칸 고친 값으로 시험 계산은 폴더 안 새 파이썬 모듈(`M01_LB_Calc.py` · `POST /api/m01/lb/calc {row, inputs, tables}`)이 엔진을 같은 방식으로 부르되 전역 캐시를 바꾸지 않고 사본으로 셈 · 등록은 한 줄. 엔진에 고리가 꼭 필요하면 기본값 있는 선택 인자 하나만(지워도 안 깨짐) — 그 경우 보고에 적음. +5. 표 칸 고치기 = 메모리 사본 + 예시값 즉시 재계산 + 영향 보기(그 표를 쓰는 로직 · `용도.로직키`) · **저장 안 함**(표준 표 고치기 · 현장 표 사본은 사용자 결정 뒤) · 화면에 「표 고침은 미리 보기 — 저장은 결정 뒤」 한 줄. +6. 로직 저장 = 현장 일위대가(`/logic/new · edit` · GX)만 · 표준은 「복사 편집」 뒤. +7. 빈틈 검사 = 브라우저에서(입력값 선택 목록 조합 × 표 줄) · 해당 없음 / 중복 = `/calc` 까닭 + 표 줄 대조 · 기대값 시험표 = 화면 초안(sessionStorage)만 · 저장 안 함. +8. 오른쪽 결과 = 큰 합계 + 일위대가표(EasyCalc Sheet renderSheet) + LB 자체 예시값 띠(새 용어) — EasyCalc Cards 는 안 붙임(옛 낱말). +9. 용어 = 제안서 2판 「용어 — 단어로」 제안 그대로: 입력값 · 고정값 · 결과(값) · 조건/고정/결과(표 칸 역할) · 선택 · 표 조회 · 계산 · 산출근거 · 항목 연결 · 노무/재료/장비/일위대가/비율/기타 · 노무비/재료비/경비 · 조건/그 외 · 무관 · 해당 없음/중복 · 표준/현장 · 복사 편집 · 자동 · 직접 입력 · 조건 편집 · 예시값 · 단계 안내 · 변경/실행 취소/삭제/추가 · 규격/사용처/출처 · 일위대가표 · 적용 품셈. +10. 시험 로직 6개 — GF000208 암거이음받침 채움재 · GF000219 돌쌓기 메쌓기(인력) · GF000025 떼붙임(재배잔디) · GF000249 다짐(플레이트콤펙터) · GF000133 덤프트럭 시간당 작업량 · GC000051 보행자 안전통로 — 시작 화면에 이 6개를 먼저 보이고 찾기로 다른 것도 엶. + +## 파일 · 창 + +| 파일 | 창 | 하는 일 | +| --- | --- | --- | +| `M01_LB_Blocks.ts` | sub7 | 로직 ↔ 블록(①~⑤) · 설계초안 7-1 타입 · 먼저 타입 올림 | +| `M01_LB_Calc.py` + 등록 한 줄 · `M01_LB_Api.ts` | sub4 | 표 덮어 시험 계산 서버 길 · 화면 부르기(calcLater 꼴 · 최신만) · 영향 보기(표 → 로직) | +| `M01_LB_Source.ts` + css · `M01_LB_Check.ts` | sub8 | 왼쪽 원문(격자 · 칸 역할 · 주 · 걸린 줄 · 칸 고치기 · 해당 없음/중복/빈틈) · 빈틈 · 기대값 시험표 | +| `M01_LB_Steps.ts` + css | sub2 | 가운데 문장 보기 | +| `M01_LB_Grid.ts` + css | sub5 | 가운데 격자 보기 | +| `M01_LB_Wizard.ts` + css | sub3 | 단계 안내 6단계 | +| `M01_LB_Entry.ts` + css | sub1 | 단추 · 세 칸 틀 · 보기 바꿈 · 열기 · 복사 편집 · 저장 · 실행 취소 · 오른쪽 결과 · 잇기 · 끝 검증(목적 다섯) | + +## 맞출 모양 + +설계초안 7-1 그대로 + 더함: +- Grid: `renderGrid(host, lb, ans, on: { change(lb): void })` — Steps 와 같은 꼴. +- Source: `renderSource(host, lb, tables, hits, on: { edit(e: TableEdit); role(table, col, role) })` — tables = 표 키 → 표 사본(고친 값 포함). +- Api(sub4): `lbCalcLater(row, inputs, tables, onDone(ans | null, plain | null))` · `tableUsers(tableKey): Promise<{ key; 이름 }[]>` · `fetchLbTable(key)`. +- Check: `gaps(lb, tables)` 는 브라우저 셈 · `runExpect(lb, tables, rows)`. diff --git a/docs/raw/M01_쉬운단가/로직판_관계제어_점검.md b/docs/raw/M01_쉬운단가/로직판_관계제어_점검.md new file mode 100644 index 000000000..94c353e78 --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_관계제어_점검.md @@ -0,0 +1,63 @@ +# 35-3 점검 — 로직 만들기(시험)에서 「표끼리의 관계」를 초등학생이 제어할 수 있나 (sub6 · 확인만) + +- 대상: 내 포트 8008 · 5181 → M01 → 단가산출 로직 → 「로직 만들기(시험)」. git-sync 로 dev 최신(105 커밋)을 받은 뒤 서버를 다시 띄움. 판정 직전 세션 SYSTEM_ADMIN 확인. +- 시험 로직: 돌쌓기 메쌓기(인력) — 표준 GF000219 은 읽기만이라, 이미 있는 현장 사본 GX000001(같은 식)을 열어 메모리에서만 고침. **저장 · 복사 편집 · 삭제는 안 누름**. 끝에 「실행 취소」 10번으로 모두 되돌린 것 확인. 서버 로직 수 그대로 · git 깨끗. 덤프트럭 시간당 작업량 GF000133 · 그것을 부르는 골재운반 모래 GF000134 는 읽기만. +- 사진: `tmp/로직판_관계_사진/` (r01 표준 열기 · r02 현장 사본 · r03 문턱만 바꿈 → 금액 멈춤 · r04 표 칸까지 고침 → 할증 걸림 · r05 격자 · r06 비율 더하기 · r07 격자 칠하기 · r08 로직 부름). +- 걸음 = 고칠 화면이 열린 뒤 누름 수(칸에 글 넣기 1 번 = 1). 들어가기는 M01 → 단가산출 로직 → 로직 만들기(시험) → 로직 고름 = 3 누름. 표준이면 「복사 편집」 1 더(누르는 순간 서버에 현장 사본이 써짐 · 저장 단추를 거치지 않음). + +## 한 줄 결론 + +**이미 있는 관계의 「값 칸」을 바꾸는 일(문턱 숫자 · 할증율 · 조건을 고정값으로)은 고르기 하나 · 숫자 하나로 되고 식은 안 씀. 그러나 관계 자체를 더하고 · 지우고 · 다른 표나 다른 결과 칸으로 잇는 일은 화면에 단추가 없어 거의 안 됨.** 품셈에 없는 관계(새 입력값 · 새 조건 · 새 표)는 만들 수 없고, 「+ 비율」 한 갈래만 있음. 초등학생 판정은 바꾸기 = 중, 더하기 · 지우기 · 다시 잇기 = 불가. + +## 시나리오 표 + +| # | 할 일 | 됨 | 걸음 | 지나간 화면 | 막힌 곳 | 모를 낱말 | 식을 쓰나 | 초등 | 까닭 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| S1① | 높이 할증 문턱 3m → 2.5m | 일부 | 3 (문턱 칸 1 + 원문 표 칸 「3~4」→「2.5~4」 2) | 산출근거 ③ 계산 · 원문 표 | 문턱만 바꾸면 2.5~3m 에서 증가율 표에 맞는 줄이 없어 금액이 「—」로 멈춤. 표 칸 고침은 「미리 보기 — 저장은 결정 뒤」라 저장되는 것은 문턱뿐. 멈출 때 위 알림은 「서버와 이어지지 않음」(실제 까닭은 「표 QF000422 에 높이 2.7 인 줄이 없음」) | 조건 목록 · 「위에서 처음 맞는 줄의 값을 씀」 · 그 외 · 해당 없음 | 아니요 | 하 | 칸은 쉬우나 문턱과 표 범위가 엮인 것이 안 보이고, 깨진 뒤 까닭이 엉뚱함 | +| S1② | 높이 할증을 석공에만 · 보통인부는 빼기 | 됨(꼼수) | 1 (계산 3 율 칸 「계산 · 증가율」→「고정값」 · 0 이 저절로) | ③ 계산 | 「할증 빼기」 단추는 없음 — 율 0% 로 둠. 계산 3 은 남음 | 바탕 · 율 · 「% 를 더 얹음」 · 계산 · 증가율 | 아니요 | 중 | 문장 「표 조회 3 · 보통인부 에 계산 · 증가율 = 30 % 를 더 얹음」을 읽어야 고를 칸을 찾음 | +| S1③ | 증가율 표 대신 고정 30% | 됨(일부) | 4 (계산 2 · 3 율 칸 → 고정값 → 30 · 두 번) | ③ 계산 | 높이와 상관없이 늘 30%(3m 아래도). 「3m 넘을 때만 30%」는 계산 1 둘째 줄 「표에서 찾은 값」을 숫자로 못 바꿔 안 됨. 안 쓰게 된 계산 1 · 표 조회 1 을 지울 길 없음 | 고정값 · 율 | 아니요 | 중 | 율 칸 둘을 따로 바꿔야 함을 스스로 알아야 함 | +| S2① | 조건 칸 「돌」 입력값 → 고정 「깬돌」 | 됨 | 4 (표 조회 2 「돌」 고르기 → 고정값 → 「깬돌」 글 · 표 조회 3 에 또) | ② 표 조회 | 같은 표를 석공 · 보통인부 두 번 조회 — 한쪽만 바꾸면 석공은 깬돌 · 보통인부는 깬잡석 품으로 섞여 계산됨(실측 121,863원 · 경고 없음). 예시값 뒷길이 25 에는 깬돌 줄이 없어 「—」. 원문 표 칸 역할 알약도 「고정」으로 바뀌지만 어느 조회 것인지 안 보임 | 표 조회 · 무관(조건에서 뺌) · 고정값 | 아니요(글 「깬돌」은 손으로 적음) | 중 | 고르기는 쉬우나 같은 조건이 두 곳에 있음 · 오타면 해당 없음 | +| S2② | 쓰는 표 바꾸기(메쌓기 → 찰쌓기 표) | 안 됨 | — | ② 표 조회 | 표 이름은 글자 조각 — 누를 곳 없음. 바꾸는 함수(`setLookupTable` · `M01_LB_Blocks.ts:627`)는 있으나 화면에 안 붙음 | — | — | 불가 | 화면에 길 없음 | +| S2③ | 결과 칸 바꾸기(석공 → 보통인부 칸) | 안 됨(꼼수 하나) | 원문 칸 알약 1 → 「결과 칸 바꾸기는 아직 안 됨」 | 원문 · ② 표 조회 | 「인 줄의 석공」은 글자 조각. 알약은 조건 → 고정 → 결과로 돌고, 결과 칸을 조건으로 돌리면 「「석공」 을(를) 조건으로 쓰려면 같은 이름 입력값이 있어야 함」. 꼼수: 계산 2 바탕을 「표 조회 3 · 보통인부」로 고르면 석공 줄이 보통인부 품을 씀(고르기 목록에 있음 · 실측 안 함) | 결과 · 바탕 | 아니요 | 불가 | 표 조회의 결과 칸을 고르는 곳이 없음 | +| S3① | 새 입력값 「경사」(완 / 급) · 「급이면 석공 품 10% 더함」 | 안 됨 | — | ① 입력값 · ③ 계산 | 입력값 더하기 · 지우기 단추 없음(① 은 단위 · 범위만 고침 · 선택 목록 낱말도 못 고침). 계산 더하기 없음. 단계 안내(새로 만들기)에서만 숫자 입력값을 「입력값으로 받음」으로 만들 수 있음 — 선택(완/급) 꼴 아님 · 모든 결과 칸에 같이 걸림 | — | — | 불가 | 화면에 길 없음 | +| S3② | 품셈에 없는 작은 표 만들어 잇기 | 안 됨 | — | 원문 | 표 만들기 화면 없음(이 판 · 옛 M01 표 화면 모두). 원문 표 칸 고침은 미리 보기만 · 줄 더하기도 없음 | — | — | 불가 | 표는 품셈 원문에서만 옴 | +| S3③ | 새 항목 「잡재료 = 노무비의 2%」 | 일부 | 2 (「+ 비율」 · 2 입력 · 바탕 노무비는 기본) | ④ 항목 연결 | 2,437원 더해짐. 그러나 이름 칸 없음(일위대가표에 이름 빈 「1 식」) · 넣을 자리 고르기 없음 → 경비로 들어감(잡재료는 재료비여야). 단계 안내에서는 이름 · 넣을 자리 있음 | 비율 · 노무 줄의 합 | 아니요 | 중 | 덧붙임 한 갈래만 · 이름 · 자리 못 정함 | +| S4 | 관계 지우기(할증 · 표 조회 · 입력값) | 안 됨 | — | ② ③ ① | 할증 · 표 조회 · 입력값 · 계산 모두 지움 단추 없음(할증은 율 0 꼼수). 항목 「지움」은 1 누름 · 안 물음 — 보통인부를 지워도 그 줄이 쓰던 표 조회 3 · 계산 3 이 화면에 남고 알림 없음. 「실행 취소」 10번으로 표 칸 고침까지 다 되돌아옴(확인) · 로직 삭제는 쓰는 곳 검사 뒤 물음 | — | 아니요 | 불가 (항목만 상) | 관계를 지우는 길이 없음 | +| S5 | 관계 한눈에 보기 | 일부 | 0 (보기 바꿈 1) | 문장 · 격자 · 원문 | **문장 보기**: ① → ⑤ 차례 · 「표 조회 2 메쌓기(인력) 에서 뒷길이 이 입력값 · 뒷길이 … 인 줄의 석공」 → 「계산 2 석공 수량 표 조회 2 · 석공 에 계산 · 증가율 = 30 % 를 더 얹음」 → 「【노무】 석공 이 계산 2 = 0.195 인 = 52,437 원」 — 번호를 거꾸로 따라가면 길이 보이나 선 · 화살표 없음. **격자 보기**: 줄을 누르면 그 줄이 쓰는 줄 하나만 칠함(석공 → 계산 2 · 표 조회 · 입력값까지 안 이어짐) · 값 칸이 오른쪽에 잘려 고정값(30 · 깬돌)이 안 보임 · 표 이름 대신 QF000421. **원문**: 「이 표를 쓰는 로직 1 개」 · 주③ 「계산에 쓰임」 · 칸 역할 알약 | 표 조회 1 · 2 · 3 번호 · 바탕 · QF 번호 | 아니요 | 중 | 읽을 수는 있으나 한 장 그림이 아님 | +| S6 | 로직끼리 관계(작업량 로직 → 받는 로직) | 보기 일부 · 바꾸기 안 됨 | 0 | 산출근거 | 골재운반 모래(GF000134) 에 「계산 1 작업량 = 60 · 골재운반 덤프트럭 시간당 작업량」 글자만. 넘기는 값(qt=qt · f=f · E=E · Cm=Cm) 안 보임 · 눌러서 그 로직 열기 없음 · 고르기 목록에 「다른 로직」 없음. GF000133 쪽에 「이 로직을 쓰는 로직」 목록 없음(표에만 있음 · 실제는 GF000134 · 135 · 136 셋). 계산 2 문장이 「1 = 1 ÷ 작업량 = 60」으로 읽기 어색 | qt · f · E · Cm(기호 그대로) | 아니요 | 하 | 보이기만 하고 따라가기 · 바꾸기 길 없음 | + +## 안 되는 것이 왜 안 되나 (코드 근거) + +1. 블록 모형이 「있는 관계 고치기」 세 함수뿐 — `setCond`(조건 칸 출처) · `setLookupTable`(쓰는 표 · 화면에 안 붙음) · `setCalc`(계산 조각 · 틀) — `M01_LB_Blocks.ts:604-645`. 표 조회 · 계산 · 입력값을 **더하거나 지우는 함수가 없음**. 고침은 원래 식 글의 그 자리만 갈아끼우는 방식이라 새 자리를 만들 수 없음. +2. 화면 쪽도 같은 범위 — 문장 보기는 항목 카드만 더하기 · 지우기(`M01_LB_Steps.ts:172` `addCard` · `:249` `removeCard`) · 격자 보기는 `setCond` · `setCalc` 만(`M01_LB_Grid.ts:369-412`) · 계산 틀(할증 → 값 등)은 못 바꿈. +3. 값 고르기 목록 = 입력값 · 표 조회 · 다른 계산 · 고정값(숫자)만(`M01_LB_Steps_Cell.ts:235-275`). 「다른 로직」 · 「글 고정값」은 목록에 없어 로직 부름 줄은 글자 조각으로만 보임. +4. 표 조회의 결과 칸 바꾸기는 「아직 안 됨」으로 막아 둠(`M01_LB_Entry.ts:86` · `:437`). +5. 표 칸 고침은 정함 5대로 메모리 사본 · 저장 안 함 — 그래서 S1① 처럼 관계와 표 범위를 함께 바꿔야 하는 일은 저장 뒤 깨짐. +6. 새 입력값 · 새 표 · 조건 「급이면」 같은 품셈에 없는 관계는 단계 안내(새로 만들기)에만 일부(숫자 입력값 · 품셈 절의 다른 표로 할증 조건 목록) — 고치는 화면에는 길이 없음. +7. 「+ 비율」 카드에는 이름 · 넣을 자리 칸이 없음(단계 안내의 덧줄은 있음) — 같은 뜻의 두 길이 서로 다름. + +## 지금 화면(옛 단가산출)에서는 + +공통: 표준 로직은 못 고침 → 「본떠 만들기」로 자체 사본을 만든 뒤 편집기에서 식 글을 고침(34-1B 실측 + 코드). 거의 다 되지만 모두 **식을 써야 함 → 초등 하**. + +| # | 옛 화면 | 어떻게 | +| --- | --- | --- | +| S1① | 됨 · 식 | 중간 값 식 `만약(높이 <= 3, 0, …)` 의 3 → 2.5 (표 범위 문제는 같음) | +| S1② | 됨 · 식 | 보통인부 수량 식 끝 `* (1 + 증가율 / 100)` 지움 | +| S1③ | 됨 · 식 | 수량 식을 `… * 1.3` 으로 · 또는 중간 값 증가율 = 30 | +| S2① | 됨 · 식 | `찾기(QF000421, …, 돌=돌, …)` → `돌='깬돌'` (두 줄 다) | +| S2② | 됨 · 식 | 식 안 QF 번호 고침 · 또는 「표」 단추(수량 칸을 통째로 바꿈) | +| S2③ | 됨 · 식 | 식 끝 `.석공` → `.보통인부` | +| S3① | 됨 · 식 | 설계에서 받을 값 「줄 추가」(이름 경사 · 고르기 「완, 급」) + 수량 식에 `* 만약(경사 == '급', 1.1, 1)` | +| S3② | 안 됨 | 표 만들기 없음 · `만약` 식으로 흉내만 | +| S3③ | 됨 · 식 조금 | 덧줄 「줄 추가」 · 이름 잡재료 · 식 `노무비 * 0.02` · 비목 재료비 | +| S4 | 됨 · 안 물음 | 칸마다 × — 쓰는 곳 검사 없음 · 저장 때 엔진 검사(422)로만 걸림 | +| S5 | 일부 | 텍스트 수식(이름 식 · 값 식 두 칸) · 알약 누르면 표 창 | +| S6 | 됨 · 식 | 중간 값 `로직(GF000133, qt=qt, f=f, E=E, Cm=Cm)` 글 고침 · 알약 「로직」 누르면 그 로직을 엶 | + +## 덧붙여 본 것 + +- 계산이 멈추면 위 알림이 「서버와 이어지지 않음 — 잠시 뒤 다시 해 주세요」 — 서버는 `ok:true` 와 줄마다 까닭(「표 QF000422(13-4-1)에 높이 2.7 인 줄이 없음」)을 줌. 원문 표 위의 「해당 없음 — 예시값에 맞는 줄이 없음」만 맞는 말. +- 칸 고침은 글을 넣고 칸을 떠나야(Enter · 다른 곳 누름) 반영됨. +- 고친 뒤 처음 값으로 다 되돌리면 「닫기」가 묻지 않고 닫힘(맞는 동작) · 「저장 안 함」 표시는 그대로 남아 있었음. +- 원문 칸 역할 알약은 조건 → 고정 → 결과로 돌기만 하고 무엇이 바뀌는지 미리 말하지 않음. diff --git a/docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md b/docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md new file mode 100644 index 000000000..554843ff2 --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_엑셀로직_지도.md @@ -0,0 +1,161 @@ +# 로직판 조사 — 「엑셀(스프레드시트)로 만드는 로직」 지도 (35-2 · sub4) + +조사만 · 코드 · git · docs 안 건드림 · 근거 = sub_laptop_4 작업 트리(2026-10-01 · 안 받은 dev 28 커밋은 스프레드시트 파일을 안 건드림 — `git log HEAD..origin/dev` 로 확인). +`ss/` = `A00_Common/spreadsheet/`. + +## 결론 셋 + +1. **시트가 계산 규칙으로 쓰이는 곳은 한 곳뿐** — M02 구조물 「면적산출 · 재료산출」 통합문서. 칸 → 알약(입력값 키) 연결까지는 저장되지만 **그다음(일위대가 입력값 · 금액)으로 이어지는 코드가 없음** — 단가 계산은 `면적.json` · `재료.json` · `계산값` 을 읽지 않음. B08 · B09 는 빈 화면. +2. **자체 엔진은 엑셀 기본기를 거의 갖춤** — IF · IFS · IFERROR · VLOOKUP · XLOOKUP · INDEX/MATCH · SUMIFS · MINIFS · ROUND 계열 · 이름 정의 · 시트 사이 참조 · 선택 목록(데이터 유효성) · 계산 단계 보기 · 선행/종속 화살표. 서버는 저장 때 **같은 TS 엔진을 Node 로 다시 셈**(계산 자리 ②). 없는 것 — 다른 통합문서 참조 · LAMBDA/LET · INDIRECT/OFFSET · 마스터(노임 · 자재 · 기계 · 다른 로직)를 읽는 함수. +3. **B(시트로 로직) 는 「표 찾기 · 조건 · 할증 · 비율」 은 시트로 옮길 수 있으나 「단가 붙이기(노임 · 자재 검색 · 기계경비 로직 부르기)」 와 「여러 로직이 한 원문 표를 함께 씀」 에서 막힘** — 시트 엔진 고침 + 새 연결 없이는 로직 ↔ 시트 왕복이 안 되고, 엔진이 둘(파이썬 정본 · TS 시트)이 되어 같은 값 보장이 새 짐. **판단: A(세 칸 판)를 본 갈래로 · B 는 「원문 표 보기 · 계산 단계 보기」 같은 부품만 빌려 씀.** B 시험판을 만들면 「제한된 시트(찾기 · 단가 함수를 엔진에 더함)」 꼴로 범위를 좁혀야 함. + +--- + +## 1. 스프레드시트가 로직(계산 규칙)으로 쓰이는 곳 + +| # | 자리 | 하는 일 | 핵심 코드 | 저장 | 화면 | +| --- | --- | --- | --- | --- | --- | +| 1 | M02 구조물 면적산출 | 집계표 열(꼴 「수」) 하나마다 면적 셈 시트 | `M02_MasterTemplete_Store.py:66-72`(PARTS · `SHEETS = ("area","material")`) · `:282-301`(빈 통합문서) · `:169-170`(저장 때 서버 셈) | 층: `resources/master_template/area/<열id>.json` · 회사 · 개인 층도 같은 자리 · 프로젝트: `templates/structures/<구조물id>/면적.json`(옛 `templates/items/…`) | 큰 편집기 `M02_MasterTemplete_UI_Main.ts:273-361`(수식 입력 줄 · 주소 칸 = `ss/spreadsheet_editor.ts`) · 카드 미리보기 읽기 `M02_MasterTemplete_ItemCards.ts:314-317` · 관리자 카드 편집 `M02_MasterTemplete_Structure.ts:305-359,417-422` + 저장 단추 `M02_MasterTemplete_CardShell.ts:69-120` · 프로젝트 사본 편집 `ui_template/ui_template_item_picker_edit.ts:103-129` | +| 2 | M02 재료산출 | 같은 열의 재료 수량 시트 | 위와 같음(`material/<열id>.json` · 프로젝트 `재료.json`) | 연결 칸에 `자재: {코드: MT…}` 가 더 붙음 | 위와 같음 + 자재 찾기 알약 | +| 3 | 알약 줄(칸 ↔ 입력값 연결) | 시트 아래 알약 막대 · 알약을 칸에 놓으면 「이 칸 값 = 이 입력값」 | `ss/spreadsheet_links.ts:1-9,124-381` · 늦게 불러옴 `ss/spreadsheet.ts:151-163` | `Sheet.연결: [{키, 이름?, 단위?, 칸: "O6", 자재?}]`(`ss/spreadsheet_types.ts:200,211-219`) | 알약 = 조합 물량 `GET /combos/key/{key}/inputs`(`M02_MasterTemplete_Router_Combos.py:99-123` ← `M01_MasterData_Store_Combo.py:168-191`, 키 「로직이름|단위」) + 입력 알약 `GET /layers/{layer}/items/{key}/pills`(`M02_MasterTemplete_Router_Items.py:169` ← `M02_MasterTemplete_Inputs.py:190-218`, 키 「입력|로직|입력」) | +| 4 | 입력 자리 정하기(입력연결) | 일위대가 입력값마다 받는 자리 = 면적 · 재료 · 선택 | `M02_MasterTemplete_Inputs.ts:4-10` · `M02_MasterTemplete_Inputs.py:8-10,144-184` | `inputs/<열id>.json` = `{판, 줄: [{로직, 입력, 자리, 알약?}]}` · 프로젝트 `입력연결.json` | 「선택 입력」 카드 | +| — | (다른 엔진) 구조물집계표 표 수식 | 집계표 칸 수식(설계 값 채우기) | `ui_template/sheet/ui_template_sheet_recalc.ts` · 서버 `common_util/common_util_sheet_recalc.py:30-40` ← `M02_Table_Fill.py:654-660` | 표 템플릿 | 집계표 화면 — **이 갈래 엔진은 스프레드시트 엔진과 따로임** | +| — | 자재조합 | 자재 목록뿐 · 수량 · 단가 없음(「재료산출 몫」) | `M02_MasterTemplete_Matset.py:1-4` | `자재조합.json` | M02 자재 조합 | +| — | B08 수량 · B09 견적 | 빈 화면(다시 짓는 중) | `B08_Quantity/B08_Quantity_UI_Page.ts:3-6` · `B09_Estimation/B09_Estimation_UI_Shell.ts:3-6` | — | — | + +실제 프로젝트 사본 한 벌(`storage/1/3/…/templates/items/system_none_SS000002/면적.json`): + +```json +"칸": {"M6": {"값": 2}, "N6": {"값": 3}, "O6": {"식": "N6*M6"}, "M8": {"식": "O6/M6*0.2"}}, +"연결": [{"키": "GF000222", "이름": "돌쌓기 찰쌓기", "칸": "O6", "단위": "㎡"}], +"계산값": {"s1": {"O6": {"수": "6"}, "M8": {"수": "0.6"}}} +``` + +### 1-1. 값 흐름 — 어디서 끊기나 + +1. 시트 칸(수식) → 알약 키 연결(`Sheet.연결`) — **저장됨**. +2. 브라우저 `getLinkedValues()`(`ss/spreadsheet.ts:275-283`) — 부르는 곳은 시험 하네스뿐(`resources/tester/spreadsheet/harness_links.ts:3`). +3. 프로젝트 단가 계산 `POST /api/projects/{id}/items/{folder}/calc` → `M02_Item_Copy.py:326-337` → `M02_Item_Prices.calc`(`:211`) — 읽는 것 = `입력값.json` · `고른자재.json` · `단가.json` · `일위대가.json` 뿐. 면적 · 재료 자리 입력은 `missing_inputs`(`:195-208`)에서 「입력 없음」 으로 멈춤 · 값 카드는 「선택」 자리 입력만 받음(`M02_MasterTemplete_Inputs.ts:291-295`). + - 주의: `M02_Item_Prices.py:81` 의 `연결` 은 품셈재료 연결(마스터 줄 칸)이지 시트 칸 연결이 아님. + +→ **「시트 칸 → 일위대가 입력값 → 금액」 은 아직 안 이어짐.** 시트는 지금 「구조물 물량 계산기」 이지 단가산출 로직이 아님. + +### 1-2. 계약 어긋남(덤) + +- 형식 · 실제 파일은 `시트[i].연결`(시트마다) · `resources/tester/spreadsheet/test_spreadsheet_store.py:54,92,111` 와 `M02_MasterTemplete_Store.py:158,306` 설명은 문서 머리 `연결` 이라 적음. +- 데이터 유효성 규칙이 행 · 열 넣기/지우기 때 안 옮겨짐(`remapValidationRanges` 부르는 곳 없음) · 붙여넣기 · 채우기는 검사 안 거침 · 서버는 유효성 검사 안 함. + +--- + +## 2. 자체 스프레드시트 엔진이 되는 것 + +### 2-1. 함수 (`ss/spreadsheet_functions.ts:16-21` 에서 네 파일을 합침 · 모르는 이름 `#NAME?` · 인자 수는 풀이 때 검사) + +| 갈래 | 있음 (파일:줄) | +| --- | --- | +| 논리 | IF(misc 160) · AND 170 · OR 179 · NOT 188 · IFERROR 196 · IFS(lookup 471) · SWITCH 482 | +| 찾기 · 참조 | VLOOKUP(lookup 132) · HLOOKUP 166 · INDEX 200 · MATCH 233 · CHOOSE 269 · XLOOKUP 496 | +| 조건 집계 | COUNT · COUNTA · COUNTIF · SUMIF 319 · SUMIFS 345 · COUNTIFS · AVERAGEIF(S) · MAXIFS · MINIFS | +| 수학 · 끝수 | SUM 189 · PRODUCT · SUMPRODUCT 205 · ROUND 232 · ROUNDUP 243 · ROUNDDOWN 254 · INT 265 · TRUNC · CEILING 285 · FLOOR 300 · MIN 393 · MAX 401 · MROUND · ABS · MOD · POWER · SQRT · 삼각 · LOG · EXP | +| 글 | CONCATENATE · TEXT · TEXTJOIN · LEFT/RIGHT/MID · SUBSTITUTE · FIND/SEARCH … | +| 정보 · 날짜 · 통계 | ISNUMBER · ISBLANK · ISERROR · NA · DATE 계열 · MEDIAN · STDEV · RANK · LARGE/SMALL … | +| **없음** | XMATCH · LET · LAMBDA · INDIRECT · OFFSET · CONCAT · IFNA · ROW/COLUMN · 다른 통합문서 참조 · 마스터 자료를 읽는 함수 | + +연산 — `- + % ^ * / & = <> < <= > >=` · 범위 `A1:B5` `A:A` `$` · 합집합 `(A1,B1)` · 교차(빈칸) · 계산된 범위는 없음(`ss/spreadsheet_parser.ts:4-5,20-24,125,226-269`). 오류값에 엑셀에 없는 `#CYCLE!`. + +### 2-2. 이름 정의 · 시트 사이 참조 · 선택 목록 + +- **이름 정의** — `Sheet.이름정의: [{이름, 범위}]`(`ss/spreadsheet_types.ts:193,553-556`) · 범위만(상수 · 식 이름 없음) · 제 시트 먼저 → 다른 시트 · 대소문자 무시(`ss/spreadsheet_names.ts:47-60` · `ss/spreadsheet_graph.ts:87-113,150`) · 이름 상자 · 이름 관리자(`ss/spreadsheet_editor.ts:556-568` · `ss/spreadsheet_data_menu.ts:183`) — 계산에 실제로 붙음(형식 파일의 「안 이음」 설명은 낡음). +- **시트 사이 참조** — `Sheet2!A1` · `'시트 이름'!A1:B3` 됨(`ss/spreadsheet_parser.ts:21,39-42` · `ss/spreadsheet_eval.ts:252-254`) · 이름 바꾸면 다른 수식도 고침 · 3D(`S1:S3!`) · 다른 통합문서(`[Book]`) 없음. +- **선택 목록(데이터 유효성)** — `Sheet.유효성: [{범위, 규칙: {종류: "목록", 값들} | {종류: "수범위", 아래, 위}, 어기면: 막음 | 경고}]`(`ss/spreadsheet_types.ts:540-550`) · 칸 옆 ▼ 목록(`ss/spreadsheet_data_menu.ts:225-255`) · 들어갈 때 검사(`ss/spreadsheet_editor.ts:420-424`). +- **확인 도구** — 계산 단계 보기(`ss/spreadsheet_eval_steps.ts` — 엑셀 「수식 계산」 처럼 한 조각씩 값으로 바꿈 · IF 는 조건부터) · 선행/종속 화살표(`ss/spreadsheet_trace.ts`) · 오류 검사 ⚠(`ss/spreadsheet_errcheck.ts`) · 수식 칸 참조 색 테두리. + +### 2-3. 계산 · 크기 + +- 의존 그래프 · 바뀐 칸과 딸린 칸만 다시 셈 · 순환은 그 칸들만 `#CYCLE!`(`ss/spreadsheet_graph.ts:3-5,131-136,204-227,277-325,350-378`). +- 수 = BigInt 분수(`@ui/sheet/ui_template_sheet_frac` — 집계표와 끝수 한 벌 · `ss/spreadsheet_types.ts:7-9`) · 파이썬 단가 엔진은 `Decimal` — **같은 식이라도 두 엔진의 끝자리가 다를 수 있음**(대조 시험 필요). +- 파일 모양 — `Workbook {종류: "통합문서", 판, 열, 서식[], 시트[{id, 이름, 칸: {A1: {값 | 식, 서식}}, 병합, 열, 행, 유효성, 이름정의, 연결 …}], 계산값}`(`ss/spreadsheet_types.ts:95-102,198-242`) · 수식은 「=」 없이 · `계산값` 은 서버만 씀(브라우저 것은 버림). +- **128 KB 는 시트 파일 한도가 아님** — 브라우저가 M02 시트를 열 때 받는 코드 조각의 gzip 예산(엔진 48 + 화면 72 + css 8 KB · `ss/spreadsheet_types.ts:15-16` · 재는 곳 `resources/tester/spreadsheet/test_spreadsheet_size.py:19,41-45`). 시트 파일 크기 한도는 없음(행 1,048,576 · 열 16,384 만). +- 더할 수 있는 것(예산 안) — 함수 하나는 수십 줄 · 수 KB 미만이라 `찾기(표, 조건…)` · `단가(키)` 같은 자체 함수 몇 개는 엔진 48 KB 안에 들어갈 여지가 큼(지금 빌드 크기는 이번 조사에서 안 잼 — F 시험으로 잼). 단 `spreadsheet_types.ts` 머리 규칙상 엔진 · 계약은 「0 계약 주인」 만 고침 · 외부 라이브러리 0. + +--- + +## 3. 시트 계산을 누가 하나 + +| 때 | 누가 | 근거 | +| --- | --- | --- | +| 화면에서 고칠 때 | 브라우저 TS 엔진(보이기용) | `ss/spreadsheet.ts:199-214,269` | +| [저장](마스터 · 회사 · 개인 층) | **서버 — 파이썬이 같은 TS 엔진 Node 묶음을 부름** · 브라우저 `계산값` 은 버리고 서버 값으로 | `common_util/common_util_spreadsheet.py:17-57`(묶음 `config/spreadsheet_node/…` · 낡으면 `npm run build:spreadsheet` 로 다시 묶음 `:27-34`) · `common_util/common_util_node_bundle.py:60-93` · 부르는 곳 `M02_MasterTemplete_Store.py:169-170,462` · `M02_MasterTemplete_Router_Layers.py:318-324` | +| 프로젝트 사본 저장 | 서버 Node | `M02_Project_Items_Router.py:139-155` → `M02_Item_Copy.py:200-201` | +| 층 안 열 사이 복사 · 개인 층 저장 · 항목 복사 | 서버 Node | `M02_MasterTemplete_Store.py:316,364` · `M02_Item_Personal.py:107` · `M02_MasterTemplete_Items.py:155` | +| 프로젝트로 복사(templates/apply · seed · reset · 스냅숏) | **다시 안 셈** — 바이트 그대로(따라온 `계산값` 을 믿음) | `M02_MasterTemplete_Router_Layers.py:412-454` · `M02_Template_Layers.py:305,345,368` · `M02_Item_Snapshot.py:97-102,180-210` | +| B08 · B09 | 없음(빈 화면) | 위 1절 | +| 실패 | Node 실패 = `RecalcError` → 503 · 저장 막힘 · 묶기 300 초 · 돌리기 600 초 한도 | `common_util_node_bundle.py:27-28` | + +CLAUDE.md 5장과 대조: + +- 시트 자체는 **② 「TS 를 서버 Node 로」** 에 맞음(화면과 같은 코드 · 저장 때 서버가 다시 셈 · 브라우저 값 안 받아 적음). +- 프로젝트 복사 때 안 다시 셈 — 「초기값은 서버가 한 번 계산해 영구저장」 과는 맞으나, 마스터 쪽 단가가 바뀌어도 시트 `계산값` 은 그대로 따라감(시트는 마스터를 안 읽으니 지금은 문제 없음). +- 단가산출 로직은 **③ 서버 단독(파이썬 `master_formula`)** · 시트로 로직을 만들면 같은 값을 두 엔진(파이썬 정본 · TS 시트)이 내게 되어 「코드는 한 벌」 에 어긋남 → B 를 하려면 ① 「짝 + 거울 시험」 이거나, 시트는 편집기일 뿐 저장 때 로직 형식으로 바꿔 파이썬이 셈(시트 → 로직 변환이 필수). + +--- + +## 4. B 갈래 — 단가산출 로직 한 벌을 시트로 + +꼴(가정): 시트 ① 원문 표(표마다 한 시트) · ② 입력값 칸(선택 목록) · ③ 산출근거 칸(이름 붙은 수식) · ④ 항목 칸(종류 · 이름 · 단위 · 수량 · 단가 · 금액 · 비목). + +### 4-1. 로직 → 시트 (지금 형식 하나하나) + +| 로직 구성 | 시트로 | 됨? | 막힘 · 까닭 | +| --- | --- | --- | --- | +| 입력 · 고르기 | 입력 칸 + 선택 목록 | 됨 | 서버가 유효성 검사 안 함 · 붙여넣기는 검사 안 거침 | +| 입력 · 범위 | 수범위 유효성 | 됨 | 같음 | +| 입력 · 수 | 빈 칸 | 됨 | — | +| 중간(이름 = 식) | 이름 정의한 칸 + 수식 | 됨 | 이름은 범위만 · 칸 이름이 한글이면 엔진 이름 규칙 확인 필요 | +| 찾기 · 같음 조건 | `SUMIFS`/`MAXIFS`(수 값) 또는 `XLOOKUP`(묶은 열쇠 열) | 반쯤 | 「맞는 줄 없음 · 둘 이상」 을 엔진은 멈춤으로 알리는데 SUMIFS 는 0 을 조용히 냄 → 틀린 금액이 숨음 · 「빈 조건 칸 = 무관」 은 조건마다 `(칸="" 또는 칸=값)` 을 더 써야 함 | +| 찾기 · 범위 조건 | 아래 · 위 두 열 + MINIFS 등 | 어렵 | 범위규칙 다섯 가지(초과·이하 · 이상·미만 + 「마지막 칸은 이하 포함」 · 이하 = 위 끝 가장 작은 줄 · 이상·이하)(`master_formula.py:331-384`)를 수식마다 손으로 흉내 | +| 찾기 · 값 칸이 식 글(「L/V×2×60」) · 범위 값 [아래, 위] | 열 둘로 펴기 · 식 글은 따로 | 어렵 | 표 모양을 시트로 바꾸는 규칙이 새로 필요 | +| 만약 · 비교 · 그리고/또는 | IF · AND · OR | 됨 | — | +| 최소 · 최대 · 올림 · 버림 · 반올림(자리) | MIN · MAX · ROUNDUP · ROUNDDOWN · ROUND | 됨 | 수 표현(분수 대 Decimal) 끝자리 대조 필요 | +| 할증 `(1 + 율/100)` · % | 수식 · `%` | 됨 | — | +| 호표 수량 | 항목 칸 수량 = 수식 | 됨 | — | +| **호표 단가 — 인력 노임(LB)** | 단가 칸을 마스터에서 채워야 함 | **막힘** | 시트에 마스터를 읽는 함수 없음 · 다른 통합문서 참조 없음 → 서버가 칸을 채워 주는 새 연결(또는 `단가()` 함수) 필요 | +| **호표 단가 — 재료 검색어 고르기** | 〃 | **막힘** | 자동값 차례 · 단위 환산 · 지역 · 계약종별(`master_pick`)을 시트가 못 함 | +| **호표 — 기계(기계경비 로직 부름)** · 다른 로직 부름(1,075 줄 · 506 로직) | 〃 | **막힘** | 인자를 넘겨 다른 로직을 부르는 길 없음(LAMBDA · 다른 통합문서 없음) | +| 틀 키 `EQ:{기계}.가격` · `LB:{직종}` | 기계 · 인력 표 사본 + INDEX/MATCH | 막힘에 가까움 | 마스터 654 기계 줄을 시트마다 복사 | +| 덧줄 · 비목 합 × 비율 | `SUMIF(비목 열, "노무비", 금액 열) * 율` | 됨 | — | +| 덧줄 `줄.'이름'` | 칸 참조 | 됨 | — | +| 끝수 묶음 | 계 칸 ROUNDDOWN | 됨 | — | +| 돈 아닌 결과 식(작업량) | 결과 칸 하나 | 됨 | 다른 로직이 그 결과를 부르는 길은 위 「로직 부름」 과 같이 막힘 | + +### 4-2. 시트 → 로직 (거꾸로) + +- 자유 수식(A1 참조 · SUMIFS · INDEX · TEXT …)은 로직 식 문법(`_틀.md` 8장 — `+ - * /` · 비교 · 그리고/또는 · 찾기 · 로직 · 만약 · 올림/버림/반올림 · 최소/최대)에 짝이 없음 → **아무 시트나 로직으로 바꿀 수는 없음**. +- 되는 꼴 = 「제한된 시트」 — 칸 자리(입력 · 산출근거 · 항목)를 틀로 고정하고, 수식은 로직 문법 안의 함수만 · 표 찾기는 자체 함수 `찾기(표, 조건=…)` 하나로 → 이러면 사실상 「시트 옷을 입은 로직 식」 이고, 사용자는 여전히 식을 씀. +- 원문 표가 시트 안에 사본으로 들어가면 표 3,033개(로직이 부르는 것 2,015 · 한 표를 여러 로직이 씀)가 로직마다 복사 → 품셈 숫자가 바뀌면 사본마다 고쳐야 함. 피하려면 원문 표 시트를 「마스터 표를 비추는 읽기 시트」 로 두는 새 기능 필요(다른 통합문서 참조에 해당). + +### 4-3. B 를 하려면 새로 필요한 것 + +1. 엔진에 자체 함수 — `찾기(표키, 조건…)`(범위규칙 · 무관 · 해당 없음/중복 멈춤까지 파이썬과 같게) · `단가(키 또는 검색어)` · `로직(키, 인자…)` — 엔진 · 계약 주인의 고침 + 마스터 자료를 엔진에 넣는 길(브라우저 · Node 둘 다). +2. 시트 → 로직 변환기(저장 때) + 로직 → 시트 생성기(열 때) + 왕복 시험 1,469 개. +3. 또는 시트를 정본으로 두면 파이썬 엔진과 TS 시트 엔진의 거울 시험(분수 대 Decimal). +4. 알약 → 입력값 → 금액 사슬 잇기(지금 끊김 — 1-1). + +--- + +## 5. A 대 B 판단 거리 + +| 목적 | A 세 칸 판(원문 표 · 산출근거 · 결과 · 고르기) | B 엑셀 시트형 | +| --- | --- | --- | +| ① 원문 대조 확인 | **좋음** — 왼쪽에 마스터 표 그대로(사본 아님) · 걸린 줄 칠함 · 출처 칩 · 산출근거는 문장. 걱정: 원문 「주」 글은 표 밖이라 연결 표시를 따로 만들어야 함 | 좋음 · 걱정 — 표는 엑셀처럼 보이나 규칙은 칸 수식 속에 숨음(A1 참조) · 계산 단계 보기 · 화살표로 따라갈 수는 있음(`ss/spreadsheet_eval_steps.ts` · `ss/spreadsheet_trace.ts`) | +| ② 품셈 숫자 바뀜 직접 고침 | **좋음** — 마스터 표 칸 하나 고치면 그 표를 쓰는 모든 로직에 반영(표는 한 벌 · `용도.로직키` 로 영향 보기) | **걱정 큼** — 표가 로직마다 시트 사본이면 사본마다 고침 · 피하려면 「마스터 표를 비추는 시트」 새 기능 | +| ③ 혼자 새로 만들기(초등학생) | 좋음 — 단계 안내 · 선택 · 문장 틀(할증 · 나누기 · 조건 목록) · 식 안 씀. 걱정: 틀 밖 규칙(드문 식 10 %)은 「직접 입력 식」 으로 남음 | **걱정 큼** — 결국 수식 쓰기(SUMIFS · 무관 · 범위규칙) · 9-21 「식으로 새로 만들기」 와 같은 벽 · 엑셀 아는 어른에게만 쉬움 | +| ④ 많은 수 검증 | 좋음 — 표 조회 「해당 없음 / 중복」 검사 · 기대값 시험표 · 진행표 · 서버 일괄(`check_master 계산전부`)을 그대로 씀 | 반쯤 — 시트 하나씩은 단계 보기가 좋으나 1,469 개를 시트로 바꾸는 일 자체가 큼 · SUMIFS 가 0 을 조용히 내면 틀림을 놓침 | +| ⑤ 서버 엔진과 같은 값 | **좋음** — 저장은 지금 로직 형식 · 계산은 파이썬 정본 한 벌(③) · 판은 편집기일 뿐 | **걱정 큼** — 시트 값(TS · 분수)과 정본(파이썬 · Decimal) 두 엔진 · 단가 붙이기(노임 · 자재 · 기계경비)는 시트가 못 해 서버 칸 채우기 필요 · 거울 시험 새 짐 | + +### 5-1. 정리 + +- **본 갈래 = A.** 정본 형식 · 엔진 · 마스터 표를 그대로 두고 화면만 바꿈 — 다섯 목적 모두 「좋음」 쪽. 오늘 만든 쉬운 단가산출(Api · 카드 · 일위대가표)이 오른쪽 「결과」 칸으로 그대로 들어감. +- **B 에서 빌려 올 것(작게)** — ① 왼쪽 원문 표를 스프레드시트 격자(읽기 · 칸 눌러 고침)로 보이기 ② 계산 단계 보기처럼 「산출근거 한 줄씩 값으로 풀기」 ③ 입력값 선택 목록(데이터 유효성 모양) ④ 선행/종속 화살표 → 「이 값이 어디서 왔나」. +- **B 시험판을 꼭 만든다면** — 범위를 「제한된 시트」 로: 원문 표 시트(마스터 표 비춤 · 읽기) + 입력 칸 + 산출근거 칸(로직 문법 함수만 + `찾기()` 자체 함수) + 항목 칸(단가는 서버가 채움) · 저장은 로직 형식으로 바꿔 파이썬이 셈. 필요한 엔진 고침(자체 함수 · 마스터 자료 주입)은 「0 계약 주인」 몫이라 브레인 결정 필요. +- **따로 알릴 것** — M02 면적 · 재료 시트의 「알약 → 입력값 → 금액」 사슬이 끊겨 있음(1-1) · B 와 상관없이 B08 · B09 다시 지을 때 이을 자리. diff --git a/docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md b/docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md new file mode 100644 index 000000000..f48d12a6f --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_조사_A_견적프로그램.md @@ -0,0 +1,100 @@ +# 35-0 조사 A — 견적 · 단가산출 프로그램은 로직을 어떻게 만들고 고치게 하나 (sub6 · 조사만) + +- 웹 검색 · 읽기만. 로그인 · 결제 필요한 곳은 겉 설명만. 「(추정)」 = 소개문만 보고 짐작 · 화면 · 설명서로 확인 못 함. +- 주소는 실제로 열었거나 검색 결과에 나온 것만. 「(검색만)」 = 열기 실패 · 요약만 봄. 사진 주소는 쪽 안 상대 경로를 펼친 것이라 직접 열어 보지 않음. + +## 0. 한 줄 결론 + +1. 국내 프로그램은 거의 모두 「**기초단가(단가대비표) → 일위대가(호표 행) → 내역서 → 원가계산서**」 한 줄 흐름 · 일위대가 행 = 품명 · 규격 · 단위 · 수량 × 단가 → 재료비 · 노무비 · 경비. 품셈 식을 사용자가 짜는 화면은 없음 — **표준일위대가 DB를 받아 수량 · 단가만 고치는 꼴**이 기본. +2. 품셈 개정 = 회사가 **DB 갱신으로 내려 줌**(조달청 표준일위대가 연 1회 · 노임 상 · 하반기 · 자재 달마다 · 2025년부터 품셈 상반기 1월 · 하반기 8월). 「품셈 연도 골라 쓰기」를 밝힌 곳 없음. +3. 해외는 「**입력값 → 계산 → 결과**」를 갈라 보이고(InEight), 입력을 **물음 · 고르기**로 받아 줄이 바로 생기게 하고(DESTINI · PlanSwift), **조회 표를 한 줄 종류로**(Sage 1 · 2차원 표) 둠. 라이브러리와 사본의 관계(복사 / 연결 / 새 견적만 반영)를 **한 규칙으로 정해 화면에 밝힘**. +4. 산림(임도 · 사방) 전용 일위대가 도구는 못 찾음 — 산림청은 「산림사업 표준품셈」 PDF만 배포 · 실무는 범용 프로그램이나 엑셀로 보임(추정). 우리 판의 빈자리. + +## 1. 국내 + +| 프로그램 | 사용자가 하는 일 | 화면 모양 | 좋음 | 걱정 | 개정 반영 | 우리 판에 가져올 것 | 주소 | +| --- | --- | --- | --- | --- | --- | --- | --- | +| EST plus (다산소프트) | 기초대가(노임 · 자재 · 중기) → 일위대가 · 단가산출 → 내역서 · 원가계산서 | 풀다운 메뉴 + 그리드 + 트리 · 설계서 9개 동시 비교 | 기초대가 하나로 문서 일괄 | 화면 세부 미확인 | 인터넷 무상 갱신 · 조달청 표준일위대가를 연 1회 EST 형식으로 배포 | 「기초단가 한 곳 → 모든 일위대가 따라 바뀜」 | dasansoft.com/products/?mname=products01&sub=2 · 사진: dasansoft.com/products/images/est01.gif ~ est005.gif | +| EMS7 (고려전산) | 표준품셈 DB에서 일위대가 · 단가산출서 입력 → 설계 · 견적 · 실행 · 기성 · 설계변경까지 | 트리 / 그리드 · 두 프로젝트 비교(일부 추정) | 한 번 입력으로 전 과정 · 조달청 호환(C3R) | 유료 · 배우기 어렵다는 말 | 「수시 업데이트 품셈 개정 · 단가 DB」 온라인 갱신 | 당초 / 변경 비교 보기 | koreasoft.co.kr/m/pub/product/ems.asp · 사진: koreasoft.co.kr/img/ems01.jpg · ems02.jpg | +| Easy 2.0 (건설연구원 — 품셈 책 출판사) | 등록된 표준일위대가 · 재료비 · 노무비 · 경비를 **찾아 가져다 씀** · 엑셀로 바꿔 수정 | 찾기 중심 목록(추정) | 품셈 원문 곁에 만든 곳 · 조달청 호환 인증 | 분야별 따로 판매 | 재료비 달마다 · 품셈 정오표 공지 | 입구 = 「찾아서 가져오기」 | 04info.co.kr | +| XCOST / XCOST Pro (하우코스트) | 프로젝트 → 단가대비표를 자재 화면에 붙여넣기 → 일위대가 목록을 내역 화면에 붙여넣기 → 같은 코드면 일위대가 자동 생성 · 없으면 새 자재코드 → 「품목구분」을 일위대가로 바꿔야 고칠 수 있음 | 듀얼 화면(수량산출서 ↔ 내역서) · 엑셀식 붙여넣기 | 무료판 · 엑셀 호환 | 붙여넣은 일위대가가 처음엔 「자재」로 잠김(숨은 규칙) | 달마다 통합 일위대가 배포(예 2025-11판 = 하반기 노임 + 11월 자재 + 2025.8 품셈 + 10월 조달청 단가) · 조달청 표준공사코드 병기 | 판마다 「무엇이 들어간 판인지」 한 줄 표시 | xcost.me/bbs/board.php?bo_table=tip&wr_id=128 · xcost.me/bbs/board.php?bo_table=data&wr_id=241 | +| SGS2025 (나스) | 기초자원(자재 · 노임 · 견적) → 단가산출(산식 사전 · 선 그리기로 도표) → 일위대가 자동 → 예산내역서 | 위아래 2단 · **작업 화면 = 인쇄 결과물** · 오른쪽 클릭 메뉴 · 관급 / 사급 색 구분 | 화면과 출력물이 같아 실무자가 바로 읽음 | 단가 일괄 인상 · 인하 기능 오용 위험 | 노임 · 건설기계 가격 상 · 하반기 무상 · 「최신 단가 자동 변경 링크」 | 「실무 일위대가표로 보기」를 화면 모양 그대로 | nas.co.kr/nas/product/sgs02.php · nas.co.kr/nas/product/sub_page_sgs/sgs_intro_slide12.php · 사진: nas.co.kr/nas/img/sgs_flow/12_img01.jpg | +| EBS (글로텍) | 기초단가(재료 · 노무 · 경비 · 기계경비) → 일위대가(산출근거 · 호표 · 별표) → 내역서 | 미확인 | 연도별 제경비율 자동 | 공개 정보 적음 | 물가지 DB · 노임 적용 | — | glotechsoft.com/ebs · 사진: glotechsoft.com/resources/img/works/ebs.png | +| EG 견적 (이지테크) | 일위대가 품명 · 규격 입력 → [≡2] 단추로 세부 → Tab 으로 자재 불러오기 / 직접 → 옵션계산 → Ctrl+I 「내현장 일위대가」 → 결정수량 | 총괄표 / 세부 계층 그리드 | 분야(전기) 도움말 자세함 | 단축키 · 기호 단추 의존 | 미확인 | 「내 현장 일위대가」 = 우리 「내가 만든 것」과 같은 갈래 | 2156.co.kr/egHelp/eg9_4.html (검색만) | +| JOINT (아성정보) | 자재 수량 입력 → 재료비 · 노무비 · 경비 자동 · 일위대가 목록 · 단가대비표 일괄 출력 | 미확인 | 조달청 호환 | 홍보성 정보만 | 「표준품셈 입력 제공」 · 정부노임 | — | m.cafe.daum.net/lineone/4QR6/5496 | +| KICA 공사비산정 (정보통신공사협회 · 웹 무료) | 품셈 공종 고름 → 규격 · 단위 · 수량 → **할증 칸** → 기계경비(장비 · 규격 · 사용시간) · 기타경비(10개까지) → [산정하기] → 엑셀 저장 | 웹 폼 · 칸 묶음마다 저장 · 복사 · 수정 · 삭제 | 무료 · 8,187 공종 · 연관 검색어 | 정보통신 전용 | 해마다 「20XX년도 적용 품셈」 · 노임 · 조달청 간접비 기준으로 통째 교체 | **순서 있는 물음 폼**(무엇 → 얼마 → 할증 → 기계) · 「적용 품셈 연도」를 화면 머리에 | ictis.kica.or.kr/tech/testConstructCost/inquiry · koit.co.kr/news/articleView.html?idxno=102431 | +| 조달청 공사원가통합관리(NPCCS) · 통합원가계산 | 내역서 → 자원(자재 · 노무 · 경비) → 일괄 재계산 → 원가계산서 탭 | 웹 탭(추정) | 표준공사코드 · 표준시장단가 · 자원코드 = 공식 기준 | 공동인증서 필요 · 열람 못 함 | 표준일위대가를 해마다 개정 품셈으로 다시 공개 · 자원코드 · 시장단가는 공공데이터포털 반기 | 공식 코드를 곁에 적어 둘 칸 | npccs.g2b.go.kr (검색만) · data.go.kr/data/15151298/fileData.do (검색만) | +| 한국물가정보(KPI) 적산정보 | 표준 · 실용 일위대가 **조회 · 출력** · 표준 일위대가로 간이 내역서 | 공종 분류 트리 → 일위대가 표 | 물가와 연동 | 「미적용 품목」 있음 · 현장마다 다를 수 있음을 스스로 밝힘 | 반기(1월 · 9월) | 「이 값은 표준 · 현장 따라 다름」 한 줄 | kpi.or.kr/www/estimate/ · kpi.or.kr/www/2020/kpi_juseinfo.asp | +| 산림 분야 | 전용 일위대가 도구 못 찾음 · 산림청 「산림사업 표준품셈」 PDF(조림 · 숲가꾸기 · 사방 · 임도 등 7개 사업 통합 · 2024 개정판 2025.1.1 시행) · 공공데이터 「산림토목 사업종별 기준 단가」 | — | 무료 · 통합 | 만드는 도구 없음 | 품셈 PDF 개정판 | 우리 판이 채울 빈자리 | ftims.forest.go.kr/cop/bbs/selectArticleDetail.do?nttId=2696&bbsId=BBSMSTR_000000000001 · data.go.kr/data/15041979/fileData.do (검색만) | + +- 이름만 나오고 근거를 못 찾은 것: STmate · 코스트맨 · 견적왕 · A-Cost · 빌드코스트 · CostPlanner. 한국물가협회는 일위대가 DB(1만 2천여 건)만 확인. +- 품셈 개정 흐름: 국토부 공고 · 한국건설기술연구원 공사비원가관리센터 관리 · 2025년부터 「수요응답형」 상 · 하반기 반영(koscaj.com/news/articleView.html?idxno=112754 · sankun.com 블로그 · codil.or.kr (검색만)). + +### 1-1. 표준 서식 열 (조달청 「설계내역서 작성 매뉴얼」 PDF 본문 확인) + +- 일위대가표 머리 = 번호(호표) + 품명 + 단위 — 예 「1-1 가설전력인입 (일위대가) 식」 · 아래 행 = 자재 행 + 「노무비 배전전공 인」 행. +- 일위대가표 열 = 일위대가표번호 · 자재코드 · 품명 · 규격 · 단위 · 수량 · 재료비 · 노무비 · 경비 · 합계(각 단가 · 금액). +- 일위대가 목록 = 코드 · 품명 · 규격 · 단위 · 재료비 · 노무비 · 경비. +- 내역서 = 품명 · 규격 · 단위 · 수량 · 재료비 · 노무비 · 경비 · 합계(단가 · 금액) · 비고. +- 단가대비표 = 품명 · 규격별 가격 출처(물가자료 · 거래가격 · 유통물가 · 조사가격)를 나란히 놓고 적용단가 고름(열 이름은 추정). +- 실무 흐름 = 단가대비표로 자재 · 노임 · 중기 단가 확정 → 품셈 항목 골라 호표 행 입력(재료 수량은 할증 포함 · 노무 인수 · 공구손료 · 잡재료 % 행) → 행마다 수량 × 단가 → 재료비 · 노무비 · 경비 합 → 일위대가 목록 → 내역서 → 원가계산서. +- 「별도」 표기 = 시멘트 · 모래처럼 일위대가에서 빼고 따로 잡는 재료. +- 주소: kira.or.kr/gongji_2008/조달요청 건축공사 설계내역서 작성 매뉴얼(최종).pdf · ktword.co.kr/test/view/view.php?no=2264 (검색만) + +## 2. 해외 + +| 제품 | 사용자가 하는 일 | 화면 모양 | 표(생산량 · 계수) 연결 | 개정판 관리 | 좋음 | 걱정 | 우리 판에 가져올 것 | 주소 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| RSMeans Data Online | 단가 줄 · assembly 고름 → 「Customize Assembly」 = 구성 줄 Add / **Swap** / Remove · 수량 · 「Insert Custom Line」 · 고친 줄에 **연필 표시** | 견적 그리드 → assembly 펼치면 구성 목록 | 줄마다 **Crew**(예 C-1 = 목수 4 + 인부 1) · **Daily Output**(8시간당 생산량) · 노무시간/단위 = 작업조 시간 ÷ 생산량 · Material / Labor / Equipment 갈라 봄 | 견적 만들 때 **Release(연도 · 분기) · Location · Labor Type** 고름 | 작업조 → 생산량 → 단가 사슬이 눈에 보임 | 직접 넣은 줄은 자동 계산 없음 | 「바꾸기(Swap)」 단추 · 고친 줄 연필 표시 · 판(연도) 고르기 | rsmeans.com/resources/creating-unit-assembly-estimates-rsmeans-online · gordian.com/resources/cost-item-assemblies-improving-accuracy/ | +| Sage Estimating | 물량 뽑기 → 「Save As Assembly」(**Database** 재사용 / **One-time** 이 견적만) → Insert 로 줄 추가 · 오른쪽 클릭 Substitute · 줄마다 계산 방법 | assembly 줄 그리드 + 물량 뽑기 때 **변수 칸** | 줄 계산 기호 I(식) · *(계수) · F(고른 식) · fy(사용자 식) · **Item table 1 · 2차원**(예 경간 × 규격 → 장선) · 「Select-at-takeoff」 = 그때 고르라는 물음 | 「Price Update」 미리보기 · **기본 DB 단가 고쳐도 이미 만든 견적은 안 바뀜**(새 견적부터) · +x% 뒤 −x% 해도 원값 아님 경고 | 2차원 조회 표가 강함 | 한 글자 기호가 암호 | 「표 보고 고르기」를 한 줄 종류로 · 고친 값이 어디까지 퍼지는지 한 줄 | help-sageestimating.na.sage.com/en-us/23_1/Content/assembly/item_grid_assembly_window.htm · …/item_tables_concept.htm · …/22_1/Content/pricing/updating_database_prices_by_category.htm · …/21_1/Content/takeoff/saving_items_as_an_assembly.htm · 사진(추정): …/23_1/Content/Resources/Images/it-2dim.gif | +| InEight Estimate | 다섯 걸음 — ① 결과 **Cost Items** ② **Inputs**(값 · 표 · 글 입력 · 최소 / 최대 검사 · 기본값 · 조건부 보임) ③ **Tables** ④ **Calculations** ⑤ 칸 오른쪽 클릭 「Link this field to Calculation Result」 | assembly 한 장에 블록 — Cost Items 트리 · Inputs · Calculations · Tables · **Notes(근거 · 그림)** · 식 편집기(칸 · 상수 · 연산 · 함수 고르기) | `[Length]*[Width]*[Thickness]/27` · 표는 assembly 전용 · 프로젝트 · **Master** 세 층 · 결과를 생산량 · 자원 수량에 이음 · **틀린 식은 「?」 · 적용 막음** | 라이브러리 = 마스터 · 새 폴더는 마스터를 **복사** · 지역 · 임금 구역 거름 · 「마지막 고친 사람 / 때」 | 입력 → 계산 → 결과 갈라 보기 + 근거 메모 | 초보에게 무거움(변수 이름 · 괄호 문법) | 깨진 결과 「?」 · 로직마다 「근거」 칸 · 입력 기본값 · 범위 검사 | learn.ineight.com/Estimate-On-Premise/Content/15-CI-Assemblies/15%202%20Cost%20Item%20Assembly%20Creation.htm · learn.ineight.com/Estimate/Content/3-LibrarySetup/3%201%20Library%20Overview.htm | +| DESTINI Estimator (Beck) | 물량(면적 · 둘레 · 높이) 넣음 → **물음 4개쯤**(고르기)에 답하면 **오른쪽에 줄이 바로 생김** → 단가 → % 물음(손실)로 수량 더함 | 왼쪽 물음 판 · 오른쪽 줄 목록(실시간) | assembly = 줄 + 고르기 + 식 · 식 이름에 단위를 넣음(`fx_FootingVolumeCUYD`) | Cloud Cost Library(세부 못 찾음) | 「가장 경험 적은 견적자를 위해 설계」 | 로직 짜는 일은 여전히 전문가 몫 | 물음에 답하면 줄이 생기는 마법사 · 이름에 단위 | beck-technology.com/blog/destini-estimator-assemblies-tutorial · …/how-to-build-assemblies-tips-and-tricks · 사진: beck-technology.com/hs-fs/hubfs/Blog%20Images/Assembly%20Map.jpg | +| RIB CostX | 단가 라이브러리에 Rate(코드 · 지역 · 묶음 · 단위) → 복합 단가는 **build-up 시트** · 단가를 워크북에 끌면 식이 자동 | 단가 목록 + 엑셀형 워크북 + build-up 시트 | `XGETRATE` · `XSUMRATE` · `XGETNAMEDCELL`(할증 · %) · 코드 머리 L / P / M / S(노무 · 장비 · 재료 · 외주) | 복합 단가가 원 단가를 **참조** → 노임 오르면 모두 따라 바뀜 · 워크북을 다른 라이브러리로 바꿔 재계산 · 관리자 잠금 · 지역별 라이브러리 | 연결 단가 + 지역 · 연도 라이브러리 통째 바꾸기 | 식 함수가 엑셀 말 | 「단가 판(연도 · 지역) 바꾸기 → 한 번에 재계산」 | rib-software.com/en/blogs/rib-costx-rate-library · …/rib-costx-database-rate-libraries · …/rib-costx-functions | +| CCS Candy | 분석 워크시트에 자원 코드를 치거나 목록에서 끌어 넣음 · 오른쪽 클릭 「Edit/New resource」 | 글 계산 줄 워크시트 + 자원 목록 | 단순 / 복합 자원(9층까지 · 예 「콘크리트 작업조」) · `#` = **아래 줄에 함께 쓰는 생산량**(예 400㎥/일) · `+5%waste` 손실 | 자원 단가 고치면 모든 워크시트 · Nett 단가 갱신 | 손계산처럼 읽힘 · 근거 추적 강함 | 쳐 넣는 문법이라 실수 쉬움 | 「공통 계수 한 줄」(줄마다 반복 대신) · 손실 % 칸 | slideshare.net/slideshow/candy-construction-estimating-valuations-rev-201/10113582 · constructioncomputersoftware.com/products/candy/candy-features/estimating/ (검색만) | +| Causeway Estimating | 라이브러리 자원을 **rate build-up** 에 끌어 넣음 · 노무 · 장비 · 재료를 재사용 「activity resource」로 묶음 | 라이브러리 트리 + build-up 그리드(추정) | 자원에 손실 · 탄소 값 | 자원 단가 고치면 「다음에 쓸 때」 반영(기존은 그대로인 듯 · 추정) | 끌어 넣기 | 연결인지 사본인지 흐림 | — | causeway.com/blog/estimating-efficiency-with-causewayones-library-maintenance-feature-0 | +| Cubit (Buildsoft) | **Rate Sheet** 에서 복합 단가(예 문 한 짝) 짬 · **Simple / Material·Labour 두 모드** | Rate Sheet 그리드 | 라이브러리 가격표 틀 | 못 찾음 | 쉬운 모드 전환 | — | 「쉬운 보기 / 실무 보기」 전환 | bsoft.zendesk.com/hc/en-us/articles/232310448 (검색만) | +| HCSS HeavyBid | Master Estimate · **Activity Codebook** 에서 활동을 가져옴 · 작업조 바꾸기(Edit > Replace Crews) | 공종 → 활동 → 자원 세부 판 | 코드북 활동에 기본 작업조 · 자원 · 생산량 · 물량 계산 · 현장(HeavyJob) 생산 이력 | 회사 코드북을 견적에 **복사** | 현장 실적에서 생산량 | 작업조가 너무 많아짐(업체 글: 12개 → 3개로 줄이라) | 처음엔 몇 개 기본 묶음만 | hcss.com/blog/spring2018-codebooks/ · heavybid.ewksol.com/index.php/2017/05/30/simplify-your-crews-and-activity-codebook/ | +| B2W Estimate | Crew Template 에 구성(노무 · 장비) · 하루 시간 · 기본 생산량 · 재료는 Task / Item 틀에 | 목록 탭 + 세부 탭 | 생산량 단위 UM/DY · DY/UM · UM/PH · UM/MH 등 | 틀을 넣으면 「**carbon copy**」 · 뒤에 원본 고쳐도 안 바뀜 · 생산량 바꾼 **이력(옛 값 → 새 값)** | 복사 규칙이 분명 · 바뀜 기록 | 사본이 원본과 멀어짐 | 옛 값 → 새 값 기록 | help.trimble.com/doc/b2w-estimate/b2w-estimate/about-resources/costing-resources/crew-templates-resource | +| PlanSwift | 부품 · assembly 를 물량 위로 끌면 **변수 창 하나**가 떠 모든 입력을 한 번에 → OK | 틀 판 + 변수 창 | 고급 속성 식 `[!sum(Price Total)]` | 기본 DB | 입력을 한 창에서 다 물음 | 식 문법이 숨겨진 곳에 | 「설계 때 정하는 값」을 한 창에서 | planswift.com/blog/use-parts-assemblies/ | +| ProEst (Autodesk) | DB 에서 단가 줄 · assembly 추가 · assembly 는 「식 변수에서 생성」(교육 목차만) | 미확인(도움말 403) | 지역 단가 · 계수 2만 3천 줄 | 자체 DB 가져오기 / 기본 DB | 큰 시작 DB | 식 작동 공개 설명 적음 | — | autodesk.com/products/proest/overview · learnacc.autodesk.com/proest-estimator (검색만) | +| RIB iTWO 4.0 | 공개 설명 못 찾음(assembly 마스터 → 자원 · 수량 · 원가 계수 · 수량 식 — 추정) | — | — | — | — | 공개 문서 없음 | — | — | + +### 2-1. 해외에서 우리 판에 가져올 것 (갈래 순 · 설계 후보) + +1. 로직 한 장을 **설계 때 정하는 값(입력) → 줄(계산) → 합계(결과)** 세 칸 + **근거 메모** 칸으로(InEight Notes). 브레인 제안서 세 칸(원문 표 · 만드는 줄 · 결과)과 같은 갈래 — 「원문 표」 칸이 근거 메모 몫. +2. 입력은 기본값 · 범위 검사 · 한 창에서 다 물음(InEight · PlanSwift) — 우리 「설계 때 정하는 값」 띠. +3. 물음에 답하면 줄이 바로 생김(DESTINI) — 우리 「물음 셋(무엇 → 어떤 것 → 얼마)」과 같은 갈래 · 근거 있음. +4. **조회 표를 한 줄 종류로**(Sage 1 · 2차원 표 · InEight Tables) — 우리 2단계 「표 보고 고르기」 근거. +5. **공통 계수 한 줄**(Candy `#`) · 손실 % 칸 — 우리 「덧붙임(%)」 카드. +6. 깨진 결과는 「?」 + 저장 막음(InEight) — 우리 「잘못 넣음은 그 카드 안 한 줄」. +7. 라이브러리 ↔ 사본 규칙을 하나로 정해 화면에 밝힘 — B2W(사본 · 원본 고쳐도 안 바뀜) · CostX · Candy(연결 · 따라 바뀜) · Sage(새 견적부터). 우리 「품셈 기본 → 이걸 바탕으로 고치기」(사본)는 B2W 갈래 — 「품셈이 개정돼도 내가 만든 것은 안 바뀜」 한 줄 필요. +8. 고친 줄 표시(RSMeans 연필) · 옛 값 → 새 값 기록(B2W) · 「바꾸기(Swap)」 단추(RSMeans) — 단가 자료 바꾸기 걸음을 줄 하나로. +9. 판(연도 · 지역) 고르기 · 통째 바꿔 재계산(RSMeans Release · CostX) — 국내 KICA 「20XX년도 적용 품셈」 머리와 같은 갈래. +10. 쉬운 보기 / 실무 보기 전환(Cubit Simple · Material/Labour 모드 · 국내 SGS 「화면 = 출력물」) — 우리 「실무 일위대가표로 보기」(읽기) 근거. + +## 3. 용어 표 — 우리 화면 낱말 고를 근거 + +| 뜻 | 국내에서 쓰는 말 | 해외에서 쓰는 말 | 우리 설계 낱말(설계.md 8) | 메모 | +| --- | --- | --- | --- | --- | +| 단가산출 로직 한 벌 | 일위대가 · 일위대가표 · 단가산출서 · 단가산출조서 · 내현장 일위대가(EG) · 실용 일위대가(KPI) | Assembly · Cost Item Assembly · Rate build-up · Composite rate · Recipe · Activity | 일위대가 · 내가 만든 것 · 품셈 기본 | 국내 실무는 「일위대가」가 압도적 | +| 한 벌의 번호 | 호표 · 별표 · 일위대가표번호 · 코드 | Item code · Rate code | (숨김) | 서식 머리 「1-1 …」 꼴 | +| 줄(자원) | 재료 · 노무 · 경비 · 기계경비 · 중기 · 자재 · 노임 | Resource(Labor · Equipment/Plant · Material · Subcontract) · Component · Part | 사람 · 재료 · 기계 · 다른 일위대가 | 국내 서식 열은 재료비 · 노무비 · 경비 | +| 넣을 자리(비목) | 재료비 · 노무비 · 경비 · 직접 / 간접노무비 · 산출경비 | Material / Labor / Equipment cost · Bare cost | 재료값(재료비) · 사람 품값(노무비) · 기계·경비(경비) | 괄호 속 공식어를 같이 두는 것이 실무 이해에 맞음 | +| 입력값 | 설계수량 · 결정수량 · 수량 | Variable · Input · Takeoff dimension · Question / Choice · Select-at-takeoff | 설계 때 정하는 값 | 해외는 「물음」 꼴로도 받음 | +| 고정값 · 기본 단가 | 기초단가 · 기초대가 · 기초자원 · 적용단가 · 단가대비표 | Constant · Default value · Bare cost · Simple resource · Rate | (단가는 마스터에서 자동) | 단가대비표 = 가격 출처 나란히 · 우리 시험 계산의 물가 넷과 같음 | +| 결과값 | 단가 · 합계 · 금액 · 일위대가 단가 | Calculation result · Nett rate · Composite rate · Total | 큰 합계 「1㎡ 만드는 데 … 원」 | — | +| 품 · 작업조 | 품 · 인(예 0.17인/㎡) · 인부 · 공 | Crew · Gang · Labor-hours per unit · Man-hour | 사람 · 「[0.072] 인 일함」 | 「인」 단위 그대로가 실무 말 | +| 생산량 | 작업량 · 시간당 작업량 · 시공량 · 1일 작업량 | Daily Output · Production rate (UM/DY · UM/PH) · Productivity · Applied factor | (결과 식 로직 · 쉬운 길로 못 엶) | — | +| 조회 | 표 · 품셈 표 · 적용 기준 · 조건(횡단경사 등) | Item table(1 · 2D) · Lookup · Table · Codebook · XGETRATE | 「표 보고 고르기」(2단계) | — | +| 할증 · 덧붙임 | 할증 · 재료할증(벽돌 5% 등) · 공구손료(노무비 3%) · 잡재료(2%) · 제경비율 | Factor · Applied factor · Waste % · Markup · O&P · Location factor | 덧붙임(%) | 국내 서식은 공구손료 · 잡재료를 % 행으로 둠 = 덧붙임 카드와 같은 꼴 | +| 산출근거 | 산출근거 · 단가산출서 · 수량산출서 · 「별도」 표기 · 정오표 | Notes · Basis · Rate build-up · Analytical worksheet · Event log · Last changed by/on | 원문 표(제안서 첫 칸) · 실무 일위대가표로 보기 | 근거 = 품셈 원문 번호 + 표 | +| 판(개정) | 20XX년도 적용 품셈 · 상 · 하반기 노임 · 표준일위대가 개정 · 품셈 정오표 | Release · Update · Price update · Library version · Location | (없음 — 후보) | 화면 머리에 「적용 품셈 · 단가 때」 한 줄 후보 | +| 사본 / 원본 | 표준일위대가 ↔ 내현장 일위대가 · 「품목구분」 바꿔야 고침(XCOST) | Database vs One-time(Sage) · Carbon copy(B2W) · Linked rate(CostX) · Master / Standard / Local table(InEight) | 품셈 기본 · 내가 만든 것 · 「이걸 바탕으로 고치기」 | XCOST 의 「잠긴 자재 → 품목구분 바꿈」은 우리 지금 화면의 「본떠 만들기」와 같은 숨은 규칙 — 피할 것 | + +## 4. 걱정 — 남들이 겪은 것 + +- 국내 프로그램은 DB 를 받아 고치는 꼴이라 품셈 식 자체를 고치는 화면이 드묾 — 「코딩 없이 품셈 원문 보며 로직 만들기」는 남이 안 한 영역 · 따라 할 견본이 적음. +- 숨은 기호 · 단축키(Sage 한 글자 계산 기호 · EG [≡2] · Ctrl+I · Candy `#` 문법)는 다 「배우기 어렵다」로 이어짐. +- 사본 방식(B2W · HeavyBid)은 원본 개정과 멀어짐 · 연결 방식(CostX)은 한 곳 고치면 어디까지 퍼지는지 모름 — 어느 쪽이든 규칙을 화면에 적어야 함. +- 단가 일괄 인상 · 인하(SGS) · +x% −x% 함정(Sage) — 숫자를 한꺼번에 바꾸는 단추는 위험. +- 작업조 · 틀이 늘어나면 고르기가 어려워짐(HeavyBid 12 → 3 권고) — 처음 고르기 목록은 짧게. diff --git a/docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md b/docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md new file mode 100644 index 000000000..4d658fab8 --- /dev/null +++ b/docs/raw/M01_쉬운단가/로직판_조사_B_노코드도구.md @@ -0,0 +1,95 @@ +# 로직판 조사 B — 코딩 모르는 사람이 계산 규칙을 만드는 도구 (35-0 · sub8 · 10-01) + +조사만 · 코드 · git · docs 안 고침. 세 갈래 24개 도구를 공식 문서 · 교육 자료 · 비평으로 봄(인터넷 조사 창 셋 · 주소는 조사 창이 열어 본 것만). 비교 기준 = 브레인 제안서 「세 칸 판(원문 표 · 만드는 줄 · 결과) + 물음 여섯」. + +## 0. 한눈에 — 우리 판에 가져올 것 열 + +| # | 가져올 것 | 본보기 | 우리 판 자리 | +|---|---|---|---| +| 1 | **표 찾기 = 카드 한 장**(표 · 맞출 칸 · 꺼낼 칸 · 못 찾을 때) — 선 잇기 없음 | Zapier Lookup Table(Fallback 값) · Unreal Get Data Table Row(Row Found / Row Not Found) · CPQ 조회 질의(시험할 칸 ↔ 표 칸 → 가져올 칸) | 가운데 ② 「표에서 꺼냄」 | +| 2 | **맞는 줄 0개 · 2개 이상을 늘 검사해 보임** | CPQ(2줄 이상이면 계산 실패) · Airtable(목록 결과) · Workday(맞는 구간 없으면 빈 값) | ② 카드 아래 한 줄 · 저장 전 검사 | +| 3 | **조건은 줄 목록 — 위에서부터 처음 맞는 줄 · 맨 끝 「그 밖」** · 식 대신 고르기 | Glide 만약→그러면→아니면 칸 · Workday 표현식 평가(기본값) · Make Router(fallback 갈래) | ③ 「셈」의 「만약 ~면」 문장 틀 | +| 4 | **범위는 말로 고름(이상 · 미만 · 초과 · 이하) · 빈칸 = 「상관없음」** | DMN 빈칸 `-` · Trisotech 괄호(열림/닫힘이 초보 함정) · Workday 범위 구간 | 왼쪽 표 머리 · ③ 문장 칩 | +| 5 | **겹침 규칙은 고르게 하지 않음** — 「한 줄만 맞아야 함」 하나 · 할증처럼 여러 줄 더하기만 「모두 더함」 | DMN 적중 정책(U · F · C+) — First 는 따지기 어렵다고 Camunda 문서가 경고 | 엔진 규칙 그대로 · 화면엔 안 보임 | +| 6 | **빈틈 · 겹침 자동 검사 단추** — 설계 때 고르는 값의 조합 가운데 표에 줄 없는 것 · 둘 걸리는 것 | Trisotech Method & Style 분석 · Drools 정적 분석(빈틈 · 겹침 · 가려진 줄) | 원문 대조 진행표 · 저장 전 | +| 7 | **견본 값 고정 + 고칠 때마다 즉시 결과 + 한 단계씩 값** | Notion 실시간 미리 보기 · n8n 데이터 고정(pin) · Excel 「수식 계산」(한 단계씩) · Guidewire 요율 워크시트(어느 표 어느 줄 → 얼마) | 가운데 칸 ①~⑤ 칸마다 값 · 오른쪽 결과 | +| 8 | **기대값 시험표** — 넣은 값 → 원문 기대 → 실제 → 통과/실패 · 한 번 누르면 전부 다시 | Oracle Intelligent Advisor 시험 문서(PASS/FAIL) · Drools 시험 시나리오 | 「많은 수를 확인하는 길」 진행표 | +| 9 | **이름 붙인 결과를 다음 로직이 받음 · 정의 순서 · 물고 도는 것은 화면이 막음** | Excel 이름 정의 · Coda 이름 붙인 수식 · ConvertCalculator 변수(뒤에 정의된 것 부르면 오류) | ⑤ 「다음 로직이 부르는 이름」 | +| 10 | **저장마다 판 + 전후 비교 · 적용 시점 있는 값** | Camunda 버전 「Show changes」 · Make 저장마다 판(60일) · Guidewire 요율집 적용일 · 시프티 시급 적용 시점 | 품셈 개정판 · 되돌리기 | + +피할 것 — 선 잇는 흐름 그림(스파게티 · 9-21 지운 흐름 그림과 같은 벽) · 「고급 보기」로 식이 다시 나오는 길(Power Automate · n8n · Node-RED) · IF 겹치기 · 삼항(`? :`) · 적중 정책 고르기 · 이름 없는 변수(Unity A · B · ConvertCalculator QA · VA). + +## 1. 규칙 · 결정 표 + +| 도구 | 조회(표) 연결 | 조건 | 변수 · 입력 정의 | 초보가 막히는 곳 | 검증 | 되돌리기 · 이력 | 우리 판에 가져올 것 | 사진 · 설명 주소 | +|---|---|---|---|---|---|---|---|---| +| Camunda DMN | 표 하나 = 입력 칸 + 출력 칸 + 규칙 줄 · 왼쪽 위 적중 정책 | FEEL `<= 3` · `[3..7.5]` · 빈칸 `-` = 상관없음 | 칸마다 입력식 · 형식 | 적중 정책 고르기(First 는 문서가 경고) · FEEL 괄호 | Play 모드 — 값 넣고 바로 실행 | 버전 스냅숏 · 「Show changes」 비교 | 「모두 더함(C+)」 = 할증 합 | 사진 docs.camunda.io/assets/images/dish-table-8fddefbddf97d60eb60d5ff7fbacebe8.png · https://docs.camunda.io/docs/components/modeler/dmn/decision-table/ | +| Trisotech DMN | 이중선 왼쪽 입력 · 오른쪽 출력 | `(620..660)` · `[75..80]` · `< 620` | 형식에 허용 범위 | 열림 · 닫힘 괄호 · U 표인데 줄 겹침 | 분석 한 번에 빈틈 · 겹침 · 합칠 줄 · 시험 사례 | 못 찾음 | **빈틈 · 겹침 검사 단추** | 사진 methodandstyle.com/blog/dmn-101/loan-prequal-table-600x765.png · https://www.trisotech.com/dmn-101/ · https://www.trisotech.com/dmn-hit-policy-explained/ | +| Drools / Kogito DMN | DMN 표 · 머리 「Manage」 로 값 목록 | FEEL · 열거 · 범위 제약 | 형식에 열거 · 범위 | 다 만들기 전까지 빨간 오류가 계속 뜸 | 정적 분석(빈틈 · 겹침 · 가려진 줄) · 시험 시나리오 기대 대 실제 | 못 찾음 | 「가려진 줄」 경고 | https://docs.drools.org/8.38.0.Final/drools-docs/docs-website/drools/DMN/index.html | +| Oracle Intelligent Advisor | 엑셀 안 규칙표 · 칸 서식으로 조건 / 결론 구분 | `>3` · between · `else` | 속성마다 자료형 먼저 | 선언 안 한 속성은 못 씀 | 엑셀 시험 문서 — 기대 칸 · Run · PASS/FAIL | 못 찾음 | **기대값 + 통과/실패 시험표** | https://docs.oracle.com/en/cloud/saas/intelligent-advisor/using-policy-modeling/Content/Guides/Use_Intelligent_Advisor/Use_Policy_Modeling/Work_with_rules/Write_rules_in_Excel/Create_a_rule_table_in_Excel.htm | +| Guidewire Rating | 요율표(매개변수 칸 → 요율계수) · 요율 루틴이 조회 · 사칙을 단계로 이음 | 일치 · 범위 · 할증 최소 · 최대 % | 매개변수 묶음 | 루틴이 길어져 따라가기 어려움 | **요율 워크시트 — 계산 단계를 하나하나** | 요율집 초안 → 승인 → 적용 · 적용일 | **계산 과정 단계표** | https://docs.guidewire.com/cloud/apd/laslenas/create/topics/c_rate-modifiers.html | +| Salesforce CPQ 가격 규칙 | 조회 질의 = 시험할 칸 + 연산자 + 조회표 칸 → 넣을 칸 | 조건 줄(칸 · 연산자 · 값 고르기) · 모두 / 하나라도 / 직접 조합 | 사용자 정의 개체 = 조회표 | **2줄 이상 걸리면 실패** · 수식 문법 검사 없음 | 따로 없음 | 못 찾음 | 조합 중복 금지 · 「찾을 칸 ↔ 표 칸」 짝 줄 | 사진 res.cloudinary.com/hy4kyit2a/f_auto/fl_lossy/q_70/learn/modules/price-rules-in-salesforce-cpq/formulate-your-conditions-and-actions/images/a11a3fc5b6676b9a81c5e40c9553a668_kix.21xradbunzew.png · https://trailhead.salesforce.com/content/learn/modules/price-rules-in-salesforce-cpq/formulate-your-conditions-and-actions | +| Workday 계산 필드 | 범위 구간 조회(시작 ~ 끝 · 없으면 빈 값) | 표현식 평가 — 위에서 처음 참 · 기본값 | 결과 형식 먼저 · 칸마다 드롭다운 | 조건 순서가 결과를 바꿈 · 함수 종류 혼동 | 못 찾음 | 못 찾음 | **식 대신 고르기 칸 + 기본값 칸** | https://doc.workday.com/admin-guide/en-us/manage-workday/tenant-configuration/calculated-fields/calculated-field-functions/dan1370796323223.html | +| 시프티 실급여정산(한국어) | 근로정보(시급)로 수당 자동 | 고정 항목(연장 · 야간 · 휴일 · 주휴) | 시급마다 적용 시점 | 못 찾음 | **수식이 남는 엑셀로 내보내 사람이 검산** | 적용 시점별 이력 | 적용 시점 있는 값 · 검산 내보내기 | https://shiftee.io/ko/help/article/payroll | + +덕크릭(Duck Creek)은 공개 문서가 모자라 뺌. + +## 2. 노코드 수식 · 계산기 · 견적 규칙 + +| 도구 | 조회(표) 연결 | 조건 | 변수 · 입력 정의 | 초보가 막히는 곳 | 검증 | 되돌리기 · 이력 | 우리 판에 가져올 것 | 사진 · 설명 주소 | +|---|---|---|---|---|---|---|---|---| +| Excel(한국어판) | XLOOKUP(찾을 값 · 찾을 범위 · 돌려줄 범위 · 찾을 수 없음) · 조건 둘이면 겹침 | IF 겹치기 | 이름 정의 · 이름 관리자 · LAMBDA · 데이터 유효성 검사(고르기 목록) | IF 겹치기 · 순환 참조 · #CALC! | **수식 계산 — 밑줄 친 곳을 한 단계씩** · 조사식 창 | 실행 취소 · 파일 버전 기록 | **한 단계씩 계산 보기** | https://support.microsoft.com/ko-kr/excel/detect-formula-errors-in-excel · https://support.microsoft.com/ko-kr/office/xlookup-함수-b7fd680e-6d10-43e6-84f9-88eae8bf5929 · https://support.microsoft.com/en-us/office/lambda-function-bd212d27-1cd1-4321-a34a-ccbf254b8b67 | +| Airtable | 연결 레코드 → 조회 칸에서 가져올 칸 고름 · 조건 거름 | IF 수식 | `{칸 이름}` | 결과가 목록이라 바로 못 셈 · 연결 안 돼 빈칸 · 종류 불일치 #ERROR | 색 · 괄호 짝 표시 | 레코드 값 기록만 · 수식 설정 기록 없음 | 0건 · 여러 건 경고 | https://support.airtable.com/docs/formula-field-overview · https://support.airtable.com/docs/lookup-field-overview | +| Notion(한국어판) | 관계형 · 롤업 | if · ifs · 삼항 | 속성 · let()(중간값) | 「종류 불일치」 · 빈 값 처리 | **편집하며 그 행 결과 즉시 · 오류 자리 표시** | 못 찾음 | 견본 행 결과 즉시 | https://www.notion.com/help/formulas · https://www.notion.com/ko/help/formula-syntax · https://www.notion.com/help/common-formula-errors | +| Coda | 관계 칸(옛 이름 조회 칸) · Filter() | If · Filter | 이름 붙인 수식을 변수처럼 | Filter 이어 쓰기 문법 | 못 찾음 | 문서 기록은 복사만 · 복원은 지원 요청 | **결과에 이름 붙여 넘기기** | https://help.coda.io/formulas/using-lookups | +| Glide | 관계 칸(짝 칸) → 조회 칸(가져올 칸) | **만약 → 그러면 → 아니면 줄 목록 · 처음 맞는 줄** | 계산 칸에 「price + shipping」 처럼 말로 쓰고 낱말마다 실제 칸 짝 | 줄 차례 실수 · 조건 칸 안에서는 셈 못 함 | 못 찾음 | 못 찾음 | **조건 줄 쌓기 + 「말로 쓴 식 + 낱말 짝」** | https://www.glideapps.com/docs/automation/computed-columns/if-then-else-column · https://www.glideapps.com/docs/automation/computed-columns/math-column · https://www.glideapps.com/docs/automation/computed-columns/lookup-column | +| ConvertCalculator | 데이터시트(작은 표) · FINDIFS(값 칸, 조건 칸1, 입력1, …) 정확히 맞는 첫 줄 | IF · IFS | 질문 QA · 변수 VA | 정의 차례(뒤 것 부르면 오류) · 줄 번호 0부터 | 결과 미리 보기 · 오류 표시 | 못 찾음 | **여러 조건으로 표 한 줄** — 뒷길이 × 돌 × 쌓기와 같은 꼴 | https://www.convertcalculator.com/help/building/datasheets/ · https://www.convertcalculator.com/help/building/variables/ | +| Outgrow | 못 찾음 | 삼항 `Q1<4.5 ? 50 : 90` 겹침 | 질문 끌어 놓으면 Q1 · Q2 | 괄호 겹치기 | 못 찾음 | 못 찾음 | 끌어 놓기 입력 · 삼항은 피함 | https://support.outgrow.co/docs/create-calculator-using-conditional-logic | +| Salesforce CPQ 조회 질의 | 조회 개체 + 조회 질의(시험할 칸 · 비교 · 조회 칸) → 가져올 칸 | 가격 조건 줄(기준 종류 = 값 · 변수 · 수식) | 견적 칸 · 요약 변수 | 2줄 이상이면 실패 · 문법 검사 단추 없음 | 임시 수식 칸으로 우회 | 못 찾음 | **「찾을 칸 ↔ 표 칸」 짝 + 「정확히 1줄」 검사** | https://trailhead.salesforce.com/content/learn/modules/price-rules-in-salesforce-cpq/consolidate-price-rules-by-using-lookup-queries · 사진 res.cloudinary.com/hy4kyit2a/f_auto/fl_lossy/q_70/learn/modules/price-rules-in-salesforce-cpq/consolidate-price-rules-by-using-lookup-queries/images/84164c812826823c1b9e557360507574_kix.uodfoac0wvp9.png | + +## 3. 블록 · 흐름(끼우기 · 잇기) + +| 도구 | 조회(표) 연결 | 조건 | 변수 · 입력 정의 | 초보가 막히는 곳 | 검증 | 되돌리기 · 이력 | 우리 판에 가져올 것 | 사진 · 설명 주소 | +|---|---|---|---|---|---|---|---|---| +| Scratch(한국어) | 표 없음 · 리스트 항목뿐 | 「만약 ~라면」 블록 빈칸에 참 · 거짓 끼움 | 「변수 만들기」 → 「~로 정하기」 | 블록이 늘면 큰 식 · 복합 조건이 번거로움 | 블록 누르면 바로 실행 | 못 찾음 | 빈칸에 끼우는 모양 = 조건 칸 생김새 | https://test.scratch-wiki.info/wiki/Kor:변수 | +| Blockly | lists 블록(표 조회 없음) | if / else 블록 | 변수 get / set · 기본은 형식 없음 | 식 · 복합 조건이 길어짐 | 만든 쪽 몫 | 만든 쪽 몫 | **그림자 블록 — 칸에 기본값이 들어 있고 숫자를 바로 침** | https://docs.blockly.com/guides/configure/toolboxes/preset/ | +| Node-RED | Change 노드(JSONata) · Function(JS) | Switch 노드 규칙 · otherwise | msg 속성 · Inject | 조금만 복잡해도 JSONata · JS 로 넘어감 | Debug 노드 → 옆 패널 · Inject 단추 | 편집기 닫으면 실행 취소 사라짐 | 칸마다 값이 바로 보이게 | https://nodered.org/docs/user-guide/nodes · 사진 nodered.org/docs/user-guide/images/node_switch.png | +| n8n | Merge 「맞는 칸으로 합치기」 | IF · Switch(규칙 / 식 · Fallback 출구) | 칸마다 고정 / 식 전환 · `{{ $json.x }}` | 식은 결국 JS 조각 · 형식 다르면 소리 없이 빠짐 | **Test step · 데이터 고정(pin) · 지난 실행 불러오기** | 실행 기록 · 버전 기록 따로 | **견본 입력 고정 · 고칠 때마다 다시 셈** | https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch | +| Zapier | **Formatter 「Lookup Table」 — 왼쪽 키 · 오른쪽 값 · Fallback 값** | Paths(and / or · 왼쪽부터) · Filter | 앞 단계 출력 칸 고름 | 완전 일치 · 대소문자 — 안 맞으면 Fallback | Test step | 판 되돌리기(유료만) | **못 찾았을 때 쓸 값 칸** | https://help.zapier.com/hc/en-us/articles/8496305146765 · 사진 cdn.zapier.com/hc/article_attachments/31169646468749 | +| Make | 못 찾음 | Router + 갈래 Filter · 위 → 아래 · fallback 갈래 | 앞 모듈 결과 끌어 잇기 | 갈래 차례 · 겹친 조건 | Run once · 지난 실행 다시 | **저장마다 판 · 60일 · 저장 안 한 것도 복구** | 조건 갈래 차례 + 「그 밖」 | https://help.make.com/router · https://help.make.com/restore-a-previous-scenario-version | +| Power Automate | 표 조회 블록 없음 | Condition 카드(줄 · and / or) → 「Edit in advanced mode」 | 번개 아이콘 동적 값 | 조금만 복잡해도 `@and(equals(…))` 식이 다시 나옴 | Test → 실행 결과 | 못 찾음 | 쉬운 화면 조건을 글로 보여 주되 글로 고치게는 안 함 | https://learn.microsoft.com/en-us/power-automate/use-expressions-in-conditions | +| Unreal Blueprints(한국어 문서 있음) | **Get Data Table Row — 표 · 줄 이름 → Row Found / Row Not Found 두 출구** | Branch(분기) | 변수 · 입력 / 출력 핀 · 핀 기본값 | **「말 그대로 스파게티」 · 몇 줄 식이 노드 30~40개 · 정리가 따로 배울 기술** | 중단점 · 한 단계 실행 · 값 지켜보기 | Ctrl+Z · 판은 바깥 도구 | **Math Expression — 식을 글로 치면 핀이 저절로** | https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Utilities/GetDataTableRow · 사진 d1iv7db44yhgxn.cloudfront.net/documentation/images/f44ed18c-0c2e-4aea-8c18-815b5850e7ee/mathnodeexample.png | +| Unity Visual Scripting | — | If · Formula | Formula 인수 A · B …(최대 10) | 인수 이름이 A · B 라 뜻 모름 | 실행 중 포트 값 | 편집기 실행 취소 | 식 한 칸 + 입력 칸 목록 · 이름은 뜻 있는 말로 | https://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/manual/vs-formula.html | + +블록 · 흐름 방식이 수식 · 규칙 정의에 쓰일 때 + +- 좋음 — 문법 오류가 안 생김(끼워지는 칸만 끼워짐) · 갈래와 「못 찾음」 출구가 눈에 보여 빠뜨리기 어려움 · 칸마다 중간값 보이기 좋음. +- 나쁨 — 산술식은 블록 · 노드로 만들면 폭발적으로 늘어남(Unreal · Unity 도 결국 「식 한 칸」 노드를 둠) · 선 정리가 또 하나의 일(스파게티 · 스크롤 · 검색 어려움) · 복잡해지면 식(JSONata · `{{ }}` · `@and(…)`)이 다시 나오고 초보는 거기서 막힘. +- 우리 판 뜻 — 흐름 그림은 「어느 결과가 어느 줄로 가나」 정도의 읽기만 · 만들기는 카드 + 문장 칩. + +## 4. 낱말 대조 + +| 도구 | 입력 | 고정값 | 결과 | 조회 | 조건 | +|---|---|---|---|---|---| +| DMN(Camunda · Trisotech · Drools) | Input / Input Data | Literal(상수 칸 따로 없음) | Output | Decision Table + Hit Policy | Input Entry(unary test) | +| Oracle IA | Base attribute | Value | Conclusion | Rule table | Condition | +| Guidewire | Parameter | Factor(요율계수) | Rate / Premium | Rate table | Match(일치 · 범위) | +| Salesforce CPQ | Tested field | Value | Target field | Lookup query / object | Price condition | +| Workday | Source field | Default value | Return value | Lookup Range Band | Condition | +| 시프티(한국어) | 근로정보 · 시급 | 시급(적용 시점) | 실급여정산 | — | — | +| Excel(한국어) | 셀 · 이름 상자 · 데이터 유효성 검사 | 상수 · 이름 정의 | 수식 결과 | XLOOKUP(찾을 값 · 찾을 범위 · 돌려줄 범위) | IF | +| Notion(한국어) | 속성 | 값 | 수식 | 관계형 · 롤업 | if · ifs | +| Glide | 칸 · 사용자 정보 | 짝지은 값 | 계산 칸 | 관계 → 조회 | 만약 · 그러면 · 아니면 | +| ConvertCalculator | 질문(QA) | 변수(VA) | 수식 | 데이터시트 · FINDIFS | IF · IFS | +| Scratch(한국어) | 변수(「변수 만들기」) | 칸에 바로 쓴 숫자 | 값 블록 | 리스트 항목 | 만약 ~라면 / 아니면 | +| Zapier | Lookup Key | Value | step output | Lookup Table | Paths · Filter / Fallback value | +| n8n | input item | Fixed | output | Merge(맞는 칸) | IF · Switch / Fallback | +| Unreal(한국어) | 변수 · 입력 핀 | 기본값 · Literal | 출력 핀 · Return Value | Get Data Table Row | Branch(분기) | + +우리 판 낱말 후보(브레인 · 사용자 결정 몫) — 입력 = **설계 때 고름** · 고정값 = **늘 이 값** · 결과 = **꺼낼 값**(표) / **결과**(로직) · 조회 = **표에서 찾기** · 조건 = **만약 ~면 / 그 밖** · 빈 조건 = **상관없음** · 못 찾음 = **맞는 줄 없음** · 여러 줄 = **두 줄이 걸림**. 제안서 낱말(받는 값 · 표에서 꺼냄 · 셈 · 줄로 보냄)과 겹치지 않게 하나로 맞출 것. + +## 5. 제안서(세 칸 판)에 비춰 본 것 + +- 맞음 — 표를 왼쪽에 그대로 두고 머리 칸에 역할(설계 때 고름 / 꺼낼 값)을 색으로 붙임 = OPA 칸 서식 · DMN 입력 / 출력 칸과 같은 생각. 식 대신 칩 고르기 = Workday · Glide 와 같은 길. +- 더할 것 — ② 카드에 「맞는 줄 없음 / 두 줄이 걸림」 줄(0 · 1 · 2+ 검사) · ③ 조건을 「위에서 처음 맞는 줄 + 그 밖」 목록으로 · 「빈틈 검사」 단추(설계 때 고르는 값 조합 가운데 표에 없는 것) · 기대값 시험표(원문 숫자 → 실제 → 통과 / 실패) · 가운데 칸 단계마다 값(계산 과정 단계표). +- 조심할 것 — 할증 · 나누기 같은 산술을 블록으로 쪼개지 않음(한 문장 틀 + 숫자 칩) · 「고급」 으로 식을 다시 꺼내는 길을 두지 않음 · 판 · 전후 비교 · 적용 시점(품셈 연도판)은 처음부터 자리를 잡음(도구 대부분이 설정 이력이 약해 뒤에 붙이기 어려움). diff --git a/docs/raw/M01_쉬운단가/설계.md b/docs/raw/M01_쉬운단가/설계.md new file mode 100644 index 000000000..dbb59d778 --- /dev/null +++ b/docs/raw/M01_쉬운단가/설계.md @@ -0,0 +1,98 @@ +# 쉬운 단가산출 설계 (PLAN 34-2 · 브레인 정함 · 10-01) + +근거 = 같은 폴더 `쉬운단가_검토_A_데이터.md`(형식 · API · 쓰임 세기) · `_C_갈래.md`(실무 모양 · 갈래 다섯) · `_D_지난시도.md`(지난 시도 열넷 · 원인 다섯). 사용자가 바꿀 수 있음. + +## 1. 정함 + +1. 갈래 = **문장 카드**(C 문서 B) — 줄 하나 = 문장 하나 「【사람】 석공 이 [0.072] 인 일함 = 18,643 원」. 입구 = 비슷한 것 찾기(E) · 줄 추가 = 물음 셋(무엇 → 어떤 것 → 얼마) · 아래 접힌 「실무 일위대가표로 보기」(읽기만). +2. 카드는 묶음 + 소계 — 사람 · 재료 · 기계·경비 · 다른 일위대가 · 그 아래 덧붙임(%) · 맨 위 큰 합계 「1㎡ 만드는 데 53,788 원」. +3. 품셈 기본 로직(정본)은 읽기만 — 큰 단추 하나 「이걸 바탕으로 고치기」 = `/logic/copy` 뒤 바로 그 복사본을 고치는 화면(사용자 확정 09-21 「정본 못 고침」을 의식하지 않게). +4. 쓰기 길 = `/logic/new` · `/logic/copy` · `/logic/edit` · `/logic/delete` 만. **`/save` 안 씀**(정본을 가리지 않음). +5. 금액 = 고칠 때마다 서버 `/calc` 를 뒤에서(입력 멈춘 뒤 0.3초 · 최신 응답만) · 기다리는 동안 옛 금액을 흐리게 — 계산 자리 ③ 서버 단독(엔진 한 벌). +6. 1단계 범위 = 사람 · 재료 · 기계 · 다른 일위대가 · 덧붙임(%) 카드의 **숫자 수량** 추가 · 고치기 · 지우기 · 차례 바꾸기. 식 수량 · 표 찾기 · 조건 · 그 밖 덧줄 = **잠금 카드**(쉬운 말 한 줄 + 값 + 「숫자로 바꾸기」 확인 한 번). 설계 값 = 위 띠 「설계 때 정하는 값」(시험값만 바꿔 금액 봄 · 새로 만들기는 지금 화면). 결과 식 로직(작업량 27개)은 목록에 「쉬운 길로 못 엶」. +7. 2단계 = 「표 보고 고르기」(잠금 카드의 표를 그림으로 보여 칸을 눌러 고름) → 그다음 조건 카드. +8. 낱말 — 화면에 **키 · 식 · 호표 · 덧줄 · 비목 · 중간 값 · 끝수 · 정본 · 자체 · 별칭** 안 씀. 쓰는 말: 사람 · 재료 · 기계 · 다른 일위대가 · 덧붙임 · 사람 품값(노무비) · 재료값(재료비) · 기계·경비(경비) · 품셈 기본 · 내가 만든 것 · 설계 때 정하는 값 · 크기(규격). +9. 덧붙임 카드의 넣을 자리 기본 = 마스터에서 같은 이름 덧줄이 가장 많이 쓴 비목 · 카드 안 고르기로 바꿈. +10. 되돌리기 늘 보임(Ctrl+Z) · 줄 지우기는 안 물음 · 로직 지우기만 물음(쓰는 곳 먼저 보임 · 쓰는 곳 있으면 못 지움 까닭 한 줄) · 저장 안 하고 닫으면 물음 · 「저장 안 함」 표시. +11. 잘못 넣음은 그 카드 안 한 줄 — 숫자 아님 · 0 · 음수 · 빈 이름 · 같은 이름(내가 만든 것 안) · 너무 큼(단위별 어림 기준 하나 — 사람 1단위에 10인 넘음 등 · 물음 꼴 경고만). +12. 지금 화면 · `LogicLab_*` 파일은 안 고침 — 부르는 것은 덜 바뀌는 `Logic_Api` · `Api_Fetch` · `Logic_Money` · `Logic_Text` · `ui_template` 만. + +## 2. 파일 · 맡은 창 (모두 `M01_MasterData/EasyCalc/` · 파일마다 700줄 안 · 글 [한, 영] 짝은 각 파일 머리 · css 는 파일마다 따로) + +| 파일 | 맡음 | 하는 일 | +| --- | --- | --- | +| `M01_EasyCalc_Model.ts` | sub7 | 로직 줄 ↔ 카드 바꾸기 · 카드 더하기 · 고치기 · 지우기 · 차례 · 검사(쉬운 말) · 되돌리기 기록 · 저장 안 함 표시 — DOM 없음 | +| `M01_EasyCalc_Api.ts` | sub4 | 서버 길 감싸기(목록 · 찾기 · 열기 + 자동값 · 시험 계산 뒤에서 · 새로 · 본뜨기 · 고치기 · 지우기 · 쓰는 곳) · 403 · 409 · 422 를 쉬운 말로 · 기계 기종 → 부를 기계경비 로직 · 넘길 값 | +| `M01_EasyCalc_Entry.ts` + `_Style.css` | sub1 | 큰 창 틀 · 시작 화면(무엇과 비슷한가요? 찾기 · 내가 만든 것 · 빈 종이로 새로) · 위 띠(이름 · 크기 · 단위 · 큰 합계 · 되돌리기 · 저장 · 지우기 · 닫기) · 화면 사이 오감 · 모든 파일 잇기(마지막에 붙이는 창) | +| `M01_EasyCalc_Cards.ts` + `.css` | sub2 | 카드 그리기 · 세 묶음 + 소계 · 문장 칸 · 잠금 카드 · 지움 · ▲▼ · 카드 안 경고 · [+ 사람] [+ 재료] [+ 기계] [+ 다른 일위대가] [+ 덧붙임] | +| `M01_EasyCalc_Pick.ts` + `.css` | sub3 | 물음 셋 고르기 창(무엇 → 어떤 것 찾기 · 목록 → 얼마) | +| `M01_EasyCalc_Sheet.ts` + `.css` | sub5 | 실무 일위대가표 보기(읽기) · 설계 때 정하는 값 띠 | +| `M01_EasyCalc_Table.ts` + `.css` | sub8 | 2단계 표 보고 고르기 | + +## 3. 서로 맞출 모양 (이 이름 · 칸 그대로) + +```ts +// Model (sub7) +export type CardKind = "person" | "material" | "machine" | "logic" | "percent" | "locked"; +export type CostKind = "노무비" | "재료비" | "경비"; +export interface EasyCard { + id: string; // 화면 번호 · 저장 안 함 + kind: CardKind; + name: string; // 보이는 이름(호표 · 덧줄 이름) + spec: string; // 크기(규격) · 없으면 "" + unit: string; // 인 · ㎥ · 시간 · % … + qty: number | null; // 숫자 수량 · 식이면 null + qtyFormula: string | null; // 잠금 식(원문 그대로) · 숫자면 null + cost: CostKind | null; // 넣을 자리 · 다른 일위대가 · 기계는 null(엔진이 나눔) + percentBase: CostKind | "사람줄합" | null; // 덧붙임 바탕 · 덧붙임 아니면 null + element: unknown; // 호표 「요소」 칸 값 그대로(인력 LB 키 · 재료 검색어 묶음 · 로직 부름 글) + lockedWhy: string | null; // 잠금 까닭 쉬운 말 · 아니면 null + source: { part: "호표" | "덧줄"; index: number } | null; // 원래 자리 · 새 카드 null + raw: unknown; // 원래 줄 통째 — 카드가 안 다룬 칸을 저장 때 그대로 살림 +} +export interface EasyDoc { + key: string | null; // 새 로직 null + version: string | null; // 판본(409 대조) + isBase: boolean; // 품셈 기본 = 읽기만 + name: string; spec: string; resultUnit: string; // 결과단위 「원/㎡」 + inputs: LogicInput[]; // 설계 때 정하는 값 + cards: EasyCard[]; + row: LogicRow; // 원래 로직 줄(새 로직은 최소 칸 줄) +} +toDoc(row, meta: { key; version; isBase }): EasyDoc +toRow(doc): LogicRow // 카드 → 호표 · 덧줄 · 필요한 입력(기계 「지역」 등) · 안 다룬 칸 보존 +addCard(doc, pick: PickResult): EasyDoc · updateCard(doc, id, patch) · removeCard(doc, id) · moveCard(doc, id, -1|1) +checkCard(card, doc): string | null // 쉬운 말 경고 한 줄 +class EasyHistory { push(doc); undo(): EasyDoc | null; canUndo; dirty; markSaved() } +export interface PickResult // Model 에 둠 · Pick 이 가져다 씀 + +// Pick (sub3) +// PickResult { kind: "person" | "material" | "machine" | "logic"; name: string; spec: string; unit: string; element: unknown; qty: number | null; needInputs?: LogicInput[] } +openEasyPick(kind?: PickResult["kind"]): Promise + +// Api (sub4) — CalcAnswer · LogicRow · LogicInput 은 Logic_Api 것 그대로 +listEasy(q: string): Promise // 이름 · 품셈 기본/내가 만든 것 · 결과단위 · 쉬운 길로 못 엶 여부 +openEasy(key): Promise<{ row; version; isBase; trial: Record }> // 자동값 포함 +calcLater(row, trial, onDone: (ans: CalcAnswer | null, plain: string | null) => void): void // 0.3초 · 최신만 +newEasy(row) · copyEasy(key) · editEasy(key, version, row) · deleteEasy(key, version) · usesOf(key) +listMachines(q): Promise<{ 분류번호: string; 이름: string; 규격: string; 단위: string }[]> +machineElement(기종 분류번호): Promise<{ element: string; needInputs: LogicInput[] }> +plainError(e): string // 403 · 409 · 422 · 날식 걸름 + +// Cards (sub2) +renderCards(host, doc, ans: CalcAnswer | null, on: { change(doc): void }): void // 더하기 · 다시 고르기(openEasyPick) · 숫자로 바꾸기 · 지움 · ▲▼ 를 Cards 가 직접 하고 change 로 알림 + +// Sheet (sub5) +renderSheet(host, head: { name: string; resultUnit: string }, ans: CalcAnswer | null): void // 실무 일위대가표(명칭 · 규격 · 수량 · 단위 · 합계 · 노무비 · 재료비 · 경비) +renderTrialStrip(host, inputs, trial, onChange(trial)): void + +// Table (sub8) +openEasyTable(card, doc): Promise // 고른 표 찾기 식(잠금 카드의 새 qtyFormula) · 취소 null +``` + +## 4. 모두 지킬 것 + +- 지금 화면 · `LogicLab_*` · `Logic_Edit` 안 고침 · 폴더 밖 참조는 `LogicLab.ts` 의 두 줄만. +- 시험 · 검증 저장은 자기 폴더 `resources/master_data/로직_자체.json` 에만 · 끝나면 화면 · API 로 지움 · 파일이 남으면 커밋 전에 `tmp/` 로 옮김 — **`resources/master_data/` 를 커밋에 넣지 않음**. +- 마스터 정본 파일 · 표 · 요소 안 고침 · 시험은 진짜 마스터 내용에 기대지 않음(견본 줄을 시험 안에 둠). +- 걸음 재기 — 대표 일 여섯(① 새 로직 ② 줄 추가 ③ 수량 ④ 단가 자료 ⑤ 줄 지우기 ⑥ 로직 지우기 · 되돌리기) · 목표 여섯 합 36 안쪽. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md new file mode 100644 index 000000000..5b3251996 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_A_데이터.md @@ -0,0 +1,251 @@ +# 쉬운 단가산출 검토 A — 데이터 · 계산 지도 (34-1 · sub4) + +조사만 · 파일 안 고침 · 저장·지우기 API 안 부름. 세기는 `resources/master_data/로직_*.json` 56 파일 · 로직 1,469 줄(2026-10-01 sub_laptop_4 판). +다시 세기 — `./venv/Scripts/python.exe tmp/쉬운단가_검토_A_세기.py` · `…_단계.py` · 최소 칸 시험 `…_최소칸.py`(메모리만 · 파일 안 씀). + +## 결론 셋 + +1. **형식 · 자리** — 로직 = JSON 한 줄(머리 + 입력 · 중간 · 호표 · 덧줄 · 결과 · 끝수). 층은 마스터 하나뿐(회사 · 개인 층 없음 · 프로젝트는 계산 때 닫힌 사본). 새 길이 쓸 집 = `로직_자체.json`(키 `GX`) — 지금 **0 줄 · 파일도 없음**. 기존 API 만으로 추가 · 고치기 · 지우기 · 시험 계산 · 고르기 후보 다 됨 → **새 API 불필요**. +2. **「인력 · 재료 · 기계 줄 × 수량 × 단가」 만으로 되는 로직 = 1.8 %(26)** · 엄격히(입력 · 중간 · 덧줄 없이 맨 수) 0.1 %(1). 마스터는 **표 찾기가 95 %(1,399)** — 표 찾기를 더하면 29.5 % · 기계(기계경비 로직 부름) 41.2 % · % 덧줄 58.3 % · 조건(만약) 89.7 % · 나머지 10.3 %. +3. **함정 둘** — ① 검사는 통과하는데 계산이 멈추는 꼴(호표 종류 「기계」 + `EQ` 키 → 「Decimal * dict」) · 기계는 반드시 「기계 시간당 경비 로직」 부르기로. ② 지금 화면 [저장](`/save`)은 정본 파일까지 고침 — 새 길은 `/logic/new · edit · delete`(자체만 · 정본 403)로 묶어야 안전. + +--- + +## 1. 저장 형식 · API · 권한 · 층 + +### 1-1. 자리 + +| 무엇 | 자리 | 근거 | +| --- | --- | --- | +| 정본 로직 | `resources/master_data/로직_<원문>_장_<장 제목>.json` 56 파일 · 산림 330 · 건설 1,139 | `_틀.md:22` | +| 자체 로직(새 길) | `resources/master_data/로직_자체.json` 한 파일 · 없으면 서버가 머리만 두고 만듦 | `M01_MasterData_Store_Make.py:18,135` | +| 키 | `_키대장.json` 다음 번호 — 정본 `GF`(산림) · `GC`(건설) · 자체 `GX` · 화면은 키를 안 만듦 | `_틀.md:33,40` · `_화면_계약.md:99` | +| git | `resources/master_data/` 는 git 추적(정크션 아님) · `로직_자체.json` 은 ignore 아님 → 만들면 커밋 대상 | `git check-ignore` 빈 답 | + +파일 머리 `{그룹: "로직", 원문, 차례, 판, 부문?, 줄: [...]}` — 줄 하나가 로직 하나. + +### 1-2. 칸 이름 (로직 한 줄 · 열 차례 그대로) + +| 칸 | 모양 | 줄 수 | 비고 | +| --- | --- | --- | --- | +| 키 | `GF000123` | 1,469 | 서버가 줌 | +| 원문번호 | 절 번호 `13-4-1` · 자체는 빈 글 가능 | 1,469 | 칸은 반드시 | +| 구분 · 상세구분 | 「산림품셈」·「13장 구조물」 · 자체는 서버가 「자체」·장 | 1,469 | 서버가 넣음 | +| 이름 | 글 | 1,469 | 필수 | +| 결과단위 | 「원/㎡」(돈 로직) · 「㎥/시간」(돈 아닌 로직) | 1,469 | `원` 으로 시작하면 돈 | +| 출처 | 「산림품셈 13-4-1」 · 「건설품셈 공통 8-4-1」 · 「자체」 | 1,469 | 모양 검사 | +| 소유 | 「공용」(정본 전부) · 「현장」(자체 기본) | 1,469 | 권한 아님 · 표시 | +| 비고 | 글 | 1,395 | 선택 | +| 입력 | `[{이름, 설명?, 단위?, 고르기? \| 범위?, 출처?, 비고?}]` | 1,469 | 빈 목록 가능 | +| 중간 | `[{이름, 식, 출처?}]` | 1,469 | 빈 목록 가능 | +| 호표 | `[{종류, 요소, 이름, 단위, 수량, 비목?, 출처?, 비고?}]` | 1,442 | 돈 로직 | +| 덧줄 | `[{이름, 식, 비목, 출처}]` | 1,442 | 빈 목록 가능 | +| 결과 | `{식, 출처}` | 27 | 돈 아닌 로직 | +| 끝수 | `null` · 글자(설명만) · 묶음 `{대상, 자리, 방법}` | 1,469 | 마스터는 null 1,432 · 글자 37 · 묶음 0 | +| 시험입력 | `{입력 이름: 값}` | 193 | 일괄 시험 전용 | + +근거 — `_틀.md:166-243`(7장) · `_틀.md:245-258`(8장 식) · `check_master.py:81`(로직 필수 칸). + +### 1-3. 짧은 예시 — 가장 단순한 정본 `GF000208` 암거이음받침 채움재(T=20㎜) + +```json +{ + "키": "GF000208", "원문번호": "12-34-4", "구분": "산림품셈", "상세구분": "12장 철근콘크리트", + "이름": "암거이음받침 채움재(T=20㎜)", "결과단위": "원/㎡", "출처": "산림품셈 12-34-4", "소유": "공용", + "비고": "해석: 원문 재료비 「JOINT FILLER」 뿐 — ㎡당 1㎡ · 설치 품 원문 없음", + "입력": [], "중간": [], + "호표": [{ "종류": "재료", "요소": { "구분": "도료·방수·접착", "상세구분": "방수·실링", "검색어": "JOINT FILLER" }, + "이름": "JOINT FILLER(T=20㎜)", "단위": "㎡", "수량": "1", "비목": "재료비" }], + "덧줄": [], "끝수": null +} +``` + +### 1-4. 불러오기 · 저장 · 지우기 API (`/api/m01`) + +| 일 | 길 | 받음 → 줌 | 근거 | +| --- | --- | --- | --- | +| 목록 | `GET /logics` | `sub · detail · q · blocked · owner` → `{logics: [{file, 키, 이름, 결과단위, 소유, blocked, reasons}]}` | `Router.py:180` · `Store.py:336` | +| 하나 | `GET /logic` | `key` → `{file, version, logic, blocked, reasons, prices}` | `Router.py:187` · `Store.py:376` | +| 견본 입력 | `GET /logic/auto` | `key` → `{값}` | `Router.py:192` | +| 새로 | `POST /logic/new` | `{logic, owner?}` → `{file, version, key, logic}` | `Router.py:240` · `Make.py:207` | +| 본뜨기 | `POST /logic/copy` | `{key, 이름?, owner?}` → 같음(정본도 됨) | `Router.py:245` · `Make.py:215` | +| 고치기 | `POST /logic/edit` | `{key, version, logic}` → `{file, version, logic}` · 정본 403 | `Router.py:250` · `Make.py:225,149` | +| 지우기 | `POST /logic/delete` | `{key, version}` · 정본 403 · 부르는 로직 · 담은 조합 있으면 422 | `Router.py:255` · `Make.py:274` · `_화면_계약.md:113` | +| 식으로 새로 | `POST /logic/draft` | `{text, decided, head?, save?}` | `Router.py:278` | +| 복사해 만들기 | `GET /logic/formula` · `POST /logic/formula/save · preview` | 별칭 꼴 식 | `Router.py:260-273` | +| 파일 묶음 저장 | `POST /save` | `{files: [{file, version, changes: [{op: edit·add·delete, key, row}]}]}` — **소유 막음 없음 · 정본 파일도 고침** | `Router.py:235` · `Store.py:632,665` | +| 이 로직 담은 조합 | `GET /logic/combos` | `key` | `Router.py:285` | + +- 판본 대조 — `version` = 파일 해시 16자 · 다르면 409 `{stale}`(`Store.py:52,667`). +- 검사 — 저장 직전 메모리에서 「고친 뒤 **새로 생긴** 걸림」만 막음(422 `{errors}`) · 하나라도 걸리면 아무것도 안 씀(`Store.py:665-699` · `Store_Cache.py:209`). +- 지금 화면 [저장]은 `/save` 길(`M01_MasterData_UI_LogicLab.ts:319,335`) — 정본도 바로 고침. + +### 1-5. 권한 + +- `/api/m01` 통째 = **시스템 관리자만**(`main.py:639-640` · `system_admin_only`) · 아니면 403. 회사 관리자 · 일반 사용자는 못 들어옴. +- `소유`(공용 · 현장)는 권한이 아니라 표시 · 고치기 막음은 「파일이 `로직_자체.json` 인가」 하나(`Make.py:149`). + +### 1-6. 층 + +| 층 | 로직 있나 | 근거 | +| --- | --- | --- | +| 마스터 | 있음 — 위 56 파일 + 자체 한 파일 | `_틀.md:3` | +| 회사 · 개인 | **없음** — M02 층 양식 종류는 `table · drawing · structure · area · material` 뿐 | `M02_Template_Layers.py:30` | +| 프로젝트 | 로직 원본 없음 · 집계 항목이 일위대가 조합의 로직 + 하위 로직 + 표 + 요소를 **닫힌 사본** `단가.json` 으로 떠서 계산(마스터 현재값 안 읽음) | `M02_Item_Prices.py:1-14,211` | + +→ 새 로직을 프로젝트에서 쓰려면 일위대가 조합(`일위대가조합.json` · `UA`)에 담고, 프로젝트가 사본을 다시 떠야 보임. + +--- + +## 2. 구성 요소 종류 + +지금 화면 낱말 — 「호표 줄 추가 · 설계 값 추가 · 표 찾기 추가 · 덧줄 추가」(`M01_MasterData_UI_Logic_Text.ts:127-130`). + +| # | 종류 | 무엇 | 사용자가 정해야 하는 칸 | 로직 수 | 줄 수 | +| --- | --- | --- | --- | --- | --- | +| 1 | 머리 | 로직 이름표 | 이름 · 결과단위 · 출처(「자체」 가능) · (원문번호 · 비고 · 끝수 선택) | 1,469 | — | +| 2 | 설계 값 · 고르기 | 설계자가 목록에서 고름(돌 종류 · 지역 · 기계) | 이름 · 고르기 목록 · (설명) | 1,090 | 2,603 | +| 3 | 설계 값 · 수 | 설계자가 수를 넣음(면적 · 높이) | 이름 · 단위 · (설명) | 392 | 752 | +| 4 | 설계 값 · 범위 | 수 + 원문 범위 막음 | 이름 · 범위 [아래, 위] | 134 | 153 | +| 5 | 호표 · 인력 | 직종 노임 × 품 | 직종(LB 키) · 수량 · 비목(노무비) · 이름 · 단위(인) | 1,378 | 3,462 | +| 6 | 호표 · 재료(고르기 조건) | 자재품목에서 검색어로 찾은 값 × 수량 | 구분 · 상세구분 · 검색어(· 규격 · 이름) · 수량 · 단위 · 비목(재료비) | 230 | 672 | +| 7 | 호표 · 재료(유가 키 `MO`) | 휘발유 · 경유 등 | 유가 키 · 수량 | — | 51 | +| 8 | 호표 · 기계 | **종류 「로직」** + `로직(GC00026x, 기계='분류번호', 지역=지역 …)` · 비목 칸 없음 → 노무비·재료비·경비로 나눠 얹음 | 기종(분류번호) · 지역(설계 값으로 넘김) · 수량(시간) | 500 | 1,043 | +| 9 | 호표 · 다른 로직 | 하위 로직 결과를 단가로(합판거푸집 · 철근가공 …) | 로직 키 · 넘길 입력 · 수량 | 13 | 32 | +| 10 | 표 찾기 | `찾기(표키, 조건=값…).값칸` — 소요량 · 계수 표에서 품·비율을 꺼냄 | 표 · 조건마다 값(고정 글 또는 설계 값) · 값 칸 | **1,399** | 중간 2,667 · 수량 2,593 · 덧줄 255 | +| 11 | 중간 값 | 「이름 = 식」 — 표 찾기 결과 보관 · 시공량 나누기 · 할증률 | 이름 · 식 | 1,182 | 3,166 | +| 12 | 덧줄 · % 줄 | 호표 밖 금액 — 「공구손료 및 경장비」 389 · 잡재료 · 잡품 · 소모자재 | 이름 · 기준(비목 합 또는 고른 인력 줄) · 비율(수 또는 표 찾기) · 비목 | 555 | 602 | +| 13 | 덧줄 · 그밖 | 기계손료(`EQ.손료계수 × 가격`) · 주재료비 × % · 제잡비 | 이름 · 식 · 비목 | — | 49 | +| 14 | 할증 | `수량 × (1 + 율/100)` — 율은 표 찾기 · 만약 | 율(수 또는 표) · 걸리는 줄 | 153 | 305 식 | +| 15 | 조건 · 만약 | `만약(조건, 참, 거짓)` · 비교 `== <=` | 조건(설계 값 == 값) · 참 값 · 거짓 값 | 537 | 중간 593 · 수량 498 · 덧줄 41 | +| 16 | 끊기 · 최소 · 최대 | 올림 · 버림 · 반올림 · 최소 · 최대 | 대상 · 자리 | 134 | 중간 188 · 결과 26 | +| 17 | 틀 키 `{입력}` | `EQ:{기계}.가격` · `LB:{직종}` · `MO:경유:{지역}` · 재료 조건 `"규격": "{관경}"` | 설계 값 이름 | 91 | — | +| 18 | 다른 로직 부름(식 안) | `로직(GF000114)` — 작업량 등 돈 아닌 로직 | 로직 키 · 넘길 입력 | 40 | 중간 40 · 덧줄 1 | +| 19 | 돈 아닌 결과 식 | 작업량 · 시간당 처리량(다른 로직이 부름) | 결과 식 · 결과단위 | 27 | 27 | +| 20 | 줄 금액 집기 | 덧줄에서 `줄.'호표 줄 이름'` | 줄 이름 | 3 | 4 | +| 21 | 끝수 묶음 | 계 끝 끊기 `{대상: 계, 자리: 0, 방법: 버림}` | 대상 · 자리 · 방법 | 0 | — | +| 22 | 시험입력 | 일괄 시험용 견본 입력 | 입력 이름 · 값 | 193 | — | + +- 비목 = 노무비 · 재료비 · 경비 셋뿐 · 덧줄 식에서 비목 합을 이름(`노무비`)으로 씀. +- 호표 종류 「기계」 줄은 마스터에 **0** — 기계는 모두 8번 꼴. 가장 많이 불리는 것 `GC000268` 기계 시간당 기계경비 562 회 · `GC000273` 163 · `GC000267` 158. +- 호표 「수량」 은 대개 중간 값 이름(「보통인부」 476 · 「특별인부」 234) — 중간에서 표를 찾아 담고 수량은 그 이름만 부르는 꼴. + +### 종류별 가장 짧은 실제 예 + +| 종류 | 키 · 이름 | 줄 모양 | +| --- | --- | --- | +| 표 찾기 수량 | `GF000040` 식재면 관리 | 호표 둘 · 수량 `찾기(QF000142, 구분='조경공').수량` | +| 기계 | `GF000249` 다짐(플레이트콤펙터) | 입력 지역 · 중간 `작업량 = 로직(GF000114)` · 호표 `로직(GC000272, 기계='1730-0015', 지역=지역)` × `1 / 작업량` | +| % 덧줄 | `GC000051` 보행자 안전통로 | 덧줄 `(비계공 * LB000006) * 찾기(QC000116, …).값 / 100` · 비목 경비 | +| 할증 + 조건 | `GF000025` 떼붙임(재배잔디) | 수량 `품 * (1 + 만약(비탈구배 == '해당 없음', 0, 찾기(QF000099, …).값) / 100)` | +| 조건 | `GF000231` 막돌쌓기 | 수량 `찾기(…).수량 * 만약(구분 == '붙임', 찾기(CF000148, …).적용 / 100, 1)` | +| 돈 아닌 결과 | `GF000133` 덤프트럭 시간당 작업량 | 결과 `반올림(60 * qt * f * E / Cm, 3)` | + +--- + +## 3. 쓰임 세기 (마스터 1,469) + +### 3-1. 단계별 누적 (뒤 단계는 앞 단계 것을 다 품음) + +| 단계 | 쓰는 것 | 로직 수 | 비율 | 누적 | +| --- | --- | --- | --- | --- | +| L0 | 인력 · 재료 줄 × 수량(수 · 설계 값 · 중간 산술) × 단가 + 비목 합 × 비율 덧줄 | 26 | 1.8 % | 1.8 % | +| L1 | + 표 찾기 | 407 | 27.7 % | 29.5 % | +| L2 | + 기계(기계경비 로직 부름 · 기종 고정) | 172 | 11.7 % | 41.2 % | +| L3 | + % 덧줄(고른 인력 줄 노임 × 비율) | 251 | 17.1 % | 58.3 % | +| L4 | + 기계 값 칸 직접(`EQ.손료계수`) | 3 | 0.2 % | 58.5 % | +| L5 | + 조건 · 끊기(만약 · 비교 · 최소 · 최대 · 올림) | 458 | 31.2 % | 89.7 % | +| L6 | 그밖 — 다른 로직 부름 · 틀 키 `{입력}` · `줄.` · 돈 아닌 결과 · 기계경비 로직 자신 | 152 | 10.3 % | 100 % | + +- 엄격한 「줄 × 맨 수 × 단가」(입력 · 중간 · 덧줄 없음) = **1 개(0.1 %)** — `GF000208`. +- 특징별(겹침 있음) — 표 찾기 1,399 · 조건 537 · 기계경비 부름 500 · 인력 노임 직접(덧줄) 398 · 틀 키 91 · 다른 로직 부름 40 · EQ 칸 37 · 결과 식 27 · `줄.` 3. + +### 3-2. 크기 분포 (10 = 10 이상) + +| 개수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10+ | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 호표 줄 | 30 | 183 | 498 | 272 | 160 | 116 | 66 | 34 | 32 | 15 | 63 | +| 설계 값 | 280 | 307 | 341 | 215 | 156 | 72 | 37 | 12 | 12 | 8 | 29 | +| 중간 | 287 | 364 | 298 | 268 | 113 | 63 | 21 | 15 | 14 | 7 | 19 | +| 덧줄 | 907 | 480 | 75 | 7 | — | — | — | — | — | — | — | + +→ 호표 1~5 줄 · 설계 값 0~4 개 · 덧줄 0~1 줄이 대부분. + +### 3-3. 가장 단순 3 · 가장 복잡 3 + +점수 = 설계 값 + 중간 + 호표 + 덧줄 + 2 × (찾기 · 로직 · 만약 부름 수). + +| 갈래 | 키 · 이름 | 설계 값 · 중간 · 호표 · 덧줄 · 부름 | +| --- | --- | --- | +| 단순 1 | `GF000208` 암거이음받침 채움재(T=20㎜) | 0 · 0 · 1 · 0 · 0 | +| 단순 2 | `GF000204` 전선관 설치(P.V.C ø54㎜) | 0 · 0 · 1 · 1 · 0 | +| 단순 3 | `GF000216` 조약돌 기초다짐 지름 9~15㎝(인력) | 1 · 0 · 1 · 0 · 0 | +| 복잡 1 | `GC000920` 터빈 설치(공정별) — JSON 19,944 자 | 31 · 7 · 12 · 0 · 557 | +| 복잡 2 | `GC000921` 발전기 설치(공정별) | 19 · 7 · 11 · 0 · 308 | +| 복잡 3 | `GC000914` 보일러 드럼 설치(공정별) | 20 · 12 · 17 · 0 · 275 | + +(다음 자리 — `GC000993` 플랜트 설치 소모자재 호표 40 줄 · `GC000510` 정사영상 · `GC000346` 터널굴착 1발파당 인력.) + +--- + +## 4. 계산 길 + +| 무엇 | 어디 | 근거 | +| --- | --- | --- | +| 계산 엔진 | **서버 단독**(파이썬) — `master_formula.run` · 브라우저는 `/calc` · `/text` 답을 찍기만(계산 자리 ③) | `master_formula.py:538` · `UI_Logic_Calc.ts:142,184` | +| 시험 계산 | `POST /calc {key, inputs, row?, file?, 고름?}` — 새 로직은 `key: ""` + `row` 통째 · 메모리에만 얹고 셈(파일 안 씀) | `Router.py:222` · `Store.py:524,543` · `_화면_계약.md:48-57` | +| 읽는 식 줄 | `POST /text` — 같은 몸 · 「단가 × 수량 = 금액」 줄 | `Router.py:228` · `Store.py:572` | +| 프로젝트 계산 | 사본 `단가.json` 으로 같은 `mf.run` | `M02_Item_Prices.py:211` | +| 답 모양 | 됨 `{ok, lines: [{이름, 단위, 수량, 단가, 금액, 비목}], sums: {노무비, 재료비, 경비, 계}, middle}` · 멈춤 `{ok: false, reason}`(200) | `Store.py:543-560` | + +### 4-1. 새 로직이 검사를 통과하는 최소 칸 (메모리 시험 `tmp/쉬운단가_검토_A_최소칸.py`) + +최소 통과 줄 = 머리 + 인력 호표 한 줄: + +``` +{원문번호: "", 구분, 상세구분, 이름, 결과단위: "원/㎡", 출처: "자체", 소유, 입력: [], 중간: [], + 호표: [{종류: "인력", 요소: "LB000002", 이름, 단위, 수량: "0.5", 비목: "노무비"}], 덧줄: [], 끝수: null} +``` +→ 시험 계산 됨 — 보통인부 0.5 인 × 172,068 = 86,034 원. + +| 뺀 · 바꾼 것 | 결과 | +| --- | --- | +| 원문번호 · 구분 · 상세구분 · 결과단위 · 출처 · 소유 · 입력 · 중간 · 끝수 **칸** 하나라도 없음 | 걸림 「칸 「X」 없음」 — 단 구분 · 상세구분 · 소유 · 키는 `/logic/new` 서버가 채움(`Make.py:154`) | +| 호표도 결과도 없음 | 걸림 「「호표」 도 「결과」 도 없음」(`check_master.py:316`) | +| 출처 = 빈 글 · 「내 메모」 | 걸림 「출처 모양」 — 「자체」 또는 「산림품셈 …」 꼴만(`check_master.py:63`) | +| 호표 비목 뺌(인력 · 재료) | 걸림 「비목 None」 | +| 호표 종류 ≠ 요소 그룹(인력에 EQ 키) | 걸림 「요소 그룹이 종류와 다름」 | +| 수량에 정의 안 된 이름 | 걸림 「모르는 이름 「면적」」 → 설계 값으로 만들면 통과 | +| 덧줄 칸 없음 · 호표 이름 · 단위 없음 · 호표 빈 목록 · 덧줄 출처 없음 | **통과**(검사가 안 봄) | +| 호표 종류 「기계」 + 요소 `EQ000001` | **검사 통과 · 계산 멈춤** 「unsupported operand … Decimal and dict」 — 새 길이 막아야 할 꼴 | +| 기계 줄 = `로직(GC000268, 기계='0201-0070', 지역='서울')` | 통과 · 계산 됨(노무비 · 재료비 · 경비로 나눠 얹힘) — 부를 로직의 입력을 **빠짐없이** 넘겨야 함(`master_formula.py:744`) | +| 재료 줄 = `{검색어: "시멘트"}` | 통과 · 계산 됨 — 단 검색어가 넓으면 엉뚱한 품목(「포시몰」)이 자동값 → 구분 · 상세구분 · 규격 조건 권장 | + +꼭 채울 것 정리 — **이름 · 결과단위(「원/…」) · 출처(「자체」) · 호표 줄마다 종류 · 요소 · 수량 · 비목(로직 줄 빼고) · 수량 식에 쓴 이름은 설계 값 또는 중간에 있어야 함**. 빈 칸 기본값: 원문번호 "" · 입력 [] · 중간 [] · 덧줄 [] · 끝수 null. + +--- + +## 5. 새 길이 지금 API 만으로 되나 + +| 일 | 지금 API | 됨? | 비고 | +| --- | --- | --- | --- | +| 목록 · 열기 | `GET /logics?owner=현장` · `GET /logic` | 됨 | 자체만 거름 가능 | +| 새로 | `POST /logic/new` | 됨 | 키 GX 서버 · 소유 현장 | +| 정본을 바탕으로 | `POST /logic/copy` → 자체로 | 됨 | 정본은 그대로 · 조합 · 다른 로직은 계속 정본 키를 봄 | +| 고치기 | `POST /logic/edit`(자체만) | 됨 | 정본은 403 — 본뜬 뒤 고침 | +| 지우기 | `POST /logic/delete`(자체만) | 됨 | 부르는 로직 · 담은 조합 있으면 422 · 화면은 `GET /logic/combos` 로 먼저 알림 | +| 시험 계산 | `POST /calc` · `/text`(`key ""` + `row`) | 됨 | 저장 전에도 | +| 인력 고르기 | `GET /pick?kind=job` | 됨 | 공표 직종 | +| 재료 고르기 | `GET /materials` · `GET /pick?kind=price` | 됨 | 구분 → 상세구분 → 후보 | +| 기계 고르기 | `GET /logic?key=GC000268` 의 입력 「기계」 고르기 목록 + `GET /elements?group=기계&q=` 이름 | 됨(두 번 부름) | 기종 목록이 기계경비 로직마다 다름(어느 로직을 부를지 고르는 일이 남음) | +| 표 찾기 | `GET /tables?group=소요량` · `GET /table/options` | 됨 | 조건 값 목록까지 | +| 저장 걸림 보이기 | 422 `{errors: [글…]}` | 됨 | 글이 키 · 엔진 말투 — 쉬운 말 바꾸기는 화면 몫 | + +- **새 API 필요 없음.** 만들면 좋은 것(필수 아님) 하나 — 「기계 고르기 한 번에」(기종 → 부를 기계경비 로직 키 · 넘길 입력을 짝지어 줌). 지금은 화면이 GC000267~276 열 개 가운데 고르는 규칙을 품어야 함. +- `/save` 는 쓰지 않는 것을 권함 — 소유 막음이 없어 정본 파일을 고치고 지울 수 있음(`Store.py:632`). `/logic/*` 길은 `로직_자체.json` 만 건드림(`Make.py:149`). +- 새 길이 「초등학생」 수준으로 덮을 범위 후보(브레인 판단 몫) — L0 ~ L3(호표 인력 · 재료 · 기계 + 표 찾기 + % 덧줄) = 마스터의 58 %. 조건 · 할증(L5)까지 = 90 %. + +## 덧 — 세는 법 + +- 「표 찾기」 = 식 나무에 `find` 마디 · 「조건」 = `만약 · 올림 · 버림 · 반올림 · 최소 · 최대` 부름 또는 비교 · 「기계경비 부름」 = `로직(…)` 대상이 `로직_건설품셈_08장_건설기계.json`(GC000267~276) · 「인력 노임 직접」 = 덧줄 · 중간 식의 고정 `LB · MT · MO` 키 · 해석은 엔진 `master_formula.parse · walk` 그대로. +- 「할증」 = 식 안 `(1 + …` 꼴(어림) · 「% 줄」 = 덧줄 식에 `/ 100`. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md new file mode 100644 index 000000000..66d047bc6 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_B_화면.md @@ -0,0 +1,141 @@ +# 34-1B 지금 단가산출 화면 걸음 재기 (sub6 · 조사만) + +⬜ 브레인 답 필요 — 화면에 「추가」라는 글의 단추가 없음. 사용자가 말한 「추가」 = 위 단추 줄 첫째 진한 단추 「식으로 새로 만들기」로 봄(유일한 새로 만들기 단추). 다르면 34-3a 단추 자리가 바뀜. + +- 서버 8008 · 화면 5181 · ORCA 탭 하나(끝나고 닫음) · 판정 전 세션 SYSTEM_ADMIN 확인. +- 저장 · 지우기 안 누름. 줄 추가 · 수량 · 단가 바꾸기는 캐시 초안(sessionStorage)에만 넣어 재고 끝에 지움. 끝난 뒤 서버 로직 1,469 개 · 자체(GX) 0 개 그대로 · git 깨끗. +- 사진 — `tmp/쉬운단가_B_사진/` (s01 목록 … s10 알약 창). + +## 1. 화면 자리 + +| 무엇 | 화면 위치 | 파일:줄 | +| --- | --- | --- | +| 들어가는 곳 | 왼쪽 패널 맨 아래 「단가산출 로직 ▸」 상자 | `M01_MasterData_UI_Side.ts:439-440` · 전환 `M01_MasterData_UI_Page.ts` `openLogicTab` | +| 로직 목록 | 가운데 표 · 30 줄씩 49 쪽 · 1,469 줄 · 이름 찾기 · 「막힘만」 | `M01_MasterData_UI_Logic_List.ts` · 걸기 `M01_MasterData_UI_LogicLab.ts:97` | +| 상세 | 줄 누르면 네 상자 — 기본정보 · 단가산출 상세 · 텍스트 수식 · 시험 계산 | `M01_MasterData_UI_LogicLab_Detail.ts:479-505` | +| 위 단추 줄 | 「← 로직 목록」 「단가산출 로직」 (빈칸) [식으로 새로 만들기] [로직 지우기] [고친 것 버리기] [저장] [본떠 만들기] | `M01_MasterData_UI_LogicLab.ts:394-418` | +| 「추가」로 본 단추 | 「식으로 새로 만들기」 — 진한 남색 · 단추 줄 왼쪽 첫째 | `M01_MasterData_UI_LogicLab.ts:400` | +| 그 옆 빈 자리 | 제목과 첫 단추 사이 넓은 빈칸(제목 오른쪽 여백 auto) — `pending`(「저장 안 한 로직 N 개」) 글 뒤 · `:400` 앞에 끼우면 「식으로 새로 만들기」 바로 왼쪽 | `M01_MasterData_UI_LogicLab.ts:398-400` · 줄 모양 `M01_MasterData_UI_Logic_Style.css:64-75` | + +- 목록일 때도 「로직 지우기」(빨강) · 「본떠 만들기」가 켜져 있음 — 누르면 아무 일 없음 / 「먼저 로직을 고르세요」 알림. + +## 2. 대표 일 여섯 — 걸음 + +누름 = 단추 누름 + 칸에 글 넣기 1 번씩. 창 = 지나간 화면·띄움창 수. + +| 일 | 길 | 누름 | 창 | 막힌 곳 | +| --- | --- | --- | --- | --- | +| ① 새 로직(인력 2 · 재료 1 · 경비 1) | 식으로 새로 만들기 | 38 | 5~6 | 첫 식이 단위 검사에 걸림 · 기계 고르기 깨짐 · 시험 계산 멈춤 | +| ② 있는 로직에 줄 하나 | 기본 로직 → 본떠 만들기 → 사본 편집기 | 10 (자체 로직이면 5) | 5 | 기본 로직은 줄 추가 단추 없음 · 사본 시트도 호표 줄 추가 없음 | +| ③ 수량 바꾸기 | 기본: 본떠 만들기 / 자체: 수량 칸 | 5 / 2 | 3 / 1 | 원본은 못 바꿈(사본이 생김) · 수량 칸이 식 글 | +| ④ 단가 자료 바꾸기 | 자체 로직 「찾기」 | 인력 3 · 재료 불가 · 기계 글 고침 | 2 | 재료 조건 줄 로직은 편집기 빈 화면 · 기계는 코드 글 | +| ⑤ 줄 지우기 | 자체 로직 「×」 | 2 | 1 | 기본 로직은 불가 · 확인창 없음 · 줄 하나 되돌리기 없음 | +| ⑥ 로직 지우기 · 되돌리기 | 로직 지우기 → 확인 → 저장 | 4 | 2 | 저장 뒤 되돌릴 길 없음 · 확인창이 원문번호로 부름 | + +### ① 새 로직 — 「식으로 새로 만들기」 (실측) + +1. 「단가산출 로직」 1 · 「식으로 새로 만들기」 1 · 식 적기 1 · 「분석」 1 = 4 +2. 처음 적은 식 `공사비 = 0.5 * 보통인부 + 0.2 * 특별인부 + 1.1 * 시멘트 + 0.3 * 굴착기` → 「「+」 양쪽 단위가 다름 — 원/인 + 원/포」. 수량마다 이름을 붙여 다시 적고(1) 다시 분석(1) = 2 +3. 마스터 요소 넷 — 무엇인가 1 · 고르기 1 · 고름 1 = 인력 3 × 2. 재료 · 기계는 고르기 창이 늘 「인력」으로 열려 종류 바꿈 1 · 찾기 글 1 더 = 5 × 2. 기계는 단위 칸 「[object Object]」 고침 1 더 = 17 +4. 고정값 넷(보통인부품 · 특별인부품 · 시멘트량 · 굴착기시간) — 무엇인가 · 값 · 단위 = 3 × 4 = 12 +5. 로직 이름 1 · 결과 단위 1 · 저장 1 = 3 +6. 합 38 · 창 = 본 화면 + 고르기 창 4 (+ 단가 없는 자재를 바꾸려면 「자재품목 고르기」 1) +7. 결과 — 시험 계산 「멈춤 · 이 조건으로는 셈하지 못함 — 입력값 · 표에 그 조합이 있는지 확인」. 실제 까닭은 고른 시멘트(MT004177)에 단가 없음. 고르기 창이 재료 값을 안 보여 줘 미리 알 길 없음. 멈춤인데도 [저장] 켜짐. +8. 「본떠 만들기」 길(비슷한 로직 사본) = 줄 누름 1 · 본떠 만들기 1 · 이름 1 · 저장(자체 로직) 1 = 4 — 그러나 사본 시트에서는 호표 줄 추가 · 지우기 불가 → 사본 상세 편집기에서 다시 고쳐야 함. + +### ② 있는 로직에 줄 하나 (편집기는 캐시 초안으로 실측) + +- 기본 로직 1,469 개 모두 상세가 읽기 전용(「기본 로직은 품셈 원문 그대로라 여기서 고치지 못함 — 비고만 고칠 수 있음」). +- 길: 찾기 글 1 · 줄 누름 1 · 본떠 만들기 1 · 저장(자체 로직) 1 → 사본 상세 · 호표 「줄 추가」 1 · 「찾기」 1 · 고름 1 · 수량 1 · 저장 1 = 9 (재료면 종류 바꿈 +1 = 10). +- 사본 상세(자체 로직) 편집기에는 같은 이름 「줄 추가」 단추가 넷 — 설계에서 받을 값 · 호표 · 중간 값 · 덧줄. +- 새 줄 기본값 = 종류 인력 · 단위 인 · 비목 노무비 · 요소 · 이름 · 수량 빈칸. +- 금액 보려면 시험 계산 — 초안은 견본값이 안 채워져 받을 값 셋(횡단경사 · 지역 · 보정작업)을 넣을 때마다 「「지역」 값을 아직 안 넣었습니다」로 하나씩 멈춤 → 3 칸 + 계산 1 = 4 더. + +### ③ 수량 바꾸기 + +- 자체 로직 — 수량 칸 글 고침 1 · 저장 1. 칸 값이 `찾기(QC000544, 도색=도색).특별인부 / 시공량` 같은 식 글. +- 기본 로직 — 본떠 만들기 시트의 식 줄 칸(`(절토량 / 작업량) * (1 + 할증 / 100)`)을 고쳐 저장(자체 로직) → 원본 대신 「… 복사본」이 하나 더 생김. +- 표 안 숫자(예 시공량 700)는 이 화면에서 못 고침 — 알약 → 「마스터 화면에서 보기」로 소요량 표 화면에 가야 함. + +### ④ 단가 자료(자재 · 노임) 바꾸기 + +- 인력 줄(요소 = `LB000002`) — 「찾기」 1 · 고름 1 · 저장 1 = 3. +- 재료 조건 줄(요소 = `{구분 · 상세구분 · 검색어}`) — 이런 줄이 든 로직 230 개(재료 줄 672). 사본을 열면 상세가 빈 화면(2장 흠 B2) → 불가. +- 경비(기계) 줄 — 마스터에 「기계」 종류 줄 0 · 모두 `로직(GC000267, 기계='0201-0020', 지역=지역, 보정작업=보정작업)` 부르기(1,075 줄). 굴착기 0.2㎥ → 0.4㎥는 글 속 코드 `'0201-0020'`를 손으로 바꿔야 함. 「찾기」는 로직 1,469 개를 보여 주고 고르면 괄호 속 인자(기계= …)가 사라짐. +- 「이름·규격」 칸은 꼬리표일 뿐 — 바꿔도 단가 그대로. +- 시험 계산의 「품목 고르기」(물가자료 · 유통물가 · 물가정보 · 거래가격 넷 보임)는 시험에만 쓰고 로직에 안 남음 — 바꾼 줄로 착각 쉬움. + +### ⑤ 줄 지우기 + +- 자체 로직 — 줄 끝 「×」 1 · 저장 1. 확인창 없음. +- 되돌리기 = 「고친 것 버리기」 하나뿐 — 모든 로직의 고친 것을 통째로 버림. 줄 하나 되살리기 없음. +- 기본 로직 · 본떠 만들기 시트 — 줄 지우기 단추 없음. + +### ⑥ 로직 지우기 · 되돌리기 + +- 줄 누름 1 · 로직 지우기 1 · 확인 1 · 저장 1 = 4 (실측은 확인창에서 취소). +- 확인창 글 「로직 「3-4-2」 을 지울까요? [저장] 때 파일에서 빠짐」 — 이름이 아니라 원문번호로 부름. 같은 3-4-2 가 GF000003 · GF000004 둘. +- 「고치지 못함」 기본 로직도 지우기는 됨(서버 `/save` 가 지움을 막지 않음 · 다른 로직이 부르면 저장 때 검사로 막힘). +- 저장 전 되돌리기 = 「고친 것 버리기」(전부) · 저장 뒤 = 길 없음(휴지통 · 초기화 없음). +- 저장 안 한 새 로직을 지우면 확인 뒤 바로 사라짐. + +## 3. 처음 보는 사람이 모를 낱말 + +- 호표 · 덧줄 · 중간 값 · 끝수 · 비목 · 몫(「노무비 몫」) · 소계 · 결과 단위 · 원문번호 · 출처 · 막힘 +- 기본 로직 · 정본 · 자체 로직 · 본뜸 · 복사본 +- 별칭(복사 시트 「부르는 표·로직」 상자) · 그대로 부르기 · 같이 복사하기 · 표 바꾸기 +- 마스터 요소 · 설계 입력 · 고정값 · 표 찾기 · 덧줄 비목 · 「비목 합 — 덧줄에서만 쓰는 이름」 · 식으로 정해짐 +- 키 머리글 — GF · GC · GX · LB · MT · EQ · QF · QC +- 식 낱말 — `찾기(QF000028, 구분='m당 절토량').값` · `로직(GC000267, 기계='0201-0020', …)` · `만약(횡단경사 >= 55, …, 0)` · `LB:{공수직종}` · `MO:휘발유:{지역}` +- 소유 — 세 화면이 다 다름: 식 화면 빈 글칸 · 편집기 「공용 / 개인」 · 복사 시트 「현장 / 공용」 +- 시험 계산 — 계산 때 · 고친 줄로 계산(저장 전) · 멈춤 · 물가자료 · 유통물가 · 물가정보 · 거래가격 · 대표 +- 텍스트 수식 속 기계가 지은 이름 — `굴착기무한궤도노무비단가` · 알약 꼬리표 `실선 · 5ton`(표 칸 `트럭2_5ton` 줄임) + +## 4. 화면에 안 보이는 규칙 + +1. 기본 로직은 줄 · 수량 · 단가 모두 못 고침 → 먼저 「본떠 만들기」로 자체 사본을 만들어야 함. 원본은 그대로. +2. 본떠 만들기 시트는 호표 줄 추가 · 지우기 불가 — 덧줄 추가만. +3. 「같이 복사하기」는 [저장] 없이 그 자리에서 서버에 새 로직을 씀 — 시트를 취소해도 남음(`M01_MasterData_UI_LogicLab_Copy.ts:197` → `/logic/copy` → `M01_MasterData_Store_Make.py:215` `logic_new`). +4. 「식으로 새로 만들기」는 위 [저장]과 따로 — ④ 칸의 [저장]이 바로 서버에 씀 · 캐시에 안 쌓임 · 「닫기」는 묻지 않고 다 버림. 한 화면에 [저장] 둘. +5. 식의 숫자는 단위가 없어 바로 곱하면 단위 검사에 걸림 — 수량마다 고정값 변수 + 단위를 적어야 통과. +6. 변수 목록은 식 순서가 아니라 가나다 순. +7. 경비(기계)는 요소가 아니라 「기계 시간당 경비 로직」을 기계 코드로 부르는 꼴. 식 화면은 기계 요소(EQ)를 바로 넣어 마스터와 다른 모양을 만듦. +8. 한 기계 줄이 인력 · 재료 · 경비 세 묶음에 「몫」으로 쪼개 보임 — 실제 줄은 하나. +9. 「이름」 칸은 꼬리표 — 단가 자료는 「요소」 칸 글이 정함. +10. 고르기 창이 셋 — 식 화면 「마스터 요소」(50 개 · 구분 거름 · 재료 값 안 보임) · 편집기 「요소 찾기」(100 개 · 거름 없음) · 시험 계산 「자재품목 고르기」(물가 넷). 열 때마다 종류가 「인력」으로 돌아가고 변수 이름으로 미리 찾아 두지 않음. +11. 시험 계산 견본값은 저장된 로직만 자동으로 채움(`M01_MasterData_UI_Logic_Calc.ts:153-155`) — 기본 로직은 바로 금액이 나오나 새 로직 · 사본 초안은 빈칸이라 받을 값을 다 채울 때까지 한 칸씩 멈춤. +12. 「고친 것 버리기」는 로직 하나가 아니라 저장 안 한 모든 로직을 버림. +13. 식 화면은 결과(원)와 결과 단위(원/㎡)가 어긋나도 검사 안 함. +14. 고르기 창 단위와 줄 단위가 다를 수 있음 — 노임 「원/일」을 골라도 줄 단위는 「인」. + +## 5. 다섯 기능 — 하려던 것 · 어려운 것 + +- **본떠 만들기** — 고칠 수 없는 기본 로직의 사본(자체)을 떠서 고치게 하려던 것. 어려움: 줄 추가 · 지우기 불가(덧줄만, 그마저 안 보임) · 별칭 상자와 「그대로 부르기 / 같이 복사하기」(즉시 저장) 갈래를 알아야 함 · 사본 뒤 다시 편집기로 가야 함. +- **식으로 새로 만들기** — 「이름 = 식」 글 몇 줄로 새 로직을 짓게 하려던 것. 어려움: 빈 글에서 식 문법과 단위 맞춤을 알아야 함 · 변수마다 무엇인가 네 갈래 · 기계 고르기 깨짐 · 닫기에 안 물음. +- **텍스트 수식** — 계산을 「변수 이름 식 = 값 넣은 식」 두 칸 글로 보여 검산하게 하려던 것. 어려움: 읽기만 · 기계가 지은 긴 이름 · 계산 전엔 오른쪽이 「시험 계산을 누르면 식이 글로 나옴」. +- **시험 계산** — 받을 값을 넣어 금액을 미리 보게 하려던 것. 어려움: 새 로직 · 초안은 한 칸씩 멈춤 · 멈춤 까닭이 엉뚱할 때 있음 · 품목 고르기가 시험에만 남음. +- **알약** — 수량 식 속 표 · 요소 · 로직 이름을 누르면 그 자료(걸린 줄 노란색)를 바로 보이려던 것. 창 자체는 쉬움. 어려움: 보기만(고치기는 「마스터 화면에서 보기」로 딴 화면) · 꼬리표가 표 칸 줄임 · 로직에 따라 알약 대신 글자만(GF000004). + +## 6. 쓰다 만난 흠 (고치지 않음 · 새 길이 같은 자리를 밟지 않게) + +| # | 흠 | 자리 | 사진 | +| --- | --- | --- | --- | +| B1 | 기계 고르기 창에 날 JSON(`{"가격":66538,…}`) · 이름이 한 글자씩 세로 · 고르면 단위 「[object Object]」 · 결과 「원/[object Object]」 | `M01_MasterData_UI_LogicLab_New_Find.ts:124-147` (기계 줄의 값 · 단위가 객체) | s02 | +| B2 | 재료 조건 줄이 든 자체 로직을 열면 상세 빈 화면 — `item.요소.includes is not a function` · 대상 230 로직(본뜨면 터짐) | `M01_MasterData_UI_Logic_Edit.ts:278` · 같은 꼴 `:294` | — | +| B3 | 본떠 만들기 「덧줄 추가」를 눌러도 새 줄이 안 보임 — 안 보이는 덧줄(식 0)이 저장엔 실림 | `M01_MasterData_UI_LogicLab_Copy.ts:236` · `:296` (줄 목록이 서버 첫 응답만) | s06 | +| B4 | 상세 표의 금액이 「금액」 칸이 아니라 단가 밑 둘째 줄에 앉음 | `M01_MasterData_UI_LogicLab_Detail.ts` 묶음 표 | s05 · s09 | +| B5 | 시험 계산 멈춤 까닭이 엉뚱 — 단가 없는 자재인데 「입력값 · 표 조합 확인」 | `safeReason` `M01_MasterData_UI_Logic_Text.ts` | — | +| B6 | 복사 시트 「취소」 단추가 세로로 찌그러짐(「취/소」) | 복사 시트 머리 | s06 | +| B7 | 목록에서 「로직 지우기」 · 「본떠 만들기」가 켜진 채 | `M01_MasterData_UI_LogicLab.ts:401-417` | s01 | + +## 7. 새 길이 피할 것 (설계 후보 · 정함은 브레인 몫) + +1. 사용자가 「본뜨기」 · 「자체 / 기본」을 몰라도 되게 — 기본 로직에서 바로 고치기를 누르면 사본이 생긴다는 것을 한 줄로 알림. +2. 줄은 인력 · 재료 · 경비 세 상자에 한 줄씩 — 몫 쪼개기 · 덧줄 · 중간 값을 처음 화면에 안 보임. +3. 고르기 창 하나 — 그 상자 종류로 열림 · 줄 이름으로 미리 찾음 · 단가가 보임 · 단가 없는 품목은 흐리게. +4. 수량은 숫자 칸 먼저 · 단위는 줄 단위에서 자동 · 식은 「고급」 뒤로. +5. 경비(기계)는 「기계 고르기」로 — 속에서는 지금 형식 `로직(GC…, 기계='코드', …)`으로 읽고 씀. +6. 재료 조건 줄(`{구분 · 상세구분 · 검색어}`)을 읽고 쓸 수 있어야 함 — 230 로직. +7. [저장] 하나 · 닫기 전 물음 · 줄 하나 되돌리기. +8. 새 로직 · 사본에도 시험 견본값을 채워(`/logic/auto` 꼴) 한 번에 금액이 나오게 · 멈춤 까닭은 줄 이름으로. +9. 지울 때 이름으로 묻기 · 저장 전까지 되살리기. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md new file mode 100644 index 000000000..cf2514bc0 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_C_갈래.md @@ -0,0 +1,282 @@ +# 쉬운 단가산출 검토 C — 실무 일위대가 모양 + 쉬운 제어 갈래 (sub7 · PLAN 34-1) + +조사 · 그림만 · 코드 안 고침. 그림 숫자는 실무 엑셀 호표 3(찰쌓기) + 공구손료 2% 가정. + +## 0. 한눈에 + +- **추천 = 갈래 B 「문장 카드」** — 줄 하나 = 쉬운 문장 하나(「석공이 [0.072]인 일함 = 18,643원」). 시작은 E 「비슷한 것 본뜨기」, 줄 더하기는 C 의 물음 셋, 맨 아래 실무 일위대가표 미리보기(읽기만). +- 까닭 — 지금 화면이 이미 실무 표 꼴이라 표(A)로는 같은 벽 · 카드 하나가 지금 형식의 줄 하나와 1:1 · 알림·잠금이 들어갈 자리가 카드 안에 있음 · 걸음은 표와 거의 같음(여섯 일 합 36 대 33). +- 큰 벽 — 정본 로직 수량의 97%가 식(숫자 146 줄뿐). 어느 갈래든 식은 「잠금 값」으로 보이고, 쉬운 길에서 새로 만드는 로직은 실무처럼 숫자 수량. + +## 1. 실무자가 일위대가를 적고 읽는 모양 + +근거: `resources/knowledge/original/실무문서/2024년 간선임도(기번3-울진.대흥)(공통)/…xlsx` 시트 `일위대가표`·`중기사용료`·`일위대가목록표`(STmate 출력) · `경쟁사 프로그램/STmate 분석/20_분석/31_일위대가_레시피_사전.md` · 산림품셈 1-2-6 · 건설품셈 1-3-1. + +### 1-1 일위대가표 칸 차례 (A~M 열) + +``` +명칭 | 규격 | 수량 | 단위 | 합계(단가·금액) | 노무비(단가·금액) | 재료비(단가·금액) | 경비(단가·금액) | 비고 +``` + +호표 하나의 모양 (일위대가표 16~22행): + +``` +제 3 호표 +찰쌓기(켜쌓기) L3=55cm이하 m2 대가 3 +건설표준품셈 7-1-2(찰쌓기) 0 ← 근거 줄(금액 0) +석공 0.072 인 258,935 18,643 258,935 18,643 0 0 0 0 노무 3 +보통인부 0.036 인 165,545 5,960 165,545 5,960 0 0 0 0 노무 6 +굴삭기+부착용 집게(0.6m3) 0.27 시간 105,164 28,394 55,700 15,039 18,296 4,940 31,168 8,415 중기 20 +합 계 52,995 39,641 4,939 8,415 +``` + +- % 줄 (146행): `공구손료 | 인건비의 % | 2 | % | 13,037.6(바탕 금액) | 260.7 | … 재료비 칸에 260.7 | 자재 24` +- 다른 호표 부르기 (89행): `찰쌓기(켜쌓기) | L3=55cm이하 | 1.57 | m2 | 52,995 | 83,202 | … | 대가 3호표` +- 중기사용료 호표 (불도우저 19ton /시간): 손료 0.1811 천원(경비) · 건설기계운전사 1인(노무) · 경유 25L(재료) · 잡품 주연료의 16%(재료) +- 목록표 칸: `호표 | 명칭 | 규격 | 단위 | 합계 | 노무비 | 재료비 | 경비 | 비고` + +### 1-2 실무 규칙 + +| 무엇 | 실무 모양 | +|---|---| +| 한 줄 | 무엇 · 규격 · 얼마(수량) · 단위 — 단가는 목록에서 옴 · 금액 = 수량 × 단가 | +| 비목 | 사람 줄은 노무비 칸만 · 재료는 재료비 · 기계(중기 호표)는 세 칸에 나뉨 | +| % 줄 | 명칭 = 공구손료·잡품·잡재료비 · 규격 = 「노무비의 %」「주연료의 %」 · 수량 = % 수 · 단가 = 바탕 금액 | +| 다른 일위대가 | 한 줄로 부름 · 비고 「대가 N호표」 · 조합 350 중 150(43%)이 2단 이상 | +| 근거 줄 | 「건설표준품셈 7-1-2」 금액 0 줄을 맨 위에 | +| 규격 갈래 | 규격만 다르면 호표 따로(기슭막이 H=1.5·2.0·2.5 = 호표 12·13·14) · 구성 같고 수량만 비례 | +| 수량 | **숫자** — 품셈 표에서 사람이 골라 적은 결과 | +| 줄 수 | 평균 4.9 · 4줄 최다(중기) · 최대 17 | +| 끝수 | 줄 금액 소수 첫째 · 비목 합 원 미만 버림 | +| 할증 | 재료 할증(시멘트 정치식 2·기타 3% 등, 건설품셈 1-3-1)은 수량에 녹이거나 따로 줄 · 품셈 항목에 들어 있으면 안 붙임 | +| 공구손료·잡재료 | 산림품셈 1-2-6 주재료비 2~5% · 항목마다 「인력품의 3%」(12-38) 등 · 실무 엑셀은 **재료비** 칸, 산림품셈 12-27 표는 **경비** — 줄마다 비목 고를 자리 필요 | + +### 1-3 실무자가 적는 차례 · 읽는 차례 + +``` +적기 ① 품셈 절 찾기 → ② 표에서 규격 맞는 줄의 품 숫자 → ③ 사람·재료·기계 줄 적기(단가는 목록이 채움) + → ④ % 줄(공구손료·잡품) → ⑤ 합계 확인 → ⑥ 다른 규격은 호표 복사 뒤 수량만 바꿈 +읽기 목록표 합계 → 호표 열어 큰 줄 → 비고로 단가 출처 → 근거 줄로 품셈 절 +``` + +## 2. 지금 로직 형식 (쉬운 길이 그대로 읽고 쓸 것) + +근거: `resources/master_data/_틀.md` 7·8·10장 · `M01_MasterData_UI_Logic_Api.ts` `LogicRow` · 로직 파일 1,469개 셈(전부 정본 · 공용). + +| 형식 칸 | 뜻 | 실무 대응 | 수 | +|---|---|---|---| +| 머리 | 이름 · 결과단위(원/㎡) · 출처 · 소유 | 호표 머리 줄 + 근거 줄 | — | +| 입력 | 설계 때 받을 값(뒷길이 · 돌 종류) | 없음 — 실무는 규격마다 호표 따로 | 1,189 로직 | +| 중간 | 이름 붙인 식 | 품셈 표를 읽는 과정 | 1,182 로직 | +| 호표 줄 | 종류(인력·재료·로직) · 요소 · 수량 · 비목 | 일위대가표 한 줄 | 5,260 줄 (인력 3,462 · 로직 1,075 · 재료 723 · 기계는 로직 줄로 부름) | +| 수량 | 숫자 146 · 이름 하나 1,957 · 찾기 하나 668 · 그 밖 식 2,489 | 수량 칸 숫자 | 숫자는 3% | +| 덧줄 | % 꼴 599 / 651 (바탕 = 사람 줄 합 321 · 이름 하나 176 · 그 밖 102) | % 줄 | 562 로직 | +| 결과 식 | 돈 아닌 로직(작업량) | 단가산출근거(Q식) | 27 | +| 끝수 | `{대상, 자리, 방법}` | 원 미만 버림 | 37 | +| 재료 요소 | 키 대신 검색어 묶음 | 명칭·규격 | — | + +서버 길(엔진 안 바꿈): `POST /calc`(저장 없이 셈) · `/save` · 자체 로직 만들기·본뜨기·고치기·지우기(`Store_Make`) · 쓰는 곳 찾기(`master_combo.using`). + +## 3. 대표 일 여섯 (모든 갈래 같은 예) + +예: 「찰쌓기(켜쌓기) L3=55cm이하 /㎡」 = 석공 0.072인 · 보통인부 0.036인 · 굴삭기+집게 0.27시간 · 공구손료 노무비의 2% + +| | 일 | 예 | +|---|---|---| +| ① | 새 로직 만들기 | 위 네 줄을 처음부터 | +| ② | 줄 추가 | 모르터바르기 0.009㎥ (다른 일위대가 부르기) | +| ③ | 수량 바꾸기 | 석공 0.072 → 0.08 | +| ④ | 단가 자료 바꾸기 | 굴삭기 0.6㎥ → 0.7㎥ (줄이 쓰는 요소를 바꿈 · 마스터 단가는 안 고침) | +| ⑤ | 줄 지우기 | 보통인부 줄 | +| ⑥ | 로직 지우기 · 되돌리기 | 자체 로직 지우기 / 방금 한 일 되돌리기 | + +걸음 = 누르기 한 번 또는 칸 하나 채우기(쳐서 엔터) · 저장 1 넣음 · 로직 열기는 뺌(①⑥은 목록에서 셈) · 지금 화면 걸음은 sub6 값. + +## 4. 갈래 다섯 + +### A. 엑셀 표 — 실무 일위대가표 그대로 + +``` +┌ 쉬운 단가산출 ─────────────────────────────────────── [되돌리기] [저장] ┐ +│ 찰쌓기(켜쌓기) L3=55cm이하 1 ㎡ 당 합계 53,788 원 │ +├──────────────┬────────────┬───────┬──────┬─────────┬─────────┬──────┤ +│ 명칭 │ 규격 │ 수량 │ 단위 │ 단가 │ 금액 │ │ +├──────────────┼────────────┼───────┼──────┼─────────┼─────────┼──────┤ +│ 석공 │ │ 0.072 │ 인 │ 258,935 │ 18,643 │ [×] │ +│ 보통인부 │ │ 0.036 │ 인 │ 165,545 │ 5,960 │ [×] │ +│ 굴삭기+집게 │ 0.6㎥ │ 0.27 │ 시간 │ 105,164 │ 28,394 │ [×] │ +│ 공구손료 │ 노무비의 % │ 2 │ % │ 39,641 │ 793 │ [×] │ +│ (여기에 이름을 쳐서 줄 더하기 …) │ +├──────────────┴────────────┴───────┴──────┴─────────┴─────────┴──────┤ +│ 노무비 39,641 · 재료비 5,732 · 경비 8,415 │ +└──────────────────────────────────────────────────────────────────────┘ +``` + +- 걸음: ① 17 · ② 4 · ③ 3 · ④ 4 · ⑤ 2 · ⑥ 3 / 1 +- 형식: 줄 = 호표 줄 · % 줄 = 덧줄(`노무비 * 2 / 100`) · 명칭 후보가 일위대가면 종류 「로직」 · 비목 칸은 숨김(줄 종류로 정함) +- 못 덮음: 식 수량 → 칸에 회색 「자동 0.50」 · 입력·중간 → 표 위 접힌 띠 +- 좋음: 인쇄 일위대가표와 같은 모양 · 고치기 걸음 가장 적음 · 한 화면에 전체 +- 나쁨: **지금 화면(`Logic_Edit` 「실무 단가산출 상세(호표) 모양」)이 이미 표 꼴 — 표만으로 어려움이 안 풀린 길** · 칸 머리를 알아야 읽힘 · 칸 안에 알림 자리 없음 · 휴대폰 폭 안 맞음 + +### B. 문장 카드 — 빈칸 채우기 + +``` +┌ 쉬운 단가산출 ──────────────────────────────────────── [↶ 되돌리기] [저장] ┐ +│ 이 일의 이름 [찰쌓기(켜쌓기)] 크기 [L3=55cm이하] [1 ㎡ ▾] 당 │ +│ ▶ 1㎡ 만드는 데 53,788 원 │ +├────────────────────────────────────────────────────────────────────────────┤ +│ 【사람】 [석공 ▾] 이 [0.072] 인 일함 = 18,643 원 [지움] │ +│ 【사람】 [보통인부 ▾] 이 [0.036] 인 일함 = 5,960 원 [지움] │ +│ 【기계】 [굴삭기+집게 0.6㎥ ▾] 를 [0.27] 시간 씀 = 28,394 원 [지움] │ +│ 【덧붙임】 [사람 품값 ▾] 의 [2] % 를 [공구손료] 로 더함 = 793 원 [지움] │ +│ │ +│ [+ 사람] [+ 재료] [+ 기계] [+ 다른 일위대가] [+ 덧붙임 %] │ +├────────────────────────────────────────────────────────────────────────────┤ +│ ▸ 실무 일위대가표로 보기 (읽기만 · 1-1 모양) │ +└────────────────────────────────────────────────────────────────────────────┘ + +잠금 카드 (정본을 본뜬 로직): +│ 【사람】 [석공 ▾] 이 (자동 0.50 · 산림품셈 13-4-1 표에서) 인 일함 = 129,468 원 │ +│ └ [숫자로 바꾸기] [그대로 둠] │ +잘못 넣음: +│ 【사람】 [석공 ▾] 이 [0.72] 인 일함 ⚠ 1㎡ 에 석공 0.72인은 많음 — 0.072 ? │ +``` + +- 걸음: ① 20 · ② 5 · ③ 3 · ④ 3 · ⑤ 2 · ⑥ 3 / 1 +- 형식: 카드 = 호표 줄 / 덧줄 / 로직 줄 1:1 · 【덧붙임】 바탕 「사람 품값」 = 사람 줄 합(덧줄 321개 꼴) · 「노무비·재료비·경비·주재료비」 = 이름 하나(176개 꼴) +- 못 덮음: 식 수량 → 잠금 값 + 「숫자로 바꾸기」 · 그 밖 덧줄 → 잠금 카드 「자동 덧붙임」 +- 좋음: 칸 머리 없이 문장으로 읽힘 · 알림·잠금이 카드 안에 들어감 · 휴대폰 폭 맞음 · 카드 순서 ▲▼ +- 나쁨: 줄 17개 로직은 길어짐(카드 한 줄 접기로 보완) · 실무 표와 모양 다름(아래 미리보기로 보완) + +### C. 단계 안내 — 마법사 + +``` +┌ 새 일위대가 만들기 ─────────────────────────── 4 / 7 단계 ┐ +│ │ +│ 이 일에 기계가 들어가나요? │ +│ │ +│ [ 굴삭기+집게 0.6㎥ ▾ ] [ 0.27 ] 시간 = 28,394 원 │ +│ [ + 기계 하나 더 ] │ +│ │ +│ 지금까지 1㎡ 당 52,995 원 │ +│ │ +│ [ ← 앞으로 ] [ 기계 없음 ] [ 다음 → ] │ +└───────────────────────────────────────────────────────────┘ +단계: ① 이름·단위 ② 사람 ③ 재료 ④ 기계 ⑤ 다른 일위대가 ⑥ 덧붙임(%) ⑦ 확인·저장 +``` + +- 걸음: ① 24 · ② 6 · ③ 5 · ④ 5 · ⑤ 4 · ⑥ 3 / 1 (고치기 = 단계로 건너뛰기 → 고침 → 확인 → 저장) +- 형식: 단계마다 호표 줄 종류 하나 · 끝 단계에서 한 번에 씀 +- 못 덮음: B 와 같음 · 줄 차례는 종류별로 묶임(지금 상세 화면 묶음과 같음) +- 좋음: 한 화면 한 물음 — 가장 「초등학생」 · 길을 잃지 않음 · ① 에 강함 +- 나쁨: 고치기가 느림 · 전체가 끝 단계에서만 보임 · 단계 사이 오감이 잦음 + +### D. 블록 끌어다 놓기 + +``` +┌ 서랍 ──────────┐┌ 판 ─────────────────────────────────── [↶] [저장] ┐ +│ [▭ 사람] ││ ┏━ 찰쌓기(켜쌓기) L3=55cm이하 · 1㎡ ━━━━━━━━━━━━━┓ │ +│ [▭ 재료] ││ ┃ ▭ 사람 [석공] [0.072] 인 18,643원 ┃ │ +│ [▭ 기계] ││ ┃ ▭ 사람 [보통인부] [0.036] 인 5,960원 ┃ │ +│ [▭ 다른 일위대가]││ ┃ ▭ 기계 [굴삭기+집게] [0.27] 시간 28,394원 ┃ │ +│ [▭ 덧붙임 %] ││ ┃ ▭ % [사람 품값] 의 [2] % 793원 ┃ │ +│ ││ ┗━ 합계 53,788원 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ +│ [휴지통] ││ │ +└─────────────────┘└───────────────────────────────────────────────────┘ +``` + +- 걸음: ① 20 · ② 5 · ③ 3 · ④ 4 · ⑤ 2 · ⑥ 3 / 1 +- 형식: 블록 = 카드 · 판의 차례 = 호표 줄 차례 +- 못 덮음: B 와 같음 +- 좋음: 스크래치처럼 어린이에게 익숙 · 지우기가 휴지통으로 눈에 보임 +- 나쁨: 호표는 일렬 목록이라 블록이 카드보다 더 주는 것 없음 · 끌기가 터치패드·키보드에 약함 · 만들기 품 가장 큼 + +### E. 비슷한 것 골라 고치기 — 본뜨기 (입구) + +``` +┌ 무엇과 비슷한가요? ────────────────────────────────────────────────┐ +│ [ 찰쌓기 찾기 ] │ +│ │ +│ ○ 찰쌓기(켜쌓기) L3=55cm이하 /㎡ 52,995원 석공 · 보통인부 · 굴삭기 │ +│ ○ 메쌓기(켜쌓기) L3=55cm이하 /㎡ 68,835원 석공 · 보통인부 · 굴삭기 │ +│ ○ 돌쌓기 메쌓기(인력) [정본] /㎡ 설계 값 필요 석공 · 보통인부 │ +│ │ +│ [ 이것으로 시작 → ] │ +└────────────────────────────────────────────────────────────────────┘ +→ 고치기 화면(A 또는 B) · 위 띠 「본뜬 것: 찰쌓기(켜쌓기)」 · 바뀐 칸 노랑 +``` + +- 걸음: ① 9 (비슷한 것이 있을 때 · 찾기 1 · 고르기 1 · 시작 1 · 이름 1 · 수량 2칸 4 · 저장 1) · ②~⑥ 은 고치기 화면 걸음 +- 형식: 지금 본뜨기 서버 길 그대로(`Store_Make` · `LogicLab_Copy`) +- 좋음: 실무 습관 그대로(호표 복사 뒤 수량만) · 빈 종이로 시작하지 않음 +- 나쁨: 혼자 서지 못함 · 정본을 본뜨면 잠금 값이 따라옴 + +## 5. 갈래 비교 + +| | A 표 | **B 문장 카드** | C 마법사 | D 블록 | E 본뜨기(입구) | +|---|---|---|---|---|---| +| ① 새로 | 17 | 20 | 24 | 20 | 9 | +| ② 줄 추가 | 4 | 5 | 6 | 5 | 고치기 화면 | +| ③ 수량 | 3 | 3 | 5 | 3 | 〃 | +| ④ 단가 자료 | 4 | 3 | 5 | 4 | 〃 | +| ⑤ 줄 지우기 | 2 | 2 | 4 | 2 | 〃 | +| ⑥ 지우기 / 되돌리기 | 3 / 1 | 3 / 1 | 3 / 1 | 3 / 1 | 3 / 1 | +| 여섯 합 | 33 | 36 | 47 | 37 | — | +| 품셈 몰라도 읽힘 | 중 | 상 | 상 | 상 | 상 | +| 실무 표 모양 | 상 | 중(미리보기) | 하 | 중 | — | +| 한 화면 한 가지 | 하 | 중 | 상 | 중 | 상 | +| 알림 자리 | 하 | 상 | 상 | 중 | — | +| 휴대폰 폭 | 하 | 상 | 상 | 하 | 상 | +| 만들기 품 | 하 | 중 | 중 | 상 | 하 | +| 지금 형식 읽고 씀 | 됨 | 됨 | 새로 만들기만 자연 | 됨 | 됨 | + +## 6. 못 덮는 형식 요소와 할 일 (모든 갈래 공통) + +| 요소 | 수 | 쉬운 길에서 | 그때 할 일 | +|---|---|---|---| +| 식 수량(찾기·만약·이름) | 5,114 줄 | 잠금 값 「자동 0.50 · 산림품셈 13-4-1 표」 | 「숫자로 바꾸기」(확인 한 번) 또는 「표에서 고르기」 = 조건을 고정값으로 넣은 찾기(`찾기(QF…, 뒷길이=45, 돌='깬돌').석공`) | +| 입력(설계 때 받을 값) | 1,189 로직 | 위 띠 「설계 때 정하는 값: 뒷길이 · 돌」 읽기만 · 시험값만 넣어 금액 봄 | 새 입력 만들기는 지금 화면 | +| 중간 식 | 1,182 로직 | 숨김(잠금 값 안에서만 보임) | 지금 화면 | +| 덧줄 % 꼴 | 599 줄 | % 카드 · 율이 찾기면 잠금 % | — | +| 덧줄 그 밖 꼴(손료 식 등) | 52 줄 | 잠금 카드 「자동 덧붙임 · 금액」 | 지금 화면 | +| 로직 부르기 + 넘길 값 | 1,075 줄 | 다른 일위대가 카드 · 받는 값은 카드 안 고르기 칸 | 넘길 값이 식이면 잠금 | +| 결과 식(작업량 · Q식) | 27 로직 | 목록에 회색 「쉬운 길로 못 엶」 | 지금 화면 | +| 끝수 묶음 | 37 로직 | 읽기만 한 줄 「합계 원 미만 버림」 | 새 로직은 엔진 기본 | +| 정본(공용) | 1,469 로직 | 읽기만 + [본떠 만들기] | 정본은 안 고침 | +| 재료 요소 | 723 줄 | 이름 쳐서 고르기 → 검색어 묶음으로 씀 | — | +| 로직 지우기 | 자체만 | 쓰는 곳(다른 로직 · 조합)이 있으면 「○곳에서 씀 — 먼저 빼기」 | — | + +## 7. 「초등학생」 원칙 + +1. **낱말** — 키·식·비목·호표·덧줄 안 씀 → 사람 · 재료 · 기계 · 다른 일위대가 · 덧붙임(%) · 사람 품값 · 재료값 · 기계·경비. +2. **한 화면 한 가지 일** — 고치기 화면에 목록·시험 계산·식 풀이를 같이 두지 않음. +3. **결과 금액이 바로 보임** — 줄마다 금액 · 맨 위 큰 합계 · 바뀐 금액은 잠깐 칠함. +4. **고르기가 쓰기보다 먼저** — 이름은 후보에서 · 단위는 고른 것이 정함 · 숫자 칸만 침. +5. **보기 글** — 빈 칸에 회색 「예: 0.072」. +6. **잘못 넣으면 바로 그 자리에 한 줄** — 숫자 아님 · 0 · 음수 · 너무 큼(1㎡ 에 사람 10인 넘음 등) · 같은 이름 · 빈 이름. +7. **되돌리기 늘 보임** — 줄 지우기는 묻지 않고 되돌리기로 · 로직 통째 지우기만 확인 한 번. +8. **저장 전엔 아무것도 안 바뀜** — 「저장 안 함」 표시 · 저장 안 하고 닫으면 물음. +9. **정본은 안 깨짐** — 정본은 읽기 + 본뜨기만. +10. **어려운 것은 잠금** — 식·표 찾기는 잠금 값으로 · 열어 보기는 되지만 고칠 필요 없음. +11. **실무와 같은 차례** — 이름 · 크기(규격) · 얼마 · 단위 · 금액 · 인쇄 일위대가표와 같은 숫자. +12. **큰 단추 · 글 크게 · 색만으로 뜻 안 전함** — 글 + 표시 함께 · 밝음 · 어두움 둘 다. + +## 8. 추천 — B 문장 카드 (E 입구 · C 물음 셋 · 실무 표 미리보기) + +까닭: + +1. 지금 화면은 이미 실무 표 꼴 — 표(A) 모양만으로는 어려움이 안 풀렸음. 바꿀 것은 모양이 아니라 **읽는 법**(칸 머리 → 문장). +2. 카드 하나 = 지금 형식의 줄 하나(호표 줄 · 덧줄 · 로직 줄) — 그대로 읽고 씀 · 엔진 안 바꿈. +3. 「석공이 0.072인 일함 = 18,643원」은 품셈을 몰라도 읽힘 — 초등학생 원칙 1·3·11. +4. 알림·잠금·「숫자로 바꾸기」가 들어갈 자리가 카드 안에 있음 — 표 칸에는 없음. +5. 걸음은 표와 거의 같음(여섯 합 36 대 33) · 마법사보다 11 적음. +6. 블록(D)의 쉬움을 끌기 품 없이 얻음 — 호표는 일렬이라 블록 = 카드 + 끌기. +7. 실무 습관(비슷한 호표 복사 뒤 수량만)은 E 입구로 · 처음 쓰는 사람은 [+ 사람] 뒤 C 물음 셋(무엇 → 어떤 것 → 얼마). + +브레인 정할 것: + +- **바로 보이는 금액** — 숫자 줄은 화면에서 곱하고 식 줄은 `/calc` 를 뒤에서(최신 응답만) · CLAUDE.md 5장 「조작 중 네트워크 왕복 금지」와 맞출 길. +- **「숫자로 바꾸기」 허용** — 정본을 본뜬 자체 로직에서 식을 숫자로 덮는 일(표 연결이 끊김). +- **공구손료 비목 기본** — 실무 엑셀 재료비 칸 · 산림품셈 12-27 경비(원문 대 실무). +- **「지금 화면에서 고치세요」 길** — 폴더 밖 참조 한 곳 원칙과 맞출 방법(글 + 키 복사만 · 링크 없음 등). +- **쉬운 길 새 로직에 입력을 둘지** — 실무는 규격마다 호표 따로라 입력 없이도 됨. diff --git a/docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md b/docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md new file mode 100644 index 000000000..30d4841f5 --- /dev/null +++ b/docs/raw/M01_쉬운단가/쉬운단가_검토_D_지난시도.md @@ -0,0 +1,96 @@ +# 쉬운 단가산출 검토 D — 지난 시도에서 배우기 (34-1 · sub8 · 10-01) + +조사만 · 코드 안 고침. 근거 = `git log -- M01_MasterData`(133 커밋) · `docs/raw/plans/2026-09-22·09-25·10-01` · `resources/master_data/ref/_설계_로직_만들기.md`·`_검증_테스트_컨테이너.md`·`_분석_로직컨테이너_통합.md`·`_검증_화면글.md`·`_검증_화면늦음.md` · 지금 코드 머리 주석 · 사용자 대화 기록(시각은 한국 시각). + +## 0. 한눈에 + +- 열흘(09-19 ~ 09-30) 동안 시도 열넷. 큰 갈아엎기 셋 — ① 09-20 밤 방식 A·B·C ② 09-21 낮 흐름 그림 + 마법사 모달 ③ 09-21 밤 「식으로 새로 만들기」 · 「본떠 만들기」. +- 09-21 밤 뒤로는 **보기(읽기)만 다듬음** — 보기 쪽 파일 고친 커밋 24 · 만들기·고치기 파일 고친 커밋 2(둘 다 이름 바꾸기·합치기). 사용자가 어렵다는 **추가 · 삭제 · 수정 길은 09-21 모습 그대로**. +- 지금 남은 만들기·고치기 길 = 식 글자 셋(식으로 새로 만들기 · 본떠 만들기 별칭 식 · 자체 로직 편집기). + +## 1. 시도마다 한 줄 + +| # | 언제 · 커밋 | 시도 | 풀려던 것 | 사용자에게 요구한 것 | 남은 어려움 · 근거 | 지금 | +|---|---|---|---|---|---|---| +| 1 | 09-19 `3a36a037` `10598f36` | 호표 편집기(옛 로직 칸 · `Logic_Edit`) | 화면에서 로직 고치기 · 시험 계산 | 줄마다 종류 · 요소 키 · **수량 식 글자** · 중간 값 · 결과 식 · 덧줄 · 끝수 칸 · 요소 찾기 창 | 사용자 09-21 「중간 값과 덧줄, 끝수 등 의미가 이해하기 어려움」 · 정본도 바로 고쳐 저장됨 → 사용자 확정으로 버림(7-1) | 옛 컨테이너는 `old_code/` · 편집기는 **자체 로직 고치기로 살아 있음** | +| 2 | 09-20 `292568e6` | 방식 A 질문·답 마법사(테스트 컨테이너) | 식 없이 입력만 물어 계산 | 공종 → 조건 질문 하나씩 → 재료·기계 고르기 | 읽기·계산만 · 로직을 만들지 못함 — 사용자 09-21 07:39 「신규 등록일 경우 첫번째 방식이 괜찮고 … 문제는 로직생성 … 누락」 | 09-21 걷음(`f458da7f`) | +| 3 | 09-20 `2436899c` | 방식 B 호표 + 옆 설명 카드 | 「이 수량은 어디서 왔나」 | 줄 누름 → 옆 카드(원문 표 · 할증 · 쉬운 말 풀이) · 식 고치기는 고급 뒤 | 화면 확인 없이 typecheck 만으로 마감(커밋 글) · 사용자 09-21 08:06 「A, B, C 화면 구성 삭제」 | 카드 속은 `Logic_Note` 로 남아 모달이 씀 | +| 4 | 09-20 `17838d00` | 방식 C 흐름 그림(설계 값 → 표 찾기 → 수량 → × 단가 → 할증·덧줄 → 비목 합계 → 계) | 계산 흐름을 한눈에 | 상자 누름 → 값 · 출처 | 사용자 09-21 07:39 「등록 후 전체를 볼 때는 … 칸반보드 타입이 눈에 잘 들어옴」 → 채택(09:13) → 10시간 뒤(19:17) 삭제 지시 「기존 일위대가 로직을 기준으로 개선」(까닭 글 없음 · 실무 호표 모양과 다른 탓으로 보임 — 추정) | 09-21 걷음(`5b693242`) | +| 5 | 09-21 `946425af` `beea3fac` | 새로 만들기 모달 = 방식 A 만들기(`Wizard` 9 파일 1,885 줄) | 품셈 모르는 사람이 빈 화면에서 로직 만들기 | **여덟 걸음** 이름 → 원문 절 → 중간 값 → 호표 줄 → 설계 입력 → 할증·끝수 → 시험 계산 → 저장 · 수량 = 직접 값 / 표에서 찾기 / 다른 로직 블록 · 블록 두 겹 넘으면 고급 | 금액은 맞음(메쌓기 132,132.78) · 걸음 길고 품셈 속 낱말(원문 절 · 중간 값 · 할증·끝수) · 사용자가 같은 날 「수식베이스」로 갈음(09-21 19:17 7번 · 까닭 글 없음) | 09-21 걷음 | +| 6 | 09-21 `98e40f44` `f2052b12` `83752f86` `ce518434` | 흐름 그림을 기본 보기로 + 상자 고치기 + 본떠 만들기 · 컨테이너 셋(기존 · 하이브리드 · C 단독) | 보기·고치기를 한 그림에서 | 상자 안 [고치기] · 정본은 본뜬 뒤 | 사용자 09-21 12:08 「분명히 기존의 방식을 유지하고 하위에 추가 컨테이너로 구현해달라고 했는데」 — 기본 보기를 바꿔 지시 어긋남 · 7시간 뒤 둘 다 삭제 | 09-21 걷음 | +| 7 | 09-21 `4a93cfdf` `42243ba1` | 「로직 개선 시험」 상세 = 컨테이너 넷 · 인력·재료·경비 묶음 · 줄 누르면 자료 모달 | 읽기 쉽게 | 줄 누름 → 모달 | 사용자 09-24 「재료 그룹 항목들은 무반응」 · 표 하나(QF000357)로 뭉침 → 고침 · **읽기용 — 추가·삭제·수정 안 다룸** | 지금 「단가산출 로직」 | +| 8 | 09-21 `448ef666` `c4a5087f` · 09-22 `abd37e89` | 텍스트 수식(두 칸 · 이름 식 / 값 식) | 중간 값 · 덧줄 · 끝수를 줄 글에 녹여 읽게 | 처음엔 [계산] 눌러야 보임 | 사용자 09-22 「내가 해당 단가산출을 접근했을때 바로 보여줘야지」 → 고침 · 이름 식 별칭 안 읽힘(표 키 1,188 · 번호 별칭 654) → 고침 · 그래도 꼴은 `석공노임 * 메쌓기인력.석공 * (1 + 증가율 %) = 석공비` — 점 · 괄호 · % 식 | 있음 | +| 9 | 09-21 `e9447ae7` `be8868ca` | 식으로 새로 만들기(`LogicLab_New*` 4 파일) | 완전 새 로직 — 사용자 제안(09-21 7번 「A X B - C = D … 분석 … 변수 정의」) | `이름 = 식` 줄 적기 → [분석] → 변수마다 「마스터 요소 / 설계 입력 / 고정값 / 표 찾기」 → 단위 → 비목 → 표 찾기는 표 · 값 칸 · **조건 칸마다 식** → 이름 · 결과 단위 · 소유(글자 칸) → 시험 계산 → 저장 | 첫 칸 보기 글부터 식(`잡재료비 = 노무비 * 0.05`) · 변수 갈래 넷 · 비목 · 금액은 ④ 걸음에서야 | 있음(막대 「식으로 새로 만들기」) | +| 10 | 09-21 `e73ef5d3` `c57f0ea0` | 본떠 만들기(복사해서 만들기 · `LogicLab_Copy` 391 줄) | 정본은 못 고침(사용자 확정 3-0) → 수정 = 복사본 | 별칭 꼴 **식 줄 글 칸** 고치기 · 표 바꾸기 모달 · 「그대로 부르기 / 같이 복사하기」 · 소유 · 시험 계산 · 저장 | 식을 직접 고침 · 갈래 말(별칭 · 같이 복사) · 저장 뒤 다른 편집기(#1)로 열림 → **수정 길 두 벌** | 있음(막대 「본떠 만들기」) | +| 11 | 09-21 `cd2e8df3` · 09-22 `f7dd8668` | 알약 — 모달 안 알약 → 수량 칸 안 알약 + 사칙연산 | 계산에 든 표를 하나씩 | 알약 누름 → 그 표 모달 | 사용자 09-22 「모달창 내부 알약을 외부로」 · 알약 글이 처음엔 키(「표 QF000421」) → 「찾은 줄 · 칸」으로 고침 · 같은 표 알약 겹친 로직 564(3장 실측) · **읽기 다듬기** | 있음 | +| 12 | 09-22~24 `79c42224` `cb1b82c1` `4eb81f2b` `f29dc14c` | 열자마자 자동값으로 계산 · 견본 딱지 | 비어서 멈춘 화면(멈춤 180) 없애기 | 없음(자동) | 규칙은 사용자가 정함(09-24 「숫자는 낮은 값 · 글은 첫째 · 참거짓은 거짓」) · 견본 딱지는 「뜻 없음」으로 없앰 · 1,354 멈춤 0 | 있음 — **살릴 것** | +| 13 | 09-24 `f21a6cfb` `af842c03` | 시험 계산 재료·기계 고르기 = 마스터 표 모달 | 키 대신 이름 · 드롭다운 걷음 | 「품목 고르기」 → 표 모달 → 한 줄 | 단위 다르면 경고 딱지 · 저장 안 함 | 있음 — **살릴 것** | +| 14 | 09-24 5·6장 | 무작위 · 전수 점검(1,354) | 보이는 글의 흠 | — | 보이는 글에 엔진 날식이 계속 샘 — 「만약(지게차 == '사용', …)」 · 「로직(GC000268, 기계='0602-0025', 지역=지역)」 · 「{연료}:{지역}」 · `Decimal('100')` · `MT000018.거래가격` — 다 고쳤으나 **식을 보이는 화면은 샘을 끝없이 막아야 함** | 끝 | + +이름 바꾸기도 세 번 — 일위대가 로직 → 단가산출 로직(09-21) · 일위대가 호표 → 단가산출 상세(09-21) · 로직 개선 시험 → 단가산출 로직(09-22). 사용자도 되물음(09-21 23:17 「단가산출 조직을 단가산출 상세로 바꾸는건 아니지?」). + +## 2. 공통 원인 다섯 + +1. **낱말이 만든 사람 말** — 호표 · 덧줄 · 끝수 · 중간 값 · 비목 · 몫 · 별칭 · 정본 / 자체 · GX · 키 · 표 찾기 · 값 칸 · 조건 칸 · 소유(현장 / 공용) · 마스터 요소 · 설계 입력. 근거 — 사용자 「중간 값과 덧줄, 끝수 등 의미가 이해하기 어려움」(09-21) · 같은 표를 「호표」·「단가산출 상세」 두 이름(`_검증_화면글.md` ①) · 이름 세 번 바뀜. +2. **만들기·고치기가 끝내 식 글자** — 지금 남은 길 셋이 모두 식 칸(`이름 = 식` · 별칭 식 · 수량 식·결과 식). 식 없는 시도(#2 · #5 블록)는 하루 안에 걷힘. 식을 보이니 엔진 날식이 화면에 새어 수십 건 막음(#14). +3. **한 화면 · 한 일에 너무 많음, 길은 여러 벌** — 막대 단추 늘 여섯(목록 · 식으로 새로 만들기 · 로직 지우기 · 고친 것 버리기 · 저장 · 본떠 만들기) · 상세 컨테이너 넷 + 편집기 + 접힌 소계 표 · 마법사 여덟 걸음 · 수정 길 둘(#10 별칭 식 ↔ #1 원문 식) · 저장 길 셋(`/save` · `/logic/formula/save` · `/logic/draft` save) · 시험 계산 입력 많게는 19칸(GF000181 맨홀). +4. **결과 · 뒷일이 바로 안 보이고 되돌리기 거침** — 예전 텍스트 수식은 [계산] 뒤에만(사용자 09-22 지적 · 지금은 고침) · 식으로 새로 만들기는 변수를 다 정한 ④ 걸음에서야 금액 · 「로직 지우기」는 표시만 하고 [저장]을 또 눌러야 지워짐 · 「고친 것 버리기」는 통째(한 걸음 되돌리기 없음) · 지우기 전 「이 로직을 누가 쓰나」 안 보임(길 `/logic/combos` 는 있으나 화면이 안 부름). +5. **쉬움을 잰 적 없음** — 검증 줄이 모두 「금액 같음 · typecheck · 날글 0」 · 대표 일을 몇 걸음에 끝내나 · 처음 쓰는 사람이 되나는 안 잼 · 방식 B 는 화면 확인 없이 마감 · 시도 수명 짧음(A·B·C 12시간 · 흐름 그림·마법사 10시간 · 하이브리드·C 단독 7시간) · 09-21 뒤 고친 것은 보기 쪽 24 대 만들기·고치기 2(이름만). + +정해진 틀(원인 아님 · 새 길이 안고 갈 것) — 정본은 못 고침(사용자 확정 09-21) → 수정은 늘 「복사본 만들기」부터. 새 길은 이 걸음을 사용자가 의식하지 않게 한 단추로 감쌀 자리. + +## 3. 새 길이 피할 것 + +- 기본 화면에 식 글자 칸(`이름 = 식` · `찾기(…)` · `만약(…)` · 별칭 식) — 식은 보기 한 줄까지만. +- 위 1번 낱말 — 화면 글은 일상 말로(무슨 말로 바꿀지는 브레인 · 사용자 몫). +- 단추를 늘 다 보이기 — 그 순간 할 수 있는 것만(정본을 연 채 「로직 지우기」가 보이는 일 같은 것). +- 같은 일을 두 길로 — 추가 · 삭제 · 수정 저마다 한 길 · 저장 한 길. +- 지우기를 「표시 → 저장」 두 단계로 · 지우기 전에 쓰는 곳(부르는 로직 · 담은 조합)을 안 보이기. +- 일반 저장 길 `/save` 로 로직 쓰기 — 이 길은 정본을 가리지 않음(코드 읽기 `M01_MasterData_Store.py` `_apply` · **실측 안 함**). 지금 화면 「로직 지우기」도 이 길이라 정본 지우기가 막히는지 확인 필요(브레인 판단). +- 품셈 속 걸음(원문 절 · 중간 값 · 할증·끝수)을 사용자 앞에 늘어놓는 긴 마법사. +- 엔진 날식 · 키(`GC000268` · `QF000421` · `MT000018.거래가격` · `{지역}`)가 화면 글로 새는 것 — 서버 조각 글만 찍음. +- 지금 화면 손대기 — 09-21 낮 기본 보기를 바꿔 버린 일(사용자 12:08 지적)(지시 어긋남)의 되풀이 금지 · 34장 확정대로 `EasyCalc/` 안에서만. +- 「금액 같음」만으로 끝내기 — 34-4 대표 일 여섯 걸음 수 · 예외로 잼. + +## 4. 새 길이 살려 쓸 것 + +### 4-1. 서버 길(`/api/m01` · 엔진 그대로) + +| 길 | 하는 일 | 새 길 쓰임 · 주의 | +|---|---|---| +| `GET /logics?owner=` | 로직 목록 · 소유 거름 | 첫 부름 5.6초 · 다음 0.6초(`_검증_화면늦음.md`) — 첫 화면 기다림 글 필요 | +| `GET /logic?key=` | 로직 한 줄 | 열기 | +| `GET /logic/auto?key=` | 자동값(고르기 첫째 · 수 가장 낮은 값) | 열자마자 계산된 모습 | +| `POST /calc` | 저장 전 초안(`key` "" · `row`)도 계산 · `고름` · 빈 값은 그 줄만 비움 | 고치는 즉시 금액 보이기 — 핵심 | +| `POST /text` | 사람이 읽는 줄 · 조각(알약 · 날식 걸러짐) · 이름 식 / 값 식 | 「어떻게 셈했나」 한 줄 | +| `POST /logic/new` · `/logic/copy` · `/logic/edit` · `/logic/delete` | 자체 로직 전용 · 키 GX 서버 발급 · 정본 403 · 낡은 판본 409 · 검사 422 · 부르는 로직 있으면 지우기 422 | **지금 어느 화면도 안 부름** · 시험 `test_m01_make.py` 8 — 새 길의 추가 · 수정 · 삭제 한 길로 알맞음 | +| `GET /logic/combos?key=` | 이 로직을 담은 일위대가 조합 | 지우기 전 알림 · 지금 안 부름 · 조합이 M02 층으로 옮겨진 뒤 답이 맞는지 확인 필요 | +| `GET /sections` · `/tables?section=` · `GET /table/options` · `GET /table` | 원문 절 · 절의 표 · 표 조건 값 목록 · 표 통째 | 고르기 목록(식 대신 고르기) | +| `GET /elements` · `/pick` · `/materials` · `/rows` | 요소 찾기 · 직종 · 재료 후보 · 마스터 표 | 사람 · 재료 · 장비 고르기 | +| `GET /logic/formula` · `POST /logic/formula/preview` · `/logic/formula/save` | 별칭 식 펴기 · 되돌리기 · 저장 | 화면에 식을 안 보여도 「복사해서 한 칸만 바꾸기」 속 일꾼으로 | +| `POST /logic/draft` | 식 → 변수 뽑기 · 단위 검사 · 물고 도는 식 막기 · 저장 | 고르기로 조립한 식의 검사용 | + +### 4-2. 화면 함수(부를 만한 것) + +| 파일 | 함수 | 하는 일 | +|---|---|---| +| `M01_MasterData_UI_Logic_Api.ts` | `fetchLogics` · `fetchLogic` · `fetchAuto` · `runCalc` · `runText` · `searchElements` · `fetchMaterials` · `copyLogic` · `fetchLogicFormula` · `previewLogicFormula` · `saveLogicFormula` · `draftLogic` · 타입 `LogicRow` · `HoLine` · `LogicInput` · `CalcAnswer` · `TextLine` | 서버 길 부르기 · 로직 모양 | +| `M01_MasterData_Api_Fetch.ts` | `fetchTables` · `fetchTable` · `fetchRows` · `fetchPick` · `searchMaterials` | 표 · 마스터 줄 · 직종 · 재료 찾기 | +| `M01_MasterData_UI_Logic_Money.ts` | `formatMoney` · `formatPrice` | 돈 정수 · 200원 미만 단가 유효숫자 | +| `M01_MasterData_UI_Logic_Text.ts` | `plainReason` · `safeReason` | 멈춤 까닭 쉬운 말 · 날글 거름 | +| `M01_MasterData_UI_Logic_Note.ts` | `loadTable` · `matchRow` · `explain` | 원문 표 읽기 · 걸린 줄 · 식 풀이 | +| `M01_MasterData_UI_Logic_PickTable.ts` | `openPickTable` | 재료 · 기계 표 모달(검색 칸 채워 엶 · 잡힌 줄 칠함) | +| `M01_MasterData_UI_LogicLab_Modal.ts` | `openMaterialModal` · `openTableModal` · `openLogic` | 줄 자료 · 표 모달 | +| `M01_MasterData_UI_LogicLab_Pill.ts` | `pillButton` · `fragmentRow` | 조각 → 알약 · 글자 줄 | +| `ui_template/` | `createButton` · `createInputField` · `createSelectField` · `showConfirmDialog` · `showToast` · 항목 고르기 모달 · 공용 나무 보기(21-5) | 공용 틀 | + +주의 — `LogicLab_*` 는 지금 화면과 같이 바뀌는 파일. `EasyCalc/` 는 `Logic_Api` · `Api_Fetch` · `Logic_Money` · `Logic_Text` · `ui_template` 처럼 덜 바뀌는 것만 부르는 편이 폴더째 지우기 · 지금 화면 고치기 양쪽에 안전. + +### 4-3. 살릴 생각(사용자가 좋다고 한 것) + +- 한 번에 질문 하나(방식 A) — 「신규 등록일 경우 첫번째 방식이 괜찮고」(09-21). +- 한눈에 보는 흐름(방식 C) — 「등록 후 전체를 볼 때는 … 눈에 잘 들어옴」(09-21). +- 인력 · 재료 · 경비 세 묶음 + 소계(09-21 사용자 지시 · 지금 화면). +- 열자마자 계산된 모습 · 돈은 정수(09-24 사용자 규칙). +- 표는 누르면 그 표만 · 재료는 키 아닌 이름 · 고르기는 마스터 표 모달. +- 값이 비면 그 줄만 비우고 계속(전체 멈춤 없음). diff --git a/docs/raw/M01_쉬운단가/시트로직_정함.md b/docs/raw/M01_쉬운단가/시트로직_정함.md new file mode 100644 index 000000000..a3f21d53f --- /dev/null +++ b/docs/raw/M01_쉬운단가/시트로직_정함.md @@ -0,0 +1,38 @@ +# 시트 로직 시험판 — 정함 (PLAN 35-5 · 브레인 · 10-01 오후) + +사용자 허락(그대로): 「일단 이해한대로 시험판을 만들어보자. 완전히 새로운 품셈을 사용자가 만들려면 기존에 있는 정보를 가져올수도 있지만 새로 만들기도 되어야하면 그럴려면 저장이 되어야할것같아. 일단은 시험판이니까 임시폴더 내부에 저장하고 이상하면 한번에 삭제하는거야.」 +제안서 = https://claude.ai/artifact/4iCAGPhE9maauGNTkXg5he · 근거 = 같은 폴더 `로직판_관계제어_점검.md`(지금 시험판은 관계 더하기 · 지우기 · 다시 잇기 · 새 표가 안 됨) · `로직판_엑셀로직_지도.md` 2 · 3절(우리 스프레드시트 엔진 · 서버 Node 다시 셈). + +## 목적 + +사용자가 코딩 · 브레인 없이, 품셈에 묶이지 않고 단가산출 로직을 새로 만들고 · 기존 정보(품셈 표 · 노임 · 자재 · 장비 · 기존 로직)를 가져오고 · 관계를 더하고 · 바꾸고 · 지움. 관계 = 진짜 엑셀 수식 · 입출력 칸 = 알약. + +## 정함 + +1. **로직 한 벌 = 통합문서 하나**(우리 스프레드시트 Workbook) · **상자 하나 = 시트 하나** · **알약 = 이름 붙은 칸**(입력 알약 · 출력 알약). +2. **선 = 입력 알약 칸에 다른 시트 칸 참조 수식을 저절로 씀**(`='표 · 메쌓기'!E7`) — 엔진이 시트 사이 참조를 이미 셈 · 선을 지우면 그 수식을 지움 · 순환은 엔진 `#CYCLE!` + 그을 때 막음. +3. 상자 종류 — 입력값 · 고정값 · 표 · 계산 · 항목 · 다른 로직 · 결과. 모든 상자 아래 판은 같은 시트 편집기 + 종류별 손잡이. +4. **바깥 값 넣기** — 품셈 표 줄 · 노임 · 자재 · 장비 단가 · 기존 로직 결과는 시트에 「바깥 값」 칸으로 넣음: 화면은 열 때 API 로 받아 넣고, 저장 때 서버가 마스터에서 다시 넣은 뒤 셈(브라우저 값 안 받아 적음). 품셈 표는 사본으로 들고 있지 않음(열 때 · 저장 때 마스터에서 새로). +5. **계산 = 우리 스프레드시트 엔진 한 벌** — 화면은 브라우저, 저장은 서버가 같은 TS 엔진을 Node 로(`common_util/common_util_spreadsheet.py` 길 · 계산 자리 ②). 지금 로직 1,469개(파이썬 엔진)는 안 건드림. +6. **저장 = 임시 폴더** `M01_MasterData/SheetLogic/_data/` (폴더 안 `.gitignore` 로 git 밖) · 키 = `SL-0001` 꼴(자체 번호 · `_키대장.json` 안 씀) · 사용자 표도 여기. 폴더 `SheetLogic/` 를 지우면 코드 · 자료가 한 번에 사라짐. +7. **폴더 밖** — 단추 한 곳(LogicLab.ts 가져오기 한 줄 + 부르기 한 줄 · 「로직 만들기(시험)」 옆 「시트 로직(시험)」) · 서버 등록 한 줄(main.py). 기존 서버 · 엔진 · 마스터 파일 · EasyCalc · LogicBuilder 파일은 안 고침(가져다 쓰기만). +8. **화면** — 위 가로 다이어그램 띠(입력값 → 표 → 계산 → 항목 → 결과 · 단계마다 세로 쌓기 · 자리는 저절로 · 상자 양옆에 입력 · 출력 알약 · 출력 알약을 끌어 입력 자리에 놓으면 선) · 아래 왼쪽 = 고른 상자의 시트 판 · 아래 오른쪽 = 결과(합계 · 노무비 · 재료비 · 경비 · 일위대가표 · 예시값). +9. **가져오기** — 기존 로직을 시트 로직으로 바꿔 가져옴(LogicBuilder Blocks 로 읽고 엑셀 수식으로: 만약 → IF · 최소/최대 → MIN/MAX · 올림/버림/반올림 → ROUNDUP/ROUNDDOWN/ROUND · 표 찾기 → 표 상자 + XLOOKUP 또는 INDEX/MATCH) · 시험 로직 6개(GF000208 · GF000219 · GF000025 · GF000249 · GF000133 · GC000051)는 바꾼 값 = 지금 /calc 값이어야 함. +10. **용어** — 시트 로직 · 상자 · 선 · 입력 알약 · 출력 알약 · 입력값 · 고정값 · 표 · 계산 · 항목(노무 · 재료 · 장비 · 일위대가 · 비율) · 다른 로직 · 결과 · 예시값 · 품셈 표 / 내 표 · 노무비 · 재료비 · 경비. + +## 파일 · 창 (모두 `M01_MasterData/SheetLogic/` · 파일마다 700줄 안) + +| 파일 | 창 | 하는 일 | +| --- | --- | --- | +| `M01_SL_Model.ts` · `M01_SL_Eval.ts` | sub7 | 타입(먼저 올림) · 상자 더하기 / 지우기(시트 만들기 · 지우기) · 선 잇기 / 끊기(참조 수식 쓰기 · 지우기) · 알약 정하기 · 검사(순환 · 빈 입력) · 화면 계산(바깥 값 넣기 → 엔진 → 출력 알약 · 결과 읽기) | +| `M01_SL_Router.py` · `M01_SL_Api.ts` · `.gitignore` | sub4 | `_data` 목록 · 열기 · 저장 · 지우기 · 저장 때 바깥 값 다시 넣고 Node 로 셈 · 바깥 값 한 번에 받기(표 · 노임 · 자재 · 장비 · 기존 로직 결과) · 등록 한 줄 | +| `M01_SL_Diagram.ts` + css | sub8 | 위 가로 띠 · 상자 · 알약 · 선(끌어 잇기 · 고르기 · 지우기) · 「+」 상자 더하기 · 이어진 선 진하게 | +| `M01_SL_Panel.ts` + css | sub2 | 아래 시트 판(우리 스프레드시트 편집기 넣기) · 칸 → 입력 / 출력 알약 정하기 · 칸 위 알약 표시 · 틀 단추(할증 · 나누기 · 만약 · 표에서 찾기 — 진짜 수식을 넣어 줌) | +| `M01_SL_Table.ts` + css | sub3 | 표 상자 손잡이 — 품셈 표 고르기(절 · 이름 찾기) → 시트에 넣기 · 내 표(빈 표 · 엑셀 붙여넣기) · 조건 칸 / 결과 칸 알약 · 「표에서 찾기」 수식 돕기 | +| `M01_SL_Item.ts` · `M01_SL_Result.ts` + css | sub5 | 항목 상자 손잡이(노무 · 재료 · 장비 · 일위대가 고르기 → 단가 바깥 값 · 수량 알약 · 노무비 / 재료비 / 경비 출력) · 결과 칸(합계 · 비목 · 일위대가표 · 예시값) | +| `M01_SL_Import.ts` | sub6 | 기존 로직 → 시트 로직(정함 9) · 6개 같은 값 시험 | +| `M01_SL_Entry.ts` + css | sub1 | 단추 · 큰 창 · 시작 화면(내 시트 로직 · 새로 · 기존 로직 가져오기) · 세 칸 틀 · 저장 · 지우기 · 실행 취소 · 저장 안 함 물음 · 잇기 · 끝 검증 | + +## 끝 검증 (sub1 · 사용자처럼) + +관계 제어 점검 여섯이 모두 되어야 함 — S1 할증 문턱 · 석공에만 · 고정 30% · S2 조건을 고정값으로 · 쓰는 표 바꾸기 · 결과 칸 바꾸기 · S3 새 입력값 「경사」 + 「급이면 10%」 · 내 표 만들어 잇기 · 새 항목 · S4 관계 지우기 · S5 한눈에 보기 · S6 로직끼리 잇기 + 완전히 새 로직 하나(품셈 없이) 만들어 저장 → 다시 열기 → 지우기 · 기존 로직 6개 가져와 값 같음 · 저장 때 서버 값 = 화면 값. diff --git a/docs/raw/M01_쉬운단가/시험판_단추_점검.md b/docs/raw/M01_쉬운단가/시험판_단추_점검.md new file mode 100644 index 000000000..f3ed3d65c --- /dev/null +++ b/docs/raw/M01_쉬운단가/시험판_단추_점검.md @@ -0,0 +1,110 @@ +# 시험판 단추 공용 양식 점검 (35-5 · sub7 · 확인만) + +대상 = `M01_MasterData/EasyCalc` · `LogicBuilder` · `SheetLogic` 의 누르는 것 전부. 화면 수치 = 내 포트 5182 ORCA · `getComputedStyle`(전환 끔 · 밝음 · 어두움) · 판정 직전 `/api/auth/session` 200. + +## 0. 한눈에 + +- **날 단추(`el("button")` 직접) 23 자리** — EasyCalc 5 · LogicBuilder 12 · SheetLogic 6(목록 줄 8 · 칩 11 · 「석공 ▾」 2 · 그림 알약 1 · 글 링크 1). 모두 자체 css 꼴(회색 바탕 · 16px · 테두리 1.75px · 둥글기 8 · 999 · **2px**). +- **공용 `createButton` 을 쓰되 css 가 모양을 덮음 4 곳** — 작은(sm 18px · 12px)을 44px · 16px 로(EasyCalc Cards · LB Steps · SL Panel) · 큰 시작 단추 56px(세 시작 화면). +- **한 화면 안 크기가 섞임** — SL 「+ 상자」 「상자 지우기」 18px 옆에 시트 판 단추 44px · LB 「문장 / 격자」 「빈틈 검사」 18px 옆에 산출근거 단추 44px. +- 색은 모두 테마 토큰 — 어두움에서 자체 꼴도 바뀜(SL 상자 · 알약 · 시트 판 알약 확인) · 문제는 **모양(높이 · 둥글기 · 글 크기 · 테두리)**. +- 시험판 들어가는 단추 셋(「쉬운 단가산출(시험)」 「로직 만들기(시험)」 「시트 로직(시험)」)은 공용 filled md 그대로 — 옆 「식으로 새로 만들기」와 같음(32px · 8px · 14px). + +## 1. 공용 양식 + +| 공용 꼴 | 어디 | 모양(밝음 실측) | 쓰임 | +| --- | --- | --- | --- | +| `createButton` md | `ui_template_elements.ts:43` · 꼴 `ui_template_elements_styles.ts:17-80` | 높이 32 · 둥글기 8px(`--radius-buttons`) · 14px · 500 · 테두리 1px | 모든 단추 | +| `createButton` sm | 같음 `.ui-btn--sm` | 높이 18 · 12px · 안쪽 2px 8px | 표 칸 · 카드 머리 작은 단추 | +| 종류 | `filled` 바탕 rgb(38,17,74) 흰 글 · `ghost` 투명 + 보라 테두리 · `pill` 투명 · 둥글기 1440 · `is-active` 때 mist-violet · `danger` 빨강 · `glass` 3D 위 | 어두움 = filled rgb(185,154,255) · ghost 글 같은 보라 | 탭 · 보기 바꿈 = `pill` + `is-active`(전용 탭 부품 없음) | +| `createTag` | `ui_template_elements.ts:217` · `.ui-tag` | 둥글기 1440 · 12px · 안쪽 4px 16px · accent · neutral · success · warning · danger | 누르지 않는 글 알약 | +| 목록 줄 `.ui-sidebar-row` | `ui_template_overlay.css:384-437` (M01 · M02 공용) | 투명 바탕 · 14px · 둥글기 8 · 안쪽 4px 8px · hover paper · `is-active` mist-violet | 왼쪽 목록 · 찾기 결과 줄 | +| 나무 줄 `createTreeRow` | `ui_template_tree.ts:118` | `.ui-sidebar-row` + 화살표 · 아이콘 · 수 | M02 나무 | +| 모달 `openModal` | `ui_template_modal.ts:20` | 머리 줄 닫기 = ghost md | 세 시험판 모두 씀 ✔ | +| (M01 자체) 알약 `pillButton` | `M01_MasterData_UI_LogicLab_Pill.ts:18` `.m01lab__pill` | M01 지금 화면 것 — ui_template 아님 | 수량 칸 안 표 조각 | +| (엔진 공용) 시트 도구막대 `ss-brush` 등 | `A00_Common/spreadsheet` | 25px · 13px · 테두리 없음 | M02 시트와 같음 — 그대로 | + +## 2. 누르는 것 전수 + +✔ = 공용 그대로 · ▲ = 공용인데 css 가 모양을 덮음 · ✖ = 날 단추(자체 꼴) + +### EasyCalc (쉬운 단가산출) + +| 파일:줄 | 화면 글 | 만드는 법 | 실측(높이 · 둥글기 · 바탕 · 글) | 같은 일의 공용 꼴 | 고칠 안 | +| --- | --- | --- | --- | --- | --- | +| `M01_EasyCalc_Entry.ts:177` | 시작 목록 줄 「돌쌓기 메쌓기(인력) · 내가 만든 것」 | ✖ `m01-easycalc__item` | 42 · 8 · rgb(246,247,250) · 16px · 테두리 0.9 | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_EasyCalc_Entry.ts:565` | 빈 종이로 새로 만들기 | ▲ filled + `m01-easycalc__big` | **56** · 8 · 16px | 없음(큰 크기 없음) | 그대로(초등학생 큰 시작 단추) — 공용에 큰 크기 하나 청하면 덮기 지움 | +| `M01_EasyCalc_Entry.ts` 위 띠 | 되돌리기 · 저장 · 지우기 · 닫기 | ✔ ghost · filled · danger md | 32 · 8 · 14px | — | 그대로 | +| `M01_EasyCalc_Cards.ts:273` | 「석공 ▾」(다시 고르기) | ✖ `m01-easycards-name--pick` | 44 · 8 · 회색 · 16px · 400 | `createButton` ghost | 공용 createButton(ghost)로 | +| `M01_EasyCalc_Cards.css:145` | ▲ ▼ 지움 · 숫자로 바꾸기 | ▲ ghost **sm** → css 44px · 16px | 44 · 8 · 16px | sm 18px | 공용 createButton(ghost · md)로 · sm 덮기 지움 | +| `M01_EasyCalc_Cards.css:179` | + 사람 · + 재료 · + 기계 · + 다른 일위대가 · + 덧붙임 | ▲ ghost md → 44px · 16px | 44 · 8 · 16px | md 32 | 그대로 or 공용 큰 크기(청함) | +| `M01_EasyCalc_Cond.ts:421` | 「표에서 찾은 값」 칩 | ✖ `m01-easycond__chip` 점선 · 1440 | 36 · 999 · 투명 · 16px | `pill` 단추 | 공용 createButton(pill)로 | +| `M01_EasyCalc_Pick.ts:288` | 사람 · 재료 · 기계 · 다른 일위대가(무엇) | ✖ `m01-easypick__kind` | (큰 칸) | `pill` + `is-active` | 공용 pill 로 | +| `M01_EasyCalc_Pick.ts:433` | 고르기 목록 줄 「보통인부 인 하루 172,068」 | ✖ `m01-easypick__row` | **52** · 8 · 회색 · **18px** · 테두리 1.75 | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_EasyCalc_Pick.ts` 아래 | 넣기 · 닫기 | ✔ filled · ghost md | 32 | — | 그대로 | +| `M01_EasyCalc_Table.ts:630` | 표 줄 누르기(tr) | 표 칸 | — | 표 | 그대로(표 줄 고르기) | +| `M01_EasyCalc_Table.ts` 5 곳 | 표 고르기 단추 | ✔ ghost · sm | 18 | — | 그대로 | + +### LogicBuilder (로직 만들기) + +| 파일:줄 | 화면 글 | 만드는 법 | 실측 | 같은 일의 공용 꼴 | 고칠 안 | +| --- | --- | --- | --- | --- | --- | +| `M01_LB_Entry.ts:194` | 시작 목록 줄 「돌쌓기 메쌓기(인력) 표준 1㎡」 | ✖ `m01-lb__item` | 42 · 8 · 회색 · 16px | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_LB_Entry.ts:691` | 단계 안내로 새로 만들기 | ▲ filled + `m01-lb__big` | **56** · 16px | — | 그대로(큰 시작) · 공용 큰 크기 청함 | +| `M01_LB_Entry.ts:585-593` | 문장 / 격자(보기 바꿈) | ✔ sm 인데 filled ↔ ghost 를 바꿔 끼움 | **18** · 8 · 12px | `pill` + `is-active`(탭 꼴) | 공용 createButton(pill) + `is-active` 로 | +| `M01_LB_Entry_Result.ts` | 빈틈 검사 · 지금 예시값으로 한 줄 더하기 · 모두 돌리기 | ✔ ghost sm | 18 · 12px | — | 공용 그대로 · 단 옆 산출근거 44px 와 크기 다름 → md 로 | +| `M01_LB_Source.ts:177` | 표 머리 역할 칩 「조건」 「결과」 「고정」 | ✖ `m01-lbsrc__chip` | 20 · 999 · 옅은 보라 / 초록 · 12px | `createTag`(accent · success) 꼴 + 누름 | 공용 pill sm 로(색은 tag 갈래) | +| `M01_LB_Source.ts:241` | 이 표를 쓰는 로직 N 개 | ✖ `m01-lbsrc__users` 글 단추 | 21 · 0 · 테두리 없음 · 14px | 없음(글 링크) | 그대로(글 링크) 또는 ghost sm | +| `M01_LB_Source.ts:286` | 표 칸 누르기(td) | 표 칸 | — | — | 그대로 | +| `M01_LB_Steps.ts:206` | 「석공 ▾」 | ✖ `m01-lbsteps-pick` | (EasyCalc 와 같은 꼴) | ghost | 공용 createButton(ghost)로 | +| `M01_LB_Steps.css:163` | 산출근거 안 단추 모두 | ▲ `.m01-lbsteps .ui-btn` → 44px · 16px | 44 | — | 공용 md 로(덮기 지움) | +| `M01_LB_Grid.ts:509` | 격자 줄 누르기(tr) | 표 줄 | — | — | 그대로 | +| `M01_LB_Wizard.ts:250 · 291` | 단계 안내 절 · 표 목록 줄 | ✖ `m01-lbw__row` | (목록 줄) | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_LB_Wizard.ts:376` | 칸 역할 「조건 · 고정 · 결과」 | ✖ `m01-lbw__role` | (역할 칩) | pill + is-active | 공용 pill 로 | +| `M01_LB_Wizard.ts:499` · `Wizard_Calc.ts:199 · 448 · 459` | 종류 · 틀 · 항목 연결 · 건너뛰기 칩 | ✖ `m01-lbw__chip` | (칩) | pill + is-active | 공용 pill 로 | +| `M01_LB_Wizard_Calc.ts:172` | 주 고르기 | ✖ `m01-lbw__note` | (칩) | pill + is-active | 공용 pill 로 | + +### SheetLogic (시트 로직) + +| 파일:줄 | 화면 글 | 만드는 법 | 실측 | 같은 일의 공용 꼴 | 고칠 안 | +| --- | --- | --- | --- | --- | --- | +| `M01_SL_Entry.ts:178` | 시작 목록 줄(기존 로직 가져오기) | ✖ `m01-sl__item` | 42 · 8 · 회색 · 16px | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_SL_Entry.ts:297` | 새로 만들기(빈 판) | ▲ filled + `m01-sl__big` | **56** · 16px | — | 그대로(큰 시작) · 공용 큰 크기 청함 | +| `M01_SL_Entry_Paper.ts` | 실행 취소 · 저장 · 지우기 · 닫기 | ✔ ghost · filled · danger md | 32 | — | 그대로 | +| `M01_SL_Diagram.ts` | + 상자 · 상자 지우기 | ✔ filled sm · danger sm | **18** · 12px | — | 공용 md 로(옆 시트 판 44px 와 맞춤) | +| `M01_SL_Diagram.ts:181` | 상자 양옆 알약 「뒷길이 25」 「? 단가 268,908」 | ✖ `m01-sldg__pill` | 20 · 999 · 입력 옅은 주황 / 출력 옅은 보라 / 빈 칸 점선 · 12px | 그림 요소(공용 없음) | 그대로(다이어그램 그림) — 둥글기 · 글은 tag 와 같음 | +| `M01_SL_Diagram.ts:249` | 상자 누르기(div) | 그림 상자 | 80~152 · 8 | — | 그대로 | +| `M01_SL_Panel.ts:323` | 시트 판 알약 「입력 · 뒷길이 (B2)」 | ✖ `m01-slpanel-pill` | **44** · 1440 · 회색 · 16px · 테두리 1.75 | pill 단추 · 그림 알약(20px)과 같은 것인데 꼴 다름 | 공용 pill 로 · 다이어그램 알약과 한 꼴 | +| `M01_SL_Panel.css:35` | 입력 알약으로 · 출력 알약으로 · 할증 · 나누기 · 만약 · 표에서 찾기 | ▲ ghost **sm** → 44px · 16px | 44 · 8 | sm 18 | 공용 md 로 · sm 덮기 지움 | +| `M01_SL_Table.ts:301 · 338` | 품셈 표 찾기 결과 줄 | ✖ `m01-sltbl__row` | (목록 줄) | `.ui-sidebar-row` | 공용 목록 줄 꼴로 | +| `M01_SL_Table.ts:509` | 칸 역할 「높이 조건 → 입력 알약」 | ✖ `m01-sltbl__role` | **63** · **2px**(토큰 밖) · 회색 · 16px · 테두리 1.75 실선 / 점선 | pill + is-active | 공용 pill 로 · 둥글기 2px 버림 | +| `M01_SL_Item.ts` | 종류 고르기 · 다시 고르기 · 단가 다시 가져오기 | ✔ ghost · sm | — | — | 그대로 | +| 시트 도구막대 | 서식… · 붓 · ↑ … | 엔진 `ss-brush` | 25 · 0 · 13px | M02 시트와 같음 | 그대로 | + +## 3. 어두움(실측 — SL) + +| 꼴 | 바탕 | 글 | +| --- | --- | --- | +| filled md · sm | rgb(185,154,255) | rgb(22,18,31) | +| ghost | 투명 | rgb(185,154,255) | +| danger sm | rgb(232,105,90) | rgb(22,18,31) | +| `m01-sldg__box` | rgb(30,25,48) | rgb(228,224,240) | +| `m01-sldg__pill`(입력) | 어두운 주황 | rgb(229,168,102) | +| `m01-slpanel-pill` | rgb(30,25,48) | rgb(228,224,240) | + +→ 자체 꼴도 토큰이라 어두움에서 깨지지 않음 · 고칠 것은 모양뿐. + +## 4. 고칠 안 (갈래별) + +1. **목록 줄 8 자리**(Easy 시작 · Easy 고르기 · LB 시작 · LB 단계 절 · 표 · SL 시작 · SL 표 찾기 둘) → 공용 `.ui-sidebar-row` 꼴. 초등학생용 큰 줄이 필요하면 ⬜ 공용에 「큰 줄」 갈래 하나를 청함(자체 css 로 덮지 않음). +2. **칩 · 역할 · 틀 11 자리 + 보기 바꿈 1**(Cond 칩 · Pick 종류 · LB 역할 칩 · 단계 안내 칩 넷 · 역할 · 주 · SL 칸 역할 · SL 시트 판 알약 + LB 문장/격자) → 공용 `createButton({ variant: "pill" })` + `is-active`. 역할 색(조건 보라 · 결과 초록)은 `ui-tag` 색 갈래를 빌림. +3. **「석공 ▾」 다시 고르기 2 곳**(Easy Cards · LB Steps) → 공용 `createButton({ variant: "ghost" })`. +4. **sm 를 44px 로 덮는 css 3 곳**(Easy Cards · LB Steps · SL Panel) → 덮기 지우고 공용 md(32px). 한 화면에 18 · 32 · 44 가 섞이지 않게 — SL 「+ 상자」 · LB 「빈틈 검사」 sm 도 md 로. +5. **큰 시작 단추 3 곳**(56px) → 그대로(설계 「초등학생 큰 단추」) · ⬜ 공용에 큰 크기(`lg`)를 더하면 그것으로 바꿈. +6. **그대로** — 다이어그램 상자 · 알약(그림 요소) · 표 줄 · 표 칸 누르기 · 시트 도구막대(엔진 공용) · 「이 표를 쓰는 로직 N 개」 글 링크. +7. SL 칸 역할 둥글기 **2px** 는 토큰(8 · 1440) 밖 — 2번에서 함께 바뀜. + +## 덧 + +- EasyCalc 시작 화면 「내가 만든 것」 줄이 **53 개** — 여러 창의 시험 저장이 `로직_자체.json`(공유 storage)에 남은 것으로 보임(점검 범위 밖 · 사실만). +- 측정 주의 — 보기 바꿈처럼 class 를 바꾼 직후 `getComputedStyle` 은 0.12 초 전환 중 값을 줌 → 전환을 끈 뒤 잼. diff --git a/docs/raw/M01_쉬운단가/원가다이어그램_정함.md b/docs/raw/M01_쉬운단가/원가다이어그램_정함.md new file mode 100644 index 000000000..bc9680deb --- /dev/null +++ b/docs/raw/M01_쉬운단가/원가다이어그램_정함.md @@ -0,0 +1,40 @@ +# 단가산출 다이어그램 시험판 — 정함 (PLAN 35-7 · 브레인 · 10-01 오후) + +사용자 기준(10-01 14시 무렵 · 요약): 다이어그램은 요소 종류로 칸을 나누지 않고 자유 배치 · 단가산출 로직 = 최종 원가를 내는 로직 · 상자는 입력 · 함수 · 출력 · 입력 상자 = M01 저장 그룹(인력 · 재료 · 유가/전력 · 기계 · 소요량 · 계수 · 환율) · 입력 상자를 누르면 그 정보 — M01 그룹 내용 · 요소 고르기 · M01 표 「추가」 화면을 다시 써서 추가 / 삭제 · 그룹 밖 정보(면적 · 길이 · 부피)는 변수 + 입력 정의 · 함수 상자도 변수 + 입력 정의 · 함수 상자는 받은 입력을 엑셀로 셈해 결과를 다음으로 · 함수 상자 하나 = 함수 하나(연속 연산 가능 · 출력은 하나) · 함수 상자 직렬 · 병렬 · 모든 상자 오른쪽 위에 단위(무차원 · 글 · 어려우면 「-」) · 출력 상자는 입력 · 함수 상자에 이어지고 어떤 비용인지(노무비 · 재료비 · 경비 …) 정함 · 품셈 분석보다 사용자와 브레인이 같이 쓸 프로그램이 먼저 · 상자 색 지정 · 엑셀 · 다이어그램 영역 더 높게 · 「상자와 선」 이름은 「다이어그램」 · 별도 단추로 시험판 페이지 · M02 폴더 · 기존 시험판과 다른 폴더 · 화면에 보일 임시 파일도 같은 폴더. + +## 기준 점검 — 빠진 곳 · 두 뜻인 곳과 브레인 정함(사용자가 바꿀 수 있음) + +1. **요율이 입력 그룹에 없음** — M01 에는 요율(19줄 · 공구손료 등 비율)이 있음 → 입력 그룹에 넣음. +2. **유가/전력 · 품셈재료** — M01 에서는 재료 그룹 안의 파일 → 입력 그룹에서 유가/전력은 따로 · 품셈재료는 재료 안. +3. **소요량 · 계수는 조건 표** — 요소 하나가 아니라 「조건 칸 → 값 칸」 표 → 입력 상자는 표(또는 고른 줄 하나)를 내보내고, 조건에 맞는 줄 찾기는 함수 상자의 엑셀 수식(XLOOKUP · INDEX/MATCH)이 함. +4. **함수 상자 「함수 하나 · 연속 연산 · 출력 하나」** — 상자 안에서는 여러 칸으로 이어 셈해도 되고, 밖으로 나가는 출력은 한 칸만. +5. **비용이 아닌 출력** — 시간당 작업량처럼 다른 로직이 받을 값도 있음 → 출력 종류에 「값(비용 아님)」 더함. +6. **최종 원가 합계** — 출력 상자들을 비목별로 모아 원가(노무비 · 재료비 · 경비 · 계 · 기준단위당)를 보이는 칸을 둠. +7. **「추가 / 삭제」 뜻** — 입력 상자에 넣을 요소를 M01 그룹 화면에서 골라 넣고 빼는 것. 그룹에 없는 새 요소는 M01 표 「추가」 화면 꼴로 만들되 마스터에 쓰지 않고 시험 폴더에 「사용자 요소」로 저장. +8. **단위** — 상자 오른쪽 위 = 그 상자 출력의 단위 · 입력 상자는 요소 단위를 따름(요소가 여럿이면 알약마다 · 상자 표시는 「-」) · 함수 · 출력 상자는 사용자가 정함(기본 「-」). +9. **색** — 종류별 기본 색(입력 · 함수 · 출력이 서로 다름) + 상자마다 색 바꾸기. +10. **들어가는 곳** — 별도 단추 「단가산출 다이어그램(시험)」 = M01 단가산출 막대의 다른 시험판 단추 옆 · 누르면 화면 전체를 덮는 시험판 페이지(닫기로 돌아감) — 길잡이(router)는 안 고침. +11. **폴더** — `M02_MasterTemplete/CostFlow/` · 저장 · 임시 파일 = 그 안 `_data/`(git 밖) · 화면에 처음 보일 견본 로직 = 그 안 `_sample/` · 폴더째 지우면 끝 · SheetLogic · LogicBuilder 폴더에 기대지 않음(필요한 코드는 새 폴더로 옮겨 고쳐 씀 · 엔진 · ui_template · M01 Api 는 가져다 씀). +12. **다이어그램** — 상자는 끌어 자유 배치(자리 저장) · 판 끌기 · 확대 / 축소 · 선은 굽은 선 · 고른 상자와 이어진 선만 진하게 · 「다이어그램」 이름 · 높이 크게(화면 위쪽 큰 영역) · 아래 고른 상자 판도 크게(안쪽 스크롤 없이). +13. **우선** — 품셈 1,469 로직 옮기기 · 분석은 안 함 · 사용자와 브레인이 같이 쓰는 프로그램 먼저. + +## 상자 · 선 약속 + +- 입력 상자: 갈래 = 그룹(인력 · 재료 · 유가/전력 · 기계 · 소요량 · 계수 · 환율 · 요율) 또는 변수 · 그룹이면 고른 요소마다 출력 알약(이름 · 값 · 단위) · 소요량 / 계수면 표(또는 한 줄) 알약 · 변수면 변수마다 알약(이름 · 갈래 숫자 / 선택 / 글 · 단위 · 범위 · 예시값). +- 함수 상자: 시트 하나 · 입력 알약(받는 칸) 여럿 · 변수(입력 정의) · **출력 알약 하나** · 단위. +- 출력 상자: 받는 자리 하나 · 비용 종류(노무비 · 재료비 · 경비 · 값) · 단위. +- 선: 입력 → 함수 · 입력 → 출력 · 함수 → 함수(직렬) · 여러 함수 → 한 함수(병렬 모음) · 함수 → 출력. 출력에서 나가는 선 없음 · 순환 막음. +- 계산: 우리 스프레드시트 엔진 한 벌 · 화면은 브라우저 · 저장은 서버가 같은 엔진 Node 로 다시 셈 · 입력 값(노임 · 단가 · 표)은 열 때 · 저장 때 마스터에서. + +## 파일 · 창 (`M02_MasterTemplete/CostFlow/` · 700줄 안) + +| 파일 | 창 | +| --- | --- | +| `M02_CF_Model.ts` · `M02_CF_Eval.ts` | sub7 — 타입 먼저 | +| `M02_CF_Router.py` · `M02_CF_Api.ts` · `.gitignore` | sub4 | +| `M02_CF_Diagram.ts` + css | sub8 | +| `M02_CF_FuncPanel.ts` + css | sub2 | +| `M02_CF_InputPanel.ts` + css | sub3 | +| `M02_CF_OutputPanel.ts` · `M02_CF_Summary.ts` + css | sub5 | +| `_sample/*.json` · `M02_CF_Sample.ts` | sub6 | +| `M02_CF_Entry.ts` + css | sub1 — 단추 · 시험판 페이지 · 잇기 · 끝 검증 | diff --git a/docs/raw/M01_쉬운단가/흐름도_적용_정함.md b/docs/raw/M01_쉬운단가/흐름도_적용_정함.md new file mode 100644 index 000000000..2536a147b --- /dev/null +++ b/docs/raw/M01_쉬운단가/흐름도_적용_정함.md @@ -0,0 +1,37 @@ +# 흐름도 본 프로그램 적용 — 정함 (PLAN 36 · 브레인 · 10-01 23시) + +사용자 지시 · 결정은 PLAN.md 36장 머리 줄(그대로 인용)이 기준. 아래는 창끼리 맞출 약속. + +## 목적 + +「단가산출 로직」 화면에서 로직을 열면 왼쪽 = 지금 내용(보기) · 오른쪽 = 같은 로직의 흐름도(고치는 곳). 한 로직 · 두 보기 · 고칠 곳은 흐름도 한 곳. 옛 로직은 열 때 흐름도로 자동 변환(파일은 안 바뀜) · 흐름도로 [저장]하면 그 로직은 흐름도가 정본. + +## 약속 + +1. **로직 줄 「흐름」 칸** — 마스터 로직 줄(`resources/master_data/로직_*.json` 의 `줄[]`)에 `흐름`(CfLogic JSON · DataFlow Model 꼴 그대로). 있으면 흐름도가 정본. 쓰는 때 = 화면 [저장](기존 LogicLab `POST /save` 의 줄에 실어 보냄)뿐 · 자동 변환 결과를 파일에 쓰지 않음. 서버는 저장 때 흐름을 검사(Model 검사 꼴)하고 서버 셈으로 다시 셈. +2. **흐름 받기 길** — `GET /api/m01/logic/flow?file=&key=` → `{flow: CfLogic, converted: bool, notes: string[]}` · 줄에 `흐름` 이 있으면 그대로(converted false) · 없으면 변환(converted true · notes = 못 옮긴 곳 쉬운 말). 변환 모듈 = `M02_MasterTemplete/DataFlow/M02_DF_Convert.py`(sub7 · 서버 단독 · 옛 식 파서는 지금 서버가 쓰는 것을 그대로 씀). +3. **변환 규칙** — 입력 → 입력 상자(변수 · 고르기 = choice · 범위) · 중간 식 → 함수 상자(식 하나 = 결과 하나) · 호표 줄 → 요소 알약(단가) + 수량 함수 + 출력 상자(비목별: 노무비 · 재료비 · 경비) · 결과 식 · 덧줄 · 끝수 → 함수 · 끝수 · 옛 식에 나온 이름마다 알약을 칸에 연결하고 식은 칸 주소로(M02 방식) · 만약 → IF · 또는 → OR · 최대/최소 → MAX/MIN · 올림/반올림/버림 → ROUNDUP/ROUND/ROUNDDOWN · 찾기(표, 조건=값).칸 → 표 알약 + 선 규칙 「표에서 찾기」 · 로직(…) → 다른 로직 입력 상자 · 자동 배치(입력 왼쪽 → 함수 가운데 → 출력 오른쪽 · 겹침 없음). 전수 대조 = 1,472 로직마다 옛 셈 값(기본 입력 · 시험입력) = 변환 흐름도 셈 값 · 맞는 비율 · 안 맞는 까닭 목록(읽기만 · 파일 안 씀). +4. **계산 길** — 기존 M01 계산(`/calc` 꼴 · 시험 계산 · 다른 화면이 부르는 셈)이 줄에 `흐름` 이 있으면 DataFlow 서버 셈(`M02_DF_Compute.py`)으로 · 없으면 지금 셈 그대로. 입력 이름 = 흐름의 「설계 때 정할 것」(변수 이름) 그대로. +5. **오른쪽 패널** — `M02_MasterTemplete/DataFlow/M02_DF_Panel.ts`(sub8) `mountFlowPanel(host, opts) → handle` · opts = { logic: CfLogic; readOnly?: boolean; title: string; onChange(lg: CfLogic): void; logics?(key) } · handle = { set(lg), destroy(), expand() } · 다이어그램 · 상세 내용 · 원가 · 검증 칸을 패널 안에(세로로) · 너비 끌어 조절 · 접기 · 「크게 보기」(전체 화면 · 닫으면 패널로) · 저장 단추는 패널에 없음(페이지 [저장] 하나) · 실행 취소는 패널 안. +6. **페이지 저장 하나** — 패널 조작 = 페이지 캐시(drafts · sessionStorage)에 쌓임 · [저장] 한 번에 줄(흐름 포함) 보냄 · [고친 것 버리기] = 흐름도 고친 것도 버림 · 자동저장 없음. +7. **왼쪽 보기(흐름 로직)** — 기본정보(지금대로) · 단가산출 상세 = 흐름도 출력 상자를 비용 종류별 줄(이름 · 단위 · 값) · 소계 · 계 · 텍스트 수식 = 함수 상자마다 「식 보기」 두 줄(이름 식 · 값 식) · 시험 계산 = 계산 길(4) 그대로. 흐름 없는 옛 로직의 왼쪽은 지금 그대로. +8. **식 보기 · 조건 만들기** — `M02_DF_FormulaView.ts`(sub2) `formulaLines(box: CfBox, values) → { name: string; named: string; valued: string; branches?: {when: string; then: string; now: boolean}[] }[]` (칸 주소 → 연결 알약 이름 · ×, ÷ · IF 는 만약 / 아니면 줄) — 상세 내용 함수 판과 왼쪽 텍스트 수식(sub5)이 함께 씀. 「조건 만들기」 = 엑셀 시트 안 기능(`A00_Common/spreadsheet/spreadsheet_condition.ts` 새 파일 · 편집기 우클릭 「조건 만들기」 · 부르는 쪽이 `conditions` 선택을 줄 때만 보임 → M02 화면은 그대로) · 만약 [칸 · 알약] [비교] [값] → [칸 · 값] 줄 · 아니면 만약 · 아니면 → 고른 칸에 IF 식 · 값 목록은 부르는 쪽 `valuesFor(a1)` 이 줌. +9. **선 조건(조건 통과)** — 웹앱 모양 그대로 · CfRule gate = `{ kind: "gate"; conds: { from: CfPort; op; value }[]; join: "그리고" | "또는" }`(옛 한 줄 꼴도 읽음) · Model `valueChoices(lg, port) → (string | number)[] | null`(변수 고르기 · 표 칸 값 · 재료 규격 · 없으면 null = 숫자 칸 + 범위 검사) · 규칙 → 받는 칸 엑셀 식 · 서버 Compute 같은 뜻 · 선 이름표 「지반 = 토사 그리고 높이 ≥ 3 일 때만」. +10. **단추** — 「식으로 새로 만들기」 지움 · 「신규 로직」(빈 흐름도 + 기본정보 칸 이름 · 원문번호 · 결과 단위 · 출처 · 구분 자체 → drafts 새 줄 → [저장] 때 서버가 GX 새 키) · 「본떠 만들기」 → 「로직 복사/생성」(신규 로직 오른쪽 · 흐름도 있으면 함께 복사) · 「시험판 ▾」 과 시험판 단추 둘 지움. +11. **다른 로직 입력** — 고를 대상 = 마스터 로직 전체(기존 로직 목록 찾기) · 내보내는 알약 = 그 로직 출력(흐름이면 출력 상자 · 옛 로직이면 노무비 · 재료비 · 경비 · 계) · 받는 알약 = 그 로직 입력 · 값 = 서버 계산 길(4). +12. **권한** — 흐름도 고치기 · 저장 = 시스템 관리자(공용 로직 포함) · 그 밖은 보기만. +13. **안전** — 서버는 환경 변수 `AISLO_MASTER_DIR` 가 있으면 그 폴더를 마스터 폴더로(없으면 지금대로 · sub4). 화면 저장 시험은 자기 폴더 `tmp/master_copy_36/`(resources/master_data 사본) + 그 변수로 띄운 자기 서버에서만 · 끝나면 git status 로 resources/master_data 안 바뀜 확인. 시험(pytest)은 사본 폴더 · 마스터 내용에 기대지 않음. +14. **정리** — DataFlow · CostFlow 폴더 그대로 · 흐름도 시작 화면 견본 목록 지움 · 시험이 쓰는 견본은 `resources/tester/fixtures_df/` 로 옮기고 그 밖 견본 지움 · 시험판 입구 지움. + +## 창 + +| 창 | 맡음 | +| --- | --- | +| sub7 | 36-0b 선 조건 틀(gate conds · join · valueChoices · Rule 식 · 시험) 먼저 → 36-2 변환(M02_DF_Convert.py · 자동 배치 · 전수 대조) | +| sub2 | 36-0 상세 내용 함수 판 「식 보기」 · 칸 연결 표 · 칸 색 · M02_DF_FormulaView.ts · 엑셀 「조건 만들기」(spreadsheet_condition.ts) · LinkPanel 조건 여러 줄 · 값 목록 고르기 | +| sub6 | 36-1 조사(옛 식 문법 전수 · 파서 위치 · 못 옮기는 꼴 · 계산 길을 부르는 곳) → sub7 에 넘김 → 36-7 정리(견본 · 시험 옮김) | +| sub8 | 36-3 M02_DF_Panel.ts(패널 꼴 · 너비 · 접기 · 크게 보기) · 선 이름표 여러 조건 | +| sub4 | 36-4 서버 — 「흐름」 칸 저장 · 검사 · /api/m01/logic/flow · 계산 길 갈래 · 신규 GX · 복사에 흐름 · 권한 · AISLO_MASTER_DIR · Compute 여러 조건 | +| sub5 | 36-4 왼쪽 보기(흐름 로직의 단가산출 상세 · 텍스트 수식 · 시험 계산) | +| sub3 | 36-6 다른 로직 입력 = 마스터 로직 고르기 · 값 | +| sub1 | 36-5 단추 · 시험판 지움 · LogicLab 두 칸 배치 · 패널 잇기 · drafts 저장 하나 → 36-8 끝 검증 | diff --git a/docs/raw/M01_쉬운단가/흐름도_적용_조사.md b/docs/raw/M01_쉬운단가/흐름도_적용_조사.md new file mode 100644 index 000000000..c2672300d --- /dev/null +++ b/docs/raw/M01_쉬운단가/흐름도_적용_조사.md @@ -0,0 +1,121 @@ +# 흐름도 본 프로그램 적용 — 36-1 옛 식 조사 (sub6 · 읽기만) + +근거 = 마스터 로직 파일 57 개 · 로직 줄 **1,472**(자체 `로직_자체.json` 포함) · 식을 지금 서버 파서(`master_formula.parse`)로 전부 읽음 — **못 읽는 식 0** · 파일 안 씀. +수 칸 = 「나온 수(식 마디 수) / 그 꼴이 든 로직 수」 · 예 = 키 + 식 앞부분. + +## ① 옛 식을 푸는 서버 코드 + +| 무엇 | 자리 | +| --- | --- | +| 식 문법 · 파서(`_Parser` — 또는 → 그리고 → 비교 → + - → * / → 부호 · `.칸` → 기본) | `resources/master_data/scripts/master_formula.py:56`(`parse` :225 · 함수 목록 `FUNCS` :23 = 만약 · 올림 · 버림 · 반올림 · 최소 · 최대 · 비교 `_OPS` :27) | +| 기본 마디 — `( )` · `'글'` · 수 · `찾기(표, 조건=값…)` · `로직(키, 넘길=값…)` · 함수 · 요소 키(`LB000002`) · `ID:원문번호{입력}`(`EQ:{기계}`) · 이름 | 같은 파일 `primary` :185 · 요소 키 판정 `mk.KEY`(`master_keys.py`) | +| 셈(나무 풀기) — 이름 · 요소 값 · 찾기 · 로직 부름 · 함수 · 사칙 · 비교 · 그리고 / 또는(지름길) | `master_formula.py:385` `evaluate` | +| 표 찾기 — 빈 조건 칸 = 무엇이든 · 범위규칙(초과·이하 · 이상·이하 · 이상·미만 · 이하) · 여러 줄이면 위 끝 최소 · 찾는 칸 있는 줄 | `master_formula.py:331` `_match` · `:362` `find` | +| 로직 한 줄 셈 — 입력 검사 → 중간 차례 → 결과 식 또는 호표 줄(수량 × 단가 · 로직 줄은 비목 나눔) → 덧줄(앞 줄까지 비목 합) → 끝수 | `master_formula.py:538` `run` · 입력 `_inputs` :489 · 빈 가격 입력 `fill_empty` :479 · 끝수 `cut` :468 · `{입력}` 채우기 `fill` :314 | +| 요소 값 · 재료 단가 | `master_material.py:238` `element` · `master_pick.py:130` `priced` · `:123` `pick`(검색어 묶음 → 품목) | +| 정적 검사(저장 때) | `master_formula.py:744` `check_logic` · `M01_MasterData_Store_Cache.py:69` `_check` | +| M01 셈 진입 | `M01_MasterData/M01_MasterData_Store.py:543` `calc`(사본 읽기 → 줄 바꿔 끼움 `_swap` :524 → `cm.calc`) · `:572` `text`(읽는 식 줄 `master_text.py:493 lines`) · `:563` `auto`(견본 입력) | +| 일괄 | `check_master.py:174` `calc` · `:511` `calc_all`(시험입력으로 전 로직) | + +## ② 1,472 로직 식 말 전수 + +| 꼴 | 나온 수 | 로직 수 | 예(3) | +| --- | --- | --- | --- | +| 따옴표 글 | 12,536 | 1,085 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000273, 기계='6516-0060')` | +| 이름 = 입력 | 10,815 | 1,178 | GC000994 `찾기(QC001863, 지반구분=지반구분).시공량` · GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 찾기(…).칸 | 8,156 | 1,401 | GC000994 `찾기(QC001863, 지반구분=지반구분).시공량` · GC000995 `찾기(QC001864).시공량` · GC000996 `찾기(QC001865).시공량` | +| 찾기(표 · 조건) | 8,156 | 1,401 | GC000994 `찾기(QC001863, 지반구분=지반구분).시공량` · GC000995 `찾기(QC001864).시공량` · GC000996 `찾기(QC001865).시공량` | +| 사칙 * | 7,697 | 1,037 | GC000994 `찾기(QC000237).크롤러드릴_공기식 * 8 / 시공량` · GC000996 `찾기(QC001865).'그라우팅 믹서(190×2ℓ)' * 8 / 시공량` · GC000997 `찾기(QC001866).크레인 * 8 / 시공량` | +| 이름 = 중간값 | 7,367 | 1,184 | GC000994 `찾기(QC000237).보링공 / 시공량` · GC000995 `찾기(QC001864).철근공 / 시공량` · GC000996 `찾기(QC001865).보링공 / 시공량` | +| 사칙 / | 3,824 | 1,019 | GC000994 `찾기(QC000237).보링공 / 시공량` · GC000995 `찾기(QC001864).철근공 / 시공량` · GC000996 `찾기(QC001865).보링공 / 시공량` | +| 비교 == | 3,736 | 451 | GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` · GC000999 `만약(시공구분 == '기계시공', 찾기(QC001868, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` · GC001000 `만약(시공구분 == '기계시공', 찾기(QC001869, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` | +| 함수 만약 | 3,541 | 477 | GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` · GC000999 `만약(시공구분 == '기계시공', 찾기(QC001868, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` · GC001000 `만약(시공구분 == '기계시공', 찾기(QC001869, 시공구분=시공구분, 수종=수종, 흉고직경=흉고직경).고소작업차 * 8` | +| 호표 요소 = 키(인력) | 3,451 | 1,369 | GC000994 `LB000014` · GC000995 `LB000008` · GC000996 `LB000014` | +| 사칙 + | 3,094 | 668 | GC000996 `(보링공 * LB000014 + 기계설비공 * LB000051 + 특별인부 * LB000003) * 11 / 100` · GC000997 `(중급기술자 * LB000286 + 보링공 * LB000014 + 특별인부 * LB000003 + 보통인부 * LB000002` · GC000998 `(철공 * LB000009 + 보통인부 * LB000002) * 3 / 100` | +| 로직(다른 로직 부르기) | 1,116 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 로직 넘길 값 있음 | 1,089 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 호표 요소 = 로직 부르기(장비 · 일위대가) | 1,075 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 호표 비목 없음(로직 줄 → 비목 나눔) | 1,075 | 506 | GC000994 `로직(GC000276, 기계='5401-0017', 지역=지역)` · GC000996 `로직(GC000273, 기계='6105-0190')` · GC000997 `로직(GC000268, 기계=크레인, 지역=지역)` | +| 찾기 조건 없음(표 한 줄) | 1,022 | 286 | GC000994 `찾기(QC000237).보링공 / 시공량` · GC000995 `찾기(QC001864).시공량` · GC000996 `찾기(QC001865).시공량` | +| 요소 키 부르기(인력) | 924 | 393 | GC000996 `(보링공 * LB000014 + 기계설비공 * LB000051 + 특별인부 * LB000003) * 11 / 100` · GC000997 `(중급기술자 * LB000286 + 보링공 * LB000014 + 특별인부 * LB000003 + 보통인부 * LB000002` · GC000998 `(철공 * LB000009 + 보통인부 * LB000002) * 3 / 100` | +| 호표 요소 = 재료 고르기 묶음(구분 · 상세구분 · 검색어) | 673 | 231 | GC000319 `{"구분": "도료·방수·접착", "상세구분": "도료", "검색어": "융착식 프라이머"}` · GC000337 `{"구분": "철근·강재", "상세구분": "철망·와이어메쉬", "검색어": "철망 Φ3.2."}` · GC000723 `{"구분": "잡재료", "상세구분": "용접·가스", "검색어": ""}` | +| 논리 또는 | 297 | 35 | GC000346 `(만약(공법군 == '발파굴착A군' 또는 공법군 == '기계굴착A군', 착암공인원, 0)) * 배율` · GC000111 `만약(토질_암분류 == '호박돌 섞인 고결토・경질토' 또는 토질_암분류 == '풍화암', 로직(GC000267, 기계='020` · GC001136 `찾기(QC002058, '규격(㎜)범위'=만약(규격 == 'ø15' 또는 규격 == '20' 또는 규격 == '25' 또는 규` | +| 사칙 - | 273 | 156 | GC000998 `찾기(QC001867).시공량 * (1 - (수직고초과단계 * 9 - 경사가산) / 100)` · GC001008 `찾기(QC001880, 기계구분=기계구분).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC00` · GC001009 `찾기(QC001883).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC001884, 연간시공횟` | +| 논리 그리고 | 199 | 23 | GC001120 `만약(부위 == '뿜칠재' 그리고 뿜칠면 == '콘크리트면', 1.2, 1)` · GC000753 `찾기(QC001431, '배관규격(mm)'=배관규격, 보온재=보온재, 보온두께=보온두께).시공량 * (1 + (0 - 만약(설` · GC000769 `만약((규격 >= 15 그리고 규격 <= 25) 또는 (규격 >= 32 그리고 규격 <= 50), 0, 찾기(QC001447,` | +| 시험입력 있음 | 195 | 0 | | +| 요소키.칸(요소 칸 값) | 160 | 49 | GC001043 `EQ000532.주연료2 * 찾기(QC001933, 맨홀구분=맨홀구분).'모르타르 믹서(0.3㎥)' * 8 / 시공량` · GC000137 `찾기(QC000264).IC진동롤러_자주식 * 8 * EQ000098.주연료 * 찾기(QC000270, 구분='주연료 할증')` · GC000138 `EQ:{장비}.주연료종류` | +| 이름 = 비목 합(노무비 · 재료비 · 경비) | 153 | 146 | GC000722 `노무비 * 기계경비율 / 100` · GC000723 `노무비 * 기계경비율 / 100` · GC000724 `노무비 * 기계경비율 / 100` | +| 비교 <= | 123 | 36 | GC000570 `만약(층수 <= 10, 0, 만약(층수 <= 15, 4, 4 + 올림((층수 - 15) / 5)))` · GC000346 `만약(갱구거리 <= 500, 0, 찾기(CC000077, 갱구에서뚫기점까지의거리=갱구거리).할증률)` · GC000185 `만약(타설깊이 <= 25, 찾기(QC000348, L='25이하').t_1, 만약(타설깊이 <= 30, 찾기(QC000348,` | +| 함수 최대 | 122 | 43 | GC000750 `올림(최대(댐퍼면적 - 0.1, 0) / 0.1)` · GC000373 `최대(찾기(CC000125, 형식=만약(형식 == '박스거더' 또는 형식 == '강바닥판 박스거더', '박스거더', '박스거더` · GC000203 `최대(만약(용도 == '신구-콘크리트 접착제바르기', 찾기(QC000412, 용도=용도, 재료명='Epoxy신구-콘크리트접착제` | +| 비교 > | 99 | 44 | GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000576 `찾기(QC001212, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000580 `찾기(QC001218, '시공높이(m)'=최소(시공높이m, 7.2), '블록규격(mm)'=블록규격mm, 마감=마감).시공량 *` | +| 요소 부르기 ID:원문번호(+{입력}) | 84 | 14 | GC000138 `EQ:{장비}.주연료종류` · GC000139 `EQ:{장비}.주연료종류` · GC000267 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) * (1 + 가산비율 / ` | +| 요소 키 부르기(기계) | 78 | 37 | GC001043 `EQ000532.주연료2 * 찾기(QC001933, 맨홀구분=맨홀구분).'모르타르 믹서(0.3㎥)' * 8 / 시공량` · GC000137 `찾기(QC000264).IC진동롤러_자주식 * 8 * EQ000098.주연료 * 찾기(QC000270, 구분='주연료 할증')` · GC000140 `EQ000004.주연료종류` | +| 찾기 조건 값이 식 | 70 | 33 | GC001008 `(특별인부 * LB000003 + 보통인부 * LB000002 + 그물막인부 * LB000002) * 찾기(QC001882, ` · GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000576 `찾기(QC001212, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` | +| 함수 올림 | 67 | 53 | GC000570 `만약(층수 <= 10, 0, 만약(층수 <= 15, 4, 4 + 올림((층수 - 15) / 5)))` · GC000750 `올림(최대(댐퍼면적 - 0.1, 0) / 0.1)` · GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` | +| 호표 요소 = 자리 표시 {입력}(LB:{직종} 등) | 66 | 57 | GC000559 `LB:{공수직종}` · GC001043 `MO:휘발유:{지역}` · GC000137 `MO:경유:{지역}` | +| 함수 최소 | 51 | 18 | GC000575 `찾기(QC001210, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000576 `찾기(QC001212, '시공높이(m)'=최소(시공높이m, 7.2), 벽두께=벽두께).시공량 * (1 - (만약(시공높이m >` · GC000580 `찾기(QC001218, '시공높이(m)'=최소(시공높이m, 7.2), '블록규격(mm)'=블록규격mm, 마감=마감).시공량 *` | +| 빼기 부호(-x) | 47 | 28 | GC001008 `찾기(QC001880, 기계구분=기계구분).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC00` · GC001009 `찾기(QC001883).시공량 * (1 - (-만약(연간시공횟수 == '연3회 이상', 0, 찾기(QC001884, 연간시공횟` · GC001012 `찾기(QC001889).시공량 * (1 - (-살포량증감) / 100)` | +| 비교 < | 46 | 26 | GC000561 `만약(층수층 < 6, 찾기(CC000157, '강재사용량(㎏/㎡)'=강재사용량).'보정치(a)' * 찾기(CC000159, '` · GC000564 `만약(강재총사용량 < 300, 1, 찾기(CC000165, '강재총사용량(t)'=강재총사용량, '1t당 볼트본수(본)'=볼트본` · GC000101 `만약(수심증감 == '적용 안 함', 0, 만약(수심 < 2.5, 0 - 찾기(QC000204, 수심=수심).감, 만약(수심 ` | +| 함수 반올림 | 42 | 41 | GF000003 `반올림(3600 * q * K * f * E / Cm, 3)` · GF000042 `반올림(3600 * q * K * f * E / Cm, 3)` · GF000088 `반올림(3600 * q * K * f * E / Cm, 3)` | +| 재료 묶음에 {입력} | 32 | 19 | GC000264 `{"구분": "레미콘", "상세구분": "레미콘", "검색어": "레미콘 {굵은골재최대치수}-{강도}-{슬럼프}"}` · GC000431 `{"구분": "기계·설비", "상세구분": "기계류", "검색어": "싱글코아바렐 {규격}"}` · GC000432 `{"구분": "기계·설비", "상세구분": "기계류", "검색어": "더블코아바렐 {규격}"}` | +| 함수 버림 | 32 | 17 | GC000267 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) * (1 + 가산비율 / ` · GC000268 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) + EQ:{기계}.관리비계` · GC000269 `버림(EQ:{기계}.가격 * 1000 * ((EQ:{기계}.상각비계수 + EQ:{기계}.정비비계수) * (1 + 가산비율 / ` | +| 결과 식 로직(돈 아님) | 27 | 27 | GC000422 `a * E` · GF000003 `반올림(3600 * q * K * f * E / Cm, 3)` · GF000042 `반올림(3600 * q * K * f * E / Cm, 3)` | +| 요소 키 부르기(재료) | 23 | 8 | GC000360 `((찾기(QC000648, 품명='아세틸렌', 레일규격=레일규격).수량) * MT003163 + (찾기(QC000648, 품명` · GC000361 `((찾기(QC000650, 품명='테르밋용재', 레일규격=레일규격, 규격='점화용').수량) * MT030628 + (찾기(Q` · GC000374 `(찾기(QC000664, 품명='용접봉').수량 * MT003191 + 찾기(QC000664, 품명='산소').수량 * 100` | +| 비교 >= | 21 | 11 | GC000101 `만약(수심증감 == '적용 안 함', 0, 만약(수심 < 2.5, 0 - 찾기(QC000204, 수심=수심).감, 만약(수심 ` · GC000769 `만약((규격 >= 15 그리고 규격 <= 25) 또는 (규격 >= 32 그리고 규격 <= 50), 0, 찾기(QC001447,` · GC000774 `만약((규격 >= 15 그리고 규격 <= 25) 또는 (규격 >= 32 그리고 규격 <= 50), 0, 찾기(QC001452,` | +| 로직(…).칸(비목 · 계) | 14 | 11 | GC000087 `로직(GC000271, 기계='0201-0100', 브레이커='0230-0010', 지역=지역, 보정작업=보정작업).계 * (` · GC000090 `로직(GC000271, 기계='0201-0100', 브레이커='0230-0010', 지역=지역, 보정작업=보정작업).계 * (` · GC000091 `로직(GC000268, 기계='5405-0110', 지역=지역).계 * (찾기(QC000189).유압식크롤러드릴)` | +| 비교 != | 12 | 8 | GC000068 `만약(작업 != '목재 붙이기', 찾기(QC000143, 구분='보통인부', 작업=작업).수량, 0)` · GC000176 `만약(비트 != '오거비트', 해머압축기대수 * T / 60, 0)` · GC000183 `만약(재질 != '토사', T1 / T * T / 60, 0)` | +| 줄.'호표 이름'(호표 줄 금액) | 7 | 3 | GC000211 `(줄.'합판(내수 12㎜)' + 줄.'각재') * 찾기(QC000428, 사용횟수=사용횟수).소모자재 / 100` · GF000185 `(노무비 + 재료비 + 경비 - 줄.'구체콘크리트(철근) 레미콘') * 찾기(QF000387, 구분='구체콘크리트(철근) - ` · GF000210 `(줄.'패널' + 줄.'내부패널') * 찾기(QF000418, 구분=유형).요율 / 100` | +| 로직 넘길 값이 식 | 5 | 5 | GC000332 `로직(GC000267, 기계=만약(형식 == 'A-Type', '0201-0040', '0201-0020'), 지역=지역, 보` · GF000294 `로직(GC000268, 기계=만약(근원직경 < 20, '2105-0010', 만약(찾기(QF000063, '근원직경(cm)'=` · GF000297 `로직(GC000268, 기계=만약(흉고직경 < 18, '2105-0010', 만약(찾기(QF000081, '흉고직경(cm)'=` | +| (글자) 이름( 꼴(함수 아닌 이름 뒤 괄호) | 1,177 | — | GC000996 `찾기(QC001865).'그라우팅 믹서(190×2ℓ)' * 8 / 시공량` · GC000996 `찾기(QC001865).'그라우팅 펌프(30∼60ℓ/min)' * 8 / 시공량` · GC000996 `만약(작업위치 == '경사면(고소작업차)', 찾기(QC001865).'고소작업차(5ton)' * 8 / 시공량, 0)` | +| (글자) ∼ · ~ 물결 | 63 | — | GC000996 `찾기(QC001865).'그라우팅 펌프(30∼60ℓ/min)' * 8 / 시공량` · GC001026 `찾기(QC001905, 절단폭=절단폭, 차로차단=차로차단).'굴착기+브레이커(0.2㎥~0.6㎥)' * 8 / 시공량` · GC000573 `찾기(QC001207, 구분='그라우팅펌프', 규격='40∼125(ℓ/min)').수량` | +| (글자) % 글자 | 62 | — | GC000298 `찾기(QC000519, 포장=포장).시공량 * (1 - 만약(포장 == '공항포장', 만약(지장물 == '연속 포설 불가', ` · GC000299 `찾기(QC000520, 포장=포장).시공량 * (1 - 만약(포장 == '공항포장', 만약(지장물 == '연속 포설 불가', ` · GC000303 `찾기(QC000524, 형식=형식).시공량 * (1 - 만약(유도블록 == '아님', 0, 찾기(QC000583, 구분='유도` | +| (글자) {} 자리 표시 | 50 | — | GC000138 `EQ:{장비}.주연료종류` · GC000138 `1 * 8 / 시공량 * EQ:{장비}.주연료 * 찾기(QC000266, 구분='주연료 할증').값 / 100` · GC000139 `EQ:{장비}.주연료종류` | +| (글자) & 글자 | 53 | — | GC000931 `(찾기(QC001700, 공정별='Draft tube설치 가설된 Concrete tube에 이어서 Leveling & Cent` · GC000931 `(찾기(QC001700, 공정별='소운반').비계공 + 찾기(QC001700, 공정별='Draft tube설치 가설된 Conc` · GC000931 `(찾기(QC001700, 공정별='Draft tube설치 가설된 Concrete tube에 이어서 Leveling & Cent` | +- 「요소 부르기 꼴 `보통인부(…)`」 — **문법에 없음**(이름 뒤 괄호는 함수 · 찾기 · 로직만). 글자로 1,177 번 보이는 「이름(」 은 모두 따옴표 칸 이름 안(`찾기(…).'고소작업차(5ton)'`). 요소는 키로만 부름(`LB000006` · `EQ000532.주연료2` · `EQ:{기계}.가격`). +- `&` · `∼`/`~` · `%` · `{ }` 글자 — `&` · `∼` · `%` 는 모두 따옴표 글(조건 값 · 칸 이름) 안 · `{ }` 는 `ID:원문번호{입력}` 와 재료 검색어 · 자리 표시 안(아래 ③). +- 끝수 — 1,472 중 묶음(`{대상, 자리, 방법}`) **0** · 설명 글 37 · 없음 1,435 → 엔진이 끝수를 실제로 붙이는 로직은 지금 없음(덧줄 · 함수 안 `반올림(…)` 으로 씀). +- 표 — 로직이 찾는 표 1,865 · 범위 조건이 있는 표 106(범위규칙 글 40 꼴 — 첫 낱말은 넷뿐) · 값 칸에 「1/1.30」 같은 식 글이 든 표 104(엔진이 식으로 풂). + +## ③ 흐름도로 옮기기 어려운 꼴 + +| 꼴 | 수(마디 / 로직) | 왜 어려운가 | 이렇게 옮기면 됨 | +| --- | --- | --- | --- | +| 요소 칸 값 `EQ000532.주연료2` · `EQ000098.주연료` | 160 / 49 | 요소의 값이 아니라 **요소의 다른 칸**(기계 주연료 · 가격 · 계수) | 입력 상자 「기계」 요소 알약을 칸별로(바깥 값 「기계 key + field」 — Api 에 이미 있음 `CfQuery 기계 field`) | +| `ID:원문번호{입력}` — `EQ:{기계}.가격` · `EQ:{장비}.주연료` | 84 / 14 | 부를 요소가 **입력값에 따라 바뀜**(기계경비 로직 GC000267 등 핵심 로직) | 「재료 자리」 처럼 「기계 자리」(선택 자리 · 입력 알약 값으로 키 고름) — 지금 흐름도에 없음 → **새 입력 방식 필요(⬜ 브레인)** · 그 전엔 「다른 로직 입력」 으로 기계경비 로직을 통째로 부름 | +| 호표 요소 자리 표시 `LB:{공수직종}` · `MO:경유:{지역}` | 66 / 57 | 노임 직종 · 유가 지역이 입력값에 따라 바뀜 | 같은 「선택 자리」(인력 · 유가전력) — 재료 방식 셋을 다른 그룹에도 | +| 재료 묶음 검색어에 `{입력}` — `레미콘 {굵은골재최대치수}-{강도}-{슬럼프}` | 32 / 19 | 검색어가 입력값으로 만들어짐 | 재료 「조건 찾기」(이름 / 규격에 알약 값) — 알약 여럿을 이어 붙인 글이 필요 → 함수 상자로 글을 만들어 조건 알약으로 | +| 호표 로직 줄(비목 없음) `로직(GC000267, 기계='0201-0020', 지역=지역)` | 1,075 / 506 | 한 줄 금액이 **노무비 · 재료비 · 경비 셋으로 나뉨** | 다른 로직 입력 상자의 출력 알약 셋(노무비 · 재료비 · 경비) × 수량 함수 셋 → 출력 셋 | +| 로직 넘길 값이 식 `기계=만약(형식 == 'A-Type', '0201-0040', …)` | 5 / 5 | 넘길 값이 조건으로 바뀜 | 함수 상자(IF)로 값을 만들어 다른 로직의 받는 알약에 선 | +| 찾기 조건 값이 식 `'시공높이(m)'=최소(시공높이m, 7.2)` | 70 / 33 | 조건 값이 계산값 | 함수 상자로 먼저 셈 → 「표에서 찾기」 조건 알약에 그 출력 | +| 덧줄의 비목 합 `노무비 * 기계경비율 / 100` | 153 / 146 | 바탕이 **앞 줄까지의 비목 합**(덧줄이 덧줄을 바탕으로 쓸 수 있음) | 출력 상자 비목별 모음 함수(앞 줄 차례대로) → 비율 함수 · 앞 덧줄도 받는 알약으로 | +| 호표 줄 금액 `줄.'합판(내수 12㎜)'` | 7 / 3 | 특정 호표 줄 금액을 다시 씀 | 그 줄 금액 함수 출력에서 선 | +| 로직 결과 칸 `로직(…).계` | 14 / 11 | 다른 로직 돈 결과의 한 칸 | 다른 로직 입력의 그 비목 · 계 알약 | +| 표 한 줄(조건 없는 찾기) `찾기(QC001864).시공량` | 1,022 / 286 | 조건이 없어 「줄 하나」 표 | 「표에서 찾기」 조건 없이 칸만(표 첫 줄) — 줄이 둘 이상이면 옛 엔진도 오류 | +| 범위 조건 표(범위규칙 넷 · 위 끝 최소) | 표 106 | 엑셀 한 식으로 쓰기 어려움(빈 칸 = 무엇이든 · 규칙별 경계) | 선 규칙 「표에서 찾기」 가 엔진 `find` 와 같은 뜻으로(줄마다 맞음 칸 + INDEX/MATCH — 옛 가져오기에서 쓴 꼴) | +| 표 값의 식 글 「1/1.30」 | 표 104 | 엔진은 글을 식으로 풂 · 엑셀은 글 | 서버가 표 블록을 줄 때 수로 바꿔 줌 | +| 결과 식 로직(돈 아님) | 27 / 27 | 출력이 비용 아님 | 출력 종류 「값」 | +| 빈 입력 · 표에 없는 조건 | — | 엔진은 **그 줄만 비우고** 계속(합에서 뺌) | 흐름도 「끊긴 곳」 + 그 출력 0 으로 셈(같은 합) | + +## ④ 계산 길(로직 셈)을 부르는 곳 + +| 어디 | 무엇 | 자리 | +| --- | --- | --- | +| 서버 `POST /api/m01/calc` | 시험 계산(화면 · 저장 전 줄 포함) | `M01_MasterData_Router.py:222` → `Store.calc` :543 | +| 서버 `POST /api/m01/text` | 읽는 식 줄(텍스트 수식) | `M01_MasterData_Router.py:228` → `Store.text` :572 | +| 서버 `GET /api/m01/logic/auto` | 견본 입력값 | `M01_MasterData_Router.py:192` → `Store.auto` :563 → `master_auto.values` :80 | +| 화면 M01 단가산출 시험 계산 | `/calc` · `/text` · `/logic/auto` | `M01_MasterData_UI_Logic_Api.ts:224 · :229 · :245` · 부름 `M01_MasterData_UI_Logic_Calc.ts:142 · :155 · :184` | +| 서버 일위대가 조합 미리보기 | 조합에 담긴 로직마다 셈 | `M01_MasterData_Store_Combo.py:259 combo_preview` → `master_combo.py:106 run`(:128 `mf.run`) · M02 `POST /api/m02/layers/{layer}/combos/preview` `M02_MasterTemplete_Router_Combos.py:195` → `M02_MasterTemplete_Combo_Store.py:193` | +| 서버 프로젝트 사본 계산 | 프로젝트 항목 단가(복사본 표 · 노임) | `POST /api/m02/projects/{id}/items/{folder}/calc` `M02_Project_Items_Router.py:178` → `M02_Item_Copy.py:326` → `M02_Item_Prices.py:211`(:230 `mf.run`) · 화면 `ui_template/ui_template_item_picker_project.ts:218` | +| 흐름도 서버 | 단가 · 다른 로직 값(호표 한 줄 견본 로직으로 옛 셈 부름) | `M02_DF_Values.py:68 · :105 · :229 · :262`(`store.calc`) · `M02_DF_Router.py:216 logic_value`(흐름도 셈 `M02_DF_Compute`) | +| 옛 시험판 서버(CostFlow · 남김) | 같은 꼴 | `M02_CF_Router.py:230 · :267 · :390 · :421` | +| 일괄 · 대조 스크립트 | 전 로직 시험 계산 · 견적 대조 | `check_master.py:511 calc_all` · `compare_estx.py:258 · :456` · `master_text.py:504` | + +갈래(정함 4)를 넣을 곳 = **`Store.calc` · `Store.text` 둘**(M01 화면 · 흐름도 값이 모두 여기를 지남) + 조합 미리보기 `master_combo.run` · 프로젝트 `M02_Item_Prices.calc`(이 둘은 `mf.run` 을 바로 부름 — 흐름이 있는 로직을 거르려면 여기도). + +## ⑤ 시험입력 · 기본 입력 + +- 줄에 `시험입력` 이 있는 로직 **195**(1,472 중) — 일부 입력만 적힘(예 GF000219 `{"높이": 4.0, "돌": "깬잡석"}`). +- 기본 입력 만드는 법이 **둘**이고 범위에서 갈림: + - 일괄 시험(`check_master.py:496 시험입력`) — 고르기 첫 값 · 범위 **위 끝** · 그 밖 1 · 줄의 `시험입력` 이 이김. + - 화면 견본(`master_auto.py:80 values` · `/logic/auto`) — 고르기 첫 값 · 범위 **아래 끝** · 그 밖 = 그 입력으로 찾는 표의 가장 낮은 값(없으면 나누는 수면 1 · 아니면 0) · 단위에 「원」 이면 비움. +- 전수 대조(정함 3)는 **`check_master.시험입력`**(일괄 시험과 같은 값) 을 쓰는 것을 권함 — 흐름도 변환의 변수 예시값도 같은 규칙으로(⬜ 브레인 정함 필요: 화면 견본과 범위 끝이 다름). diff --git a/docs/raw/M01_쉬운단가/흐름도_정함.md b/docs/raw/M01_쉬운단가/흐름도_정함.md new file mode 100644 index 000000000..25134226b --- /dev/null +++ b/docs/raw/M01_쉬운단가/흐름도_정함.md @@ -0,0 +1,38 @@ +# 단가산출 흐름도 시험판 — 정함 (PLAN 35-9 · 브레인 · 10-01 17시 무렵) + +사용자 지시(그대로): 「전체에 대해 너가 제어해서 시험판을 하나 만들어봐. 이때 이전에 검토하였던 단가산출 다이어그램(시험)을 제외한 다른 시험판 들은 삭제해줘. 이번에 만드는 시험판도 신규 폴더에 넣어서 작업해줘. 필요없으면 바로 삭제할수 있게. … 너가 끝까지 구현하고 검증까지 진행해봐. 다시말하지만 자유도 높고 내가 이해하기 쉬운 화면을 만드는게 중요해.」 · 「데이터의 흐름과 값의 연결에 집중해야해. 이것만 잘 연결되면 단가산출 로직들을 만드는건 쉽게 해결될거야.」 +계획 = PLAN.md 35-8(a~o) 전체 · 근거 = 같은 폴더 `원가다이어그램_정함.md`(1판 약속 — 그대로 이어받음). + +## 목적 + +값 하나가 **어디서 생겨(출처) · 어떤 길과 규칙을 지나(선 · 선 규칙 · 함수) · 어디로 가는지(도착)** 를 사용자가 자유롭게 만들고 · 한눈에 따라가고 · 고칠 수 있게. 원가 숫자가 아니라 이 흐름이 검증 기준. + +## 정함 + +1. 폴더 `M02_MasterTemplete/DataFlow/` · 파일 머리 `M02_DF_` · 서버 길 `/api/m02/df/*` · 키 `DF-0001` · 저장 · 임시 = `_data/`(git 밖) · 견본 = `_sample/` · 단위 · 금액 표준 처음 값 = `_standard/` · 폴더째 지우면 끝. 1판(CostFlow)을 옮겨 시작하되 import 로 기대지 않음(CostFlow 는 그대로 남음). +2. 들어가는 곳 = 단가산출 막대 「시험판 ▾」 목록의 「단가산출 흐름도(시험)」 · 전체 화면 페이지. +3. 옛 시험판 셋(EasyCalc · LogicBuilder · SheetLogic) 폴더 · 그 시험 파일 · 막대 목록 항목 · 서버 등록 줄을 지움(사용자 지시) · `로직_자체.json` 의 사용자 로직(GX)은 마스터 자료라 그대로. +4. **흐름 넷** — ① 출처: 입력 상자(그룹 요소 · 표 · 변수 · **재료 자리** · **다른 로직**) ② 길: 선(알약 → 받는 자리) + **선 규칙** 하나(표에서 찾기 · 조건 통과 · 바꾸기 · 끝수) ③ 처리: 함수 상자(엑셀 · 출력 하나) ④ 도착: 출력 상자(비용 종류 · 값) · 다른 로직의 입력 · 「설계 때 정할 것」. +5. **재료 요소 방식 셋**(재료만) — 고정(품목 하나) · 선택 자리(범위 = 구분 · 상세구분 · 찾는 말 · 기본 품목 · 검증 칸 · 프로젝트에서 고름) · 조건 찾기(범위 + 「규격 / 이름에 [알약] 포함 / 같음」 · 맞음 0 · 여럿 알림) · 알약 이름 = 자리 이름. 다른 그룹은 상자를 늘림. +6. **다른 로직 입력** — 저장한 흐름도 로직(또는 견본)을 입력 상자로 불러 그 출력(비용 · 값)을 내보내는 알약으로 · 그 로직의 「설계 때 정할 것」(변수 · 재료 자리)은 이 상자의 받는 알약으로(이어 주지 않으면 그 로직의 예시값). +7. **선 규칙**(선 하나에 하나 · 없으면 그대로) — 표에서 찾기(조건 칸마다 맞출 알약 · 꺼낼 칸) · 조건 통과(알약 · 같음 · 다름 · 이상 · 이하 · 초과 · 미만 · 값 — 아니면 넘기지 않음) · 바꾸기(× · ÷ · +% · −% · 단위 바꾸기 계수) · 끝수(자리 · 반올림 / 올림 / 버림). 규칙은 받는 칸의 엑셀 수식으로 바뀌어 엔진 한 벌 · 선 위 규칙 글 늘 보임 · 한 알약에서 나간 조건 선의 겹침 · 어느 것도 안 맞음을 알림. +8. **흐름 따라가기** — 알약 · 선을 고르면 그 값이 온 길(출처 사슬)과 가는 길을 다이어그램에서 칠하고 상세 내용에 줄로 · 끊긴 곳(빈 받는 자리 · 통과 안 된 조건 · 표에 없는 조건 · 맞는 재료 없음)을 상자 · 선 위에 표시. +9. **상세 내용**(옛 「고른 상자」) — 상자 · 알약 · 선 무엇을 골라도 바뀜 · 머리 왼쪽 「상세 내용」 · 오른쪽 고른 상자 제목 · 알약이면 그 옆에 알약 이름 · 칸 차례 = 머리 · 설정 · 본문 · 경고. +10. **단위는 고르기** — 치면 걸러진 목록 · 고르기는 사용자 · 손글 안 받음 · 목록 = 단위 표준 + 마스터 결과단위 + 원 · 「-」 = 없음. +11. **단위 표준 · 금액 단위 표준** — 산림품셈 1-2-2(원문 `resources/knowledge/original/원가계산/산림_표준품셈/본문/제01장_적용기준/1-02_설계_및_수량.md`) 「설계서의 단위 및 소수의 표준」(종목 · 규격 단위 · 소수자리 · 단위수량 단위 · 소수자리 · 비고 · 주 ①~③ · 소수자리 「-」 = 0 · 단위 「-」 = 없음) + 「금액의 단위표준」(총액 1,000원 · 소계 · 금액란 · 일위대가표 계금 1원 · 일위대가표 금액란 0.1원 · 미만 버림) · 시험판 안에서 표로 보고 고침(사용자가 원문 흠을 고침 · 저장 `_data`). +12. **끝수** — 함수 출력 · 출력 상자 · 선 규칙에 소수자리 · 방법 · 단위를 고르면 단위 표준에서 자리 제안(주 ① 반올림 · ② 항목 값 우선) · 출력(비용) 기본 = 일위대가표 금액란 0.1원 미만 버림 · 원가 합계 기본 = 계금 1원 미만 버림. +13. **화면** — 자유 배치 다이어그램(위 · 크게) · 판 옮기기 = 가운데 단추 끌기 · 고르기 = 왼쪽 누름 · 왼쪽 끌기로 글자 선택 안 됨 · 상자 옮기기 = 상자 머리 왼쪽 끌기 · 아래 상세 내용 · 오른쪽 아래 검증 칸(예시값 + 재료 자리 + 다른 로직의 설계 때 정할 것) · 단추 · 칸은 공용 작은 크기(createButton size "sm" · 덮어쓰기 금지) · 쉬운 말 · 밝음 · 어두움. +14. 보고 · 검증 기준 = 흐름(값이 어디서 와서 · 어떤 규칙을 지나 · 어디로 가는지가 화면에서 따라가지는지 · 끊긴 곳이 보이는지 · 몇 걸음에 만드나). 원가 숫자는 내부 확인만. + +## 파일 · 창 + +| 창 | 맡음 | +| --- | --- | +| sub7 | 0걸음: CostFlow → DataFlow 옮기기(이름 · 길 · 키 · 폴더 · 시험 사본) · 그다음 Model · Eval 넓히기(정함 5 · 6 · 7 · 8 · 12 · 설계 때 정할 것 목록) — 타입 먼저 | +| sub4 | 서버(정함 5 · 6 · 11 · 12) — 재료 자리 · 조건 찾기 단가 · 자재 찾기(쪽 · 띄어쓰기 AND · 규격) · 다른 로직 값 · 설계 때 정할 것 · 표준 표 읽기 · 쓰기 · 저장 다시 셈의 끝수 | +| sub8 | 다이어그램(정함 7 · 8 · 13) — 선 위 규칙 글 · 선 고르기 · 흐름 길 칠하기 · 끊긴 곳 표시 · 마우스 | +| sub2 | 상세 내용 판(정함 7 · 9 · 10 · 12 · 13) — 선 규칙 판 · 알약 판 · 함수 판 손질(작은 단추) · 단위 고르기 공용 파일 `M02_DF_UnitPick.ts` · 끝수 고르기 | +| sub3 | 입력 판(정함 5 · 6 · 10) — 재료 방식 셋 · 범위 · 조건 · 기본 품목 · 자재 찾기 고침 · 다른 로직 입력 | +| sub5 | 출력 판 · 검증 칸(정함 5 · 6 · 11 · 12) — 재료 자리 고르기 · 다른 로직 설계 값 · 출력 끝수 · 금액 표준 기본 · 끊긴 곳 목록 | +| sub6 | 표준 표 · 견본(정함 11 · 견본) — `_standard/단위표준.json` · `금액단위표준.json` · 시험판 안 표 보기 · 고치기 판 · 견본 넷(메쌓기 · 지반 가르기 · 흄관 조건 찾기 · 다른 로직 잇기) | +| sub1 | 옛 시험판 지우기(정함 3) · 막대 목록 · 들어가는 페이지 · 상세 내용 머리 · 잇기 · 끝 검증(흐름 기준) | From 02d2c5a7511a1b25da801f33288cc24783f04b88 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 10:11:25 +0900 Subject: [PATCH 3/5] =?UTF-8?q?chore(sync):=20=EA=B3=B5=EC=9C=A0=20docs=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=8B=B4=EC=9D=8C=20=E2=80=94=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=BB=A4=EB=B0=8B=EA=B3=BC=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9(=EC=A4=84=20=EB=81=9D=EB=A7=8C=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../raw/M02_구조물조합개편/사용자요구_1004.md | 50 ++++++++ .../M02_구조물조합개편/사용자요구_1004_2.md | 25 ++++ .../raw/M02_구조물조합개편/사용자요구_1005.md | 14 +++ docs/raw/M02_구조물조합개편/설계_정함.md | 105 +++++++++++++++++ ...10-04_plan_M02구조물조합개편_2차_도면표.md | 78 +++++++++++++ ...가산출_흐름도_조합다이어그램_마스터요소.md | 108 ++++++++++++++++++ 6 files changed, 380 insertions(+) create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1004.md create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1004_2.md create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1005.md create mode 100644 docs/raw/M02_구조물조합개편/설계_정함.md create mode 100644 docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md create mode 100644 docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1004.md b/docs/raw/M02_구조물조합개편/사용자요구_1004.md new file mode 100644 index 000000000..936caa071 --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1004.md @@ -0,0 +1,50 @@ +# M02 구조물 조합 개편 — 사용자 요구 (2026-10-04 · 원문 그대로) + +1번(계획서 32장 이후 정리)은 브레인이 처리함(c8269a969). 7 · 8번은 원문에 없음. + +## 2. 일위대가 조합 → 구조물 조합 하위 + +M02페이지의 마스터 템플릿 페이지에서 일위대가 조합은 구조물 조합의 하위 컨테이너로 넣을 것.(구조물 도면과 면적산출 사이에 배치) +- 일위대가 조합의 좌측 패널의 기존 보기 방식인 트리구조는 필요없으며 구조물 도면 처럼 리스트형태로 보임 +- 추가로 구조물 도면, 일위대가, 면적산출의 최상위에는 전체항목을 넣어주고 우측 상세에는 리스트로 보여줌, M01 항목을 보면 양식화되어 있는 페이지 헤이아웃 있음 + +## 3. 이름 + +이동한 일위대가 조합은 일위대가로 명칭 변경 + +## 4. 구분선 + +구조물 조합 컨테이너 내부의 서브 컨테이너 항목과 트리구조 사이에 수평 구분선 추가 + +## 5. 사용자별 구조물 조합 읽기 / 쓰기 / 복사 권한 점검 및 개선 + +- 시스템 관리자 : 아이슬로 프로그램 관리자로 마스터를 제공하여 회사관리자나 일반 사용자가 사용하기 쉽게 한다. +- 시스템관리자가 대시보드의 컨테이너 제목의 우측의 회사명을 선택함에 따라 변경한 목적은 해당 회사의 정보를 접근하고나 AS을 목적으로 고객을 도와주기 위함임. 복사항목에는 마스터나 시스템 관리자 회사, 개인으로 들어갈 항목 뿐만 아니라 고객 회사의 특정 폴더로 복사할 수 있는 기능이 있어야함. 수정/생성권한 포함 +- 회사관리자 : 고객으로 본인회사의 양식을 만들거나 개인 프로젝트에 사용할 개인 마스터데이터 관리 +- 회사관리자는 개인버튼을 누를경우 최상위 트리에는 다른 개인들의 정보를 보고 복사하여 개인에게 복사하거나 수정, 생성도 가능해야함. +- 개인은 마스터와 회사는 읽기만, 다른 개인의 정보는 볼수 없음. 트리는 현재를 유지해야함. + +## 6. 구조물 조합 항목 변경 + +- 최상위 구조물 조합에 구조물 도면, 일위대가, 면적산출로만 표현(기존의 재료산출의 사용자가 추가하는 재료들과 값은 엑셀을 사용하지 않고 일위대가의 담은로직 처럼 하위에 별도의 컨테이너로 추가되는 자재항목을 넣어야함. 이때 M01자재목록에서 하나씩 가져오되 수량은 면적산출의 알약으로 값을 싱크하거나 별도의 모달창에서 셀을 지정하게 구현) +- 재료산출 항목은 삭제 +- 선택입력 항목은 삭제(구조물 조합에서는 각 옵션의 상세 구조물에 따라 미리 옵션을 다 지정할 생각임으로 그럴필요 없음) +- 면적산출의 미리보기에서 아래 알약 그룹 행을 하이드/쇼 되게 반영(기본값은 하이드), 단, 면적산출 상세에서는 알약 행 보이기가 기본값으로 +- 면적산출 상세 화면의 우측 패널에서 현재의 일위대가 조합 목록을 검색하는 기능이 아니라 현재 구조물도의 일위대가 담은 로직과 추가될 사용자 지정 재료를 보여줄것, +- 일위대가 상세화면에서는 미리보기(보기만/저장안함) 컨테이너는 각 단가산출 로직에 입력이 필요한 정보들임. 구조물별로 하나씩만들어져야함으로 구조물의 일위대가 항목에 옵션값이 저장되야함. 그리고 이값에 대한 지정은 담은 로직 컨테이너의 항목을 누르면 모달창이 나오고 사용자가 입력 및 변경할수 있게함. (하위에 지정된 항목과 값을 작은 글씨로 표현되게 반영) +- 담은 로직에는 기준 단가를 기준으로 넣었을때 나온 값과 수량산출값을 넣었을때 값에 대한 노무비, 재료비, 경비, 합계를 같이 보여줌. 이때 수량산출은 면적산출의 특정 셀값이나 사용자가 수기로 입력한 값이 될수 있음. 이렇게 되면 미리보기 계산 컨테이너 필요 없음. +- 일위대가의 상세 화면의 순서는 담은로직 > 자재목록 > 다이어그램 순서임. +- 면적산출 산출 상세의 우측 패널에 보여져야하는 결과는 결국 일위대가의 담은 로직컨테이너와 자재목록임. +- 추가된 자재목록에도 기준에 대한 단가와, 면적산출 엑셀의 특정 셀과 연결되었을때 나온 단가가 같이 나와야함. + +## 9. 오른쪽 클릭 + +프로그램 B와 M영역의 페이지들에 마우스 오른쪽 클릭을 할 경우 브라우저 옵션 안보이게 할것.(우리 프로그램의 옵션은 허용, 공통양식 사용) + +## 사용자 답 (10-4 · 일위대가 · 원문 그대로) + +일위대가의 경우 +1. 구조물 조합을 복사한 경우 신규 키를 생성하여 만듬. (값과 로직은 일단 같이 복사) +2. 신규 구조물 조합을 생성하는 경우 미리보기 페이지에는 새로만들기와 복사생성하기를 선택하게 하고 복사 생성인 경우에는 해당 리스트를 보여주고 선택하게 보여주는 값은 개인인 경우에는 개인을, 회사관리자인경우 개인, 시스템관리자인 경우 마스터를 기본값으로 보여주고 탭을 눌러 다른 항목에서 가져올수 있는 항목들을 보여준다. +3. 다시 말해 최종적으로는 구조물 조합에 일위대가, 도면, 면적산출이 연되는게 맞으나 특정항목만 다른 값을 복사하여 가져올수 있어야함. 저장이 된 데이터라도 변경가능해야함. +4. 현재 매칭이 안된 데이터는 나중에 삭제할예정이나 마스터 데이터를 수동 생성을 위해서 필요한 데이터들임. 차라리 실무문서라는 항목을 마스터에 별도로 만들어서 나중에 한번에 지우게 할수 있게 반영. diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md b/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md new file mode 100644 index 000000000..3651b8c87 --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md @@ -0,0 +1,25 @@ +# M02 구조물 조합 개편 2차 — 사용자 요구 (2026-10-04 밤 · 원문 그대로) + +구조물 옵션보이기는 확인했음. 무시할것. + +다음 수정내용 + 1. 일위대가 상세 + - 담은 로직 이라는 명칭을 단가산출 로직 으로 변경 + - 로직들을 선택하면 나오는 모달 창에서 드롭다운 메뉴에 자동값 xx 항목이 나옴. 있을 필요가 있는지 확인 + - 결과 단위의 좌측에 수량 산출 열을 추가하고 결과단위 당 기준 수량을 넣어주고 아래에는 수량산출의 값을 수기입력이나 엑셀모달을 보여줘서 선택할수 있게 반영. + - 로직의 로직 추가, 올리기 내리기 빼기 버튼의 양식은 알약 양식이이 아니라 버튼양식으로 변경, + - 자재 추가도 동일하게 버튼 으로 + 2. 구조물 조합 상세 + - 일위대가 미리보기에서 복사해 가져오기를 가져오기로 변경, 일위대가 수정을 수정으로 이름변경 + - 도면정보에서 도면수정을 수정으로 이름 변경 + - 일위대가 미리보기에서 항목/수량산출/단위/노무비/재료비/경비/합계로 두줄을 하나의 항목 형태로 변경하고 자세한 내용은 상세내용에서 확인하게 변경(위내용 참고) + - 구조물 조합 제목 행에 있는 새항목의 버튼 양식을 알약에서 버튼으로 변경 + - 도면정보/일위대가/면적산출 컨테이너의 구조를 3열 구조로 변경 + - 도면정보/일위대가/면적산출 컨테이너 별로 삭제도 있어야하는게 아닌지. + 3. 면적산출 상세 + - 알약지정은 현재 방법 + 그래그 & 드랍 방식을 추가 + - 지정된 알약정보를 색상 자동지정 및 지정된 셀은 색상으로 구분을 할수 있게 반영, 반짝임은 유지 + +## 추가 기능 (10-4 밤 · 원문 그대로) + +추가기능 부여. 면적산출에서 특정 영역을 선정하고 도면영역으로 전달을 할 경우 도면에 테이블을 자동으로 넣고 셀의 내용을 싱크하는 기능을 부여. 만약 동기화가 어려운 경우 업데이트 버튼을 추가해도 무관, 복수개의 테이블이 넘어갈수도 잇으며 위치는 도면에서 사용자가 드래그하여 지정 diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1005.md b/docs/raw/M02_구조물조합개편/사용자요구_1005.md new file mode 100644 index 000000000..bea9b003e --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1005.md @@ -0,0 +1,14 @@ +# M02 구조물 조합 개편 3차 — 사용자 요구 (2026-10-05 새벽 · 원문 그대로) + +나는 이제 자러갈거야. 아래 추가 수정 내용을 확인해서 반영해주고 좀 전 중지한 검증 항목까지 검증해줘. 그런데 너무 검증에 토큰과 시간을 너무 많이 사용하고 있어. 최적화 방법 좀 찾아줘. +추가 확인사항 +1. 일위대가 상세화면에서의 단가산출 로직의 항목들은 2행 구조야. 1행은 기준 결과를 기준으로 한 결과행들과 2행은 수량산출 값을 넣었을때의 값인거지. 기본 2행 구조라만 1행은 선택된 옵션에 따라 결정된 값 행인거고 이걸기준으로 수량을 넣는 다면 2행을 값들이 되는거야. 현재도 이렇게 되어 있기는 한데 수량산출 항목을 선택하면 나오는 엑셀 모달창의 내 의도는 모달창으로 면적산출 엑셀을 보여달라는 말이었어. +2. 일위대가의 단가산출 로직 항목 행을 선택하면 수량 입력이 있는데 이건 없어도 됨. 외부에 있으니. +3. 자재 목록컨테이너에서 보이는 항목은 기준단가를 정해주는 것도 좋지만 자재목록의 5개 항목의 값을 비어있더라고 보여주고 기준단가가 되는걸 하이라이트 해주면 좋을것같아. +4. 구조물조합에서 일위대가 미리보기에서 일위대가 상세화면의 단가산출 로직(순서와 로직추가는 제외)과 자재목록을 그대로 보여주게 하되 기능은 유지(수량산출 연결창, 옵션지정 모달창)하고 수평스크롤을 가능하게 하기 +5. 일위대가의 재료도 2열구조여야 할것같은데.... +6. 도면정보, 일위대가, 면적산출을 접근 후 제목의 돌아가기 버튼은 알약이 아니라 일반 버튼으로 + +## 추가 (10-5 새벽 · 원문 그대로) + +추가 항목이 하나더 있어. 구조물 조합에서의 미리보고 3개 컨테이너에 새로만들기와 복사 생성로직이 필요없겠네. 구조물 조합의 새항목 생성을 하면 당연히 새로운 항목들이 자동으로 생성되잖아. 그후 가져오기를 하면 당연히 값을 가져와서 덮어쓰면 되겠어. 그리고 일위대가와 면적산출에서 가져오기를 하면 도면은 개별로 작성되는게 맞지만 일위대가와 면적산출은 연결되어 있는정보니 같이 가져오는게 맞겠어. 알약연결 포함해서. 이 내용도 추가해줘. diff --git a/docs/raw/M02_구조물조합개편/설계_정함.md b/docs/raw/M02_구조물조합개편/설계_정함.md new file mode 100644 index 000000000..229b350fd --- /dev/null +++ b/docs/raw/M02_구조물조합개편/설계_정함.md @@ -0,0 +1,105 @@ +# M02 구조물 조합 개편 — 정함 (브레인 · 10-4) + +근거 = `사용자요구_1004.md` · 조사 보고 A~H(각 창 `tmp/조사_39-0X.md`). 사용자가 바꿀 수 있음. + +## 1. 자료 틀 (B · sub7) + +- 일위대가 = 구조물 열마다 `labor/<열id>.json` · 번호 `SU-######`(도번 · 면적번과 같은 뒷자리 · 층마다 셈) · 자리 = 시스템 `resources/master_template/labor/` · 회사 · 개인 `…/templates/labor/` · 새 프로젝트 씨앗도 KINDS 로 함께. +- 문서 꼴: + +```json +{ + "종류": "일위대가", "판": 1, "열": "item1", "일위대가번": "SU-000001", "단위": "개소", + "본뜬": { "층": "system", "주인": null, "키": "UA000008" }, + "담은로직": [ + { "로직": "GF000219", "메모": "", "입력값": { "형식": "메쌓기" }, "수량": null }, + { "로직": "GF000137", "메모": "", "입력값": {}, "수량": { "손": 3 } } + ], + "자재": [ { "코드": "MT000008", "이름": "치즐", "규격": "", "단위": "EA", "수량": null } ], + "계산값": { "줄": [], "자재": [], "기준합": {}, "반영합": {} } +} +``` + +- 이름 = 구조물 열 이름(따로 안 둠) · 단위 = 자기 칸 · 같은 로직 두 번 금지 · 빈 일위대가 저장 됨 · 이름 겹침 검사 없음 · 입력값 = 그 로직 입력 이름만(모르는 이름 버림 · 빈 값 = 자동값). +- 수량 = `null`(면적산출 알약 연결 따름 · 로직 알약 「이름|단위」 · 자재 알약 「자재|MT키」 · 칸 연결 정본 = 면적산출 문서 `연결` 한 곳) | `{손: 수}`(손 입력 · 손이 칸보다 앞섬). +- 금액 = 기준(결과단위 그대로 · 원/10㎡ 면 10㎡ 값 · 단위 같이 표기) · 반영 = 기준 × 수량 ÷ 배 · 돈 아닌 로직은 반영 없음 · 「원/1,000본」 배 1000(`_PER` 고침) · 자재 기준 단가 = M01 `master_material.element` 기본값. +- 계산 자리 = 기준 ③ 서버(M01 엔진 · calc 길 · 화면은 최신 응답만) · 반영 곱 ① 짝(`M02_MasterTemplete_Labor_Calc.ts` ↔ `M02_Labor_Doc.py` · 두 파일 머리에 짝 · 거울 시험 · 면적 칸 값이 바뀌면 화면이 바로 곱함) · [저장] 때 서버가 `계산값` 을 다시 적음(브라우저 값 버림 · 목록 합계용) · 상세는 늘 새로 셈. +- 길 = 문서 `GET/PUT /api/m02/layers/{층}/templates/labor/{열}`(양식 길 · owner) · 계산 `POST /api/m02/layers/{층}/labor/{열}/calc` {doc?, 수량?: {키: 값}} → {줄[{로직, 분모, 배, 수량, 수량출처, 기준{노무비,재료비,경비,계}, 반영{…}, 까닭}], 자재[{코드, 기준단가, 수량, 수량출처, 반영, 까닭}], 기준합, 반영합} · 알약 `GET /api/m02/layers/{층}/labor/{열}/pills`(로직 물량 + 자재). +- 집계표 열 `일위대가` · `자재조합` 칸 지움(정본 = labor 파일) · SS 장부 줄 = `일위대가번` · `도번` · `면적번`. +- 옮기기(한 번 · `M02_Labor_Migrate.py`) = 층마다 열마다 labor 파일 · 열 `일위대가` 키 조합의 담은로직 · 단위 복사(`본뜬.키` = 옛 키 · 입력값 {} · 수량 null · 자재 []) · 여러 열이 쓰던 조합(UP10-000001)은 열마다 복사 · 키 없는 열 = 빈 일위대가 · 몇 번 돌려도 같음 · 시스템 층(git)은 바로 · storage 층은 압축 사본 뒤 브레인이 돌림. +- 실무문서 = 마스터 `resources/master_data/일위대가조합.json` 통째(37 줄 · 손대지 않음 · 옮긴 뒤 어느 열도 안 가리킴 · M01 일위대가 조합 화면도 그대로) · 회사 · 개인 옛 조합(UC · UP)은 파일 그대로 · 화면에서 뺌. +- 프로젝트 = 스냅샷 `일위대가.json` 은 labor 문서 + 담은 로직 줄 · `입력값.json`(모양 그대로) 첫 값 = labor 입력값 · `단가.json` 에 자재 MT 줄 · 계산은 반영 같은 함수. +- 은퇴(화면이 안 부른 뒤) = 일위대가 갈라 내기 · 키 적기(use-combo) · 조합 고치기 · 미리 보기 길(preview) · 일위대가 조합 나무 길. +- 로직 지우기 검사 = 모든 층 labor 담은로직 + 실무문서(32장 「로직 지우기 서버 검사」 줄 끝남). + +## 2. 좌측 패널 (A · sub5) + +- 맨 위 「일위대가 조합」 컨테이너 · 조합 나무 · 둘째 층 단추 벌 지움 · 구조물 조합 안 차례 = 층 단추 + 나무 → 수평선 → 구조물 도면 → 일위대가 → 면적산출. +- 하위마다 첫 줄 「전체 항목」(누르면 `onAll(kind)` → H 목록) · 일위대가 줄 = 열마다 「SU-… 이름」 · 누름 = `onOpen({kind: "labor", name: 열})`(C 상세). +- 이름 「일위대가」(하위 제목 · 상세 제목 · 대시보드 카드 글) · 해시 `open=일위대가` = 구조물 조합 펼침 + 일위대가 하위 펼침 + 전체 항목. +- 「실무문서」 = 구조물 조합 밖 별도 컨테이너(도면 양식 아래) · 마스터 층 · 시스템 관리자만 · 목록 + 상세 읽기만(새 파일 `M02_MasterTemplete_Practice.ts`) · [통째 지우기](물음 두 번 · 서버 = 시스템 관리자 · 쓰는 곳 0 확인 · 줄을 비움 · 버튼은 사용자가 누를 때만). + +## 3. 일위대가 상세 (C · sub2) + +- UI_Main 종류 `labor` 로 엶(양식 길 읽기 · [저장] · [다시 읽기] · 캐시 = 다른 양식과 같음) · 차례 = 머리 → 정보(단위 · 본뜬) → 담은 로직 → 자재목록 → 다이어그램 · 미리 보기 칸 지움. +- 담은 로직 줄 누름 = 입력 모달(그 로직 입력 전부 · 빈 칸 자동값 · 수량 = 이은 칸 · 값 보임 / 손 입력 / 「면적산출에서 잇기」 = 면적산출 상세로) · [확인] = 줄 값만(캐시) · 저장은 [저장]. +- 줄 아래 작은 글 「지역 서울 · 규격 25mm · 수량 B6 = 12.5㎡」 · 빈 입력 「빈 값 n」 붉게. +- 금액 칸 넷(노무비 · 재료비 · 경비 · 합계) · 칸마다 두 줄(위 기준 작게 · 아래 반영) · 맨 아래 합계 줄. +- 자재목록 = 코드 · 이름 · 규격 · 단위 · 수량 · 기준 단가 · 반영 금액 · [자재 추가](M01 자재 하나씩 · `M02_Material_Pick.ts`) · 줄 누름 = 수량 모달. +- 다이어그램 = 저장된 줄 값 + calc 답(수량 있으면 반영 · 없으면 기준 · 표기) · 알약 누름 = 입력 모달 · 자재목록 = 카드 하나 → 재료비 칸. +- 보기 갈래(고치기 없음) 부품을 냄 — D 오른쪽 패널 · H 카드가 씀. +- 입력 목록 · 값 받기 부품은 선택 입력에서 옮겨 다시 씀(`M02_Labor_Inputs.py` · `M02_Labor_Values.ts` · `M02_Labor_Values_Model.ts`) · 값 칸 규칙 한 벌(M01 넣을 값) · 로직 입력이 바뀌어 사라진 값은 알림. +- 37장 「미리 보기 값은 구조물 조합으로 안 넘김」 뒤집힘. + +## 4. 면적산출 (D · sub3) + +- 미리보기 카드 알약 줄 켬끔 단추 · 기본 꺼짐 · pref(계정) · 상세는 늘 보임(단추 없음). +- 상세 오른쪽 패널 = 그 열 일위대가의 담은 로직 + 자재목록(C 보기 갈래 · 기준 · 반영) · 조합 목록 · 찾기 · [이 열에 쓰기] · [조합 고치기] 지움. +- 패널 줄 누름 = 칸 지정 모달(`M02_MasterTemplete_AreaLink.ts` · [지금 고른 칸으로] · 주소 · [풀기]) → 면적 문서 `연결` · spreadsheet 손잡이 `setLink(키, 칸|null, 항목)`. +- 알약 = 로직 물량 알약 + 자재 알약(`자재|MT키` · 알약 모드 「자재」 다시 씀) · 선택 입력 알약 빠짐. +- 면적 금액 서버 계산은 1장 calc 하나(따로 안 만듦). + +## 5. 목록 · 고르기 · 카드 (H · sub1) + +- 목록 부품 하나 `M02_MasterTemplete_ItemList.ts`(M01 머리 · 쪽 · 표를 import · 옮기지 않음) — 「전체 항목」 · 복사 생성 · 항목 하나 복사가 같이 씀. +- M02 상세 제목 = M01 꼴(18px · 단추 오른쪽) 전부. +- 목록 칸: 도면 = 도번 · 이름 · 폴더 · 단위 · 고친 날 / 면적산출 = 면적번 · … / 일위대가 = 일위대가번 · 이름 · 폴더 · 단위 · 담은 로직 수 · 합계(`계산값` · 없으면 「—」) · 고친 날. +- 「새 항목」 → 상세 칸에 [새로 만들기] [복사 생성] · 복사 생성 = 같은 칸 탭 + 목록 → 지금 보는 층 · 고른 폴더(없으면 맨 위) · 원래 이름(겹치면 「(2)」) · 일위대가 새 번호. +- 카드 = 도면 · 일위대가 · 면적산출 셋(그 차례) · 빈 카드 = [새로 만들기] [복사 생성] · 찬 카드 = 「복사해 가져오기」(창 · 탭 + 목록 → 확인 → 덮어씀 · 번호 · 열 그대로) · 일위대가 카드 몸 = C 보기 갈래. +- 탭 = 마스터 · 회사 · 개인(나) · 다른 사람(드롭다운 · 맡은 회사일 때) · 실무문서(일위대가 고를 때 · 시스템 관리자) · 기본 = 시스템 관리자 마스터 · 그 밖 개인(회사 없으면 마스터) · 탭 목록 = E `readableSources`. +- 항목 하나 복사 서버 = `copy_from` 에 from_layer · from_owner(B 가 만듦) · 원본이 실무문서 조합이면 조합 → 일위대가 문서(입력값 빈 값). + +## 6. 권한 (E · sub4) + +- 「회사 C 를 맡음」 = 시스템 관리자 · 또는 C 의 회사 관리자 → C 회사 층 · C 모든 개인 층 = 보기 · 만들기 · 고치기 · 지우기 · 복사 대상. +- 일반 = 마스터 · 회사 읽기만 · 남 개인 안 보임 · 나무 그대로 · 프로젝트 apply · sources 도 같은 규칙. +- 사람 나무 = 맡은 회사면 켬 · 회사 사람 전부(나 맨 위 · 빈 사람 「비어 있음」) · 남의 층 첫 쓰기 = 소속 확인 뒤 뼈대. +- 「〇〇로 복사…」 = 쓸 수 있는 층 전부(마스터 · 볼 회사 · 내 개인 · 지금 사람) + 대상 폴더 고르기 창(`M02_MasterTemplete_TreePanel_CopyTo.ts`). +- 남의 층 쓰기 = `system_audit_logs` 한 줄(`M02_OTHER_LAYER_WRITE`). +- 실무문서 = 일위대가 조합 길 전부 시스템 관리자만(서버가 막음). +- 새 길(labor 문서 · calc · pills · 층 넘는 복사)도 `_root` · `_layer_dir` 한 벌을 거침. + +## 7. 지우기 (G · sub6) + +- G1 자재 조합(UM) · G2 재료산출(`material/` · SM · 카드 · 시트 · 옆 판 · 길 · 시험) 먼저 · G3 선택 입력(카드 · `inputs/` · 자리 · 알약 길)은 C 의 입력 모달이 선 뒤. +- `pickMaterial` · `MaterialItem` → `M02_Material_Pick.ts` 로 옮긴 뒤 지움 · 알약 모드 「자재」 · `LinkMaterial`(A00 spreadsheet) 남김 · `고른자재.json` 남김 · 프로젝트 `입력값.json` 남김. +- storage 층(회사 · 개인 · 프로젝트)의 `material/` · `inputs/` · `자재조합.json` 파일은 지우지 않음(읽기만 끊음 · 정리는 사용자) · git 안 시스템 층 · fixture 는 지움. +- 옛 SM 번호 버림 · 장부 `재료번` 칸은 다음 집계표 [저장] 때 빠짐. + +## 8. 파일 주인 (같은 파일 = 몫만 고침 · 받은 뒤 고침) + +| 파일 | 주인 | 다른 창 몫 | +| --- | --- | --- | +| `M02_MasterTemplete_Store.py` · `M02_Template_Layers.py` | sub7 | sub6 = material · inputs 줄 | +| `M02_MasterTemplete_Router_Items.py` | sub4(`_root`) | sub7 = copy 길 from_layer · sub6 = material · inputs 길 | +| `M02_MasterTemplete_Router_Combos.py` · `Combo_Store.py` | sub5(나무 길) | sub4 = 시스템 관리자 문 · sub2 = preview 지움 | +| `M02_MasterTemplete_UI_Side.ts` | sub5 | sub6 = material · matset 줄 | +| `M02_MasterTemplete_UI_Page.ts` | sub5 | sub4 = copyTo · sub1 = onAll 이음 | +| `M02_MasterTemplete_UI_Main.ts` | sub3(면적 길) | sub2 = labor 종류 · sub1 = 제목 꼴 · showView · sub6 = material 길 | +| `M02_MasterTemplete_ItemCards.ts` | sub1(카드 셋 · 빈 카드) | sub3 = 알약 켬끔 · sub6 = 재료 · 선택 입력 카드 | +| `M02_MasterTemplete_Structure.ts` | sub3(pillsFor) | sub1 = pickCopy · sub6 = inputs · material | +| `M02_MasterTemplete_TreePanel.ts`(670줄) | sub1(copyIn · 넘으면 `TreePanel_Clip.ts`) | sub5 = 일위대가 전용 칸 지움 · sub4 = 「〇〇로 복사…」 이음 | +| `M02_MasterTemplete_Labor_*.ts` | sub2 | sub5 = `Labor.ts` · `Labor_Tree.ts` 나무 지움 | +| `M02_MasterTemplete_Api_Fetch.ts` | 각자 자기 함수만 | — | +| `A00_Common/spreadsheet/spreadsheet_links.ts` · `spreadsheet.ts` | sub3 | — | +| 공용 메뉴 · 진입(`main.ts` · `cad_host.ts` · `ui_template_context_menu.*` · `ui_template_tree.*` · `spreadsheet_condition.ts` · `spreadsheet_menu.ts`) | sub8 | — | diff --git a/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md b/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md new file mode 100644 index 000000000..03f77c17e --- /dev/null +++ b/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md @@ -0,0 +1,78 @@ +# 지난 계획 — 39~41장 (2026-10-04) + +M02 구조물 조합 개편(일위대가 = 구조물마다 · 재료산출 · 선택 입력 지움 · 실무문서 · 권한 · 오른쪽 클릭) · 2차 수정(단가산출 로직 · 수량산출 열 · 카드 3열 · 삭제 · 알약 끌어 놓기 · 색) · 면적산출 표 → 도면 표. 검증은 사용자(10-4). + +## 32장에서 39 로 넘긴 줄 + +- [X] 선택 입력 정리(조사 10-1 끝 · 고침은 사용자 지시 뒤) — 일위대가 「넣을 값」과 구조물 「선택 입력」 이름 · 값 칸 규칙 두 벌 · 사라진 입력 안 알림 · 항목마다 자리 다시 고름 · 39 로 넘김(10-4 · 선택 입력 지움 · 값 칸 규칙 한 벌 · 사라진 값 알림은 39-3) +- [X] 로직 지우기 서버 검사가 마스터 층 조합만 봄(10-1 sub4) — 회사 · 개인 조합에 담긴 로직도 막기(`M01_MasterData_Store_Combo.py:194` · `Store_Cache.py:220` · 쉬운 길은 화면에서 미리 찾아 알림) · 39 로 넘김(10-4 · 39-1b 로직 지우기 검사 = 모든 층 labor) + +## 39. M02 구조물 조합 개편 (사용자 지시 10-4) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004.md`(2 일위대가 → 구조물 조합 하위 · 3 이름 · 4 구분선 · 5 권한 · 6 항목 변경 · 9 오른쪽 클릭) +- 사용자 확정(일위대가): 구조물 조합에 일위대가 · 도면 · 면적산출이 엮임 · 구조물 조합 복사 = 일위대가 새 키(로직 · 값 같이 복사) · 새 구조물 조합 = 미리보기에서 「새로 만들기」 / 「복사 생성」(목록 · 기본 탭 = 일반 개인 · 회사 관리자 개인 · 시스템 관리자 마스터 · 탭으로 다른 곳) · 항목 하나만 다른 것을 복사해 바꿈(저장 뒤에도) · 매칭 안 된 일위대가 조합 = 마스터 「실무문서」 항목으로 따로(나중에 한 번에 지움) +- 사용자 확정(10-4): 원본 단가산출 로직(resources/master_data 로직 · 표 · 요소 · 마스터 일위대가조합.json)은 절대 손대지 않음(읽기만) · 입력값은 사용자 · 설계자가 일위대가에 정해 저장 → 프로젝트로 복사해 씀 +- 정함(브레인): 조사 먼저(창마다 자기 몫 · 코드 안 고침) → 브레인이 설계 정함(이 절에 줄 더함) → 구현 · 조사 보고 = 각 창 `tmp/조사_39-0*.md` + +- [X] 39-0 조사(보고 여덟 · 정함 = `docs/raw/M02_구조물조합개편/설계_정함.md`) — A 좌측 패널 · 이름 · 구분선(sub5) · B 자료 틀(일위대가 입력값 · 자재목록 · 수량 연결 자리 · sub7) · C 일위대가 상세(sub2) · D 면적산출(sub3) · E 권한(sub4) · F 오른쪽 클릭(sub8) · G 재료산출 · 선택 입력 지우기 영향(sub6) · H 「전체 항목」 목록 화면(sub1) +- [X] 39-9a 오른쪽 클릭 막기(sub8) — 정함(브레인): 공용 진입 한 곳 창 캡처 듣기 · 대상 주소 `/^[bm]\d/` · 글 입력 칸(읽기 전용 포함)은 브라우저 메뉴 살림 · 입력 칸 밖 고른 글은 막음 · CAD 는 cad_host iframe load 때 같은 함수 · 남은 막기 코드 그대로(주석 셋만) · 근거 sub8 `tmp/조사_39-0F.md` — 확인 = 새 시험 test_common_native_menu.py · ORCA `defaultPrevented` 수치(B01 · B05 · B07 · M01 · M02 참 · 입력 칸 · A01 거짓) + - 검증완료(sub8 · 0f8efaa42) — 시험 4 통과 · ORCA 5183 B01 · B05(노선 편집 패널 포함) · B07 · M01 · M02 본문 · 헤더 · 모달 · CAD iframe 리본 · 패널 · 캔버스 막힘 참 · 입력 칸(CAD 안 포함) · A01 거짓 · CAD 오른쪽 단추 확정 그대로 +- [X] 39-9b 메뉴 공통 양식(sub8) — 공용 CSS 한 벌(지도 · 표 메뉴 · 나무 메뉴 · 상태줄 흠) · 「한 번에 하나」 장부 합침 · 조건 만들기 = 칸 메뉴 끝 한 줄(가로채기 지움) · 부품 API 합치기는 안 함 — 확인 = 메뉴마다 폭 · 그림자 · 글자 수치 같음 · 스프레드시트 하네스 시험 + - 검증완료(sub8 · 277311955) — B04 관 · B05 종단 · 배수 · 3D · 칸 · 상태줄 · M02 나무 · 조건 만들기 메뉴 폭 160 · 글자 13 · 여백 8/12 · 모서리 8 · 그림자 같음(밝음 · 어두움) · 나무 ↔ 칸 메뉴 한 번에 하나 · 시험 52 통과 · 조건 만들기를 쓰는 곳(M01 흐름 식 칸)은 칸 메뉴 없는 미리보기 편집기 → 같은 공용 메뉴에 이 줄만 · 시트 탭 메뉴는 탭 켠 화면이 없어 화면 확인 못 함(같은 부품) +- [X] 39-1a 자료 틀(sub7) — labor 종류 · SU 번호 · 문서 검사 · 계산(기준 ③ 서버 · 반영 ① 짝 · [저장] 때 계산값) · `_PER` 1,000 · calc · pills 길 — 확인 = 새 시험 test_m02_labor_doc.py · 거울 시험 · 기존 store · layers 시험 +- [X] 39-1b 옮기기 · 복사 · 프로젝트(sub7) — 옮기기 스크립트(시스템 층 바로 · storage 는 사본 뒤 브레인) · copy_from 층 넘김 + 실무문서 조합 → 일위대가 · 구조물 복사 = 새 SU — 확인 = 옮기기 시험(UP10-000001 → 열 둘) · tree_paste · item 시험 + - 검증완료(sub7) — 새 시험 labor_doc 19 · 거울 3 · migrate 4 · labor_copy 6 + store · structure · structure_combo · item_keys · layers_store · tree_paste · combo_layers · combo_branch · item_inputs · layer_access · M01 combo · cache 통과 · typecheck · 8009 실제 길: item1 SU-000001 기준합 2,658,983 · 알약 13 · 칸 값 3 → 수량출처 칸 · 시스템 층 옮김 item1←UA000008 · item3←UA000001 · item2 빈 · storage 층 안 돌림 · B8 은 sub8(39-1c) · 은퇴 길(use-combo · 갈라 내기 · preview)은 화면이 아직 불러 남김 · 로직 지우기 검사는 ecc4a651a 로 먼저 함(39-1d 와 겹침) +- [X] 39-1d 은퇴 · 로직 지우기 검사(sub4) — 로직 지우기 검사 = 모든 층 labor 담은로직 + 실무문서 · 일위대가 갈라 내기 · 키 적기(use-combo) · 조합 고치기 길과 화면 부름 정리(쓰는 곳 0 확인 뒤) · 남의 층 기록 = 성공한 쓰기만 — 확인 = 로직 지우기 시험(회사 · 개인 labor 에 담긴 로직 막힘) · grep 0 + - 검증완료 — 로직 지우기 시험(회사 · 개인 · 마스터 labor · 실무문서 → 422 · 어디서 쓰는지 알림 · 다 빼면 지워짐 · 임시 사본) · M01 시험 56 · 조합 층 14 · 권한 · 양식 18 통과 · 남의 층 기록 = 성공한 쓰기만(409 · 403 안 남김) +- [X] 39-1d 남은 은퇴(sub4 · sub3 D3 · sub5 받은 뒤) — 쓰는 곳이 남아 못 지움: 갈라 내기 `branch_combo` · 키 적기 `use_combo`(Branch.py · Router.py · Router_Items 길 · Api_Fetch `branchCombo` · `setColumnCombo` ← Combo.ts · ComboPanel.ts) · `fetchUsableCombos` · `/combos/all` ← ComboPanel · Structure · 조합 만들기 · 지우기 길(POST · DELETE) ← 죽은 Labor_Edit.ts(sub2) · 조합 시험 · `Combo_Store.edit`(sub5) · Labor_Api `newCombo` · `editCombo` · `deleteCombo` · `fetchAllCombos` · `editComboTree*` · `pasteCombos` · `fetchLibLogic` · `fetchLibAuto`(sub2 · sub5) + - 검증완료 — 지움: Branch.py · 갈라 내기 · use-combo(옛 · 층 길) · 조합 만들기 · 지우기 · 알약 두 길 · grep 0 · typecheck · 시험 m01_combo · combo_inputs 29 · combo_layers 9 · combo_branch · layers_store 통과 · 남김: /combos/all · fetchUsableCombos(항목 추가 창 일위대가 고르기 pickCombo) · 집계표 열 「일위대가」 칸(그 창이 씀) · 목록 · 키 읽기(Practice · ItemPick) · 실무문서 통째 지우기 · Combo_Store create · delete · pills(sub5 · 시험 · Labor_Doc 알약) +- [X] 39-1c 프로젝트 층(sub8 · 39-1a 뒤) — 스냅샷 일위대가 = labor 문서 · 입력값.json 첫 값 = labor 입력값 · 단가.json 자재 MT · 계산 반영 같은 함수 · B05 고르기 모달 카드 = 도면 · 일위대가(C 보기 부품) · 면적산출 + 값 카드 — 확인 = item 시험 · 고르기 모달 값 → /calc 합계 + - 검증완료(sub8 · e1ad3d362 · 1baf761c4) — 시험 67 통과(새 test_m02_item_labor 5 · picker 20 · copy · inputs) · ORCA 5183 sub8_검증 B05 고르기 모달 카드 도면 · 일위대가 · 면적산출 · 값 넣고 저장 → /calc 반영 합 337,721.97 = 손셈 = 원본 층 계산 · 빈 값 = 멈춘 로직 1 · 빠진 입력 1(붉게) · 저장 안 하고 뒤로 = 버릴지 물음 · 일위대가 쓰기 400 · 밝음 · 어두움 +- [X] 39-1e 프로젝트 면적산출 알약 = labor 알약(sub8 · 39-7b 뒤) — 옛 입력연결 알약 대신 스냅샷 labor 알약 · 정함(브레인): 프로젝트 계산은 빠진 입력이면 그 로직 멈춤 그대로(입력 유도 · 원본 층은 자동값) — 확인 = 고르기 모달 면적 편집 알약 수 = labor 알약 수 · sub6 G3(c704f1898)이 함께 바꿈 · 39-8 에서 확인 +- [X] 39-0i 통합(sub5) — dev 에 sub2 · sub7 · sub3 · sub1 · sub4 · sub8 합침(Api_Fetch · Store_Cache 로직 지우기 검사 두 벌 → sub4 하나 · Structure.ts import) → sub6 이 자기 충돌 풂 → 모두 받기 · 통합 1 f0b8882a8 · 통합 2(sub6 · sub1) 진행 +- [X] 39-2 좌측(sub5) — 일위대가 컨테이너 · 나무 지움 · 하위 차례 도면 → 일위대가 → 면적산출 · 수평선 · 「전체 항목」 줄 · 이름 「일위대가」 · 실무문서 컨테이너(시스템 관리자) · 나무 서버 길 지움 · 대시보드 카드 — 확인 = typecheck · ORCA 5180 줄 수 · 세 역할 화면 + - 검증완료(sub5) — typecheck · 고친 시험 · ORCA 5180 시스템 관리자: 하위 차례 · 수평선(밝음 · 어두움) · 전체 항목 셋 · 일위대가 열 줄 3(SU 는 39-1b 옮기기 뒤 · 지금 「없음」) · 실무문서 37 · 상세 · 지우기 물음 취소 · 회사 · 개인 층엔 실무문서 없음 · 회사 관리자 · 일반은 서버 403 시험(계정 화면은 못 봄) +- [X] 39-3 일위대가 상세(sub2) — labor 종류 상세 · 입력 모달 · 작은 글 · 금액 두 줄 · 자재목록 · 미리 보기 지움 · 다이어그램 · 보기 갈래 부품 · 입력 부품 옮김 — 확인 = 거울 · 다이어그램 시험 · ORCA 5177 값 넣고 저장 → 다시 열기 + - 검증완료(43a59a689 · d847f724c · 3ad7678e1 · 5b4aed1b2) — 시험 통과 · ORCA 5177 item1: 기준 60,984 × 손 5 = 반영 304,922 · 자재 6,090 × 10 = 60,900 · 합 365,822 = 저장 계산값 · 다시 열어 값 남음 · 범위 밖 · 빈 손 수량 · 같은 로직 막음 · 떠날 때 물음 · 어두움 · 남음 = 읽기만 화면(권한 계정) 미확인 · 검증용 labor/item1.json 지움 +- [X] 39-4 면적산출(sub3) — 알약 켬끔(기본 꺼짐) · 오른쪽 패널 = 담은 로직 + 자재목록 · 칸 지정 모달 · setLink · 자재 알약 · 조합 패널 지움 — 확인 = setLink 시험 · ORCA 5178 칸 잇기 → 금액 즉시 · 검증완료(sub3 · 시험 31 · ORCA 5178: 카드 알약 줄 기본 0px → 켬 147px → 다시 열어도 그대로 · 상세 늘 보임 · 오른쪽 패널 로직 14 줄 · C3 = 12.5 잇기 → 반영 726,535 · 20 → 1,162,456 바로 · 「수량 C3 = 12.5」 · 알약 ↔ 모달 같은 연결 · 빈 · 틀린 주소 막음 · 풀기 · 어두움 · 저장 안 하고 옮김 물음 · 옛 조합 패널 쓰는 곳 0) · 검증 대기 +- [X] 39-5 목록 · 고르기 · 카드(sub1) — ItemList · 전체 항목 화면 · 상세 제목 M01 꼴 · 새 항목 두 단추 · 복사 생성 탭 · 카드 셋 · 빈 카드 두 단추 · 복사해 가져오기 — 확인 = item_list 시험 · ORCA 5174 복사 생성 → 새 SU + - 검증완료(18a063925 · 134a727c9 · 364d22ff6 · 6cf72bbf1 · 6f8470890 · 6d46dda54) — 시험 통과 · ORCA 5174 마스터: 전체 항목 줄 수 = 좌측 줄 수(3 · 3 · 3) · 제목 18px · 탭 = 시스템 관리자 다섯(기본 마스터) · 일반 셋(기본 개인) · 빈 사람 = 빈 목록 · 복사 생성 item1 → SS000055 · SD-000004 · SA-000004 · SU-000004(로직 14) · 폴더 안 같은 이름 「ㄴㄴ (2)」 · 실무문서 UA000001 → SU-000002 로직 3(번호 그대로) · 개인 → 마스터 면적산출(SA-000002 그대로) · 카드 차례 도면 → 일위대가 → 면적산출 · 어두움 · 마스터 사본 되돌림(차이 0) · 남음 = 재료산출 · 선택 입력 카드 지움은 sub6 받은 뒤 · 읽기만 계정 화면 미확인 +- [X] 39-6 권한(sub4) — 맡은 회사 규칙 · 사람 나무 · 첫 쓰기 뼈대 · 「〇〇로 복사…」 폴더 · 감사 기록 · 실무문서 문 · apply · sources · readableSources — 확인 = layer_access · 새 layer_manage 시험 · ORCA 세 계정 + - 검증완료 — 시험 layer_access 4 · template_layers · combo_layers 14 · layer_screen(39-6 몫) 통과 · 관련 M02 시험 66 통과 · API 세 계정 25/25 · ORCA 회사 관리자 · 일반 · 시스템 관리자(고객 회사 3) 사람 나무 · 「〇〇로 복사…」 폴더 창 · 밝음 · 어두움 · 쓰기 성공 길은 임시 storage 시험(새 파일 대신 layer_access 에 더함) +- [X] 39-7a 지우기 G1 · G2(sub6) — 자재 조합 · 재료산출 지움 · pickMaterial 옮김 — 확인 = typecheck · check_master · 고친 시험 · ORCA 5181 카드 · 줄 +- [X] 39-7b 지우기 G3(sub6 · 39-3 입력 모달 뒤) — 선택 입력 카드 · inputs · 자리 · 알약 길 지움 — 확인 = 프로젝트 고르기 값 → /calc 합계 그대로 + - 검증완료(sub6 · 54ce67ceb · 61d2ed599 · 79e4bba1b · c704f1898): typecheck 0 · check_master 틀 0건 · 고친 대상 시험 초록(test_m02_card_shell 1건은 origin/dev 자체 빨강) · ORCA 5181 좌측 = 구조물 도면 · 일위대가 · 면적산출 · 집계표 줄 = 일위대가 · 도면 · 면적산출 · 카드 = 도면 정보 · 면적산출(선택 입력 없음) · 면적산출 편집 알약 = 일위대가 알약 · 옵션 제목 밝음 · 어두움 · /calc = 시험(test_item_copy_complete)으로 · 프로젝트 고르기 모달 면적 알약 = 복사본 labor 알약으로 바꿈(39-1e 몫과 겹침) +- [X] 39-1f 새 항목 창 일위대가 고르기 없앰(sub4) — 새 구조물 일위대가 = 늘 빈 문서 · 카드 [새로 만들기] / [복사 생성] · 열 「일위대가」 새로 쓰기 없앰(든 값은 옮기기 뒤 정리) — 확인 = 창 줄 수 · 새 열 빈 labor · sub4 8087c7306 · 창 칸 둘 · 새 열 labor 빈 문서 · 시험 64 +- [X] 39-8 끝 검증 — 흐름 셋(새 구조물 새로 만들기 · 복사 생성 · 항목 하나 복사) × 세 역할 · 일위대가 값 → 금액 · 면적 칸 → 반영 · 실무문서 · storage 옮기기 뒤 확인 · 검증완료(가 sub1 19/22 · 나 sub2 26/27 → 흠 ①~④ · H1~H3 · X3 모두 고침) · main 합침 e6fe5232e · storage 옮기기(브레인 · 사본 tmp/storage_templates_39.zip · labor 5 · 두 번째 「그대로 5」) · 남은 빨강: spreadsheet 늦게 불러오기 시험 1(흐름도 DataFlow · 39 밖) · 검증 대기 +- [X] 39-10 요구 대조(브레인 · 사용자 요청 10-4) — 끝난 뒤 사용자 대화 입력 원문(요구 2~6 · 9 · 답 1~4 · 원본 로직 손대지 않음 · 입력값 복사 흐름) 줄마다 반영 여부 · 근거(화면 · 파일 · 수치) 표 · 요구 31 줄 모두 반영(흠 B1~B4 고친 뒤) · 표 = 보고 Artifact · 검증 대기 +- [X] 39-11 브레인 실제 검증(사용자 요청 10-4) — 끝난 뒤 브레인이 사용자처럼 브라우저 조작(진짜 마우스 · 사진 · 세 역할) · 보고 Artifact · 세 계정 · 진짜 마우스 · 사진(sub5 서버 s01~s15 · 메인 m01~m04) · 흠 B1(표 일위대가 줄 SU) · B2 · B3(전체 항목 합계 · 단위) · B4(새 항목 단추) 고침 → main 11ef83985 · 저장 안 함 · 검증 대기 + +## 40. M02 구조물 조합 개편 2차 (사용자 지시 10-4 밤) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004_2.md` · 「구조물 옵션 보이기」 칸은 그대로(사용자 확인) +- 정함(브레인): 「담은 로직」 → 「단가산출 로직」(상세 · 카드 · 면적 패널 모두) · 수량산출 열 = 위 결과단위 기준 수량(분모 · 예 「10 ㎡」) · 아래 수량(손 · 칸 · 「—」) · 누르면 [손 입력] / [엑셀에서 고르기](그 열 면적산출 시트 모달 · 칸 누르면 그 로직 알약을 그 칸에 이음 · 일위대가 [저장] 때 면적 문서도 함께 저장) · 버튼 = 공용 버튼 양식 · 카드 단추 「가져오기」 · 「수정」(면적산출 카드도 같은 이름) · 카드 [삭제] = 그 항목 비우기(번호 · 열 그대로 · 물음 한 번) · 일위대가 카드 = 한 줄 표(항목 · 수량산출 · 단위 · 노무비 · 재료비 · 경비 · 합계 · 금액 = 수량 반영 값 · 없으면 기준 값 흐리게) · 알약 색 = 알약 키로 자동(두 테마) · 이은 칸 배경 같은 색 옅게 · 반짝임 그대로 + +- [X] 40-1 일위대가 상세(sub2) — 이름 「단가산출 로직」 · 「자동값 xx」 조사 → 브레인 정함 → 고침 · 수량산출 열 + 손 입력 · 엑셀 모달 잇기(sub3 부품) · 로직 추가 · 올리기 · 내리기 · 빼기 · 자재 추가 = 버튼 · Labor_View 한 줄 표 갈래(카드용) — 확인 = 시험 · ORCA 수량 칸 손 · 엑셀 고름 → 반영 값 · 저장 → 다시 열기 + - 검증완료(1c0868b78 · fd4830556 · e70fc184a · 35ccc26af) — 시험 34 통과 · ORCA 5177 SU-000003: 손 5 → 79,280 × 5 = 396,398 · 엑셀 B6(12.5) → 4,523 × 12.5 = 56,537 · 저장 → 면적 연결 「노체포설|㎥ → B6」 · 손 5 · 반영합 = 화면 · 다시 열기 같음 · 저장 안 하고 떠나면 물음 · 고르기 칸 「자동값」 줄 없음(B05 값 카드 확인 상자 그대로) · 한 줄 표 300~560 · 면적 패널 320~560 가로 넘침 없음 · 밝음 · 어두움 · 검증용 마스터 2 파일 되씀 +- [X] 40-2 구조물 조합 상세(sub1) — 카드 단추 「가져오기」 · 「수정」 · 일위대가 카드 한 줄 표(sub2 갈래) · 「새 항목」 버튼 · 카드 셋 3열 · 카드 [삭제](비우기) — 확인 = ORCA 3열 · 삭제 → 빈 카드 · 시험 + - 검증완료(74a524202 · e3236558b) — 시험 53 통과 · ORCA 127.0.0.1:5174 폭 1600 = 3열(카드 402px · 높이 628 같음) · 1000 · 400 = 1열 · 가로 넘침 0 · 400 에서 면적 카드 단추 여섯 줄 바꿈(카드 밖 0) · 단추 「수정」 · 「가져오기」 · 「삭제」 · 「새 항목」 높이 32 · 글 14px(저장과 같음) · item1 일위대가 [삭제] → SU-000001 · item1 그대로 · 담은로직 14 → 0 · 빈 카드 두 단추 · 면적산출 [삭제] → SA-000001 그대로 · 칸 · 연결 0 · 일반 계정 마스터 · 회사 카드 단추 0 · 어두움 · 마스터 사본 되씀(차이 0) · 남음 = 도면 [삭제] 는 마스터 도면이 다 비어 화면 확인 못 함(서버 길은 40-4 시험) +- [X] 40-3 면적산출 상세(sub3) — 알약 끌어 칸에 놓기 추가 · 알약 색 자동 · 이은 칸 같은 색 · 반짝임 그대로 · 엑셀 칸 고르기 모달 부품(sub2 용) — 확인 = 끌어 놓기 → 연결 · 색 수치 · 두 테마 · 검증완료(sub3 · 시험 16 + 하네스 15 · ORCA 5178: 칸 고르기 모달 C5 · 풀기 · 그만둠 · 끌어 C3 → 연결 · Ctrl+Z 풂 · F14 에 놓기 = 물음(취소 그대로 · 바꿈 = 갈아끼움) · 색 24 서로 다름 · 테두리 대비 최소 밝음 3.40 · 어두움 3.55 · 글 8.85 · 6.35 · 카드 · 상세 둘 다 · 마스터 변화 0) · 검증 대기 +- [X] 40-4 서버 비우기 길(sub7) — 항목(도면 · 일위대가 · 면적산출) 비우기 = 빈 문서로 씀(번호 · 열 그대로 · 권한 규칙 그대로) — 확인 = 시험(세 종류 · 권한 403) + - 검증완료(sub7) — test_m02_part_clear 7(세 종류 빈 문서 = 새 열 꼴 · 번호 · 장부 그대로 · 면적 비우면 일위대가 수량 「없음」 · 일반 마스터 403 · 남의 개인 403 · 회사 관리자 동료 개인 200 · 없는 열 404 · 모르는 종류 422) · typecheck · 00cb6db66 · 화면 함수 clearPart +- [x] 40-5 합치기 · 끝 검증 · 메인 반영 · 브레인 요구 대조 · 실제 검증 · 보고 · main 795b861da(40 · 41 함께 · 흠 D1~D4 고침 · CAD 빌드 · 시험 90) · 끝 검증 · 브레인 실제 검증은 사용자가 하기로(10-4) · 검증 대기 + +## 41. 면적산출 표 → 도면 표 (사용자 지시 10-4 밤) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004_2.md` 끝 「추가 기능」 — 면적산출에서 범위를 골라 도면으로 보내면 도면에 표가 들어가고 칸 내용이 따라감(어려우면 [업데이트] 단추) · 표 여러 개 · 자리는 도면에서 사용자가 끌어 정함 +- 정함(브레인): 조사 먼저(CAD 표 · 묶음 꼴 · 호스트 ↔ CAD 메시지 · 끌어 놓기 · 값 따라가기 길) → 브레인이 설계 정함 → 구현 · 원본 단가산출 로직 자료 손대지 않음 + +- [X] 41-0 조사(sub8) — 보고 `tmp/조사_41-0.md` · 끝(CAD 표 객체 TableEntity 있음 · 미리보기 틀 있음 · DXF 표 빠짐 흠) + +- 정함(브레인 · 조사 추천 그대로): 표 = CAD 표 객체(TableEntity · 한 덩어리) · 따라가기 = 면적 [저장] 때 서버가 그 열 도면 표 칸 글을 다시 적음 + 도면을 열 때 기록 값 ≠ 지금 값이면 알림 · [업데이트] · 연결 표지 = 표 style.연결(표 id) · 칸 key 「시트!A1」 · 보낼 꼴 = 표시 글(형식 적용) · 병합 · 가로 정렬 · 굵게 · 열 너비 비율(채움 · 테두리색 · 글자색 안 보냄) · 크기 = 표 글자 크기 하나(기본 2.5 · 보낼 때 바꿀 수 있음) · 넘김 = 같은 페이지 안(캐시 · 서버 안 씀) · 시작은 면적 상세 [도면으로 보내기] 단추(칸 메뉴는 뒤) · DXF 내보내기에 표 = 선 + 글 + +- [x] 41-1 서버(sub7) — 범위 → 표 칸 변환(Node 묶음 formatValue 다시 씀 · 새 M02_Area_Table.py) · POST /api/m02/layers/{층}/area/{열}/table · 면적 저장 때 도면 표 맞춤(마스터 · 회사 · 개인 층 + 프로젝트 층 길) — 확인 = 시험(형식 · 병합 · 한도 · 권한 · 저장 뒤 표 글 바뀜) + - 검증완료(sub7) — test_m02_area_table 10(형식 「1,234.50」 · 식 칸 · 굵게 · 가로 · 병합 rowSpan · 범위 밖 병합 잘라냄 · 숨긴 행 3 · 열 D 뺌 · 빈 칸 · 한도 171>100 · 없는 시트 · 범위 꼴 · 길 200 · 저장 안 함 · 남의 개인 403 · 없는 열 404 · 면적 저장 뒤 T1 칸 「10.00」 · 자리 · 크기 그대로 · 다른 표 그대로 · 표 없는 T2 기록 값 갱신 · 프로젝트 층 맞춤) + store · structure · template_layers · labor · clear · copy · spreadsheet_store 74 통과 · typecheck · 8009 실제 길 200 · 3ded39875 +- [x] 41-2 CAD · 호스트(sub8) — 메시지 place-table · update-table · 「표 놓기」 도구(커서 따라오는 미리보기 · 누르면 놓임 · Esc · 되돌리기) · cad_host · Drawing.ts 함수 · CAD 빌드 · DXF 표 = 선 + 글 — 확인 = vitest · ORCA 놓기 · DXF LINE · TEXT 수 + - 검증완료(sub8 · c426fa2ad · 0bc560663 · cc63e49ab · b2aa2a987) — vitest 8(놓기 · 연결 남음 · 칸 갈기 · 넘침 · 없는 연결) · DXF 시험 4(거울 = TS 표 기하 · 면적 표 LINE 13 · TEXT 5 · 정렬 L/C/R · B07 수량표 LINE 7 · TEXT 3 — 전에는 표가 빠짐) · ORCA 5183 M02 도면 상세: 미리보기가 커서 따라옴 · 누르면 놓임(drawing-changed) · Esc 그만 · Ctrl+Z 1→0 · 다시하기 · MOVE(새 id) 뒤 저장 JSON style.연결 T1 남음 · update-table T1 = 1 · 없는 연결 0 · 자리 · 너비 그대로 · 밝음 · 어두움 · 저장 안 하고 나감 · 자동백업 지움 +- [x] 41-3 화면(sub5) — 면적 상세 [도면으로 보내기](고른 범위 · 글자 크기) → 그 열 도면 상세로 넘겨 놓기 · [저장] 때 연결표 기록 · 다시 열 때 다름 알림 + [업데이트] · 표 여러 개 — 확인 = ORCA 범위 고름 → 보냄 → 끌어 놓음 → 저장 → 면적 값 바꿔 저장 → 도면 표 글 바뀜 + - 검증완료(sub5) — typecheck · test_m02_area_to_drawing 7 · structure_panel · ORCA 5180 마스터: A1:C4 보냄 → 놓음 → 저장(표 T1 · 연결표 T1) · 면적 A1 · B1 · C2(식) 저장 → 도면 표 글 길이 · 12.5 · 25 · 같으면 알림 0 · 기록 값 옛 값이면 「바뀐 표 1개」 + [업데이트] → 저장 값 갱신 · 표 셋(T1~T3 · 글자 5 · 2.5) · T3 지움 → 도면 · 연결표 둘 다 빠짐 · 마스터 사본 되씀(git 빈 상태) · 권한 없는 층 단추 0 은 시험으로만 diff --git a/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md b/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md new file mode 100644 index 000000000..fa33578c6 --- /dev/null +++ b/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md @@ -0,0 +1,108 @@ +# 지난 계획 — 33~38장 (2026-10-01 ~ 10-02) + +단가산출 로직 점검(데스크탑 한시) · 쉬운 단가산출 · 로직 만들기 시험판(세 칸 판 · 시트 로직 · 다이어그램) · 흐름도 시험판 · 흐름도 본 프로그램 적용 · 일위대가 조합 다이어그램 · 마스터 요소 화면 손질. + +## 33. 단가산출 로직 점검 · 수정 (사용자 + 데스크탑 메인 · 보조 · 10-1 한시) + +- 사용자가 데스크탑 메인 · 보조와 직접 진행 · 브레인은 랩탑 sub1~8 로 사용자가 요청하는 다른 일을 맡음(10-1 18:00 무렵까지). +- 근거 = `docs/raw/M01_점검/종합/` · `docs/raw/M01_결정목록/` · `docs/raw/M01_입력목록/` · `docs/raw/M01_고침/`. + +## 34. 쉬운 단가산출 제어 (새 길 · 10-1 · 랩탑) + +- 사용자 확정(10-1 오전): 만든 쉬운 단가산출은 유지(지우지 않음) · 로직 정의 자체를 만드는 판은 제안만 · 허락 뒤 착수 +- 사용자 확정: 지금 단가산출은 그대로 · 「추가」 단추 옆 새 단추로 따로 들어감 · 코드는 `M01_MasterData/EasyCalc/` 한 곳(안 되면 폴더째 지움) · 초등학생도 추가 · 삭제 · 수정 · 시간이 걸려도 검토 먼저. +- 정함(브레인): 새 길은 지금 로직 형식을 그대로 읽고 씀(계산 엔진 안 바꿈) · 폴더 밖 참조는 단추 자리 한 곳만. +- [x] 34-1 검토 — 데이터 · 계산 지도(sub4) · 지금 화면 걸음 재기(sub6) · 실무 모양 + 갈래 비교(sub7) · 지난 시도(sub8) → `docs/raw/M01_쉬운단가/` · 지금 화면 새 로직 38 누름 · 5~6 창 +- [x] 34-2 설계 확정(브레인) — 문장 카드 · 품셈 기본은 「이걸 바탕으로 고치기」 · 쓰기는 `/logic/*` 만 · 1단계 숫자 수량 + 잠금 카드 → `docs/raw/M01_쉬운단가/설계.md` +- [x] 34-3a 단추 + 빈 창(sub1 · 「식으로 새로 만들기」 옆) 검증완료 +- [x] 34-3b 1단계 — Model(sub7) · Api(sub4) · Cards(sub2) · Pick(sub3) · Sheet(sub5) · 틀 · 잇기(sub1) — 설계.md 2 · 3절 · Sheet 검증완료 · Model 검증완료 · Api 검증완료 · Pick 검증완료 +- [x] 34-3c 2단계 — 표 보고 고르기(sub8) · 조건 고치기(sub7 · 조건 줄 93% 읽음) 검증완료 · 카드 단추 잇기(sub2) · 조건 고치기 검증완료 +- [x] 34-4 검증 — 대표 일 여섯 + 예외(빈 값 · 같은 이름 · 저장 안 하고 닫기 · 권한 없음 · 밝음 · 어두움) · 지우기 시험(폴더 밖 참조 줄 수) · 걸음(sub3 고침 뒤) ①21 ②8 ③2 ④4 ⑤2 ⑥3 = 40(목표 36 넘음 4 · ① 새 설계 값 자동값으로 채워 금액 곧장 보임) · 다른 일위대가 넣고 저장 됨 · 권한 없음(일반 사용자) = M01 화면 못 들어감 · /api/m01 403 · 폴더 밖 참조 두 줄 · 검증완료 + +## 35. 단가산출 로직 만들기 판 (제안 단계 · 착수 전) + +- 사용자 확정: 쉬운 단가산출처럼 따로 폴더 시험판 · 로직 몇 개 골라 만듦 · 페이지 보고 판단(마음에 안 들면 지움) · **착수는 허락 뒤** · 인터넷 조사 먼저 · 화면 용어는 단어로 다시 제안. +- 제안서 https://claude.ai/artifact/U4rkgpYWL4Em5VKBEVa4oY (세 칸: 원문 표 · 산출 과정 · 결과) +- [x] 35-0 인터넷 조사 — 견적 프로그램(sub6) · 노코드 규칙 도구(sub8) → `docs/raw/M01_쉬운단가/로직판_조사_*.md` · 제안서 2판에 반영 +- [x] 35-1 용어 단어 제안(제안서 2판 「용어 — 단어로」) → 사용자 확정 · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-2 시험판 — 사용자 허락(10-1 · 갈래가 여럿이면 갈래마다 · 목적 = 코딩 없이 원문 보며 확인 · 수정 · 생성) · A 세 칸 판 `LogicBuilder/` · B 엑셀 시트형(우리 스프레드시트) · 먼저 조사: 엑셀 로직 지도(sub4) · A 설계 초안(sub7) → 브레인 A 대 B 판단 → 구현 · 완료 처리(10-4): 35-2a 로 함 +- [x] 35-2a A 세 칸 판(가운데 문장 / 격자 두 보기) — 정함 `docs/raw/M01_쉬운단가/로직판_A_정함.md` · Blocks(sub7) · 서버 · Api(sub4) · 원문 · 검사(sub8) · 문장(sub2) · 격자(sub5) · 단계 안내(sub3) · 틀 · 잇기 · 끝 검증(sub1) · LB 서버 검증완료 · Blocks 검증완료 · Grid 검증완료 · Steps 검증완료 · Source · Check 검증완료 · Wizard 검증완료 · 잇기 · 끝 검증완료(sub1) — ① 원문 대조 6/6 블록 읽힘 · 걸린 줄 · 출처 보임 ② GF000219 표 칸 0.15→0.20 = 79,280→96,759 원(예상과 같음) · 파일 안 바뀜 · 다시 열면 0.15 ③ 단계 안내 11 걸음 + 저장 → 현장 다시 열림 60,984 원(/calc 같음) → 삭제 2 걸음 ④ 빈틈 해당 없음 10 · 못 따진 표 조회 1 · 기대값 시험표 맞음/다름 · 화면 초안만 ⑤ 표 고침 없을 때 lb/calc = /calc 8/8 · 문장 ↔ 격자 같은 값 · 예외(빈 이름 · 저장 안 하고 닫기 · Ctrl+Z · Ctrl+S · 권한 없음 403 · 밝음 · 어두움) · 폴더 밖 참조 LogicLab.ts 두 줄 + main.py 등록 한 줄 +- [x] 35-2b 남은 것(사용자 판단 뒤) — 문장 / 격자 고르기 · 표 칸 고침 저장 여부 · 적용 품셈 판 · 용어 · 칸 역할 「결과」 바꾸기 · 단계 안내 고르기 창 수량 물음 · GX000001(메인 11:53 · 12:02) 주인 확인 · 보고 https://claude.ai/artifact/NqKfHaJULcQo6dSvnsxy1n · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-3 점검(확인만) — 표끼리의 관계(로직) 자체를 초등학생이 만들고 · 바꾸고 · 지울 수 있나 · 품셈에 없는 관계 더하기 · 시나리오 여섯(sub6) — 결과: 있는 관계의 값만 고침(초등 중) · 관계 더하기 · 지우기 · 다시 잇기 · 새 입력값 · 새 표 · 로직끼리 바꾸기 안 됨 · 문턱만 바꾸면 계산 멈춤 + 엉뚱한 알림 · `docs/raw/M01_쉬운단가/로직판_관계제어_점검.md` +- [x] 35-4 다이어그램 제안(사용자 생각 10-1) — 상자 = 표 · 입력값 · 고정값 · 계산 · 항목 · 다른 로직 · 결과를 직접 다룸 · 선 = 관계를 만듦 · 품셈에 안 묶임(사용자 표 · 사용자 관계) · 관계 제어 = 다이어그램(사용자) · 위 가로 띠 + 아래 고른 상자 다루기 · 결과 · 관계 = 진짜 엑셀 수식(칸 주소 · 함수 · 사용자 확정) · 알약 = 입출력 칸 표시 · 새 종류 「시트 로직」(TS 엔진 한 벌 · 서버 Node) · 제안서 https://claude.ai/artifact/4iCAGPhE9maauGNTkXg5he · 허락 전 착수 금지 · 완료 처리(10-4): 35-5 · 35-7 로 함 +- [x] 35-5 시트 로직 시험판(사용자 허락 10-1 오후) — 위 가로 다이어그램 · 상자 = 시트 · 관계 = 엑셀 수식 · 입출력 = 알약 · 저장 = `M01_MasterData/SheetLogic/_data/`(git 밖 · 폴더째 지움) · 정함 `docs/raw/M01_쉬운단가/시트로직_정함.md` · Model · Eval(sub7) · 서버 · Api(sub4) · Diagram(sub8) · Panel(sub2) · Table(sub3) · Item · Result(sub5) · Import(sub6) · 틀 · 잇기 · 끝 검증(sub1) · SL 서버 검증완료 · Model 검증완료 · Diagram 검증완료 · Item · Result 검증완료 · Table 검증완료 · Import 검증완료 · 잇기 · 끝 검증완료(sub1) — 걸음: S1 ①②③ 각 3(79,280 · 73,085 손셈 같음 · 2.5m 문턱은 품셈 표 3m 부터라 2.5~3m 해당 없음) · S2 ① 3 ② 4(찰쌓기 표로) ③ 5 · S3 ① 약 19(경사 급 65,018) ② 9(내 표 붙여넣기 · 할증 10) ③ 7(잡재료 2% 17,551) · S4 선 끊기 2 · 상자 지우기 2(물음 한 번) · Ctrl+Z 되돌림 · S5 0(상자 · 선 · 값 한 장 · 고르면 이어진 선 진하게) · S6 항목 일위대가 11 · 다른 로직 상자 13(덤프트럭 16.2) · 새 로직(품셈 없이) 25 걸음 → 저장 서버 36,000 = 화면 → 다시 열림 → 지우기 2 · 서버 = 화면 4/4(36,000 · 17,550.9 · 10.12 · 다시 열기) · 가져오기 6/6 /calc 같음(0 · 60,984/79,280 · 2,064,816 · 670 · 16.2 · 57,516) · 예외(빈 이름 · 같은 상자 · 순환 · 빈 입력 물음 · 저장 안 하고 닫기 · 권한 없음 sl 5/5 403 · 밝음 · 어두움) · 세 칸 안쪽 세로 밀기 없음(6개 모든 상자) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 남은 흠(다른 창): 가져온 표 상자 + 결과 칸 목록 예시값이 글자로 들어가 30 등에서 해당 없음(sub5) · 가져온 로직 화면 번호 · 자재 검색어 · 끝 검증완료(S1~S6 · 새 로직 · 서버 = 화면 4/4 · 가져오기 6/6) · 남은 흠: 결과 칸 예시값 선택이 글자 「30」 으로 들어가 표 찾기 해당 없음(sub5 · 사용자 지시 뒤) +- [x] 35-5a 사용자 요청 — 다이어그램 띠 · 고른 상자 시트 · 결과 높이를 안쪽 세로 스크롤이 없을 때까지(sub1) +- [x] 35-6 로직 문법 먼저(사용자 방향 10-1 14시 무렵 · 화면보다 로직) — 바탕 표(인력 378 · 재료 30,767 · 기계 654 · 소요량 2,535 · 계수 498 · 환율 · 요율 · 사용자 표 — 보기 · 만들기 · 비목은 표가 정함) · 단위 넷(값 · 표 · 정보 · 요소) + 묶음(세분화 · 묶기 · 분류 · 묶음째 잇기 · 겹 묶음 · 틀 다시 쓰기) · 흐름 셋(정보 만들기 · 잇기[그대로 · 바꿔서 · 갈라서 · 모아서 · 묶음째] · 내기) · 확인 도구 · 제안서 https://claude.ai/artifact/BFWvm1Q4fhCSZ4Rt34UgYY · 다음 = 문법 확정 → 종이 연습(절 10개) — 허락 전 착수 금지 · 완료 처리(10-4): 35-7 · 35-9 흐름도로 갈음 +- [x] 35-5b 단추 공용 양식(점검 끝 · 고침은 사용자 지시 뒤) — 날 단추 23(목록 줄 8 · 칩 · 역할 · 보기 바꿈 11 · ▾ 2 …) · sm 단추를 44px 로 덮기 3 · 큰 시작 56px 3 · `docs/raw/M01_쉬운단가/시험판_단추_점검.md` · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-7 단가산출 다이어그램 시험판(사용자 기준 10-1 14시 무렵) — 입력 · 함수 · 출력 상자 · 자유 배치 · 함수 = 엑셀 · 출력 하나 · 출력 = 비용 종류 · 원가 · 폴더 `M02_MasterTemplete/CostFlow/`(_data · _sample) · 정함 `docs/raw/M01_쉬운단가/원가다이어그램_정함.md` · Model · Eval(sub7) · 서버(sub4) · Diagram(sub8) · 함수 판(sub2) · 입력 판(sub3) · 출력 · 원가(sub5) · 견본(sub6) · 단추 · 페이지 · 잇기 · 끝 검증(sub1) · Model 검증완료 · Output · Summary 검증완료 · Sample 검증완료 · FuncPanel 검증완료 · Diagram 검증완료 · CF 서버 검증완료 · InputPanel 검증완료(사용자 요소 만들기는 서버 Api 가 main 에 오면 확인) · 잇기 · 끝 검증완료(sub1) — ① 빈 판에서 손으로 메쌓기 꼴(변수 4 · 소요량 표 2 · 인력 2 · 함수 증가율 → 석공 / 보통인부 병렬 · 출력 노무비 2) 9 상자 · 약 138 손놀림 → 원가 148,471 = 견본(증가율 40 · 석공 97,882.512 · 보통인부 50,587.992 손셈 같음) ② 비용 종류 바꾸면 148,471 이 노무비 → 경비 → 재료비 로 옮겨감 · 「값」 이면 원가에서 빠짐(각 1 걸음) ③ 상자 끌어 옮김(1520,190 → 1675,306) · 저장 → 다시 열면 그대로 ④ 함수 출력 하나(다른 칸 고르면 옮겨감 · 알약 하나) · 순환 막힘 · 출력에서 나가는 선 없음 · 빈 받는 자리는 저장 때 물음 ⑤ 사용자 요소(시험 보조공 200,000) 5 걸음 · 마스터 그대로 · _data 에만 ⑥ 저장 때 서버 = 화면 2/2(148,470.504) ⑦ 단위 오른쪽 위(- → 원/㎡) · 색 바꾸기(Entry 판 머리) · 「다이어그램」 이름 · 다이어그램 726px · 안쪽 스크롤은 함수 격자(가상 200줄)만 · 밝음 · 어두움 · 권한 없음(cf 길 6/6 403 · 화면 못 들어감) · 견본 셋 = /calc · 손셈(148,471 · 3,000 · 15.552) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 끝 검증완료(손으로 메쌓기 9 상자 = 견본 148,471 · 비용 종류 옮김 · 자리 저장 · 규칙 · 사용자 요소 · 서버 = 화면 · 견본 셋 손셈) · 함수 출력 기본 이름 겹침 고침(sub7 2be767d18) · 남은 것: M01 단가산출 단추 줄이 셋째 줄까지(시험판 단추 넷 · 사용자 결정) +- [x] 35-7a 브레인 실제 검증(10-1 16:45) 흠 여섯 고침 — ① 고칠 것 칸 지난 경고 · ⑥ 시험판 단추 「시험판 ▾」 로 묶기(sub1) · ② 알약 쉼표 · ③ 표 알약 글 · ⑤ 맞춤 확대 90% 아래 안 감(sub8) · ④ 입력 상자 공통 단위(sub3) · 다시 검증완료(16:55 · 고칠 것 칸 비어 있음 · 알약 쉼표 · 표 · 40줄 · 인력 원/일 · 확대 90% · 막대 한 줄 · 시험판 ▾ 넷 · 원가 148,471) + +## 35-8. 단가산출 다이어그램 2판 — 재료 선택 자리 · 선 규칙 (계획 · 허락 전) + +- 사용자 확정: 고르는 방식은 재료만(다른 그룹은 상자를 늘림) · 설계 때 입력은 오른쪽 아래 검증 칸 · 나중에 프로젝트에서 일위대가로 쓸 때 재료는 목록에서 고르거나 단일 값 · 표에 따라 출력을 가르는 것은 엑셀 수식 대신 선 규칙. +- 정함(브레인): 재료 요소 = 고정 · 선택 자리 · 조건 찾기 · 알약 이름 = 자리 이름 · 선 규칙 = 선 하나에 하나(표에서 찾기 · 조건 통과 · 바꾸기) · 규칙은 받는 칸 엑셀 수식으로 바뀌어 엔진 한 벌 · 선 위 규칙 글 늘 보임. +- [x] 35-8a 틀(Model) — 재료 요소 방식 · 범위(구분 · 상세구분 · 찾는 말) · 조건(규격 ← 알약) · 기본 품목 · 선 규칙 칸 · 규칙 → 받는 칸 수식 · 조건 선 겹침 · 안 맞음 검사 — node 시험(sub7) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8b 서버 — 선택 자리 기본 품목 · 조건 찾기 단가(맞음 0 · 여럿 알림) · 「설계 때 정할 것」 목록(변수 + 재료 자리) 내보내기 — 시험(sub4) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8c 입력 판 — 재료 방식 · 범위 · 조건 규칙 · 기본 품목 · 찾기 고침(쪽 넘기기 · 띄어쓰기 AND · 규격까지) — ORCA(sub3) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8d 검증 칸 — 재료 선택 자리를 변수처럼(범위 안 목록 고르기 · 찾기) · 조건 자리는 잡힌 품목 표시 — ORCA(sub5) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8e 선 규칙 — 선 위 규칙 글 · 선 누르면 아래 판에서 규칙 고르기(표 찾기: 조건 칸 ↔ 알약 · 꺼낼 칸 / 조건 통과: 알약 · 같음 · 다름 · 이상 · 이하 · 값 / 바꾸기: × · ÷ · +% · 단위 · 끝수) · 고른 상자 판에 들어오는 선 규칙 목록 — ORCA(sub8 · 판 sub2) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8f 견본 · 끝 검증 — 견본 둘 더(지반에 따라 굴삭기 / 브레이커 가르기 · 흄관 관경 조건 찾기) · 사용자처럼: 함수 상자 없이 표 찾기 · 가르기 · 검증 칸에서 재료 고르기 · 방법 걸음 수(sub6 견본 · sub1 잇기 · 끝 검증) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8g 다이어그램 마우스 — 판 옮기기 = 가운데 단추 끌기 · 고르기 = 왼쪽 누름 · 왼쪽 끌기로 글자가 선택되지 않음(다이어그램 영역 글자 선택 막음) · 상자 옮기기는 상자 머리 왼쪽 끌기 그대로 — ORCA(sub8) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8h 「고른 상자」 → 「상세 내용」 · 상자뿐 아니라 알약 · 선을 골라도 내용이 바뀜(알약 = 값 · 단위 · 어디서 오나 · 어디로 가나 / 선 = 선 규칙 고르기) — ORCA(sub1 잇기 · 알약 · 선 판 sub2) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8i 상세 내용 단추 · 칸 크기 — 함수 판 꾸밈이 공용 작은 단추를 44px 로 덮는 줄(`M02_CF_FuncPanel.css` `.m01-cfpanel .ui-btn …`)을 지우고 판 안 단추를 모두 공용 작은 크기(createButton size "sm")로 · 입력 · 고르기 칸도 공용 크기 — ORCA 수치(sub2 · sub3 · sub5 각자 판) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8j 상세 내용 머리 — 왼쪽 「상세 내용」 · 오른쪽에 고른 상자 제목 · 알약을 골랐으면 그 오른쪽에 알약 이름(예 「높이 증가율 찾기 › 증가율」) · 상세 내용 안 칸 차례 정리(머리 · 상자 설정 · 본문 · 경고) — ORCA(sub1) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8k 단위는 고르기 — 단위 칸을 목록 고르기로(치면 걸러져 보이고 고르기는 사용자 · 손으로 쓴 글은 안 받음) · 목록 = 단위 표준(35-8l) 단위 + 마스터 결과단위 + 금액 단위(원) · 「-」 = 없음 · 함수 · 출력 · 변수 · 사용자 요소 단위 모두 같은 고르기 — 공용 고르기 파일 `M02_CF_UnitPick.ts`(sub2) · 판마다 바꿔 끼움(sub2 · sub3 · sub5) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8l 단위 표준 표 — 산림품셈 1-2-2 「설계서의 단위 및 소수의 표준」(원문 `resources/knowledge/original/원가계산/산림_표준품셈/본문/제01장_적용기준/1-02_설계_및_수량.md` · 종목 약 70 · 규격 단위 · 소수자리 · 단위수량 단위 · 소수자리 · 비고 · 주 ①~③)을 표로 — 소수자리 「-」 = 0 · 단위 「-」 = 없음 · 원문 흠은 사용자가 고침(시험판에서 보고 고치는 표 · 저장 `CostFlow/_data` · 처음 값 `CostFlow/_standard/`) — 시험(sub6) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8m 금액 단위 표준 — 같은 절 「금액의 단위표준」(설계서 총액 1,000원 · 소계 · 금액란 · 일위대가표 계금 1원 · 일위대가표 금액란 0.1원 · 모두 미만 버림)을 같은 표 자리에 — 출력 상자(비용) 금액 기본 = 일위대가표 금액란 0.1원 미만 버림 · 원가 합계 기본 = 계금 1원 미만 버림 · 바꿀 수 있음(sub6 표 · sub5 출력 · 원가) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8n 끝수 고르기 — 함수 상자 출력 · 출력 상자에 「끝수」(소수자리 · 반올림 / 올림 / 버림) · 단위를 고르면 단위 표준에서 소수자리를 제안(주 ① 반올림 · ② 항목 값이 우선) · 고른 끝수는 출력 칸 수식(ROUND 계열)으로 — 엔진 한 벌(sub7 틀 · sub2 함수 판 · sub5 출력 판) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8o 로직끼리 잇기 · 흐름 따라가기 — 저장한 다른 로직을 입력 상자로 불러 그 출력 알약을 받음(일위대가 → 일위대가) · 알약 · 선을 고르면 값이 어디서 와서(출처 사슬) 어디로 가는지(가는 곳) 다이어그램에서 길을 칠하고 상세 내용에 줄로 · 값이 끊긴 곳(빈 받는 자리 · 통과 안 된 조건 · 표에 없는 조건) 표시 — 시험 · ORCA(sub7 틀 · sub8 다이어그램 · sub1 상세 내용) · 완료 처리(10-4): 35-9 에서 함 +- 차례(사용자 10-1 · 「데이터의 흐름과 값의 연결에 집중」): **1단계 = 흐름 · 연결** a 틀 · b 서버 · e 선 규칙 · o 로직끼리 · 흐름 따라가기 · h 알약 · 선 고르기 · c · d 재료 자리 · f 견본 · 끝 검증(흐름 기준 — 값이 어디서 와서 어떤 규칙을 지나 어디로 가는지) / **2단계 = 값의 뜻 · 보기** k 단위 고르기 · l 단위 표준 · m 금액 표준 · n 끝수 · j 머리 · g 마우스 · i 단추 + +## 35-9. 단가산출 흐름도 시험판 (사용자 지시 10-1 17시 무렵 · 브레인이 끝까지 · 35-8 전체) + +- 사용자 확정: 브레인이 전체 제어해 새 시험판 하나 · 단가산출 다이어그램(시험)만 남기고 옛 시험판 셋 삭제 · 새 폴더(필요 없으면 바로 지움) · 데이터 흐름 · 값 연결 먼저 · 자유도 높고 이해하기 쉬운 화면 · 끝까지 구현 · 검증. +- 정함 `docs/raw/M01_쉬운단가/흐름도_정함.md` · 폴더 `M02_MasterTemplete/DataFlow/` +- [x] 35-9 창 여덟 — 옮기기 · Model · Eval(sub7) · 옛 시험판 지우기 · 들어가는 길 · 상세 내용 머리 · 잇기 · 끝 검증(sub1) · 서버(sub4) · 다이어그램(sub8) · 상세 내용 판 · 단위 고르기(sub2) · 입력 판(sub3) · 출력 · 검증 칸(sub5) · 표준 표 · 견본(sub6) · 표준 · 견본 검증완료 · Model 검증완료 · 출력 · 검증 칸 검증완료 · Diagram 검증완료 · 입력 판 검증완료(서버 자재 찾기 · UnitPick 이 main 에 오면 다시 확인) · DF 서버 검증완료 · 잇기 · 끝 검증완료(sub1) — ① 빈 판에서 함수 상자 없이 네 흐름 73 걸음: 재료 조건 찾기(관경 → 흄관 자리 · 13 개 중 하나 · 125,870) 21 · 선 규칙 표에서 찾기(높이 증가율표 → 출력) 19 · 조건 통과 두 갈래(지반 = / ≠ 토사) 27 · 다른 로직 잇기(견본 지반 · 지반 알약 이음) 6 ② 알약 · 선 고름 → 온 길 · 가는 길 칠함 + 상세 내용 줄(지반 → 다른 로직 · 두 조건 선 · 흄관 ← 관경) ③ 끊긴 곳 넷 보임(빈 받는 자리 · 통과 안 됨 · 표에 맞는 줄 없음 · 맞는 재료 없음 — 알약 · 선 「!」 · 끊긴 곳 줄 누르면 그 자리 고름) ④ 검증 칸 관경 600 → 800 = Φ800 품목 215,530 · 지반 토사 → 암 = 내 두 갈래 뒤집힘 + 다른 로직 2,000 → 10,000 · 다른 로직 설계 값 바꿈 10,000 → 20,000 ⑤ 단위 고르기 「mm」 = 3 개로 걸러짐 · 손글 안 받음 · 끝수 80,000.37 = 기본 225,870 / 1원 올림 225,871 · 표준 표 고침 저장(3 → 2) → 처음 값으로 되돌림 ⑥ 가운데 끌기 = 판 옮김(−60, −30) · 왼쪽 끌기 = 판 그대로 · 글자 선택 막힘 · 단추 18px 모두 sm · 칸 30px ⑦ 저장 → 다시 열기 = 상자 9 · 선 6 · 자리 · 규칙 글 그대로 · 서버 다시 셈 = 화면 187,910 · 견본 다섯 사본 저장 서버 = 화면(148,470.504 · 2,000 · 84,680 · 3,216.6 · 값 15.552) · 밝음 · 어두움 · 로그인 없음 df 길 6/6 401(관리자 아닌 계정 403 은 계정 없어 못 함) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 검증 중 고친 내 흠(047f3a279 · 28469de62): 재료 조건 찾기 · 선택 자리 값을 서버에 안 물음(흄관 견본 관경 600 → 400 = 211,700 → 116,600 · 1m 84,680 → 46,640 · 1000 = 235,120 · 선택 자리 Φ600 → Φ400 = 211,700 → 116,600) · 「상자 이름」 칸(입력 · 함수 · 같은 이름 · 빈 이름 막음 · 출력은 출력 판) · 머리 이름 · 단위 칸 작은 크기(30px) · 「새로 만들기」 단추 76px(칸 폭 710 아님) · 표준 표 모달 제목 한 번 · 남은 흠(sub2): 선 규칙 표에서 찾기 조건 칸에 범위 이름(「높이」)이 없어 범위 찾기를 화면에서 못 만듦(높이 5 → 줄 없음 · 4 만 맞음) · 브레인 실제 검증완료(흠 14 고침 · 흐름도 시험 81 · 견본 다섯 서버 = 화면 · 보고 JgfqRzLPYgqXG7vB2cV1Yj) · 검증 대기 + +## 36. 단가산출 흐름도 본 프로그램 적용 (사용자 지시 10-1 21:40 · 결정 반영 22시 · 착수 승인 22:20 · 밤새 진행 · 아침 보고) + +- 사용자 확정: 흐름도 = 최종 · 로직 목록에서 로직을 열면 지금 내용 그대로 + 오른쪽 흐름도 패널(같은 로직) · 「식으로 새로 만들기」 지우고 「신규 로직」(흐름도 새로 만들기) · 「본떠 만들기」 → 「로직 복사/생성」(신규 로직 오른쪽) · 시험판 단추 · 입구 지움 · DataFlow 폴더 유지. +- 근거(마스터 로직 57 파일 · 1,472 로직 · 입력 3,518 · 중간 식 3,168 · 호표 줄 5,265): 식 말 = 찾기(표 · 조건 · 칸) 8,152 · 만약 3,532 · 또는 185 · 최대/최소 173 · 올림/반올림/버림 141 · 로직() 41 → 흐름도 표에서 찾기 · 조건 · 함수 · 다른 로직 입력으로 옮길 수 있음. +- 사용자 결정 D1(그대로): 「품셈원문도 제대로 구현된게 아니기 때문에 내가 흐름도까지 만들어서 로직을 볼려는 거잖아. 그러니 당연히 둘다 같은 내용 … 원문과 대조하면서 검증할때 잘못된게 있으면 흐름도에서 수정할거야」 → 한 로직 · 두 보기: 왼쪽 지금 내용 = 보기 · 고치기는 흐름도(공용 로직 포함 · 시스템 관리자) · 흐름도로 저장한 로직은 흐름도가 정본 · 왼쪽은 흐름도에서 만든 같은 꼴 · 아직 저장 안 한 로직은 지금 내용에서 자동으로 그린 흐름도(값 대조로 같음). +- 사용자 결정 D2(그대로): 「흐름에 대한 로직은 costflow폴더에 있을테니 일단은 그냥 두고 쓸대없는 견본과 버튼만 삭제」 → CostFlow 폴더 그대로 · 시험판 단추 · 견본 목록 지움(흐름도는 DataFlow 폴더만으로 돌아감 · CostFlow 를 부르지 않음). +- 사용자 결정(함수 상자): 「함수박스를 기준으로 하나의 결과가 나가는게 맞는것같아. 여러개가 동시에 나가면 혼란만 가중」 → 함수 상자 하나 = 결과 알약 하나(그대로) · 식은 상자 겉에 넣지 않음(상자가 커짐) · 함수 상자 · 선을 고르면 상세 내용에 사칙연산 · 조건이 보이고 고치면 바로 따라감. +- 칸 연결 = M02 방식 그대로(칸을 고른 채 알약을 눌러 하나씩 연결 · 식은 칸 주소 · `spreadsheet_links.ts` 직접 확인) · 계산 엔진 · 이름 풀기 · 이름 규칙 없음 — 보기만 칸 주소를 연결된 알약 이름으로 바꿈. +- 사용자 결정(조건): 「조건문은 현재를 유지하는게 보기 편한것같고 대신 어떤값을 지정할지는 입력된 리스트에서 선택 … 조건 값을 내가 넣으면 오기 … 복수 조건문도 넣어주고」 · 「조건 만들기도 엑셀 기능 내부에서 존재해야해」 → 선 조건은 지금 웹앱 모양 · 조건 값은 고른 알약이 가질 수 있는 값 목록에서 고름(변수 고르기 · 표 칸 값 · 재료 규격 등 · 목록이 없는 수는 숫자 칸 + 범위 검사) · 조건 여러 줄(그리고 / 또는) · 함수 상자 엑셀 시트 안 「조건 만들기」(칸 고름 → 만약 · 아니면 만약 · 아니면 줄 → 그 칸에 IF 식 · 값은 같은 목록에서 고름). +- 안전: 화면 시험 저장은 마스터 사본 폴더에서만(서버가 환경 변수로 사본 폴더를 씀 · 실제 resources/master_data 는 안 바뀜 · git status 로 확인). +- 창: sub2 36-0(판 · 조건 만들기) · sub7 36-0b(조건 틀 · 값 목록) → 36-2 · sub6 36-1 → 36-7 · sub8 36-3 · sub4 36-4 서버 · 사본 폴더 · sub5 36-4 왼쪽 보기 · sub1 36-5 · 잇기 · 36-8 · sub3 36-6 +- 브레인 정함(조사 뒤 · 아침 보고에 알림): 옛 로직 「기계 · 직종 · 유가 자리」(EQ:{기계} · LB:{직종} · MO:경유:{지역} · 입력값으로 요소를 고름 · 71 로직)는 새 모드 없이 이미 있는 「조건 찾기」(이름 · 키 같음 · 변수 알약)를 인력 · 기계 · 유가 요소에도 씀 · 대조 입력 = check_master.시험입력 · 로직 셈을 부르는 곳(Store.calc · text · master_combo.run · M02_Item_Prices.calc · /logic/auto)은 한 곳에서 흐름 갈래. +- [x] 36-0 함수 상자 안 보기 · 칸 연결 조정(36-2 보다 먼저) — ① 상세 내용 「식 보기」: 결과 칸 식을 칸 주소 → 연결된 알약 이름으로(예: 1m 재료비 = 흄관 단가 ÷ 2.5) + 값 들어간 식(= 211,700 ÷ 2.5 = 84,680) · IF 는 만약 / 아니면 줄 · 지금 타는 갈래 표시 · 중간 칸 식도 차례대로 · 칸 식을 고치면 바로 다시 셈 → 다이어그램 · 원가 따라감 ② 「칸 연결 표」(칸 · 연결 알약 · 입력 / 결과 · 이어진 선 · 표에서 바로 바꿈 · 풀기) + 칸 색(입력 파랑 · 결과 초록 · 상자 색과 같음) · 결과 칸 하나 ③ 선을 고르면 그 선 규칙도 같은 「식 보기」 꼴(예: 굴착량 → 지반 = 토사 일 때만 → 굴삭기로 파기) ④ 엑셀 시트 안 「조건 만들기」 — 칸을 고르고 열면 만약 [알약] [비교] [값 고르기] → [알약 · 값] 줄 · 아니면 만약 더하기 · 아니면 → 그 칸에 IF 식(엑셀로 쓴 IF 도 같은 줄로 다시 열림 · 못 바꾸는 식은 식 그대로) · 검증완료(sub2 · 식 보기 · 칸 연결 표 · 조건 만들기 · 선 조건 여러 줄 · 시험 8) · 검증 대기 +- [x] 36-0b 선 조건 손질 — 조건 값 = 고른 알약의 값 목록에서 고름(Model 값 목록 함수 · 변수 고르기 · 표 칸 값 · 재료 규격 · 목록 없는 수는 숫자 칸) · 조건 여러 줄(그리고 / 또는) · 규칙 → 받는 칸 엑셀 식 · 서버 Compute 같은 뜻 · 선 위 이름표 · 겹침 · 안 맞음 검사 그대로 · 검증완료(sub7 · 조건 여러 줄 그리고/또는 · 값 목록 · 서버 = 화면 · 시험 30) · 검증 대기 +- [x] 36-1 조사 — 옛 식 문법 전수(서버 파서 · 요소 부르기 꼴 · 따옴표 글) · 변환 못 하는 꼴 목록 · /calc 를 부르는 곳 · 검증완료 +- [x] 36-2 변환 — 옛 로직(입력 · 중간 · 호표 · 덧줄 · 결과 · 끝수) → 흐름도(입력 상자 · 표 알약 + 표에서 찾기 · 함수 · 출력 상자) + 자동 배치 · 서버 파서로 · 옛 식에 나온 이름마다 알약을 칸에 연결하고 식은 칸 주소로(만약 → IF · 최대 → MAX · 찾기 → 표에서 찾기) · 함수 상자 하나 = 결과 하나 · 전수 대조(변환 흐름도 값 = 옛 계산 값 · 맞는 비율 · 안 맞는 까닭) · 검증완료(sub7 · M02_DF_Convert · 전수 1,472 시험입력 96.7% · 기본 입력 97.4% · 안 맞는 49 = 재료 검색어 자리 18 · 재료 빈 검색어 13 · 표 범위 규칙 경계 15 · 단가 빈 품목 3 · tmp/convert_report_36.json) · 검증 대기 · 마지막 대조: 시험입력 · 기본 입력 모두 1,472/1,472(100%) · 빈 단가 = 옛 셈 뜻(그 값 쓰는 식 빈 값 · 비목 합 0 · 끊긴 곳 「단가 없는 품목을 씀」) +- [x] 36-3 오른쪽 패널 — 로직 상세 오른쪽에 흐름도(다이어그램 · 상세 내용 · 원가 · 검증) · 너비 끌어 조절 · 접기 · 「크게 보기」(전체 화면) · 검증완료 +- [x] 36-4 저장 · 정본 — 로직 줄에 「흐름」 칸(화면 [저장] 때만 씀) · 흐름이 있으면 /calc 가 흐름도로 셈(서버 다시 셈) · 왼쪽 기본정보 · 단가산출 상세 · 텍스트 수식 · 시험 계산은 흐름도에서 만든 같은 꼴(보기) · 공용 로직도 흐름도로 고침(시스템 관리자) · 캐시 → [저장] 한 번 · [고친 것 버리기] 함께 · 왼쪽 보기 검증완료(sub5) · 서버 검증완료(sub4) +- [x] 36-5 단추 — 「식으로 새로 만들기」 지움 → 「신규 로직」(빈 흐름도 + 기본정보 · 저장 = 자체 GX 새 키) · 「본떠 만들기」 → 「로직 복사/생성」(흐름도도 복사 · 신규 로직 오른쪽) · 「시험판 ▾」 지움 · 잇기 검증완료(sub1 · accf8ecc4 · abbf61971 · 0d45014e3) — 「식으로 새로 만들기」 · 시험판 ▾ · 시험판 단추 둘 지움 · 단추 차례 ← 로직 목록 · 신규 로직 · 로직 복사/생성 · 로직 지우기 · 고친 것 버리기 · 저장 · 두 칸(LogicLab_Flow) · 오른쪽 패널(흐름 받기 · 고침 → drafts → [저장] 한 번 · 버리기 함께 · 흐름 로직이면 왼쪽 흐름 보기) · 신규 로직 기본정보 칸(LogicLab_Basic) → 저장 = 서버 added 키로 엶 +- [x] 36-6 다른 로직 입력 — 대상 = 마스터 로직 전체(찾기) · 흐름도 로직이면 흐름도 셈 · 아니면 옛 셈 · 목록 · 찾기 · 쪽 · 알약 이음 검증완료(서버 흐름 받기 · 값 셈 길이 main 에 오면 GF 로직 값 확인) +- [x] 36-7 정리 — 「시험판 ▾」 · 시험판 입구 · 흐름도 시작 화면 견본 목록 지움 · 시험이 쓰는 견본은 resources/tester 로 · 시험 저장 길 숨김 · DataFlow · CostFlow 폴더 그대로 · 검증완료 +- [x] 36-8 끝 검증 — 흐름 기준 · 옛 로직 열기 → 오른쪽 흐름도 값 = 왼쪽 계 · 신규 로직 → 저장 → 다시 열기 · 복사 · 권한 · 브레인 실제 검증 · 보고 · 끝 검증완료(sub1 · 사본 폴더 tmp/master_copy_36 + AISLO_MASTER_DIR · 네 포트) — ① 옛 로직 셋: GF000001(찾기) 오른쪽 34,413 = /calc 34,413.6 = 왼쪽 34,414(보임 끝수만 다름) · 변환 알림 한 줄 / GF000007(만약) 0 ≠ 597,285 · GF000288(로직()) 0 ≠ 1,234,760.96 — 아래 흠 ② GF000001 함수 식 ×1.5 → 오른쪽 · 왼쪽 51,620 따라감 → [저장](공용 GF · 사본) → 다시 열기 상자 6 · 변환 알림 없음 · /calc flow 51,620.4 = 화면 ③ 신규 로직 65 걸음(변수 셋 · 함수 · 조건 만들기 · 출력 둘 · 조건 선) → 저장 GX000004 → 다시 열기 상자 4 · 선 4 · 화면 100,000 = /calc 100,000 = 왼쪽 계(높이 2 = 0 · 지반 암 = 50,000) ④ 로직 복사/생성 2 걸음 → GX000005 상자 4 · 선 4 · 100,000 ⑤ 선 조건 두 줄 「지반 = 토사 그리고 높이 ≥ 3 일 때만」 · 값 고르기(토사|암) · 높이 2 → 0 · 또는 → 50,000 · 조건 만들기 =IF(A2>=3,A3,0) ⑥ 식 보기 「결과 1 = 금액 × 높이 ÷ 4」 · IF 만약 / 아니면 줄 · 칸 연결 표 ⑦ 크게 보기 1484×1076 · 거기서 고친 것 패널로 · 접기 40px · 펴기 · 너비 320 → 522 ⑧ 고친 것 버리기 5 → 4 · 캐시 비움 · 로그인 없음 flow · save · calc · logics 401 · 시험판 · 옛 단추 글 0 · resources/master_data 바뀜 0 · 흠(다른 창): 변환 숫자 입력 예시값이 비어 있음(시험입력 · 기본 입력을 안 넣음 — GF000288 나무높이 6 · 집재거리 100 · GF000007 정리량 50 …) · GF000007 「표 QF000033 → 할증」 표에 맞는 줄 없음(서버 477,828 = 할증 25% 빠짐 · 화면 0) · GF000288 다른 로직 GC000270 기계 자리 「EQ:{기계} … 자리」 못 풂(#N/A → 0) · 칸 #N/A 일 때 화면 셈 0 · 서버 셈 그대로(둘이 다름)(sub7) · 식 보기 값 줄이 선 규칙을 지난 값을 안 씀(「(#N/A × 0) = #VALUE!」 · 결과 알약은 34,413.6)(sub2) · 조건 통과 둘째 줄 값 목록 「number:0」 글 · 조건 만들기 만약 목록에 놓인 알약 없음(sub2) · 옛 로직 왼쪽 계 반올림 · 흐름 원가 계금 1원 버림(1원 차이) +- 36 마무리(10-2 02시 · 브레인 실제 검증완료): 전수 변환 대조 시험입력 1,469/1,472(99.8%) · 기본 1,466(99.6%) · 남은 3 = 마스터 빈 단가 · 시험 141 + 변환 시험 초록 · 사본 서버 저장 → 사본만 바뀜 · 다시 열기 흐름 정본 · GF000001 34,414 = 34,414 · GF000003 8.946 = 8.946 · 식 보기 값 줄 · 검증 대기 + +## 37. 일위대가 조합 다이어그램 (사용자 지시 10-2 09시 · 계획 · 착수) + +- 사용자 확정: 「복잡한 경우가 있으니 일위대가 조합도 다이어그램으로 표현 … 중요하게 생각하는 정보가 다르니 잘 구분」 · 조합은 계산하지 않고 로직을 뭉쳐 비용 구분별로 표기 · 입력은 로직별로 묶어 빈 값은 사용자가 넣음 · 출력은 로직마다 · 미리 보기 값은 구조물 조합으로 안 넘김 · 「흐름도는 별도 로직이 아님」(단가산출 로직을 쓰는 방법). +- 모양: 왼쪽 = 로직별 입력 묶음(받아야 할 값 · 빈 값 표시) → 가운데 = 로직 카드(키 · 이름 · 결과 단위 · 식 · 함수 안 보임) → 오른쪽 = 비용 구분 칸 셋(노무비 · 재료비 · 경비 · 로직마다 선으로 모임) + 값 로직은 「값」 칸 · 이름이 같은 입력(지역 · 자재지역 등)은 점선으로 이어 보이기만(검사 없음) · 로직 카드를 누르면 그 로직의 단가산출 로직 화면(흐름도)으로 · 계산 · 고치기 없음(묶음 고치기는 지금 표) · 흐름도와 모양 · 색을 달리함. +- 자리: 일위대가 조합 상세(M02_MasterTemplete_Labor_Edit)의 미리 보기와 같은 값 — 미리 보기 입력 칸에 넣은 값이 다이어그램에도 · 다이어그램 빈 입력 알약을 누르면 미리 보기 그 칸으로 · 미리 보기 결과(로직별 노무비 · 재료비 · 경비 · 계)가 카드 · 칸에. +- [x] 37-1 다이어그램 판 — M02_MasterTemplete_Labor_Diagram.ts(+css) 새 파일 · 고정 세 칸 배치(자동) · 판 옮기기 · 확대 · 한눈에 · 밝음 · 어두움 · 좁은 폭 +- [x] 37-2 잇기 — Labor_Edit 에 「다이어그램」 칸(접기) · 미리 보기와 값 한 벌 · 빈 입력 누름 → 미리 보기 칸 · 로직 카드 누름 → M01 단가산출 로직 그 로직 열기(setPendingLogicKey 꼴) +- [x] 37-3 검증 — 조합 셋(로직 2 · 9 · 14개)으로 입력 묶음 수 = 로직 입력 수 · 출력 = 미리 보기 줄 · 비용 칸 합 = 미리 보기 합 · 빈 값 표시 · 같은 이름 점선 · 로직 열기 · 브레인 실제 검증 · 보고 +- 창: sub2 37-1 · 37-2 · 37-3 + +## 38. 마스터 요소 화면 손질 (사용자 지시 10-2 09:40 · 착수) + +- 사용자 확정: ① 인력 · 재료 · 기계 · 소요량 · 계수 · 환율 · 요율 상세의 제목 · 단추 · 찾기 라벨 양식 = 단가산출 로직과 같게 ② 재료 컨테이너의 유가 · 전력을 별도 컨테이너로 ③ 단가산출 로직 「막힘만」 체크 — 의미 없으면 지움 ④ 단가산출 로직 컨테이너 「전체」 를 누르면 상세 목록 보기가 안 됨(다른 컨테이너는 됨). +- 브레인 정함: 「막힘만」 = 로직 검사에 걸린 로직만 거르기 · 지금 1,469 중 0 · 목록 줄에 「⛔ 막힘」 표시 · 까닭 말풍선은 이미 있음 → 체크만 지움(표시는 둠). +- [x] 38-1 양식 맞춤 — 일곱 상세 화면 머리(제목 · 단추 줄 · 찾기 칸 라벨)를 단가산출 로직 화면 꼴로 · 공용 단추 · 칸 크기(sub5) · 검증완료 +- [x] 38-2 유가 · 전력 컨테이너 — 왼쪽 패널에 재료 다음 「유가 · 전력」 컨테이너(재료_유가전력.json) · 재료 컨테이너에서는 뺌 · 고르기 · 찾기 · 상세 그대로(sub6) · 검증완료 +- [x] 38-3 「막힘만」 체크 지움 · 38-4 「전체」 목록 보기 고침(sub1) · 검증완료 — 원인: 로직 컨테이너 거름이 목록만 거르고 가운데 화면 전환(onLogic)을 안 부름 → Side 거름 run 에서 로직이면 onLogic · 「전체」 는 찾는 글도 비움 · 화면(5174): 로직 1,469 줄 → 인력 전체 → 로직 「전체」 = 로직 화면 1,469 줄(찾는 글 「굴착」 비움) → 산림품셈 330 → 03장 작업장 관리 10 → 로직 열기 → 「전체」 = 상세 닫힘 · 1,469 줄 · 막힘만 체크 0 · 화면 오류 0 +- 「고친 것 버리기」(사용자 물음 · 확인만): 저장 안 한 고친 것(화면 캐시)을 버리고 파일의 로직을 다시 엶 — 사본 저장은 없음 · 그대로 둠(사용자 결정 기다림) From 2bd6963334e64f539a11106c7a4df504689b5c23 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 10:11:31 +0900 Subject: [PATCH 4/5] =?UTF-8?q?chore(sync):=20=EA=B3=B5=EC=9C=A0=20docs=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=8B=B4=EC=9D=8C=20=E2=80=94=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=BB=A4=EB=B0=8B=EA=B3=BC=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9(=EC=A4=84=20=EB=81=9D=EB=A7=8C=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../raw/M02_구조물조합개편/사용자요구_1004.md | 50 ++++++++ .../M02_구조물조합개편/사용자요구_1004_2.md | 25 ++++ .../raw/M02_구조물조합개편/사용자요구_1005.md | 14 +++ docs/raw/M02_구조물조합개편/설계_정함.md | 105 +++++++++++++++++ ...10-04_plan_M02구조물조합개편_2차_도면표.md | 78 +++++++++++++ ...가산출_흐름도_조합다이어그램_마스터요소.md | 108 ++++++++++++++++++ 6 files changed, 380 insertions(+) create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1004.md create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1004_2.md create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1005.md create mode 100644 docs/raw/M02_구조물조합개편/설계_정함.md create mode 100644 docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md create mode 100644 docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1004.md b/docs/raw/M02_구조물조합개편/사용자요구_1004.md new file mode 100644 index 000000000..936caa071 --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1004.md @@ -0,0 +1,50 @@ +# M02 구조물 조합 개편 — 사용자 요구 (2026-10-04 · 원문 그대로) + +1번(계획서 32장 이후 정리)은 브레인이 처리함(c8269a969). 7 · 8번은 원문에 없음. + +## 2. 일위대가 조합 → 구조물 조합 하위 + +M02페이지의 마스터 템플릿 페이지에서 일위대가 조합은 구조물 조합의 하위 컨테이너로 넣을 것.(구조물 도면과 면적산출 사이에 배치) +- 일위대가 조합의 좌측 패널의 기존 보기 방식인 트리구조는 필요없으며 구조물 도면 처럼 리스트형태로 보임 +- 추가로 구조물 도면, 일위대가, 면적산출의 최상위에는 전체항목을 넣어주고 우측 상세에는 리스트로 보여줌, M01 항목을 보면 양식화되어 있는 페이지 헤이아웃 있음 + +## 3. 이름 + +이동한 일위대가 조합은 일위대가로 명칭 변경 + +## 4. 구분선 + +구조물 조합 컨테이너 내부의 서브 컨테이너 항목과 트리구조 사이에 수평 구분선 추가 + +## 5. 사용자별 구조물 조합 읽기 / 쓰기 / 복사 권한 점검 및 개선 + +- 시스템 관리자 : 아이슬로 프로그램 관리자로 마스터를 제공하여 회사관리자나 일반 사용자가 사용하기 쉽게 한다. +- 시스템관리자가 대시보드의 컨테이너 제목의 우측의 회사명을 선택함에 따라 변경한 목적은 해당 회사의 정보를 접근하고나 AS을 목적으로 고객을 도와주기 위함임. 복사항목에는 마스터나 시스템 관리자 회사, 개인으로 들어갈 항목 뿐만 아니라 고객 회사의 특정 폴더로 복사할 수 있는 기능이 있어야함. 수정/생성권한 포함 +- 회사관리자 : 고객으로 본인회사의 양식을 만들거나 개인 프로젝트에 사용할 개인 마스터데이터 관리 +- 회사관리자는 개인버튼을 누를경우 최상위 트리에는 다른 개인들의 정보를 보고 복사하여 개인에게 복사하거나 수정, 생성도 가능해야함. +- 개인은 마스터와 회사는 읽기만, 다른 개인의 정보는 볼수 없음. 트리는 현재를 유지해야함. + +## 6. 구조물 조합 항목 변경 + +- 최상위 구조물 조합에 구조물 도면, 일위대가, 면적산출로만 표현(기존의 재료산출의 사용자가 추가하는 재료들과 값은 엑셀을 사용하지 않고 일위대가의 담은로직 처럼 하위에 별도의 컨테이너로 추가되는 자재항목을 넣어야함. 이때 M01자재목록에서 하나씩 가져오되 수량은 면적산출의 알약으로 값을 싱크하거나 별도의 모달창에서 셀을 지정하게 구현) +- 재료산출 항목은 삭제 +- 선택입력 항목은 삭제(구조물 조합에서는 각 옵션의 상세 구조물에 따라 미리 옵션을 다 지정할 생각임으로 그럴필요 없음) +- 면적산출의 미리보기에서 아래 알약 그룹 행을 하이드/쇼 되게 반영(기본값은 하이드), 단, 면적산출 상세에서는 알약 행 보이기가 기본값으로 +- 면적산출 상세 화면의 우측 패널에서 현재의 일위대가 조합 목록을 검색하는 기능이 아니라 현재 구조물도의 일위대가 담은 로직과 추가될 사용자 지정 재료를 보여줄것, +- 일위대가 상세화면에서는 미리보기(보기만/저장안함) 컨테이너는 각 단가산출 로직에 입력이 필요한 정보들임. 구조물별로 하나씩만들어져야함으로 구조물의 일위대가 항목에 옵션값이 저장되야함. 그리고 이값에 대한 지정은 담은 로직 컨테이너의 항목을 누르면 모달창이 나오고 사용자가 입력 및 변경할수 있게함. (하위에 지정된 항목과 값을 작은 글씨로 표현되게 반영) +- 담은 로직에는 기준 단가를 기준으로 넣었을때 나온 값과 수량산출값을 넣었을때 값에 대한 노무비, 재료비, 경비, 합계를 같이 보여줌. 이때 수량산출은 면적산출의 특정 셀값이나 사용자가 수기로 입력한 값이 될수 있음. 이렇게 되면 미리보기 계산 컨테이너 필요 없음. +- 일위대가의 상세 화면의 순서는 담은로직 > 자재목록 > 다이어그램 순서임. +- 면적산출 산출 상세의 우측 패널에 보여져야하는 결과는 결국 일위대가의 담은 로직컨테이너와 자재목록임. +- 추가된 자재목록에도 기준에 대한 단가와, 면적산출 엑셀의 특정 셀과 연결되었을때 나온 단가가 같이 나와야함. + +## 9. 오른쪽 클릭 + +프로그램 B와 M영역의 페이지들에 마우스 오른쪽 클릭을 할 경우 브라우저 옵션 안보이게 할것.(우리 프로그램의 옵션은 허용, 공통양식 사용) + +## 사용자 답 (10-4 · 일위대가 · 원문 그대로) + +일위대가의 경우 +1. 구조물 조합을 복사한 경우 신규 키를 생성하여 만듬. (값과 로직은 일단 같이 복사) +2. 신규 구조물 조합을 생성하는 경우 미리보기 페이지에는 새로만들기와 복사생성하기를 선택하게 하고 복사 생성인 경우에는 해당 리스트를 보여주고 선택하게 보여주는 값은 개인인 경우에는 개인을, 회사관리자인경우 개인, 시스템관리자인 경우 마스터를 기본값으로 보여주고 탭을 눌러 다른 항목에서 가져올수 있는 항목들을 보여준다. +3. 다시 말해 최종적으로는 구조물 조합에 일위대가, 도면, 면적산출이 연되는게 맞으나 특정항목만 다른 값을 복사하여 가져올수 있어야함. 저장이 된 데이터라도 변경가능해야함. +4. 현재 매칭이 안된 데이터는 나중에 삭제할예정이나 마스터 데이터를 수동 생성을 위해서 필요한 데이터들임. 차라리 실무문서라는 항목을 마스터에 별도로 만들어서 나중에 한번에 지우게 할수 있게 반영. diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md b/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md new file mode 100644 index 000000000..3651b8c87 --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md @@ -0,0 +1,25 @@ +# M02 구조물 조합 개편 2차 — 사용자 요구 (2026-10-04 밤 · 원문 그대로) + +구조물 옵션보이기는 확인했음. 무시할것. + +다음 수정내용 + 1. 일위대가 상세 + - 담은 로직 이라는 명칭을 단가산출 로직 으로 변경 + - 로직들을 선택하면 나오는 모달 창에서 드롭다운 메뉴에 자동값 xx 항목이 나옴. 있을 필요가 있는지 확인 + - 결과 단위의 좌측에 수량 산출 열을 추가하고 결과단위 당 기준 수량을 넣어주고 아래에는 수량산출의 값을 수기입력이나 엑셀모달을 보여줘서 선택할수 있게 반영. + - 로직의 로직 추가, 올리기 내리기 빼기 버튼의 양식은 알약 양식이이 아니라 버튼양식으로 변경, + - 자재 추가도 동일하게 버튼 으로 + 2. 구조물 조합 상세 + - 일위대가 미리보기에서 복사해 가져오기를 가져오기로 변경, 일위대가 수정을 수정으로 이름변경 + - 도면정보에서 도면수정을 수정으로 이름 변경 + - 일위대가 미리보기에서 항목/수량산출/단위/노무비/재료비/경비/합계로 두줄을 하나의 항목 형태로 변경하고 자세한 내용은 상세내용에서 확인하게 변경(위내용 참고) + - 구조물 조합 제목 행에 있는 새항목의 버튼 양식을 알약에서 버튼으로 변경 + - 도면정보/일위대가/면적산출 컨테이너의 구조를 3열 구조로 변경 + - 도면정보/일위대가/면적산출 컨테이너 별로 삭제도 있어야하는게 아닌지. + 3. 면적산출 상세 + - 알약지정은 현재 방법 + 그래그 & 드랍 방식을 추가 + - 지정된 알약정보를 색상 자동지정 및 지정된 셀은 색상으로 구분을 할수 있게 반영, 반짝임은 유지 + +## 추가 기능 (10-4 밤 · 원문 그대로) + +추가기능 부여. 면적산출에서 특정 영역을 선정하고 도면영역으로 전달을 할 경우 도면에 테이블을 자동으로 넣고 셀의 내용을 싱크하는 기능을 부여. 만약 동기화가 어려운 경우 업데이트 버튼을 추가해도 무관, 복수개의 테이블이 넘어갈수도 잇으며 위치는 도면에서 사용자가 드래그하여 지정 diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1005.md b/docs/raw/M02_구조물조합개편/사용자요구_1005.md new file mode 100644 index 000000000..bea9b003e --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1005.md @@ -0,0 +1,14 @@ +# M02 구조물 조합 개편 3차 — 사용자 요구 (2026-10-05 새벽 · 원문 그대로) + +나는 이제 자러갈거야. 아래 추가 수정 내용을 확인해서 반영해주고 좀 전 중지한 검증 항목까지 검증해줘. 그런데 너무 검증에 토큰과 시간을 너무 많이 사용하고 있어. 최적화 방법 좀 찾아줘. +추가 확인사항 +1. 일위대가 상세화면에서의 단가산출 로직의 항목들은 2행 구조야. 1행은 기준 결과를 기준으로 한 결과행들과 2행은 수량산출 값을 넣었을때의 값인거지. 기본 2행 구조라만 1행은 선택된 옵션에 따라 결정된 값 행인거고 이걸기준으로 수량을 넣는 다면 2행을 값들이 되는거야. 현재도 이렇게 되어 있기는 한데 수량산출 항목을 선택하면 나오는 엑셀 모달창의 내 의도는 모달창으로 면적산출 엑셀을 보여달라는 말이었어. +2. 일위대가의 단가산출 로직 항목 행을 선택하면 수량 입력이 있는데 이건 없어도 됨. 외부에 있으니. +3. 자재 목록컨테이너에서 보이는 항목은 기준단가를 정해주는 것도 좋지만 자재목록의 5개 항목의 값을 비어있더라고 보여주고 기준단가가 되는걸 하이라이트 해주면 좋을것같아. +4. 구조물조합에서 일위대가 미리보기에서 일위대가 상세화면의 단가산출 로직(순서와 로직추가는 제외)과 자재목록을 그대로 보여주게 하되 기능은 유지(수량산출 연결창, 옵션지정 모달창)하고 수평스크롤을 가능하게 하기 +5. 일위대가의 재료도 2열구조여야 할것같은데.... +6. 도면정보, 일위대가, 면적산출을 접근 후 제목의 돌아가기 버튼은 알약이 아니라 일반 버튼으로 + +## 추가 (10-5 새벽 · 원문 그대로) + +추가 항목이 하나더 있어. 구조물 조합에서의 미리보고 3개 컨테이너에 새로만들기와 복사 생성로직이 필요없겠네. 구조물 조합의 새항목 생성을 하면 당연히 새로운 항목들이 자동으로 생성되잖아. 그후 가져오기를 하면 당연히 값을 가져와서 덮어쓰면 되겠어. 그리고 일위대가와 면적산출에서 가져오기를 하면 도면은 개별로 작성되는게 맞지만 일위대가와 면적산출은 연결되어 있는정보니 같이 가져오는게 맞겠어. 알약연결 포함해서. 이 내용도 추가해줘. diff --git a/docs/raw/M02_구조물조합개편/설계_정함.md b/docs/raw/M02_구조물조합개편/설계_정함.md new file mode 100644 index 000000000..229b350fd --- /dev/null +++ b/docs/raw/M02_구조물조합개편/설계_정함.md @@ -0,0 +1,105 @@ +# M02 구조물 조합 개편 — 정함 (브레인 · 10-4) + +근거 = `사용자요구_1004.md` · 조사 보고 A~H(각 창 `tmp/조사_39-0X.md`). 사용자가 바꿀 수 있음. + +## 1. 자료 틀 (B · sub7) + +- 일위대가 = 구조물 열마다 `labor/<열id>.json` · 번호 `SU-######`(도번 · 면적번과 같은 뒷자리 · 층마다 셈) · 자리 = 시스템 `resources/master_template/labor/` · 회사 · 개인 `…/templates/labor/` · 새 프로젝트 씨앗도 KINDS 로 함께. +- 문서 꼴: + +```json +{ + "종류": "일위대가", "판": 1, "열": "item1", "일위대가번": "SU-000001", "단위": "개소", + "본뜬": { "층": "system", "주인": null, "키": "UA000008" }, + "담은로직": [ + { "로직": "GF000219", "메모": "", "입력값": { "형식": "메쌓기" }, "수량": null }, + { "로직": "GF000137", "메모": "", "입력값": {}, "수량": { "손": 3 } } + ], + "자재": [ { "코드": "MT000008", "이름": "치즐", "규격": "", "단위": "EA", "수량": null } ], + "계산값": { "줄": [], "자재": [], "기준합": {}, "반영합": {} } +} +``` + +- 이름 = 구조물 열 이름(따로 안 둠) · 단위 = 자기 칸 · 같은 로직 두 번 금지 · 빈 일위대가 저장 됨 · 이름 겹침 검사 없음 · 입력값 = 그 로직 입력 이름만(모르는 이름 버림 · 빈 값 = 자동값). +- 수량 = `null`(면적산출 알약 연결 따름 · 로직 알약 「이름|단위」 · 자재 알약 「자재|MT키」 · 칸 연결 정본 = 면적산출 문서 `연결` 한 곳) | `{손: 수}`(손 입력 · 손이 칸보다 앞섬). +- 금액 = 기준(결과단위 그대로 · 원/10㎡ 면 10㎡ 값 · 단위 같이 표기) · 반영 = 기준 × 수량 ÷ 배 · 돈 아닌 로직은 반영 없음 · 「원/1,000본」 배 1000(`_PER` 고침) · 자재 기준 단가 = M01 `master_material.element` 기본값. +- 계산 자리 = 기준 ③ 서버(M01 엔진 · calc 길 · 화면은 최신 응답만) · 반영 곱 ① 짝(`M02_MasterTemplete_Labor_Calc.ts` ↔ `M02_Labor_Doc.py` · 두 파일 머리에 짝 · 거울 시험 · 면적 칸 값이 바뀌면 화면이 바로 곱함) · [저장] 때 서버가 `계산값` 을 다시 적음(브라우저 값 버림 · 목록 합계용) · 상세는 늘 새로 셈. +- 길 = 문서 `GET/PUT /api/m02/layers/{층}/templates/labor/{열}`(양식 길 · owner) · 계산 `POST /api/m02/layers/{층}/labor/{열}/calc` {doc?, 수량?: {키: 값}} → {줄[{로직, 분모, 배, 수량, 수량출처, 기준{노무비,재료비,경비,계}, 반영{…}, 까닭}], 자재[{코드, 기준단가, 수량, 수량출처, 반영, 까닭}], 기준합, 반영합} · 알약 `GET /api/m02/layers/{층}/labor/{열}/pills`(로직 물량 + 자재). +- 집계표 열 `일위대가` · `자재조합` 칸 지움(정본 = labor 파일) · SS 장부 줄 = `일위대가번` · `도번` · `면적번`. +- 옮기기(한 번 · `M02_Labor_Migrate.py`) = 층마다 열마다 labor 파일 · 열 `일위대가` 키 조합의 담은로직 · 단위 복사(`본뜬.키` = 옛 키 · 입력값 {} · 수량 null · 자재 []) · 여러 열이 쓰던 조합(UP10-000001)은 열마다 복사 · 키 없는 열 = 빈 일위대가 · 몇 번 돌려도 같음 · 시스템 층(git)은 바로 · storage 층은 압축 사본 뒤 브레인이 돌림. +- 실무문서 = 마스터 `resources/master_data/일위대가조합.json` 통째(37 줄 · 손대지 않음 · 옮긴 뒤 어느 열도 안 가리킴 · M01 일위대가 조합 화면도 그대로) · 회사 · 개인 옛 조합(UC · UP)은 파일 그대로 · 화면에서 뺌. +- 프로젝트 = 스냅샷 `일위대가.json` 은 labor 문서 + 담은 로직 줄 · `입력값.json`(모양 그대로) 첫 값 = labor 입력값 · `단가.json` 에 자재 MT 줄 · 계산은 반영 같은 함수. +- 은퇴(화면이 안 부른 뒤) = 일위대가 갈라 내기 · 키 적기(use-combo) · 조합 고치기 · 미리 보기 길(preview) · 일위대가 조합 나무 길. +- 로직 지우기 검사 = 모든 층 labor 담은로직 + 실무문서(32장 「로직 지우기 서버 검사」 줄 끝남). + +## 2. 좌측 패널 (A · sub5) + +- 맨 위 「일위대가 조합」 컨테이너 · 조합 나무 · 둘째 층 단추 벌 지움 · 구조물 조합 안 차례 = 층 단추 + 나무 → 수평선 → 구조물 도면 → 일위대가 → 면적산출. +- 하위마다 첫 줄 「전체 항목」(누르면 `onAll(kind)` → H 목록) · 일위대가 줄 = 열마다 「SU-… 이름」 · 누름 = `onOpen({kind: "labor", name: 열})`(C 상세). +- 이름 「일위대가」(하위 제목 · 상세 제목 · 대시보드 카드 글) · 해시 `open=일위대가` = 구조물 조합 펼침 + 일위대가 하위 펼침 + 전체 항목. +- 「실무문서」 = 구조물 조합 밖 별도 컨테이너(도면 양식 아래) · 마스터 층 · 시스템 관리자만 · 목록 + 상세 읽기만(새 파일 `M02_MasterTemplete_Practice.ts`) · [통째 지우기](물음 두 번 · 서버 = 시스템 관리자 · 쓰는 곳 0 확인 · 줄을 비움 · 버튼은 사용자가 누를 때만). + +## 3. 일위대가 상세 (C · sub2) + +- UI_Main 종류 `labor` 로 엶(양식 길 읽기 · [저장] · [다시 읽기] · 캐시 = 다른 양식과 같음) · 차례 = 머리 → 정보(단위 · 본뜬) → 담은 로직 → 자재목록 → 다이어그램 · 미리 보기 칸 지움. +- 담은 로직 줄 누름 = 입력 모달(그 로직 입력 전부 · 빈 칸 자동값 · 수량 = 이은 칸 · 값 보임 / 손 입력 / 「면적산출에서 잇기」 = 면적산출 상세로) · [확인] = 줄 값만(캐시) · 저장은 [저장]. +- 줄 아래 작은 글 「지역 서울 · 규격 25mm · 수량 B6 = 12.5㎡」 · 빈 입력 「빈 값 n」 붉게. +- 금액 칸 넷(노무비 · 재료비 · 경비 · 합계) · 칸마다 두 줄(위 기준 작게 · 아래 반영) · 맨 아래 합계 줄. +- 자재목록 = 코드 · 이름 · 규격 · 단위 · 수량 · 기준 단가 · 반영 금액 · [자재 추가](M01 자재 하나씩 · `M02_Material_Pick.ts`) · 줄 누름 = 수량 모달. +- 다이어그램 = 저장된 줄 값 + calc 답(수량 있으면 반영 · 없으면 기준 · 표기) · 알약 누름 = 입력 모달 · 자재목록 = 카드 하나 → 재료비 칸. +- 보기 갈래(고치기 없음) 부품을 냄 — D 오른쪽 패널 · H 카드가 씀. +- 입력 목록 · 값 받기 부품은 선택 입력에서 옮겨 다시 씀(`M02_Labor_Inputs.py` · `M02_Labor_Values.ts` · `M02_Labor_Values_Model.ts`) · 값 칸 규칙 한 벌(M01 넣을 값) · 로직 입력이 바뀌어 사라진 값은 알림. +- 37장 「미리 보기 값은 구조물 조합으로 안 넘김」 뒤집힘. + +## 4. 면적산출 (D · sub3) + +- 미리보기 카드 알약 줄 켬끔 단추 · 기본 꺼짐 · pref(계정) · 상세는 늘 보임(단추 없음). +- 상세 오른쪽 패널 = 그 열 일위대가의 담은 로직 + 자재목록(C 보기 갈래 · 기준 · 반영) · 조합 목록 · 찾기 · [이 열에 쓰기] · [조합 고치기] 지움. +- 패널 줄 누름 = 칸 지정 모달(`M02_MasterTemplete_AreaLink.ts` · [지금 고른 칸으로] · 주소 · [풀기]) → 면적 문서 `연결` · spreadsheet 손잡이 `setLink(키, 칸|null, 항목)`. +- 알약 = 로직 물량 알약 + 자재 알약(`자재|MT키` · 알약 모드 「자재」 다시 씀) · 선택 입력 알약 빠짐. +- 면적 금액 서버 계산은 1장 calc 하나(따로 안 만듦). + +## 5. 목록 · 고르기 · 카드 (H · sub1) + +- 목록 부품 하나 `M02_MasterTemplete_ItemList.ts`(M01 머리 · 쪽 · 표를 import · 옮기지 않음) — 「전체 항목」 · 복사 생성 · 항목 하나 복사가 같이 씀. +- M02 상세 제목 = M01 꼴(18px · 단추 오른쪽) 전부. +- 목록 칸: 도면 = 도번 · 이름 · 폴더 · 단위 · 고친 날 / 면적산출 = 면적번 · … / 일위대가 = 일위대가번 · 이름 · 폴더 · 단위 · 담은 로직 수 · 합계(`계산값` · 없으면 「—」) · 고친 날. +- 「새 항목」 → 상세 칸에 [새로 만들기] [복사 생성] · 복사 생성 = 같은 칸 탭 + 목록 → 지금 보는 층 · 고른 폴더(없으면 맨 위) · 원래 이름(겹치면 「(2)」) · 일위대가 새 번호. +- 카드 = 도면 · 일위대가 · 면적산출 셋(그 차례) · 빈 카드 = [새로 만들기] [복사 생성] · 찬 카드 = 「복사해 가져오기」(창 · 탭 + 목록 → 확인 → 덮어씀 · 번호 · 열 그대로) · 일위대가 카드 몸 = C 보기 갈래. +- 탭 = 마스터 · 회사 · 개인(나) · 다른 사람(드롭다운 · 맡은 회사일 때) · 실무문서(일위대가 고를 때 · 시스템 관리자) · 기본 = 시스템 관리자 마스터 · 그 밖 개인(회사 없으면 마스터) · 탭 목록 = E `readableSources`. +- 항목 하나 복사 서버 = `copy_from` 에 from_layer · from_owner(B 가 만듦) · 원본이 실무문서 조합이면 조합 → 일위대가 문서(입력값 빈 값). + +## 6. 권한 (E · sub4) + +- 「회사 C 를 맡음」 = 시스템 관리자 · 또는 C 의 회사 관리자 → C 회사 층 · C 모든 개인 층 = 보기 · 만들기 · 고치기 · 지우기 · 복사 대상. +- 일반 = 마스터 · 회사 읽기만 · 남 개인 안 보임 · 나무 그대로 · 프로젝트 apply · sources 도 같은 규칙. +- 사람 나무 = 맡은 회사면 켬 · 회사 사람 전부(나 맨 위 · 빈 사람 「비어 있음」) · 남의 층 첫 쓰기 = 소속 확인 뒤 뼈대. +- 「〇〇로 복사…」 = 쓸 수 있는 층 전부(마스터 · 볼 회사 · 내 개인 · 지금 사람) + 대상 폴더 고르기 창(`M02_MasterTemplete_TreePanel_CopyTo.ts`). +- 남의 층 쓰기 = `system_audit_logs` 한 줄(`M02_OTHER_LAYER_WRITE`). +- 실무문서 = 일위대가 조합 길 전부 시스템 관리자만(서버가 막음). +- 새 길(labor 문서 · calc · pills · 층 넘는 복사)도 `_root` · `_layer_dir` 한 벌을 거침. + +## 7. 지우기 (G · sub6) + +- G1 자재 조합(UM) · G2 재료산출(`material/` · SM · 카드 · 시트 · 옆 판 · 길 · 시험) 먼저 · G3 선택 입력(카드 · `inputs/` · 자리 · 알약 길)은 C 의 입력 모달이 선 뒤. +- `pickMaterial` · `MaterialItem` → `M02_Material_Pick.ts` 로 옮긴 뒤 지움 · 알약 모드 「자재」 · `LinkMaterial`(A00 spreadsheet) 남김 · `고른자재.json` 남김 · 프로젝트 `입력값.json` 남김. +- storage 층(회사 · 개인 · 프로젝트)의 `material/` · `inputs/` · `자재조합.json` 파일은 지우지 않음(읽기만 끊음 · 정리는 사용자) · git 안 시스템 층 · fixture 는 지움. +- 옛 SM 번호 버림 · 장부 `재료번` 칸은 다음 집계표 [저장] 때 빠짐. + +## 8. 파일 주인 (같은 파일 = 몫만 고침 · 받은 뒤 고침) + +| 파일 | 주인 | 다른 창 몫 | +| --- | --- | --- | +| `M02_MasterTemplete_Store.py` · `M02_Template_Layers.py` | sub7 | sub6 = material · inputs 줄 | +| `M02_MasterTemplete_Router_Items.py` | sub4(`_root`) | sub7 = copy 길 from_layer · sub6 = material · inputs 길 | +| `M02_MasterTemplete_Router_Combos.py` · `Combo_Store.py` | sub5(나무 길) | sub4 = 시스템 관리자 문 · sub2 = preview 지움 | +| `M02_MasterTemplete_UI_Side.ts` | sub5 | sub6 = material · matset 줄 | +| `M02_MasterTemplete_UI_Page.ts` | sub5 | sub4 = copyTo · sub1 = onAll 이음 | +| `M02_MasterTemplete_UI_Main.ts` | sub3(면적 길) | sub2 = labor 종류 · sub1 = 제목 꼴 · showView · sub6 = material 길 | +| `M02_MasterTemplete_ItemCards.ts` | sub1(카드 셋 · 빈 카드) | sub3 = 알약 켬끔 · sub6 = 재료 · 선택 입력 카드 | +| `M02_MasterTemplete_Structure.ts` | sub3(pillsFor) | sub1 = pickCopy · sub6 = inputs · material | +| `M02_MasterTemplete_TreePanel.ts`(670줄) | sub1(copyIn · 넘으면 `TreePanel_Clip.ts`) | sub5 = 일위대가 전용 칸 지움 · sub4 = 「〇〇로 복사…」 이음 | +| `M02_MasterTemplete_Labor_*.ts` | sub2 | sub5 = `Labor.ts` · `Labor_Tree.ts` 나무 지움 | +| `M02_MasterTemplete_Api_Fetch.ts` | 각자 자기 함수만 | — | +| `A00_Common/spreadsheet/spreadsheet_links.ts` · `spreadsheet.ts` | sub3 | — | +| 공용 메뉴 · 진입(`main.ts` · `cad_host.ts` · `ui_template_context_menu.*` · `ui_template_tree.*` · `spreadsheet_condition.ts` · `spreadsheet_menu.ts`) | sub8 | — | diff --git a/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md b/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md new file mode 100644 index 000000000..03f77c17e --- /dev/null +++ b/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md @@ -0,0 +1,78 @@ +# 지난 계획 — 39~41장 (2026-10-04) + +M02 구조물 조합 개편(일위대가 = 구조물마다 · 재료산출 · 선택 입력 지움 · 실무문서 · 권한 · 오른쪽 클릭) · 2차 수정(단가산출 로직 · 수량산출 열 · 카드 3열 · 삭제 · 알약 끌어 놓기 · 색) · 면적산출 표 → 도면 표. 검증은 사용자(10-4). + +## 32장에서 39 로 넘긴 줄 + +- [X] 선택 입력 정리(조사 10-1 끝 · 고침은 사용자 지시 뒤) — 일위대가 「넣을 값」과 구조물 「선택 입력」 이름 · 값 칸 규칙 두 벌 · 사라진 입력 안 알림 · 항목마다 자리 다시 고름 · 39 로 넘김(10-4 · 선택 입력 지움 · 값 칸 규칙 한 벌 · 사라진 값 알림은 39-3) +- [X] 로직 지우기 서버 검사가 마스터 층 조합만 봄(10-1 sub4) — 회사 · 개인 조합에 담긴 로직도 막기(`M01_MasterData_Store_Combo.py:194` · `Store_Cache.py:220` · 쉬운 길은 화면에서 미리 찾아 알림) · 39 로 넘김(10-4 · 39-1b 로직 지우기 검사 = 모든 층 labor) + +## 39. M02 구조물 조합 개편 (사용자 지시 10-4) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004.md`(2 일위대가 → 구조물 조합 하위 · 3 이름 · 4 구분선 · 5 권한 · 6 항목 변경 · 9 오른쪽 클릭) +- 사용자 확정(일위대가): 구조물 조합에 일위대가 · 도면 · 면적산출이 엮임 · 구조물 조합 복사 = 일위대가 새 키(로직 · 값 같이 복사) · 새 구조물 조합 = 미리보기에서 「새로 만들기」 / 「복사 생성」(목록 · 기본 탭 = 일반 개인 · 회사 관리자 개인 · 시스템 관리자 마스터 · 탭으로 다른 곳) · 항목 하나만 다른 것을 복사해 바꿈(저장 뒤에도) · 매칭 안 된 일위대가 조합 = 마스터 「실무문서」 항목으로 따로(나중에 한 번에 지움) +- 사용자 확정(10-4): 원본 단가산출 로직(resources/master_data 로직 · 표 · 요소 · 마스터 일위대가조합.json)은 절대 손대지 않음(읽기만) · 입력값은 사용자 · 설계자가 일위대가에 정해 저장 → 프로젝트로 복사해 씀 +- 정함(브레인): 조사 먼저(창마다 자기 몫 · 코드 안 고침) → 브레인이 설계 정함(이 절에 줄 더함) → 구현 · 조사 보고 = 각 창 `tmp/조사_39-0*.md` + +- [X] 39-0 조사(보고 여덟 · 정함 = `docs/raw/M02_구조물조합개편/설계_정함.md`) — A 좌측 패널 · 이름 · 구분선(sub5) · B 자료 틀(일위대가 입력값 · 자재목록 · 수량 연결 자리 · sub7) · C 일위대가 상세(sub2) · D 면적산출(sub3) · E 권한(sub4) · F 오른쪽 클릭(sub8) · G 재료산출 · 선택 입력 지우기 영향(sub6) · H 「전체 항목」 목록 화면(sub1) +- [X] 39-9a 오른쪽 클릭 막기(sub8) — 정함(브레인): 공용 진입 한 곳 창 캡처 듣기 · 대상 주소 `/^[bm]\d/` · 글 입력 칸(읽기 전용 포함)은 브라우저 메뉴 살림 · 입력 칸 밖 고른 글은 막음 · CAD 는 cad_host iframe load 때 같은 함수 · 남은 막기 코드 그대로(주석 셋만) · 근거 sub8 `tmp/조사_39-0F.md` — 확인 = 새 시험 test_common_native_menu.py · ORCA `defaultPrevented` 수치(B01 · B05 · B07 · M01 · M02 참 · 입력 칸 · A01 거짓) + - 검증완료(sub8 · 0f8efaa42) — 시험 4 통과 · ORCA 5183 B01 · B05(노선 편집 패널 포함) · B07 · M01 · M02 본문 · 헤더 · 모달 · CAD iframe 리본 · 패널 · 캔버스 막힘 참 · 입력 칸(CAD 안 포함) · A01 거짓 · CAD 오른쪽 단추 확정 그대로 +- [X] 39-9b 메뉴 공통 양식(sub8) — 공용 CSS 한 벌(지도 · 표 메뉴 · 나무 메뉴 · 상태줄 흠) · 「한 번에 하나」 장부 합침 · 조건 만들기 = 칸 메뉴 끝 한 줄(가로채기 지움) · 부품 API 합치기는 안 함 — 확인 = 메뉴마다 폭 · 그림자 · 글자 수치 같음 · 스프레드시트 하네스 시험 + - 검증완료(sub8 · 277311955) — B04 관 · B05 종단 · 배수 · 3D · 칸 · 상태줄 · M02 나무 · 조건 만들기 메뉴 폭 160 · 글자 13 · 여백 8/12 · 모서리 8 · 그림자 같음(밝음 · 어두움) · 나무 ↔ 칸 메뉴 한 번에 하나 · 시험 52 통과 · 조건 만들기를 쓰는 곳(M01 흐름 식 칸)은 칸 메뉴 없는 미리보기 편집기 → 같은 공용 메뉴에 이 줄만 · 시트 탭 메뉴는 탭 켠 화면이 없어 화면 확인 못 함(같은 부품) +- [X] 39-1a 자료 틀(sub7) — labor 종류 · SU 번호 · 문서 검사 · 계산(기준 ③ 서버 · 반영 ① 짝 · [저장] 때 계산값) · `_PER` 1,000 · calc · pills 길 — 확인 = 새 시험 test_m02_labor_doc.py · 거울 시험 · 기존 store · layers 시험 +- [X] 39-1b 옮기기 · 복사 · 프로젝트(sub7) — 옮기기 스크립트(시스템 층 바로 · storage 는 사본 뒤 브레인) · copy_from 층 넘김 + 실무문서 조합 → 일위대가 · 구조물 복사 = 새 SU — 확인 = 옮기기 시험(UP10-000001 → 열 둘) · tree_paste · item 시험 + - 검증완료(sub7) — 새 시험 labor_doc 19 · 거울 3 · migrate 4 · labor_copy 6 + store · structure · structure_combo · item_keys · layers_store · tree_paste · combo_layers · combo_branch · item_inputs · layer_access · M01 combo · cache 통과 · typecheck · 8009 실제 길: item1 SU-000001 기준합 2,658,983 · 알약 13 · 칸 값 3 → 수량출처 칸 · 시스템 층 옮김 item1←UA000008 · item3←UA000001 · item2 빈 · storage 층 안 돌림 · B8 은 sub8(39-1c) · 은퇴 길(use-combo · 갈라 내기 · preview)은 화면이 아직 불러 남김 · 로직 지우기 검사는 ecc4a651a 로 먼저 함(39-1d 와 겹침) +- [X] 39-1d 은퇴 · 로직 지우기 검사(sub4) — 로직 지우기 검사 = 모든 층 labor 담은로직 + 실무문서 · 일위대가 갈라 내기 · 키 적기(use-combo) · 조합 고치기 길과 화면 부름 정리(쓰는 곳 0 확인 뒤) · 남의 층 기록 = 성공한 쓰기만 — 확인 = 로직 지우기 시험(회사 · 개인 labor 에 담긴 로직 막힘) · grep 0 + - 검증완료 — 로직 지우기 시험(회사 · 개인 · 마스터 labor · 실무문서 → 422 · 어디서 쓰는지 알림 · 다 빼면 지워짐 · 임시 사본) · M01 시험 56 · 조합 층 14 · 권한 · 양식 18 통과 · 남의 층 기록 = 성공한 쓰기만(409 · 403 안 남김) +- [X] 39-1d 남은 은퇴(sub4 · sub3 D3 · sub5 받은 뒤) — 쓰는 곳이 남아 못 지움: 갈라 내기 `branch_combo` · 키 적기 `use_combo`(Branch.py · Router.py · Router_Items 길 · Api_Fetch `branchCombo` · `setColumnCombo` ← Combo.ts · ComboPanel.ts) · `fetchUsableCombos` · `/combos/all` ← ComboPanel · Structure · 조합 만들기 · 지우기 길(POST · DELETE) ← 죽은 Labor_Edit.ts(sub2) · 조합 시험 · `Combo_Store.edit`(sub5) · Labor_Api `newCombo` · `editCombo` · `deleteCombo` · `fetchAllCombos` · `editComboTree*` · `pasteCombos` · `fetchLibLogic` · `fetchLibAuto`(sub2 · sub5) + - 검증완료 — 지움: Branch.py · 갈라 내기 · use-combo(옛 · 층 길) · 조합 만들기 · 지우기 · 알약 두 길 · grep 0 · typecheck · 시험 m01_combo · combo_inputs 29 · combo_layers 9 · combo_branch · layers_store 통과 · 남김: /combos/all · fetchUsableCombos(항목 추가 창 일위대가 고르기 pickCombo) · 집계표 열 「일위대가」 칸(그 창이 씀) · 목록 · 키 읽기(Practice · ItemPick) · 실무문서 통째 지우기 · Combo_Store create · delete · pills(sub5 · 시험 · Labor_Doc 알약) +- [X] 39-1c 프로젝트 층(sub8 · 39-1a 뒤) — 스냅샷 일위대가 = labor 문서 · 입력값.json 첫 값 = labor 입력값 · 단가.json 자재 MT · 계산 반영 같은 함수 · B05 고르기 모달 카드 = 도면 · 일위대가(C 보기 부품) · 면적산출 + 값 카드 — 확인 = item 시험 · 고르기 모달 값 → /calc 합계 + - 검증완료(sub8 · e1ad3d362 · 1baf761c4) — 시험 67 통과(새 test_m02_item_labor 5 · picker 20 · copy · inputs) · ORCA 5183 sub8_검증 B05 고르기 모달 카드 도면 · 일위대가 · 면적산출 · 값 넣고 저장 → /calc 반영 합 337,721.97 = 손셈 = 원본 층 계산 · 빈 값 = 멈춘 로직 1 · 빠진 입력 1(붉게) · 저장 안 하고 뒤로 = 버릴지 물음 · 일위대가 쓰기 400 · 밝음 · 어두움 +- [X] 39-1e 프로젝트 면적산출 알약 = labor 알약(sub8 · 39-7b 뒤) — 옛 입력연결 알약 대신 스냅샷 labor 알약 · 정함(브레인): 프로젝트 계산은 빠진 입력이면 그 로직 멈춤 그대로(입력 유도 · 원본 층은 자동값) — 확인 = 고르기 모달 면적 편집 알약 수 = labor 알약 수 · sub6 G3(c704f1898)이 함께 바꿈 · 39-8 에서 확인 +- [X] 39-0i 통합(sub5) — dev 에 sub2 · sub7 · sub3 · sub1 · sub4 · sub8 합침(Api_Fetch · Store_Cache 로직 지우기 검사 두 벌 → sub4 하나 · Structure.ts import) → sub6 이 자기 충돌 풂 → 모두 받기 · 통합 1 f0b8882a8 · 통합 2(sub6 · sub1) 진행 +- [X] 39-2 좌측(sub5) — 일위대가 컨테이너 · 나무 지움 · 하위 차례 도면 → 일위대가 → 면적산출 · 수평선 · 「전체 항목」 줄 · 이름 「일위대가」 · 실무문서 컨테이너(시스템 관리자) · 나무 서버 길 지움 · 대시보드 카드 — 확인 = typecheck · ORCA 5180 줄 수 · 세 역할 화면 + - 검증완료(sub5) — typecheck · 고친 시험 · ORCA 5180 시스템 관리자: 하위 차례 · 수평선(밝음 · 어두움) · 전체 항목 셋 · 일위대가 열 줄 3(SU 는 39-1b 옮기기 뒤 · 지금 「없음」) · 실무문서 37 · 상세 · 지우기 물음 취소 · 회사 · 개인 층엔 실무문서 없음 · 회사 관리자 · 일반은 서버 403 시험(계정 화면은 못 봄) +- [X] 39-3 일위대가 상세(sub2) — labor 종류 상세 · 입력 모달 · 작은 글 · 금액 두 줄 · 자재목록 · 미리 보기 지움 · 다이어그램 · 보기 갈래 부품 · 입력 부품 옮김 — 확인 = 거울 · 다이어그램 시험 · ORCA 5177 값 넣고 저장 → 다시 열기 + - 검증완료(43a59a689 · d847f724c · 3ad7678e1 · 5b4aed1b2) — 시험 통과 · ORCA 5177 item1: 기준 60,984 × 손 5 = 반영 304,922 · 자재 6,090 × 10 = 60,900 · 합 365,822 = 저장 계산값 · 다시 열어 값 남음 · 범위 밖 · 빈 손 수량 · 같은 로직 막음 · 떠날 때 물음 · 어두움 · 남음 = 읽기만 화면(권한 계정) 미확인 · 검증용 labor/item1.json 지움 +- [X] 39-4 면적산출(sub3) — 알약 켬끔(기본 꺼짐) · 오른쪽 패널 = 담은 로직 + 자재목록 · 칸 지정 모달 · setLink · 자재 알약 · 조합 패널 지움 — 확인 = setLink 시험 · ORCA 5178 칸 잇기 → 금액 즉시 · 검증완료(sub3 · 시험 31 · ORCA 5178: 카드 알약 줄 기본 0px → 켬 147px → 다시 열어도 그대로 · 상세 늘 보임 · 오른쪽 패널 로직 14 줄 · C3 = 12.5 잇기 → 반영 726,535 · 20 → 1,162,456 바로 · 「수량 C3 = 12.5」 · 알약 ↔ 모달 같은 연결 · 빈 · 틀린 주소 막음 · 풀기 · 어두움 · 저장 안 하고 옮김 물음 · 옛 조합 패널 쓰는 곳 0) · 검증 대기 +- [X] 39-5 목록 · 고르기 · 카드(sub1) — ItemList · 전체 항목 화면 · 상세 제목 M01 꼴 · 새 항목 두 단추 · 복사 생성 탭 · 카드 셋 · 빈 카드 두 단추 · 복사해 가져오기 — 확인 = item_list 시험 · ORCA 5174 복사 생성 → 새 SU + - 검증완료(18a063925 · 134a727c9 · 364d22ff6 · 6cf72bbf1 · 6f8470890 · 6d46dda54) — 시험 통과 · ORCA 5174 마스터: 전체 항목 줄 수 = 좌측 줄 수(3 · 3 · 3) · 제목 18px · 탭 = 시스템 관리자 다섯(기본 마스터) · 일반 셋(기본 개인) · 빈 사람 = 빈 목록 · 복사 생성 item1 → SS000055 · SD-000004 · SA-000004 · SU-000004(로직 14) · 폴더 안 같은 이름 「ㄴㄴ (2)」 · 실무문서 UA000001 → SU-000002 로직 3(번호 그대로) · 개인 → 마스터 면적산출(SA-000002 그대로) · 카드 차례 도면 → 일위대가 → 면적산출 · 어두움 · 마스터 사본 되돌림(차이 0) · 남음 = 재료산출 · 선택 입력 카드 지움은 sub6 받은 뒤 · 읽기만 계정 화면 미확인 +- [X] 39-6 권한(sub4) — 맡은 회사 규칙 · 사람 나무 · 첫 쓰기 뼈대 · 「〇〇로 복사…」 폴더 · 감사 기록 · 실무문서 문 · apply · sources · readableSources — 확인 = layer_access · 새 layer_manage 시험 · ORCA 세 계정 + - 검증완료 — 시험 layer_access 4 · template_layers · combo_layers 14 · layer_screen(39-6 몫) 통과 · 관련 M02 시험 66 통과 · API 세 계정 25/25 · ORCA 회사 관리자 · 일반 · 시스템 관리자(고객 회사 3) 사람 나무 · 「〇〇로 복사…」 폴더 창 · 밝음 · 어두움 · 쓰기 성공 길은 임시 storage 시험(새 파일 대신 layer_access 에 더함) +- [X] 39-7a 지우기 G1 · G2(sub6) — 자재 조합 · 재료산출 지움 · pickMaterial 옮김 — 확인 = typecheck · check_master · 고친 시험 · ORCA 5181 카드 · 줄 +- [X] 39-7b 지우기 G3(sub6 · 39-3 입력 모달 뒤) — 선택 입력 카드 · inputs · 자리 · 알약 길 지움 — 확인 = 프로젝트 고르기 값 → /calc 합계 그대로 + - 검증완료(sub6 · 54ce67ceb · 61d2ed599 · 79e4bba1b · c704f1898): typecheck 0 · check_master 틀 0건 · 고친 대상 시험 초록(test_m02_card_shell 1건은 origin/dev 자체 빨강) · ORCA 5181 좌측 = 구조물 도면 · 일위대가 · 면적산출 · 집계표 줄 = 일위대가 · 도면 · 면적산출 · 카드 = 도면 정보 · 면적산출(선택 입력 없음) · 면적산출 편집 알약 = 일위대가 알약 · 옵션 제목 밝음 · 어두움 · /calc = 시험(test_item_copy_complete)으로 · 프로젝트 고르기 모달 면적 알약 = 복사본 labor 알약으로 바꿈(39-1e 몫과 겹침) +- [X] 39-1f 새 항목 창 일위대가 고르기 없앰(sub4) — 새 구조물 일위대가 = 늘 빈 문서 · 카드 [새로 만들기] / [복사 생성] · 열 「일위대가」 새로 쓰기 없앰(든 값은 옮기기 뒤 정리) — 확인 = 창 줄 수 · 새 열 빈 labor · sub4 8087c7306 · 창 칸 둘 · 새 열 labor 빈 문서 · 시험 64 +- [X] 39-8 끝 검증 — 흐름 셋(새 구조물 새로 만들기 · 복사 생성 · 항목 하나 복사) × 세 역할 · 일위대가 값 → 금액 · 면적 칸 → 반영 · 실무문서 · storage 옮기기 뒤 확인 · 검증완료(가 sub1 19/22 · 나 sub2 26/27 → 흠 ①~④ · H1~H3 · X3 모두 고침) · main 합침 e6fe5232e · storage 옮기기(브레인 · 사본 tmp/storage_templates_39.zip · labor 5 · 두 번째 「그대로 5」) · 남은 빨강: spreadsheet 늦게 불러오기 시험 1(흐름도 DataFlow · 39 밖) · 검증 대기 +- [X] 39-10 요구 대조(브레인 · 사용자 요청 10-4) — 끝난 뒤 사용자 대화 입력 원문(요구 2~6 · 9 · 답 1~4 · 원본 로직 손대지 않음 · 입력값 복사 흐름) 줄마다 반영 여부 · 근거(화면 · 파일 · 수치) 표 · 요구 31 줄 모두 반영(흠 B1~B4 고친 뒤) · 표 = 보고 Artifact · 검증 대기 +- [X] 39-11 브레인 실제 검증(사용자 요청 10-4) — 끝난 뒤 브레인이 사용자처럼 브라우저 조작(진짜 마우스 · 사진 · 세 역할) · 보고 Artifact · 세 계정 · 진짜 마우스 · 사진(sub5 서버 s01~s15 · 메인 m01~m04) · 흠 B1(표 일위대가 줄 SU) · B2 · B3(전체 항목 합계 · 단위) · B4(새 항목 단추) 고침 → main 11ef83985 · 저장 안 함 · 검증 대기 + +## 40. M02 구조물 조합 개편 2차 (사용자 지시 10-4 밤) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004_2.md` · 「구조물 옵션 보이기」 칸은 그대로(사용자 확인) +- 정함(브레인): 「담은 로직」 → 「단가산출 로직」(상세 · 카드 · 면적 패널 모두) · 수량산출 열 = 위 결과단위 기준 수량(분모 · 예 「10 ㎡」) · 아래 수량(손 · 칸 · 「—」) · 누르면 [손 입력] / [엑셀에서 고르기](그 열 면적산출 시트 모달 · 칸 누르면 그 로직 알약을 그 칸에 이음 · 일위대가 [저장] 때 면적 문서도 함께 저장) · 버튼 = 공용 버튼 양식 · 카드 단추 「가져오기」 · 「수정」(면적산출 카드도 같은 이름) · 카드 [삭제] = 그 항목 비우기(번호 · 열 그대로 · 물음 한 번) · 일위대가 카드 = 한 줄 표(항목 · 수량산출 · 단위 · 노무비 · 재료비 · 경비 · 합계 · 금액 = 수량 반영 값 · 없으면 기준 값 흐리게) · 알약 색 = 알약 키로 자동(두 테마) · 이은 칸 배경 같은 색 옅게 · 반짝임 그대로 + +- [X] 40-1 일위대가 상세(sub2) — 이름 「단가산출 로직」 · 「자동값 xx」 조사 → 브레인 정함 → 고침 · 수량산출 열 + 손 입력 · 엑셀 모달 잇기(sub3 부품) · 로직 추가 · 올리기 · 내리기 · 빼기 · 자재 추가 = 버튼 · Labor_View 한 줄 표 갈래(카드용) — 확인 = 시험 · ORCA 수량 칸 손 · 엑셀 고름 → 반영 값 · 저장 → 다시 열기 + - 검증완료(1c0868b78 · fd4830556 · e70fc184a · 35ccc26af) — 시험 34 통과 · ORCA 5177 SU-000003: 손 5 → 79,280 × 5 = 396,398 · 엑셀 B6(12.5) → 4,523 × 12.5 = 56,537 · 저장 → 면적 연결 「노체포설|㎥ → B6」 · 손 5 · 반영합 = 화면 · 다시 열기 같음 · 저장 안 하고 떠나면 물음 · 고르기 칸 「자동값」 줄 없음(B05 값 카드 확인 상자 그대로) · 한 줄 표 300~560 · 면적 패널 320~560 가로 넘침 없음 · 밝음 · 어두움 · 검증용 마스터 2 파일 되씀 +- [X] 40-2 구조물 조합 상세(sub1) — 카드 단추 「가져오기」 · 「수정」 · 일위대가 카드 한 줄 표(sub2 갈래) · 「새 항목」 버튼 · 카드 셋 3열 · 카드 [삭제](비우기) — 확인 = ORCA 3열 · 삭제 → 빈 카드 · 시험 + - 검증완료(74a524202 · e3236558b) — 시험 53 통과 · ORCA 127.0.0.1:5174 폭 1600 = 3열(카드 402px · 높이 628 같음) · 1000 · 400 = 1열 · 가로 넘침 0 · 400 에서 면적 카드 단추 여섯 줄 바꿈(카드 밖 0) · 단추 「수정」 · 「가져오기」 · 「삭제」 · 「새 항목」 높이 32 · 글 14px(저장과 같음) · item1 일위대가 [삭제] → SU-000001 · item1 그대로 · 담은로직 14 → 0 · 빈 카드 두 단추 · 면적산출 [삭제] → SA-000001 그대로 · 칸 · 연결 0 · 일반 계정 마스터 · 회사 카드 단추 0 · 어두움 · 마스터 사본 되씀(차이 0) · 남음 = 도면 [삭제] 는 마스터 도면이 다 비어 화면 확인 못 함(서버 길은 40-4 시험) +- [X] 40-3 면적산출 상세(sub3) — 알약 끌어 칸에 놓기 추가 · 알약 색 자동 · 이은 칸 같은 색 · 반짝임 그대로 · 엑셀 칸 고르기 모달 부품(sub2 용) — 확인 = 끌어 놓기 → 연결 · 색 수치 · 두 테마 · 검증완료(sub3 · 시험 16 + 하네스 15 · ORCA 5178: 칸 고르기 모달 C5 · 풀기 · 그만둠 · 끌어 C3 → 연결 · Ctrl+Z 풂 · F14 에 놓기 = 물음(취소 그대로 · 바꿈 = 갈아끼움) · 색 24 서로 다름 · 테두리 대비 최소 밝음 3.40 · 어두움 3.55 · 글 8.85 · 6.35 · 카드 · 상세 둘 다 · 마스터 변화 0) · 검증 대기 +- [X] 40-4 서버 비우기 길(sub7) — 항목(도면 · 일위대가 · 면적산출) 비우기 = 빈 문서로 씀(번호 · 열 그대로 · 권한 규칙 그대로) — 확인 = 시험(세 종류 · 권한 403) + - 검증완료(sub7) — test_m02_part_clear 7(세 종류 빈 문서 = 새 열 꼴 · 번호 · 장부 그대로 · 면적 비우면 일위대가 수량 「없음」 · 일반 마스터 403 · 남의 개인 403 · 회사 관리자 동료 개인 200 · 없는 열 404 · 모르는 종류 422) · typecheck · 00cb6db66 · 화면 함수 clearPart +- [x] 40-5 합치기 · 끝 검증 · 메인 반영 · 브레인 요구 대조 · 실제 검증 · 보고 · main 795b861da(40 · 41 함께 · 흠 D1~D4 고침 · CAD 빌드 · 시험 90) · 끝 검증 · 브레인 실제 검증은 사용자가 하기로(10-4) · 검증 대기 + +## 41. 면적산출 표 → 도면 표 (사용자 지시 10-4 밤) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004_2.md` 끝 「추가 기능」 — 면적산출에서 범위를 골라 도면으로 보내면 도면에 표가 들어가고 칸 내용이 따라감(어려우면 [업데이트] 단추) · 표 여러 개 · 자리는 도면에서 사용자가 끌어 정함 +- 정함(브레인): 조사 먼저(CAD 표 · 묶음 꼴 · 호스트 ↔ CAD 메시지 · 끌어 놓기 · 값 따라가기 길) → 브레인이 설계 정함 → 구현 · 원본 단가산출 로직 자료 손대지 않음 + +- [X] 41-0 조사(sub8) — 보고 `tmp/조사_41-0.md` · 끝(CAD 표 객체 TableEntity 있음 · 미리보기 틀 있음 · DXF 표 빠짐 흠) + +- 정함(브레인 · 조사 추천 그대로): 표 = CAD 표 객체(TableEntity · 한 덩어리) · 따라가기 = 면적 [저장] 때 서버가 그 열 도면 표 칸 글을 다시 적음 + 도면을 열 때 기록 값 ≠ 지금 값이면 알림 · [업데이트] · 연결 표지 = 표 style.연결(표 id) · 칸 key 「시트!A1」 · 보낼 꼴 = 표시 글(형식 적용) · 병합 · 가로 정렬 · 굵게 · 열 너비 비율(채움 · 테두리색 · 글자색 안 보냄) · 크기 = 표 글자 크기 하나(기본 2.5 · 보낼 때 바꿀 수 있음) · 넘김 = 같은 페이지 안(캐시 · 서버 안 씀) · 시작은 면적 상세 [도면으로 보내기] 단추(칸 메뉴는 뒤) · DXF 내보내기에 표 = 선 + 글 + +- [x] 41-1 서버(sub7) — 범위 → 표 칸 변환(Node 묶음 formatValue 다시 씀 · 새 M02_Area_Table.py) · POST /api/m02/layers/{층}/area/{열}/table · 면적 저장 때 도면 표 맞춤(마스터 · 회사 · 개인 층 + 프로젝트 층 길) — 확인 = 시험(형식 · 병합 · 한도 · 권한 · 저장 뒤 표 글 바뀜) + - 검증완료(sub7) — test_m02_area_table 10(형식 「1,234.50」 · 식 칸 · 굵게 · 가로 · 병합 rowSpan · 범위 밖 병합 잘라냄 · 숨긴 행 3 · 열 D 뺌 · 빈 칸 · 한도 171>100 · 없는 시트 · 범위 꼴 · 길 200 · 저장 안 함 · 남의 개인 403 · 없는 열 404 · 면적 저장 뒤 T1 칸 「10.00」 · 자리 · 크기 그대로 · 다른 표 그대로 · 표 없는 T2 기록 값 갱신 · 프로젝트 층 맞춤) + store · structure · template_layers · labor · clear · copy · spreadsheet_store 74 통과 · typecheck · 8009 실제 길 200 · 3ded39875 +- [x] 41-2 CAD · 호스트(sub8) — 메시지 place-table · update-table · 「표 놓기」 도구(커서 따라오는 미리보기 · 누르면 놓임 · Esc · 되돌리기) · cad_host · Drawing.ts 함수 · CAD 빌드 · DXF 표 = 선 + 글 — 확인 = vitest · ORCA 놓기 · DXF LINE · TEXT 수 + - 검증완료(sub8 · c426fa2ad · 0bc560663 · cc63e49ab · b2aa2a987) — vitest 8(놓기 · 연결 남음 · 칸 갈기 · 넘침 · 없는 연결) · DXF 시험 4(거울 = TS 표 기하 · 면적 표 LINE 13 · TEXT 5 · 정렬 L/C/R · B07 수량표 LINE 7 · TEXT 3 — 전에는 표가 빠짐) · ORCA 5183 M02 도면 상세: 미리보기가 커서 따라옴 · 누르면 놓임(drawing-changed) · Esc 그만 · Ctrl+Z 1→0 · 다시하기 · MOVE(새 id) 뒤 저장 JSON style.연결 T1 남음 · update-table T1 = 1 · 없는 연결 0 · 자리 · 너비 그대로 · 밝음 · 어두움 · 저장 안 하고 나감 · 자동백업 지움 +- [x] 41-3 화면(sub5) — 면적 상세 [도면으로 보내기](고른 범위 · 글자 크기) → 그 열 도면 상세로 넘겨 놓기 · [저장] 때 연결표 기록 · 다시 열 때 다름 알림 + [업데이트] · 표 여러 개 — 확인 = ORCA 범위 고름 → 보냄 → 끌어 놓음 → 저장 → 면적 값 바꿔 저장 → 도면 표 글 바뀜 + - 검증완료(sub5) — typecheck · test_m02_area_to_drawing 7 · structure_panel · ORCA 5180 마스터: A1:C4 보냄 → 놓음 → 저장(표 T1 · 연결표 T1) · 면적 A1 · B1 · C2(식) 저장 → 도면 표 글 길이 · 12.5 · 25 · 같으면 알림 0 · 기록 값 옛 값이면 「바뀐 표 1개」 + [업데이트] → 저장 값 갱신 · 표 셋(T1~T3 · 글자 5 · 2.5) · T3 지움 → 도면 · 연결표 둘 다 빠짐 · 마스터 사본 되씀(git 빈 상태) · 권한 없는 층 단추 0 은 시험으로만 diff --git a/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md b/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md new file mode 100644 index 000000000..fa33578c6 --- /dev/null +++ b/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md @@ -0,0 +1,108 @@ +# 지난 계획 — 33~38장 (2026-10-01 ~ 10-02) + +단가산출 로직 점검(데스크탑 한시) · 쉬운 단가산출 · 로직 만들기 시험판(세 칸 판 · 시트 로직 · 다이어그램) · 흐름도 시험판 · 흐름도 본 프로그램 적용 · 일위대가 조합 다이어그램 · 마스터 요소 화면 손질. + +## 33. 단가산출 로직 점검 · 수정 (사용자 + 데스크탑 메인 · 보조 · 10-1 한시) + +- 사용자가 데스크탑 메인 · 보조와 직접 진행 · 브레인은 랩탑 sub1~8 로 사용자가 요청하는 다른 일을 맡음(10-1 18:00 무렵까지). +- 근거 = `docs/raw/M01_점검/종합/` · `docs/raw/M01_결정목록/` · `docs/raw/M01_입력목록/` · `docs/raw/M01_고침/`. + +## 34. 쉬운 단가산출 제어 (새 길 · 10-1 · 랩탑) + +- 사용자 확정(10-1 오전): 만든 쉬운 단가산출은 유지(지우지 않음) · 로직 정의 자체를 만드는 판은 제안만 · 허락 뒤 착수 +- 사용자 확정: 지금 단가산출은 그대로 · 「추가」 단추 옆 새 단추로 따로 들어감 · 코드는 `M01_MasterData/EasyCalc/` 한 곳(안 되면 폴더째 지움) · 초등학생도 추가 · 삭제 · 수정 · 시간이 걸려도 검토 먼저. +- 정함(브레인): 새 길은 지금 로직 형식을 그대로 읽고 씀(계산 엔진 안 바꿈) · 폴더 밖 참조는 단추 자리 한 곳만. +- [x] 34-1 검토 — 데이터 · 계산 지도(sub4) · 지금 화면 걸음 재기(sub6) · 실무 모양 + 갈래 비교(sub7) · 지난 시도(sub8) → `docs/raw/M01_쉬운단가/` · 지금 화면 새 로직 38 누름 · 5~6 창 +- [x] 34-2 설계 확정(브레인) — 문장 카드 · 품셈 기본은 「이걸 바탕으로 고치기」 · 쓰기는 `/logic/*` 만 · 1단계 숫자 수량 + 잠금 카드 → `docs/raw/M01_쉬운단가/설계.md` +- [x] 34-3a 단추 + 빈 창(sub1 · 「식으로 새로 만들기」 옆) 검증완료 +- [x] 34-3b 1단계 — Model(sub7) · Api(sub4) · Cards(sub2) · Pick(sub3) · Sheet(sub5) · 틀 · 잇기(sub1) — 설계.md 2 · 3절 · Sheet 검증완료 · Model 검증완료 · Api 검증완료 · Pick 검증완료 +- [x] 34-3c 2단계 — 표 보고 고르기(sub8) · 조건 고치기(sub7 · 조건 줄 93% 읽음) 검증완료 · 카드 단추 잇기(sub2) · 조건 고치기 검증완료 +- [x] 34-4 검증 — 대표 일 여섯 + 예외(빈 값 · 같은 이름 · 저장 안 하고 닫기 · 권한 없음 · 밝음 · 어두움) · 지우기 시험(폴더 밖 참조 줄 수) · 걸음(sub3 고침 뒤) ①21 ②8 ③2 ④4 ⑤2 ⑥3 = 40(목표 36 넘음 4 · ① 새 설계 값 자동값으로 채워 금액 곧장 보임) · 다른 일위대가 넣고 저장 됨 · 권한 없음(일반 사용자) = M01 화면 못 들어감 · /api/m01 403 · 폴더 밖 참조 두 줄 · 검증완료 + +## 35. 단가산출 로직 만들기 판 (제안 단계 · 착수 전) + +- 사용자 확정: 쉬운 단가산출처럼 따로 폴더 시험판 · 로직 몇 개 골라 만듦 · 페이지 보고 판단(마음에 안 들면 지움) · **착수는 허락 뒤** · 인터넷 조사 먼저 · 화면 용어는 단어로 다시 제안. +- 제안서 https://claude.ai/artifact/U4rkgpYWL4Em5VKBEVa4oY (세 칸: 원문 표 · 산출 과정 · 결과) +- [x] 35-0 인터넷 조사 — 견적 프로그램(sub6) · 노코드 규칙 도구(sub8) → `docs/raw/M01_쉬운단가/로직판_조사_*.md` · 제안서 2판에 반영 +- [x] 35-1 용어 단어 제안(제안서 2판 「용어 — 단어로」) → 사용자 확정 · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-2 시험판 — 사용자 허락(10-1 · 갈래가 여럿이면 갈래마다 · 목적 = 코딩 없이 원문 보며 확인 · 수정 · 생성) · A 세 칸 판 `LogicBuilder/` · B 엑셀 시트형(우리 스프레드시트) · 먼저 조사: 엑셀 로직 지도(sub4) · A 설계 초안(sub7) → 브레인 A 대 B 판단 → 구현 · 완료 처리(10-4): 35-2a 로 함 +- [x] 35-2a A 세 칸 판(가운데 문장 / 격자 두 보기) — 정함 `docs/raw/M01_쉬운단가/로직판_A_정함.md` · Blocks(sub7) · 서버 · Api(sub4) · 원문 · 검사(sub8) · 문장(sub2) · 격자(sub5) · 단계 안내(sub3) · 틀 · 잇기 · 끝 검증(sub1) · LB 서버 검증완료 · Blocks 검증완료 · Grid 검증완료 · Steps 검증완료 · Source · Check 검증완료 · Wizard 검증완료 · 잇기 · 끝 검증완료(sub1) — ① 원문 대조 6/6 블록 읽힘 · 걸린 줄 · 출처 보임 ② GF000219 표 칸 0.15→0.20 = 79,280→96,759 원(예상과 같음) · 파일 안 바뀜 · 다시 열면 0.15 ③ 단계 안내 11 걸음 + 저장 → 현장 다시 열림 60,984 원(/calc 같음) → 삭제 2 걸음 ④ 빈틈 해당 없음 10 · 못 따진 표 조회 1 · 기대값 시험표 맞음/다름 · 화면 초안만 ⑤ 표 고침 없을 때 lb/calc = /calc 8/8 · 문장 ↔ 격자 같은 값 · 예외(빈 이름 · 저장 안 하고 닫기 · Ctrl+Z · Ctrl+S · 권한 없음 403 · 밝음 · 어두움) · 폴더 밖 참조 LogicLab.ts 두 줄 + main.py 등록 한 줄 +- [x] 35-2b 남은 것(사용자 판단 뒤) — 문장 / 격자 고르기 · 표 칸 고침 저장 여부 · 적용 품셈 판 · 용어 · 칸 역할 「결과」 바꾸기 · 단계 안내 고르기 창 수량 물음 · GX000001(메인 11:53 · 12:02) 주인 확인 · 보고 https://claude.ai/artifact/NqKfHaJULcQo6dSvnsxy1n · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-3 점검(확인만) — 표끼리의 관계(로직) 자체를 초등학생이 만들고 · 바꾸고 · 지울 수 있나 · 품셈에 없는 관계 더하기 · 시나리오 여섯(sub6) — 결과: 있는 관계의 값만 고침(초등 중) · 관계 더하기 · 지우기 · 다시 잇기 · 새 입력값 · 새 표 · 로직끼리 바꾸기 안 됨 · 문턱만 바꾸면 계산 멈춤 + 엉뚱한 알림 · `docs/raw/M01_쉬운단가/로직판_관계제어_점검.md` +- [x] 35-4 다이어그램 제안(사용자 생각 10-1) — 상자 = 표 · 입력값 · 고정값 · 계산 · 항목 · 다른 로직 · 결과를 직접 다룸 · 선 = 관계를 만듦 · 품셈에 안 묶임(사용자 표 · 사용자 관계) · 관계 제어 = 다이어그램(사용자) · 위 가로 띠 + 아래 고른 상자 다루기 · 결과 · 관계 = 진짜 엑셀 수식(칸 주소 · 함수 · 사용자 확정) · 알약 = 입출력 칸 표시 · 새 종류 「시트 로직」(TS 엔진 한 벌 · 서버 Node) · 제안서 https://claude.ai/artifact/4iCAGPhE9maauGNTkXg5he · 허락 전 착수 금지 · 완료 처리(10-4): 35-5 · 35-7 로 함 +- [x] 35-5 시트 로직 시험판(사용자 허락 10-1 오후) — 위 가로 다이어그램 · 상자 = 시트 · 관계 = 엑셀 수식 · 입출력 = 알약 · 저장 = `M01_MasterData/SheetLogic/_data/`(git 밖 · 폴더째 지움) · 정함 `docs/raw/M01_쉬운단가/시트로직_정함.md` · Model · Eval(sub7) · 서버 · Api(sub4) · Diagram(sub8) · Panel(sub2) · Table(sub3) · Item · Result(sub5) · Import(sub6) · 틀 · 잇기 · 끝 검증(sub1) · SL 서버 검증완료 · Model 검증완료 · Diagram 검증완료 · Item · Result 검증완료 · Table 검증완료 · Import 검증완료 · 잇기 · 끝 검증완료(sub1) — 걸음: S1 ①②③ 각 3(79,280 · 73,085 손셈 같음 · 2.5m 문턱은 품셈 표 3m 부터라 2.5~3m 해당 없음) · S2 ① 3 ② 4(찰쌓기 표로) ③ 5 · S3 ① 약 19(경사 급 65,018) ② 9(내 표 붙여넣기 · 할증 10) ③ 7(잡재료 2% 17,551) · S4 선 끊기 2 · 상자 지우기 2(물음 한 번) · Ctrl+Z 되돌림 · S5 0(상자 · 선 · 값 한 장 · 고르면 이어진 선 진하게) · S6 항목 일위대가 11 · 다른 로직 상자 13(덤프트럭 16.2) · 새 로직(품셈 없이) 25 걸음 → 저장 서버 36,000 = 화면 → 다시 열림 → 지우기 2 · 서버 = 화면 4/4(36,000 · 17,550.9 · 10.12 · 다시 열기) · 가져오기 6/6 /calc 같음(0 · 60,984/79,280 · 2,064,816 · 670 · 16.2 · 57,516) · 예외(빈 이름 · 같은 상자 · 순환 · 빈 입력 물음 · 저장 안 하고 닫기 · 권한 없음 sl 5/5 403 · 밝음 · 어두움) · 세 칸 안쪽 세로 밀기 없음(6개 모든 상자) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 남은 흠(다른 창): 가져온 표 상자 + 결과 칸 목록 예시값이 글자로 들어가 30 등에서 해당 없음(sub5) · 가져온 로직 화면 번호 · 자재 검색어 · 끝 검증완료(S1~S6 · 새 로직 · 서버 = 화면 4/4 · 가져오기 6/6) · 남은 흠: 결과 칸 예시값 선택이 글자 「30」 으로 들어가 표 찾기 해당 없음(sub5 · 사용자 지시 뒤) +- [x] 35-5a 사용자 요청 — 다이어그램 띠 · 고른 상자 시트 · 결과 높이를 안쪽 세로 스크롤이 없을 때까지(sub1) +- [x] 35-6 로직 문법 먼저(사용자 방향 10-1 14시 무렵 · 화면보다 로직) — 바탕 표(인력 378 · 재료 30,767 · 기계 654 · 소요량 2,535 · 계수 498 · 환율 · 요율 · 사용자 표 — 보기 · 만들기 · 비목은 표가 정함) · 단위 넷(값 · 표 · 정보 · 요소) + 묶음(세분화 · 묶기 · 분류 · 묶음째 잇기 · 겹 묶음 · 틀 다시 쓰기) · 흐름 셋(정보 만들기 · 잇기[그대로 · 바꿔서 · 갈라서 · 모아서 · 묶음째] · 내기) · 확인 도구 · 제안서 https://claude.ai/artifact/BFWvm1Q4fhCSZ4Rt34UgYY · 다음 = 문법 확정 → 종이 연습(절 10개) — 허락 전 착수 금지 · 완료 처리(10-4): 35-7 · 35-9 흐름도로 갈음 +- [x] 35-5b 단추 공용 양식(점검 끝 · 고침은 사용자 지시 뒤) — 날 단추 23(목록 줄 8 · 칩 · 역할 · 보기 바꿈 11 · ▾ 2 …) · sm 단추를 44px 로 덮기 3 · 큰 시작 56px 3 · `docs/raw/M01_쉬운단가/시험판_단추_점검.md` · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-7 단가산출 다이어그램 시험판(사용자 기준 10-1 14시 무렵) — 입력 · 함수 · 출력 상자 · 자유 배치 · 함수 = 엑셀 · 출력 하나 · 출력 = 비용 종류 · 원가 · 폴더 `M02_MasterTemplete/CostFlow/`(_data · _sample) · 정함 `docs/raw/M01_쉬운단가/원가다이어그램_정함.md` · Model · Eval(sub7) · 서버(sub4) · Diagram(sub8) · 함수 판(sub2) · 입력 판(sub3) · 출력 · 원가(sub5) · 견본(sub6) · 단추 · 페이지 · 잇기 · 끝 검증(sub1) · Model 검증완료 · Output · Summary 검증완료 · Sample 검증완료 · FuncPanel 검증완료 · Diagram 검증완료 · CF 서버 검증완료 · InputPanel 검증완료(사용자 요소 만들기는 서버 Api 가 main 에 오면 확인) · 잇기 · 끝 검증완료(sub1) — ① 빈 판에서 손으로 메쌓기 꼴(변수 4 · 소요량 표 2 · 인력 2 · 함수 증가율 → 석공 / 보통인부 병렬 · 출력 노무비 2) 9 상자 · 약 138 손놀림 → 원가 148,471 = 견본(증가율 40 · 석공 97,882.512 · 보통인부 50,587.992 손셈 같음) ② 비용 종류 바꾸면 148,471 이 노무비 → 경비 → 재료비 로 옮겨감 · 「값」 이면 원가에서 빠짐(각 1 걸음) ③ 상자 끌어 옮김(1520,190 → 1675,306) · 저장 → 다시 열면 그대로 ④ 함수 출력 하나(다른 칸 고르면 옮겨감 · 알약 하나) · 순환 막힘 · 출력에서 나가는 선 없음 · 빈 받는 자리는 저장 때 물음 ⑤ 사용자 요소(시험 보조공 200,000) 5 걸음 · 마스터 그대로 · _data 에만 ⑥ 저장 때 서버 = 화면 2/2(148,470.504) ⑦ 단위 오른쪽 위(- → 원/㎡) · 색 바꾸기(Entry 판 머리) · 「다이어그램」 이름 · 다이어그램 726px · 안쪽 스크롤은 함수 격자(가상 200줄)만 · 밝음 · 어두움 · 권한 없음(cf 길 6/6 403 · 화면 못 들어감) · 견본 셋 = /calc · 손셈(148,471 · 3,000 · 15.552) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 끝 검증완료(손으로 메쌓기 9 상자 = 견본 148,471 · 비용 종류 옮김 · 자리 저장 · 규칙 · 사용자 요소 · 서버 = 화면 · 견본 셋 손셈) · 함수 출력 기본 이름 겹침 고침(sub7 2be767d18) · 남은 것: M01 단가산출 단추 줄이 셋째 줄까지(시험판 단추 넷 · 사용자 결정) +- [x] 35-7a 브레인 실제 검증(10-1 16:45) 흠 여섯 고침 — ① 고칠 것 칸 지난 경고 · ⑥ 시험판 단추 「시험판 ▾」 로 묶기(sub1) · ② 알약 쉼표 · ③ 표 알약 글 · ⑤ 맞춤 확대 90% 아래 안 감(sub8) · ④ 입력 상자 공통 단위(sub3) · 다시 검증완료(16:55 · 고칠 것 칸 비어 있음 · 알약 쉼표 · 표 · 40줄 · 인력 원/일 · 확대 90% · 막대 한 줄 · 시험판 ▾ 넷 · 원가 148,471) + +## 35-8. 단가산출 다이어그램 2판 — 재료 선택 자리 · 선 규칙 (계획 · 허락 전) + +- 사용자 확정: 고르는 방식은 재료만(다른 그룹은 상자를 늘림) · 설계 때 입력은 오른쪽 아래 검증 칸 · 나중에 프로젝트에서 일위대가로 쓸 때 재료는 목록에서 고르거나 단일 값 · 표에 따라 출력을 가르는 것은 엑셀 수식 대신 선 규칙. +- 정함(브레인): 재료 요소 = 고정 · 선택 자리 · 조건 찾기 · 알약 이름 = 자리 이름 · 선 규칙 = 선 하나에 하나(표에서 찾기 · 조건 통과 · 바꾸기) · 규칙은 받는 칸 엑셀 수식으로 바뀌어 엔진 한 벌 · 선 위 규칙 글 늘 보임. +- [x] 35-8a 틀(Model) — 재료 요소 방식 · 범위(구분 · 상세구분 · 찾는 말) · 조건(규격 ← 알약) · 기본 품목 · 선 규칙 칸 · 규칙 → 받는 칸 수식 · 조건 선 겹침 · 안 맞음 검사 — node 시험(sub7) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8b 서버 — 선택 자리 기본 품목 · 조건 찾기 단가(맞음 0 · 여럿 알림) · 「설계 때 정할 것」 목록(변수 + 재료 자리) 내보내기 — 시험(sub4) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8c 입력 판 — 재료 방식 · 범위 · 조건 규칙 · 기본 품목 · 찾기 고침(쪽 넘기기 · 띄어쓰기 AND · 규격까지) — ORCA(sub3) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8d 검증 칸 — 재료 선택 자리를 변수처럼(범위 안 목록 고르기 · 찾기) · 조건 자리는 잡힌 품목 표시 — ORCA(sub5) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8e 선 규칙 — 선 위 규칙 글 · 선 누르면 아래 판에서 규칙 고르기(표 찾기: 조건 칸 ↔ 알약 · 꺼낼 칸 / 조건 통과: 알약 · 같음 · 다름 · 이상 · 이하 · 값 / 바꾸기: × · ÷ · +% · 단위 · 끝수) · 고른 상자 판에 들어오는 선 규칙 목록 — ORCA(sub8 · 판 sub2) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8f 견본 · 끝 검증 — 견본 둘 더(지반에 따라 굴삭기 / 브레이커 가르기 · 흄관 관경 조건 찾기) · 사용자처럼: 함수 상자 없이 표 찾기 · 가르기 · 검증 칸에서 재료 고르기 · 방법 걸음 수(sub6 견본 · sub1 잇기 · 끝 검증) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8g 다이어그램 마우스 — 판 옮기기 = 가운데 단추 끌기 · 고르기 = 왼쪽 누름 · 왼쪽 끌기로 글자가 선택되지 않음(다이어그램 영역 글자 선택 막음) · 상자 옮기기는 상자 머리 왼쪽 끌기 그대로 — ORCA(sub8) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8h 「고른 상자」 → 「상세 내용」 · 상자뿐 아니라 알약 · 선을 골라도 내용이 바뀜(알약 = 값 · 단위 · 어디서 오나 · 어디로 가나 / 선 = 선 규칙 고르기) — ORCA(sub1 잇기 · 알약 · 선 판 sub2) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8i 상세 내용 단추 · 칸 크기 — 함수 판 꾸밈이 공용 작은 단추를 44px 로 덮는 줄(`M02_CF_FuncPanel.css` `.m01-cfpanel .ui-btn …`)을 지우고 판 안 단추를 모두 공용 작은 크기(createButton size "sm")로 · 입력 · 고르기 칸도 공용 크기 — ORCA 수치(sub2 · sub3 · sub5 각자 판) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8j 상세 내용 머리 — 왼쪽 「상세 내용」 · 오른쪽에 고른 상자 제목 · 알약을 골랐으면 그 오른쪽에 알약 이름(예 「높이 증가율 찾기 › 증가율」) · 상세 내용 안 칸 차례 정리(머리 · 상자 설정 · 본문 · 경고) — ORCA(sub1) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8k 단위는 고르기 — 단위 칸을 목록 고르기로(치면 걸러져 보이고 고르기는 사용자 · 손으로 쓴 글은 안 받음) · 목록 = 단위 표준(35-8l) 단위 + 마스터 결과단위 + 금액 단위(원) · 「-」 = 없음 · 함수 · 출력 · 변수 · 사용자 요소 단위 모두 같은 고르기 — 공용 고르기 파일 `M02_CF_UnitPick.ts`(sub2) · 판마다 바꿔 끼움(sub2 · sub3 · sub5) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8l 단위 표준 표 — 산림품셈 1-2-2 「설계서의 단위 및 소수의 표준」(원문 `resources/knowledge/original/원가계산/산림_표준품셈/본문/제01장_적용기준/1-02_설계_및_수량.md` · 종목 약 70 · 규격 단위 · 소수자리 · 단위수량 단위 · 소수자리 · 비고 · 주 ①~③)을 표로 — 소수자리 「-」 = 0 · 단위 「-」 = 없음 · 원문 흠은 사용자가 고침(시험판에서 보고 고치는 표 · 저장 `CostFlow/_data` · 처음 값 `CostFlow/_standard/`) — 시험(sub6) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8m 금액 단위 표준 — 같은 절 「금액의 단위표준」(설계서 총액 1,000원 · 소계 · 금액란 · 일위대가표 계금 1원 · 일위대가표 금액란 0.1원 · 모두 미만 버림)을 같은 표 자리에 — 출력 상자(비용) 금액 기본 = 일위대가표 금액란 0.1원 미만 버림 · 원가 합계 기본 = 계금 1원 미만 버림 · 바꿀 수 있음(sub6 표 · sub5 출력 · 원가) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8n 끝수 고르기 — 함수 상자 출력 · 출력 상자에 「끝수」(소수자리 · 반올림 / 올림 / 버림) · 단위를 고르면 단위 표준에서 소수자리를 제안(주 ① 반올림 · ② 항목 값이 우선) · 고른 끝수는 출력 칸 수식(ROUND 계열)으로 — 엔진 한 벌(sub7 틀 · sub2 함수 판 · sub5 출력 판) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8o 로직끼리 잇기 · 흐름 따라가기 — 저장한 다른 로직을 입력 상자로 불러 그 출력 알약을 받음(일위대가 → 일위대가) · 알약 · 선을 고르면 값이 어디서 와서(출처 사슬) 어디로 가는지(가는 곳) 다이어그램에서 길을 칠하고 상세 내용에 줄로 · 값이 끊긴 곳(빈 받는 자리 · 통과 안 된 조건 · 표에 없는 조건) 표시 — 시험 · ORCA(sub7 틀 · sub8 다이어그램 · sub1 상세 내용) · 완료 처리(10-4): 35-9 에서 함 +- 차례(사용자 10-1 · 「데이터의 흐름과 값의 연결에 집중」): **1단계 = 흐름 · 연결** a 틀 · b 서버 · e 선 규칙 · o 로직끼리 · 흐름 따라가기 · h 알약 · 선 고르기 · c · d 재료 자리 · f 견본 · 끝 검증(흐름 기준 — 값이 어디서 와서 어떤 규칙을 지나 어디로 가는지) / **2단계 = 값의 뜻 · 보기** k 단위 고르기 · l 단위 표준 · m 금액 표준 · n 끝수 · j 머리 · g 마우스 · i 단추 + +## 35-9. 단가산출 흐름도 시험판 (사용자 지시 10-1 17시 무렵 · 브레인이 끝까지 · 35-8 전체) + +- 사용자 확정: 브레인이 전체 제어해 새 시험판 하나 · 단가산출 다이어그램(시험)만 남기고 옛 시험판 셋 삭제 · 새 폴더(필요 없으면 바로 지움) · 데이터 흐름 · 값 연결 먼저 · 자유도 높고 이해하기 쉬운 화면 · 끝까지 구현 · 검증. +- 정함 `docs/raw/M01_쉬운단가/흐름도_정함.md` · 폴더 `M02_MasterTemplete/DataFlow/` +- [x] 35-9 창 여덟 — 옮기기 · Model · Eval(sub7) · 옛 시험판 지우기 · 들어가는 길 · 상세 내용 머리 · 잇기 · 끝 검증(sub1) · 서버(sub4) · 다이어그램(sub8) · 상세 내용 판 · 단위 고르기(sub2) · 입력 판(sub3) · 출력 · 검증 칸(sub5) · 표준 표 · 견본(sub6) · 표준 · 견본 검증완료 · Model 검증완료 · 출력 · 검증 칸 검증완료 · Diagram 검증완료 · 입력 판 검증완료(서버 자재 찾기 · UnitPick 이 main 에 오면 다시 확인) · DF 서버 검증완료 · 잇기 · 끝 검증완료(sub1) — ① 빈 판에서 함수 상자 없이 네 흐름 73 걸음: 재료 조건 찾기(관경 → 흄관 자리 · 13 개 중 하나 · 125,870) 21 · 선 규칙 표에서 찾기(높이 증가율표 → 출력) 19 · 조건 통과 두 갈래(지반 = / ≠ 토사) 27 · 다른 로직 잇기(견본 지반 · 지반 알약 이음) 6 ② 알약 · 선 고름 → 온 길 · 가는 길 칠함 + 상세 내용 줄(지반 → 다른 로직 · 두 조건 선 · 흄관 ← 관경) ③ 끊긴 곳 넷 보임(빈 받는 자리 · 통과 안 됨 · 표에 맞는 줄 없음 · 맞는 재료 없음 — 알약 · 선 「!」 · 끊긴 곳 줄 누르면 그 자리 고름) ④ 검증 칸 관경 600 → 800 = Φ800 품목 215,530 · 지반 토사 → 암 = 내 두 갈래 뒤집힘 + 다른 로직 2,000 → 10,000 · 다른 로직 설계 값 바꿈 10,000 → 20,000 ⑤ 단위 고르기 「mm」 = 3 개로 걸러짐 · 손글 안 받음 · 끝수 80,000.37 = 기본 225,870 / 1원 올림 225,871 · 표준 표 고침 저장(3 → 2) → 처음 값으로 되돌림 ⑥ 가운데 끌기 = 판 옮김(−60, −30) · 왼쪽 끌기 = 판 그대로 · 글자 선택 막힘 · 단추 18px 모두 sm · 칸 30px ⑦ 저장 → 다시 열기 = 상자 9 · 선 6 · 자리 · 규칙 글 그대로 · 서버 다시 셈 = 화면 187,910 · 견본 다섯 사본 저장 서버 = 화면(148,470.504 · 2,000 · 84,680 · 3,216.6 · 값 15.552) · 밝음 · 어두움 · 로그인 없음 df 길 6/6 401(관리자 아닌 계정 403 은 계정 없어 못 함) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 검증 중 고친 내 흠(047f3a279 · 28469de62): 재료 조건 찾기 · 선택 자리 값을 서버에 안 물음(흄관 견본 관경 600 → 400 = 211,700 → 116,600 · 1m 84,680 → 46,640 · 1000 = 235,120 · 선택 자리 Φ600 → Φ400 = 211,700 → 116,600) · 「상자 이름」 칸(입력 · 함수 · 같은 이름 · 빈 이름 막음 · 출력은 출력 판) · 머리 이름 · 단위 칸 작은 크기(30px) · 「새로 만들기」 단추 76px(칸 폭 710 아님) · 표준 표 모달 제목 한 번 · 남은 흠(sub2): 선 규칙 표에서 찾기 조건 칸에 범위 이름(「높이」)이 없어 범위 찾기를 화면에서 못 만듦(높이 5 → 줄 없음 · 4 만 맞음) · 브레인 실제 검증완료(흠 14 고침 · 흐름도 시험 81 · 견본 다섯 서버 = 화면 · 보고 JgfqRzLPYgqXG7vB2cV1Yj) · 검증 대기 + +## 36. 단가산출 흐름도 본 프로그램 적용 (사용자 지시 10-1 21:40 · 결정 반영 22시 · 착수 승인 22:20 · 밤새 진행 · 아침 보고) + +- 사용자 확정: 흐름도 = 최종 · 로직 목록에서 로직을 열면 지금 내용 그대로 + 오른쪽 흐름도 패널(같은 로직) · 「식으로 새로 만들기」 지우고 「신규 로직」(흐름도 새로 만들기) · 「본떠 만들기」 → 「로직 복사/생성」(신규 로직 오른쪽) · 시험판 단추 · 입구 지움 · DataFlow 폴더 유지. +- 근거(마스터 로직 57 파일 · 1,472 로직 · 입력 3,518 · 중간 식 3,168 · 호표 줄 5,265): 식 말 = 찾기(표 · 조건 · 칸) 8,152 · 만약 3,532 · 또는 185 · 최대/최소 173 · 올림/반올림/버림 141 · 로직() 41 → 흐름도 표에서 찾기 · 조건 · 함수 · 다른 로직 입력으로 옮길 수 있음. +- 사용자 결정 D1(그대로): 「품셈원문도 제대로 구현된게 아니기 때문에 내가 흐름도까지 만들어서 로직을 볼려는 거잖아. 그러니 당연히 둘다 같은 내용 … 원문과 대조하면서 검증할때 잘못된게 있으면 흐름도에서 수정할거야」 → 한 로직 · 두 보기: 왼쪽 지금 내용 = 보기 · 고치기는 흐름도(공용 로직 포함 · 시스템 관리자) · 흐름도로 저장한 로직은 흐름도가 정본 · 왼쪽은 흐름도에서 만든 같은 꼴 · 아직 저장 안 한 로직은 지금 내용에서 자동으로 그린 흐름도(값 대조로 같음). +- 사용자 결정 D2(그대로): 「흐름에 대한 로직은 costflow폴더에 있을테니 일단은 그냥 두고 쓸대없는 견본과 버튼만 삭제」 → CostFlow 폴더 그대로 · 시험판 단추 · 견본 목록 지움(흐름도는 DataFlow 폴더만으로 돌아감 · CostFlow 를 부르지 않음). +- 사용자 결정(함수 상자): 「함수박스를 기준으로 하나의 결과가 나가는게 맞는것같아. 여러개가 동시에 나가면 혼란만 가중」 → 함수 상자 하나 = 결과 알약 하나(그대로) · 식은 상자 겉에 넣지 않음(상자가 커짐) · 함수 상자 · 선을 고르면 상세 내용에 사칙연산 · 조건이 보이고 고치면 바로 따라감. +- 칸 연결 = M02 방식 그대로(칸을 고른 채 알약을 눌러 하나씩 연결 · 식은 칸 주소 · `spreadsheet_links.ts` 직접 확인) · 계산 엔진 · 이름 풀기 · 이름 규칙 없음 — 보기만 칸 주소를 연결된 알약 이름으로 바꿈. +- 사용자 결정(조건): 「조건문은 현재를 유지하는게 보기 편한것같고 대신 어떤값을 지정할지는 입력된 리스트에서 선택 … 조건 값을 내가 넣으면 오기 … 복수 조건문도 넣어주고」 · 「조건 만들기도 엑셀 기능 내부에서 존재해야해」 → 선 조건은 지금 웹앱 모양 · 조건 값은 고른 알약이 가질 수 있는 값 목록에서 고름(변수 고르기 · 표 칸 값 · 재료 규격 등 · 목록이 없는 수는 숫자 칸 + 범위 검사) · 조건 여러 줄(그리고 / 또는) · 함수 상자 엑셀 시트 안 「조건 만들기」(칸 고름 → 만약 · 아니면 만약 · 아니면 줄 → 그 칸에 IF 식 · 값은 같은 목록에서 고름). +- 안전: 화면 시험 저장은 마스터 사본 폴더에서만(서버가 환경 변수로 사본 폴더를 씀 · 실제 resources/master_data 는 안 바뀜 · git status 로 확인). +- 창: sub2 36-0(판 · 조건 만들기) · sub7 36-0b(조건 틀 · 값 목록) → 36-2 · sub6 36-1 → 36-7 · sub8 36-3 · sub4 36-4 서버 · 사본 폴더 · sub5 36-4 왼쪽 보기 · sub1 36-5 · 잇기 · 36-8 · sub3 36-6 +- 브레인 정함(조사 뒤 · 아침 보고에 알림): 옛 로직 「기계 · 직종 · 유가 자리」(EQ:{기계} · LB:{직종} · MO:경유:{지역} · 입력값으로 요소를 고름 · 71 로직)는 새 모드 없이 이미 있는 「조건 찾기」(이름 · 키 같음 · 변수 알약)를 인력 · 기계 · 유가 요소에도 씀 · 대조 입력 = check_master.시험입력 · 로직 셈을 부르는 곳(Store.calc · text · master_combo.run · M02_Item_Prices.calc · /logic/auto)은 한 곳에서 흐름 갈래. +- [x] 36-0 함수 상자 안 보기 · 칸 연결 조정(36-2 보다 먼저) — ① 상세 내용 「식 보기」: 결과 칸 식을 칸 주소 → 연결된 알약 이름으로(예: 1m 재료비 = 흄관 단가 ÷ 2.5) + 값 들어간 식(= 211,700 ÷ 2.5 = 84,680) · IF 는 만약 / 아니면 줄 · 지금 타는 갈래 표시 · 중간 칸 식도 차례대로 · 칸 식을 고치면 바로 다시 셈 → 다이어그램 · 원가 따라감 ② 「칸 연결 표」(칸 · 연결 알약 · 입력 / 결과 · 이어진 선 · 표에서 바로 바꿈 · 풀기) + 칸 색(입력 파랑 · 결과 초록 · 상자 색과 같음) · 결과 칸 하나 ③ 선을 고르면 그 선 규칙도 같은 「식 보기」 꼴(예: 굴착량 → 지반 = 토사 일 때만 → 굴삭기로 파기) ④ 엑셀 시트 안 「조건 만들기」 — 칸을 고르고 열면 만약 [알약] [비교] [값 고르기] → [알약 · 값] 줄 · 아니면 만약 더하기 · 아니면 → 그 칸에 IF 식(엑셀로 쓴 IF 도 같은 줄로 다시 열림 · 못 바꾸는 식은 식 그대로) · 검증완료(sub2 · 식 보기 · 칸 연결 표 · 조건 만들기 · 선 조건 여러 줄 · 시험 8) · 검증 대기 +- [x] 36-0b 선 조건 손질 — 조건 값 = 고른 알약의 값 목록에서 고름(Model 값 목록 함수 · 변수 고르기 · 표 칸 값 · 재료 규격 · 목록 없는 수는 숫자 칸) · 조건 여러 줄(그리고 / 또는) · 규칙 → 받는 칸 엑셀 식 · 서버 Compute 같은 뜻 · 선 위 이름표 · 겹침 · 안 맞음 검사 그대로 · 검증완료(sub7 · 조건 여러 줄 그리고/또는 · 값 목록 · 서버 = 화면 · 시험 30) · 검증 대기 +- [x] 36-1 조사 — 옛 식 문법 전수(서버 파서 · 요소 부르기 꼴 · 따옴표 글) · 변환 못 하는 꼴 목록 · /calc 를 부르는 곳 · 검증완료 +- [x] 36-2 변환 — 옛 로직(입력 · 중간 · 호표 · 덧줄 · 결과 · 끝수) → 흐름도(입력 상자 · 표 알약 + 표에서 찾기 · 함수 · 출력 상자) + 자동 배치 · 서버 파서로 · 옛 식에 나온 이름마다 알약을 칸에 연결하고 식은 칸 주소로(만약 → IF · 최대 → MAX · 찾기 → 표에서 찾기) · 함수 상자 하나 = 결과 하나 · 전수 대조(변환 흐름도 값 = 옛 계산 값 · 맞는 비율 · 안 맞는 까닭) · 검증완료(sub7 · M02_DF_Convert · 전수 1,472 시험입력 96.7% · 기본 입력 97.4% · 안 맞는 49 = 재료 검색어 자리 18 · 재료 빈 검색어 13 · 표 범위 규칙 경계 15 · 단가 빈 품목 3 · tmp/convert_report_36.json) · 검증 대기 · 마지막 대조: 시험입력 · 기본 입력 모두 1,472/1,472(100%) · 빈 단가 = 옛 셈 뜻(그 값 쓰는 식 빈 값 · 비목 합 0 · 끊긴 곳 「단가 없는 품목을 씀」) +- [x] 36-3 오른쪽 패널 — 로직 상세 오른쪽에 흐름도(다이어그램 · 상세 내용 · 원가 · 검증) · 너비 끌어 조절 · 접기 · 「크게 보기」(전체 화면) · 검증완료 +- [x] 36-4 저장 · 정본 — 로직 줄에 「흐름」 칸(화면 [저장] 때만 씀) · 흐름이 있으면 /calc 가 흐름도로 셈(서버 다시 셈) · 왼쪽 기본정보 · 단가산출 상세 · 텍스트 수식 · 시험 계산은 흐름도에서 만든 같은 꼴(보기) · 공용 로직도 흐름도로 고침(시스템 관리자) · 캐시 → [저장] 한 번 · [고친 것 버리기] 함께 · 왼쪽 보기 검증완료(sub5) · 서버 검증완료(sub4) +- [x] 36-5 단추 — 「식으로 새로 만들기」 지움 → 「신규 로직」(빈 흐름도 + 기본정보 · 저장 = 자체 GX 새 키) · 「본떠 만들기」 → 「로직 복사/생성」(흐름도도 복사 · 신규 로직 오른쪽) · 「시험판 ▾」 지움 · 잇기 검증완료(sub1 · accf8ecc4 · abbf61971 · 0d45014e3) — 「식으로 새로 만들기」 · 시험판 ▾ · 시험판 단추 둘 지움 · 단추 차례 ← 로직 목록 · 신규 로직 · 로직 복사/생성 · 로직 지우기 · 고친 것 버리기 · 저장 · 두 칸(LogicLab_Flow) · 오른쪽 패널(흐름 받기 · 고침 → drafts → [저장] 한 번 · 버리기 함께 · 흐름 로직이면 왼쪽 흐름 보기) · 신규 로직 기본정보 칸(LogicLab_Basic) → 저장 = 서버 added 키로 엶 +- [x] 36-6 다른 로직 입력 — 대상 = 마스터 로직 전체(찾기) · 흐름도 로직이면 흐름도 셈 · 아니면 옛 셈 · 목록 · 찾기 · 쪽 · 알약 이음 검증완료(서버 흐름 받기 · 값 셈 길이 main 에 오면 GF 로직 값 확인) +- [x] 36-7 정리 — 「시험판 ▾」 · 시험판 입구 · 흐름도 시작 화면 견본 목록 지움 · 시험이 쓰는 견본은 resources/tester 로 · 시험 저장 길 숨김 · DataFlow · CostFlow 폴더 그대로 · 검증완료 +- [x] 36-8 끝 검증 — 흐름 기준 · 옛 로직 열기 → 오른쪽 흐름도 값 = 왼쪽 계 · 신규 로직 → 저장 → 다시 열기 · 복사 · 권한 · 브레인 실제 검증 · 보고 · 끝 검증완료(sub1 · 사본 폴더 tmp/master_copy_36 + AISLO_MASTER_DIR · 네 포트) — ① 옛 로직 셋: GF000001(찾기) 오른쪽 34,413 = /calc 34,413.6 = 왼쪽 34,414(보임 끝수만 다름) · 변환 알림 한 줄 / GF000007(만약) 0 ≠ 597,285 · GF000288(로직()) 0 ≠ 1,234,760.96 — 아래 흠 ② GF000001 함수 식 ×1.5 → 오른쪽 · 왼쪽 51,620 따라감 → [저장](공용 GF · 사본) → 다시 열기 상자 6 · 변환 알림 없음 · /calc flow 51,620.4 = 화면 ③ 신규 로직 65 걸음(변수 셋 · 함수 · 조건 만들기 · 출력 둘 · 조건 선) → 저장 GX000004 → 다시 열기 상자 4 · 선 4 · 화면 100,000 = /calc 100,000 = 왼쪽 계(높이 2 = 0 · 지반 암 = 50,000) ④ 로직 복사/생성 2 걸음 → GX000005 상자 4 · 선 4 · 100,000 ⑤ 선 조건 두 줄 「지반 = 토사 그리고 높이 ≥ 3 일 때만」 · 값 고르기(토사|암) · 높이 2 → 0 · 또는 → 50,000 · 조건 만들기 =IF(A2>=3,A3,0) ⑥ 식 보기 「결과 1 = 금액 × 높이 ÷ 4」 · IF 만약 / 아니면 줄 · 칸 연결 표 ⑦ 크게 보기 1484×1076 · 거기서 고친 것 패널로 · 접기 40px · 펴기 · 너비 320 → 522 ⑧ 고친 것 버리기 5 → 4 · 캐시 비움 · 로그인 없음 flow · save · calc · logics 401 · 시험판 · 옛 단추 글 0 · resources/master_data 바뀜 0 · 흠(다른 창): 변환 숫자 입력 예시값이 비어 있음(시험입력 · 기본 입력을 안 넣음 — GF000288 나무높이 6 · 집재거리 100 · GF000007 정리량 50 …) · GF000007 「표 QF000033 → 할증」 표에 맞는 줄 없음(서버 477,828 = 할증 25% 빠짐 · 화면 0) · GF000288 다른 로직 GC000270 기계 자리 「EQ:{기계} … 자리」 못 풂(#N/A → 0) · 칸 #N/A 일 때 화면 셈 0 · 서버 셈 그대로(둘이 다름)(sub7) · 식 보기 값 줄이 선 규칙을 지난 값을 안 씀(「(#N/A × 0) = #VALUE!」 · 결과 알약은 34,413.6)(sub2) · 조건 통과 둘째 줄 값 목록 「number:0」 글 · 조건 만들기 만약 목록에 놓인 알약 없음(sub2) · 옛 로직 왼쪽 계 반올림 · 흐름 원가 계금 1원 버림(1원 차이) +- 36 마무리(10-2 02시 · 브레인 실제 검증완료): 전수 변환 대조 시험입력 1,469/1,472(99.8%) · 기본 1,466(99.6%) · 남은 3 = 마스터 빈 단가 · 시험 141 + 변환 시험 초록 · 사본 서버 저장 → 사본만 바뀜 · 다시 열기 흐름 정본 · GF000001 34,414 = 34,414 · GF000003 8.946 = 8.946 · 식 보기 값 줄 · 검증 대기 + +## 37. 일위대가 조합 다이어그램 (사용자 지시 10-2 09시 · 계획 · 착수) + +- 사용자 확정: 「복잡한 경우가 있으니 일위대가 조합도 다이어그램으로 표현 … 중요하게 생각하는 정보가 다르니 잘 구분」 · 조합은 계산하지 않고 로직을 뭉쳐 비용 구분별로 표기 · 입력은 로직별로 묶어 빈 값은 사용자가 넣음 · 출력은 로직마다 · 미리 보기 값은 구조물 조합으로 안 넘김 · 「흐름도는 별도 로직이 아님」(단가산출 로직을 쓰는 방법). +- 모양: 왼쪽 = 로직별 입력 묶음(받아야 할 값 · 빈 값 표시) → 가운데 = 로직 카드(키 · 이름 · 결과 단위 · 식 · 함수 안 보임) → 오른쪽 = 비용 구분 칸 셋(노무비 · 재료비 · 경비 · 로직마다 선으로 모임) + 값 로직은 「값」 칸 · 이름이 같은 입력(지역 · 자재지역 등)은 점선으로 이어 보이기만(검사 없음) · 로직 카드를 누르면 그 로직의 단가산출 로직 화면(흐름도)으로 · 계산 · 고치기 없음(묶음 고치기는 지금 표) · 흐름도와 모양 · 색을 달리함. +- 자리: 일위대가 조합 상세(M02_MasterTemplete_Labor_Edit)의 미리 보기와 같은 값 — 미리 보기 입력 칸에 넣은 값이 다이어그램에도 · 다이어그램 빈 입력 알약을 누르면 미리 보기 그 칸으로 · 미리 보기 결과(로직별 노무비 · 재료비 · 경비 · 계)가 카드 · 칸에. +- [x] 37-1 다이어그램 판 — M02_MasterTemplete_Labor_Diagram.ts(+css) 새 파일 · 고정 세 칸 배치(자동) · 판 옮기기 · 확대 · 한눈에 · 밝음 · 어두움 · 좁은 폭 +- [x] 37-2 잇기 — Labor_Edit 에 「다이어그램」 칸(접기) · 미리 보기와 값 한 벌 · 빈 입력 누름 → 미리 보기 칸 · 로직 카드 누름 → M01 단가산출 로직 그 로직 열기(setPendingLogicKey 꼴) +- [x] 37-3 검증 — 조합 셋(로직 2 · 9 · 14개)으로 입력 묶음 수 = 로직 입력 수 · 출력 = 미리 보기 줄 · 비용 칸 합 = 미리 보기 합 · 빈 값 표시 · 같은 이름 점선 · 로직 열기 · 브레인 실제 검증 · 보고 +- 창: sub2 37-1 · 37-2 · 37-3 + +## 38. 마스터 요소 화면 손질 (사용자 지시 10-2 09:40 · 착수) + +- 사용자 확정: ① 인력 · 재료 · 기계 · 소요량 · 계수 · 환율 · 요율 상세의 제목 · 단추 · 찾기 라벨 양식 = 단가산출 로직과 같게 ② 재료 컨테이너의 유가 · 전력을 별도 컨테이너로 ③ 단가산출 로직 「막힘만」 체크 — 의미 없으면 지움 ④ 단가산출 로직 컨테이너 「전체」 를 누르면 상세 목록 보기가 안 됨(다른 컨테이너는 됨). +- 브레인 정함: 「막힘만」 = 로직 검사에 걸린 로직만 거르기 · 지금 1,469 중 0 · 목록 줄에 「⛔ 막힘」 표시 · 까닭 말풍선은 이미 있음 → 체크만 지움(표시는 둠). +- [x] 38-1 양식 맞춤 — 일곱 상세 화면 머리(제목 · 단추 줄 · 찾기 칸 라벨)를 단가산출 로직 화면 꼴로 · 공용 단추 · 칸 크기(sub5) · 검증완료 +- [x] 38-2 유가 · 전력 컨테이너 — 왼쪽 패널에 재료 다음 「유가 · 전력」 컨테이너(재료_유가전력.json) · 재료 컨테이너에서는 뺌 · 고르기 · 찾기 · 상세 그대로(sub6) · 검증완료 +- [x] 38-3 「막힘만」 체크 지움 · 38-4 「전체」 목록 보기 고침(sub1) · 검증완료 — 원인: 로직 컨테이너 거름이 목록만 거르고 가운데 화면 전환(onLogic)을 안 부름 → Side 거름 run 에서 로직이면 onLogic · 「전체」 는 찾는 글도 비움 · 화면(5174): 로직 1,469 줄 → 인력 전체 → 로직 「전체」 = 로직 화면 1,469 줄(찾는 글 「굴착」 비움) → 산림품셈 330 → 03장 작업장 관리 10 → 로직 열기 → 「전체」 = 상세 닫힘 · 1,469 줄 · 막힘만 체크 0 · 화면 오류 0 +- 「고친 것 버리기」(사용자 물음 · 확인만): 저장 안 한 고친 것(화면 캐시)을 버리고 파일의 로직을 다시 엶 — 사본 저장은 없음 · 그대로 둠(사용자 결정 기다림) From 0973c11218fc7aa84996edd1875a0c133bbff418 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 5 Oct 2026 10:11:35 +0900 Subject: [PATCH 5/5] =?UTF-8?q?chore(sync):=20=EA=B3=B5=EC=9C=A0=20docs=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=8B=B4=EC=9D=8C=20=E2=80=94=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=20=EC=BB=A4=EB=B0=8B=EA=B3=BC=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9(=EC=A4=84=20=EB=81=9D=EB=A7=8C=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../raw/M02_구조물조합개편/사용자요구_1004.md | 50 ++++++++ .../M02_구조물조합개편/사용자요구_1004_2.md | 25 ++++ .../raw/M02_구조물조합개편/사용자요구_1005.md | 14 +++ docs/raw/M02_구조물조합개편/설계_정함.md | 105 +++++++++++++++++ ...10-04_plan_M02구조물조합개편_2차_도면표.md | 78 +++++++++++++ ...가산출_흐름도_조합다이어그램_마스터요소.md | 108 ++++++++++++++++++ 6 files changed, 380 insertions(+) create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1004.md create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1004_2.md create mode 100644 docs/raw/M02_구조물조합개편/사용자요구_1005.md create mode 100644 docs/raw/M02_구조물조합개편/설계_정함.md create mode 100644 docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md create mode 100644 docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1004.md b/docs/raw/M02_구조물조합개편/사용자요구_1004.md new file mode 100644 index 000000000..936caa071 --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1004.md @@ -0,0 +1,50 @@ +# M02 구조물 조합 개편 — 사용자 요구 (2026-10-04 · 원문 그대로) + +1번(계획서 32장 이후 정리)은 브레인이 처리함(c8269a969). 7 · 8번은 원문에 없음. + +## 2. 일위대가 조합 → 구조물 조합 하위 + +M02페이지의 마스터 템플릿 페이지에서 일위대가 조합은 구조물 조합의 하위 컨테이너로 넣을 것.(구조물 도면과 면적산출 사이에 배치) +- 일위대가 조합의 좌측 패널의 기존 보기 방식인 트리구조는 필요없으며 구조물 도면 처럼 리스트형태로 보임 +- 추가로 구조물 도면, 일위대가, 면적산출의 최상위에는 전체항목을 넣어주고 우측 상세에는 리스트로 보여줌, M01 항목을 보면 양식화되어 있는 페이지 헤이아웃 있음 + +## 3. 이름 + +이동한 일위대가 조합은 일위대가로 명칭 변경 + +## 4. 구분선 + +구조물 조합 컨테이너 내부의 서브 컨테이너 항목과 트리구조 사이에 수평 구분선 추가 + +## 5. 사용자별 구조물 조합 읽기 / 쓰기 / 복사 권한 점검 및 개선 + +- 시스템 관리자 : 아이슬로 프로그램 관리자로 마스터를 제공하여 회사관리자나 일반 사용자가 사용하기 쉽게 한다. +- 시스템관리자가 대시보드의 컨테이너 제목의 우측의 회사명을 선택함에 따라 변경한 목적은 해당 회사의 정보를 접근하고나 AS을 목적으로 고객을 도와주기 위함임. 복사항목에는 마스터나 시스템 관리자 회사, 개인으로 들어갈 항목 뿐만 아니라 고객 회사의 특정 폴더로 복사할 수 있는 기능이 있어야함. 수정/생성권한 포함 +- 회사관리자 : 고객으로 본인회사의 양식을 만들거나 개인 프로젝트에 사용할 개인 마스터데이터 관리 +- 회사관리자는 개인버튼을 누를경우 최상위 트리에는 다른 개인들의 정보를 보고 복사하여 개인에게 복사하거나 수정, 생성도 가능해야함. +- 개인은 마스터와 회사는 읽기만, 다른 개인의 정보는 볼수 없음. 트리는 현재를 유지해야함. + +## 6. 구조물 조합 항목 변경 + +- 최상위 구조물 조합에 구조물 도면, 일위대가, 면적산출로만 표현(기존의 재료산출의 사용자가 추가하는 재료들과 값은 엑셀을 사용하지 않고 일위대가의 담은로직 처럼 하위에 별도의 컨테이너로 추가되는 자재항목을 넣어야함. 이때 M01자재목록에서 하나씩 가져오되 수량은 면적산출의 알약으로 값을 싱크하거나 별도의 모달창에서 셀을 지정하게 구현) +- 재료산출 항목은 삭제 +- 선택입력 항목은 삭제(구조물 조합에서는 각 옵션의 상세 구조물에 따라 미리 옵션을 다 지정할 생각임으로 그럴필요 없음) +- 면적산출의 미리보기에서 아래 알약 그룹 행을 하이드/쇼 되게 반영(기본값은 하이드), 단, 면적산출 상세에서는 알약 행 보이기가 기본값으로 +- 면적산출 상세 화면의 우측 패널에서 현재의 일위대가 조합 목록을 검색하는 기능이 아니라 현재 구조물도의 일위대가 담은 로직과 추가될 사용자 지정 재료를 보여줄것, +- 일위대가 상세화면에서는 미리보기(보기만/저장안함) 컨테이너는 각 단가산출 로직에 입력이 필요한 정보들임. 구조물별로 하나씩만들어져야함으로 구조물의 일위대가 항목에 옵션값이 저장되야함. 그리고 이값에 대한 지정은 담은 로직 컨테이너의 항목을 누르면 모달창이 나오고 사용자가 입력 및 변경할수 있게함. (하위에 지정된 항목과 값을 작은 글씨로 표현되게 반영) +- 담은 로직에는 기준 단가를 기준으로 넣었을때 나온 값과 수량산출값을 넣었을때 값에 대한 노무비, 재료비, 경비, 합계를 같이 보여줌. 이때 수량산출은 면적산출의 특정 셀값이나 사용자가 수기로 입력한 값이 될수 있음. 이렇게 되면 미리보기 계산 컨테이너 필요 없음. +- 일위대가의 상세 화면의 순서는 담은로직 > 자재목록 > 다이어그램 순서임. +- 면적산출 산출 상세의 우측 패널에 보여져야하는 결과는 결국 일위대가의 담은 로직컨테이너와 자재목록임. +- 추가된 자재목록에도 기준에 대한 단가와, 면적산출 엑셀의 특정 셀과 연결되었을때 나온 단가가 같이 나와야함. + +## 9. 오른쪽 클릭 + +프로그램 B와 M영역의 페이지들에 마우스 오른쪽 클릭을 할 경우 브라우저 옵션 안보이게 할것.(우리 프로그램의 옵션은 허용, 공통양식 사용) + +## 사용자 답 (10-4 · 일위대가 · 원문 그대로) + +일위대가의 경우 +1. 구조물 조합을 복사한 경우 신규 키를 생성하여 만듬. (값과 로직은 일단 같이 복사) +2. 신규 구조물 조합을 생성하는 경우 미리보기 페이지에는 새로만들기와 복사생성하기를 선택하게 하고 복사 생성인 경우에는 해당 리스트를 보여주고 선택하게 보여주는 값은 개인인 경우에는 개인을, 회사관리자인경우 개인, 시스템관리자인 경우 마스터를 기본값으로 보여주고 탭을 눌러 다른 항목에서 가져올수 있는 항목들을 보여준다. +3. 다시 말해 최종적으로는 구조물 조합에 일위대가, 도면, 면적산출이 연되는게 맞으나 특정항목만 다른 값을 복사하여 가져올수 있어야함. 저장이 된 데이터라도 변경가능해야함. +4. 현재 매칭이 안된 데이터는 나중에 삭제할예정이나 마스터 데이터를 수동 생성을 위해서 필요한 데이터들임. 차라리 실무문서라는 항목을 마스터에 별도로 만들어서 나중에 한번에 지우게 할수 있게 반영. diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md b/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md new file mode 100644 index 000000000..3651b8c87 --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1004_2.md @@ -0,0 +1,25 @@ +# M02 구조물 조합 개편 2차 — 사용자 요구 (2026-10-04 밤 · 원문 그대로) + +구조물 옵션보이기는 확인했음. 무시할것. + +다음 수정내용 + 1. 일위대가 상세 + - 담은 로직 이라는 명칭을 단가산출 로직 으로 변경 + - 로직들을 선택하면 나오는 모달 창에서 드롭다운 메뉴에 자동값 xx 항목이 나옴. 있을 필요가 있는지 확인 + - 결과 단위의 좌측에 수량 산출 열을 추가하고 결과단위 당 기준 수량을 넣어주고 아래에는 수량산출의 값을 수기입력이나 엑셀모달을 보여줘서 선택할수 있게 반영. + - 로직의 로직 추가, 올리기 내리기 빼기 버튼의 양식은 알약 양식이이 아니라 버튼양식으로 변경, + - 자재 추가도 동일하게 버튼 으로 + 2. 구조물 조합 상세 + - 일위대가 미리보기에서 복사해 가져오기를 가져오기로 변경, 일위대가 수정을 수정으로 이름변경 + - 도면정보에서 도면수정을 수정으로 이름 변경 + - 일위대가 미리보기에서 항목/수량산출/단위/노무비/재료비/경비/합계로 두줄을 하나의 항목 형태로 변경하고 자세한 내용은 상세내용에서 확인하게 변경(위내용 참고) + - 구조물 조합 제목 행에 있는 새항목의 버튼 양식을 알약에서 버튼으로 변경 + - 도면정보/일위대가/면적산출 컨테이너의 구조를 3열 구조로 변경 + - 도면정보/일위대가/면적산출 컨테이너 별로 삭제도 있어야하는게 아닌지. + 3. 면적산출 상세 + - 알약지정은 현재 방법 + 그래그 & 드랍 방식을 추가 + - 지정된 알약정보를 색상 자동지정 및 지정된 셀은 색상으로 구분을 할수 있게 반영, 반짝임은 유지 + +## 추가 기능 (10-4 밤 · 원문 그대로) + +추가기능 부여. 면적산출에서 특정 영역을 선정하고 도면영역으로 전달을 할 경우 도면에 테이블을 자동으로 넣고 셀의 내용을 싱크하는 기능을 부여. 만약 동기화가 어려운 경우 업데이트 버튼을 추가해도 무관, 복수개의 테이블이 넘어갈수도 잇으며 위치는 도면에서 사용자가 드래그하여 지정 diff --git a/docs/raw/M02_구조물조합개편/사용자요구_1005.md b/docs/raw/M02_구조물조합개편/사용자요구_1005.md new file mode 100644 index 000000000..bea9b003e --- /dev/null +++ b/docs/raw/M02_구조물조합개편/사용자요구_1005.md @@ -0,0 +1,14 @@ +# M02 구조물 조합 개편 3차 — 사용자 요구 (2026-10-05 새벽 · 원문 그대로) + +나는 이제 자러갈거야. 아래 추가 수정 내용을 확인해서 반영해주고 좀 전 중지한 검증 항목까지 검증해줘. 그런데 너무 검증에 토큰과 시간을 너무 많이 사용하고 있어. 최적화 방법 좀 찾아줘. +추가 확인사항 +1. 일위대가 상세화면에서의 단가산출 로직의 항목들은 2행 구조야. 1행은 기준 결과를 기준으로 한 결과행들과 2행은 수량산출 값을 넣었을때의 값인거지. 기본 2행 구조라만 1행은 선택된 옵션에 따라 결정된 값 행인거고 이걸기준으로 수량을 넣는 다면 2행을 값들이 되는거야. 현재도 이렇게 되어 있기는 한데 수량산출 항목을 선택하면 나오는 엑셀 모달창의 내 의도는 모달창으로 면적산출 엑셀을 보여달라는 말이었어. +2. 일위대가의 단가산출 로직 항목 행을 선택하면 수량 입력이 있는데 이건 없어도 됨. 외부에 있으니. +3. 자재 목록컨테이너에서 보이는 항목은 기준단가를 정해주는 것도 좋지만 자재목록의 5개 항목의 값을 비어있더라고 보여주고 기준단가가 되는걸 하이라이트 해주면 좋을것같아. +4. 구조물조합에서 일위대가 미리보기에서 일위대가 상세화면의 단가산출 로직(순서와 로직추가는 제외)과 자재목록을 그대로 보여주게 하되 기능은 유지(수량산출 연결창, 옵션지정 모달창)하고 수평스크롤을 가능하게 하기 +5. 일위대가의 재료도 2열구조여야 할것같은데.... +6. 도면정보, 일위대가, 면적산출을 접근 후 제목의 돌아가기 버튼은 알약이 아니라 일반 버튼으로 + +## 추가 (10-5 새벽 · 원문 그대로) + +추가 항목이 하나더 있어. 구조물 조합에서의 미리보고 3개 컨테이너에 새로만들기와 복사 생성로직이 필요없겠네. 구조물 조합의 새항목 생성을 하면 당연히 새로운 항목들이 자동으로 생성되잖아. 그후 가져오기를 하면 당연히 값을 가져와서 덮어쓰면 되겠어. 그리고 일위대가와 면적산출에서 가져오기를 하면 도면은 개별로 작성되는게 맞지만 일위대가와 면적산출은 연결되어 있는정보니 같이 가져오는게 맞겠어. 알약연결 포함해서. 이 내용도 추가해줘. diff --git a/docs/raw/M02_구조물조합개편/설계_정함.md b/docs/raw/M02_구조물조합개편/설계_정함.md new file mode 100644 index 000000000..229b350fd --- /dev/null +++ b/docs/raw/M02_구조물조합개편/설계_정함.md @@ -0,0 +1,105 @@ +# M02 구조물 조합 개편 — 정함 (브레인 · 10-4) + +근거 = `사용자요구_1004.md` · 조사 보고 A~H(각 창 `tmp/조사_39-0X.md`). 사용자가 바꿀 수 있음. + +## 1. 자료 틀 (B · sub7) + +- 일위대가 = 구조물 열마다 `labor/<열id>.json` · 번호 `SU-######`(도번 · 면적번과 같은 뒷자리 · 층마다 셈) · 자리 = 시스템 `resources/master_template/labor/` · 회사 · 개인 `…/templates/labor/` · 새 프로젝트 씨앗도 KINDS 로 함께. +- 문서 꼴: + +```json +{ + "종류": "일위대가", "판": 1, "열": "item1", "일위대가번": "SU-000001", "단위": "개소", + "본뜬": { "층": "system", "주인": null, "키": "UA000008" }, + "담은로직": [ + { "로직": "GF000219", "메모": "", "입력값": { "형식": "메쌓기" }, "수량": null }, + { "로직": "GF000137", "메모": "", "입력값": {}, "수량": { "손": 3 } } + ], + "자재": [ { "코드": "MT000008", "이름": "치즐", "규격": "", "단위": "EA", "수량": null } ], + "계산값": { "줄": [], "자재": [], "기준합": {}, "반영합": {} } +} +``` + +- 이름 = 구조물 열 이름(따로 안 둠) · 단위 = 자기 칸 · 같은 로직 두 번 금지 · 빈 일위대가 저장 됨 · 이름 겹침 검사 없음 · 입력값 = 그 로직 입력 이름만(모르는 이름 버림 · 빈 값 = 자동값). +- 수량 = `null`(면적산출 알약 연결 따름 · 로직 알약 「이름|단위」 · 자재 알약 「자재|MT키」 · 칸 연결 정본 = 면적산출 문서 `연결` 한 곳) | `{손: 수}`(손 입력 · 손이 칸보다 앞섬). +- 금액 = 기준(결과단위 그대로 · 원/10㎡ 면 10㎡ 값 · 단위 같이 표기) · 반영 = 기준 × 수량 ÷ 배 · 돈 아닌 로직은 반영 없음 · 「원/1,000본」 배 1000(`_PER` 고침) · 자재 기준 단가 = M01 `master_material.element` 기본값. +- 계산 자리 = 기준 ③ 서버(M01 엔진 · calc 길 · 화면은 최신 응답만) · 반영 곱 ① 짝(`M02_MasterTemplete_Labor_Calc.ts` ↔ `M02_Labor_Doc.py` · 두 파일 머리에 짝 · 거울 시험 · 면적 칸 값이 바뀌면 화면이 바로 곱함) · [저장] 때 서버가 `계산값` 을 다시 적음(브라우저 값 버림 · 목록 합계용) · 상세는 늘 새로 셈. +- 길 = 문서 `GET/PUT /api/m02/layers/{층}/templates/labor/{열}`(양식 길 · owner) · 계산 `POST /api/m02/layers/{층}/labor/{열}/calc` {doc?, 수량?: {키: 값}} → {줄[{로직, 분모, 배, 수량, 수량출처, 기준{노무비,재료비,경비,계}, 반영{…}, 까닭}], 자재[{코드, 기준단가, 수량, 수량출처, 반영, 까닭}], 기준합, 반영합} · 알약 `GET /api/m02/layers/{층}/labor/{열}/pills`(로직 물량 + 자재). +- 집계표 열 `일위대가` · `자재조합` 칸 지움(정본 = labor 파일) · SS 장부 줄 = `일위대가번` · `도번` · `면적번`. +- 옮기기(한 번 · `M02_Labor_Migrate.py`) = 층마다 열마다 labor 파일 · 열 `일위대가` 키 조합의 담은로직 · 단위 복사(`본뜬.키` = 옛 키 · 입력값 {} · 수량 null · 자재 []) · 여러 열이 쓰던 조합(UP10-000001)은 열마다 복사 · 키 없는 열 = 빈 일위대가 · 몇 번 돌려도 같음 · 시스템 층(git)은 바로 · storage 층은 압축 사본 뒤 브레인이 돌림. +- 실무문서 = 마스터 `resources/master_data/일위대가조합.json` 통째(37 줄 · 손대지 않음 · 옮긴 뒤 어느 열도 안 가리킴 · M01 일위대가 조합 화면도 그대로) · 회사 · 개인 옛 조합(UC · UP)은 파일 그대로 · 화면에서 뺌. +- 프로젝트 = 스냅샷 `일위대가.json` 은 labor 문서 + 담은 로직 줄 · `입력값.json`(모양 그대로) 첫 값 = labor 입력값 · `단가.json` 에 자재 MT 줄 · 계산은 반영 같은 함수. +- 은퇴(화면이 안 부른 뒤) = 일위대가 갈라 내기 · 키 적기(use-combo) · 조합 고치기 · 미리 보기 길(preview) · 일위대가 조합 나무 길. +- 로직 지우기 검사 = 모든 층 labor 담은로직 + 실무문서(32장 「로직 지우기 서버 검사」 줄 끝남). + +## 2. 좌측 패널 (A · sub5) + +- 맨 위 「일위대가 조합」 컨테이너 · 조합 나무 · 둘째 층 단추 벌 지움 · 구조물 조합 안 차례 = 층 단추 + 나무 → 수평선 → 구조물 도면 → 일위대가 → 면적산출. +- 하위마다 첫 줄 「전체 항목」(누르면 `onAll(kind)` → H 목록) · 일위대가 줄 = 열마다 「SU-… 이름」 · 누름 = `onOpen({kind: "labor", name: 열})`(C 상세). +- 이름 「일위대가」(하위 제목 · 상세 제목 · 대시보드 카드 글) · 해시 `open=일위대가` = 구조물 조합 펼침 + 일위대가 하위 펼침 + 전체 항목. +- 「실무문서」 = 구조물 조합 밖 별도 컨테이너(도면 양식 아래) · 마스터 층 · 시스템 관리자만 · 목록 + 상세 읽기만(새 파일 `M02_MasterTemplete_Practice.ts`) · [통째 지우기](물음 두 번 · 서버 = 시스템 관리자 · 쓰는 곳 0 확인 · 줄을 비움 · 버튼은 사용자가 누를 때만). + +## 3. 일위대가 상세 (C · sub2) + +- UI_Main 종류 `labor` 로 엶(양식 길 읽기 · [저장] · [다시 읽기] · 캐시 = 다른 양식과 같음) · 차례 = 머리 → 정보(단위 · 본뜬) → 담은 로직 → 자재목록 → 다이어그램 · 미리 보기 칸 지움. +- 담은 로직 줄 누름 = 입력 모달(그 로직 입력 전부 · 빈 칸 자동값 · 수량 = 이은 칸 · 값 보임 / 손 입력 / 「면적산출에서 잇기」 = 면적산출 상세로) · [확인] = 줄 값만(캐시) · 저장은 [저장]. +- 줄 아래 작은 글 「지역 서울 · 규격 25mm · 수량 B6 = 12.5㎡」 · 빈 입력 「빈 값 n」 붉게. +- 금액 칸 넷(노무비 · 재료비 · 경비 · 합계) · 칸마다 두 줄(위 기준 작게 · 아래 반영) · 맨 아래 합계 줄. +- 자재목록 = 코드 · 이름 · 규격 · 단위 · 수량 · 기준 단가 · 반영 금액 · [자재 추가](M01 자재 하나씩 · `M02_Material_Pick.ts`) · 줄 누름 = 수량 모달. +- 다이어그램 = 저장된 줄 값 + calc 답(수량 있으면 반영 · 없으면 기준 · 표기) · 알약 누름 = 입력 모달 · 자재목록 = 카드 하나 → 재료비 칸. +- 보기 갈래(고치기 없음) 부품을 냄 — D 오른쪽 패널 · H 카드가 씀. +- 입력 목록 · 값 받기 부품은 선택 입력에서 옮겨 다시 씀(`M02_Labor_Inputs.py` · `M02_Labor_Values.ts` · `M02_Labor_Values_Model.ts`) · 값 칸 규칙 한 벌(M01 넣을 값) · 로직 입력이 바뀌어 사라진 값은 알림. +- 37장 「미리 보기 값은 구조물 조합으로 안 넘김」 뒤집힘. + +## 4. 면적산출 (D · sub3) + +- 미리보기 카드 알약 줄 켬끔 단추 · 기본 꺼짐 · pref(계정) · 상세는 늘 보임(단추 없음). +- 상세 오른쪽 패널 = 그 열 일위대가의 담은 로직 + 자재목록(C 보기 갈래 · 기준 · 반영) · 조합 목록 · 찾기 · [이 열에 쓰기] · [조합 고치기] 지움. +- 패널 줄 누름 = 칸 지정 모달(`M02_MasterTemplete_AreaLink.ts` · [지금 고른 칸으로] · 주소 · [풀기]) → 면적 문서 `연결` · spreadsheet 손잡이 `setLink(키, 칸|null, 항목)`. +- 알약 = 로직 물량 알약 + 자재 알약(`자재|MT키` · 알약 모드 「자재」 다시 씀) · 선택 입력 알약 빠짐. +- 면적 금액 서버 계산은 1장 calc 하나(따로 안 만듦). + +## 5. 목록 · 고르기 · 카드 (H · sub1) + +- 목록 부품 하나 `M02_MasterTemplete_ItemList.ts`(M01 머리 · 쪽 · 표를 import · 옮기지 않음) — 「전체 항목」 · 복사 생성 · 항목 하나 복사가 같이 씀. +- M02 상세 제목 = M01 꼴(18px · 단추 오른쪽) 전부. +- 목록 칸: 도면 = 도번 · 이름 · 폴더 · 단위 · 고친 날 / 면적산출 = 면적번 · … / 일위대가 = 일위대가번 · 이름 · 폴더 · 단위 · 담은 로직 수 · 합계(`계산값` · 없으면 「—」) · 고친 날. +- 「새 항목」 → 상세 칸에 [새로 만들기] [복사 생성] · 복사 생성 = 같은 칸 탭 + 목록 → 지금 보는 층 · 고른 폴더(없으면 맨 위) · 원래 이름(겹치면 「(2)」) · 일위대가 새 번호. +- 카드 = 도면 · 일위대가 · 면적산출 셋(그 차례) · 빈 카드 = [새로 만들기] [복사 생성] · 찬 카드 = 「복사해 가져오기」(창 · 탭 + 목록 → 확인 → 덮어씀 · 번호 · 열 그대로) · 일위대가 카드 몸 = C 보기 갈래. +- 탭 = 마스터 · 회사 · 개인(나) · 다른 사람(드롭다운 · 맡은 회사일 때) · 실무문서(일위대가 고를 때 · 시스템 관리자) · 기본 = 시스템 관리자 마스터 · 그 밖 개인(회사 없으면 마스터) · 탭 목록 = E `readableSources`. +- 항목 하나 복사 서버 = `copy_from` 에 from_layer · from_owner(B 가 만듦) · 원본이 실무문서 조합이면 조합 → 일위대가 문서(입력값 빈 값). + +## 6. 권한 (E · sub4) + +- 「회사 C 를 맡음」 = 시스템 관리자 · 또는 C 의 회사 관리자 → C 회사 층 · C 모든 개인 층 = 보기 · 만들기 · 고치기 · 지우기 · 복사 대상. +- 일반 = 마스터 · 회사 읽기만 · 남 개인 안 보임 · 나무 그대로 · 프로젝트 apply · sources 도 같은 규칙. +- 사람 나무 = 맡은 회사면 켬 · 회사 사람 전부(나 맨 위 · 빈 사람 「비어 있음」) · 남의 층 첫 쓰기 = 소속 확인 뒤 뼈대. +- 「〇〇로 복사…」 = 쓸 수 있는 층 전부(마스터 · 볼 회사 · 내 개인 · 지금 사람) + 대상 폴더 고르기 창(`M02_MasterTemplete_TreePanel_CopyTo.ts`). +- 남의 층 쓰기 = `system_audit_logs` 한 줄(`M02_OTHER_LAYER_WRITE`). +- 실무문서 = 일위대가 조합 길 전부 시스템 관리자만(서버가 막음). +- 새 길(labor 문서 · calc · pills · 층 넘는 복사)도 `_root` · `_layer_dir` 한 벌을 거침. + +## 7. 지우기 (G · sub6) + +- G1 자재 조합(UM) · G2 재료산출(`material/` · SM · 카드 · 시트 · 옆 판 · 길 · 시험) 먼저 · G3 선택 입력(카드 · `inputs/` · 자리 · 알약 길)은 C 의 입력 모달이 선 뒤. +- `pickMaterial` · `MaterialItem` → `M02_Material_Pick.ts` 로 옮긴 뒤 지움 · 알약 모드 「자재」 · `LinkMaterial`(A00 spreadsheet) 남김 · `고른자재.json` 남김 · 프로젝트 `입력값.json` 남김. +- storage 층(회사 · 개인 · 프로젝트)의 `material/` · `inputs/` · `자재조합.json` 파일은 지우지 않음(읽기만 끊음 · 정리는 사용자) · git 안 시스템 층 · fixture 는 지움. +- 옛 SM 번호 버림 · 장부 `재료번` 칸은 다음 집계표 [저장] 때 빠짐. + +## 8. 파일 주인 (같은 파일 = 몫만 고침 · 받은 뒤 고침) + +| 파일 | 주인 | 다른 창 몫 | +| --- | --- | --- | +| `M02_MasterTemplete_Store.py` · `M02_Template_Layers.py` | sub7 | sub6 = material · inputs 줄 | +| `M02_MasterTemplete_Router_Items.py` | sub4(`_root`) | sub7 = copy 길 from_layer · sub6 = material · inputs 길 | +| `M02_MasterTemplete_Router_Combos.py` · `Combo_Store.py` | sub5(나무 길) | sub4 = 시스템 관리자 문 · sub2 = preview 지움 | +| `M02_MasterTemplete_UI_Side.ts` | sub5 | sub6 = material · matset 줄 | +| `M02_MasterTemplete_UI_Page.ts` | sub5 | sub4 = copyTo · sub1 = onAll 이음 | +| `M02_MasterTemplete_UI_Main.ts` | sub3(면적 길) | sub2 = labor 종류 · sub1 = 제목 꼴 · showView · sub6 = material 길 | +| `M02_MasterTemplete_ItemCards.ts` | sub1(카드 셋 · 빈 카드) | sub3 = 알약 켬끔 · sub6 = 재료 · 선택 입력 카드 | +| `M02_MasterTemplete_Structure.ts` | sub3(pillsFor) | sub1 = pickCopy · sub6 = inputs · material | +| `M02_MasterTemplete_TreePanel.ts`(670줄) | sub1(copyIn · 넘으면 `TreePanel_Clip.ts`) | sub5 = 일위대가 전용 칸 지움 · sub4 = 「〇〇로 복사…」 이음 | +| `M02_MasterTemplete_Labor_*.ts` | sub2 | sub5 = `Labor.ts` · `Labor_Tree.ts` 나무 지움 | +| `M02_MasterTemplete_Api_Fetch.ts` | 각자 자기 함수만 | — | +| `A00_Common/spreadsheet/spreadsheet_links.ts` · `spreadsheet.ts` | sub3 | — | +| 공용 메뉴 · 진입(`main.ts` · `cad_host.ts` · `ui_template_context_menu.*` · `ui_template_tree.*` · `spreadsheet_condition.ts` · `spreadsheet_menu.ts`) | sub8 | — | diff --git a/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md b/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md new file mode 100644 index 000000000..03f77c17e --- /dev/null +++ b/docs/raw/plans/2026-10-04_plan_M02구조물조합개편_2차_도면표.md @@ -0,0 +1,78 @@ +# 지난 계획 — 39~41장 (2026-10-04) + +M02 구조물 조합 개편(일위대가 = 구조물마다 · 재료산출 · 선택 입력 지움 · 실무문서 · 권한 · 오른쪽 클릭) · 2차 수정(단가산출 로직 · 수량산출 열 · 카드 3열 · 삭제 · 알약 끌어 놓기 · 색) · 면적산출 표 → 도면 표. 검증은 사용자(10-4). + +## 32장에서 39 로 넘긴 줄 + +- [X] 선택 입력 정리(조사 10-1 끝 · 고침은 사용자 지시 뒤) — 일위대가 「넣을 값」과 구조물 「선택 입력」 이름 · 값 칸 규칙 두 벌 · 사라진 입력 안 알림 · 항목마다 자리 다시 고름 · 39 로 넘김(10-4 · 선택 입력 지움 · 값 칸 규칙 한 벌 · 사라진 값 알림은 39-3) +- [X] 로직 지우기 서버 검사가 마스터 층 조합만 봄(10-1 sub4) — 회사 · 개인 조합에 담긴 로직도 막기(`M01_MasterData_Store_Combo.py:194` · `Store_Cache.py:220` · 쉬운 길은 화면에서 미리 찾아 알림) · 39 로 넘김(10-4 · 39-1b 로직 지우기 검사 = 모든 층 labor) + +## 39. M02 구조물 조합 개편 (사용자 지시 10-4) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004.md`(2 일위대가 → 구조물 조합 하위 · 3 이름 · 4 구분선 · 5 권한 · 6 항목 변경 · 9 오른쪽 클릭) +- 사용자 확정(일위대가): 구조물 조합에 일위대가 · 도면 · 면적산출이 엮임 · 구조물 조합 복사 = 일위대가 새 키(로직 · 값 같이 복사) · 새 구조물 조합 = 미리보기에서 「새로 만들기」 / 「복사 생성」(목록 · 기본 탭 = 일반 개인 · 회사 관리자 개인 · 시스템 관리자 마스터 · 탭으로 다른 곳) · 항목 하나만 다른 것을 복사해 바꿈(저장 뒤에도) · 매칭 안 된 일위대가 조합 = 마스터 「실무문서」 항목으로 따로(나중에 한 번에 지움) +- 사용자 확정(10-4): 원본 단가산출 로직(resources/master_data 로직 · 표 · 요소 · 마스터 일위대가조합.json)은 절대 손대지 않음(읽기만) · 입력값은 사용자 · 설계자가 일위대가에 정해 저장 → 프로젝트로 복사해 씀 +- 정함(브레인): 조사 먼저(창마다 자기 몫 · 코드 안 고침) → 브레인이 설계 정함(이 절에 줄 더함) → 구현 · 조사 보고 = 각 창 `tmp/조사_39-0*.md` + +- [X] 39-0 조사(보고 여덟 · 정함 = `docs/raw/M02_구조물조합개편/설계_정함.md`) — A 좌측 패널 · 이름 · 구분선(sub5) · B 자료 틀(일위대가 입력값 · 자재목록 · 수량 연결 자리 · sub7) · C 일위대가 상세(sub2) · D 면적산출(sub3) · E 권한(sub4) · F 오른쪽 클릭(sub8) · G 재료산출 · 선택 입력 지우기 영향(sub6) · H 「전체 항목」 목록 화면(sub1) +- [X] 39-9a 오른쪽 클릭 막기(sub8) — 정함(브레인): 공용 진입 한 곳 창 캡처 듣기 · 대상 주소 `/^[bm]\d/` · 글 입력 칸(읽기 전용 포함)은 브라우저 메뉴 살림 · 입력 칸 밖 고른 글은 막음 · CAD 는 cad_host iframe load 때 같은 함수 · 남은 막기 코드 그대로(주석 셋만) · 근거 sub8 `tmp/조사_39-0F.md` — 확인 = 새 시험 test_common_native_menu.py · ORCA `defaultPrevented` 수치(B01 · B05 · B07 · M01 · M02 참 · 입력 칸 · A01 거짓) + - 검증완료(sub8 · 0f8efaa42) — 시험 4 통과 · ORCA 5183 B01 · B05(노선 편집 패널 포함) · B07 · M01 · M02 본문 · 헤더 · 모달 · CAD iframe 리본 · 패널 · 캔버스 막힘 참 · 입력 칸(CAD 안 포함) · A01 거짓 · CAD 오른쪽 단추 확정 그대로 +- [X] 39-9b 메뉴 공통 양식(sub8) — 공용 CSS 한 벌(지도 · 표 메뉴 · 나무 메뉴 · 상태줄 흠) · 「한 번에 하나」 장부 합침 · 조건 만들기 = 칸 메뉴 끝 한 줄(가로채기 지움) · 부품 API 합치기는 안 함 — 확인 = 메뉴마다 폭 · 그림자 · 글자 수치 같음 · 스프레드시트 하네스 시험 + - 검증완료(sub8 · 277311955) — B04 관 · B05 종단 · 배수 · 3D · 칸 · 상태줄 · M02 나무 · 조건 만들기 메뉴 폭 160 · 글자 13 · 여백 8/12 · 모서리 8 · 그림자 같음(밝음 · 어두움) · 나무 ↔ 칸 메뉴 한 번에 하나 · 시험 52 통과 · 조건 만들기를 쓰는 곳(M01 흐름 식 칸)은 칸 메뉴 없는 미리보기 편집기 → 같은 공용 메뉴에 이 줄만 · 시트 탭 메뉴는 탭 켠 화면이 없어 화면 확인 못 함(같은 부품) +- [X] 39-1a 자료 틀(sub7) — labor 종류 · SU 번호 · 문서 검사 · 계산(기준 ③ 서버 · 반영 ① 짝 · [저장] 때 계산값) · `_PER` 1,000 · calc · pills 길 — 확인 = 새 시험 test_m02_labor_doc.py · 거울 시험 · 기존 store · layers 시험 +- [X] 39-1b 옮기기 · 복사 · 프로젝트(sub7) — 옮기기 스크립트(시스템 층 바로 · storage 는 사본 뒤 브레인) · copy_from 층 넘김 + 실무문서 조합 → 일위대가 · 구조물 복사 = 새 SU — 확인 = 옮기기 시험(UP10-000001 → 열 둘) · tree_paste · item 시험 + - 검증완료(sub7) — 새 시험 labor_doc 19 · 거울 3 · migrate 4 · labor_copy 6 + store · structure · structure_combo · item_keys · layers_store · tree_paste · combo_layers · combo_branch · item_inputs · layer_access · M01 combo · cache 통과 · typecheck · 8009 실제 길: item1 SU-000001 기준합 2,658,983 · 알약 13 · 칸 값 3 → 수량출처 칸 · 시스템 층 옮김 item1←UA000008 · item3←UA000001 · item2 빈 · storage 층 안 돌림 · B8 은 sub8(39-1c) · 은퇴 길(use-combo · 갈라 내기 · preview)은 화면이 아직 불러 남김 · 로직 지우기 검사는 ecc4a651a 로 먼저 함(39-1d 와 겹침) +- [X] 39-1d 은퇴 · 로직 지우기 검사(sub4) — 로직 지우기 검사 = 모든 층 labor 담은로직 + 실무문서 · 일위대가 갈라 내기 · 키 적기(use-combo) · 조합 고치기 길과 화면 부름 정리(쓰는 곳 0 확인 뒤) · 남의 층 기록 = 성공한 쓰기만 — 확인 = 로직 지우기 시험(회사 · 개인 labor 에 담긴 로직 막힘) · grep 0 + - 검증완료 — 로직 지우기 시험(회사 · 개인 · 마스터 labor · 실무문서 → 422 · 어디서 쓰는지 알림 · 다 빼면 지워짐 · 임시 사본) · M01 시험 56 · 조합 층 14 · 권한 · 양식 18 통과 · 남의 층 기록 = 성공한 쓰기만(409 · 403 안 남김) +- [X] 39-1d 남은 은퇴(sub4 · sub3 D3 · sub5 받은 뒤) — 쓰는 곳이 남아 못 지움: 갈라 내기 `branch_combo` · 키 적기 `use_combo`(Branch.py · Router.py · Router_Items 길 · Api_Fetch `branchCombo` · `setColumnCombo` ← Combo.ts · ComboPanel.ts) · `fetchUsableCombos` · `/combos/all` ← ComboPanel · Structure · 조합 만들기 · 지우기 길(POST · DELETE) ← 죽은 Labor_Edit.ts(sub2) · 조합 시험 · `Combo_Store.edit`(sub5) · Labor_Api `newCombo` · `editCombo` · `deleteCombo` · `fetchAllCombos` · `editComboTree*` · `pasteCombos` · `fetchLibLogic` · `fetchLibAuto`(sub2 · sub5) + - 검증완료 — 지움: Branch.py · 갈라 내기 · use-combo(옛 · 층 길) · 조합 만들기 · 지우기 · 알약 두 길 · grep 0 · typecheck · 시험 m01_combo · combo_inputs 29 · combo_layers 9 · combo_branch · layers_store 통과 · 남김: /combos/all · fetchUsableCombos(항목 추가 창 일위대가 고르기 pickCombo) · 집계표 열 「일위대가」 칸(그 창이 씀) · 목록 · 키 읽기(Practice · ItemPick) · 실무문서 통째 지우기 · Combo_Store create · delete · pills(sub5 · 시험 · Labor_Doc 알약) +- [X] 39-1c 프로젝트 층(sub8 · 39-1a 뒤) — 스냅샷 일위대가 = labor 문서 · 입력값.json 첫 값 = labor 입력값 · 단가.json 자재 MT · 계산 반영 같은 함수 · B05 고르기 모달 카드 = 도면 · 일위대가(C 보기 부품) · 면적산출 + 값 카드 — 확인 = item 시험 · 고르기 모달 값 → /calc 합계 + - 검증완료(sub8 · e1ad3d362 · 1baf761c4) — 시험 67 통과(새 test_m02_item_labor 5 · picker 20 · copy · inputs) · ORCA 5183 sub8_검증 B05 고르기 모달 카드 도면 · 일위대가 · 면적산출 · 값 넣고 저장 → /calc 반영 합 337,721.97 = 손셈 = 원본 층 계산 · 빈 값 = 멈춘 로직 1 · 빠진 입력 1(붉게) · 저장 안 하고 뒤로 = 버릴지 물음 · 일위대가 쓰기 400 · 밝음 · 어두움 +- [X] 39-1e 프로젝트 면적산출 알약 = labor 알약(sub8 · 39-7b 뒤) — 옛 입력연결 알약 대신 스냅샷 labor 알약 · 정함(브레인): 프로젝트 계산은 빠진 입력이면 그 로직 멈춤 그대로(입력 유도 · 원본 층은 자동값) — 확인 = 고르기 모달 면적 편집 알약 수 = labor 알약 수 · sub6 G3(c704f1898)이 함께 바꿈 · 39-8 에서 확인 +- [X] 39-0i 통합(sub5) — dev 에 sub2 · sub7 · sub3 · sub1 · sub4 · sub8 합침(Api_Fetch · Store_Cache 로직 지우기 검사 두 벌 → sub4 하나 · Structure.ts import) → sub6 이 자기 충돌 풂 → 모두 받기 · 통합 1 f0b8882a8 · 통합 2(sub6 · sub1) 진행 +- [X] 39-2 좌측(sub5) — 일위대가 컨테이너 · 나무 지움 · 하위 차례 도면 → 일위대가 → 면적산출 · 수평선 · 「전체 항목」 줄 · 이름 「일위대가」 · 실무문서 컨테이너(시스템 관리자) · 나무 서버 길 지움 · 대시보드 카드 — 확인 = typecheck · ORCA 5180 줄 수 · 세 역할 화면 + - 검증완료(sub5) — typecheck · 고친 시험 · ORCA 5180 시스템 관리자: 하위 차례 · 수평선(밝음 · 어두움) · 전체 항목 셋 · 일위대가 열 줄 3(SU 는 39-1b 옮기기 뒤 · 지금 「없음」) · 실무문서 37 · 상세 · 지우기 물음 취소 · 회사 · 개인 층엔 실무문서 없음 · 회사 관리자 · 일반은 서버 403 시험(계정 화면은 못 봄) +- [X] 39-3 일위대가 상세(sub2) — labor 종류 상세 · 입력 모달 · 작은 글 · 금액 두 줄 · 자재목록 · 미리 보기 지움 · 다이어그램 · 보기 갈래 부품 · 입력 부품 옮김 — 확인 = 거울 · 다이어그램 시험 · ORCA 5177 값 넣고 저장 → 다시 열기 + - 검증완료(43a59a689 · d847f724c · 3ad7678e1 · 5b4aed1b2) — 시험 통과 · ORCA 5177 item1: 기준 60,984 × 손 5 = 반영 304,922 · 자재 6,090 × 10 = 60,900 · 합 365,822 = 저장 계산값 · 다시 열어 값 남음 · 범위 밖 · 빈 손 수량 · 같은 로직 막음 · 떠날 때 물음 · 어두움 · 남음 = 읽기만 화면(권한 계정) 미확인 · 검증용 labor/item1.json 지움 +- [X] 39-4 면적산출(sub3) — 알약 켬끔(기본 꺼짐) · 오른쪽 패널 = 담은 로직 + 자재목록 · 칸 지정 모달 · setLink · 자재 알약 · 조합 패널 지움 — 확인 = setLink 시험 · ORCA 5178 칸 잇기 → 금액 즉시 · 검증완료(sub3 · 시험 31 · ORCA 5178: 카드 알약 줄 기본 0px → 켬 147px → 다시 열어도 그대로 · 상세 늘 보임 · 오른쪽 패널 로직 14 줄 · C3 = 12.5 잇기 → 반영 726,535 · 20 → 1,162,456 바로 · 「수량 C3 = 12.5」 · 알약 ↔ 모달 같은 연결 · 빈 · 틀린 주소 막음 · 풀기 · 어두움 · 저장 안 하고 옮김 물음 · 옛 조합 패널 쓰는 곳 0) · 검증 대기 +- [X] 39-5 목록 · 고르기 · 카드(sub1) — ItemList · 전체 항목 화면 · 상세 제목 M01 꼴 · 새 항목 두 단추 · 복사 생성 탭 · 카드 셋 · 빈 카드 두 단추 · 복사해 가져오기 — 확인 = item_list 시험 · ORCA 5174 복사 생성 → 새 SU + - 검증완료(18a063925 · 134a727c9 · 364d22ff6 · 6cf72bbf1 · 6f8470890 · 6d46dda54) — 시험 통과 · ORCA 5174 마스터: 전체 항목 줄 수 = 좌측 줄 수(3 · 3 · 3) · 제목 18px · 탭 = 시스템 관리자 다섯(기본 마스터) · 일반 셋(기본 개인) · 빈 사람 = 빈 목록 · 복사 생성 item1 → SS000055 · SD-000004 · SA-000004 · SU-000004(로직 14) · 폴더 안 같은 이름 「ㄴㄴ (2)」 · 실무문서 UA000001 → SU-000002 로직 3(번호 그대로) · 개인 → 마스터 면적산출(SA-000002 그대로) · 카드 차례 도면 → 일위대가 → 면적산출 · 어두움 · 마스터 사본 되돌림(차이 0) · 남음 = 재료산출 · 선택 입력 카드 지움은 sub6 받은 뒤 · 읽기만 계정 화면 미확인 +- [X] 39-6 권한(sub4) — 맡은 회사 규칙 · 사람 나무 · 첫 쓰기 뼈대 · 「〇〇로 복사…」 폴더 · 감사 기록 · 실무문서 문 · apply · sources · readableSources — 확인 = layer_access · 새 layer_manage 시험 · ORCA 세 계정 + - 검증완료 — 시험 layer_access 4 · template_layers · combo_layers 14 · layer_screen(39-6 몫) 통과 · 관련 M02 시험 66 통과 · API 세 계정 25/25 · ORCA 회사 관리자 · 일반 · 시스템 관리자(고객 회사 3) 사람 나무 · 「〇〇로 복사…」 폴더 창 · 밝음 · 어두움 · 쓰기 성공 길은 임시 storage 시험(새 파일 대신 layer_access 에 더함) +- [X] 39-7a 지우기 G1 · G2(sub6) — 자재 조합 · 재료산출 지움 · pickMaterial 옮김 — 확인 = typecheck · check_master · 고친 시험 · ORCA 5181 카드 · 줄 +- [X] 39-7b 지우기 G3(sub6 · 39-3 입력 모달 뒤) — 선택 입력 카드 · inputs · 자리 · 알약 길 지움 — 확인 = 프로젝트 고르기 값 → /calc 합계 그대로 + - 검증완료(sub6 · 54ce67ceb · 61d2ed599 · 79e4bba1b · c704f1898): typecheck 0 · check_master 틀 0건 · 고친 대상 시험 초록(test_m02_card_shell 1건은 origin/dev 자체 빨강) · ORCA 5181 좌측 = 구조물 도면 · 일위대가 · 면적산출 · 집계표 줄 = 일위대가 · 도면 · 면적산출 · 카드 = 도면 정보 · 면적산출(선택 입력 없음) · 면적산출 편집 알약 = 일위대가 알약 · 옵션 제목 밝음 · 어두움 · /calc = 시험(test_item_copy_complete)으로 · 프로젝트 고르기 모달 면적 알약 = 복사본 labor 알약으로 바꿈(39-1e 몫과 겹침) +- [X] 39-1f 새 항목 창 일위대가 고르기 없앰(sub4) — 새 구조물 일위대가 = 늘 빈 문서 · 카드 [새로 만들기] / [복사 생성] · 열 「일위대가」 새로 쓰기 없앰(든 값은 옮기기 뒤 정리) — 확인 = 창 줄 수 · 새 열 빈 labor · sub4 8087c7306 · 창 칸 둘 · 새 열 labor 빈 문서 · 시험 64 +- [X] 39-8 끝 검증 — 흐름 셋(새 구조물 새로 만들기 · 복사 생성 · 항목 하나 복사) × 세 역할 · 일위대가 값 → 금액 · 면적 칸 → 반영 · 실무문서 · storage 옮기기 뒤 확인 · 검증완료(가 sub1 19/22 · 나 sub2 26/27 → 흠 ①~④ · H1~H3 · X3 모두 고침) · main 합침 e6fe5232e · storage 옮기기(브레인 · 사본 tmp/storage_templates_39.zip · labor 5 · 두 번째 「그대로 5」) · 남은 빨강: spreadsheet 늦게 불러오기 시험 1(흐름도 DataFlow · 39 밖) · 검증 대기 +- [X] 39-10 요구 대조(브레인 · 사용자 요청 10-4) — 끝난 뒤 사용자 대화 입력 원문(요구 2~6 · 9 · 답 1~4 · 원본 로직 손대지 않음 · 입력값 복사 흐름) 줄마다 반영 여부 · 근거(화면 · 파일 · 수치) 표 · 요구 31 줄 모두 반영(흠 B1~B4 고친 뒤) · 표 = 보고 Artifact · 검증 대기 +- [X] 39-11 브레인 실제 검증(사용자 요청 10-4) — 끝난 뒤 브레인이 사용자처럼 브라우저 조작(진짜 마우스 · 사진 · 세 역할) · 보고 Artifact · 세 계정 · 진짜 마우스 · 사진(sub5 서버 s01~s15 · 메인 m01~m04) · 흠 B1(표 일위대가 줄 SU) · B2 · B3(전체 항목 합계 · 단위) · B4(새 항목 단추) 고침 → main 11ef83985 · 저장 안 함 · 검증 대기 + +## 40. M02 구조물 조합 개편 2차 (사용자 지시 10-4 밤) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004_2.md` · 「구조물 옵션 보이기」 칸은 그대로(사용자 확인) +- 정함(브레인): 「담은 로직」 → 「단가산출 로직」(상세 · 카드 · 면적 패널 모두) · 수량산출 열 = 위 결과단위 기준 수량(분모 · 예 「10 ㎡」) · 아래 수량(손 · 칸 · 「—」) · 누르면 [손 입력] / [엑셀에서 고르기](그 열 면적산출 시트 모달 · 칸 누르면 그 로직 알약을 그 칸에 이음 · 일위대가 [저장] 때 면적 문서도 함께 저장) · 버튼 = 공용 버튼 양식 · 카드 단추 「가져오기」 · 「수정」(면적산출 카드도 같은 이름) · 카드 [삭제] = 그 항목 비우기(번호 · 열 그대로 · 물음 한 번) · 일위대가 카드 = 한 줄 표(항목 · 수량산출 · 단위 · 노무비 · 재료비 · 경비 · 합계 · 금액 = 수량 반영 값 · 없으면 기준 값 흐리게) · 알약 색 = 알약 키로 자동(두 테마) · 이은 칸 배경 같은 색 옅게 · 반짝임 그대로 + +- [X] 40-1 일위대가 상세(sub2) — 이름 「단가산출 로직」 · 「자동값 xx」 조사 → 브레인 정함 → 고침 · 수량산출 열 + 손 입력 · 엑셀 모달 잇기(sub3 부품) · 로직 추가 · 올리기 · 내리기 · 빼기 · 자재 추가 = 버튼 · Labor_View 한 줄 표 갈래(카드용) — 확인 = 시험 · ORCA 수량 칸 손 · 엑셀 고름 → 반영 값 · 저장 → 다시 열기 + - 검증완료(1c0868b78 · fd4830556 · e70fc184a · 35ccc26af) — 시험 34 통과 · ORCA 5177 SU-000003: 손 5 → 79,280 × 5 = 396,398 · 엑셀 B6(12.5) → 4,523 × 12.5 = 56,537 · 저장 → 면적 연결 「노체포설|㎥ → B6」 · 손 5 · 반영합 = 화면 · 다시 열기 같음 · 저장 안 하고 떠나면 물음 · 고르기 칸 「자동값」 줄 없음(B05 값 카드 확인 상자 그대로) · 한 줄 표 300~560 · 면적 패널 320~560 가로 넘침 없음 · 밝음 · 어두움 · 검증용 마스터 2 파일 되씀 +- [X] 40-2 구조물 조합 상세(sub1) — 카드 단추 「가져오기」 · 「수정」 · 일위대가 카드 한 줄 표(sub2 갈래) · 「새 항목」 버튼 · 카드 셋 3열 · 카드 [삭제](비우기) — 확인 = ORCA 3열 · 삭제 → 빈 카드 · 시험 + - 검증완료(74a524202 · e3236558b) — 시험 53 통과 · ORCA 127.0.0.1:5174 폭 1600 = 3열(카드 402px · 높이 628 같음) · 1000 · 400 = 1열 · 가로 넘침 0 · 400 에서 면적 카드 단추 여섯 줄 바꿈(카드 밖 0) · 단추 「수정」 · 「가져오기」 · 「삭제」 · 「새 항목」 높이 32 · 글 14px(저장과 같음) · item1 일위대가 [삭제] → SU-000001 · item1 그대로 · 담은로직 14 → 0 · 빈 카드 두 단추 · 면적산출 [삭제] → SA-000001 그대로 · 칸 · 연결 0 · 일반 계정 마스터 · 회사 카드 단추 0 · 어두움 · 마스터 사본 되씀(차이 0) · 남음 = 도면 [삭제] 는 마스터 도면이 다 비어 화면 확인 못 함(서버 길은 40-4 시험) +- [X] 40-3 면적산출 상세(sub3) — 알약 끌어 칸에 놓기 추가 · 알약 색 자동 · 이은 칸 같은 색 · 반짝임 그대로 · 엑셀 칸 고르기 모달 부품(sub2 용) — 확인 = 끌어 놓기 → 연결 · 색 수치 · 두 테마 · 검증완료(sub3 · 시험 16 + 하네스 15 · ORCA 5178: 칸 고르기 모달 C5 · 풀기 · 그만둠 · 끌어 C3 → 연결 · Ctrl+Z 풂 · F14 에 놓기 = 물음(취소 그대로 · 바꿈 = 갈아끼움) · 색 24 서로 다름 · 테두리 대비 최소 밝음 3.40 · 어두움 3.55 · 글 8.85 · 6.35 · 카드 · 상세 둘 다 · 마스터 변화 0) · 검증 대기 +- [X] 40-4 서버 비우기 길(sub7) — 항목(도면 · 일위대가 · 면적산출) 비우기 = 빈 문서로 씀(번호 · 열 그대로 · 권한 규칙 그대로) — 확인 = 시험(세 종류 · 권한 403) + - 검증완료(sub7) — test_m02_part_clear 7(세 종류 빈 문서 = 새 열 꼴 · 번호 · 장부 그대로 · 면적 비우면 일위대가 수량 「없음」 · 일반 마스터 403 · 남의 개인 403 · 회사 관리자 동료 개인 200 · 없는 열 404 · 모르는 종류 422) · typecheck · 00cb6db66 · 화면 함수 clearPart +- [x] 40-5 합치기 · 끝 검증 · 메인 반영 · 브레인 요구 대조 · 실제 검증 · 보고 · main 795b861da(40 · 41 함께 · 흠 D1~D4 고침 · CAD 빌드 · 시험 90) · 끝 검증 · 브레인 실제 검증은 사용자가 하기로(10-4) · 검증 대기 + +## 41. 면적산출 표 → 도면 표 (사용자 지시 10-4 밤) + +- 사용자 요구 원문 = `docs/raw/M02_구조물조합개편/사용자요구_1004_2.md` 끝 「추가 기능」 — 면적산출에서 범위를 골라 도면으로 보내면 도면에 표가 들어가고 칸 내용이 따라감(어려우면 [업데이트] 단추) · 표 여러 개 · 자리는 도면에서 사용자가 끌어 정함 +- 정함(브레인): 조사 먼저(CAD 표 · 묶음 꼴 · 호스트 ↔ CAD 메시지 · 끌어 놓기 · 값 따라가기 길) → 브레인이 설계 정함 → 구현 · 원본 단가산출 로직 자료 손대지 않음 + +- [X] 41-0 조사(sub8) — 보고 `tmp/조사_41-0.md` · 끝(CAD 표 객체 TableEntity 있음 · 미리보기 틀 있음 · DXF 표 빠짐 흠) + +- 정함(브레인 · 조사 추천 그대로): 표 = CAD 표 객체(TableEntity · 한 덩어리) · 따라가기 = 면적 [저장] 때 서버가 그 열 도면 표 칸 글을 다시 적음 + 도면을 열 때 기록 값 ≠ 지금 값이면 알림 · [업데이트] · 연결 표지 = 표 style.연결(표 id) · 칸 key 「시트!A1」 · 보낼 꼴 = 표시 글(형식 적용) · 병합 · 가로 정렬 · 굵게 · 열 너비 비율(채움 · 테두리색 · 글자색 안 보냄) · 크기 = 표 글자 크기 하나(기본 2.5 · 보낼 때 바꿀 수 있음) · 넘김 = 같은 페이지 안(캐시 · 서버 안 씀) · 시작은 면적 상세 [도면으로 보내기] 단추(칸 메뉴는 뒤) · DXF 내보내기에 표 = 선 + 글 + +- [x] 41-1 서버(sub7) — 범위 → 표 칸 변환(Node 묶음 formatValue 다시 씀 · 새 M02_Area_Table.py) · POST /api/m02/layers/{층}/area/{열}/table · 면적 저장 때 도면 표 맞춤(마스터 · 회사 · 개인 층 + 프로젝트 층 길) — 확인 = 시험(형식 · 병합 · 한도 · 권한 · 저장 뒤 표 글 바뀜) + - 검증완료(sub7) — test_m02_area_table 10(형식 「1,234.50」 · 식 칸 · 굵게 · 가로 · 병합 rowSpan · 범위 밖 병합 잘라냄 · 숨긴 행 3 · 열 D 뺌 · 빈 칸 · 한도 171>100 · 없는 시트 · 범위 꼴 · 길 200 · 저장 안 함 · 남의 개인 403 · 없는 열 404 · 면적 저장 뒤 T1 칸 「10.00」 · 자리 · 크기 그대로 · 다른 표 그대로 · 표 없는 T2 기록 값 갱신 · 프로젝트 층 맞춤) + store · structure · template_layers · labor · clear · copy · spreadsheet_store 74 통과 · typecheck · 8009 실제 길 200 · 3ded39875 +- [x] 41-2 CAD · 호스트(sub8) — 메시지 place-table · update-table · 「표 놓기」 도구(커서 따라오는 미리보기 · 누르면 놓임 · Esc · 되돌리기) · cad_host · Drawing.ts 함수 · CAD 빌드 · DXF 표 = 선 + 글 — 확인 = vitest · ORCA 놓기 · DXF LINE · TEXT 수 + - 검증완료(sub8 · c426fa2ad · 0bc560663 · cc63e49ab · b2aa2a987) — vitest 8(놓기 · 연결 남음 · 칸 갈기 · 넘침 · 없는 연결) · DXF 시험 4(거울 = TS 표 기하 · 면적 표 LINE 13 · TEXT 5 · 정렬 L/C/R · B07 수량표 LINE 7 · TEXT 3 — 전에는 표가 빠짐) · ORCA 5183 M02 도면 상세: 미리보기가 커서 따라옴 · 누르면 놓임(drawing-changed) · Esc 그만 · Ctrl+Z 1→0 · 다시하기 · MOVE(새 id) 뒤 저장 JSON style.연결 T1 남음 · update-table T1 = 1 · 없는 연결 0 · 자리 · 너비 그대로 · 밝음 · 어두움 · 저장 안 하고 나감 · 자동백업 지움 +- [x] 41-3 화면(sub5) — 면적 상세 [도면으로 보내기](고른 범위 · 글자 크기) → 그 열 도면 상세로 넘겨 놓기 · [저장] 때 연결표 기록 · 다시 열 때 다름 알림 + [업데이트] · 표 여러 개 — 확인 = ORCA 범위 고름 → 보냄 → 끌어 놓음 → 저장 → 면적 값 바꿔 저장 → 도면 표 글 바뀜 + - 검증완료(sub5) — typecheck · test_m02_area_to_drawing 7 · structure_panel · ORCA 5180 마스터: A1:C4 보냄 → 놓음 → 저장(표 T1 · 연결표 T1) · 면적 A1 · B1 · C2(식) 저장 → 도면 표 글 길이 · 12.5 · 25 · 같으면 알림 0 · 기록 값 옛 값이면 「바뀐 표 1개」 + [업데이트] → 저장 값 갱신 · 표 셋(T1~T3 · 글자 5 · 2.5) · T3 지움 → 도면 · 연결표 둘 다 빠짐 · 마스터 사본 되씀(git 빈 상태) · 권한 없는 층 단추 0 은 시험으로만 diff --git a/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md b/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md new file mode 100644 index 000000000..fa33578c6 --- /dev/null +++ b/docs/raw/plans/2026-10-04_plan_단가산출_흐름도_조합다이어그램_마스터요소.md @@ -0,0 +1,108 @@ +# 지난 계획 — 33~38장 (2026-10-01 ~ 10-02) + +단가산출 로직 점검(데스크탑 한시) · 쉬운 단가산출 · 로직 만들기 시험판(세 칸 판 · 시트 로직 · 다이어그램) · 흐름도 시험판 · 흐름도 본 프로그램 적용 · 일위대가 조합 다이어그램 · 마스터 요소 화면 손질. + +## 33. 단가산출 로직 점검 · 수정 (사용자 + 데스크탑 메인 · 보조 · 10-1 한시) + +- 사용자가 데스크탑 메인 · 보조와 직접 진행 · 브레인은 랩탑 sub1~8 로 사용자가 요청하는 다른 일을 맡음(10-1 18:00 무렵까지). +- 근거 = `docs/raw/M01_점검/종합/` · `docs/raw/M01_결정목록/` · `docs/raw/M01_입력목록/` · `docs/raw/M01_고침/`. + +## 34. 쉬운 단가산출 제어 (새 길 · 10-1 · 랩탑) + +- 사용자 확정(10-1 오전): 만든 쉬운 단가산출은 유지(지우지 않음) · 로직 정의 자체를 만드는 판은 제안만 · 허락 뒤 착수 +- 사용자 확정: 지금 단가산출은 그대로 · 「추가」 단추 옆 새 단추로 따로 들어감 · 코드는 `M01_MasterData/EasyCalc/` 한 곳(안 되면 폴더째 지움) · 초등학생도 추가 · 삭제 · 수정 · 시간이 걸려도 검토 먼저. +- 정함(브레인): 새 길은 지금 로직 형식을 그대로 읽고 씀(계산 엔진 안 바꿈) · 폴더 밖 참조는 단추 자리 한 곳만. +- [x] 34-1 검토 — 데이터 · 계산 지도(sub4) · 지금 화면 걸음 재기(sub6) · 실무 모양 + 갈래 비교(sub7) · 지난 시도(sub8) → `docs/raw/M01_쉬운단가/` · 지금 화면 새 로직 38 누름 · 5~6 창 +- [x] 34-2 설계 확정(브레인) — 문장 카드 · 품셈 기본은 「이걸 바탕으로 고치기」 · 쓰기는 `/logic/*` 만 · 1단계 숫자 수량 + 잠금 카드 → `docs/raw/M01_쉬운단가/설계.md` +- [x] 34-3a 단추 + 빈 창(sub1 · 「식으로 새로 만들기」 옆) 검증완료 +- [x] 34-3b 1단계 — Model(sub7) · Api(sub4) · Cards(sub2) · Pick(sub3) · Sheet(sub5) · 틀 · 잇기(sub1) — 설계.md 2 · 3절 · Sheet 검증완료 · Model 검증완료 · Api 검증완료 · Pick 검증완료 +- [x] 34-3c 2단계 — 표 보고 고르기(sub8) · 조건 고치기(sub7 · 조건 줄 93% 읽음) 검증완료 · 카드 단추 잇기(sub2) · 조건 고치기 검증완료 +- [x] 34-4 검증 — 대표 일 여섯 + 예외(빈 값 · 같은 이름 · 저장 안 하고 닫기 · 권한 없음 · 밝음 · 어두움) · 지우기 시험(폴더 밖 참조 줄 수) · 걸음(sub3 고침 뒤) ①21 ②8 ③2 ④4 ⑤2 ⑥3 = 40(목표 36 넘음 4 · ① 새 설계 값 자동값으로 채워 금액 곧장 보임) · 다른 일위대가 넣고 저장 됨 · 권한 없음(일반 사용자) = M01 화면 못 들어감 · /api/m01 403 · 폴더 밖 참조 두 줄 · 검증완료 + +## 35. 단가산출 로직 만들기 판 (제안 단계 · 착수 전) + +- 사용자 확정: 쉬운 단가산출처럼 따로 폴더 시험판 · 로직 몇 개 골라 만듦 · 페이지 보고 판단(마음에 안 들면 지움) · **착수는 허락 뒤** · 인터넷 조사 먼저 · 화면 용어는 단어로 다시 제안. +- 제안서 https://claude.ai/artifact/U4rkgpYWL4Em5VKBEVa4oY (세 칸: 원문 표 · 산출 과정 · 결과) +- [x] 35-0 인터넷 조사 — 견적 프로그램(sub6) · 노코드 규칙 도구(sub8) → `docs/raw/M01_쉬운단가/로직판_조사_*.md` · 제안서 2판에 반영 +- [x] 35-1 용어 단어 제안(제안서 2판 「용어 — 단어로」) → 사용자 확정 · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-2 시험판 — 사용자 허락(10-1 · 갈래가 여럿이면 갈래마다 · 목적 = 코딩 없이 원문 보며 확인 · 수정 · 생성) · A 세 칸 판 `LogicBuilder/` · B 엑셀 시트형(우리 스프레드시트) · 먼저 조사: 엑셀 로직 지도(sub4) · A 설계 초안(sub7) → 브레인 A 대 B 판단 → 구현 · 완료 처리(10-4): 35-2a 로 함 +- [x] 35-2a A 세 칸 판(가운데 문장 / 격자 두 보기) — 정함 `docs/raw/M01_쉬운단가/로직판_A_정함.md` · Blocks(sub7) · 서버 · Api(sub4) · 원문 · 검사(sub8) · 문장(sub2) · 격자(sub5) · 단계 안내(sub3) · 틀 · 잇기 · 끝 검증(sub1) · LB 서버 검증완료 · Blocks 검증완료 · Grid 검증완료 · Steps 검증완료 · Source · Check 검증완료 · Wizard 검증완료 · 잇기 · 끝 검증완료(sub1) — ① 원문 대조 6/6 블록 읽힘 · 걸린 줄 · 출처 보임 ② GF000219 표 칸 0.15→0.20 = 79,280→96,759 원(예상과 같음) · 파일 안 바뀜 · 다시 열면 0.15 ③ 단계 안내 11 걸음 + 저장 → 현장 다시 열림 60,984 원(/calc 같음) → 삭제 2 걸음 ④ 빈틈 해당 없음 10 · 못 따진 표 조회 1 · 기대값 시험표 맞음/다름 · 화면 초안만 ⑤ 표 고침 없을 때 lb/calc = /calc 8/8 · 문장 ↔ 격자 같은 값 · 예외(빈 이름 · 저장 안 하고 닫기 · Ctrl+Z · Ctrl+S · 권한 없음 403 · 밝음 · 어두움) · 폴더 밖 참조 LogicLab.ts 두 줄 + main.py 등록 한 줄 +- [x] 35-2b 남은 것(사용자 판단 뒤) — 문장 / 격자 고르기 · 표 칸 고침 저장 여부 · 적용 품셈 판 · 용어 · 칸 역할 「결과」 바꾸기 · 단계 안내 고르기 창 수량 물음 · GX000001(메인 11:53 · 12:02) 주인 확인 · 보고 https://claude.ai/artifact/NqKfHaJULcQo6dSvnsxy1n · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-3 점검(확인만) — 표끼리의 관계(로직) 자체를 초등학생이 만들고 · 바꾸고 · 지울 수 있나 · 품셈에 없는 관계 더하기 · 시나리오 여섯(sub6) — 결과: 있는 관계의 값만 고침(초등 중) · 관계 더하기 · 지우기 · 다시 잇기 · 새 입력값 · 새 표 · 로직끼리 바꾸기 안 됨 · 문턱만 바꾸면 계산 멈춤 + 엉뚱한 알림 · `docs/raw/M01_쉬운단가/로직판_관계제어_점검.md` +- [x] 35-4 다이어그램 제안(사용자 생각 10-1) — 상자 = 표 · 입력값 · 고정값 · 계산 · 항목 · 다른 로직 · 결과를 직접 다룸 · 선 = 관계를 만듦 · 품셈에 안 묶임(사용자 표 · 사용자 관계) · 관계 제어 = 다이어그램(사용자) · 위 가로 띠 + 아래 고른 상자 다루기 · 결과 · 관계 = 진짜 엑셀 수식(칸 주소 · 함수 · 사용자 확정) · 알약 = 입출력 칸 표시 · 새 종류 「시트 로직」(TS 엔진 한 벌 · 서버 Node) · 제안서 https://claude.ai/artifact/4iCAGPhE9maauGNTkXg5he · 허락 전 착수 금지 · 완료 처리(10-4): 35-5 · 35-7 로 함 +- [x] 35-5 시트 로직 시험판(사용자 허락 10-1 오후) — 위 가로 다이어그램 · 상자 = 시트 · 관계 = 엑셀 수식 · 입출력 = 알약 · 저장 = `M01_MasterData/SheetLogic/_data/`(git 밖 · 폴더째 지움) · 정함 `docs/raw/M01_쉬운단가/시트로직_정함.md` · Model · Eval(sub7) · 서버 · Api(sub4) · Diagram(sub8) · Panel(sub2) · Table(sub3) · Item · Result(sub5) · Import(sub6) · 틀 · 잇기 · 끝 검증(sub1) · SL 서버 검증완료 · Model 검증완료 · Diagram 검증완료 · Item · Result 검증완료 · Table 검증완료 · Import 검증완료 · 잇기 · 끝 검증완료(sub1) — 걸음: S1 ①②③ 각 3(79,280 · 73,085 손셈 같음 · 2.5m 문턱은 품셈 표 3m 부터라 2.5~3m 해당 없음) · S2 ① 3 ② 4(찰쌓기 표로) ③ 5 · S3 ① 약 19(경사 급 65,018) ② 9(내 표 붙여넣기 · 할증 10) ③ 7(잡재료 2% 17,551) · S4 선 끊기 2 · 상자 지우기 2(물음 한 번) · Ctrl+Z 되돌림 · S5 0(상자 · 선 · 값 한 장 · 고르면 이어진 선 진하게) · S6 항목 일위대가 11 · 다른 로직 상자 13(덤프트럭 16.2) · 새 로직(품셈 없이) 25 걸음 → 저장 서버 36,000 = 화면 → 다시 열림 → 지우기 2 · 서버 = 화면 4/4(36,000 · 17,550.9 · 10.12 · 다시 열기) · 가져오기 6/6 /calc 같음(0 · 60,984/79,280 · 2,064,816 · 670 · 16.2 · 57,516) · 예외(빈 이름 · 같은 상자 · 순환 · 빈 입력 물음 · 저장 안 하고 닫기 · 권한 없음 sl 5/5 403 · 밝음 · 어두움) · 세 칸 안쪽 세로 밀기 없음(6개 모든 상자) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 남은 흠(다른 창): 가져온 표 상자 + 결과 칸 목록 예시값이 글자로 들어가 30 등에서 해당 없음(sub5) · 가져온 로직 화면 번호 · 자재 검색어 · 끝 검증완료(S1~S6 · 새 로직 · 서버 = 화면 4/4 · 가져오기 6/6) · 남은 흠: 결과 칸 예시값 선택이 글자 「30」 으로 들어가 표 찾기 해당 없음(sub5 · 사용자 지시 뒤) +- [x] 35-5a 사용자 요청 — 다이어그램 띠 · 고른 상자 시트 · 결과 높이를 안쪽 세로 스크롤이 없을 때까지(sub1) +- [x] 35-6 로직 문법 먼저(사용자 방향 10-1 14시 무렵 · 화면보다 로직) — 바탕 표(인력 378 · 재료 30,767 · 기계 654 · 소요량 2,535 · 계수 498 · 환율 · 요율 · 사용자 표 — 보기 · 만들기 · 비목은 표가 정함) · 단위 넷(값 · 표 · 정보 · 요소) + 묶음(세분화 · 묶기 · 분류 · 묶음째 잇기 · 겹 묶음 · 틀 다시 쓰기) · 흐름 셋(정보 만들기 · 잇기[그대로 · 바꿔서 · 갈라서 · 모아서 · 묶음째] · 내기) · 확인 도구 · 제안서 https://claude.ai/artifact/BFWvm1Q4fhCSZ4Rt34UgYY · 다음 = 문법 확정 → 종이 연습(절 10개) — 허락 전 착수 금지 · 완료 처리(10-4): 35-7 · 35-9 흐름도로 갈음 +- [x] 35-5b 단추 공용 양식(점검 끝 · 고침은 사용자 지시 뒤) — 날 단추 23(목록 줄 8 · 칩 · 역할 · 보기 바꿈 11 · ▾ 2 …) · sm 단추를 44px 로 덮기 3 · 큰 시작 56px 3 · `docs/raw/M01_쉬운단가/시험판_단추_점검.md` · 완료 처리(10-4): 시험판 지움(35-9)으로 접음 +- [x] 35-7 단가산출 다이어그램 시험판(사용자 기준 10-1 14시 무렵) — 입력 · 함수 · 출력 상자 · 자유 배치 · 함수 = 엑셀 · 출력 하나 · 출력 = 비용 종류 · 원가 · 폴더 `M02_MasterTemplete/CostFlow/`(_data · _sample) · 정함 `docs/raw/M01_쉬운단가/원가다이어그램_정함.md` · Model · Eval(sub7) · 서버(sub4) · Diagram(sub8) · 함수 판(sub2) · 입력 판(sub3) · 출력 · 원가(sub5) · 견본(sub6) · 단추 · 페이지 · 잇기 · 끝 검증(sub1) · Model 검증완료 · Output · Summary 검증완료 · Sample 검증완료 · FuncPanel 검증완료 · Diagram 검증완료 · CF 서버 검증완료 · InputPanel 검증완료(사용자 요소 만들기는 서버 Api 가 main 에 오면 확인) · 잇기 · 끝 검증완료(sub1) — ① 빈 판에서 손으로 메쌓기 꼴(변수 4 · 소요량 표 2 · 인력 2 · 함수 증가율 → 석공 / 보통인부 병렬 · 출력 노무비 2) 9 상자 · 약 138 손놀림 → 원가 148,471 = 견본(증가율 40 · 석공 97,882.512 · 보통인부 50,587.992 손셈 같음) ② 비용 종류 바꾸면 148,471 이 노무비 → 경비 → 재료비 로 옮겨감 · 「값」 이면 원가에서 빠짐(각 1 걸음) ③ 상자 끌어 옮김(1520,190 → 1675,306) · 저장 → 다시 열면 그대로 ④ 함수 출력 하나(다른 칸 고르면 옮겨감 · 알약 하나) · 순환 막힘 · 출력에서 나가는 선 없음 · 빈 받는 자리는 저장 때 물음 ⑤ 사용자 요소(시험 보조공 200,000) 5 걸음 · 마스터 그대로 · _data 에만 ⑥ 저장 때 서버 = 화면 2/2(148,470.504) ⑦ 단위 오른쪽 위(- → 원/㎡) · 색 바꾸기(Entry 판 머리) · 「다이어그램」 이름 · 다이어그램 726px · 안쪽 스크롤은 함수 격자(가상 200줄)만 · 밝음 · 어두움 · 권한 없음(cf 길 6/6 403 · 화면 못 들어감) · 견본 셋 = /calc · 손셈(148,471 · 3,000 · 15.552) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 끝 검증완료(손으로 메쌓기 9 상자 = 견본 148,471 · 비용 종류 옮김 · 자리 저장 · 규칙 · 사용자 요소 · 서버 = 화면 · 견본 셋 손셈) · 함수 출력 기본 이름 겹침 고침(sub7 2be767d18) · 남은 것: M01 단가산출 단추 줄이 셋째 줄까지(시험판 단추 넷 · 사용자 결정) +- [x] 35-7a 브레인 실제 검증(10-1 16:45) 흠 여섯 고침 — ① 고칠 것 칸 지난 경고 · ⑥ 시험판 단추 「시험판 ▾」 로 묶기(sub1) · ② 알약 쉼표 · ③ 표 알약 글 · ⑤ 맞춤 확대 90% 아래 안 감(sub8) · ④ 입력 상자 공통 단위(sub3) · 다시 검증완료(16:55 · 고칠 것 칸 비어 있음 · 알약 쉼표 · 표 · 40줄 · 인력 원/일 · 확대 90% · 막대 한 줄 · 시험판 ▾ 넷 · 원가 148,471) + +## 35-8. 단가산출 다이어그램 2판 — 재료 선택 자리 · 선 규칙 (계획 · 허락 전) + +- 사용자 확정: 고르는 방식은 재료만(다른 그룹은 상자를 늘림) · 설계 때 입력은 오른쪽 아래 검증 칸 · 나중에 프로젝트에서 일위대가로 쓸 때 재료는 목록에서 고르거나 단일 값 · 표에 따라 출력을 가르는 것은 엑셀 수식 대신 선 규칙. +- 정함(브레인): 재료 요소 = 고정 · 선택 자리 · 조건 찾기 · 알약 이름 = 자리 이름 · 선 규칙 = 선 하나에 하나(표에서 찾기 · 조건 통과 · 바꾸기) · 규칙은 받는 칸 엑셀 수식으로 바뀌어 엔진 한 벌 · 선 위 규칙 글 늘 보임. +- [x] 35-8a 틀(Model) — 재료 요소 방식 · 범위(구분 · 상세구분 · 찾는 말) · 조건(규격 ← 알약) · 기본 품목 · 선 규칙 칸 · 규칙 → 받는 칸 수식 · 조건 선 겹침 · 안 맞음 검사 — node 시험(sub7) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8b 서버 — 선택 자리 기본 품목 · 조건 찾기 단가(맞음 0 · 여럿 알림) · 「설계 때 정할 것」 목록(변수 + 재료 자리) 내보내기 — 시험(sub4) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8c 입력 판 — 재료 방식 · 범위 · 조건 규칙 · 기본 품목 · 찾기 고침(쪽 넘기기 · 띄어쓰기 AND · 규격까지) — ORCA(sub3) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8d 검증 칸 — 재료 선택 자리를 변수처럼(범위 안 목록 고르기 · 찾기) · 조건 자리는 잡힌 품목 표시 — ORCA(sub5) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8e 선 규칙 — 선 위 규칙 글 · 선 누르면 아래 판에서 규칙 고르기(표 찾기: 조건 칸 ↔ 알약 · 꺼낼 칸 / 조건 통과: 알약 · 같음 · 다름 · 이상 · 이하 · 값 / 바꾸기: × · ÷ · +% · 단위 · 끝수) · 고른 상자 판에 들어오는 선 규칙 목록 — ORCA(sub8 · 판 sub2) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8f 견본 · 끝 검증 — 견본 둘 더(지반에 따라 굴삭기 / 브레이커 가르기 · 흄관 관경 조건 찾기) · 사용자처럼: 함수 상자 없이 표 찾기 · 가르기 · 검증 칸에서 재료 고르기 · 방법 걸음 수(sub6 견본 · sub1 잇기 · 끝 검증) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8g 다이어그램 마우스 — 판 옮기기 = 가운데 단추 끌기 · 고르기 = 왼쪽 누름 · 왼쪽 끌기로 글자가 선택되지 않음(다이어그램 영역 글자 선택 막음) · 상자 옮기기는 상자 머리 왼쪽 끌기 그대로 — ORCA(sub8) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8h 「고른 상자」 → 「상세 내용」 · 상자뿐 아니라 알약 · 선을 골라도 내용이 바뀜(알약 = 값 · 단위 · 어디서 오나 · 어디로 가나 / 선 = 선 규칙 고르기) — ORCA(sub1 잇기 · 알약 · 선 판 sub2) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8i 상세 내용 단추 · 칸 크기 — 함수 판 꾸밈이 공용 작은 단추를 44px 로 덮는 줄(`M02_CF_FuncPanel.css` `.m01-cfpanel .ui-btn …`)을 지우고 판 안 단추를 모두 공용 작은 크기(createButton size "sm")로 · 입력 · 고르기 칸도 공용 크기 — ORCA 수치(sub2 · sub3 · sub5 각자 판) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8j 상세 내용 머리 — 왼쪽 「상세 내용」 · 오른쪽에 고른 상자 제목 · 알약을 골랐으면 그 오른쪽에 알약 이름(예 「높이 증가율 찾기 › 증가율」) · 상세 내용 안 칸 차례 정리(머리 · 상자 설정 · 본문 · 경고) — ORCA(sub1) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8k 단위는 고르기 — 단위 칸을 목록 고르기로(치면 걸러져 보이고 고르기는 사용자 · 손으로 쓴 글은 안 받음) · 목록 = 단위 표준(35-8l) 단위 + 마스터 결과단위 + 금액 단위(원) · 「-」 = 없음 · 함수 · 출력 · 변수 · 사용자 요소 단위 모두 같은 고르기 — 공용 고르기 파일 `M02_CF_UnitPick.ts`(sub2) · 판마다 바꿔 끼움(sub2 · sub3 · sub5) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8l 단위 표준 표 — 산림품셈 1-2-2 「설계서의 단위 및 소수의 표준」(원문 `resources/knowledge/original/원가계산/산림_표준품셈/본문/제01장_적용기준/1-02_설계_및_수량.md` · 종목 약 70 · 규격 단위 · 소수자리 · 단위수량 단위 · 소수자리 · 비고 · 주 ①~③)을 표로 — 소수자리 「-」 = 0 · 단위 「-」 = 없음 · 원문 흠은 사용자가 고침(시험판에서 보고 고치는 표 · 저장 `CostFlow/_data` · 처음 값 `CostFlow/_standard/`) — 시험(sub6) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8m 금액 단위 표준 — 같은 절 「금액의 단위표준」(설계서 총액 1,000원 · 소계 · 금액란 · 일위대가표 계금 1원 · 일위대가표 금액란 0.1원 · 모두 미만 버림)을 같은 표 자리에 — 출력 상자(비용) 금액 기본 = 일위대가표 금액란 0.1원 미만 버림 · 원가 합계 기본 = 계금 1원 미만 버림 · 바꿀 수 있음(sub6 표 · sub5 출력 · 원가) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8n 끝수 고르기 — 함수 상자 출력 · 출력 상자에 「끝수」(소수자리 · 반올림 / 올림 / 버림) · 단위를 고르면 단위 표준에서 소수자리를 제안(주 ① 반올림 · ② 항목 값이 우선) · 고른 끝수는 출력 칸 수식(ROUND 계열)으로 — 엔진 한 벌(sub7 틀 · sub2 함수 판 · sub5 출력 판) · 완료 처리(10-4): 35-9 에서 함 +- [x] 35-8o 로직끼리 잇기 · 흐름 따라가기 — 저장한 다른 로직을 입력 상자로 불러 그 출력 알약을 받음(일위대가 → 일위대가) · 알약 · 선을 고르면 값이 어디서 와서(출처 사슬) 어디로 가는지(가는 곳) 다이어그램에서 길을 칠하고 상세 내용에 줄로 · 값이 끊긴 곳(빈 받는 자리 · 통과 안 된 조건 · 표에 없는 조건) 표시 — 시험 · ORCA(sub7 틀 · sub8 다이어그램 · sub1 상세 내용) · 완료 처리(10-4): 35-9 에서 함 +- 차례(사용자 10-1 · 「데이터의 흐름과 값의 연결에 집중」): **1단계 = 흐름 · 연결** a 틀 · b 서버 · e 선 규칙 · o 로직끼리 · 흐름 따라가기 · h 알약 · 선 고르기 · c · d 재료 자리 · f 견본 · 끝 검증(흐름 기준 — 값이 어디서 와서 어떤 규칙을 지나 어디로 가는지) / **2단계 = 값의 뜻 · 보기** k 단위 고르기 · l 단위 표준 · m 금액 표준 · n 끝수 · j 머리 · g 마우스 · i 단추 + +## 35-9. 단가산출 흐름도 시험판 (사용자 지시 10-1 17시 무렵 · 브레인이 끝까지 · 35-8 전체) + +- 사용자 확정: 브레인이 전체 제어해 새 시험판 하나 · 단가산출 다이어그램(시험)만 남기고 옛 시험판 셋 삭제 · 새 폴더(필요 없으면 바로 지움) · 데이터 흐름 · 값 연결 먼저 · 자유도 높고 이해하기 쉬운 화면 · 끝까지 구현 · 검증. +- 정함 `docs/raw/M01_쉬운단가/흐름도_정함.md` · 폴더 `M02_MasterTemplete/DataFlow/` +- [x] 35-9 창 여덟 — 옮기기 · Model · Eval(sub7) · 옛 시험판 지우기 · 들어가는 길 · 상세 내용 머리 · 잇기 · 끝 검증(sub1) · 서버(sub4) · 다이어그램(sub8) · 상세 내용 판 · 단위 고르기(sub2) · 입력 판(sub3) · 출력 · 검증 칸(sub5) · 표준 표 · 견본(sub6) · 표준 · 견본 검증완료 · Model 검증완료 · 출력 · 검증 칸 검증완료 · Diagram 검증완료 · 입력 판 검증완료(서버 자재 찾기 · UnitPick 이 main 에 오면 다시 확인) · DF 서버 검증완료 · 잇기 · 끝 검증완료(sub1) — ① 빈 판에서 함수 상자 없이 네 흐름 73 걸음: 재료 조건 찾기(관경 → 흄관 자리 · 13 개 중 하나 · 125,870) 21 · 선 규칙 표에서 찾기(높이 증가율표 → 출력) 19 · 조건 통과 두 갈래(지반 = / ≠ 토사) 27 · 다른 로직 잇기(견본 지반 · 지반 알약 이음) 6 ② 알약 · 선 고름 → 온 길 · 가는 길 칠함 + 상세 내용 줄(지반 → 다른 로직 · 두 조건 선 · 흄관 ← 관경) ③ 끊긴 곳 넷 보임(빈 받는 자리 · 통과 안 됨 · 표에 맞는 줄 없음 · 맞는 재료 없음 — 알약 · 선 「!」 · 끊긴 곳 줄 누르면 그 자리 고름) ④ 검증 칸 관경 600 → 800 = Φ800 품목 215,530 · 지반 토사 → 암 = 내 두 갈래 뒤집힘 + 다른 로직 2,000 → 10,000 · 다른 로직 설계 값 바꿈 10,000 → 20,000 ⑤ 단위 고르기 「mm」 = 3 개로 걸러짐 · 손글 안 받음 · 끝수 80,000.37 = 기본 225,870 / 1원 올림 225,871 · 표준 표 고침 저장(3 → 2) → 처음 값으로 되돌림 ⑥ 가운데 끌기 = 판 옮김(−60, −30) · 왼쪽 끌기 = 판 그대로 · 글자 선택 막힘 · 단추 18px 모두 sm · 칸 30px ⑦ 저장 → 다시 열기 = 상자 9 · 선 6 · 자리 · 규칙 글 그대로 · 서버 다시 셈 = 화면 187,910 · 견본 다섯 사본 저장 서버 = 화면(148,470.504 · 2,000 · 84,680 · 3,216.6 · 값 15.552) · 밝음 · 어두움 · 로그인 없음 df 길 6/6 401(관리자 아닌 계정 403 은 계정 없어 못 함) · 폴더 밖 참조 LogicLab.ts 2 + main.py 1 · _data 비움 · 검증 중 고친 내 흠(047f3a279 · 28469de62): 재료 조건 찾기 · 선택 자리 값을 서버에 안 물음(흄관 견본 관경 600 → 400 = 211,700 → 116,600 · 1m 84,680 → 46,640 · 1000 = 235,120 · 선택 자리 Φ600 → Φ400 = 211,700 → 116,600) · 「상자 이름」 칸(입력 · 함수 · 같은 이름 · 빈 이름 막음 · 출력은 출력 판) · 머리 이름 · 단위 칸 작은 크기(30px) · 「새로 만들기」 단추 76px(칸 폭 710 아님) · 표준 표 모달 제목 한 번 · 남은 흠(sub2): 선 규칙 표에서 찾기 조건 칸에 범위 이름(「높이」)이 없어 범위 찾기를 화면에서 못 만듦(높이 5 → 줄 없음 · 4 만 맞음) · 브레인 실제 검증완료(흠 14 고침 · 흐름도 시험 81 · 견본 다섯 서버 = 화면 · 보고 JgfqRzLPYgqXG7vB2cV1Yj) · 검증 대기 + +## 36. 단가산출 흐름도 본 프로그램 적용 (사용자 지시 10-1 21:40 · 결정 반영 22시 · 착수 승인 22:20 · 밤새 진행 · 아침 보고) + +- 사용자 확정: 흐름도 = 최종 · 로직 목록에서 로직을 열면 지금 내용 그대로 + 오른쪽 흐름도 패널(같은 로직) · 「식으로 새로 만들기」 지우고 「신규 로직」(흐름도 새로 만들기) · 「본떠 만들기」 → 「로직 복사/생성」(신규 로직 오른쪽) · 시험판 단추 · 입구 지움 · DataFlow 폴더 유지. +- 근거(마스터 로직 57 파일 · 1,472 로직 · 입력 3,518 · 중간 식 3,168 · 호표 줄 5,265): 식 말 = 찾기(표 · 조건 · 칸) 8,152 · 만약 3,532 · 또는 185 · 최대/최소 173 · 올림/반올림/버림 141 · 로직() 41 → 흐름도 표에서 찾기 · 조건 · 함수 · 다른 로직 입력으로 옮길 수 있음. +- 사용자 결정 D1(그대로): 「품셈원문도 제대로 구현된게 아니기 때문에 내가 흐름도까지 만들어서 로직을 볼려는 거잖아. 그러니 당연히 둘다 같은 내용 … 원문과 대조하면서 검증할때 잘못된게 있으면 흐름도에서 수정할거야」 → 한 로직 · 두 보기: 왼쪽 지금 내용 = 보기 · 고치기는 흐름도(공용 로직 포함 · 시스템 관리자) · 흐름도로 저장한 로직은 흐름도가 정본 · 왼쪽은 흐름도에서 만든 같은 꼴 · 아직 저장 안 한 로직은 지금 내용에서 자동으로 그린 흐름도(값 대조로 같음). +- 사용자 결정 D2(그대로): 「흐름에 대한 로직은 costflow폴더에 있을테니 일단은 그냥 두고 쓸대없는 견본과 버튼만 삭제」 → CostFlow 폴더 그대로 · 시험판 단추 · 견본 목록 지움(흐름도는 DataFlow 폴더만으로 돌아감 · CostFlow 를 부르지 않음). +- 사용자 결정(함수 상자): 「함수박스를 기준으로 하나의 결과가 나가는게 맞는것같아. 여러개가 동시에 나가면 혼란만 가중」 → 함수 상자 하나 = 결과 알약 하나(그대로) · 식은 상자 겉에 넣지 않음(상자가 커짐) · 함수 상자 · 선을 고르면 상세 내용에 사칙연산 · 조건이 보이고 고치면 바로 따라감. +- 칸 연결 = M02 방식 그대로(칸을 고른 채 알약을 눌러 하나씩 연결 · 식은 칸 주소 · `spreadsheet_links.ts` 직접 확인) · 계산 엔진 · 이름 풀기 · 이름 규칙 없음 — 보기만 칸 주소를 연결된 알약 이름으로 바꿈. +- 사용자 결정(조건): 「조건문은 현재를 유지하는게 보기 편한것같고 대신 어떤값을 지정할지는 입력된 리스트에서 선택 … 조건 값을 내가 넣으면 오기 … 복수 조건문도 넣어주고」 · 「조건 만들기도 엑셀 기능 내부에서 존재해야해」 → 선 조건은 지금 웹앱 모양 · 조건 값은 고른 알약이 가질 수 있는 값 목록에서 고름(변수 고르기 · 표 칸 값 · 재료 규격 등 · 목록이 없는 수는 숫자 칸 + 범위 검사) · 조건 여러 줄(그리고 / 또는) · 함수 상자 엑셀 시트 안 「조건 만들기」(칸 고름 → 만약 · 아니면 만약 · 아니면 줄 → 그 칸에 IF 식 · 값은 같은 목록에서 고름). +- 안전: 화면 시험 저장은 마스터 사본 폴더에서만(서버가 환경 변수로 사본 폴더를 씀 · 실제 resources/master_data 는 안 바뀜 · git status 로 확인). +- 창: sub2 36-0(판 · 조건 만들기) · sub7 36-0b(조건 틀 · 값 목록) → 36-2 · sub6 36-1 → 36-7 · sub8 36-3 · sub4 36-4 서버 · 사본 폴더 · sub5 36-4 왼쪽 보기 · sub1 36-5 · 잇기 · 36-8 · sub3 36-6 +- 브레인 정함(조사 뒤 · 아침 보고에 알림): 옛 로직 「기계 · 직종 · 유가 자리」(EQ:{기계} · LB:{직종} · MO:경유:{지역} · 입력값으로 요소를 고름 · 71 로직)는 새 모드 없이 이미 있는 「조건 찾기」(이름 · 키 같음 · 변수 알약)를 인력 · 기계 · 유가 요소에도 씀 · 대조 입력 = check_master.시험입력 · 로직 셈을 부르는 곳(Store.calc · text · master_combo.run · M02_Item_Prices.calc · /logic/auto)은 한 곳에서 흐름 갈래. +- [x] 36-0 함수 상자 안 보기 · 칸 연결 조정(36-2 보다 먼저) — ① 상세 내용 「식 보기」: 결과 칸 식을 칸 주소 → 연결된 알약 이름으로(예: 1m 재료비 = 흄관 단가 ÷ 2.5) + 값 들어간 식(= 211,700 ÷ 2.5 = 84,680) · IF 는 만약 / 아니면 줄 · 지금 타는 갈래 표시 · 중간 칸 식도 차례대로 · 칸 식을 고치면 바로 다시 셈 → 다이어그램 · 원가 따라감 ② 「칸 연결 표」(칸 · 연결 알약 · 입력 / 결과 · 이어진 선 · 표에서 바로 바꿈 · 풀기) + 칸 색(입력 파랑 · 결과 초록 · 상자 색과 같음) · 결과 칸 하나 ③ 선을 고르면 그 선 규칙도 같은 「식 보기」 꼴(예: 굴착량 → 지반 = 토사 일 때만 → 굴삭기로 파기) ④ 엑셀 시트 안 「조건 만들기」 — 칸을 고르고 열면 만약 [알약] [비교] [값 고르기] → [알약 · 값] 줄 · 아니면 만약 더하기 · 아니면 → 그 칸에 IF 식(엑셀로 쓴 IF 도 같은 줄로 다시 열림 · 못 바꾸는 식은 식 그대로) · 검증완료(sub2 · 식 보기 · 칸 연결 표 · 조건 만들기 · 선 조건 여러 줄 · 시험 8) · 검증 대기 +- [x] 36-0b 선 조건 손질 — 조건 값 = 고른 알약의 값 목록에서 고름(Model 값 목록 함수 · 변수 고르기 · 표 칸 값 · 재료 규격 · 목록 없는 수는 숫자 칸) · 조건 여러 줄(그리고 / 또는) · 규칙 → 받는 칸 엑셀 식 · 서버 Compute 같은 뜻 · 선 위 이름표 · 겹침 · 안 맞음 검사 그대로 · 검증완료(sub7 · 조건 여러 줄 그리고/또는 · 값 목록 · 서버 = 화면 · 시험 30) · 검증 대기 +- [x] 36-1 조사 — 옛 식 문법 전수(서버 파서 · 요소 부르기 꼴 · 따옴표 글) · 변환 못 하는 꼴 목록 · /calc 를 부르는 곳 · 검증완료 +- [x] 36-2 변환 — 옛 로직(입력 · 중간 · 호표 · 덧줄 · 결과 · 끝수) → 흐름도(입력 상자 · 표 알약 + 표에서 찾기 · 함수 · 출력 상자) + 자동 배치 · 서버 파서로 · 옛 식에 나온 이름마다 알약을 칸에 연결하고 식은 칸 주소로(만약 → IF · 최대 → MAX · 찾기 → 표에서 찾기) · 함수 상자 하나 = 결과 하나 · 전수 대조(변환 흐름도 값 = 옛 계산 값 · 맞는 비율 · 안 맞는 까닭) · 검증완료(sub7 · M02_DF_Convert · 전수 1,472 시험입력 96.7% · 기본 입력 97.4% · 안 맞는 49 = 재료 검색어 자리 18 · 재료 빈 검색어 13 · 표 범위 규칙 경계 15 · 단가 빈 품목 3 · tmp/convert_report_36.json) · 검증 대기 · 마지막 대조: 시험입력 · 기본 입력 모두 1,472/1,472(100%) · 빈 단가 = 옛 셈 뜻(그 값 쓰는 식 빈 값 · 비목 합 0 · 끊긴 곳 「단가 없는 품목을 씀」) +- [x] 36-3 오른쪽 패널 — 로직 상세 오른쪽에 흐름도(다이어그램 · 상세 내용 · 원가 · 검증) · 너비 끌어 조절 · 접기 · 「크게 보기」(전체 화면) · 검증완료 +- [x] 36-4 저장 · 정본 — 로직 줄에 「흐름」 칸(화면 [저장] 때만 씀) · 흐름이 있으면 /calc 가 흐름도로 셈(서버 다시 셈) · 왼쪽 기본정보 · 단가산출 상세 · 텍스트 수식 · 시험 계산은 흐름도에서 만든 같은 꼴(보기) · 공용 로직도 흐름도로 고침(시스템 관리자) · 캐시 → [저장] 한 번 · [고친 것 버리기] 함께 · 왼쪽 보기 검증완료(sub5) · 서버 검증완료(sub4) +- [x] 36-5 단추 — 「식으로 새로 만들기」 지움 → 「신규 로직」(빈 흐름도 + 기본정보 · 저장 = 자체 GX 새 키) · 「본떠 만들기」 → 「로직 복사/생성」(흐름도도 복사 · 신규 로직 오른쪽) · 「시험판 ▾」 지움 · 잇기 검증완료(sub1 · accf8ecc4 · abbf61971 · 0d45014e3) — 「식으로 새로 만들기」 · 시험판 ▾ · 시험판 단추 둘 지움 · 단추 차례 ← 로직 목록 · 신규 로직 · 로직 복사/생성 · 로직 지우기 · 고친 것 버리기 · 저장 · 두 칸(LogicLab_Flow) · 오른쪽 패널(흐름 받기 · 고침 → drafts → [저장] 한 번 · 버리기 함께 · 흐름 로직이면 왼쪽 흐름 보기) · 신규 로직 기본정보 칸(LogicLab_Basic) → 저장 = 서버 added 키로 엶 +- [x] 36-6 다른 로직 입력 — 대상 = 마스터 로직 전체(찾기) · 흐름도 로직이면 흐름도 셈 · 아니면 옛 셈 · 목록 · 찾기 · 쪽 · 알약 이음 검증완료(서버 흐름 받기 · 값 셈 길이 main 에 오면 GF 로직 값 확인) +- [x] 36-7 정리 — 「시험판 ▾」 · 시험판 입구 · 흐름도 시작 화면 견본 목록 지움 · 시험이 쓰는 견본은 resources/tester 로 · 시험 저장 길 숨김 · DataFlow · CostFlow 폴더 그대로 · 검증완료 +- [x] 36-8 끝 검증 — 흐름 기준 · 옛 로직 열기 → 오른쪽 흐름도 값 = 왼쪽 계 · 신규 로직 → 저장 → 다시 열기 · 복사 · 권한 · 브레인 실제 검증 · 보고 · 끝 검증완료(sub1 · 사본 폴더 tmp/master_copy_36 + AISLO_MASTER_DIR · 네 포트) — ① 옛 로직 셋: GF000001(찾기) 오른쪽 34,413 = /calc 34,413.6 = 왼쪽 34,414(보임 끝수만 다름) · 변환 알림 한 줄 / GF000007(만약) 0 ≠ 597,285 · GF000288(로직()) 0 ≠ 1,234,760.96 — 아래 흠 ② GF000001 함수 식 ×1.5 → 오른쪽 · 왼쪽 51,620 따라감 → [저장](공용 GF · 사본) → 다시 열기 상자 6 · 변환 알림 없음 · /calc flow 51,620.4 = 화면 ③ 신규 로직 65 걸음(변수 셋 · 함수 · 조건 만들기 · 출력 둘 · 조건 선) → 저장 GX000004 → 다시 열기 상자 4 · 선 4 · 화면 100,000 = /calc 100,000 = 왼쪽 계(높이 2 = 0 · 지반 암 = 50,000) ④ 로직 복사/생성 2 걸음 → GX000005 상자 4 · 선 4 · 100,000 ⑤ 선 조건 두 줄 「지반 = 토사 그리고 높이 ≥ 3 일 때만」 · 값 고르기(토사|암) · 높이 2 → 0 · 또는 → 50,000 · 조건 만들기 =IF(A2>=3,A3,0) ⑥ 식 보기 「결과 1 = 금액 × 높이 ÷ 4」 · IF 만약 / 아니면 줄 · 칸 연결 표 ⑦ 크게 보기 1484×1076 · 거기서 고친 것 패널로 · 접기 40px · 펴기 · 너비 320 → 522 ⑧ 고친 것 버리기 5 → 4 · 캐시 비움 · 로그인 없음 flow · save · calc · logics 401 · 시험판 · 옛 단추 글 0 · resources/master_data 바뀜 0 · 흠(다른 창): 변환 숫자 입력 예시값이 비어 있음(시험입력 · 기본 입력을 안 넣음 — GF000288 나무높이 6 · 집재거리 100 · GF000007 정리량 50 …) · GF000007 「표 QF000033 → 할증」 표에 맞는 줄 없음(서버 477,828 = 할증 25% 빠짐 · 화면 0) · GF000288 다른 로직 GC000270 기계 자리 「EQ:{기계} … 자리」 못 풂(#N/A → 0) · 칸 #N/A 일 때 화면 셈 0 · 서버 셈 그대로(둘이 다름)(sub7) · 식 보기 값 줄이 선 규칙을 지난 값을 안 씀(「(#N/A × 0) = #VALUE!」 · 결과 알약은 34,413.6)(sub2) · 조건 통과 둘째 줄 값 목록 「number:0」 글 · 조건 만들기 만약 목록에 놓인 알약 없음(sub2) · 옛 로직 왼쪽 계 반올림 · 흐름 원가 계금 1원 버림(1원 차이) +- 36 마무리(10-2 02시 · 브레인 실제 검증완료): 전수 변환 대조 시험입력 1,469/1,472(99.8%) · 기본 1,466(99.6%) · 남은 3 = 마스터 빈 단가 · 시험 141 + 변환 시험 초록 · 사본 서버 저장 → 사본만 바뀜 · 다시 열기 흐름 정본 · GF000001 34,414 = 34,414 · GF000003 8.946 = 8.946 · 식 보기 값 줄 · 검증 대기 + +## 37. 일위대가 조합 다이어그램 (사용자 지시 10-2 09시 · 계획 · 착수) + +- 사용자 확정: 「복잡한 경우가 있으니 일위대가 조합도 다이어그램으로 표현 … 중요하게 생각하는 정보가 다르니 잘 구분」 · 조합은 계산하지 않고 로직을 뭉쳐 비용 구분별로 표기 · 입력은 로직별로 묶어 빈 값은 사용자가 넣음 · 출력은 로직마다 · 미리 보기 값은 구조물 조합으로 안 넘김 · 「흐름도는 별도 로직이 아님」(단가산출 로직을 쓰는 방법). +- 모양: 왼쪽 = 로직별 입력 묶음(받아야 할 값 · 빈 값 표시) → 가운데 = 로직 카드(키 · 이름 · 결과 단위 · 식 · 함수 안 보임) → 오른쪽 = 비용 구분 칸 셋(노무비 · 재료비 · 경비 · 로직마다 선으로 모임) + 값 로직은 「값」 칸 · 이름이 같은 입력(지역 · 자재지역 등)은 점선으로 이어 보이기만(검사 없음) · 로직 카드를 누르면 그 로직의 단가산출 로직 화면(흐름도)으로 · 계산 · 고치기 없음(묶음 고치기는 지금 표) · 흐름도와 모양 · 색을 달리함. +- 자리: 일위대가 조합 상세(M02_MasterTemplete_Labor_Edit)의 미리 보기와 같은 값 — 미리 보기 입력 칸에 넣은 값이 다이어그램에도 · 다이어그램 빈 입력 알약을 누르면 미리 보기 그 칸으로 · 미리 보기 결과(로직별 노무비 · 재료비 · 경비 · 계)가 카드 · 칸에. +- [x] 37-1 다이어그램 판 — M02_MasterTemplete_Labor_Diagram.ts(+css) 새 파일 · 고정 세 칸 배치(자동) · 판 옮기기 · 확대 · 한눈에 · 밝음 · 어두움 · 좁은 폭 +- [x] 37-2 잇기 — Labor_Edit 에 「다이어그램」 칸(접기) · 미리 보기와 값 한 벌 · 빈 입력 누름 → 미리 보기 칸 · 로직 카드 누름 → M01 단가산출 로직 그 로직 열기(setPendingLogicKey 꼴) +- [x] 37-3 검증 — 조합 셋(로직 2 · 9 · 14개)으로 입력 묶음 수 = 로직 입력 수 · 출력 = 미리 보기 줄 · 비용 칸 합 = 미리 보기 합 · 빈 값 표시 · 같은 이름 점선 · 로직 열기 · 브레인 실제 검증 · 보고 +- 창: sub2 37-1 · 37-2 · 37-3 + +## 38. 마스터 요소 화면 손질 (사용자 지시 10-2 09:40 · 착수) + +- 사용자 확정: ① 인력 · 재료 · 기계 · 소요량 · 계수 · 환율 · 요율 상세의 제목 · 단추 · 찾기 라벨 양식 = 단가산출 로직과 같게 ② 재료 컨테이너의 유가 · 전력을 별도 컨테이너로 ③ 단가산출 로직 「막힘만」 체크 — 의미 없으면 지움 ④ 단가산출 로직 컨테이너 「전체」 를 누르면 상세 목록 보기가 안 됨(다른 컨테이너는 됨). +- 브레인 정함: 「막힘만」 = 로직 검사에 걸린 로직만 거르기 · 지금 1,469 중 0 · 목록 줄에 「⛔ 막힘」 표시 · 까닭 말풍선은 이미 있음 → 체크만 지움(표시는 둠). +- [x] 38-1 양식 맞춤 — 일곱 상세 화면 머리(제목 · 단추 줄 · 찾기 칸 라벨)를 단가산출 로직 화면 꼴로 · 공용 단추 · 칸 크기(sub5) · 검증완료 +- [x] 38-2 유가 · 전력 컨테이너 — 왼쪽 패널에 재료 다음 「유가 · 전력」 컨테이너(재료_유가전력.json) · 재료 컨테이너에서는 뺌 · 고르기 · 찾기 · 상세 그대로(sub6) · 검증완료 +- [x] 38-3 「막힘만」 체크 지움 · 38-4 「전체」 목록 보기 고침(sub1) · 검증완료 — 원인: 로직 컨테이너 거름이 목록만 거르고 가운데 화면 전환(onLogic)을 안 부름 → Side 거름 run 에서 로직이면 onLogic · 「전체」 는 찾는 글도 비움 · 화면(5174): 로직 1,469 줄 → 인력 전체 → 로직 「전체」 = 로직 화면 1,469 줄(찾는 글 「굴착」 비움) → 산림품셈 330 → 03장 작업장 관리 10 → 로직 열기 → 「전체」 = 상세 닫힘 · 1,469 줄 · 막힘만 체크 0 · 화면 오류 0 +- 「고친 것 버리기」(사용자 물음 · 확인만): 저장 안 한 고친 것(화면 캐시)을 버리고 파일의 로직을 다시 엶 — 사본 저장은 없음 · 그대로 둠(사용자 결정 기다림)