fix(B09): 성토·성토면다짐에 단가가 서게 함 — 금액 없이 내역에 서 있던 두 줄
물량은 인계로 오는데 단가가 없어 성토 13,150.2㎥·성토면다짐 12,350.3㎡ 가 금액 없이 서 있었음. 원문에는 값이 다 있고 막힌 까닭만 서로 달랐음. - 노체포설(9-16-1): 기종이 [주]에만 있어 못 골랐음 → 흙깎기와 같은 장비 칸을 둠 (무한궤도 굴착기 0.7㎥, [주]① 그대로. 화면에서 바꿀 수 있음). - 비탈면 다짐(9-17-1): 표가 한 장도 없고 값이 절 제목에 있음(A = 77.7 ㎡/시간) → 제목·[주]에만 있는 작업량을 싣는 자리를 두고 원문 문구를 줄에 남김. - 부착 콤팩터(0240-0007)는 카탈로그에 이름이 비어 있어 손료가 안 붙고 있었음 — 이름 대신 분류번호로도 가림(조합 사용 넷은 그대로, 목록을 넓히지 않음). 금액: 성토 59,477,858원 · 성토면다짐 17,827,251원 (합 77,305,109원)이 새로 섬. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -255,10 +255,44 @@ def _machine_by_name(text: str, preferred_spec: str) -> tuple[str, str] | None:
|
||||
return (hits[0][0], hits[0][1].name) if len(hits) == 1 else None
|
||||
|
||||
|
||||
#: ⚠ **표가 아니라 절 제목·[주]에 작업량이 적힌 자리.**
|
||||
#: 9-17-1 은 표가 **아예 없고** 제목 줄이 값을 든다 — 「9-17-1. 비탈면 다짐 : **A = 77.7 ㎡/시간**」.
|
||||
#: 공종 마스터는 표만 절에 붙이므로 이런 자리는 **표가 0장인 공종**으로 남아 단가가 안 섰다
|
||||
#: (2026-09-09 밤 실측: 성토면다짐 12,350.3㎡ 가 금액 없이 내역에 서 있었다).
|
||||
#: ⚠ **값을 지어내지 않는다** — 아래 수·기종은 전부 원문 문구 그대로이고 그 문구를 함께 싣는다.
|
||||
#: ⓘ 마스터가 제목의 작업량까지 싣게 되는 날 이 표는 지운다(그때는 표 쪽이 정본).
|
||||
SOURCE_TEXT_CAPACITY: dict[str, tuple[dict[str, Any], ...]] = {
|
||||
"FP-09-17-01": (
|
||||
{
|
||||
"machine_code": "0201-0070",
|
||||
"machine_name": "굴착기(무한궤도)",
|
||||
"capacity_per_hour": Decimal("77.7"),
|
||||
"cell": "비탈면 다짐 A(㎡/hr)",
|
||||
"source_text": (
|
||||
"산림사업 표준품셈 9-17-1 「비탈면 다짐 : A = 77.7 ㎡/시간」 · "
|
||||
"[주]② 「굴착기 부착용 유압식 진동 콤펙터와 굴착기(0.7㎥)를 적용한다」"
|
||||
),
|
||||
},
|
||||
{
|
||||
"machine_code": "0240-0007",
|
||||
"machine_name": "유압식 진동콤팩터(굴착기 부착용, 0.7)",
|
||||
"capacity_per_hour": Decimal("77.7"),
|
||||
"cell": "비탈면 다짐 A(㎡/hr) — 부착 콤팩터",
|
||||
"source_text": (
|
||||
"산림사업 표준품셈 9-17-1 [주]② — 굴착기와 **함께** 도는 부착 장비라 "
|
||||
"같은 작업량으로 붙는다(품셈 제8장 [주]⑤ 조합 사용)."
|
||||
),
|
||||
},
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def direct_capacity_rows(node: dict[str, Any]) -> list[dict[str, Any]]:
|
||||
"""그 공종에서 **시간당 작업량을 직접 준 기계 줄**들.
|
||||
|
||||
돌려주는 것 — 기계 이름 칸 · 기종 코드/이름 · 시간당 작업량 · 묶음 배분율(%) · 원문 문구.
|
||||
|
||||
⚠ 표에서 읽은 것에 더해 **절 제목·[주]에만 적힌 자리**(`SOURCE_TEXT_CAPACITY`)도 함께 낸다.
|
||||
"""
|
||||
from B09_Estimation.B09_Estimation_MachineProductivity import parse_measure
|
||||
|
||||
@@ -299,4 +333,22 @@ def direct_capacity_rows(node: dict[str, Any]) -> list[dict[str, Any]]:
|
||||
"row_cells": [c for c in cells if c],
|
||||
}
|
||||
)
|
||||
|
||||
# 절 제목·[주]에만 있는 자리 — 표에서 이미 잡혔으면 **덧붙이지 않는다**(두 번 세지 않게).
|
||||
already = {row["machine_code"] for row in found}
|
||||
for entry in SOURCE_TEXT_CAPACITY.get(str(node.get("work_item_code") or ""), ()):
|
||||
if entry["machine_code"] in already:
|
||||
continue
|
||||
found.append(
|
||||
{
|
||||
"cell": entry["cell"],
|
||||
"machine_code": entry["machine_code"],
|
||||
"machine_name": entry["machine_name"],
|
||||
"capacity_per_hour": entry["capacity_per_hour"],
|
||||
"ratio_pct": None,
|
||||
"table_id": "",
|
||||
"row_cells": [],
|
||||
"source_text": entry["source_text"],
|
||||
}
|
||||
)
|
||||
return found
|
||||
|
||||
Reference in New Issue
Block a user