Skip to content
Jacopo Carlini edited this page Nov 14, 2024 · 11 revisions

Welcome to the pagopa-wisp-converter wiki!

/payments

flowchart TD
    A((Inizio)) --> B[Elimina timer su RPT]

    subgraph convert
    B --> C[Recupera RPTRequestEntity dal database]
    C --> E
    E[Estrai dati sessione da RPTRequestEntity] --> F[Salva RT come stato REDIRECT]
    F --> G[Genera posizione debitoria tramite API GPD]
    G --> H[Salva mappatura richiesta in cache per generazione RT]
    H --> I[Esegui chiamata al servizio di checkout]
    I --> J[Salva mappatura del carrello in cache]
    J --> K[Imposta timer eCommerce per ciascun avviso nel carrello]
    K --> L[Restituisci URI di reindirizzamento]
    
    
    end
    L --> V(((OK)))
    convert --> |Exception| Q[Registra messaggio di errore e invia RTKo]
    Q --> R{Eccezione è AppException?}
    R -->|Sì| S[Lancia nuovamente AppException]
    R -->|No| T[Lancia nuova AppException con codice errore]
    T --> U(((Errore)))
    S --> U

    style convert fill:#FFB793

Loading

/receipt/ok

flowchart TD
    A((Inizio: sendOkPaaInviaRt)) --> B[Converti payload in richiesta PaSendRTV2]

    subgraph main_flow [Flusso principale]
        B --> C[Recupera dati di configurazione dalla cache]
        C --> D[Recupera mapping NAV-IUV dalla cache]
        D --> E[Usa paymentNote per ottenere i dati di sessione]
        E --> F[Recupera stazione dalla cache e estrai ricevuta da richiesta]
        
        %% Controllo stazione su GPD
        F --> G{Stazione è abilitata su GPD?}
        G -->|Sì|K[Genera report per RT non generabile]
        K((Itera su ciascun RPT estratto)) --> L[estrazione delle RPT]
        L --> RE[salva evento RE]
        RE --> K
       

        G -->|No| H[Estrai RPT richiesti da sessionData]
        H --> HH((itear su ogni RPT))
        
        HH --> I[build request]
        I --> AA[genera idempotencyKey]
        AA --> BB{is IdempotencyKey Processable?} 
        BB --> |Si|CC[lock idempotency key status to avoid concurrency issues]
        BB --> |No|HH
        subgraph save
        CC --> DD[save receipt-rt with status SENDING and rawReceipt]
        DD --> EE[send the receipt to the creditor institution via the URL set in the station configuration]
        EE --> FF[generate a new event in RE for store the successful sending of the receipt]
        end
        FF --> GG[Unlock idempotency key after a successful operation]
        GG --> HH
        subgraph sendReceiptToCreditorInstitution
        save --> |eccezione|AAA{Cattura AppException o Exception}
        AAA --> |Exception|BBB[schedule a retry of the sending]
        AAA --> |AppException|CCC[is RECEIPT_GENERATION_ERROR_DEAD_LETTER]
        CCC --> |si|DDD[salva la request della dead letter]
        CCC --> |no|BBB
        BBB --> FFF@{ shape: cross-circ, label: "Summary" }
        DDD --> FFF
        end
        FFF --> GG
    end
     K --> |fine iterazioni|Fine
     HH --> |fine iterazioni|Fine
   
   

    %% Eccezione separata
    R[Cattura AppException o Exception] -->|AppException| S[Lancia nuovamente AppException]
    R -->|Exception| T[Lancia AppException con errore specifico]
    S --> errore(((errore)))
    T --> errore
    Fine(((OK)))

    %% Collegamento tra flusso principale e eccezione
    main_flow --> |eccezione|R
    
    style save fill:#f0b562
    style sendReceiptToCreditorInstitution fill:#80ed9d


Loading

/receipt/ko

flowchart TD
    subgraph main_flow [Flusso principale]
        A[Inizio: sendOkPaaInviaRtToCreditorInstitution] --> B[Converti payload in richiesta PaSendRTV2]
        B --> C[Recupera dati di configurazione dalla cache]
        C --> D[Recupera mapping NAV-IUV dalla cache]
        D --> E[Usa paymentNote per ottenere i dati di sessione]
        E --> F[Recupera stazione dalla cache e estrai ricevuta da richiesta]
        
        %% Controllo stazione su GPD
        F --> G{Stazione è abilitata su GPD?}
        G -->|Sì| H[Genera report per RT non generabile]
        
        %% Processo alternativo se stazione non è su GPD
        G -->|No| J[Estrai RPT richiesti da sessionData]
        J --> K((Inizio iterazione RPT))
        
        %% Iterazione e invio RPT per ciascun elemento
        K --> L[Clona e aggiorna richiesta PaSendRTV2 per gestione multi-beneficiario]
        L --> M[Genera header paaInviaRT per richiesta corrente]
        M --> N[Genera contenuto OK RT dal sessionData e configura ricevuta]
        N --> O[Invia ricevuta a istituto creditore]
        
        %% Gestione errori di invio
        O -->|Errore invio| P[Aggiungi a coda per retry]
        P --> K
        O --> K
        K --> U(((Fine iterazione RPT)))
     
    end
        H --> U

    %% Eccezione separata
    R[Cattura AppException o Exception] -->|AppException| S[Lancia nuovamente AppException]
    R -->|Exception| T[Lancia AppException con errore specifico]
    S --> V
    T --> V
    V(((Errore)))

    %% Collegamento tra flusso principale e eccezione
    main_flow --> R
    



Loading
Clone this wiki locally