| name | d0-production-plan |
| description | ERP D0 추가생산지시 자동화 (SP3M3 MAIN + SD9A01 OUTER). xlsm 추출 → ERP 업로드 → 서열 → MES 전송 → SmartMES 검증 |
ERP D0 자동화 (SP3M3 / SD9A01)
🔒 SD9A01 OUTER 보류 잠금 (2026-05-20): state/sd9a01_outer.lock 활성. --line SD9A01 → exit 0, --line ALL → SP3M3 only. 해제: 락 파일 삭제 또는 사용자 명시 발화.
Phase 0~7 절차 / 모드 분기 / 핵심 주의사항 / 변경 이력은 MANUAL.md. 용어는 ../GLOSSARY.json.
도메인 규칙: 90_공통기준/erp-mes-recovery-protocol.md
⛔ 금지: 엑셀 직접 열기 / 모니터 전환 / ERPSet Client(javaw.exe) 조작 / computer-use·마우스·키보드. 반드시 run.py 사용.
⛔ 사용자 첨부 가드: xlsx/xlsm 첨부 발견 시 자동 실행 차단 — --xlsx <path> vs Z드라이브 자동 탐색 명시 확인 (2026-04-27 사고 재발 방지).
운영 세션 (하루 2회)
| 세션 | 시점 | 처리 |
|---|
| 저녁 17~19시 | SP3M3 야간 + SD9A01 OUTER D+1 | |
| 아침 07:10 | SP3M3 주간 (3600 컷) | |
사용
python run.py --session morning --line SP3M3 --http-only
python run.py --session evening --line SP3M3 --http-only
python run.py --session evening --line SD9A01 --http-only
python run.py --session evening --line ALL --http-only
python run.py --session auto
python run.py --session evening --line SP3M3 --dry-run
python run.py --session morning --legacy-mode
python run.py --session morning --xlsx <1건xlsx> --target-date YYYY-MM-DD
python run.py --session morning --line SP3M3 --no-mes-send
python evening_supplement.py --target-date YYYY-MM-DD --source-sheet 생산계획 --dry-run
python evening_supplement.py --target-date YYYY-MM-DD --source-sheet 생산계획
필수 옵션 (사용자 호출 시):
--line {SP3M3|SD9A01|ALL} — default=ALL은 cron 전용. 사람 호출 시 반드시 라인 명시.
--http-only — 세션153 A안 3단계 완전 브라우저-less. CDP/Playwright 0. 미명시 시 브라우저 모드로 떨어짐.
evening_supplement.py는 SP3M3 야간 보충 전용이다. 먼저 --dry-run으로 추출 건수와 품번을 확인한 뒤, 사용자 명시가 있을 때만 실제 ERP/MES 반영을 실행한다.
run.py --session evening --line SP3M3는 출력용과 생산계획 야간 PROD_NO set 일치율을 검사한다. stale 차단을 해제하려면 --allow-stale-output을 명시해야 한다.
절차 (요약)
- Phase 0: CDP 9223 + ERP OAuth + D0 화면 진입
- Phase 1: xlsm 탐색 (수정본 우선) + 시트 추출
- Phase 1.5: dedupe (이미 등록 건 제외)
- Phase 2: 업로드 xlsx 생성 (Excel COM 필수, openpyxl 금지)
- Phase 3: selectListPmD0AddnUpload + multiListPmD0AddnUpload
- Phase 4: 서열 배치 (하이브리드 default = requests 직접 POST, sendMesFlag='N')
- Phase 5: 최종 저장 (sendMesFlag='Y' MES 전송)
- Phase 6: SmartMES
/v2/prdt/schdl/list.api 대조
verify (Phase 7 사후 검증)
python verify_run.py --session morning --line SP3M3
실패 시
- CDP/OAuth/Z드라이브/xlsm 미존재 / 서버 500 / MES != 200 → FAIL
- 되돌리기:
.claude/tmp/erp_d0_dedupe.py --line SP3M3 --date YYYYMMDD --execute (SmartMES rank 자동 식별 + 안전 삭제)
- 상세 → MANUAL.md "핵심 주의사항" + "되돌리기"