Files
Aislo/resources/master_data/ref/_분석_UnitPrice.md
T
eomsangdon acb8e4a042 knowledge(B09단가): UnitPrice.py 분석 — 걷을 대상 아님, old 자리 load_basis_missing 하나뿐
_걷을_옛코드.md 58행 실체 확인: B09_Estimation_UnitPrice.py는 부르는 곳 60여 곳(B08·B09·시험)의
살아있는 핵심 조립 엔진 — 이 파일 자체가 old/를 직접 읽는 자리는 load_basis_missing() 하나뿐이고
그마저 기본 파일명(산림 밑수없음) 한 벌만 실제로 쓰임(건설 벌은 死文). 조용한 실패 위험(old/ 지우면
예외 없이 빈 딕셔너리로 넘어가 밑수 검사가 사라짐) 하나를 찾아 걷는 차례와 함께 적음.
2026-09-22 07:58:56 +09:00

34 lines
4.8 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줄)은 이미 아무도 안 읽어 지금 걷어도 즉시 영향 없음 — 다만 건설 견적 기능이 나중에 켜질 때 필요한지는 그때 확인.