"""일위대가 실무자료 이음매(PLAN 329 · 330) — 실제 서버 응답(북부청 격자 · 호표 맞춤)을 화면 도우미(`helper_m02_hopyo_seam.cjs` → Hopyo_Sheet)에 먹임. 행 22 → 제3호표 · 25 빈 줄 · 26 → 제4호표 · 영역 B20:O24 · 단산93 행 4229:4244 · 엑셀 근거 줄 · 근거 꼬리표 · 근거 맞음 · 도우미는 고르기 창 `Hopyo_Choose`. 338 — 같음 상태 없앰 · 숫자 판정(셈 끝)으로 북부청 단가산출 268 줄 = 맞음 122 · 다른 점 86 · 후보 60 · 「후보」 줄 1순위 근거 맞음 123 → 9(근거 맞는 줄은 거의 맞음 · 다른 점으로 옮겨 감). """ import json import os import subprocess from M02_MasterTemplete import M02_Hopyo_Fit as fit from M02_MasterTemplete import M02_Template_Layers as layers from resources.tester import test_m02_hopyo_excel as base from resources.tester.test_m02_hopyo_excel import URL, _post HERE = os.path.dirname(os.path.abspath(__file__)) client = base.client # 공용 고정물(임시 층) def _node(payload: dict) -> dict: proc = subprocess.run( ["node", os.path.join(HERE, "helper_m02_hopyo_seam.cjs")], input=json.dumps(payload, ensure_ascii=False), capture_output=True, text=True, encoding="utf-8", check=False, ) assert proc.returncode == 0, proc.stderr return json.loads(proc.stdout) def test_실제_응답_화면_도우미(client): assert _post(client).status_code == 200 fit.run_job(layers.personal_dir(7, 42), "HP-000001") # 셈 끝(338 숫자 판정) grid = client.get("/api/m02/layers/personal/hopyo-grid/HP-000001").json() lines = [] for no in (3, 12, 38, 58): res = client.get(f"{URL.format('personal')}/HP-000001/{no}").json() lines += [x for x in res["호표"]["줄"] if x.get("근거")] every = [] for one in grid["호표"]: res = client.get(f"{URL.format('personal')}/HP-000001/{one['번']}").json() every += [x for x in res["호표"]["줄"] if x["갈래"] == "단가산출"] got = _node({"grid": grid, "lines": lines, "all": every}) states = { k: sum(1 for x in every if x["맞춤"]["상태"] == k) for k in ("맞음", "다른 점", "후보") } assert states == {"맞음": 122, "다른 점": 86, "후보": 60} # 268 줄 · 셈 끝 assert got["count"]["top"] == 9 # 「후보」 줄 1순위 근거 맞음(근거 맞는 줄은 거의 숫자로 풀림) assert got["at"] == [None, 3, 3, 3, None, 4] # 25행 = 호표 사이 빈 줄 assert got["span"] == "B20:O24" and got["rows"] == "4229:4244" by = {x["이름"]: x for x in got["lines"]} dig = by["구조물터파기(인력100%)"] assert dig["source"] == "출처 건설품셈 3-2-1 · 직종 특별인부 · 단가산출 4229–4244행" assert dig["tag"] == "조항 건설품셈 공통 3-2-1 · 직종 특별인부 · 단위 같음" assert dig["ok"] is True assert by["흙깍기(토사)"]["ok"] is True # 엑셀 직종 없는 줄(기계) = 조항 같음 + 단위