From 00d28be647370ca298f1ff291d3fc3ae41f0e05f Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 4 Nov 2026 17:53:19 +0900 Subject: [PATCH] =?UTF-8?q?knowledge(=EC=9A=94=EA=B5=AC):=20=EB=B6=84?= =?UTF-8?q?=EC=84=9D=20627=20=E2=80=94=20=EB=8B=A8=EA=B0=80=EC=82=B0?= =?UTF-8?q?=EC=B6=9C=20=ED=83=AD=20=EC=98=A4=EB=A5=B8=EC=AA=BD=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=C2=B7=20=EC=9D=BC=EC=9C=84=EB=8C=80=EA=B0=80=20?= =?UTF-8?q?=EB=B0=96=20=EB=8B=A8=EA=B0=80=EC=82=B0=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../_분석_627_단가산출탭_오른쪽목록.md | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 docs/raw/요구_1104/_분석_627_단가산출탭_오른쪽목록.md diff --git a/docs/raw/요구_1104/_분석_627_단가산출탭_오른쪽목록.md b/docs/raw/요구_1104/_분석_627_단가산출탭_오른쪽목록.md new file mode 100644 index 000000000..a4c90be2d --- /dev/null +++ b/docs/raw/요구_1104/_분석_627_단가산출탭_오른쪽목록.md @@ -0,0 +1,246 @@ +# 분석 627 — 엑셀 보기 단가산출표 · 상세 탭 오른쪽 목록 · 일위대가 밖 단가산출 잇기 + +읽기 전용 조사 · 코드 · storage · git · DB 안 고침 · 실측 스크립트 = `tmp/brain_627/measure.py` · `test_627_now.py`(임시 storage) · 결과 = `measure_all.json` · `measure_북부청임도.json`. + +## 요약 (열 줄) + +1. 전제 바로잡음 — 북부청 임도 엑셀에 「단가산출총괄표」 시트 있음(시트 12 중 6번째) → 탭 셋 다 나옴 · 단가산출표 목록 행 95 = 블록 95 짝 100 % · 여덟 파일 모두 목록 시트 있음 · 짝 100 %. +2. 오른쪽 판 = 탭과 상관없이 늘 호표 목록(`Hopyo_Sheet.ts:188-199` · `:314-350`) · 단가산출 탭에서 칸을 눌러도 목록 그대로(`:378`) · 목록 줄을 누르면 일위대가 탭으로 되돌아감(`:284`). +3. 일위대가 밖 블록 46 = 서버 판정에서 빠짐(판정 49 · `Sangeun.py:284`) · 확인 몸에 넣으면 404 「없는 블록 · 부르는 줄 없음 「단산8」」(`:274-276` · 실측) · 칠 = 블록 통째 흐림 「판정 없음」(`Marks.py:145-146` · `SheetMap.ts:255-257`) · 마법사 단가산출 칸 · 줄 표에 안 보임. +4. 줄 잇기(`Units`)는 대상을 모름 → 밖 블록에도 그대로 돎 · 판정 함수(`SkUnit.judge`) 46/46 오류 없음 → 서버 고침 = 「부르는 첫 줄」 의존 걷기뿐(Sangeun · Marks 몇 줄). +5. 북부청 임도 밖 46 실측 — 줄 161 = 노무 45/45 · 기계 48/69 · 자재 4/33 · 율 12/12 · 값 2/2 · 다 이어진 블록 18 · 고를 줄 남은 블록 27(고를 줄 50) · 빈 블록 1 · 46 중 45 는 내역서 비고 「단산N참조」가 부름(사용자 정의 ② 그대로). +6. 여덟 파일 블록 459 = 일위대가 안 206 · 밖 253(55 %) · 밖 줄 738 중 이어짐 600 · 다 이어진 블록 167/244 · 빈 블록 9(모두 밖). +7. 저장 자리 = 사용자 말과 같음 — 마법사 기본 층 개인(자기) · SC → 개인 층 `precombo/`(일위대가 컨테이너 개인) · SK → 개인 층 `sangeun/`(단가산출 컨테이너 개인) · 나무 뿌리(폴더 자리 없음). +8. 설계 — 단가산출표 · 상세 탭이면 오른쪽 = 단가산출 목록(마법사 단가산출 칸 `sangeunStep` 을 좁은 꼴로 한 벌 더 · 같은 캐시 · 같은 [확인] → [옮기기]) · 목록 ↔ 시트 뛰기 · 밖 블록도 같은 줄 잇기 · 단가산출표 시트 없는 파일용 대체 목록 시트는 안 만듦(목록은 서버 블록으로 지음). +9. 곁 흠 넷 — 울진소광 단산492 · 918 → 하위 단산83(밖) 막다른 길 · 빈 블록 9 = 「옮길 수 있음」으로 보일 것(빈 SK 위험) · 마법사 [옮기기] 뒤 열린 엑셀 보기 칠 옛 판 · 밖 블록 엑셀 셈 어긋남 100/253(STmate 셋 파일 비 0.88 몰림 — 읽기 검증이 불리는 블록에만 됨). +10. 일감 = A 서버(M) → B 화면(M~L · 새 `Hopyo_SheetSk.ts`) · 700 줄 근처 파일(Api · Check · Router · Build) 안 건드림 · 물을 것 하나 = [끝내기]에 밖 블록을 넣을지(권함 = 막지 않음 · 물음창에 수만). + +--- + +## 1. 지금 동작 + +### 1-1 엑셀 보기 탭 셋 — 북부청 임도 + +| 역할 | 원본 시트 | 시트 id | 근거 | +| --- | --- | --- | --- | +| 일위대가표 | 일위대가 | s1 | `M02_Hopyo_Grid.py:43-47` ROLES · `:337` 찾은 역할만 `보기` | +| 단가산출표 | 단가산출총괄표 | s2 | 같음 · 목록 행 ↔ 블록 `_lists` `:309-322`(B 열 No) | +| 단가산출 상세 | 단가산출 | s3 | 같음 | + +- 실제 엑셀 시트 = 원가계산서 · 내역서총괄표 · 내역서 · 일위대가총괄표 · 일위대가 · **단가산출총괄표** · 단가산출 · 기계경비총괄표 · 기계경비 · 기계경비적용기준 · 자재단가 · 노임단가(xlrd 직접 열어 확인). +- 격자 = 위 셋만(`Grid.py:35-42` SHEETS) · 탭 글 통일 = `Hopyo_SheetNav.ts:47` · `:87-94` · 원본 이름 = 막대 글. +- 시트가 없으면 그 탭이 빠짐(빈 탭 아님) — `Grid.py:331-338` 찾은 이름만 `보기`. +- 여덟 파일 모두 `보기` 셋 · 목록 단산 = 블록 수(95 · 67 · 61 · 65 · 69 · 47 · 15 · 40). + +### 1-2 오른쪽 판 + +| 자리 | 지금 | 근거 | +| --- | --- | --- | +| 판 구성 | 찾기 · [모두 고정으로 들여오기] · [저장] · 호표 목록 · 결과 표 — 탭 상관없음 | `Hopyo_Sheet.ts:188-199` | +| 목록 재료 | `briefs`(호표)만 | `:314-350` paintList | +| 시트 칸 누름 | 일위대가 시트가 아니면 목록 반응 없음(`return`) | `:375-381`(`:378`) | +| 목록 줄 누름 | 그 호표 영역 = 일위대가 시트로 고름 → 단가산출 탭에서 누르면 일위대가 탭으로 넘어감 | `:279-285`(`:284`) | +| 탭 바꿈 알림 | 탭 바꿈도 `onSelect` 부름 → 탭 따라 판 바꾸기 재료 이미 있음 | `A00_Common/spreadsheet/spreadsheet.ts:292-301` | +| 판 폭 | 22rem 고정 | `M02_MasterTemplete_Hopyo.css:247-253` | + +### 1-3 일위대가 밖 블록(46)은 어떻게 다뤄지나 + +| 자리 | 지금 | 근거 | +| --- | --- | --- | +| 「부름」 셈 | 블록마다 부르는 **첫 일위대가 줄**만(`first`) · 블록이 부르는 하위 단산 · 내역서는 안 봄 | `M02_Hopyo_Sangeun.py:79-89` | +| 줄 잇기(Units) | 대상(블록 · 일위대가 줄) 모름 — 밖 블록도 그대로 돎 | `M02_Hopyo_Units.py:1-3` | +| 블록 판정(SkUnit.judge) | 블록 · 단위만 받음 — 부르는 줄 필요 없음 · 밖 46/46 오류 없음(실측) | `M02_Hopyo_SkUnit.py:172-183` | +| 판정 답(POST …/sangeun 빈 확인) | `판정` = `first` 블록만(49) | `Sangeun.py:284-290` | +| 확인 몸에 밖 블록 | **404** 「없는 블록 · 부르는 줄 없음 「단산8」」(맞춤 셈 전 409 보다 먼저) | `Sangeun.py:274-276` · 실측 | +| Maker 안 `first[no]` 의존 | judge(단위) · basis(맞춤셈 열쇠) · _doc(이름 · 단위) · make(이름) | `Sangeun.py:177-185` · `:156-163` · `:112-130` · `:209` | +| 칠 재료(GET …/hopyo-marks) | 95 블록 다 실음 · 밖 = `판정 None · 줄 [] · 어긋남 None` | `M02_Hopyo_Marks.py:128-146`(`:145-146` `if line`) · 실측 | +| 화면 칠 | 밖 블록 = 범위 통째 흐림 「판정 없음」 · 단가산출표 목록 행도 흐림 | `logic/…_SheetMap.ts:119-129`(`:126`) · `:255-258` | +| 마법사 단가산출 칸 | `got.판정` = 49 만 · 밖 블록 안 보임 · 펼침 줄 표(SkLines)도 판정 블록만 | `Hopyo_WizardSk.ts:210-238`(`:214`) | +| 일위대가 만들 때 단산 줄 | `no not in first` → 안 이음(밖 블록과 무관 · 부르는 줄이 있으면 늘 first) | `M02_Hopyo_SkLink.py:73` | +| [끝내기] | 안 이은 줄(호표)만 막음 · SK 수는 글만 · 밖 블록 영향 없음 | `Hopyo_Wizard.ts:225-244`(`:230`) | + +### 1-4 실측(임시 storage · API 직접) + +- POST …/sangeun 빈 확인 → `블록 49 · 판정 49 · 단산8 없음`. +- 확인 `[{번: 8}]` → `404 {'detail': '없는 블록 · 부르는 줄 없음 「단산8」'}`. +- GET hopyo-marks → 95 블록 · 단산8 = `{판정: None, SK: None, 갈래: None, 못옮김: [], 어긋남: None, 줄: []}`. +- GET hopyo-grid → `보기 {일위대가표 s1, 단가산출표 s2, 단가산출상세 s3}` · `원본 {…단가산출표: 단가산출총괄표…}` · 목록 단산 95. + +--- + +## 2. 저장 자리 + +| 만드는 것 | 길 | 층 폴더 | 근거 | +| --- | --- | --- | --- | +| 올린 엑셀(HP) | 마법사 결과 층(기본 개인 · 주인 없음 = 자기) | `storage/{회사}/{사용자}/templates/실무자료/` | `Hopyo_Wizard.ts:91` · `:93` · `:108` · `:125` · `M02_Template_Layers.py:83-87` | +| 일위대가 SC | 엑셀 보기 [저장] · [모두 고정] → `/hopyo-build(-all)` on `target`(= 마법사 층) | 같은 개인 층 `precombo/SC-######.json` | `Hopyo_Wizard.ts:194-199` · `Hopyo_Sheet.ts:509-510` · `M02_Labor_Router.py:395-409` · `M02_Hopyo_Kids.py:105-144`(`store.root()` · `refs.create`) | +| 단가산출 SK(마법사 칸) | `POST …/hopyo/{키}/sangeun` = **파일 층**에 씀 | 같은 개인 층 `sangeun/SK-######.json` | `M02_Labor_Router.py:497-509` · `Sangeun.py:218-245`(`:243`) · `M02_Labor_Ref.py:350-359` | +| SK(일위대가 만들 때 단산 줄) | SC 만들기 안에서 | `target` 층 `sangeun/` | `M02_Hopyo_SkLink.py:70-82` | +| 나무 자리 | 폴더 자리 안 적음 = 뿌리 | `{종류}_폴더.json` 안 바뀜 | `M02_Precombo_Folders.py:3-5` | + +- 사용자 말 「일위대가 해당 컨테이너의 개인」과 **같음** — SC = 일위대가(일위대가조합) 컨테이너 개인 · SK = 단가산출 컨테이너 개인(「해당」 = 각자 컨테이너로 읽음) · umsangdon 이 결과 층을 회사 · 마스터로 바꾸지 않는 한 개인. +- 다른 점 한 줄: SK 는 「파일 층」에 씀(target 아님) — 마법사는 둘이 같아 차이 없음 · [로직 추가] 「엑셀로 보기」 길(`Hopyo_Pick.ts:57-63` · target = 서고 층)에서 오른쪽 단가산출 목록으로 옮기면 SC 와 다른 층에 들어갈 수 있음 → 그 길은 보기만(3-4). + +--- + +## 3. 설계안 + +### 3-1 탭 → 오른쪽 판 + +| 탭 | 오른쪽 판 | 아래 막대 | +| --- | --- | --- | +| 일위대가표 | 호표 목록(지금 그대로) | [모두 고정으로 들여오기] · [저장] | +| 단가산출표 · 단가산출 상세 | 단가산출 목록(블록 전부 = 일위대가 안 + 밖) | [확인한 것 옮기기 (n)] · [다시 판정] | + +- 바꿈 = `onSelect` 의 시트가 역할을 바꿀 때만(`Hopyo_Sheet.ts:375-381` 한 곳 · 탭 바꿈도 여기로 옴). +- 마법사 「단가산출」 체크와 상관없이 단가산출 탭이면 보임(요구 627 「접근했을 때는 당연히」) · 체크는 마법사 칸만. +- 단가산출 탭일 때 판 넓힘 — `.m02-hopyo-sheet.is-sk` 둘째 열 `minmax(22rem, 42%)`(CSS 몇 줄 · 줄 표 가로 굴림). + +### 3-2 단가산출 목록 한 줄 + +| 칸 | 내용 | 재료 | +| --- | --- | --- | +| 번 · 이름 | `단산N 이름`(말줄임 · title 전체 · 단위) | 서버 판정 `번 · 이름 · 단위` | +| 부름 | 배지 「제12호표」 · 「제12호표 외 2」 · 「일위대가 밖」 | 서버 새 칸 `부름 [호표 번]`(3-5) | +| 판정 | 「옮길 수 있음」 · 「고를 줄 n」 · 「줄 없음」 — 캐시 고름 겹침 | `SkPick.verdictOf` | +| 만든 SK | SK 키 배지 | 서버 `만든` | +| [확인] | 칩(고를 줄 0 · 줄 1 이상일 때만) | `SkPick.canConfirm` | +| [줄 n] | 펼침 = 줄 표 `Hopyo_SkLines.skLineTable` 그대로(D-5) | 서버 `줄` | + +- 머리: 요약 「블록 95 · 일위대가 안 49 · 밖 46 · 옮길 수 있음 n · 만듦 m · 확인 k」 + 찾기 + 거르기(부품 segment: 모두 · 일위대가 안 · 일위대가 밖 · 남은 것). +- 캐시 = 마법사와 **같은 열쇠** `m02-hopyo-sk:{층}:{주인}:{키}`(`Hopyo_WizardSk.ts:44-45`) → 엑셀 보기에서 고른 것이 마법사 칸에도 그대로. +- 옮김 = 같은 몸 `{확인: [{번, 고름}]}`(`SkPick.sureBody` · `SkApi.judgeSangeun`) · 확인 안 한 블록 안 만듦(요구 623 자동 없음 그대로). + +### 3-3 목록 ↔ 시트 + +| 누름 | 감 | 재료 | +| --- | --- | --- | +| 목록 줄(상세 탭) | 상세 시트 그 블록 범위 + [◂ 뒤로] 쌓임 | `ix.block` · `nav.jumpTo`(`Hopyo_SheetNav.ts:151-155`) | +| 목록 줄(단가산출표 탭) | 목록 시트 그 행 | `ix.listRow` | +| 상세 시트 칸 | 그 행 블록을 목록에서 강조 · 보이게 | `numAt(ix.block, 행)`(`SheetMap.ts:166-169`) | +| 단가산출표 시트 칸 | 그 행 블록 강조 | `ix.listAt` | +| 줄 표 [보기] | 상세 시트 그 줄 행 | 지금 `openHopyoSheet({단산행})` → 열린 창 그 자리로(`Hopyo_Sheet.ts:286-290`) — 고침 없음 | + +- SheetNav 가 `ix` 를 안에 쥠 → `blockAt(시트, 행)` · `spotOf(번, 역할)` 둘만 내보냄. + +### 3-4 짓는 길(갈래) + +| 갈래 | 내용 | 판단 | +| --- | --- | --- | +| (가) | `sangeunStep` 에 옵션 `{좁게, onRow}` 더해 오른쪽에 한 벌 더 띄움 — 표 · 확인 · 옮기기 · `show(번)` 다시 씀 · 좁게 = 칸 다섯(번 · 이름 / 부름 / 판정 / 확인 / 펼침) · 금액 · 근거는 title | **권함** — 새 목록 부품 없음 · 판정 · 옮기기 한 벌 | +| (나) | 새 목록 부품(오른쪽 전용) | 같은 일 두 벌 · 버림 | + +- 두 벌 맞춤: 새 알림 `m02-hopyo-sk`(고름 · 확인 바뀜 → 다른 쪽 `draw()` · 옮김 → 다른 쪽 `judge()`) + 옮김 뒤 `HOPYO_BUILT` 냄(칠 다시 · `SheetNav.ts:240-245`). +- [로직 추가] 길(target ≠ 파일 층)은 목록 보기만 · [옮기기] 숨김(`/sangeun` 이 파일 층에 씀). + +### 3-5 서버 고침(밖 블록도 같은 줄 잇기) + +| 파일 | 고침 | +| --- | --- | +| `M02_Hopyo_Sangeun.py` | `calls` 가 블록마다 부르는 호표 번 모두(`부름`) · `build` 판정 = 모든 블록(`blocks`) · 줄마다 `부름` · 확인 몸 = 모든 블록(없는 번만 404) · Maker `first.get(no) or {}` — 단위 = 블록 단위 · 이름 = 블록 이름 · 근거 = 없음(맞춤셈은 부르는 줄 열쇠) | +| `M02_Hopyo_SkUnit.py` | `verdict` — 줄 0 = 「줄 없음」(고를 줄 1 · 확인 막음 · 빈 SK 막음) | +| `M02_Hopyo_Marks.py` | `줄` · `어긋남` = 모든 블록(`:145-146` `if line` 걷음) → 밖 블록도 줄 칠 · 엑셀 셈 어긋남 띠 | +| 화면 `SkPick.ts` | `canConfirm` 줄 0 = 거짓(서버와 한 규칙) | +| 화면 `SheetMap.ts` | `blockTone` 판정 없음 글 → 「일위대가 밖」 | + +- 울진소광 단산492 · 918 → 하위 단산83(밖) 막다른 길이 함께 풀림 — 지금은 83 을 확인 몸에 넣으면 404 · 492 를 확인하면 못만듦 「하위 … 그 블록 먼저 확인」(`Sangeun.py:204-212`). +- 판정 셈 늘어남(북부청 임도 단독 셈): judge +1.4 초 · marks 줄 +1.0 초(영월 +0.7 · +0.4). + +### 3-6 단가산출표 시트가 없는 파일 + +- 오른쪽 목록은 서버 블록 판정으로 지음(목록 시트 안 씀) → 시트가 없어도 목록 그대로 · 탭만 둘(상세 탭에서 같은 목록). +- 여덟 파일 모두 목록 시트 있음 · 짝 100 % · 옛 격자(779-1 앞)는 하루 지나 지워짐(743-1) → 블록 머리로 대체 목록 **시트**를 만드는 일은 안 함. + +### 3-7 [끝내기] 조건(갈래 · 물을 것) + +| 갈래 | 뜻 | 좋음 | 나쁨 | +| --- | --- | --- | --- | +| (가) 막지 않음 · 끝내기 물음창에 「안 옮긴 단가산출 n(일위대가 밖 m)」 | **권함** | 한시 도구 · 내역서용 블록은 이번 일위대가 일감에 안 쓸 수 있음 · 엑셀은 다시 올리면 됨 | 잊고 끝낼 수 있음 | +| (나) 일위대가 안 블록만 막음 | 지금 안 이은 줄 막음과 같은 결 | 일위대가 완결 보장 | 일위대가 안 블록은 SC 만들 때 이미 안 이은 줄로 막힘 — 덧 효과 작음 | +| (다) 밖까지 모두 막음 — 옮기거나 [뺌] | 「당연히 이어야함」 가장 곧이 | 빠짐 없음 | 북부청 임도 밖 고를 줄 50 · 여덟 파일 122 다 고르기 전엔 못 끝냄 | + +### 3-8 함께 고칠 곁 흠 + +- 마법사 [옮기기] 뒤 `HOPYO_BUILT` 안 냄(`Hopyo_WizardSk.ts:105-130`) → 열린 엑셀 보기 칠 옛 판(다시 열기 = 앞으로 꺼냄만 · 다시 안 읽음 `Hopyo_Sheet.ts:286-290`). +- 빈 블록 9(모두 밖) — 지금 규칙이면 줄 0 = 「옮길 수 있음」(`SkUnit.py:87-90` · `SkPick.ts:147-152`) → 3-5 「줄 없음」. + +--- + +## 4. 실측 + +### 4-1 북부청 임도 일위대가 밖 46 블록 줄 잇기 + +| 묶음 | 이어짐 | 고를 것 | 못 이음 | 합 | +| --- | --- | --- | --- | --- | +| 노무 L | 45 | 0 | 0 | 45 | +| 기계 X | 48 | 21 | 0 | 69 | +| 자재 M | 4 | 26 | 3 | 33 | +| 율 R | 12 | 0 | 0 | 12 | +| 값 E | 2 | 0 | 0 | 2 | +| 합 | 111 | 47 | 3 | 161 | + +- 견줌(일위대가 안 49): 줄 231 = 노무 110/110 · 기계 41/43 · 자재 20/39 · 율 38/39 · 다 이어진 블록 35/49. +- 블록 셋 갈래: + - 다 이어짐 18 — 5 · 8 · 9 · 15 · 16 · 17 · 19 · 28 · 35 · 40 · 44 · 51 · 52 · 53 · 54 · 84 · 85 · 94 + - 고를 줄 남음 27(고를 줄 50) — 4(1) · 7(4) · 11(1) · 14(1) · 20(1) · 27(2) · 34(1) · 36(1) · 45(2) · 48(1) · 50(1) · 55(1) · 58(2) · 59(2) · 67(3) · 68(1) · 69(3) · 75(2) · 76(2) · 77(4) · 78(4) · 79(2) · 80(2) · 83(3) · 86(1) · 87(1) · 89(1) + - 빈 블록 1 — 단산1 「유용토운반(무대)」(줄 · 금액 없음) +- 부르는 곳: 46 중 45 = 「내역서」 시트 비고 「단산N참조」(내역서가 부르는 블록 47 · 그중 2 는 일위대가 안 블록) · 단산68 「물운반(살수차 5500ℓ)」 = 어디서도 안 부름 · 이름 · 단위 없는 밖 블록 0. +- 못 이은 줄 까닭(찾는 로직 참고): + +| 수 | 묶음 · 상태 | 글 | 예 | +| --- | --- | --- | --- | +| 25 | 자재 고를 것 | 후보만 | 7 퇴비(천연부엽토)(20㎏/포) · 11 콘테이너하우스(창고용…) · 36 구역화물(10.5톤,20km) · 45 전기뇌관(MS) | +| 21 | 기계 고를 것 | 가까운 규격 — 고름 | 4 「[건설표준품셈(8-2-8)] 덤프트럭 적용」(글 줄을 기계 줄로 읽음) · 14 · 20 덤프트럭자동덮개시설(15Ton) · 27 진동로울러(자주식)(12Ton) | +| 3 | 자재 못 이음 | 없음 | 7 참싸리(박피) · 안고초 · 비수리 | +| 1 | 자재 고를 것 | 글자 규격 — 확인 | 45 폭약(메가마이트Ⅰ,28mm) | + +- 밖 블록 엑셀 셈 어긋남 5 — 4 · 44 · 48 · 77 · 78(덮음 실패 2 · 재현 못 한 줄 3). + +### 4-2 여덟 파일 일위대가 밖 블록 + +| 파일 | 꼴 | 블록 | 안 | 밖 | 밖 줄 | 이어짐 | 고를 것 | 못 이음 | 셈 밖 | 다 이어진 블록 | 빈 블록 | 고를 줄 | 엑셀 셈 어긋남 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 북부청임도 | 엑셀꼴 | 95 | 49 | 46 | 161 | 111 | 47 | 3 | 0 | 18 | 1 | 50 | 5 | +| 북부청사방 | 엑셀꼴 | 67 | 45 | 22 | 88 | 80 | 5 | 3 | 0 | 18 | 0 | 8 | 1 | +| 거창 | 엑셀꼴 | 61 | 13 | 48 | 120 | 105 | 14 | 1 | 0 | 34 | 4 | 15 | 27 | +| 봉화 | STmate | 65 | 31 | 34 | 87 | 73 | 13 | 0 | 1 | 21 | 3 | 13 | 0 | +| 동부청영월 | STmate | 69 | 35 | 34 | 102 | 87 | 15 | 0 | 0 | 25 | 0 | 15 | 0 | +| 울진대흥 | STmate | 47 | 14 | 33 | 76 | 51 | 15 | 0 | 10 | 20 | 1 | 15 | 32 | +| 영덕계류 | STmate | 15 | 2 | 13 | 29 | 27 | 0 | 0 | 2 | 13 | 0 | 0 | 13 | +| 울진소광 | STmate | 40 | 17 | 23 | 75 | 66 | 6 | 0 | 3 | 18 | 0 | 6 | 22 | +| 합 | | 459 | 206 | 253 | 738 | 600 | 115 | 7 | 16 | 167 | 9 | 122 | 100 | + +- 묶음 합(밖): 노무 180/180 · 기계 294/360(셈 밖 16) · 자재 74/145 · 율 33/34 · 값 19/19. +- 다 이어진 블록 비율: 안 156/206(76 %) · 밖 167/244(68 % · 빈 블록 뺌). +- 블록이 부르는 하위 단산 = 셋뿐 — 울진대흥 2200 → 75(안) · **울진소광 492 · 918 → 83(밖)**. +- 빈 블록 9 = 모두 밖 — 0 원 · 금액 없음 5(북부청임도 1 「유용토운반(무대)」 · 봉화 1 · 44 · 111 · 울진대흥 2272) · 금액 있는데 줄 못 읽음 4(거창 20 · 24 · 25 · 32). +- 엑셀 셈 어긋남 100 = 덮음 실패 96 + 재현 못 한 줄 4 · 일위대가 안 쪽은 6(덮음 2 · 줄 4) — **STmate 셋 파일(울진대흥 · 영덕계류 · 울진소광) 밖 블록 69 중 덮음 실패 67 · 그중 62 가 「엑셀 블록 금액 = 줄 합 × 0.88」**(예 울진대흥 단산2264 절토(토사) 굴삭기 0.7 품 0.02004 × 96,829 = 1,940.3 · 엑셀 1,714 · 노 · 재 · 경 셋 다 0.88 배) → 블록 계수 하나를 못 읽는 꼴 · 778-3 D-1 정규화 검증이 불리는 블록에만 됨 → 사용자 「하나씩 맞춤」 1순위 후보(북부청 임도 EST 는 5 뿐). + +### 4-3 셈 시간(단독 셈 · 첫 부름 M01 읽기 포함) + +| 파일 | judge 안 | judge 밖 | marks 줄 안 | marks 줄 밖 | +| --- | --- | --- | --- | --- | +| 북부청임도 | 3.3 초(49) | 1.4 초(46) | 1.2 초 | 1.0 초 | +| 동부청영월 | 0.7 초(35) | 0.7 초(34) | 0.5 초 | 0.4 초 | + +--- + +## 5. 일감 나눔 · 물을 것 + +| 걸음 | 일 | 파일 | 크기 | 앞 조건 | +| --- | --- | --- | --- | --- | +| A 서버 | 모든 블록 판정 · 확인 · `부름` · 빈 블록 「줄 없음」 · Marks 줄 · 어긋남 모든 블록 | `M02_Hopyo_Sangeun.py`(294 → ~310) · `M02_Hopyo_SkUnit.py`(190) · `M02_Hopyo_Marks.py`(149) | M | 없음 | +| A 시험 | 판정 49 → 95 · `부름` · 단산8 확인 = 만듦 · 빈 블록 확인 막음 · 울진소광 83 → 492 만듦 · 밖 블록 줄 칠 | `test_778_5_hopyo_units.py`(`:123` 49) · `test_779_5_block_line_tone.py`(`:65-80` 안 블록만 기대) · `test_778_5_hopyo_excel_misses.py`(`:30-31` 안 블록만 — 그대로 두거나 밖 포함) | S | A | +| B 화면 | 탭 따라 오른쪽 판 · 단가산출 목록(`sangeunStep` 좁게 옵션) · 목록 ↔ 시트 · 두 벌 알림 · 옮김 뒤 `HOPYO_BUILT` · 판 넓힘 · 줄 0 확인 막음 · 「일위대가 밖」 글 · 낱말 | 새 `M02_MasterTemplete_Hopyo_SheetSk.ts`(판 바꾸기 · 강조) · `Hopyo_Sheet.ts`(붙임 ~15 줄 · 609 → ~625) · `Hopyo_SheetNav.ts`(`blockAt` · `spotOf` 내보냄 · 276) · `Hopyo_WizardSk.ts`(옵션 · 부름 칸 · 알림 · 257 → ~300) · `logic/…_SkPick.ts`(`canConfirm`) · `logic/…_SheetMap.ts`(글) · `ui_template_locale_m2.ts` · `M02_MasterTemplete_Hopyo.css` | M~L | A(`부름` · 95 블록) | +| B 시험 | 판 바꿈 · 목록 지음 · 줄 0 · 캐시 공유 | `helper_778_5_sk_pick.cjs` · `test_778_5_sk_pick_screen.py` · `test_779_4_sheet_map.py`(`:69` 안 불림 글) · 새 `test_627_sheet_sk.py` | S | B | +| C 읽기(찾는 로직 쪽) | 밖 블록 덮음 실패 96(STmate 0.88 · 거창 27) · 글 줄을 기계 줄로 읽음(북부청 단산4) · 거창 줄 못 읽은 빈 블록 4 | `M02_Hopyo_UnitLine.py` · `M02_Hopyo_Stmate.py` · `M02_Hopyo_ReadEst.py` — 조사 먼저 | M | 사용자 맞춤 일감과 함께 | + +- 차례: A → B(한 창 이어서도 됨) · C 는 지금 창(찾는 로직 개선)과 겹침 — 반영 창에 안 넘김. +- 700 줄 근처: `Hopyo_Api.ts` 632 · `Hopyo_Check.ts` 662 · `M02_Labor_Router.py` 625 · `M02_Hopyo_Build.py` 543 — 이번 일에 안 건드림(새 길 · 새 칸 없음 · `/sangeun` 몸 그대로) · `Hopyo_Sheet.ts` 609 = 붙임만 · 나머지는 새 파일. +- 검증(B 끝): ORCA 개인 층 북부청 임도 — 단가산출표 탭 → 오른쪽 95 블록 · 거르기 「일위대가 밖」 46 · 단산8 [확인] → [옮기기] → SK · 칠 초록 · 마법사 칸 같은 고름 · 일위대가표 탭 → 호표 목록 · 지움. + +물을 것(꼭 필요한 것만): + +1. [끝내기] — 일위대가 밖 블록을 안 옮겨도 끝낼 수 있게 할지 · 갈래 3-7 · 권함 (가) 막지 않음 + 물음창에 「안 옮긴 단가산출 n(일위대가 밖 m)」. + +정함(브레인 · 사용자가 바꿀 수 있음): 단가산출 탭 오른쪽은 마법사 체크와 상관없이 보임 · 빈 블록 = 「줄 없음」 확인 막음 · 대체 목록 시트 안 만듦 · [로직 추가] 길은 보기만 · 밖 블록 근거 꼬리표 없음.