feat(b08,b09): 사급 자재총괄 줄이 수동 단가로 내역 본체 「자재(사급)」 줄이 됨 · 기본 사급 · 이중계상 가드(코드 우선) · 규준틀 재료 이름/규격 가름(할증 각재 5·판재 10) · 할증 보류·이름 없음 사유 · 할증 「이내」 칸 서버

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn
This commit is contained in:
2026-09-14 10:41:19 +09:00
co-authored by Claude Opus 5
parent 57a949c624
commit e6e6f9b7d5
18 changed files with 468 additions and 61 deletions
+8 -3
View File
@@ -503,10 +503,15 @@ async def get_bill(project_id: UUID) -> JSONResponse:
from common_util.common_util_project_settings import estimation_settings
root = await _project_root_of(project_id)
rates = normalize((estimation_settings(root) if root else {}).get("edits")).get(
"bill_rates"
stored = estimation_settings(root) if root else {}
rates = normalize(stored.get("edits")).get("bill_rates")
result = build_bill(
payload,
build=build,
structure_prices=structure_prices,
rates=rates,
material_prices=stored.get("material_prices"),
)
result = build_bill(payload, build=build, structure_prices=structure_prices, rates=rates)
except DoubleCountError as error:
# 이중계상 감시에 걸린 경우 — 표를 그리지 않고 멈춘다.
logger.warning("B09 내역서 이중계상 감지: project_id=%s, %s", project_id, error)