diff --git a/docs/raw/요구_1104/_분석_635_야면석단가차_배수칸.md b/docs/raw/요구_1104/_분석_635_야면석단가차_배수칸.md new file mode 100644 index 000000000..b12b6d2ab --- /dev/null +++ b/docs/raw/요구_1104/_분석_635_야면석단가차_배수칸.md @@ -0,0 +1,260 @@ +# 분석 635 — 야면석 소운반 우리 단가 ≠ 엑셀 · 품 비교 0.5476 → 25 · 오른쪽 판 [수정] 배수 칸 (읽기 전용 조사 · 요구 635 · 636 · 637) + +## 요약 열 줄 + +1. 품 비교 「보통인부 0.5476 → 25」의 25 = 근거 로직 GC001140 의 줄 수량(무게 ÷ 회당운반량 ÷ 일운반회수)이 맞으나, 옵션 찾기가 고른 입력이 엉터리 — 운반무게 25(엑셀 글 「25㎏」) · 회당운반량 1 · 운반회수 1(자동값) → 25 ÷ 1 ÷ 1 = 25. 맞춤에 실패한 조합(수준 9)을 화면이 「우리 품」으로 그대로 보임. +2. 뿌리 넷: ① 자동값 — 나누는 칸 = 1(`master_auto.py:97`)인데 GC001140 은 「0 = 기본(25㎏ · 450분 · 식)」 칸이라 1㎏ · 1분 · 1회로 셈 ② 하나씩 조합이 수 칸 둘을 함께 못 바꿔 엑셀 조합(575 · 42)에 못 닿음(`Option.py:208`) ③ 못 맞춰도 거리 상한 1.0 동률 중 첫 조합을 우리 품 · 입력으로 냄(`Option.py:396 · 469 · 488 · 493`) ④ 상태 「다른 점」이면 그 입력이 대상 입력값(출처 「블록」)으로 넘어감(`Line.py:160 · 76`). +3. 화면별: 단가산출 걸음 · 줄 표 · 오른쪽 단가산출 목록 = 94,227 = 엑셀(줄 길 · 차 0). 일위대가 확인 창 제2호표 줄 4 = 품 비교 0.5476 → 25 · 대상 GC001140(배 빈칸) + GF000214 야면석 채집(조합 · 배 1) · 노무비 엑셀 282,681 / 우리 309,720 → 배 칸에 1 넣으면 13,214,820(46.7배). M01 시험 계산 GC001140 = 자동값 0원 · 운반무게 575 만 넣으면 98,939,100원(575 인). +4. 같은 흠 전수(여덟 파일 275 셈 단위): 1위 품 비교 10배 넘음 **14 줄(13 블록 + 직접 줄 1)** — 입력 잘못 집음 2(GC001140 · GC000403 「D50」 → 관경 500) · 몫 10% 안 반영 5 · 단위 다름 1 · 로직 · 엑셀 읽기 다름 6. 못 맞춘 조합 품을 우리 품으로 보임 135 단위(그중 e배 넘음 31) · 후보 다섯 「다른 점」 글 10배 18 · 확인 창 미리 셈 금액 10배 9 / 196 · 절 하나에 덧 로직 이중 계상 2. +5. 같은 꼴 로직: 나누는 칸 자동값 1 = 57 로직 83 칸 · 그중 「0 이면 기본」 칸 = GC001140 · GC001141 · GF000156 · GF000157(4 로직 9 칸). 782-3 의 8-2 시공능력 로직(q · f · E · Cm 나눗수)도 같은 위험 — 지금 GF000135 · 136 덤프 미리 셈이 이 꼴(482원 대 엑셀 10,890원). +6. 원인 아닌 것: 줄 수량을 입력 · 중간값에서 바로 집는 자리는 없음 — 우리 품은 모두 엔진 결과 「줄」 수량 ÷ 결과단위(`Ours.py:140`). 단위(㎡ ↔ ㎥) · 일위대가 줄 수량 3 · 노임 해 · 반올림은 차 원인 아님. +7. n = 42 출처: 원문 1-2-7 식 · 표(T 넷 · V 다섯 · t 둘 · 경사 해석 여덟)로 확정 못 함. 가장 가까운 셋 = α × L × 3 = 144m · 불량 · 석재 · 450분 → 42.29 / 직고 6m → 수평 36m · 물논 500 · 석재 → 42.29 / α × (6 + 직고 × 6) · 양호 · 토사 · 480분 → 41.79 — 모두 원문 근거 없음. 엑셀이 값으로 넣은 것 · 원문 식이면 P 0.2494(42,917원/㎡). +8. 고칠 길(권함 · 한 일감 · 여섯 자리 각 1~6 줄): B 가드 칸 자동값 0 + C 수 칸 짝 조합 + A 못 맞춤 = 우리 품 · 입력 안 냄(뿌리 한 곳 `Option.find` 출구) + E 「자재 단위」 배 1 + G 절 하나 = 덧 없음 + H 수준 2 안 입력을 대상으로. 모의(코드 안 고침 · 바꿔 끼움): 단산10 우리 품 0.547619 · 금액 282,681 = 엑셀 · 배 1 · 대상 하나 · 1위 10배 14 → 1 · 후보 10배 18 → 2 · 금액 10배 9 → 7 · 1위 · 상태 바뀐 단위 0 · 골든 그대로(1위 120 + 43). +9. 배수 칸 = 일위대가 확인 창 줄 표 대상 이름 옆 「× 배」 입력(`CheckRows.ts:113`) · 뜻 = 우리 수량 = 엑셀 줄 수량 × 배(단위 환산 · 몫) · 서버가 만들기 수량 손(`Build.py:251`) · 메모 · 별칭 장부 짝에 씀. 여덟 파일 대상 290 중 배 1 = 252 · 빈칸(사용자 입력) 30 · 몫 0.1 = 7 · 추정 0.2 = 1. 사용자가 본 빈칸 = GC001140 결과단위 「원/자재 단위」를 단위 환산이 못 읽어 생김. +10. 배수 칸 권함: 없애지 않음(30 줄은 단위 환산이 꼭 필요 — m ↔ 본 · 조 ↔ ㎡ · ㎡ ↔ 개 · M2 ↔ 시간) · 배 1 · 단위 같음이면 칸 숨기고 「단위 같음 ×1」 글만 · 칸 이름 「단위 환산 — 엑셀 1 ㎡ = 우리 ? 본」 꼴 · 「자재 단위」 · 공/㎥ ↔ 공㎥ 표기 같음은 자동 1. + +--- + +## 1. 품 비교 0.5476 → 25 — 화면 재현 (요구 636 · 637 · 할 일 1) + +측정: `tmp/brain_635/run1.py`(판정) · `run4.py`(확인 창 줄 · 미리 셈) · `run5.py`(금액) · `sweep.py`(전수). 서버 증거: 8000 서버가 쓴 맞춤 캐시 `tmp/m02_hopyo/맞춤_acfe2bf4af0fcee43_a16ffedb276a0b85_2.json`(판 a16ffedb276a0b85 = 지금 마스터) 「단산:10|야면석소운반」 = 아래와 같음(1위 GC001140 · 다른 점 · 우리품 25 · 입력 25 · 1 · 1). ORCA 는 안 씀(같은 함수 · 같은 캐시로 판정). + +### 1-1 화면마다 우리 · 엑셀 수 + +| 화면 · 자리 | 엑셀 | 우리 | 차 | 셈 길 | +|---|---|---|---|---| +| 마법사 단가산출 걸음 · 블록 10 표 「우리 금액」 | 94,227 | 94,227 | 0 | 줄 길 = 보통인부 LB000002 × 엑셀 품 0.547619(`SkUnit.py:175` judge) | +| 단가산출 걸음 · 펼친 줄 표 | 172,068 × 0.547619 = 94,227.7 | 같음 | 0 | 같음(`SkLines.ts:137`) | +| 근거 칩 | — | 「근거(참고) — 인력운반(지게) — 건설 공통 1-2-7」 · 툴팁 「GC001140 · 다른 점」 | 수 없음 | 「다른 점」 자체가 25 에서 옴(`Sangeun.py:172` · `Verdict.py:89`) | +| 엑셀 보기 오른쪽 단가산출 목록 | 94,227 | 94,227 | 0 | 마법사 칸 좁은 꼴 한 벌(`SheetSk.ts` → `sangeunStep`) | +| **일위대가 확인 창 · 제2호표 줄 4 「품 비교」** | 보통인부 0.5476 | **25** | ×45.7 | 1위 옵션 찾기 우리품(`Line.py:116` ← `Option.py:493`) | +| 확인 창 · 같은 줄 상태 · 글 | — | 「다른 점 — GC001140 · 보통인부 엑셀 0.5476 · 우리 25」 | — | `Verdict.py:70` | +| 확인 창 · 같은 줄 대상 | — | GC001140(배 빈칸 · 입력 운반무게 25 · 회당운반량 1 · 운반회수 1 · 운반거리 0.35 · 경사각도 35) + **GF000214 야면석 채집(인력)**(배 1 · 뒷길이 25 · ㎥당) | — | 조합 둘 다 체크(`Combine.py:282`) | +| 확인 창 · 같은 줄 노무비(미리 셈) | 282,681 | 309,720 | +9.6% | GF000214 만 셈 — GC001140 은 배 빈칸이라 빠짐(`Draft.ts:37`) | +| 같은 줄에서 배 칸에 1 넣으면 | 282,681 | **13,214,820** | ×46.7 | GC001140 25 인 × 172,068 × 3 = 12,905,100 + 309,720 | +| 일위대가 호표 합(제2호표 1 M) | 494,165 | 494,165(배 빈칸 = 체크 못 함 → 엑셀 금액) · 배 1 · 체크면 13,426,304 | ×27 | `Check.ts:405` sumOf | +| 고르기 창 후보 글 | — | GC001140 「다른 점 · 우리 25」 · GC001142 벽돌운반 「우리 0.00044」(1,000 매당 단위) | — | `Verdict.py:181` candidates | +| M01 시험 계산 GC001140 — 열 때 자동값 | 94,227 | 0원(운반무게 0 · 암석/해당 없음 무게 0) | — | `Calc.ts:173` fetchAuto → `master_auto.values` | +| M01 시험 계산 — 운반무게 575 만 넣음 | 94,227 | **98,939,100원**(575 인) | ×1,050 | 회당운반량 1㎏ · 운반회수 1 자동값 | +| M01 — 575 · 운반회수 42 | 94,227 | 2,355,692원(13.69 인) | ×25 | 회당운반량 1㎏ 그대로 | +| M01 — 575 · 회당운반량 0 · 42(= 시험입력) | 94,227 | 94,227 | 0 | 782-1 검증 값 | +| M01 — 원문 식(n 빈칸 · L 6 · 35° · 석재 · 불량) | 94,227 | 42,917 | −54% | N 92.21 → P 0.2494 | + +→ 큰 차가 나는 자리 = **확인 창 품 비교 · 상태 글 · 대상 입력값(배를 넣으면 금액)** 과 **M01 시험 계산 자동값**. 단가산출 쪽은 맞음. + +### 1-2 25 가 나오는 길 + +| 차례 | 자리 | 일 | +|---|---|---| +| 1 | `master_auto.py:97` values | 나누는 자리 이름 = 1 · 그 밖 0. GC001140 `운반량 = 만약(회당운반량 > 0, 회당운반량, 25)` 이 호표 나눗수라 회당운반량 · 실작업시간 · 운반회수 · 운반거리 = **1**(`:51` 중간 식 이름까지 나눗수로 퍼뜨림) | +| 2 | `Option.py:118` space | 수 칸 후보 = 자동값 + 단위 맞는 엑셀 수: 운반무게 {0, 25, 575} · 회당운반량 {1, 25, 575} · 운반회수 {1, 42} · 실작업시간 {1} · 정렬은 자동값 먼저(`:163`) | +| 3 | `Option.py:237` plan → `:196` combos | 곱 1,444,608 > CAP 400 → 「하나씩」: 기준점(자동값) + 한 칸씩 · 짝은 고르기 칸끼리만(`:208` `k != "수"`) → 운반무게 575 + 운반회수 42 를 함께 바꾸는 조합이 없음 | +| 4 | `Option.py:445` find | 딱 맞음 없음(수준 9) → (수준, 약함, 거리) 가장 작은 것. 거리 `gap` 은 |ln 비| 를 1.0 에서 자름(`:396`) → e배 넘게 어긋난 조합은 모두 1.0 동률 → 처음 돈 것(운반무게 25 · 나머지 자동값) 이 남음(`:469`) | +| 5 | `Option.py:488 · 493` | 그 조합을 `입력` · `우리품`(보통인부 25 ÷ 1 ÷ 1 = 25)으로 냄 — 「못 맞춤」 표지 없음 | +| 6 | `Verdict.py:84 · 89` _state | 보통인부 하나뿐 줄(`Fit.single`)은 수준 9 고정 · 직종 같음 + 조항 같음 → 「다른 점」 | +| 7 | `Verdict.py:63` _diffs | 꼬리표 「보통인부 엑셀 0.5476 · 우리 25」 | +| 8 | `Line.py:160 · 76` | 「다른 점」 → 옵션 입력을 대상 입력값으로 덮음(출처 「블록」) · `Match.spec_inputs` `:139` 가 규격 「L=35cm」 을 운반거리 0.35m · 경사각도 35 로 읽음(돌 뒷길이를 거리 · 경사로) | +| 9 | `Line.py:112` _qty → `Check.ts:167` compareText | 「보통인부 0.5476 → 25 ≠」 | +| 10 | `Combine.py:271 · 282` | 1순위 덮음 셈 = 우리지문 변형(자동값 셈 · GC001140 보통인부 1,000~11,400/단위)과 견줌 → 못 덮음 → 같은 절에 GF000214 야면석 채집(맞음 0.913) 덧 · 둘 다 체크 = 같은 몫 이중 계상 | + +- 25 는 입력값이 품 자리에 「들어간」 것이 아니라, 엉터리 입력으로 돈 로직의 줄 수량. 우리 품을 읽는 엔진 자리(`Ours.py:119` _engine)는 줄 수량 ÷ 결과단위만 씀 — 이 규칙은 이미 지켜짐. + +### 1-3 우리 품 · 수량 · 매개값을 고르는 자리 전부 · 잘못 집을 조건 + +| 자리 | file:line | 하는 일 | 엉뚱한 품이 되는 조건 | +|---|---|---|---| +| 자동값 | `resources/master_data/scripts/master_auto.py:80 · 97` | 나눗수 1 · 그 밖 0 | 「0 = 기본」 가드 칸이 1(GC001140 · 1141 · GF000156 · 157) · 기본 없는 나눗수(q · f · E · Cm)가 1 | +| 우리지문 변형 | `Ours.py:267` combos · `:297` fingerprint | 고르기만 바꾸고 수 칸은 자동값 | 위 자동값 → 변형 품이 1,000배대 → Fit 순위 · Combine 덮음이 엉뚱 | +| 엔진 한 번 | `Ours.py:119 · 129 · 140` | 자동값 + 입력 → 줄 수량 ÷ 결과단위 | 입력이 엉뚱하면 그대로 | +| 옵션 공간 | `Option.py:118 · 149 · 155 · 163` | 수 칸 후보 = 자동값 + 단위 붙은 엑셀 수 + 같은 이름 계수 | 단위만 맞으면 아무 엑셀 수(「25㎏」 → 운반무게) · 기호 이름(n · L · q)은 입력 이름과 달라 못 씀 | +| 조합 | `Option.py:196 · 208 · 237 · 263` | CAP 넘으면 하나씩 · 짝은 고르기끼리 | 수 칸 둘 이상을 함께 맞춰야 하는 로직(운반 · 시공능력 Q · 소요량) | +| 맞춤 출구 | `Option.py:445 · 396 · 469 · 488 · 493` | 우리품 · 입력 | 수준 9 에서도 거리 동률 첫 조합을 냄 | +| 판정 | `Verdict.py:84 · 89` _state · `:63` _diffs · `:150` judge · `:181` candidates | 상태 · 꼬리표 · 후보 글 | 수준 9 + 직종 같음 + 조항 같음 = 「다른 점」 · 「우리 x」 글 | +| 대상 입력값 | `Line.py:71 · 76 · 160` | 맞음 · 다른 점이면 옵션 입력을 대상으로 | 수준 9 입력이 「블록」 출처로 만들기 몸에 들어감 · 후보 상태면 반대로 맞은 입력(수준 2)도 안 넘김 → 품 비교와 금액 입력이 갈림 | +| 규격 읽기 | `Match.py:139` spec_inputs | 규격 수 → 입력 | 단위만 보고 넣음(L=35cm → 운반거리 0.35 · 「D50」 → 관경 500) | +| 품 비교 | `Line.py:112` _qty · `Check.ts:167` | 엑셀 품 ↔ 1위 우리품 | 1위 수준 9 · 대상 몫(0.1)을 안 곱함 | +| 별칭 · 통째 | `Line.py:362` _aliased · `:380` whole | 장부 짝 · 호표 통째 | 같은 옵션 출구를 씀 | +| 미리 셈 금액 | `Check.ts:334` price → `logic/Draft.ts:29` → `M02_Labor_Doc.py:492 · 550` | 대상 입력값 + 자동값 × 엑셀 수량 × 배 | 대상 입력값이 비면 자동값(1 · 0)으로 셈 | +| 사용자 다시 고름 | `Line.py:424` guess | 고른 입력 + 규격 + 자동값 | 같은 자동값 | +| 조합 덮음 | `Combine.py:109 · 124 · 271 · 282` | 변형 벡터로 덮음 · 덧 | 변형이 자동값 셈 · 절 하나에도 덧 | +| 지문 순위 | `Fit.py:191 · 228` | 변형 벡터 점수 | 같음 | +| SK 바탕 더한줄 | `SkPatch.py:142` | 더한줄 입력값으로 엔진 | 바탕 로직이 있을 때만(단산10 없음) | +| 단가산출 금액 | `SkUnit.py:175` | 엑셀 품 × M01 단가 | 안전(로직 입력 안 씀) | +| 근거 칩 | `Sangeun.py:172` · `WizardSk.ts:232` | 1위 키 · 상태 | 상태 「다른 점」이 수준 9 에서 옴 | +| M01 시험 계산 | `M01_MasterData_UI_Logic_Calc.ts:173` · `Store.py:559` auto | 열 때 자동값 채움 | 가드 칸 1 | + +### 1-4 같은 흠 전수 — 여덟 파일 · 275 셈 단위(`sweep.py` · 결과 `sweep_<파일>.json` · 집계 `agg.py` · `agg2.py`) + +| 지표 | 수 | +|---|---| +| 셈 단위(블록 + 줄 · 기계 줄 · 직접 줄 호표 통째 55) | 275 · 상태 맞음 123 · 다른 점 43 · 후보 109 | +| 1위 수준 9(못 맞춤)인데 품 비교에 우리 품이 보임 | 135(그중 어느 직종 · 장비든 e배 넘게 어긋남 31 · 겹치는 직종 없음 10) | +| 그중 상태 「다른 점」 + 옵션 입력이 대상 입력값으로 감 | 33 | +| **1위 품 비교 우리/엑셀 10배 넘음** | **14 줄 · 13 블록 + 직접 줄 1** | +| 후보 다섯 「다른 점」 글에 10배 넘는 우리 품 | 18 | +| 확인 창 미리 셈 금액(기본 대상 · 배) 10배 넘음 | 9 / 196 | +| 덧 로직 조합(체크 둘 이상) | 15 — 그중 절 하나에 덧 = 이중 계상 2(북부청임도 10 야면석소운반 · 거창 39 강관비계) | + +1위 품 비교 10배 넘는 14 줄: + +| 파일 | 블록 | 줄 | 로직 | 엑셀 품 | 우리 품 | 집은 칸 | 갈래 | +|---|---|---|---|---|---|---|---| +| 북부청임도 | 10 | 야면석소운반 L=35cm ㎡ | GC001140 인력운반(지게) | 보통인부 0.5476 | 25 | 운반무게 25 · 회당운반량 1 · 운반회수 1 | 입력 잘못 집음(자동값 1 · 엑셀 25㎏) | +| 봉화 | 직접 줄 | PE관 부설 및 접합 D50 m | GC000403 PC관 부설 | 배관공 0.023 · 보통인부 0.005 | 0.94 · 0.37 | 관경 500 · 크레인 | 입력 잘못 집음(D50 → 관경 500) · 단위 m ↔ 본 | +| 북부청임도 | 3 | 고임돌 채집 및 운반(90%) | GF000211 모래 · 자갈 · 약돌 채집 | 0.03 | 0.5 | 종류 친모래 | 몫 10% 안 반영(대상 배 0.1 인데 품 비교는 100%) · 다른 로직 | +| 북부청임도 | 61 | 조약돌채집및운반(90%) | GF000211 | 0.03 | 0.5 | 같음 | 같음 | +| 북부청사방 | 5 | 고임돌채집및운반(9:1) | GF000211 | 0.03 | 0.5 | 같음 | 같음 | +| 동부청영월 | 1361 | 고임돌채집운반 | GF000211 | 0.03 | 0.5 | 같음 | 같음 | +| 동부청영월 | 600 | 기초잡석채집및운반부설 | GF000168 기초잡석 | 0.03 | 0.6 | 브레이커 사용 | 몫 10%(「인력(10%)」) | +| 북부청사방 | 35 | 원형돌망태조립설치 조 | GF000328 원형 돌망태 | 0.00765 | 0.4 | 인력 · 지름 45 · 필터매트 | 단위 다름(조 ↔ ㎡ · 배 빈칸) | +| 북부청임도 | 12 | 구조물되메우기(인력100%) | GF000113 되메우기 | 0.1 | 0.01 | 자동값 | 로직 다름(후보 · 인력 되메우기 로직 아님) | +| 북부청사방 | 7 | 구조물되메우기(인력) | GF000113 | 0.1 | 0.01 | 자동값 | 같음 | +| 동부청영월 | 7 | 구조물되메우기(인력) | GF000113 | 0.1 | 0.01 | 자동값 | 같음 | +| 동부청영월 | 2 | 구조물터파기(인력) 경질토사 | GF000101 구조물터파기 육상토사 | 0.26 | 0.023 | 자동값 | 로직 다름(기계 터파기) | +| 동부청영월 | 1942 | 구조물터파기 인력(경질토사) | GF000101 | 0.26 | 0.023 | 자동값 | 같음 | +| 북부청임도 | 33 | 기초잡석채집,운반,다짐 | GC000110 기초지정 | 롤러 10.4167 | 0.0889 | 지정 잡석지정 | 엑셀 장비 시간 읽기(롤러 10.4 시간) | + +- 「입력 · 자동값을 잘못 집어 품이 엉뚱」 = 2 줄(위 둘). 나머지 12 줄은 같은 화면 꼴(못 맞춘 1위 품을 「우리 품」으로 보임)이 다른 까닭(몫 · 단위 · 로직 · 엑셀 읽기)과 겹친 것. +- 미리 셈 금액 10배 9 줄: 자동값 칸 3(GF000135 × 2 · GF000136 — qt · f · E · Cm = 1 → 482원 · 160원 대 엑셀 10,890 · 6,442 · 품 비교는 수준 2 로 맞는데 후보 상태라 입력을 안 넘김) · 사이클시간 0 → 0원 1(GF000283) · 엑셀 줄 = 믹서만인데 우리 로직 = 인력 + 믹서 3(GF000156) · 다른 로직 후보 2(GF000124 · GC000105). +- 후보 다섯 10배 18: GC000208 철근 가공(철근공 0.23 대 2.67~4.2) 7 · GC000210 3 · GC001140 · GC001142(벽돌 1,000 매당 0.00044) · GF000113 · GF000328 · GC000110 · GC000705 · GC000198 각 1. + +### 1-5 같은 꼴 로직(`pattern.py` · `pattern.json`) + +- 나누는 칸이라 자동값 1 = 57 로직 83 칸(측량 점수 · 시공높이 · 두께 · 높이감률 · 덤프 qt · f · E · Cm · 운반거리 등). +- 그중 설명이 「0 이면 기본」(가드 `만약(X > 0, X, 기본)`) = 4 로직 9 칸: GC001140(회당운반량 · 실작업시간 · 운반회수) · GC001141(회당운반량 · 실작업시간) · GF000156 · GF000157(모래 · 자갈단위중량). 이 칸은 1 이 「1㎏ · 1분 · 1회 · 1㎏/㎥」 라는 실제 값으로 셈됨 = 가장 위험. +- 기본 없는 나눗수(GF000134~136 덤프 qt · f · E · Cm · GF000137 · GF000284 운반거리 · GF000277 · 측량 · 시공능력 꼴): 엑셀 수를 못 받으면 1 로 셈. 782-3 이 만들 8-2 시공능력 25 절 로직(Q = 3,600 × q × K × f × E ÷ Cm)도 이 꼴 — 지킴 시험으로 막을 것. +- 시험입력 ↔ 자동값 품 10배 넘게 다른 돈 로직: GF000326 · 328 · 329(시험입력이 있는 로직 중). + +--- + +## 2. 원인 — 셈 길 · 엑셀 n = 42 출처 (할 일 2) + +### 2-1 우리 단가와 엑셀 단가가 갈리는 셈 길 + +| 길 | 입력 · 기본값 | 결과 | 차 원인 | +|---|---|---|---| +| 단가산출 SK(줄 길) | 엑셀 품 0.547619 × 보통인부 172,068 | 94,227 | 없음 | +| 확인 창 근거 로직(GC001140) | 옵션 입력 25 · 1 · 1(자동값 + 엑셀 25㎏) · 규격 0.35m · 35° | 25 인/㎡ | 1-2 차례 1~8 | +| 확인 창 조합 덧(GF000214) | 뒷길이 25 · ㎥당 | 0.6 인 → 309,720 | 다른 로직(채집) · 절 하나 이중 계상 | +| M01 시험 계산 | 자동값 0 · 1 · 1 · 1 | 0원 → 운반무게만 넣으면 575 인 | 가드 칸 자동값 1 | +| 근거 로직 원문 식 | L′ = α 8 × 6 = 48m · 석재 t 2 · 불량 V 2,000 · T 450 | N 92.21 → 0.2494 → 42,917 | 엑셀은 n 42 값 | +| 근거 로직 n 직접 | 운반회수 42 · 회당 0(25㎏) · 운반무게 575 | 0.547619 → 94,227 | 없음 | + +- 단위: GC001140 결과단위 「원/자재 단위」 · 운반무게 575㎏/㎡ 면 「원/㎡」 = 줄 단위 ㎡ 그대로(배 1). 단위 환산이 「자재」를 못 읽어 배 빈칸(`Match.py:198`). +- 줄 수량 3: 배 × 3 은 1 ㎡ 금액에 수량을 곱한 것 — 차 원인 아님. +- 노임 · 반올림: 노임 172,068 같음 · 끝수 94,227.7 → 94,227 같음. + +### 2-2 n = 42 출처(`n42b.py` · 앞 `tmp/brain_628/n42.py`) + +| 갈래 | 조합 | n | 42 와 차 | 근거 | +|---|---|---|---|---| +| 원문 그대로 | α × L 48m · 불량 2,000 · 석재 2 · 450 | 92.21 | +50.2 | 1-2-7 2 · 3 · 5 나 | +| 고갯길 직고 환산(3 주⑤ · 1 나) | 수평 6 + 직고 6 tan35° × 6 = 31.2m · 불량 · 석재 · 450 | 116.2 | +74.2 | 원문 | +| 평지 N ÷ α | 190.7 ÷ 8 | 23.8 | −18.2 | 근거 없음 | +| **α × L × 3 = 144m** | 불량 2,000 · 석재 2 · 450 | **42.29** | +0.29 | 근거 없음(× 3 출처 모름) | +| **L 6m = 직고 → 수평 36m** | 물논 500(기계설비 표) · 석재 2 · 450 | **42.29** | +0.29 | 지게에 물논 V 를 씀 = 근거 없음 | +| **α × (수평 6 + 직고 × 6) = 249.6m** | 양호 3,000 · 토사 1.5 · 480 | **41.79** | −0.21 | T 480(휴식 안 뺌) · 근거 없음 | +| 42 가 되려면 | 불량 2,000 · t 2 · T 450 → L′ = 145.2m(α 24.2) / 보통 → 181.5m / 양호 → 217.9m | 42 | — | — | + +- 엑셀 셀은 「운반회수 : n = 42회/일」 글뿐(식 없음) · 지식DB 에 42 없음 · 다른 일곱 파일 같은 꼴 블록(영월 D01466 · D00450 · 북부청사방 단산17)은 원문 식 또는 값(n 100) — 출처 확정 불가. → 근거 로직은 「운반회수 직접」 갈래로 엑셀 값을 받고, 원문 식 결과(0.2494 · 42,917원)를 참고 꼬리표로 보이는 것이 맞음. + +--- + +## 3. 고칠 길 · 모의 · 지킴 시험 (할 일 3 · 요구 637 ④) + +### 3-1 갈래 · 자리 · 크기 + +| 갈래 | 무엇 | 자리 | 크기 | +|---|---|---|---| +| **A 뿌리 한 곳** | 수준 9 · 거리 ≥ 1(e배 넘게 어긋남)이면 `우리품` 빈 · `입력` {} · `못맞춤` true — 모든 소비처(Verdict 꼬리표 · 상태 · 후보 글 · Line 품 비교 · 대상 · 별칭 · 통째 · Choose)가 이 출구 하나를 지남 | `Option.find` `M02_Hopyo_Option.py:466-497` | +4 줄 · 화면 품 비교 「0.5476 → – (우리 셈 조건 못 찾음)」 = `Verdict._diffs` `:63` +2 줄 | +| **B 자동값** | 가드 `만약(X > 0, X, 기본)` 칸은 나눗수 퍼뜨림에서 뺌 → 자동값 0(= 원문 기본 25㎏ · 450분 · 식 · 표 위끝) | `master_auto._uses` `master_auto.py:47-51` | +3 줄 · 4 로직 9 칸 · 우리지문 다시 셈(≈ 2분) · M01 시험 계산 견본 · check_master 전후 같음 확인 | +| B 덧 | 가드 칸은 옛 자리표 1 도 옵션 후보로 둠(엑셀이 그 칸으로 안 나눈 블록 — 봉화 단산91 단끊기 GF000298 절취량 1 로 맞던 것 지킴) | `Option.space` `:155-163` | +3 줄 | +| **C 엑셀 매개값 짝** | 하나씩 조합에서 후보 ≤ 4 인 수 칸도 둘씩 짝(엑셀 글에서 온 575 · 42 같은 수) | `Option.combos` `:208` | 1 줄 | +| C 덧(고를 것) | 기호 이름 받기 — 「운반회수 : n = 42」 처럼 칸 이름 뒤 기호 허용 · 또는 로직 입력에 「기호」(n · L · q · α) 칸 | `Option.excel_numbers` `:93` 1 줄 · 또는 로직 JSON(정본 → 사용자 승인) | — | +| D 엑셀 값 표지 | 운반회수 같이 엑셀이 값으로 넣은 칸 = 출처 「엑셀 값(식 아님)」 · 꼬리표 「원문 식이면 0.2494(42,917원)」 | `Line._target` `:76` · `Verdict.judge` `:150` | +4 줄 | +| **E 배 「자재 단위」** | 결과단위 「원/자재 단위」 = 줄 단위 그대로 → 배 1(갈래 「자재 단위」) · 공/㎥ ≡ 공㎥ | `Match.factor` `M02_Hopyo_Match.py:176` | +2 줄 | +| F 몫 품 비교 | 품 비교 우리 품 × 대상 몫(0.1 → 엑셀 10% 품과 견줌) | `Line._qty` `:112` | +2 줄 · 5 줄 바뀜 | +| **G 절 하나 = 덧 없음** | 절이 하나인 블록은 1순위만(같은 몫 이중 계상 막음) | `Combine.combine` `:240` 머리 | 1 줄 · 2 줄 바뀜 | +| **H 같은 입력** | 1위 옵션 수준 ≤ 2 면 상태와 무관하게 그 입력을 대상 입력값으로(품 비교 = 미리 셈 금액 같은 입력) | `Line._numeric` `:160` | 1 줄 | +| I 규격 읽기(고를 것) | 블록 옵션이 정한 칸은 규격 값으로 덮지 않음 · 「L=…cm」 를 m 칸(운반거리)에 넣지 않음 | `Match.spec_inputs` `:139` | +2 줄 | + +파일 크기: Option 497 · Line 476 · Verdict 221 · Match · Combine 325 · master_auto 98 — 모두 700 줄 아래 그대로. + +### 3-2 모의(코드 안 고침 · 과정 안에서 바꿔 끼움 · `simpatch.py` A · B · B 덧 · C · E · G · H → `simsweep.py` · `cmp.py` · `golden_sim.py`) + +| 지표 | 지금 | 모의 | +|---|---|---| +| 단산10 야면석소운반 | 우리 품 25 · 대상 둘 · 배 빈칸 · 미리 셈 309,720 | **우리 품 0.547619 · 대상 GC001140 하나 · 배 1 · 입력 운반무게 575 · 회당운반량 0 · 운반회수 42 · 미리 셈 282,681 = 엑셀** · 상태 「다른 점」(보통인부 하나 줄 = 수준 9 고정 · 꼬리표 없음) | +| 1위 품 비교 10배 넘음 | 14 | 1(GC000110 롤러 10.4 시간 = 엑셀 읽기) | +| 수준 9 우리 품 보임 | 135(e배 31) | 101(e배 10 · 나머지는 「못 맞춤」 빈칸) | +| 후보 다섯 「다른 점」 10배 | 18 | 2 | +| 미리 셈 금액 10배 | 9 / 196 | 7 / 195(GF000135 둘 바름 · 남은 것 = 다른 로직 후보 · 믹서만 줄 · 사이클 0) | +| 조합 체크 둘 이상 | 15 | 13 | +| 배 빈칸 | 30 | 29 | +| 1위 · 상태 바뀐 단위 | — | **0** | +| 골든(사람 126 · 새 파일 51) | 1위 120 + 43 · 다섯 안 122 · 맞음 틀림 0 · 다른 점 틀림 1 | 같음(B 덧 · H 전 판으로 잼 · 둘은 1위 안 바꿈) | + +- 단산10 상태를 「맞음」(체크 제안)으로 올리려면 「보통인부 하나뿐 줄 + 조항 같음 + 거리 0」 을 맞음으로 보는 규칙이 더 필요 — `Fit.single`(우연 맞음 막음)과 부딪혀 고를 것. + +### 3-3 권함 + +1. A · B(+덧) · C · E · G · H 한 일감(서버 다섯 파일 + master_auto · 각 1~6 줄 · 새 파일 없음). 우리지문 판이 바뀌어 맞춤 캐시 다시 셈. +2. D · F · I 는 이어서(고를 것). +3. 782-3(8-2 시공능력 로직)은 아래 시험 5 를 지킴으로 걸고 만듦. +4. 단산10 「맞음」 승격 · 골든 N006 정답(GF000280 짐작 → GC001140)은 사용자 답 몫. + +### 3-4 지킴 시험(제안 · 새 `resources/tester/test_635_hopyo_ours_qty.py`) + +1. 자동값: GC001140 회당운반량 · 실작업시간 · 운반회수 = 0 · GF000156 모래 · 자갈단위중량 = 0 · 가드 아닌 나눗수 칸은 1 그대로. +2. 단산10: `Option.find("GC001140", …)` 우리품 보통인부 0.547619 · 입력 운반무게 575 · 운반회수 42. +3. 못 맞춤: 수준 9 · 거리 ≥ 1 → 우리품 빈 · 입력 {} · 못맞춤 true(북부청임도 단산12 GF000113). +4. 확인 창 줄(ctx 스텁 · `Line._numeric`): 단산10 대상 = GC001140 하나 · 배 1 · 미리 셈 품 = 품 비교 우리 품 · 금액 282,681. +5. 전수 여덟 파일: 1위 품 비교 우리/엑셀 10배 넘는 줄 ≤ 알려진 예외 목록(GC000110 롤러) · 「다른 점」 + 못 맞춤 줄의 대상 입력값 출처 「블록」 0 · 절 하나 블록 조합 0. +6. `factor("㎡", "자재")` 배 1 · `factor("공/㎥", "공㎥")` 배 1. +7. 지킴: 봉화 단산91 단끊기 GF000298 맞음 그대로 · 골든 1위 163 이상 · 다른 점 틀림 늘지 않음. +8. 함께 돌릴 것: `test_628_hopyo_clause_part.py` · `test_782_1_carry_127.py` · `test_m02_hopyo_basis.py` · `test_m02_hopyo_fit.py` · `test_m02_hopyo_match.py` · `test_m02_hopyo_golden.py` · `test_621_hopyo_stages.py`(고친 대상만). + +--- + +## 4. 오른쪽 판 [수정] — 이름 옆 배수 칸 (할 일 4) + +### 4-1 어디 · 무엇 + +| 자리 | file:line | 내용 | +|---|---|---| +| [수정] 단추 | `M02_MasterTemplete_Hopyo_Sheet.ts:296` editButton | 엑셀 보기 오른쪽 호표 목록 줄마다 → `openHopyoCheck`(일위대가 확인 창) | +| 배 칸 | `M02_MasterTemplete_Hopyo_CheckRows.ts:113-135` partLines | 대상마다 「키 · 이름 · [× 배] · 몫」 · 툴팁 「배 — 우리 수량 = 엑셀 수량 × 배」 | +| 수량산출 칸 | `CheckRows.ts:83` qtyCell | 아래 「우리 = 엑셀 수량 × 배」 | +| 배 바꿈 | `Check.ts:375-379` times | 캐시 대상 배만 바꿈 · 다시 그림 | +| 체크 가능 | `Check.ts:117-122` checkable | 대상마다 배 > 0 이어야 체크 · 빈칸이면 체크 못 함 | +| 만들기 몸 | `Check.ts:125-135` toTarget | 배(없으면 1) · 몫 보냄 | +| 미리 셈 | `logic/M02_MasterTemplete_Hopyo_Draft.ts:37-38` | 로직 수량 손 = 엑셀 수량 × 배 | +| 서버 첫 값 | `M02_Hopyo_Line.py:71 · 82` _target · `M02_Hopyo_Match.py:176` factor | 배 = 단위 환산(같음 1 · 단위표 · 두 단위 · 추정 B · T) × 몫 · 못 읽으면 None | +| 서버 재검사 · 씀 | `M02_Hopyo_Ledger.py:233` times_of · `M02_Hopyo_Build.py:251` · `:99` _memo | 배 > 0 검사 · 사전조합 수량 손 = 엑셀 수량 × 배 · 메모 「실무 3㎡ × 배(몫)」 | +| 장부 | `M02_Hopyo_Line.py:87` _pair · `M02_MasterTemplete_Hopyo_Ledger.ts:181` | 별칭 장부 짝에 배 저장 · 다음 불러오기 때 그대로 · 장부 화면에도 배 칸 | +| 단가산출 목록 | `SheetSk.ts` | [수정] 없음 · 배 칸 없음 | + +- 원래 뜻 = **단위 환산 배 + 몫**: 엑셀 줄 단위와 우리 로직 결과단위가 다를 때 「우리 수량 = 엑셀 수량 × 배」(예 엑셀 m ↔ 우리 본 · 조 ↔ ㎡ · ㎡ ↔ ㎥ 두께) · 섞인 줄(9:1)은 몫 0.1 이 배에 곱해짐. 호표 줄 수량 배 · 일위대가 → 구조물 조합 배 아님. + +### 4-2 여덟 파일 실측(기본 대상 290) + +| 배 | 수 | 예 | +|---|---|---| +| 1 | 252 | 단위 같음 · 두 단위 · 단위표 | +| 빈칸(갈래 「입력」 = 사용자 몫) | 30 | M ↔ 개소 · 본(PVC · 배수관 · 측구수로관) · 조 ↔ ㎡(돌망태) · ㎡ ↔ 개(큰돌) · M2 ↔ 시간(깬잡석 · 야면석 채집 GC000268) · 자 ↔ m(글자새김) · ton ↔ ㎥ · ㎡ ↔ 공㎥(강관비계) · **공/㎥ ↔ 공㎥(같은 단위 표기 다름) 2** · **㎡ ↔ 자재(GC001140) 1** | +| 몫 0.1 | 7 | 고임돌 · 조약돌(9:1) GF000211 · 터파기 인력 10% | +| 추정 0.2 | 1 | 울진대흥 콘크리트포장 ㎡ → ㎥(두께 20cm) | + +- 사용자가 본 칸 = 단산10 야면석소운반 GC001140 대상의 빈 배 칸(결과단위 「원/자재 단위」 → 단위 「자재」 를 factor 가 못 읽음). 이 칸이 비어 체크도 안 되고, 1 을 넣으면 위 1-1 처럼 25 인이 그대로 금액이 됨. + +### 4-3 권함 + +- 없애지 않음 — 빈칸 30 줄은 단위 환산 없이는 만들 수 없음(배 1 강제면 m 수량이 본 수량으로 들어감). +- 보이기만 바꿈: 배 1 · 단위 같음 · 두 단위면 칸 숨기고 「단위 같음 ×1」 글 · 몫 줄은 「몫 0.1」 만 · 빈칸 · 추정만 입력 칸. +- 이름 · 설명 바꿈: 「배」 → 「단위 환산」 · 칸 옆에 「엑셀 1 ㎡ = 우리 [ ] 본」 처럼 두 단위를 함께 · 추정이면 「두께 0.2m 로 추정」. +- 자동 1 넓힘(E): 「자재 단위」 · 공/㎥ ↔ 공㎥ 같은 표기 차이는 factor 가 1 로 — 빈칸 30 → 27. +- 장부 화면(`Ledger.ts:181`)의 배 칸은 같은 뜻 · 같은 이름으로 맞춤. + +--- + +측정 스크립트 · 결과(`tmp/brain_635/`): `run1.py`~`run5.py`(재현) · `sweep.py` → `sweep_<파일>.json`(지금 전수) · `agg.py` · `agg2.py`(집계) · `pattern.py` → `pattern.json`(같은 꼴 로직) · `n42b.py` · `nscan.py`(n 출처) · `simpatch.py` · `simsweep.py` → `sim_<파일>.json` · `cmp.py`(모의 견줌) · `golden_sim.py` → `golden_base.json` · `golden_sim.json` · `cache/`(모의 우리지문). 코드 · 마스터 · storage · git · DB 는 고치지 않음.