From c7554d833331bef5d013623dffd46d47e0b9690a Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 7 Sep 2026 20:53:14 +0900 Subject: [PATCH] =?UTF-8?q?fix(B09):=20=EC=A1=B0=EC=A2=85=EC=9B=90=20?= =?UTF-8?q?=EB=85=B8=EC=9E=84=20=EB=82=98=EB=88=97=EC=88=98=208=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9D=84=20=ED=92=88=EC=85=88=20=EA=B7=BC=EA=B1=B0?= =?UTF-8?q?=EB=A1=9C=20=EB=AA=BB=20=EB=B0=95=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 배분 창이 「관측 55,700 ÷ 일당 283,297 = 5.09시간」을 짚어 확인함. 품셈을 뒤진 결과: - **8시간이 맞음** — 품셈 8-1-6 기계손료 단서 「관리비는 1일 8시간 초과해도 8시간으로 계산」이 1일을 8시간으로 잡고, 노임표도 `hours_per_day: 8` 임. - **관측이 짧은 나눗수를 쓴 것으로 보임** — 작업효율 `E`(실작업시간율)를 시간당 사용료에 미리 반영한 것. 품셈에서 작업효율은 **작업량 산정**(`Q = n·q·f·E`, 8-1-4)에 들어가지 시간당 사용료에 안 들어감. **관측에 맞추려 나눗수를 바꾸지 않음**(★법대로). - ⇒ **조종원 직종 의문은 해소됨** — 직종(건설기계운전사)은 맞고 나눗수만 달랐음. 잠정 표시는 「직종명이 품셈 8-4 표에 없음」 사유로만 남김. - 근거·경위를 상수 주석에 적고 테스트로 박음(`OPERATOR_HOURS_PER_DAY == 8`, 관측값보다 작다는 것까지 확인). 자체검증 — `pytest tmp/tests/ -q` 110 passed · ruff 통과. Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_MachineCost.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/B09_Estimation/B09_Estimation_MachineCost.py b/B09_Estimation/B09_Estimation_MachineCost.py index 81b0dca1..d9f71888 100644 --- a/B09_Estimation/B09_Estimation_MachineCost.py +++ b/B09_Estimation/B09_Estimation_MachineCost.py @@ -33,6 +33,18 @@ _CATALOG_SUBPATH = ("resources", "data_cost_input_value") _THOUSAND = Decimal(1000) +#: 조종원 노임을 시간당으로 바꿀 때 나누는 시간. +#: 근거 — 품셈 8-1-6 기계손료 단서 「**관리비는 1일 8시간 초과해도 8시간으로 계산**」이 +#: 1일을 8시간으로 잡는다. 노임표도 `hours_per_day: 8` 이다. +#: ⚠ **실무 관측은 이보다 짧은 시간으로 나눈 사례가 있다** — STC 2024 관측 +#: 굴착기 0.7㎥ 노무 55,700 원/hr 은 건설기계운전사 일당 283,297 을 **약 5.09시간**으로 +#: 나눈 값이다(작업효율 `E`(실작업시간율)를 시간당 사용료에 미리 반영한 것으로 보임). +#: 품셈에서 작업효율은 **작업량 산정**(`Q = n·q·f·E`, 8-1-4)에 들어가지 시간당 사용료에 +#: 들어가지 않으므로 **8시간을 유지한다.** 관측에 맞추려 나눗수를 바꾸지 않는다 +#: (★법대로 PLAN 8-10). TODO(미결 PLAN 9-6): 발주처가 실가동시간을 요구하는 사례 확인. +OPERATOR_HOURS_PER_DAY = 8 + + class MachineCostError(LookupError): """기계경비를 세울 수 없는 경우. 0 으로 때우지 않고 멈춘다.""" @@ -147,7 +159,7 @@ def hourly_machine_cost( fuel_liters_per_hour: Decimal | None = None, fuel_price_per_liter: Decimal | None = None, operator_daily_wage: Decimal | None = None, - operator_hours_per_day: int = 8, + operator_hours_per_day: int = OPERATOR_HOURS_PER_DAY, ) -> HourlyMachineCost: """시간당 사용료 한 시간분.