- 좌측 [엑셀 올리기] → [파일 업로드](구조물 조합 층 단추 꼴 · 보통 크기 · m02-layers__btn) - 파일 줄 누름 · 올린 직후 = 엑셀 보기 창 · 본 칸 호표 표(Hopyo_View) 지움 · 고름 표시 = 창 열린 동안 - 엑셀 보기 머리 막대 = 시트 · 호표 수 · 검산 · 제안 · 셈 중 · [삭제](옛 본 칸 표 몫) - 호표 목록 제N호표 오른쪽 [수정] = 그 호표 확인 창 · 펼침 표 · [확인 창 열기] 지움 - [고른 N개 확인하고 만들기] → [저장] = 물음 한 번 뒤 체크 줄로 하위 호표부터 생성 · 체크 줄 없음 건너뜀 · 409 안내 - 목록 숫자 다 연결(같고 0 넘음) = 녹색(var(--color-success)) - 별칭 장부 뜻 한 줄(LEDGER_HINT) · 갈래 글 로직없음 · 사용안함 · [변경 취소] · [로직 추가] · [내 층 복사] · [삭제] Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014utrjfoW831Vc5wJUd13kL
63 lines
3.0 KiB
Python
63 lines
3.0 KiB
Python
"""일위대가 실무자료 이음매(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 # 엑셀 직종 없는 줄(기계) = 조항 같음 + 단위
|