Svecchiamento dati
Necessità: Realizzare un processo che elimini i dati non piu' necessari al sistema secondo delle policy configurabili dall'amministratore.
Soluzione: Aggiungere un batch configurabile dalle impostazioni di GovPay. Il batch presenta le seguenti opzioni:
| Opzione | valore minimo | default | note |
|---|---|---|---|
| Pendenze scadute | 30 | null | a decorrere dalla data di scadenza |
| Pendenze pagate | 365 | null | a decorrere dalla data di pagamento |
| Pendenze annullate | 30 | null | a decorrere dalla data di annullamento |
| Pendenze da pagare (senza scadenza) | 1825 | null | a decorrere dalla data di creazione |
| Pagamenti eseguiti | 365 | null | dalla data di esecuzione |
| Pagamenti non eseguiti | 30 | null | dalla data di esecuzione |
| Pagamenti falliti | 7 | null | dalla data di esecuzione |
| Rendicontazioni | 730 | null | dalla data di emissione |
| Eventi | 365 | null | dalla data di creazione |
| Tracciati scartati | 1 | null | dalla data di completamento |
| Tracciati pendenze completati | 1 | null | dalla data di completamento |
| Stampe avvisi | 1 | null | dalla data di creazione |
| Stampe ricevute | 1 | null | dalla data di creazione |
| Notifiche consegnate | 7 | null | dalla data di consegna |
| Notifiche non consegnate | 180 | null | dalla data di creazione |
Per ciascuna opzione deve essere presente nel file di properties il valore minimo sotto il quale non può essere settata la soglia. Se viene richiesta una configurazione che viola la soglia il servizio restituisce un errore semantico con opportuna descrizione.
La configurazione di default deve prevedere il valore di soglia impostato a null per tutte le opzioni. Se la soglia e' impostata a null, lo svecchiamento e' disabilitato.
Il batch gira ogni giorno alle 4 di mattina.
Le query indicate successivamente prevedono come parametro il numero della soglia e devono essere eseguite in transazione.
- [ ] Stampe
Stampe avvisi
delete from stampe where data_creazione < ? and tipo='AVVISO';
Stampe ricevute
delete from stampe where data_creazione < ? and tipo='RICEVUTA';
- [ ] Tracciati
Tracciati scartati
delete from eventi using tracciati where tracciati.id=eventi.id_tracciato and data_completamento < ? and stato='SCARTATO';
delete from tracciati where data_completamento < ? and stato='SCARTATO';
Tracciati completati
delete from operazioni using tracciati where tracciati.id=operazioni.id_tracciato and data_completamento < ? and tracciati.tipo='PENDENZA';
delete from eventi using tracciati where tracciati.id=eventi.id_tracciato and data_completamento < ? and tracciati.tipo='PENDENZA';
delete from tracciati where data_completamento < ? and tracciati.tipo='PENDENZA';
- [ ] Eventi
TBD
- [ ] Rendicontazioni
TBD
- [ ] Pagamenti
TBD
- [ ] Pendenze
TBD
- [ ] Notifiche
TBD
@nardil ho implementato la prima parte delle nuove funzionalita' richieste dal task, sono emerse le seguenti problematiche:
- Non salviamo i pdf delle ricevute, si puo' fare ma richiede una modifica alla tabella stampe, dove si deve aggiungere il riferimento alla RPT.
- Nella lista delle entita' da svecchiare mancano le NotificheAppIO e i Promemoria inviati via mail.
- La funzionalita' di svecchiamento puo' essere disabilitata attraverso le API Backoffice?
- Come gestire le notifiche in stato 'ANNULLATA'?
- Come gestire le riconciliazioni?
Ho svolto un'analisi preliminare per le sezioni indicate con TBD nel commento sopra:
- [ ] Eventi
Gli eventi sembrano eliminabili senza problemi, eventualmente potremmo definire delle condizioni piu' stringenti indicando il tipo evento e/o l'esito
delete from eventi where data < ?;
- [ ] Rendicontazioni
delete from rendicontazioni using fr where fr.id=rendicontazioni.id_fr and fr.data_ora_flusso < ? ;
delete from eventi using fr where fr.id=eventi.id_fr and fr.data_ora_flusso < ? ;
delete from fr where data_ora_flusso < ?;
- [ ] Pagamenti
Per ogni pagamento si devono eliminare una o piu' rpt e le entita' ad esse collegate. Per ogni pagamento si devono eliminare le entries nella tabella pag_port_versamenti
Pagamenti Eseguiti, Falliti, Non Eseguiti
-- query per eliminare notifiche, promemoria, rr, pagamenti??, rendicontazione?? collegate alle RPT
delete from rpt using pagamenti_portale where pagamenti_portale.id=rpt.id_pagamento_portale and data_richiesta < ? and stato = '[STATO]';
delete from eventi using pagamenti_portale where pagamenti_portale.id_sessione=eventi.id_sessione and data_richiesta < ? and stato = '[STATO]';
delete from pag_port_versamenti using pagamenti_portale where pagamenti_portale.id=pag_port_versamenti.id_pagamento_portale and data_richiesta < ? and stato = '[STATO]';
delete from pagamenti_portale where data_richiesta < ? and stato = '[STATO]';
- [ ] Pendenze
Pendenze Scadute
delete from eventi using versamenti where versamenti.cod_versamento_ente=eventi.cod_versamento_ente and versamenti.idApplicazione = eventi.cod_applicazione and data_validita is not null and data_validita < ? and stato = 'NON_ESEGUITO';
delete from singoli_versamenti using versamenti where versamenti.id=singoli_versamenti.id_versamento and data_validita is not null and data_validita < ? and stato = 'NON_ESEGUITO';
delete from versamenti where data_validita is not null and data_validita < ? and stato = 'NON_ESEGUITO';
Pendenze Pagate
delete from eventi using versamenti where versamenti.cod_versamento_ente=eventi.cod_versamento_ente and versamenti.idApplicazione = eventi.cod_applicazione and data_ora_ultimo_aggiornamento < ? and stato in ('ESEGUITO', 'PARZIALMENTE_ESEGUITO');
delete from singoli_versamenti using versamenti where versamenti.id=singoli_versamenti.id_versamento and data_ora_ultimo_aggiornamento < ? and stato in ('ESEGUITO', 'PARZIALMENTE_ESEGUITO');
delete from versamenti where data_ora_ultimo_aggiornamento < ? and stato in ('ESEGUITO', 'PARZIALMENTE_ESEGUITO');
Pendenze Annullate
delete from eventi using versamenti where versamenti.cod_versamento_ente=eventi.cod_versamento_ente and versamenti.idApplicazione = eventi.cod_applicazione and data_ora_ultimo_aggiornamento < ? and stato = 'ANNULLATO';
delete from singoli_versamenti using versamenti where versamenti.id=singoli_versamenti.id_versamento and data_ora_ultimo_aggiornamento < ? and stato = 'ANNULLATO';
delete from versamenti where data_ora_ultimo_aggiornamento < ? and stato = 'ANNULLATO';
Pendenze Da pagare senza scadenza
delete from eventi using versamenti where versamenti.cod_versamento_ente=eventi.cod_versamento_ente and versamenti.idApplicazione = eventi.cod_applicazione and data_validita is null and data_creazione < ? and stato = 'NON_ESEGUITO';
delete from singoli_versamenti using versamenti where versamenti.id=singoli_versamenti.id_versamento and data_validita is null and data_creazione < ? and stato = 'NON_ESEGUITO';
delete from versamenti where data_validita is null and data_creazione < ? and stato = 'NON_ESEGUITO';
Per ognuna di queste categorie si devono eliminare anche i relativi tentativi di pagamento effettuati.
- [ ] Notifiche
Notifiche Consegnate
delete from notifiche where data_aggiornamento_stato < ? and stato = 'SPEDITO';
Notifiche non Consegnate
delete from notifiche where data_creazione < ? and stato = 'DA_SPEDIRE';