Files
Aislo/resources/tester/test_813_2_parts.py
T
eomsangdonandClaude Opus 5.5 58a3e039b3 feat(813-2): 보조 문서 부품 표지 73 · 작업량당 기계경비 6 지움 · 단가산출 목록에서 뺌 · 기계 → 부품 길
- 표지 = 수식 문서 머리 · 옛 로직 줄 칸 「부품」 — 기계경비식 9 · 작업량 틀 60(기종 = 기계표 상세구분 · 규격 열쇠) · 계수식 4 · 변환기가 옮김 · 틀 문서 9 장
- 지움 = 작업량당 기계경비 6(GC001145 · 1148 · 1151 · 1156 · 1159 · 1166 · 부르는 곳 0 · 요구 734-4 · 735-4) — 수식 문서 · 옛 로직 · 키대장 폐기 칸 · 빌더 · 변수표
- 이름 꼬리 4 = 원문 제목(지게운반 · 인력운반(기계설비) · 벽돌운반 · 수중펌프 설치 및 해체) · 키 폐기 0
- 서버 = `M01_MasterData_Parts` — M01 `/logics` · M02 `/logic-lib/logics` 목록에서 부품 뺌(1,440) · 키로 열기 · 부르기 그대로 · `/m01/parts`(기종 계산식 · 틀 · 계수식) · `/m02/logic-lib/machine-parts` · 연결 찾기 과녁에서 부품 뺌(1,444 → 1,435 · 판정 코드 그대로)
- 금액 전후 = 문서 1,513 · 셈 9,626(기본 + 옵션 표본) 모두 같음 · 791_1 지문 남은 1,513 같음 → 지문 다시 뜸 · 802_2 변환 대조 1,513 · 목록 xlsx 다시 씀(요약 수)
- 낡은 시험 = 1,519 · 1,518 기대 → 1,513 · GC001148 견본 → 같은 꼴 GF000089 토사깍기(기계)(블록 Q 39.293 · 합계 2,190) · 지운 6 을 셈하던 줄 걷음 · 목록 수 1,440 · 묶음 328 · 부르는 수 507
- 새 지킴 시험 test_813_2_parts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 20:49:52 +09:00

112 lines
4.9 KiB
Python

