diff --git a/docs/raw/요구_1104/_분석_639_자동값_1_정책.md b/docs/raw/요구_1104/_분석_639_자동값_1_정책.md new file mode 100644 index 000000000..d662696cb --- /dev/null +++ b/docs/raw/요구_1104/_분석_639_자동값_1_정책.md @@ -0,0 +1,286 @@ +# 분석 639 — 견본 자동값 「1」 정책 (요구 639 · 읽기 전용 조사 · 코드 · 마스터 · storage · git · DB 안 고침) + +사용자 말: 「야면석 소운반을 사용하는 게 문제가 아니라 값에 전부 1 을 넣는 게 문제 아니야?」 → **맞음.** + +## 요약 열 줄 + +1. 사용자 말이 맞음 — 야면석 소운반 25 인 · 98,939,100원은 로직 탓이 아니라 견본 자동값(`master_auto.py:97` 「나누는 자리 = 1 · 그 밖 0」) 탓. 이 값은 머리에 「보기용 · 저장 안 함」 이라 적혀 있으나 셈 길 한가운데 `run_line`(`M02_Labor_Doc.py:550`)이 빈 입력마다 채움 → 일위대가 · 사전조합 · SK · B09 내역 · B08 자재 수량이 모두 이 값으로 셈. `_틀.md:243` 「정본 계산은 화면이 준 값만 씀」 과 어긋남. +2. 견본을 부르는 곳 = 서버 13 자리(+ 시험 10 파일) · 화면 TS 계산 짝 없음(서버 길 `/logic/auto` · `/logic-lib/inputs` 를 받는 화면 7 자리). 셈 길 아홉(금액 · 수량 일곱 · 키 모음 둘) · 저장에 남는 길 6 · 화면만 7 · 짓기 · 문서 · 검사 3. +3. 입력 3,880 칸(1,513 로직 · 돈 1,450) 중 지어낸 값이 드는 칸: 나눗수 1 = 147 칸 · 83 로직 · 그 밖 0 = 545 칸 · 232 로직 · 범위 아래끝 185 칸 · 고르기 첫째 2,831 칸(대부분 중립) · 표 찾기 가장 낮은 줄 140 칸. +4. 터무니없는 값: GC001140 운반무게만 넣으면 98,939,100원(1,050배) · GC001141 11,250배 · GF000156 · 157 재료배합 고르면 64,217,627원/㎥(모래 838㎥ · 286배) · GC001156 덤프 16.6배 · GC001159 롤러 0.075배 · GF000134~136 qt · f · E · Cm 1 · GC001026 일시공량 1m · GC000425 · 426 작업량 1개/일 · GC000185 타설깊이 0.1(51.8배) · 가감 칸 −40 · −30 · −20% · 빈 수량 칸 0 → 계 0원 91 로직. +5. 저장 문서(읽기만 · 로직 줄 1,068 = 시스템 63 · 회사 1 · 개인 134 · 프로젝트 840 · B09 사본 30): 1 을 값으로 저장한 줄 0 · 빈 나눗수 칸이 1 로 셈되는 줄 138(로직 여섯 = 높이감률 1% 셋 · 트레일러 t2 1분 · 비빔 단위중량 1 · 단끊기 절취량 1) · 튄 실례 = 개인 item5 GF000156 재료 모래 838 · 자갈 1,032㎥/㎥ · 개인 SK-000011 GF000298 945,404 → 382,184(2.5배). +6. 화면 금액에도 남음 — M02 로직 고르기 창 기준 목록 파생 저장본(`storage/_derived/m02_logic_standard/44f7c540….json` · 10,871 줄)에 GF000298 780,826 · GC001026 3,002,629 · GC000425 226,122 · GF000134 1,609 · GC001140 0 등 견본 셈 금액. +7. 정책: 견본(보기 · 검사 · 짓기)과 기본값(셈)을 둘로 나눔 — 기본값 = 「기본」 칸 › 고르기 첫째 › 가드 0 › 범위가 0 을 품으면 0 › 표 찾기 첫 줄 › 그 밖 None(입력 필요 · 줄 「—」 · 합 「—」) · 1 · 0 을 지어 넣지 않음 · 맞춤은 기본만 · 불러오기 · SK 줄은 모든 입력을 적음. +8. 모의(코드 안 고침 · 메모리 바꿔 끼움): 돈 로직 1,450 → 같음 1,181 · 입력 필요 263 · 값 바뀜 6(가드 · 가감 0) · 저장 줄 1,068 → 같음 861 · 입력 필요 205 · 값 바뀜 2 · 입력 필요 최다 칸 = 채움콘크리트량 · 높이감률 · t2 · 잡석량(「기본」 승인 대상). +9. 「기본」 칸 = 지금 0 칸 · 규칙으로 정해지는 칸 3,146 · 기본 없음 734 칸(332 로직) = 설계 물량 491(입력 필요가 맞음) · 물성 · 계수 · 시간 211(원문 후보: 설명 10 · 시험입력 91 · 없음 110) · 가격 32. +10. 일감 넷: 639-4 기본 후보 표 → 사용자 승인 · 639-1 서버 뿌리(`master_auto.defaults` · `run_line` 한 곳 · 셈 길 일곱 자리) · 639-2 맞춤(784-1 · 784-3 뒤 · 같은 파일) · 639-3 화면 — 지킴 시험 새 `test_639_default_policy.py` · 영향 시험 28 파일. + +--- + +## 1. 견본값을 쓰는 곳 전수 (할 일 1) + +규칙 자리: `resources/master_data/scripts/master_auto.py:80-98` `values` — 고르기 첫째(:89) · 범위 아래끝(:91) · 표 찾기 가장 낮은 줄(:93 `_lowest`) · 가격 None(:94-95) · 나눗수 1 · 그 밖 0(:97). 나눗수 = 식의 `/` 오른쪽 이름 + 그 이름을 낳는 중간 식 이름까지 퍼뜨림(:43-51). + +### 1-1 서버(파이썬) — `master_auto` 를 직접 부르는 자리 + +| # | 자리 | 무엇에 | 금액 · 수량 | 저장 | 화면 | +|---|---|---|---|---|---| +| 1 | `M02_Labor_Doc.py:550` `run_line` | **셈 길 뿌리** — 빈 입력 = 자동값 | 들어감(아래 1-2 아홉 길) | 간접(1-3) | 금액 | +| 2 | `B09_Estimation/B09_Estimation_Sangeun.py:234` `_env` | B09 산근(단가산출 블록) 입력 + 작업량 Q | **B09 내역 금액** | 없음 | B09 | +| 3 | `M02_Sangeun_Views.py:29` `text_of` | SK 계산서 글 · 중간값 | 글 속 수(run_line 과 같은 값) | 없음 | SK 계산서 | +| 4 | `M02_Sangeun_Calc.py:185-194` `_defaults` → `_fill` :197-221 | SK 더한줄 로직 빈 입력(흐름 예시 › 자동값) | SK 금액 | 덮개 `원값`(1-3) | SK | +| 5 | `M02_Labor_Inputs.py:94 · 103` `_listed` | 일위대가 입력 모달 칸마다 `자동값` | 없음(보이기) | **확인 상자로 저장 가능**(1-3) | 입력 모달 | +| 6 | `M02_Logic_Standard.py:133-134` `axes` → `_money` :176-183 | 로직 고르기 창 기준 목록 바탕 줄 | 목록 금액 | **파생 저장본**(1-3) | 고르기 창 | +| 7 | `M02_MasterTemplete/DataFlow/M02_DF_Convert.py:90-92` `design` | 흐름 변환 설계 값 예시(시험입력 › 자동값) | 흐름 셈 예시 | 흐름 저장 때 `example`(잠재 · 지금 흐름 0 줄) | 흐름도 | +| 8 | `M02_Hopyo_Ours.py:127` `_engine` · `:180` `_mach_view` | 불러오기 우리 품 · 우리지문 변형(`combos` :267 · `fingerprint` :297) | 「우리 품」 수 | 맞춤 캐시(`tmp/m02_hopyo/`) | 확인 창 품 비교 | +| 9 | `M02_Hopyo_Option.py:113 · 122 · 150 · 482` | 맞춤 탐색 칸 · 후보(:155-163 자동값 먼저) · 출구 「입력」 = 자동값과 다른 칸만(:488) | 우리 품 · 미리 셈 | **불러오기 입력값**(1-3) | 확인 창 | +| 10 | `M02_Hopyo_SkPatch.py:123` `parts` | SK 줄 기계 갈래 · 규격 | 없음 | 없음 | 불러오기 SK | +| 11 | `M01_MasterData/M01_MasterData_Store.py:559-564` `auto` → `M01_MasterData_Router.py:215-219` `/m01/logic/auto` (= `M02_Logic_Lib_Read.py:24-26` · `M02_MasterTemplete_Router_Combos.py:57-58`) | 화면 견본 길 | 1-4 화면들 | 1-3 | 1-4 | +| 12 | `resources/master_data/scripts/build_재료_검색어.py:69 · 179` | 재료 검색어 짓기(자동값 벌에서 첫째가 되게) | 없음 | 마스터 검색어(짓기 결과) | 없음 | +| 13 | `docs/raw/M01_입력목록/build.py:175-176 · 336` | 입력목록 문서 「기본값(견본)」 칸 | 없음 | 문서 | 없음 | +| — | `check_master.py:502-514` `시험입력` | **따로 있는 검사 견본**(범위 위끝 · 그 밖 1 · 시험입력 이김) — `master_auto` 안 씀 · 계산전부 · 시험만 | 없음 | 없음 | 없음 | +| — | `master_combo.py:106-130` `run`(M01 일위대가조합 미리 보기) | 자동값 **안 씀**(받은 값만 · 못 도는 줄 까닭) — 이미 바른 꼴 | — | — | — | + +시험 10 파일이 `mau.values` · `store.auto` 를 직접 부름(`test_712_1_bundle` · `test_m01_search_words` · `test_782_3_capacity_82:245-251` · `test_item_copy_complete:92-158` · `test_m02_labor_layer:76` · `test_m02_item_labor:60 · 126` · `test_751_3_money_cut:75 · 116` · `test_714_1_sheet_line:21` · `test_m01_pick` · `test_m01_text`). + +### 1-2 `run_line` 을 지나 금액 · 수량이 되는 아홉 길 + +| 길 | 자리 | 결과 | +|---|---|---| +| 일위대가 층 셈(SC 사전조합 · labor) | `M02_Labor_Doc.py:529` `calc` ← `M02_Labor_Router.py:73-75` | 일위대가 기준 · 반영 · 합 | +| 프로젝트 사본 셈 | `M02_Item_Prices.py:323-333` → `calc` | 사본 금액(사본 `입력값.json` 은 「자동값 안 적음」 `M02_Item_Snapshot.py:9 · 105-113`) | +| 사전조합 · 승격 펼침 | `M02_Labor_Expand.py:84 · 114 · 121` | 안 줄 금액 | +| SK 셈 | `M02_Sangeun_Calc.py:251` `sub_run` · `:355 · 359` `run` | SK 금액 | +| B09 품셈 블록 | `B09_Estimation_Labor_Source.py:137` `_poomsem` | **B09 내역 금액** | +| B09 산근 블록 | `B09_Estimation_Sangeun.py:234` `_env`(직접) | **B09 단가산출 금액** | +| B08 자재 수량 | `B08_Quantity/B08_Quantity_Router_Material.py:79` `_ref_mats.run` | **자재 수량**(모래 838㎥/㎥ 같은 값이 그대로) | +| 불러오기 자재 옮김 | `M02_Hopyo_Build.py:413` `_inside` | 사전조합 만들기 | +| 자원 키 모음(금액 아님) | `B09_Estimation_Linked.py:63` · `B09_Estimation_Sangeun.py:615` `hand_resource_keys` | 단가표 키 | + +- 엔진 줄 비움 길은 이미 있음 — 입력이 None 이면 그 입력을 쓰는 줄만 단가 · 금액 None + 까닭 「입력 … 비어 있음」(`master_formula.py:418-419 · 585-587`). 가격(원) 칸이 이 길(7215770eb). 그런데 `run_line` 은 None 자동값을 걸러 내(`:550 if v is not None`) 가격 칸 로직 31 개가 통째로 「입력 없음」 으로 멈춤. +- 합은 빈 줄을 조용히 뺌 — `M02_Labor_Doc.py:407-408` `_sum` · `master_cut.py:57-60` `sums` 「빈 줄 = 뺌」. 「입력 필요」 줄이 생기면 부분합이 금액처럼 보임. + +### 1-3 자동값이 저장에 남는 길 + +| 길 | 자리 | 지금 storage | +|---|---|---| +| 입력 모달 확인 상자 — 빈 칸에서 켜면 자동값을 그 값으로 저장 | `M02_Labor_Values.ts:240-249` | 나눗수 칸 1 저장 줄 **0** | +| SK 줄 상세 — 자동값과 같은 값은 안 남김(빈 값 = 자동값 그대로 기댐) | `M02_MasterTemplete_Labor_RowSk.ts:34 · 64 · 78-82` | — | +| 불러오기 — 옵션 「입력」 = 움직인 칸 + 자동값과 다른 칸만 → 대상 입력값 · SK 더한줄 입력값 | `M02_Hopyo_Option.py:482-488` · `M02_Hopyo_Line.py:76` · `M02_Hopyo_SkPatch.py:347 · 382 · 471` | 자동값과 같은 칸(봉화 단산91 GF000298 절취량 1 등)은 안 적혀 자동값에 기댐 | +| SK 저장 — 덮개 `원값` · 둘째 기초 `원값` 을 자동값 채운 셈으로 | `M02_Sangeun_Calc.py:533-537` `clean_doc` · `:547-560` `_stamp_adds` | 원값 칸 | +| 기준 목록 파생 저장본 | `M02_Logic_Standard.py` → `storage/_derived/m02_logic_standard/*.json` | 아래 2-5 | +| 흐름 예시 — M01 시험 계산 칸(자동값 채움) → 흐름 편집기 예시(`M01_MasterData_UI_LogicLab.ts:326`) · 흐름 변환 예시(`M02_DF_Convert.py:91`) · 다른 로직 예시(`M02_DF_InputPanel_Build.ts:338-354`) → 흐름 저장 때 `example` · 흐름 셈이 씀(`M02_DF_Compute.py:212 · 438 · 619`) | 마스터 흐름 0 줄(잠재) | + +### 1-4 화면만(TS · 서버 길 받음 · 계산 짝 없음) + +| 자리 | 일 | +|---|---| +| `M01_MasterData_UI_Logic_Calc.ts:172-182` | M01 시험 계산 — 열 때 빈 칸을 견본으로 채우고 바로 셈(GC001140 0원 · 운반무게만 넣으면 98,939,100원) | +| `M01_MasterData_UI_Logic_Api.ts:277-279` `fetchAuto` | 견본 길 | +| `M02_DF_InputPanel_Logic.ts:244-248` | 흐름도 다른 로직 예시 | +| `M02_Labor_Values.ts:29 · 55-60 · 64-65 · 191` | 입력 모달 흐린 자동값 · placeholder | +| `M02_MasterTemplete_Labor_Diagram.ts:143-148` | 그림 「자동값」 칸 | +| `M02_MasterTemplete_Hopyo_Choose.ts:58` · `Hopyo_Api.ts:122` | 고르기 창 출처 「자동값」 | +| `ui_template/ui_template_item_picker_detail.ts:110` · `_project.ts:69 · 273` | 「빈 값 n 개(자동값)」 | + +- TS 쪽에 견본 규칙 짝은 없음(서버 단독) — 바꿀 곳은 서버 한 벌 + 위 보이기 글. +- 셈 짝 하나 — `M02_MasterTemplete_Labor_Calc.ts` `settle`(`M02_Labor_Doc.py:431-433` 짝) — 「입력 필요」 합 처리를 같이 바꿔야 함. + +--- + +## 2. 1 · 0 · 최솟값 · 첫째가 낳는 엉뚱한 금액 · 품 전수 (할 일 2) + +측정: `tmp/brain_639/s02_inputs.py` → `inputs.json`(칸 3,880) · `s03_sweep.py` → `sweep.json`(로직 1,513 자동값 셈 · 시험입력 셈) · `s05_sens.py` → `sens.json`(나눗수 · 범위 민감도) · `s06_partial.py`(나눗수만 빈칸) · `s07_storage.py` → `storage_uses.json` · `s08_policy.py` · `s10_policy_count.py`(정책 모의). + +### 2-1 칸 갈래 · 자동값 + +| 갈래 | 칸 | 로직 | 자동값 | 아무것도 안 넣은 셈 | +|---|---|---|---|---| +| 고르기 | 2,831 | — | 목록 첫째 | 중립이 많음(전국평균 534 · 해당 없음 194 · 아님 60 · 없음 34) | +| 범위 | 185 | — | 아래끝(0 이 152 · 그중 가드 36) | 2-3 | +| 표 찾기 | 140 | — | 표 가장 낮은 줄 | 원문 안 값 | +| 가격(원) | 32 | 31 | None | 로직 31 개 통째 못 셈(「주재료비 없음」) | +| **나눗수** | **147** | **83** | **1** | 2-2 | +| **그 밖 수** | **545** | **232** | **0** | **계 0원 91 로직**(86 개가 이 칸 · 예 GC001140 운반무게 · GC000169 앵커 연장 · 측량 점수) | + +- 시험입력 있는 돈 로직 191 개 중 자동값 계가 10배 넘게 다름 8(GC001140 · GC001141 · GC000871 · GF000277 · GF000283 · GF000326 · GC001156 · GC000677). + +### 2-2 나눗수 1 — 금액을 흔드는 로직(`sens.json` · `partial.json`) + +「0 이면 기본」 가드 칸(식 `만약(X > 0, X, 기본)` · 1 이 「1㎏ · 1분 · 1회」 실제 값으로 셈) = 17 칸 · 11 로직: GC001140 · 1141 · 1149 · 1150 · 1151 · 1161 · 1172 · 1173 · GF000156 · 157 · 298. + +| 로직 | 1 이 든 칸 | 자동값 셈 | 바른 값(시험입력 · 가드 0) | 배 | +|---|---|---|---|---| +| GC001140 인력운반(지게) | 회당운반량 · 실작업시간 · 운반회수 · 운반거리 | 운반무게 575 만 넣으면 **98,939,100** | 94,228 | **1,050** | +| GC001141 인력운반(기계설비) | 회당운반량 · 실작업시간 | 운반무게만 넣으면 **180,193,000** | 16,017 | **11,250** | +| GF000156 · 157 비빔타설 | 모래 · 자갈단위중량 | 재료배합 (A) 고르면 **64,217,627 · 64,454,525**(모래 838 · 자갈 1,032㎥/㎥) | 224,212 · 461,110(0.493 · 0.573㎥) | **286 · 140** | +| GF000298 선떼붙이기 단끊기 | 절취량(0 = 원문 15㎥) | 780,827 | 371,213 | 2.1 | +| GC001156 덤프트럭 작업량당 경비 | 적재용량 · 단위중량 · 운반거리 등 10 칸 | 13,570(나눗수만 빈칸 9,352) | 858 | **16.6 · 10.9** | +| GC001159 롤러 작업량당 경비 | 다짐횟수 · 두께 · f | 59(나눗수만 빈칸 23) | 307~791 | **0.075** | +| GC001166 대형브레이커 경비 | 작업능력 1㎥/hr | 54,672 | 16,567 | 3.3 | +| GC001145 불도저 경비 | 운반거리 · f | 831(177) | 986~4,216 | 0.18~0.2 | +| GF000134~136 골재운반(덤프 15ton) | qt · f · E · Cm | 1,610 | 엑셀 10,890(분석 635) | 0.15 | +| GC001026 교량신축이음 교체 | 일시공량 1m(원문 3~12) | 3,002,638 | 일시공량에 반비례(10m 300,264) | ≈ 3~12 | +| GC000425 · 426 블록 거치 | 작업량 1개/일 | 226,122/개 | 작업량에 반비례 | 큼 | +| GC000183 고압분사 주입 | 길이 다섯 칸 1m | 412,227 | 길이에 비례 | — | +| GC000211 · 214 · GF000210 거푸집 | 높이감률 1%(원문 7m 이하 0) | 124,419 · 53,069 · 57,680 | 123,540 · 52,539 · 57,150 | +1% | +| GF000137 중기운반 트레일러 | t2 1분(원문 없음) | 68,669 | t2 10분 83,590 · 30분 116,748 | — | +| GF000277 노체 살수 | 운반거리 · 함수비 둘 · 흙단위중량 | 0 | 711 | 0 | + +- 덜 흔드는 나눗수: 두께 ㎝(GC000278~286 · 계 안 바뀜) · 시공높이(블록 · 미장 · 0.8배 안팎) · 측량 점수 · 면적(물량 칸 — 1 단위로 셈 · 지어낸 수지만 금액 꼴은 「1 단위」). + +### 2-3 범위 아래끝 · 고르기 첫째 + +| 꼴 | 로직 · 칸 | 아래끝 셈 | 0 · 가운데 셈 | 배 | +|---|---|---|---|---| +| 아래끝이 극단 | GC000185 연직배수재 타설깊이 [0.1, 55] | 29,797 | 576 | **51.8** | +| 가감 칸(아래끝 < 0) | GC000891 · 892 용접가감 [−40, 100] | 11,955 · 17,066 | 19,913 · 28,443 | 0.6 | +| 〃 | GF000327 지질가감 [−30, 30] · GF000059 증감률 [−20, 20] · GC001012 [−20, 20] | 49,671 · 265,075 · 55 | 70,958 · 331,344 · 44 | 0.7 · 0.8 · 1.25 | +| 아래끝 = 표 끝 | GF000289 가슴높이지름 [16, 999] · GC000559 작업난이도 [0.8, 1.2] | 183,211 · 834,510 | 347,922 · 1,035,006 | 0.53 · 0.81 | +| 고르기 첫째가 흠을 가림 | GF000156 · 157 재료배합 「계상 안 함」 | 재료 0 | 고르는 순간 단위중량 1 이 드러남 | — | +| 고르기 첫째 = 설계자 고름 | 조종원직종 「1048」 52 칸 · 크레인 「2104-0010」(가장 작은 기종) 66 칸 · 보정치 「−0.05」 f1~f4 14 칸 | 원문 기본 아님 | — | — | + +### 2-4 저장된 M02 문서(공유 storage · 읽기만 · `_initial` 뺌) + +로직 줄 1,068 — 시스템(`resources/master_template` labor 7 · SC-000001 · SP) 63 · 회사 1 · 개인(storage/1/3 · 1/9 · 1/10 · 3/15 — labor 15 · SK 14 · SC 2 · 조합 2 · SP 1) 134 · 프로젝트(14 프로젝트 labor 84 파일) 840 · B09 사본(3 묶음) 30. 구조물 조합(`구조물집계표조합.json`)은 입력값 없음 — 일위대가 문서를 가리킴(위에 셈 포함). + +| 층 | 빈 나눗수 줄(자동 1 셈) | 나눗수 1 을 값으로 저장 | 실례 | +|---|---|---|---| +| 시스템 | 8 | 0 | GC000214 높이감률 · GF000137 t2 · GF000156 단위중량(배합 「계상 안 함」 → 재료 0) | +| 개인 | 16 | 0 | `storage/1/10/templates/labor/item5.json` GF000156 배합 (A) · 단위중량 빈칸 → 엔진 재료 모래 **838** · 자갈 **1,032㎥/㎥**(별도계상이라 기준 136,705 그대로 · B08 자재 수량엔 그대로 듦 · 가드 0 이면 0.493 · 0.573) · `sangeun/SK-000011.json` 바탕 GF000298 절취량 빈칸 → **945,404**(가드 0 이면 382,184 · 2.5배) · 높이감률 11 줄 | +| 프로젝트 | 112 | 0 | GC000214 높이감률 42 · GF000137 t2 14 · GF000156 56(배합 「계상 안 함」) | +| B09 사본 | 2 | 0 | GC000214 · GF000156 | + +- 다른 흠(자동값 아님 · 참고): `storage/1/10/templates/labor/item1.json` GF000156 단위중량 2 · 2.1(t/㎥ 를 ㎏/㎥ 칸에 넣음 · 222-1 알려진 것) → 39,544,941. +- 빈 그 밖 0 칸이 든 줄: GF000225 · 222 채움콘크리트량 61 · 48 · GF000224 · 220 잡석량 15 · 4 · GC000211 구멍땜 6 · GF000176 모래량 1 — 지금 0 → 그 재료 줄 0(조용히 빠짐) · 자재지역 0(글 칸에 0 · 재료 찾기가 「지역 안 가림」 으로 넘어가 셈엔 해 없음). + +### 2-5 화면 금액에 남은 견본 셈 — 기준 목록 파생 저장본 + +`storage/_derived/m02_logic_standard/44f7c540922dd0e104e5f8c2fe05144aa850e2ba.json`(10,871 줄 · 바탕 줄 = 견본 자동값): GF000298 780,826 · GF000134 · 135 1,609 · GC001156 13,569 · GC001159 57 · GC001166 54,671 · GC000185 29,795 · GC000425 226,122 · GC001026 3,002,629 · GF000137 68,669 · GC001140 0. + +--- + +## 3. 정책 제안 — 견본(보기)과 기본값(쓰는 값)을 나눔 (할 일 3) + +### 3-1 두 벌 + +| | 견본(보기 · 검사 · 짓기) | 기본값(셈에 쓰는 값) | +|---|---|---| +| 함수 | `master_auto.values` 그대로(이름만 견본) · `sample` = 시험입력 › 기본값 › 비움(M01 화면용) | 새 `master_auto.defaults` | +| 1 · 0 지어 넣기 | 검사 · 짓기 전용으로만 남음 | **없음** | +| 쓰는 곳 | M01 시험 계산 채움 · 흐름 예시 · `build_재료_검색어` · 입력목록 문서 · `check_master.시험입력`(이미 따로) | `run_line` · B09 `_env` · SK `text_of` · `_defaults` · 기준 목록 · 입력 모달 · 우리지문 · 맞춤 탐색 · SK 줄 비교 · 흐름 변환 예시 | +| 저장 · 금액 | 안 나감 | 나감 | + +### 3-2 기본값 차례(칸마다 첫째로 맞는 것) + +| 차례 | 칸 | 기본값 | 칸 수 | +|---|---|---|---| +| ① | 입력 칸 「기본」(새 칸 · 원문 근거 · 사용자 승인) | 그 값 | 0(지금) | +| ② | 고르기 | 목록 첫째(`_틀.md:235` 기계 = 목록 첫째 규칙 그대로) | 2,831 | +| ③ | 가드 칸 — **식** `만약(X > 0, X, …)` 로 판정(설명 글 판정 금지: GC000185 「0 이면 … 0 으로 나눔」 오판) | 0(= 원문 값) | 54 | +| ④ | 범위 — 아래끝 ≤ 0 ≤ 위끝 | 0(할증 · 가감 · 표 값 없음) | 121 | +| ⑤ | 범위 — 0 을 안 품음 | None | 28 | +| ⑥ | 표 찾기 칸 | 표 가장 낮은 줄(원문 안 값) — **갈래 G1** | 140 | +| ⑦ | 가격(원) | None(지금 그대로) | 32 | +| ⑧ | 그 밖 수 칸(지금 나눗수 1 · 그 밖 0) | **None = 입력 필요** | 674 | + +### 3-3 None(입력 필요)의 셈 · 보이기 + +- 엔진: 그 입력을 쓰는 줄만 비움(이미 있는 EmptyInput 길 · `master_formula.py:585`). 결과 로직(돈 아님)은 통째 「입력 필요」. +- 뿌리 한 곳 `run_line`(`M02_Labor_Doc.py:542-563`): `defaults` 로 채움 · 줄 까닭에 「입력 … 비어 있음」 이 있으면 `기준` = None · `까닭` = 「입력 필요 — 이름들」 · `입력필요` = [이름]. 아홉 길(1-2)이 모두 여기를 지남. +- 직접 엔진을 부르는 넷도 같은 `defaults`: `B09_Estimation_Sangeun.py:234` · `M02_Sangeun_Views.py:29` · `M02_Hopyo_Ours.py:127 · 180` · `M02_Logic_Standard.py:133 · 176`(기준 목록 금액 「—」 · `SHAPE` 올림 :39 위). +- 합: `settle`(`M02_Labor_Doc.py:431`) · 짝 `M02_MasterTemplete_Labor_Calc.ts` — 기준 None 줄 수 = `입력필요` · 합 「—」 + 「입력 필요 n 줄」 — **갈래 G2**. +- 넣기: 일위대가 · SK · 사전조합에 넣기는 됨 · 넣을 때 경고 「입력 필요 n 칸」 · 입력 모달 그 칸 붉은 테 + placeholder 「입력 필요」(흐린 1 · 0 없음). +- 확인 상자(`M02_Labor_Values.ts:240-249`): 기본값이 None 이면 켜지지 않음(지금 「받아들일 값 없음」 길 그대로) · 기본값이 있으면 그 값 저장 → 1 이 저장될 길 0. +- M01 화면: `/m01/logic/auto` 응답 = `{값: 견본(시험입력 › 기본값), 기본: 기본값, 입력필요: [이름], 출처: {이름: 시험입력|기본|고르기|가드|범위|표}}` · 시험 계산 머리 「견본 — 입력 필요 칸 n」 · 빈 칸 placeholder 「입력 필요」 · 견본으로 채운 칸 흐린 글 · M01 셈(`M01_MasterData_Store.py` calc → `mf.fill_empty` `master_formula.py:505-512`)은 빠진 칸을 모두 None 으로(가격만 → 전부) — 통째 멈춤 대신 그 줄만 「—」. +- SK 줄 상세(`M02_MasterTemplete_Labor_RowSk.ts:78-82`)는 **기본값**과 견줘 같은 값만 뺌(견본 = 시험입력과 견주면 저장 값이 바뀜). +- 흐름 변환 예시(`M02_DF_Convert.py:91`) · 다른 로직 예시(`M02_DF_InputPanel_Build.ts:338-354`) = 시험입력 › 기본값 · None 칸 예시 비움. + +### 3-4 맞춤(불러오기)은 견본을 근거로 안 씀 + +- `Option.space`(`M02_Hopyo_Option.py:155-163`) 수 칸 후보 = 기본값(있으면) + 엑셀 수 + 계수 · 견본 1 · 0 을 후보 · 정렬 기준으로 안 씀. +- `Option.find` 「입력」(`:482-488`) = 모든 입력(`모든입력`) — `Line._target`(`M02_Hopyo_Line.py:76`) · `SkPatch`(`:347 · 382 · 471`) 가 그것을 적음 → 저장 문서가 견본 · 기본값에 기대지 않음(봉화 단산91 GF000298 절취량 1 같은 맞춘 값이 그대로 남음). +- 우리지문(`M02_Hopyo_Ours.py:267 · 297`) = 기본값으로 셈 · None 칸이 든 변형은 품 「모름」(순위에서 뺌) · 지문 판 올림 → 맞춤 캐시 다시 셈. +- 784-1(sub1 · 「가드 칸 자동값 0」 = `master_auto._uses`)과 같은 파일 · 같은 뜻 — 639 는 784-1 · 784-3 push 뒤 그 가드 판정을 그대로 씀. + +### 3-5 check_master + +- `check_master.py:502-514` `시험입력` = 이미 검사 전용(계산전부 · 시험만 · 화면 · 저장에 안 나감) — 그대로 둠. +- 새 검사 둘(막지 않고 알림): 「기본」 꼴(수 · 고르기 안 · 범위 안) · 「돈 로직 물성 칸 기본 없음 n」(⑤ · ⑧ 중 설계 물량 단위가 아닌 칸). +- `_틀.md` 7장 입력 칸 목록(`:238`)에 「기본」 칸 · `:240` 「범위 칸 기본값 두지 않음」 을 「기본은 「기본」 칸에만」 으로 · `:243` 「정본 계산은 화면이 준 값 + 기본값만」. + +### 3-6 「기본」 칸 없는 입력 · 채울 길 + +| 갈래 | 칸 | 채울 길 | +|---|---|---| +| 규칙으로 정해짐(②~④ · ⑥) | 3,146 | 없음(규칙) | +| 설계 물량(m · ㎡ · ㎥ · ton · 점 · 일 · 개 · 대 …) | 491 | 「입력 필요」 가 맞음 — 설계자 몫(시험입력 있음 66 · 원문 설명 1) | +| 물성 · 계수 · 시간 · 횟수 | 211 | 원문 후보 — 설명 「원문 예 · 0 이면 표준」 10 · 시험입력 91 · 없음 110 → 지식DB(`resources/knowledge/original` · `technical_info`) 대조 → 후보 표 → **사용자 승인** → 로직 JSON 「기본」 | +| 가격(원) | 32 | 「입력 필요」 그대로 | + +먼저 승인받을 칸(저장 문서 「입력 필요」 205 줄의 대부분): + +| 칸 | 로직 | 저장 줄 | 후보 | 근거 | +|---|---|---|---|---| +| 채움콘크리트량 ㎥/㎡ | GF000225 · 222 | 109 | 0(따로 셈) 또는 입력 필요 | 사용자 답 | +| 높이감률 % | GC000211 · 214 · GF000210 | 57 | 0 | 원문 비고 「수직고 7m 초과 매 3m 9%까지」 → 7m 이하 0(`docs/raw/요구_1010_2/조사_AC_로직기본값.md` 4장) | +| t2 분 | GF000137 | 15 | 입력 필요 | 원문 값 없음 | +| 잡석량 ㎥/㎡ | GF000224 · 220 | 19 | 0 또는 입력 필요 | 사용자 답 | +| 구멍땜 개소/㎡ | GC000211 | 6 | 0 | 설명 「구멍땜 안 하면 0」 | +| 가슴높이지름 ㎝ · E입력 | GF000289 · GF000089 | 2 | 입력 필요 · 원문 범위 가운데? | 사용자 답 | +| 모래 · 자갈단위중량 | GF000156 · 157 | — | 0(표 위끝) 그대로 또는 건조 가운데 1,600 · 1,700 | 조사 AC 2장 | + +### 3-7 모의(`s08_policy.py` · `s10_policy_count.py` · 코드 안 고침) + +| 대상 | 같음 | 입력 필요 | 값 바뀜 | 비고 | +|---|---|---|---|---| +| 돈 로직 1,450(빈 입력 · G1 표 첫 줄) | 1,181 | 263 | 6 | 바뀜 = GF000298(가드 0) · GC000891 · 892 · GF000327 · GF000059 · GC001012(가감 0) | +| 돈 로직(G1 엄격 = 표 찾기도 None) | 1,068 | 377 | 5 | | +| 결과 로직 63 | 27 | 36 | — | 8-2 시간당 작업량 꼴 = 설계 값 필요 | +| 입력 필요가 된 칸 갈래 | | 그 밖 0 351 · 나눗수 57 · 가격 30 · 범위 19 | | | +| 저장 줄 — 시스템 63 | 50 | 13 | 0 | 입력 필요 = 채움콘크리트량 7 · 높이감률 3 · t2 · 잡석량 · 가슴높이지름 · 지금 계 합 875,322(1 단위) | +| 개인 134 | 111 | 21 | 2 | 바뀜 = item5 GF000156(64,217,627 → 224,212) · SK-000011 GF000298(945,404 → 382,184) | +| 프로젝트 840 | 672 | 168 | 0 | 채움콘크리트량 98 · 높이감률 42 · t2 14 · 잡석량 14 | +| B09 사본 30 | 27 | 3 | 0 | 높이감률 · 채움콘크리트량 둘 | + +### 3-8 고를 갈래(사용자) + +| | 갈래 | 권함 | +|---|---|---| +| G1 | 표 찾기 칸 기본 = 표 첫 줄(입력 필요 263) / None(377) | 표 첫 줄(원문 안 값 · 확인 안 함 표지) | +| G2 | 입력 필요 줄이 있는 로직 · 일위대가 합 = 「—」 / 부분합 + 표지 | 「—」(부분합도 지어낸 금액) | +| G3 | 고르기 첫째 = 기본 그대로 · 예외(조종원직종 · 크레인 첫째 · 보정치)는 「기본」 칸으로 | 그대로 | +| G4 | 3-6 표 칸들 기본 승인 | 높이감률 0 · 구멍땜 0 먼저 | +| G5 | 옛 프로젝트 사본(B09) — 새 규칙을 바로 따름 / 사본 만들 때 기본값을 `입력값.json` 에 굳힘 | 바로 따름(영향 3 줄 · 「입력 필요」 표지) | + +--- + +## 4. 일감 나눔 · 지킴 시험 (할 일 4) + +### 4-1 일감 + +| 일감 | 파일(지금 줄 수) | 크기 | 차례 · 겹침 | +|---|---|---|---| +| **639-4 기본 후보 표 · 「기본」 칸 꼴** | `_틀.md` 7장 · `check_master.py`(576) 새 검사 둘 · 후보 표(211 칸 + 3-6 표) → 승인 뒤 로직 JSON 「기본」 | 검사 +15 줄 · 자료 | 먼저(읽기 · 표) → 사용자 승인 | +| **639-1 서버 뿌리** | `master_auto.py`(98) `defaults` · `sample` · `need_of` +30 · `M02_Labor_Doc.py`(687) `run_line` · `settle` +6(700 넘으면 `need_of` 를 master_auto 로) · `B09_Estimation_Sangeun.py`(679) :234 1 줄 · `M02_Sangeun_Views.py`(83) :29 · `M02_Sangeun_Calc.py`(604) :191 · `M02_Labor_Inputs.py`(120) :94 · 103 「기본값」 · 「입력필요」 · `M02_Logic_Standard.py`(364) :133 · SHAPE · `M01_MasterData_Store.py`(695) :563 → `mau.sample` 1 줄 · `master_formula.py` `fill_empty` :505-512 · `M02_DF_Convert.py`(431) :91 | 파일 열 · 각 1~30 줄 | 784-1(sub1 · `master_auto._uses`) push 뒤 | +| **639-2 맞춤 · 불러오기** | `M02_Hopyo_Option.py`(497) :122 · 155-163 · 482-488 · `M02_Hopyo_Line.py`(476) :76 · `M02_Hopyo_SkPatch.py`(518) :123 · 347 · 382 · 471 · `M02_Hopyo_Ours.py`(363) :127 · 180 · 267 · 297 · 지문 판 | 각 1~5 줄 · 맞춤 캐시 다시 셈 | 784-1 · 784-3(sub1 · 같은 파일) 뒤 · 639-1 뒤 | +| **639-3 화면** | `M01_MasterData_UI_Logic_Calc.ts`(346) :172-182 표지 · placeholder · `M02_Labor_Values.ts`(331) :29 · 55-65 · 191 · 240-249 · `M02_Labor_Values_Model.ts`(128) :36-37 · 114 · `M02_MasterTemplete_Labor_Calc.ts`(332) settle 짝 · `M02_MasterTemplete_Labor_RowSk.ts` :64 · 78-82 기본과 견줌 · `M02_DF_InputPanel_Build.ts`(672) :338 · `M02_MasterTemplete_Labor_Diagram.ts` :143 · `Hopyo_Choose.ts` :58 · `ui_template_item_picker_detail.ts` :110 · B09 · 고르기 창 「—」 | 글 · 표지 · 부품 상자만 | 639-1 뒤 | + +### 4-2 지킴 시험(새 `resources/tester/test_639_default_policy.py`) + +1. **1 이 들어가는 길 0(소스)**: 저장소 `*.py` 에서 `mau.values(` · `master_auto.values(` 부르는 곳 = 허용 목록(`build_재료_검색어.py` · `check_master` · `docs/raw/M01_입력목록/build.py` · `master_auto` 안 `sample`) 밖이면 실패. +2. **1 이 들어가는 길 0(값)**: 로직 1,513 개 `defaults` 값 ∈ {「기본」 칸 값 · 고르기 목록 · 0(가드 · 0 품은 범위) · 표 줄 값 · None} — 그 밖 Decimal 없음 · 가드 판정은 식으로(GC000185 타설깊이 = None). +3. GC001140 `run_line({운반무게: 575})` → 기준 None · 입력필요 ⊇ {운반거리} · 98,939,100 안 나옴 · 시험입력 전부 → 94,227. +4. GF000156 `{재료배합: (A), 골재최대치수: 40}` → 모래 0.493 · 자갈 0.573㎥(838 아님) · GF000298 빈 절취량 → 371,213. +5. 값 바뀜 목록 고정: 돈 로직 기본값 셈 ≠ 지금 자동값 셈인 것 = {GF000298 · GC000891 · GC000892 · GF000327 · GF000059 · GC001012} 만 · 같음 ≥ 1,181. +6. 시스템 층 전후: `resources/master_template/labor` 7 · `precombo/SC-000001` `labor.calc` — 같음 50 줄 계 그대로 · 입력 필요 13 줄 = 알려진 목록(G4 승인 뒤 줄어듦). +7. 입력 모달 `M02_Labor_Inputs._listed`: 「기본값」 에 고르기 · 표 · 0 · 「기본」 밖 수 없음 · 입력필요 칸 목록 있음. +8. 합: 입력 필요 줄 하나 → `settle` 합 「—」(G2) · TS 짝 같은 답(`test_m02_labor_calc_mirror` 꼴). +9. 맞춤: `Option.find` 「입력」 = 모든입력 · 봉화 단산91 GF000298 「맞음」 그대로 · 단산10 GC001140 0.547619(784-1 `test_635` 와 함께). +10. M01 `/logic/auto`: GC001140 값 = 시험입력(575 · 0 · 42 …) · 입력필요 [] · GC000452 입력필요 [점수]. +11. 함께 고칠 시험(입력 필요 · 값 바뀜 로직 키를 부름 · `s11_tests.py`): `test_155_5_sangeun_text` · `test_155_b09_sources` · `test_157_1_sangeun_steps` · `test_251_1_haul_groups` · `test_253_2_haul_cycle` · `test_263_1_haul_modal` · `test_276_1_haul_link_flow` · `test_277_1_haul_steps` · `test_704_logic_standard` · `test_704_settle` · `test_712_1_bundle` · `test_714_1_sheet_line` · `test_719_3_sangeun_cover` · `test_719_4_sangeun_sheet` · `test_740_1_library_flat` · `test_747_1_sk_material` · `test_750_1_sk_views` · `test_751_3_money_cut` · `test_753_1_option_off` · `test_item_copy_complete` · `test_m01_auto` · `test_m01_logic_flow_save` · `test_m01_pick` · `test_m01_search_words` · `test_m01_text` · `test_m02_hopyo_screen` · `test_m02_item_labor` · `test_m02_labor_logic_mats`(28) + `test_222_1_m02_apart`(머리 글 「자동값 1」) · `test_m02_df_convert:307`. +12. 공유 storage 전후(시험 아님 · 일감 안 한 번 · 자기 `tmp/`): `s08_policy.py` 그대로 다시 — 저장 줄 같음 861 · 입력 필요 205 · 값 바뀜 2 와 대조. + +--- + +측정 스크립트 · 결과(`tmp/brain_639/`): `s01_spec.py`(칸 꼴) · `s02_inputs.py` → `inputs.json` · `s03_sweep.py` → `sweep.json` · `s04_agg.py` · `s05_sens.py` → `sens.json` · `s06_partial.py` → `partial.json` · `s07_storage.py` → `storage_uses.json` · `s08_policy.py` → `policy_base.json` · `s10_policy_count.py`(`--strict` = G1 엄격) · `s11_tests.py` → `affected.json`. 코드 · 마스터 · storage · git · DB 는 고치지 않음.