fix(B08): 사토 운반도 자연상태로 세움

- 되돌린 값(natural_m3_by_ground)이 오면 그 값으로 서고 상태를 사유에 적음
- 안 오면 다짐 그대로 두고 「내역 수량은 자연상태여야 함」을 사유로 냄
- tmp/tests 2건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-09 07:16:06 +09:00
co-authored by Claude Opus 5
parent 9b9367a118
commit 49fb30f61f
@@ -72,11 +72,22 @@ def spoil_haul_rows(
reason = DISTANCE_MISSING if blocked else ""
note = spoil.get("note") or ""
# 갈래별로 나눠 세운다 — 덤프 단가가 토사·암으로 갈린다. 갈래가 안 오면 종전처럼 한 줄.
# ⚠⚠ **내역 수량은 자연상태다**(`config_system_design` 5-4-3). 사토 잔량은 유토곡선이
# 쌓은 다짐상태라 되돌린 값(`natural_m3_by_ground`)이 오면 **그 값으로 선다**.
# 갈래를 못 붙인 몫은 되돌릴 계수가 없어 다짐 그대로 서고, 그 사실이 사유에 남는다.
returned = spoil.get("natural_m3_by_ground") or {}
natural_basis = bool(returned)
source_map = returned if natural_basis else (spoil.get("by_ground_m3") or {})
by_ground = {
GROUND_KEYS[key]: float(value)
for key, value in (spoil.get("by_ground_m3") or {}).items()
for key, value in source_map.items()
if key in GROUND_KEYS and float(value or 0.0) > 0
}
state_note = (
"자연상태(유토곡선이 ÷C 로 되돌린 값)"
if natural_basis
else "⚠ 다짐상태 그대로 — 되돌린 값이 아직 안 옴(내역 수량은 자연상태여야 함)"
)
# 갈래별 거리 — 사토장이 놓였으면 그 값이 이긴다(정확한 값이 이김).
by_distance = {
GROUND_KEYS[key]: float(value)
@@ -98,7 +109,9 @@ def spoil_haul_rows(
reason if leg_blocked else "",
note,
ground=label,
extra=DISTANCE_FROM_SETTING if leg is None else DISTANCE_FROM_SITE,
extra=" · ".join(
(DISTANCE_FROM_SETTING if leg is None else DISTANCE_FROM_SITE, state_note)
),
)
)
if unknown > 0: