Files
Aislo/resources/tester/test_b10a_rules_visible_b05_b09.py
eomsangdonandClaude Opus 5 475ad7875e feat(b08·b05·b09): 10-A 우리가 정한 SW 규칙을 화면에 드러냄 — 훑기 21건 중 안 보이거나 반만 보이던 13건 채움 + 9-21 제근 굴착기 크기 칸
- 문구 못박음 셋: ① 옹벽 높이 칸 밑 「기본값 · 소광리 도면 H=2.0 · 바꿀 수 있음」(등록부 default_basis 를 모든 칸 밑 회색 한 줄로) · ② 일반관리비 「임도가 어느 쪽인지 규정이 없어 (주)공사 기본 · 칸에서 바꿀 수 있음」 · ③ 모르타르 배합 「산림품셈에 배합 절이 없어 건설품셈 [건축] 9-1-1 을 씀(교차 참조)」
- B08: 막자갈 비고 「칸을 새로 두는 것은 B05 등록부 몫」 · 일위대가 머리 5단 한도 · 야면석 계수 칸 밑 「돌 종류는 그대로」 · 식 저장 전 상태 줄 「제원을 바꿔도 따라감」 · 양식 장 머리 「반올림은 m당 값에 걸고 수량 = m당 × 연장」
- 산출 조건 제근 굴착기 크기 칸(임목축적 등급 밑 · 「안 정함」 · 회색 제안 0.7㎥ + 근거 + [제안값 넣기] 누른 때만) — 936be972 소림 + 0.7 → 뿌리뽑기 55원/㎡ × 17,873.80㎡ = 983,057원(되돌림)
- 라이브러리 이름표: [내 라이브러리에 저장]·[발행] 창이 장 이름(종류 + 제원 요약)을 채워 묻고 고친 이름으로 저장 · 취소면 안 씀 · 비우면 양식 이름
- B05 계곡 통과 시설 폼 머리 「[저장]은 이 폼에 있는 칸만 바꿈 — 폼에 없는 칸은 그대로 둠」 · B09 폐기물처리비 자리 칸 밑 「법정경비 밑수에는 안 넣음」 · 내역서 「금액을 못 세운 줄」 첫 줄 「사유는 아래 단계가 낸 것을 그대로 옮김」
- 남은 하나(표 형태 66표 까닭 form_basis 화면)는 자원 축 파일을 거쳐야 해 브레인 물음

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016VBGFXB9AbJBwXP19z75Qq
2026-09-14 19:44:18 +09:00

60 lines
2.4 KiB
Python

"""10-A — 우리가 정한 SW 규칙을 화면에 드러내기(B05·B09 몫) · 2026-09-14 사용자 확정 · PLAN 12장.
번호는 PLAN 10장 「✅ 사용자 확정 — SW 규칙」 줄 차례. 문구 못박을 셋(①②③)은 글자 그대로 봄.
"""
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def _read(path: str) -> str:
return (ROOT / path).read_text(encoding="utf-8")
def test_11_일반관리비_문구_못박음() -> None:
from B09_Estimation.B09_Estimation_CostSheet import FIELD_HINTS
assert FIELD_HINTS["overhead_class"] == (
"임도가 어느 쪽인지 규정이 없어 (주)공사 기본 · 칸에서 바꿀 수 있음"
)
def test_13_모르타르_배합_교차_참조_문구() -> None:
from B09_Estimation.B09_Estimation_WorkItems_AX import MORTAR_MIX, WORK_ITEMS
assert WORK_ITEMS[MORTAR_MIX]["basis"].startswith(
"산림품셈에 배합 절이 없어 건설품셈 [건축] 9-1-1 을 씀(교차 참조)"
)
def test_15_폐기물처리비는_법정경비_밑수에_안_넣음() -> None:
from B09_Estimation.B09_Estimation_CostSheet import FIELD_HINTS
assert "법정경비 밑수(직접공사비·노무비)에는 안 넣음" in FIELD_HINTS["waste_placement"]
def test_17_옹벽_높이_기본값_문구와_칸_밑_근거() -> None:
types = json.loads(_read("B05_Profile/B05_Profile_Structure_Types.json"))
wall = next(t for t in types["types"] if t["type_id"] == "retaining_wall")
height = next(o for o in wall["options"] if o["key"] == "height_m")
assert height["default_basis"] == "기본값 · 소광리 도면 H=2.0 · 바꿀 수 있음"
# 칸 밑 근거 한 줄 — 등록부 폼이 `default_basis` 를 칸 밑에 그림
assert "field(label, input, option.default_basis)" in _read(
"B05_Profile/B05_Profile_UI_Structures_Panel.ts"
)
def test_19_시설_저장은_폼에_없는_칸을_그대로_둠() -> None:
assert "폼에 없는 칸(집계표·구조물도로 적은 값)은 그대로 둠" in _read(
"B05_Profile/B05_Profile_UI_Drainage_Facility.ts"
)
def test_20_막힌_사유는_아래_단계_것을_그대로() -> None:
assert 'hint(L("B09_Sheet_Missing_Passed"))' in _read(
"B09_Estimation/B09_Estimation_UI_Tab_Bill.ts"
)
assert "그대로 옮김 — 여기서 새로 짓지 않음" in _read("ui_template/ui_template_locale_b3.ts")