feat(b09): 재료비목록표 = 쓰는 자재만 · 수량 = 역전개 총수량 · 비고 = 쓰는 곳 (183-1)
- 수요: 사본 일위대가 자재 · 굳힌 사전조합 자재 코드도(Linked.used_keys) → 대가 재료 줄 단가가 MT 줄에서 남 - 두 번 셈(Router.compute_twice): 1차 셈 → 대가 · 산근 · 중기 재료 줄 · B08 줄 · 관급 · 별도 줄만 남김(Summary.used_materials) · 1차 역전개 총수량 = material_qty → 2차 셈 - 수량 원천: Calc_Base 짝 material_sheet 가 material_qty(없는 키 빈칸) · 없으면 입력 줄 수량(거울) - 화면: 비고 = 쓰는 곳(대가 · 산근 · 중기 n호표 · 내역 자재대) · 안내 글 - 실측 엄상준_검증: 141 → 24줄 · 목록 수량 = 재료비수량금액집계표 수량 · 목록표에 없음 0 - 시험: test_183_b09_material_list Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SE9MxeXTu2uaDZ55BJowAY
This commit is contained in:
@@ -13,8 +13,11 @@
|
||||
· 견적 = 사용자 손입력(quote · quote_page · 견적서 파일은 `B09_Estimation_Router_Quotes`)
|
||||
· 관급 · 별도계상 = 사용자 표시(없으면 입력 줄 기본 · B08 파형강관 = 관급)
|
||||
→ 재료비목록표 단가 = 적용 단가
|
||||
재료비목록표 = 수량(B08 총괄자재수량집계표 합계 열) × 적용 단가 = 총액 ROUND(·, 0)
|
||||
(엑셀 재료비수량금액집계표 G 열 자리 · 수량 · 단가 하나라도 빈칸이면 빈칸)
|
||||
재료비목록표 = 수량 × 적용 단가 = 총액 ROUND(·, 0)
|
||||
(엑셀 재료비수량금액집계표 G 열 자리 · 수량 · 단가 하나라도 빈칸이면 빈칸) · 수량 =
|
||||
입력 `material_qty`(183-1 · 서버 1차 셈 역전개 총수량 = 재료비수량금액집계표 수량 ·
|
||||
없는 키 빈칸) ·
|
||||
`material_qty` 가 없으면 입력 줄 수량(B08 총괄 합계 열)
|
||||
중기사용료 = 손료(경비 · 기준가 천원 × 손료계수 ÷ 10,000) + 운전사(노무 · 인 × 시간 노임)
|
||||
+ 연료(재료 · ℓ/hr × 적용 단가) + 잡품(재료 · 연료 금액 × % ÷ 100)
|
||||
줄 = ROUNDDOWN(단가 × 수량, 1) · 비목 합 = ROUNDDOWN(Σ, 0) → 중기목록표
|
||||
@@ -178,14 +181,18 @@ def compare_sheet(
|
||||
return rows
|
||||
|
||||
|
||||
def material_sheet(compare: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
||||
"""재료비목록표 — 단가 = 대비표 적용 단가 · 총액 = ROUND(수량 × 단가, 0)."""
|
||||
keep = ("no", "key", "name", "spec", "unit", "supply", "origin", "qty")
|
||||
def material_sheet(
|
||||
compare: list[dict[str, Any]], qty_of: dict[str, Any] | None = None
|
||||
) -> list[dict[str, Any]]:
|
||||
"""재료비목록표 — 단가 = 대비표 적용 단가 · 수량 = `qty_of`(183-1) ?? 줄 수량 ·
|
||||
총액 = ROUND(수량 × 단가, 0)."""
|
||||
keep = ("no", "key", "name", "spec", "unit", "supply", "origin")
|
||||
rows = []
|
||||
for row in compare:
|
||||
price, q = row["applied"], row["qty"]
|
||||
price = row["applied"]
|
||||
q = row["qty"] if qty_of is None else num(qty_of.get(row["key"]))
|
||||
amount = None if price is None or q is None else round_half(q * price, 0)
|
||||
rows.append({**{k: row[k] for k in keep}, "price": price, "amount": amount})
|
||||
rows.append({**{k: row[k] for k in keep}, "qty": q, "price": price, "amount": amount})
|
||||
return rows
|
||||
|
||||
|
||||
@@ -328,7 +335,7 @@ def compute_base(inputs: dict[str, Any], user: dict[str, Any]) -> dict[str, Any]
|
||||
"expense": expense,
|
||||
"basis": basis,
|
||||
"compare": compare,
|
||||
"material": material_sheet(compare),
|
||||
"material": material_sheet(compare, inputs.get("material_qty")),
|
||||
"machine_blocks": blocks,
|
||||
"machine": machine,
|
||||
"gaps": gaps,
|
||||
|
||||
Reference in New Issue
Block a user