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

4.8 KiB
Raw Blame History

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