"""813-2 지킴 — 보조 문서 부품 표지 · 작업량당 기계경비 6 지움 · 목록에서 뺌 · 기계 → 부품.
① 표지 = 보조 문서 83 − 지움 6 − 단가산출로 남김 4 = 73(기계경비식 9 · 작업량 틀 60 · 계수식 4) · 옛 로직 줄 = 수식 문서
② 지움 6 = 수식 문서 · 옛 로직 · 키대장 「키」 에 없음 · 키대장 「폐기」 에 있음 · 부르는 곳 0 · 이름 꼬리 4 = 원문 제목
③ 목록(M01 `/logics` · M02 `/logic-lib/logics`)에서 뺌 · 키로 열기 · 부르기는 그대로(끊긴 단가산출 연결 0)
④ 기계 → 부품 — 굴착기 = 기계경비식 GC000267(기계 9) + 작업량 틀 · 0.7㎥ 원문번호 → 틀 문서(규격 열쇠)
⑤ 변환기(옛 로직 → 수식 문서)가 표지 칸을 옮김
금액 전후 = `test_791_1_engine_semantics.py` 지문(남은 1,513 같음) · `test_802_2_convert.py` 변환 대조.
"""
from __future__ import annotations
import importlib
import json
from collections import Counter
from M01_MasterData import M01_MasterData_Doc as doc_store
from M01_MasterData import M01_MasterData_Parts as parts
from M01_MasterData import M01_MasterData_Router as m01_router
from M01_MasterData import M01_MasterData_Store as store
from M02_MasterTemplete import M02_Logic_Lib_Read as lib_read
from M02_MasterTemplete import M02_MasterTemplete_Router_Combos as combos
cv = importlib.import_module("master_doc_convert")
GONE = ["GC001145", "GC001148", "GC001151", "GC001156", "GC001159", "GC001166"]
NAMES = {
"GC001140": "지게운반",
"GC001141": "인력운반(기계설비)",
"GC001142": "벽돌운반",
"GC001184": "수중펌프 설치 및 해체",
}
def _rows() -> dict[str, dict]:
files = store.loaded()[0]
return {
str(r["키"]): r
for d in files.values()
if d.get("그룹") == "로직"
for r in d.get("줄") or []
}
def test_표지_73_갈래별_수_로직_문서_같음():
tags = parts.parts()
assert Counter(t["갈래"] for t in tags.values()) == {
"기계경비식": 9,
"작업량 틀": 60,
"계수식": 4,
}
rows = _rows()
assert all(rows[k].get("부품") == t for k, t in tags.items())
assert {k for k, r in rows.items() if r.get("부품")} == set(tags)
tpl = {k: t for k, t in tags.items() if t["갈래"] == "작업량 틀"}
assert all(isinstance(t["기종"], list) for t in tpl.values())
assert tpl["GF000088"] == {"갈래": "작업량 틀", "기종": ["굴착기"], "규격": "q"}
def test_지움_6_이름_4():
docs = doc_store.docs()
rows = _rows()
led = json.loads((store.FOLDER / "_키대장.json").read_text(encoding="utf-8"))
for k in GONE:
assert k not in docs and k not in rows and k not in led["키"] and k in led["폐기"]
assert len(docs) == len(rows) == 1513
for k, name in NAMES.items():
assert docs[k]["이름"] == rows[k]["이름"] == name and "부품" not in docs[k]
def test_목록에서_뺌_키로_열림_부르기_그대로():
tags = parts.parts()
m01 = {x["키"] for x in m01_router.get_logics()["logics"]}
m02 = {x["키"] for x in combos.get_logics()["logics"]}
assert not (m01 | m02) & set(tags) and len(m01) == len(m02) == 1513 - 73
for k in ("GC000267", "GF000088", "GC001191"):
assert doc_store.read(k)["문서"]["부품"] == tags[k]
assert m01_router.get_logic(k)["logic"]["키"] == k
docs = doc_store.docs()
links = [
str((v.get("연결") or {}).get("키"))
for d in docs.values()
for v in d.get("변수") or []
if (v.get("연결") or {}).get("갈래") == "단가산출"
and "{" not in str((v.get("연결") or {}).get("키"))
]
assert links and all(k in docs for k in links) # 끊긴 부름 0 · 지운 6 부르는 곳 0
assert sum(1 for k in links if tags.get(k, {}).get("갈래") == "기계경비식") >= 600
def test_기계_부품():
got = m01_router.get_parts("기계", "굴착기")
rule = {x["키"]: x["기계수"] for x in got["기계경비식"]}
assert rule["GC000267"] == 9
tpl = {x["키"] for x in got["작업량 틀"]}
assert {"GC001147", "GF000088"} <= tpl and len(tpl) == 15
coef = m01_router.get_parts("계수식")["계수식"]
assert {x["키"] for x in coef} == {"GC001143", "GC001191", "GC001192", "GC001193"}
one = lib_read.get_machine_parts("0201-0070")
assert one["기계"] == {"이름": "굴착기(무한궤도)", "규격": "0.7㎥", "상세구분": "굴착기"}
by = {t["키"]: t for t in one["틀"]}
assert by["GC001147"]["규격"] == "버킷용량" and by["GF000088"]["문서"]["결과"] == "Q"
def test_변환기가_표지를_옮김():
whole = store.loaded()[1]
rows = _rows()
doc, _ = cv.convert(whole, rows["GF000088"])
assert doc["부품"] == rows["GF000088"]["부품"]
assert list(doc).index("부품") == list(doc).index("출처") + 1
assert "부품" not in cv.convert(whole, rows["GF000089"])[0]