- 구성행(sheet_rows): 수량 고치기 · 줄 빼기(수량 0, 흐리게) · 줄 더하기(단가표 고르개) — 비율 줄·돌림 참조는 받지 않음
- Q 식(price_basis_q): 식은 명세 13장 식 언어 — B08 구조물도 풀이기(evaluate_sheets, Node 한 벌)를 그대로 부름 ·
소수 2자리 사사오입 확정 → 새 수량 = 수량 × 옛 Q ÷ 새 Q · 비고에 「Q(사용자) = 식 = 값」
· PriceDetail.output(시공능력 Q)을 Q 로 선 장비 줄 넷 자리(굴착기·도자·직접 작업량·암 잎)에서 실음 · 저장 모양에도 실음
- 따로 짰던 파이썬 식 셈(B09_Estimation_Expression)은 걷어냄 — 식 풀이 두 벌 금지(브레인 판정)
- 새 문: GET /estimation/edits/sheet/{code}(본표 + 줄마다 고친 값 표시) · GET /estimation/edits/search(줄 더하기 고르개)
- 화면: 본표 [편집] — 수량 칸 · ✕ · Q 식 칸 · 줄 더하기 · 고친 줄 「사용자」 + ↺
- 검증: 시험 1664 통과 · 골든셋 초록 · ORCA — 제 3 호표 보통인부 0.023→0.046 이면 5,652→9,610 · 내역 본체 122,848,989→122,857,198,
↺ 뒤 5,652 · 산근 2호표 Q 58.21→116.42 이면 1,695→847, ↺ 뒤 1,695 · 틀린 식 422 「모르는 이름: abc」 · 고친 값 {} 로 복구
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016VBGFXB9AbJBwXP19z75Qq
36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
"""B09 Q 식 편집이 쓰는 식 — **명세 13장 식 언어**(B08 구조물도 풀이기 한 벌)로 풀고 소수 2자리 사사오입.
|
||
|
||
⚠ 2026-09-14 브레인 판정 — 식 풀이를 B09 에 두 벌 짜지 않음. 종전 `B09_Estimation_Expression`(파이썬 셈)은 걷어냄.
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from decimal import Decimal
|
||
|
||
from B09_Estimation.B09_Estimation_Edits import evaluate_q
|
||
|
||
|
||
def test_실무_Q_식을_명세_13장_언어로_풀고_2자리로_확정한다() -> None:
|
||
got = evaluate_q(
|
||
{
|
||
# 18번 §2.2 — f 는 0.85 로 먼저 확정해 넣음 → 15.708 → 15.71
|
||
"a": "3600*0.2*0.7*0.85*0.55/15",
|
||
# 울진 대흥 제15호표 되메우기 Q 68.04
|
||
"b": "3600*0.7*0.9*(1/1.25)*0.75/20",
|
||
# 콘크리트믹서 Q = 60 / t × q × E = 5.40
|
||
"c": "60/4*0.45*0.8",
|
||
"d": "MAX(12.345, SQRT(100))",
|
||
}
|
||
)
|
||
assert got == {
|
||
"a": Decimal("15.71"),
|
||
"b": Decimal("68.04"),
|
||
"c": Decimal("5.4"),
|
||
"d": Decimal("12.35"),
|
||
}
|
||
|
||
|
||
def test_모르는_이름·0_이하는_까닭으로_돌려준다() -> None:
|
||
got = evaluate_q({"x": "abc+1", "y": "0*5", "z": "1/0"})
|
||
assert all(isinstance(value, str) and value for value in got.values()), got
|