[코디] 26.9.21(일) — 견적서 목록 「추가건 엑셀」 (도어발주서 xlsm → 추가건 견적)
기록 시각: 2026-09-21 23:15 KST · devplan pfs-door-order-import.html
지시
[페페] 「Pfs 견적서 추가건 엑셀파일 → pfs 견적 양식 변환 스킬을 견적서 목록에 기능 버튼으로 추가해줘. 작업중, 작업 완료표시 필수. 예상작업시간도 게이지 표시.」
그릴링 결정 6건
| # | 물음 | [페페] 결정 |
|---|---|---|
| 1 | 입력 엑셀 | 도어발주서 xlsm(포인 시트) — 견적서 양식 xlsx(playbook §7) 아님 |
| 2 | 버튼 자리·부모 지정 | 행별 버튼 — 그 행이 곧 부모(현장·업체·마진 자동) |
| 3 | 미리보기 vs 바로 | 바로 등록 + 완료 요약 |
| 4 | 진행 표시 | 동기 + 클라이언트 게이지(서버 잡 안 만든다) |
| 5 | 페이지·중복 | 페이지 칸 + 중복경고 |
| 6 | 배포 | 운영까지 |
무엇을 했나
로컬 build_and_register*.py 8벌(추가1~6·금강·신영)로 흩어져 있던 추가건 등록 로직을
서버 한 벌로 합치고 화면에 붙였다.
api/pfs/estimate/service/door_order_parse.py(신규) — 순수 파서. DB·세션 모름 → 단독 실행으로 정답지 대조 가능.api/pfs/estimate/service/door_order_import_service.py(신규) — 부모 검증 → 중복 검사 → payload →estimate_service.add_estimate직접 호출(HTTP 자기호출 안 한다).api/pfs/estimate/controller/estimate_controller.py(+36) —GET/POST /api/estimate/<no>/door-order-importmultipart.web/templates/finance/estimate/estimate_list_v2.html(+318) — 행 버튼·모달·게이지 JS·13px 수리.
DB 스키마 변경 0 · 새 테이블 0 · 새 라우트 파일 0.
게이지 (지시 핵심)
| 구간 | % | 근거 |
|---|---|---|
| ① 업로드 중 | 0→40 | 실측 — XHR upload.progress |
| ② 파싱·등록 중 | 40→95 | 추정 — 파일크기 기반 예상초, 「약 N초 남음(예상)」 |
| ③ 완료 | 100 | 실측 — 응답 도착 |
②는 추정이라고 화면에 적는다. 서버가 늦으면 95%에서 멈춘 채 기다린다(응답 전 100% 금지). 실패는 그 시점 %에서 빨강으로 굳힌다. 처리 중엔 ✕·바깥클릭·ESC 로 못 닫는다.
검증
| 검사 | 결과 |
|---|---|
로컬 scripts/_est_door_import_check.py |
34/34 ALL PASS |
테스트 E2E scripts/_est_door_import_live.py test |
30/30 ALL PASS(테스트 DB 원상복구) |
| UI 실행 1회(업로드→게이지→완료) | 성공 · 콘솔오류 0 |
| 버튼 실측(1600px) | 7개 · 전부 13px · 줄바꿈 0 · 버튼칸 426px |
| 사이트맵 재빌드 | 그룹 8 · 페이지 60 · 미반영 화면 2(운영 미배포분) |
정답지 = 실제로 운영에 등록된 페이로드 5벌 + 추가건 리스트 xlsx. 추가3 7/7 · 추가4 8/8 · 추가5 9/9(+설명된 예외 1) · 추가6 5/5 · 금강 47/47 · 추가1 11/11 · 추가2 12/12.
🔑골든 대조가 실제로 결함 4건을 잡았다 — ①원본 셀 공백 2칸 ②좌날개·우날개 부재명 누락
③엣지파 픽스(GROUP 부품) 안 접힘 ④기둥목 안 접힘. 전부 고쳐서 4벌 완전일치.
배포
master 0e21dc0(기능) + 9a73048(검사 2벌) → 운영 deploy-live 305f1ad 완료.
[페페] 채팅 「운영 배포」 로 승인. master 에 남의 미배포 커밋이 30여 개라 선별 포워드(cherry-pick 1개).
C:\dev\pfs_deploy_wt 에서 reset --hard origin/deploy-live → cherry-pick → push
(⚠본체에서는 deploy-live checkout 이 worktree 점유로 거부된다).
푸시 전 blob 4/4 일치 · 삭제 0 · 남의 코드 0 확인. 반영 15초.
운영 검증 = 읽기전용 8/8(쓰기 0건) · 버튼 실측 전부 13px · 줄바꿈 0 · 콘솔오류 0 · 모달·프리플라이트 동작 · 사이트맵 미반영 13→1(남은 1 = 기존 화면 밖 항목, 남의 건).
⏳ [페페]
- 운영 육안 1회 — 실제 현장 발주서 1건으로 돌려 뽑힌 줄 확인. 「바로 등록」이라 사람 눈이 마지막 관문이다. 완료 요약의 「제외 — 무상·무표기 N건 · 부품 접음 N건」이 감과 다르면 그 건을 견적서에서 본다.