govpay icon indicating copy to clipboard operation
govpay copied to clipboard

Svecchiamento dati

Open nardil opened this issue 5 years ago • 2 comments

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 avatar Nov 12 '20 13:11 nardil

@nardil ho implementato la prima parte delle nuove funzionalita' richieste dal task, sono emerse le seguenti problematiche:

  1. Non salviamo i pdf delle ricevute, si puo' fare ma richiede una modifica alla tabella stampe, dove si deve aggiungere il riferimento alla RPT.
  2. Nella lista delle entita' da svecchiare mancano le NotificheAppIO e i Promemoria inviati via mail.
  3. La funzionalita' di svecchiamento puo' essere disabilitata attraverso le API Backoffice?
  4. Come gestire le notifiche in stato 'ANNULLATA'?
  5. 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';

pintorig avatar Jan 08 '21 12:01 pintorig