26.10.19(월) 소요 한남 2차 #803 → 한샘 양식 V9 (유리 분리 · 보이는 규격 · 갑지 위치도) [코디]
지시 · 결정 ([페페] → 총괄 전달)
「운영배포」 = NAS 새 파일 업로드 승인. PFS 는 GET 만.
① 거실 수납장(37477 · K · A4) = 주방 키큰장 블록 32 ② 비고 = 한샘 양식에서만 마감 종류 단어(무늬목 · PET=37460·37461) · PFS 원비고는 CSV 로만
③ 유리 sub 만 -추가 블록(정본 B)으로 금액 표시 · 나머지 sub 는 fold · 봉적도어 37476 = 위치명만 + 유리칸(끝수 500 흡수 → 203,000) · 37475 마감 무늬목 · 「유로글라스」 숨김
④ 보이는 규격 = DWG 입면도 DIMENSION 실측(길이 칸은 그대로) ⑤ 위치도 = 갑지 주방·수납 탭 아래 새 쪽(주방 6 · 수납 12) · 거실 수납장은 F006 왼쪽 위 작은 평면
한 것
도구 C:\dev\tools\hansem-convert\ 옵션 추가(기본값 = 옛 동작 · 골든 바이트 동일)
rules.addon_split(fold 에서 이름에 글자 든 sub 만 -추가 블록 · 규격 nEA · 비고 행 · 품명/비고 덮어쓰기) · rules.name_only(위치명만 블록 · 끝수 → 마지막 분리 칸)
rules.display_width(왼쪽 치수 칸 = 보이는 규격 · J 길이 = 순길이) · rules.note_row_label(B{b+3} 「에지」→「비고」) · rules.note_csv(원비고 CSV)
verify [3a] = 분리 sub 한 번씩·칸 합 = sub 합 + 끝수 · 본항목 목표에서 분리 금액 빠짐 · 보이는 규격 전 행 · 원비고 CSV = 스냅샷 · 총액 = 갑지 합계 + 시공비 + 만원 절사 · 비노출 금액 검사에서 분리 칸·그 블록 합계 칸 제외
drawing.target = "cover" — groups(구분별 패널 + insets) · room_labels · 패널 scale · print_w_pt · compose_cover / embed_cover(갑지 기존 drawing 에 oneCellAnchor 추가 · 인쇄 끝+1 행 뒤 쪽나눔) / verify_cover
고친 파일 = hc.py · hclib\planner.py · hclib\builder.py · hclib\verify.py · hclib\drawing.py · 설정 sites\sohan2-803.json
보이는 규격 근거 C:\dev\_work\sohan2-hansem-261014\display_width_evidence.json(17행 · 핸들·시트·측정값) — 만든 것 C:\dev\_work\sohan2-hansem-261014\dwg\{dims_dump,hdims,display_width,view_prims}.py
단일 치수 13행 · 이어진 치수 합 3행(37450 키큰장 50+600=650 · 37451 냉장고장 645+190=835 · 37452 포켓도어 20+2470+20=2510) · 판단 1행(37458 버틀러장 1680 = 양쪽 휠라가 버틀러 sub)
원비고 CSV C:\dev\_work\sohan2-hansem-261014\비고원문_803.csv(18행 · NAS 안 올림)
중간 DXF(385,468,284 B) 삭제 → 목록 C:\dev\_work\sohan2-hansem-261014\dwg\deleted_dxf.txt
검증
python test_hansem_convert.py ALL OK(10) 전·후 · python regress.py 전 OK(골든 3건 바이트 동일) · 후 → 아래 보고
hc.py sites\sohan2-803.json run ALL OK(638항목) · drawing verify ALL OK(25항목 · PDF 15→17쪽 · 그림 쪽 2·6 = 갑지 바로 다음 · 잘림 0)
NAS 새 파일 \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\소요 한남 2차\한샘 소요 한남 2차 MH 가구제작 견적서(26.10.13) V9.xlsx 663,464 B · sha256 3955aa8e3395f9b61b590d4b8a76f5eedc903e2efd69eb7699e6c7b3574a3afb · 되읽기 일치 · 폴더 변화 = 새 파일 1개
비고 행 이름 「에지」→「비고」로 바꿈(본항목·유리칸 같게) — 싫으면 설정 note_row_label 삭제
위치도 점 위치(F011 확대 격자로 고름) · 세탁실 도어 위치 · 마스터 욕실 세면대 줄 판정
관찰: 37475 욕실서랍 PFS 길이 300(규격 표기 2590) · V8 부터 PDF 3쪽 빈 쪽(숨김 탭 쪽으로 추정 · 이번 변경과 무관) → V10 에서 처리(아래)
V10 (26.10.19 12:56 KST NAS) — 37475 욕실서랍 길이 칸 규격 표기 · 금액 수동 입력 [코디]
[페페] 「37475 욕실서랍의 PFS 길이가 300 — 단가는 그대로 유지하고 표시 및 수식은 규격 표기로 통일. 수식이 아닌 수동 입력으로 변환.」 · NAS 새 파일만 · PFS 쓰기 0
도구 옵션 rules.manual_amount(키 없음 = off · 골든 바이트 동일): {"37475": {"length_mm": 2590, "expect_amount": 567000}} — 길이 칸 J{b+2} = length_mm · 10MM기준 J{b+3}·적용가 J{b+5} = 계획 계산값 «숫자»(수식 0) · 단가 C{b+5} 그대로(=4800) · expect_amount ≠ 계산 금액이면 plan 이 멈춤
고친 파일 C:\dev\tools\hansem-convert\hclib\planner.py(manual_amount_spec · 계산 후 _manual 칸 값 · plan.manual · 리포트 줄) · C:\dev\tools\hansem-convert\hclib\builder.py(fill_main 끝 숫자 3칸 · 왼쪽 치수 폴백) · C:\dev\tools\hansem-convert\hclib\verify.py(수동 블록 J{b+2}·J{b+3}·J{b+5} 수식 0 · 길이 칸 = length_mm · 적용가 = 계획 = expect_amount) · C:\dev\tools\hansem-convert\hclib\config.py(주석) · C:\dev\tools\hansem-convert\sites\sohan2-803.json(rules.manual_amount · _doc_261019_v10)
37475 블록(99A 내역서-수 60행 블록) V9 → V10: 길이 J62 300(숫자) → 2590(숫자) · 10MM기준 J63 =J62/10*3.9375(값 118.125) → 118.125(숫자) · 단가 C65 =4800 → 그대로 · 적용가 J65 =C65*J63(567,000) → 567000(숫자) · 블록합계 I66 = SUM 그대로 567,000 · 왼쪽 치수 C62 = 2590 그대로
V9↔V10 셀 diff(9,218칸) = 수식·값 J62·J63·J65 3칸뿐 · LO 재계산 값 diff = J62 1칸뿐(소계·합계 전부 같음) · 엑셀 파트 diff = xl/worksheets/sheet11.xml 1개(위치도 그림 2장 바이트 동일)
검증: test_hansem_convert.py ALL OK(10) 전·후 · regress.py 전·후 골든 3건(hk·v2·ansan) 바이트 동일 · soffice 잔류 0 · hc.py sites\sohan2-803.json run ALL OK(638) · drawing compose|embed|verify ALL OK(25 · render 재사용) · nas-put --what v2 dry-run → --put ALL OK(14)
NAS 새 파일 \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\소요 한남 2차\한샘 소요 한남 2차 MH 가구제작 견적서(26.10.13) V10.xlsx 663,460 B · sha256 667051e8002df2770523964ae12a5c0a9cae5aa5972597d59088bd02375e8277 · 되읽기 일치 · 폴더 변화 = 새 파일 1개
[페페] 「도면 캡쳐 및 사이즈 표시는 주방, 수납 탭이 아니라 각 99A 내역서-주, 99A 내역서-수 탭에 넣어야 한다. 그림 이동해줘.」 다른 내용 OK · NAS 새 파일만 · PFS 쓰기 0
설정 C:\dev\tools\hansem-convert\sites\sohan2-803.json drawing: target:"cover" 뺌 = 내역서 모드(기본 · 한국유리 #800 V2 와 같은 «총합 + 빈 행 1줄 뒤 새 쪽») · groups(주방/수납 분리 · 거실 수납장 F006 칸 · room_labels) 그대로 · print_w_pt 498.8 그대로(그림 바이트를 V10 과 같게) · _doc_v11
도구 최소 수정(기본값 = 옛 동작 · 골든 그대로):
C:\dev\tools\hansem-convert\hc.py — drawing compose/embed: groups 가 있고 target≠cover 면 compose = compose_cover · embed = drawing.group_sheets → drawing.embed(..., pngs=, labels=)
C:\dev\tools\hansem-convert\hclib\drawing.py — opts() groups 면 panels · group_sheets()(구분 → 평형 1개 + 내역서 접미 탭 · 합성 그림) · embed() pngs·labels 인자 + _embed_into_existing()(탭에 이미 drawing 파트가 있으면 = 99A 내역서-주의 양식 잔재 빈 drawing3.xml — 그 파트에 twoCellAnchor 1개 덧붙임 · 시트는 쪽나눔 1줄만 · Content_Types 변경 0) · verify() existing_drawing 분기(새 파트·바뀐 파트·앵커 수·관계 1줄)
결과: 99A 내역서-주 총합 53 → 쪽나눔 54 · 그림 A55~O103(49행) · 인쇄영역 O103 / 99A 내역서-수 총합 123 → 쪽나눔 [52, 94, 124] · 그림 A125~O175(51행) · 인쇄영역 O175 · 배율 62 그대로 · LO PDF 15쪽 → 17쪽, 그림 쪽 = 3쪽(내역서-주 총합 2쪽 다음) · 9쪽(내역서-수 총합 7쪽→8쪽 다음) · 잘림 0
그림: 합성 PNG(C:\dev\_work\sohan2-hansem-261014\drawing\out\주방_견적위치도.png·수납_견적위치도.png) compose 재실행 = V10 바이트 동일 · 엑셀 안 image9(주방) = V10 바이트 동일 · image10(수납) = 위·아래 흰 여백 22px 씩(행 경계 맞춤 letterbox 3602→3646) 외 픽셀 동일 · 축척 = 내역서 15열 1425px 폭(인쇄 662.6pt = 갑지 498.8pt 의 1.33배 → 글자 ≈13.9pt)
V10 ↔ V11 셀 9,218칸 값·수식 diff 0 · LO 재계산 diff 0 · 금액 69,180,000 그대로(37475 manual_amount 유지)
검증: test_hansem_convert.py ALL OK(10) 전·후 · regress.py 전·후 골든 3건 bytes_same·semantic_same 전부 true · PNG·json 해시 동일 · hc.py sites\sohan2-803.json run ALL OK(638 · V1 파트 V10 때와 바이트 동일) · drawing compose|embed|verify ALL OK(36) · nas-put --what v2 dry-run(PFS 지문 GET 1회 일치) → --put --no-pfs ALL OK(14) · soffice 잔류 0
NAS 새 파일 \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\소요 한남 2차\한샘 소요 한남 2차 MH 가구제작 견적서(26.10.13) V11.xlsx 665,102 B · sha256 5fec4f494daded4a814bcd98302fd5def64d2e77b2bad88ee9083f11bc643289 · 되읽기 일치 · 폴더 변화 = 새 파일 1개