인계문 — PFS 날짜 고침 패널(운영배포 완료) · 26.9.23 KST
이 세션이 93%에서 넘어간다. 코드·배포·검증 전부 끝났다. 남은 건 페페 실사용 1회뿐.
✅ 운영배포 완료 (페페 채팅 승인 「확인. 운영배포해」)
- deploy-live
c38433b(패널 본체) +c2f3242(ssm_run 고유화) — master7067a28·df52897선별 포워드. - 운영
orderpaper_date_fix테이블 생성 완료(13컬럼).orderpaper컬럼 4개는 30분 동기화가 멱등 ALTER 로 이미 넣었다. - 검증 = 운영
/api/health{"env":"live","ok":true}·/field/orderpaper200 · 사이드카 prod 401 사라짐(배포 전 10:33 이 마지막) · 사이트맵 재빌드 그룹 8·페이지 60·미반영 1(화면 밖, 기존). - ⏳[페페] = 운영 화면에서 한 건 고쳐 보기(
https://pfs.poin.co.kr/field/orderpaper또는/omc/material상단 「⚠ 발주서 날짜 점검」).
확정 규약 (건드리지 마라)
- 🔴발주서 xlsx 를 openpyxl 로 열었다 저장하면 안 된다.
printerSettings3개 등 8파트가 날아간다(126,679→102,971B). 발주서는 인쇄·팩스로 나가는 문서다. ⛒zip 안 대상 시트 XML 한 장만 치환 =C:\dev\pfs\orderpaper-sync\orderpaper_date_write.py. 자체검사 = 그 파일 직접 실행(python orderpaper_date_write.py) → 사본으로 왕복, 파트 손실 0 확인. - 🔴openpyxl
cell.style_id≠ XMLs=. 그대로 쓰면 저장본이IndexError로 안 열린다. 스타일은 XML 에서 직접 읽는다. - 🔴
scripts/ssm_run.py는 청크 파일·원격 파일·입력 JSON 을 «전부» 고유화해야 한다. 사이드카가 20초마다 SSM 을 쓴다 — 고정 이름이면 남의 스크립트가 실행된다(실측). 이미 고쳐 두었다. - 날짜칸 = I열(I:J 병합) · 연도 = H열.
orderpaper_build.py의C_ORDER_DATE='I2'와 같은 전제. 쓰기 전 F열 라벨(「발주 날짜」/「입고 날짜」)을 반드시 검증한다(좌표 오인 방어선). - 테스트에 운영 데이터를 복제할 때
orderpaper_site_map은 옮기지 마라 —field_no가 환경마다 다른 현장을 가리킨다(아래 「오늘 사고」).
끝난 것
1부 — 자재관리 동기화 20시간 먹통 (운영배포 93d7ce1)
SSM SendCommand 97KB 한도 초과로 9.22 13:39~9.23 09:41 전량 실패. 예약작업이 wscript 라 LastTaskResult=0 으로 떠서 아무도 몰랐다.
조치 = 청크 전송 · 원격 파일명 고유화 · 크기 대조 가드 · 실패 시 텔레그램. 나진 「코파산업」 새 탭 포함 밀린 12건 적재 확인.
2부 — 날짜 고침 패널 + NAS 엑셀 되쓰기 (테스트만, master 7067a28·df52897)
- 화면
#opDateFixPanel— 세 라우트 공통 지점 신설. 🔑기존.op-datewarn은{% if not omc_view %}안이라 자재관리 두 화면엔 렌더조차 안 됐다(web-designer 실측). - 큐
orderpaper_date_fix+ API 5개(date-issues·date-fix·date-fixes·date-fix/claim·date-fix/finish) + 에이전트 화이트리스트 2줄. - 되쓰기 = 미니PC 사이드카 20초 폴링 → 쓰기 전 자동백업 · 쓴 뒤 재검증 · 어긋나면 원복 →
orderpaper날짜도 즉시 갱신. - 엑셀이 열려 있으면
waiting_file(실패 아님) → 닫힐 때까지 재시도, 1시간 넘으면 파일명 텔레그램 1회. - 컬럼 4개 추가 =
sheet_name·section_idx(엑셀 위치 역추적 —block_key는 SHA1 이라 못 되돌린다) +order_date_raw·receive_date_raw(「긴급」 109건 원문). - 검증 = 엑셀 자체검사(파트 손실 0) · E2E 3경로(error / waiting_file / done) · 테스트
/api/healthok ·/field/orderpaper200.
3부 — _QA5미확정_* 소동 (페페 제보 → 원인 규명·조치 완료)
🔴코디 실수였다. 「테스트 데이터 운영데이터로 최신화」를 하며 orderpaper_site_map 까지 복제 → is_manual='1' 행이 운영 field_no 를 들고 왔고,
테스트의 같은 번호는 8.25·9.3 QA 검사가 만들고 소프트삭제한 임시 현장(_QA5미확정_* 22개)이었다.
→ 자재관리에서 「금호 구미 형곡3차 MH」 150건 등이 그 이름으로 묶여 보였다. 중복도 미완료도 아니다. 운영은 깨끗하다(QA 흔적 0건).
조치 = _fix_test_sitemap.py(site_map 7건·항목 246건 연결 해제) + 테스트 재동기화 → QA5 연결 0건.
⚠재동기화 결과 alive 2,158 → 2,076(항목 2,204→2,098)은 정상 — 다른 세션이 같은 날 넣은 dedupe()(운영 a392b6c)가 중복 106항목을 걸러서다.
⏳ 남은 것
| 누가 | 무엇 |
|---|---|
| [페페] | 테스트 육안·실사용 1회 — https://pfs-test.poin.co.kr/field/orderpaper · https://pfs-test.poin.co.kr/omc/material 상단 「⚠ 발주서 날짜 점검」 펼쳐서 한 건 고쳐 보기(엑셀에 실제로 들어가는지). 엑셀을 열어둔 채로도 해보면 대기 표시를 볼 수 있다 |
| [페페] | 확인되면 운영배포 판단. 지금 운영엔 API 가 없어 사이드카가 401 을 받고 조용히 넘긴다 |
| [코디] | 운영배포 승인 시 = pfs_deploy_wt 에서 7067a28·df52897 cherry-pick → push → /api/health 확인 → 사이트맵 재빌드 |
| [코디] | 1부 잔여 = 날짜 없음/오기입 블록 정리(이 패널이 그 도구다) |
| [별건] | 표 중간 행 삽입 시 상태가 밀리는 문제 — 신분증을 순번 대신 품명+규격 기반으로 바꿔야 하는 큰 변경 |
손대면 안 되는 파일
web/templates/basic/field/field_orderpaper.html의 기존dateChip()/opEditDate()—.op-site컨텍스트에 묶여 있다. 새 패널은 자체 함수(opDfxEdit)를 쓴다..op-datewarn옛 블록(11~12px) — 13px 하한 위반이 남아 있지만 이번 작업 범위 밖이라 그대로 뒀다. 새 패널이 그걸 베끼지 않았다.orderpaper-sync/*는 저장 즉시 운영에 나간다(예약작업이 master 작업본을 그대로 실행). 고치면 다음:08·:38전에 드라이런.
시드 포인터
- 세션 상세(1·2부) =
C:\dev\seedchain\projects\pfs\session-2026-09-23-orderpaper-sync-ssm-limit.md - 함정·규칙 =
C:\dev\seedchain\projects\pfs\rules.md🆕 맨 위(오늘 4건 추가) - 상태 =
C:\dev\seedchain\projects\pfs\handoff.md맨 위 · 루트C:\dev\seedchain\HANDOFF.md - devplan =
C:\dev\devplan\pfs-orderpaper-sync-ssm-limit.html(§8 = 이번 패널) - 조사·조치 스크립트 =
C:\dev\pfs\orderpaper-sync\의_q_dateissues.py·_q_qa5.py·_fix_test_sitemap.py·_e2e_datefix.py