Files
Aislo/resources/tester/test_b08_master_basis_person.py
T
eomsangdonandClaude Opus 5 d7cb14f416 test(B08): tmp/tests 중 tester 에 없던 47 개를 resources/tester 로 옮김
tmp/ 가 창끼리 안 건너가는 것이 확정돼(랩탑이 시간 두고 두 번 확인) 시험·예외가
저절로 건너가도록 git 안으로 옮김. 사용자 확정.

- 내용은 하나도 안 고침 — 자리만 옮김. tmp/tests 는 남겨 둠.
- 같은 이름이 이미 있던 64 개는 랩탑 것을 그대로 두고 건너뜀.
- helper_b05_*.js 둘은 랩탑이 .cjs 로 이미 올린 것과 **줄바꿈만 다른 같은 내용**이라
  복사본을 도로 뺌(시험이 .cjs 를 부름).
- resources/tester/ 에서 전체 1176 통과 · 29 건너뜀 · 실패 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 17:15:57 +09:00

80 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""마스터 밑수 판독 — 「인」과 「칸 이어붙임」 두 자리 (2026-09-09).
⚠⚠ **「인」은 품의 단위이지 공종 밑수가 아니다.** 원문 대조로 넷이 오독으로 드러났다 —
8-6-2 드론방제·8-6-3 지상방제 「(단위 : 인)」(그 「인」은 **소요인력**) ·
13-2-4 야면석 채집 「(단위: 인 당)」(표 안이 **㎡당·㎥당** 두 줄).
⚠ 넓게 「인」을 버리면 **2-2-5 천공기가 사라진다** — 「천공인부 **1인당** 1대」는 숫자가 붙었다.
⇒ **숫자가 붙었을 때만** 인정한다.
⚠⚠ **칸을 이어 붙여 읽지 않는다.** 앞 칸의 **값**과 뒤 칸의 **단위**가 붙어 없는 밑수가 생겼다 —
13-2-4 … 0.28 | **0.36** **㎥당** | 0.60 … ⇒ 「0.36㎥당」(원문에 없는 값)
5-19-2 15 | **30**(표토두께 ㎝) **㎥ 당** | … ⇒ 「30㎥당」(두께를 밑수로 읽음)
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT))
from B08_Quantity.B08_Quantity_Build_WorkItemMaster import ( # noqa: E402
detect_basis,
person_basis_ok,
)
MASTER = json.loads(
(ROOT / "resources" / "data_work_item_master" / "work_item_master_2026-01-01.json").read_text(
encoding="utf-8"
)
)
def 밑수(code: str) -> list[tuple]:
for item in MASTER["work_items"]:
if item["work_item_code"] == code:
return [
(t.get("basis_unit"), t.get("basis_quantity")) for t in (item.get("tables") or [])
]
return []
def test_숫자가_붙어야_인을_인정한다() -> None:
assert person_basis_ok("1", "인") is True
assert person_basis_ok("", "인") is False
assert person_basis_ok(None, "인") is False
# 「인」이 아닌 단위는 숫자가 없어도 그대로 — 종전 동작을 안 바꾼다.
assert person_basis_ok("", "㎥") is True
def test_방제_둘은_밑수가_안_선다() -> None:
"""「(단위 : 인)」은 소요인력이지 밑수가 아니다 — 미확보가 정직하다."""
assert all(unit != "인" for unit, _ in 밑수("FP-08-06-02"))
assert all(unit != "인" for unit, _ in 밑수("FP-08-06-03"))
def test_천공기는_그대로_선다() -> None:
"""⚠ 넓게 버리면 사라지는 자리 — 「천공인부 1인당 1대」는 숫자가 붙었다."""
assert ("인", 1.0) in 밑수("FP-02-02-05")
def test_칸을_이어_붙여_읽지_않는다() -> None:
"""앞 칸 값 + 뒤 칸 단위 = 없는 밑수. 두 실례를 그대로 잰다."""
table = {
"headers": ["뒷 길 이(㎝)", "25", "35", "45", "55", "60", ""],
"rows": [["인 부", "㎡당", "0.11", "0.17", "0.22", "0.28", "0.36"], ["㎥당", "0.60"]],
}
assert detect_basis(table) == (None, None)
두께표 = {
"headers": ["구 분", "직 종", "표 토 두 께(㎝)", "비고", ""],
"rows": [["15", "30", "", "", ""], ["㎥ 당", "보통인부", "0.14", "0.11", ""]],
}
assert 두께표 and detect_basis(두께표) == (None, None)
def test_한_칸_안의_밑수는_그대로_읽는다() -> None:
"""「100㎥당」처럼 한 칸에 다 있는 것은 종전대로 선다."""
assert detect_basis({"headers": ["(단위: 100㎥당)"], "rows": []}) == (100.0, "㎥")