작업일보 (wd) 워크플로우 v3 — Linux/Hermes 자동화

매일 자동 실행 · openpyxl + LibreOffice + CUPS 흑백 인쇄 · 기상청 단기예보 + 전날 누계 자동 이월
📅 도입: 2026-07-02 🤖 코드: wd_full.py + wd.sh ⏰ 스케줄: auto (07:25 KST 권장) 📊 렌더: Linux LibreOffice 26.2 🖨️ 프린터: company_printer (SINDOH-D421)
📋 WD v3 워크플로우 — 12단계 Linux 자동화 일정 fetch → 전날 누계 이월 → 근로자 자동 배분 → 기상청 날씨 → xlsx 생성 → LibreOffice PDF → Telegram PNG → CUPS 흑백 인쇄 STEP 1~2 · 환경 로드 + 일정 포털 fetch BASE_DIR=/home/jaekyung/wd · ASSETS_DIR/_assets · TMP_DIR/_tmp · LOG_DIR/_logs · workers.json 10명 로드 GET http://211.106.147.183:8081/schedule → memos / pouring / todos / manpower_json 4섹션 STEP 3 · 전날 작업일보 자동 검색 (폴더 무관) 1순위: 파일명 매칭 (dt-1 ~ dt-9일) - BASE_DIR/202607/work_MMDD.xlsx 우선 - 없으면 BASE_DIR/work_MMDD.xlsx (호환) STEP 3.5 · glob fallback (전날 없으면) 최근 30일치 연월폴더 + BASE_DIR glob → 가장 최근 .xlsx (mtime desc) 자동 선택 → 첫 운영일이거나 공휴일 연속 시 안전망 STEP 4 · 템플릿 복사 + 누계 이월 (G26/G29/P29) cp _assets/template_with_signature.xlsx → work_MMDD.xlsx (스타일/병합/인쇄영역/서명 모두 보존) 이전 파일에서 G26/G29/P29 셀로드 → E26(공사진), E29(통신), L29(장비자재) 누계 자동 합산 💡 7/2 실전: E26=289, E29=1485, L29=326 정상 이월 (work_0701.xlsx) STEP 5 · 기상청 날씨 (H5) cheonan_rain_forecast.py KMA 단기예보 (nx=63, ny=110) 07~17시 PCP → "맑음"/"비" 판정 STEP 5.5 · 근로자 자동 배분 메모 파싱: 총원/소장휴무/결근 workers.json 10명 - 결근자 B32~B43 / L21 자동 기재 STEP 6~8 · 셀 입력 (openpyxl, load_workbook keep_vba=False) C5 날짜 · H5 날씨 · A12 금일작업(5줄) · I12 명일작업(5줄) · F26 소장인원 · L21 명일인원 · B32~B43 명단 ⚠ 수식 셀(G26/G29/P29)은 직접 set 안 함 — 데이터만 변경하고 LibreOffice가 재계산 STEP 9 · LibreOffice PDF 렌더 soffice --headless --convert-to pdf --outdir /tmp/ _tmp/ → _tmp/work_MMDD.pdf (~109KB) → pdftoppm -png -r 200 → _tmp/_preview.png (~166KB) STEP 10 · Telegram 발송 (소장님 Home) wd_tg_server.py → curl api.telegram.org 봇 pmx2580_bot (DSR과 동일) chat_id=8675731677 ✓ 7/2 발송 검증 message_id=39260 소장님이 폰에서 PNG 눈으로 확인 STEP 11~12 · CUPS 흑백 인쇄 (company_printer) soffice --headless --pt "company_printer" work_MMDD.xlsx → CUPS 큐 → SINDOH-D421 흑백 프린터 ✓ 7/2 08:58 KST 정상 출력 확인 (소장님 검증) v2.2 → v3 핵심 개선 (차별점) ┌─ v2.2 (Windows wd_gen.py) — 폐기됨 · Windows Excel + win32com 의존 (Hermes/Linux 실행 불가) · 셀 매핑 하드코딩 (sheet 분리 어려움) · 날씨/누계 수동 입력 (자동화 미지원) · 1~12 단계 수동 진행 (1일 30분+ 소요) └─ v3 (Hermes/Linux, 7/2 신규) · openpyxl + LibreOffice 26.2 (Windows 의존성 0) · find_prev_business_xlsx 폴더 무관 검색 (202607/work_0701.xlsx 자동 인식) · KMA 단기예보 자동 + 전날 누계 G26/G29/P29 자동 이월

📂 핵심 파일 6개

🎯 7/2 실전 검증

⚠️ 운영 pitfall

📍 파일 위치 및 백업

소스: /home/jaekyung/wd/ · 백업(방금): /mnt/ssd500/var/hermes-wd-v2-backup-20260702-090055/ (552K)
연월별 엑셀: /home/jaekyung/wd/202607/ (work_0701.xlsx 등) · 자산: /home/jaekyung/wd/_assets/
PDF/PNG 임시: /home/jaekyung/wd/_tmp/ · 로그: /home/jaekyung/wd/_logs/
한글 폰트: /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc (KR 지원) + NanumSquare
LibreOffice: /home/jaekyung/.local/bin/soffice (26.2.3.2) · openpyxl: 3.1.5
프린터: company_printer (CUPS, SINDOH-D421 흑백) · KMA 키: /home/jaekyung/.hermes/.env KMA_API_KEY

자동 실행 (cron 권장): 25 7 * * 1-6 jaekyung WD_BASE_DIR=/home/jaekyung/wd /home/jaekyung/wd/wd.sh auto 2026-07-02