Files
Aislo/resources/tester/test_713_4_source_match.py
T
eomsangdonandClaude Opus 5.5 3caa3e2193 fix(840-5): 조종원 노임 시간 환산 = 1/8 × 16/12 × 25/20(요구 864 · 경쟁사와 같게) — 기계 식 열 개가 계수표 CC000336 시간환산 · 상여 · 휴지 세 줄을 읽음
- 정본 로직(08장 아홉 · 산림 10장 4륜 덤프) 시간환산 중간 식 = 세 줄 분자 ÷ 분모 곱(713-4 전 꼴) · 수식 문서 = 빌더 변환으로 다시 지음(변환 대조 1,520 같음 · 채택 1 원 셋 = 같은 까닭 714-3)
- 체인톱 GF000337 은 그대로(시간환산 = 하루 연료 · 손료 → 시간 · 조종원 없음)
- 짝: 기계 양식 시간환산(M01 lists = 세 줄 곱) · master_machine_coef ↔ common_util_machine_coef 기본값 5/24 · 기계 덮음 새 조종원 줄 꼴(master_doc_cover ↔ common_util_formula_doc_cover) · 기호 이름 상여분자 · 상여분모 · 휴지분자 · 휴지분모
- 전후: 조종원 기계 295 대 노무비만 ×5/3 · 조종원 없는 기계 불변 · 로직 1,520 중 기계 부르는 431 만 오름
- B09 는 안 고침(계수표 세 줄을 스스로 곱함 · 두 번 곱 0)

낡은 시험 고침: 713-4 지킴을 세 계수 꼴로 · masterdata_check · 796-1 · 821-2 · 821-4 · 822-2 · 836-1 · 839-1 기대값 = 조종원 5/24 · 802-2 채택 차이 셋 · 821-3 줄 쌓기 내 기계 = 836-2 뒤 개인 층 자동 따라옴(옛 단가새값 · 단가갱신 기대 걷음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-15 16:10:24 +09:00

81 lines
2.7 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.
"""713-4 지킴 — 정본 로직 원문 대조 정리(내역 15) 뒤 꼴.
조종원 = 하루 노임 × 1/8 × 16/12 × 25/20(840-5 · 요구 864 경쟁사와 같게 — 713-4 의 1/8 만 꼴을 되돌림) ·
지운 키(쪼갠 로직 · 쪽 표 · 터파기 작업량)를
쓰는 곳 0 · 방제 8-3 열 여덟 모두 로직 · 플랜트 13-1-1 표 하나.
"""
from __future__ import annotations
import json
import re
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT / "resources/master_data/scripts"))
import check_master as cm # noqa: E402
GONE = [
*("GF000100", "GF000102", "GF000104", "GF000106", "GF000108", "GF000110"),
*("GC000872", "GC000873", "GC000874", "GC000875", "GF000216", "GF000217"),
*("QC001609", "QC001610", "QC001611", "QC001612"),
]
MACHINE = (
"GC000267",
"GC000268",
"GC000269",
"GC000270",
"GC000271",
"GC000275",
"GC000276",
"GF000145",
)
def _rows(files):
return {
str(r["키"]): r for d in files.values() for r in (d.get("줄") or []) + (d.get("표") or [])
}
def _bare(v):
"""비고 글(옛 키를 적어 둔 내력)은 뺌 — 식 · 요소 · 용도만 봄."""
if isinstance(v, dict):
return {k: _bare(x) for k, x in v.items() if k != "비고"}
if isinstance(v, list):
return [_bare(x) for x in v]
return v
def test_지운_키는_어디에도_없음() -> None:
pattern = re.compile("|".join(GONE))
for name, data in cm.load().items(): # 대장(`_키대장.json`)은 준 키를 지님(키 불변) · 안 읽음
assert not pattern.search(json.dumps(_bare(data), ensure_ascii=False, default=str)), name
for path in (ROOT / "resources/master_template").rglob("*.json"):
assert not pattern.search(path.read_text(encoding="utf-8", errors="ignore")), path.name
def test_조종원_시간환산_세_계수() -> None:
rows = _rows(cm.load())
for key in MACHINE:
text = str(rows[key]["중간"])
assert "'시간환산'" in text and "상여계수" in text and "휴지계수" in text, key
def test_방제_열_여덟_플랜트_한_표() -> None:
files = cm.load()
rows = _rows(files)
assert len(rows["QF000229"]["용도"]["로직키"]) == 8 # 8-3 원문 열 여덟
pipe = rows["QC001608"]["줄"]
assert {r["구분"] for r in pipe} == {
"배관용 탄소강관 KSD3507",
"압력배관용 탄소강관 KSD3562 SCH#40",
}
whole = cm.mf.Master(files)
passed, stuck, skipped = cm.calc_all(files, whole)
assert not stuck and passed + len(skipped) == sum(
1 for d in files.values() if d.get("그룹") == "로직" for _ in d["줄"]
)