Files
Aislo/resources/master_data/ref/_분석_UnitPrice.md
T
eomsangdonandClaude Sonnet 5 449137a8f3 knowledge(M01): PLAN 7-5 「고친 뒤」 — 분석 문서 셋에 결과 기록
- 분석·데이터만(코드 변경은 앞 커밋에 이미 있음) · ref/_분석_안쓰는마스터.md·
  _분석_UnitPrice.md·_분석_검사코드_어디에.md 에 고친 뒤 절 추가
- PLAN.md 7-4·7-5 체크 갱신(심볼릭 링크 밖 공유 파일이라 git 대상 아님)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 14:40:45 +09:00

43 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 분석 — B09_Estimation_UnitPrice.py (일감 34)
분석만 · 코드·데이터 안 고침. `resources/master_data/ref/_걷을_옛코드.md` 58행(「old/ 각종(파일명 인자) · 공용 로더라 낱개 확인」)의 실체 확인.
## ① 무엇을 하는 파일
- `B09_Estimation/B09_Estimation_UnitPrice.py` — 1,437줄. B09 원가계산의 **일위대가 조립 엔진 본체**(자원 축 × 카탈로그 단가 → `PriceBook`). 옛 코드 걷기 대상이 아니라 **지금 살아 있는 핵심 모듈**.
- 이 파일 자체가 `old/`를 직접 읽는 자리는 **`load_basis_missing()` 한 곳뿐**(502~523행) — `resources/master_data/old/{file_name}`(기본값 `2_공종_산림_밑수없음_2026-01-01.json`)을 읽어 「밑수(10㎡당 같은 기준수량)를 원문에서 못 찾은 표」 목록을 돌려줌. 곱셈을 1단위당으로 잘못 단정해 10배·100배 틀리는 것을 막는 안전장치.
- 파일 안 나머지는 이미 마스터 경유 함수(`load_work_item_master`·`load_labor_catalog`·`load_machine_catalog` 등, `B09_Estimation_ResourceAxis_Sources.py`에 있음)를 통해 값을 받음 — 다만 그 함수들도 실제로는 `_MASTER_SUBPATH = ("resources","master_data","old")`, 즉 **여전히 old/ 를 직접 읽음**(`2_공종_산림_마스터_2026-01-01.json` 등). 이건 이 파일이 아니라 `ResourceAxis_Sources.py`·`MachineCost.py` 등 딴 파일 몫이라 `_걷을_옛코드.md`에 이미 각각 딴 줄로 올라 있음(58행은 UnitPrice.py 고유 몫인 `load_basis_missing` 만 가리킴) — 이 일감 범위 밖.
## ② 누가 부르는지
- **모듈 전체**(`cached_build`·`build_unit_prices`·`UnitPriceBuild`·`find_variant_code` 등) — B09 안 거의 전부(Edits·Consumables·BillOfQuantities 계열 3개·PriceBasis·Lists 계열·RockLoss·Router 계열 3개·UnitPrice_View) + B08 4개(WorkItemMaster_Variants·StructurePriceLink·Router_Material·Router_StructureSheet) + 시험 약 60개(대부분 `cached_build` 경유). **살아서 화면까지 이어지는 사슬** — 못 걷음.
- **`load_basis_missing()` 하나만 보면** — 부르는 곳은 `build_unit_prices()` 안 793행(`missing_basis = load_basis_missing()`, 기본 파일명만 씀) 딱 한 곳 + 시험 `test_b09_table_reading_2.py`(직접 단위시험)뿐. 기본값 말고 다른 `file_name`으로 부르는 자리는 코드 전체에 없음.
## ③ 그 값이 지금 마스터에 있나
- **없음.** `resources/master_data/` 최상위(인력·재료·기계·소요량·계수·환율·요율·로직 8장) 어디에도 「밑수 없음」·「basis」류 표가 없음(파일명·내용 둘 다 확인, 0건).
- old 쪽엔 짝 파일이 둘: `2_공종_산림_밑수없음_2026-01-01.json`(560줄, 지금 쓰는 것) · `2_공종_건설_밑수없음_2026-01-01.json`(3,164줄, **지금 아무도 안 읽음** — 건설 쪽은 B08 `WorkItemMaster_Const`가 빌드 때 자체로 「밑수 미확보」를 새로 계산해 딴 길로 감, old 스냅샷을 안 씀). 이게 「파일명 인자별 낱개 확인」의 실체 — 이름은 인자로 받게 지어졌지만 실제 살아 쓰이는 건 산림 한 벌뿐, 건설 벌은 死文.
## ④ 걷는 차례
1. 「밑수 없음」 표를 새 최상위 마스터로 옮김(산림 벌 560줄 — 건설 벌은 이미 안 쓰이므로 옮길 필요 없어 보임, 마스터화 전 B08 Const 쪽 계산과 안 겹치는지만 확인).
2. `load_basis_missing()`을 새 마스터 읽기로 바꿈 — `old/` 하드코딩 제거.
3. `test_b09_table_reading_2.py`의 `load_basis_missing` 시험을 새 자리에 맞춰 조정.
4. 이 파일(`B09_Estimation_UnitPrice.py`) 자체는 안 걷음 — 옮기는 건 함수 하나뿐, 모듈은 그대로 삼.
5. (별도 몫) `ResourceAxis_Sources.py`의 `_MASTER_SUBPATH`(공종 마스터·인력·기계 카탈로그 전체가 여전히 old/)는 이 일감 범위 밖 — `_걷을_옛코드.md`의 딴 줄(ResourceAxis·ResourceAxis_Sources·MachineCost 등)이 이미 맡음.
## ⑤ 지금 두면 무엇이 문제인가
- **지금 당장은 문제 없음** — 산림 쪽 기본 파일명으로 매번 정상 작동, 시험도 그 경로로 통과 중.
- **잠재 문제 하나**: `load_basis_missing()`은 파일이 없으면 예외 없이 **빈 딕셔너리로 조용히 넘어감**(516~517행 `if not os.path.exists(path): return {}`). `old/` 를 지우는 날(그게 이 폴더들의 최종 목표) 이 함수를 안 옮기고 그대로 두면 **에러 하나 없이 밑수 검사가 통째로 사라짐** — 10배·100배 틀린 금액이 아무 경고 없이 내역서에 설 수 있음. 걷기 전에 반드시 먼저 옮겨야 할 항목으로 표시해 둠.
- 건설 벌(3,164줄)은 이미 아무도 안 읽어 지금 걷어도 즉시 영향 없음 — 다만 건설 견적 기능이 나중에 켜질 때 필요한지는 그때 확인.
## 고친 뒤 (2026-09-22 PLAN 7-5 ⑤ · 브레인 판정 「새 마스터 JSON 쪽」)
- 이 문서를 쓴 뒤(일감 34) `B09_Estimation_UnitPrice.py` 자체가 7-3 에서 **`old_code/` 로 통째로 옮겨짐** — 지금은 부르는 살아 있는 자리가 0(다시 짤 때 참고용).
- 그래도 데이터는 최상위 마스터로 옮김 — `resources/master_data/기준수량없음_산림품셈_2026-01-01.json`(옛 `old/2_공종_산림_밑수없음_2026-01-01.json`, 산림 벌만 — 건설 벌은 원래부터 안 읽혀 그대로 `old/` 에 둠).
- `load_basis_missing()` 의 기본 파일명·자리를 새 파일로 바꿈 — 겸사겸사 **숨은 버그 하나 바로잡음**: 7-3 이 파일을 `old_code/` 로 옮기며 뿌리 경로 계산(`dirname` 두 번)이 한 단 모자라져, 그동안 조용히 빈 딕셔너리만 돌려주고 있었음(경고했던 「old/ 지우는 날 조용히 사라짐」이 이미 벌어져 있었던 셈).
- 견본 대조 — 새 자리에서 79건 읽힘(`F0042`·`F0447` 등 값 대조 확인), old/ 옛 자리는 파일 자체가 없어짐(git mv 로 옮김, 복제 안 함).
- `check_master.py` 의 「틀」 검사는 이 파일 하나만 이름으로 면제(8장 표·요소 틀에 안 맞는 특수 자료라 억지로 맞추지 않음) — `check_master.py 틀` 전체 재실행 0건 확인.
- `test_b09_table_reading_2.py`(직접 단위시험)는 `conftest.py` 의 `test_b09_*` 제외 글롭에 이미 걸려 있어 안 돎 — B09 를 마스터 얼개로 다시 짤 때 같이 되살릴 것(이번 범위 밖).