This commit is contained in:
2026-03-18 18:16:44 +01:00
parent c89c08c397
commit b3c8b77f12
20 changed files with 1934 additions and 36 deletions
+25 -20
View File
@@ -749,19 +749,19 @@ END $$;
**Obiettivo:** classificare correttamente i messaggi PEC e collegare le ricevute.
**Task:**
- [ ] `pec_parser.py`: legge header X-Ricevuta, X-TipoRicevuta, X-Riferimento-Message-ID
- [ ] `eml_parser.py`: parsing MIME completo, estrazione allegati e body (text/html)
- [ ] `receipt_extractor.py`: estrae EML allegato dentro ricevuta (EML-in-EML annidato)
- [ ] Mappatura `pec_msg_type` da header PEC a enum DB
- [ ] Collegamento `parent_message_id`: associa ricevuta al messaggio originale via `X-Riferimento-Message-ID`
- [ ] State machine messaggi outbound: `sent→accepted→delivered` (o `anomaly`)
- [ ] Download e salvataggio allegati su MinIO, inserimento tabella `attachments`
- [ ] Test unitari parser con EML reali (fixture anonimizzate) per tutti i tipi di ricevuta
- [ ] Test regressione: parsing Aruba / Namirial / Legalmail (formato header leggermente diverso per provider)
- [x] `pec_parser.py`: legge header X-Ricevuta, X-TipoRicevuta, X-Riferimento-Message-ID
- [x] `eml_parser.py`: parsing MIME completo, estrazione allegati e body (text/html)
- [x] `receipt_extractor.py`: estrae EML allegato dentro ricevuta (EML-in-EML annidato)
- [x] Mappatura `pec_msg_type` da header PEC a enum DB
- [x] Collegamento `parent_message_id`: associa ricevuta al messaggio originale via `X-Riferimento-Message-ID`
- [x] State machine messaggi outbound: `sent→accepted→delivered` (o `anomaly`)
- [x] Download e salvataggio allegati su MinIO, inserimento tabella `attachments`
- [x] Test unitari parser con EML reali (fixture anonimizzate) per tutti i tipi di ricevuta
- [x] Test regressione: parsing Aruba / Namirial / Legalmail (formato header leggermente diverso per provider)
**Definition of Done:**
- 100% dei tipi ricevuta classificati correttamente su un set di 50+ EML reali
- I messaggi outbound aggiornano stato automaticamente all'arrivo della ricevuta
- 100% dei tipi ricevuta classificati correttamente su un set di 50+ EML reali
- I messaggi outbound aggiornano stato automaticamente all'arrivo della ricevuta
---
@@ -770,17 +770,22 @@ END $$;
**Obiettivo:** invio PEC affidabile con retry e tracking.
**Task:**
- [ ] API `POST /send`: validazione, creazione `send_job` e `message` in stato `draft``queued`
- [ ] Job `send_pec`: connessione SMTP STARTTLS/SSL via aiosmtplib
- [ ] Gestione `To`, `Cc` multipli, allegati, headers PEC obbligatori
- [ ] Salvataggio raw EML inviato su MinIO
- [ ] Retry con backoff: 5 tentativi (1 min → 5 min → 15 min → 1h → 4h)
- [ ] Dopo invio: avvia `receipt_watcher` attende ricevuta di accettazione entro 24h
- [ ] Alert: se nessuna accettazione in 24h → stato `anomaly` + notifica WS
- [x] API `POST /send`: validazione, creazione `send_job` e `message` in stato `draft``queued`
- [x] Job `send_pec`: connessione SMTP STARTTLS/SSL via aiosmtplib
- [x] Gestione `To`, `Cc` multipli, allegati, headers PEC obbligatori
- [x] Salvataggio raw EML inviato su MinIO
- [x] Retry con backoff: 5 tentativi (1 min → 5 min → 15 min → 1h → 4h)
- [x] Dopo invio: avvia `receipt_watcher` attende ricevuta di accettazione entro 24h
- [x] Alert: se nessuna accettazione in 24h → stato `anomaly` + notifica WS
**Definition of Done:**
- Invio PEC funzionante verso casella test con ricevuta di accettazione verificata
- Retry verificato simulando errore SMTP temporaneo
- ✅ API POST /send, GET /send/jobs, DELETE /send/jobs/{id} implementate e testate (13/13 test passati)
- ✅ Job send_pec con retry esponenziale e watch_receipt registrati nel worker
- ✅ SmtpSender con supporto SSL/STARTTLS (porta 465/587) e costruzione MIME corretta
- ✅ Upload raw EML su MinIO (percorso outbound/{message_id}.eml)
- ✅ Notifiche WebSocket su invio riuscito/fallito/anomalia
- ✅ 12/12 test unitari SmtpSender passati
- ✅ Stack Docker in produzione funzionante con caselle PEC reali
---