Closed pperliti closed 8 months ago
Attualemente per un'utenza con visibilita' limitata su alcuni enti creditori viene applicato un filtro sulla tabella dei versamenti attraverso la join incriminata che si interrompe in caso di anomalie nell'acquisizione delle ricevute.
Questo filtro e' stato introdotto per la doppia autorizzazione su EC e UO, ma e' inutile poiche' le autorizzazioni sulla ragioneria si devono fare sull'intero EC.
La soluzione consiste nel spostare il filtro sugli EC associati direttamente sulla colonna cod_dominio
della tabella fr
.
Descrizione del Bug Qualora GovPay rifiuti una RT (es. pagamento proveniente da app IO con utilizzo incoerente delle API), il pagamento non viene registrato. Si potrebbe pensare di "recuperarlo" in autonomia una volta che siano disponibili i flussi di rendicontazione (es. rilevazione pagamento rendicontato ma non recepito -> richiesta RT a pagoPA tramite relativa API), tuttavia il flusso contenente il suddetto pagamento potrebbe non essere restituito dalla API
/v1/flussiRendicontazione
di BO qualora le credenziali di autenticazione utilizzate siano legate ad un ruolo (es. APPLICAZIONE) con visibilità limitata ad un dominio specifico. Il problema non si verifica invece qualora si utilizzi un ruolo con visibilità su tutti gli enti.Il problema sembra legato a come viene costruita la query per ottenere l'elenco dei flussi di rendicontazione. La query SQL generata nel metodo
it.govpay.bd.viste.RendicontazioniBD.count(RendicontazioneFilter filter)
invocato dait.govpay.core.dao.pagamenti.RendicontazioniDAO.listaRendicontazioni(...)
è infatti diversa a seconda della visibilità sui domini del ruolo utilizzato per l'autenticazione:Quest'ultima query esegue un join su
rendicontazioni.id_singolo_versamento = singoli_versamenti.id
tuttavia, nel caso in cui la RT sia stata rifiutata da GovPay,rendicontazioni.id_singolo_versamento
è NULL e quindi il join non ha effetto, restituendo un elenco di flussi vuoto.Come riprodurlo: Basta avere un flusso che faccia riferimento a un pagamento non recepito (RT rifiutata). La relativa riga di rendicontazione avrà
stato=ANOMALA
eanomalie='007101#Il pagamento riferito dalla rendicontazione non risulta presente in base dati.'
Chiedendo l'elenco flussi porterà a risultati diversi a seconda che il ruolo abbia visibilità su tutti i domini o solo su quello cui il flusso si riferisce.Risultato atteso: L'elenco dei flussi dovrebbe essere lo stesso in entrambi i casi. La query al punto 2) esegue un join che produce l'anomalia qualora
rendicontazioni.id_singolo_versamento = NULL
, quando (potenzialmente) il join non sarebbe nemmeno necessario ai fini dell'elenco dei flussi.Ambiente: