feat(B09): 각종 중기경비계산서 — 기종마다 한 장

별표2 (5)(가) 아홉째. 중기목록표가 「얼마」라면 이 장은 「왜 그 값인가」임.
원가계산 → 중기 탭의 목록표 아래에 붙음.

- 기종마다 취득가·내용시간·손료계수(상각·정비·관리) → 시간당 손료 · 주연료와 유가 ·
  조종원 일당과 시간당 환산 · 시간당 사용료 3분할을 차례로 보임.
- 내역에 실제로 선 기종만 냄(카탈로그 613 을 다 뿌리지 않음).
- 부착 장비(브레이커·콤팩터·집게)는 손료만 드는 것이 정상이라 결함으로 안 셈
  — 제 엔진이 없어 연료·조종원이 본체에 듦(건설품셈 제8장 [주]⑤).
- 수송비는 이 장에 안 붙임 — 「회당」으로 서는 별개 공종이라 자리만 가리킴.
- 계산서 합계가 일위대가가 실제로 쓰는 값과 같은지 시험으로 못 박음(두 벌 방지).

⇒ 「설계서 구성」의 중기경비계산서가 반쪽 → 있음으로 바뀜(법이 정한 13 중 8 이 섬).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-09 23:45:54 +09:00
co-authored by Claude Opus 5
parent 6cf7de9e82
commit 23f9656e91
7 changed files with 406 additions and 7 deletions
+20
View File
@@ -319,6 +319,26 @@ async def get_price_sources(project_id: UUID) -> JSONResponse:
)
@router.get("/{project_id}/estimation/machine-expense")
async def get_machine_expense(project_id: UUID) -> JSONResponse:
"""**각종 중기경비계산서** — 기종마다 한 장(별표2 (5)(가) 아홉째).
중기목록표가 「얼마」라면 이 장은 **「왜 그 값인가」**다 — 취득가·손료계수·연료·조종원을
그대로 보인다.
"""
from B09_Estimation.B09_Estimation_MachineExpenseSheet import machine_expense_report
try:
build = await _build_for(project_id)
return JSONResponse(content={"status": "success", **machine_expense_report(build)})
except Exception:
logger.exception("B09 중기경비계산서 실패: project_id=%s", project_id)
return JSONResponse(
status_code=500,
content={"status": "error", "message": "중기경비계산서를 못 만들었습니다."},
)
@router.get("/{project_id}/estimation/design-doc-index")
async def get_design_doc_index(project_id: UUID) -> JSONResponse:
"""**설계서 구성표** — 법이 정한 목차와 우리가 내는 것을 맞대 본다(별표2 (5)(가)).