# Integrazioni con il flusso delle pratiche

La piattaforma può offrire sia una esperienza completa al cittadino o all'impresa, che consente l'invio di pratiche e la loro gestione nel backend, sia farsi carico di uno solo di questi aspetti, lasciando ad altri sistemi il ruolo di interfaccia con il cittadino o a sistemi verticali il compito di gestire pratiche (pratiche edilizie o in ambito sociale)

In presenza di questa esigenza è importante che la piattaforma e il sistema terzo siano in grado di instaurare  e mantenere nel tempo la relazione tra le pratiche, mantenere aggiornati lo stato della pratica o di un pagamento pendente per la stessa.

Vari strumenti nella piattaforma consentono di mantenere aggiornate le informazioni e ricevere aggiornamenti:

1. API ReST
2. Webhook

Prima di entrare nei dettagli di questi strumenti merita avere uno sguardo di insieme del flusso della pratica e di tutti gli stati che può attraversare. Nel grafico che segue il tratto continuo più forte rappresenta il flusso più frequente di una pratica, il tratto punteggiato rappresenta i flussi alternativi. I cerchi costituiscono gli stati finali di una pratica

{% @mermaid/diagram content="---
title: Flusso di una pratica in un servizio con protocollazione
---------------------------------------------------------------

graph LR
Bozza==>Sent\[Inviata]
Sent==>|PDF|Acquisita
Sent-.->Retired((Ritirata))
Acquisita==>|?|Protocollata
Acquisita-.->Retired((Ritirata))
Protocollata==>InCarico
Acquisita-.->InCarico
InCarico==>Accepted((Approvata))
InCarico-.->Refused((Rifiutata))
InCarico-.->Cancelled((Annullata))" %}

{% @mermaid/diagram content="---
title: Flusso di una pratica con pagamento anticipato
-----------------------------------------------------

graph LR
Bozza==>PaymentPending\[In attesa di pagamento]
PaymentPending==>|Pagata|Sent\[Inviata]
PaymentPending-.->|Pagamento fallito|Sent\[Inviata]
Sent==>|PDF|Acquisita
Sent-.->Retired((Ritirata))
Acquisita==>|?|Protocollata
Acquisita-.->Retired((Ritirata))
Protocollata==>InCarico
Acquisita-.->InCarico
InCarico==>Accepted((Approvata))
InCarico-.->Refused((Rifiutata))
InCarico-.->Cancelled((Annullata))" %}

{% @mermaid/diagram content="---
title: Flusso di una pratica con pagamento posticipato
------------------------------------------------------

graph LR
Bozza==>Sent\[Inviata]
Sent==>|PDF|Acquisita
Sent-.->Retired((Ritirata))
Acquisita==>|?|Protocollata
Acquisita-.->Retired((Ritirata))
Protocollata==>InCarico
Acquisita-.->InCarico
InCarico==>PaymentPending\[In attesa di pagamento]
PaymentPending==>Payed\[Pagata]
PaymentPending-->PaymentFailed\[Pagamento fallito]
PaymentFailed\[Pagamento fallito]-->Cancelled
Payed\[Pagata]==>Accepted((Approvata))

```
InCarico-.->Refused((Rifiutata))
InCarico-.->Cancelled((Annullata))" %}
```

Per una visione generale di tutti gli stati che una pratica può assumere e quali sono i cambi di stato ammessi segue un grafico più generale. Nel grafico sono evidenziati in azzurro gli stati fondamentali della pratica, mentre in grigio gli stati deprecati.

{% @mermaid/diagram content="---
title: Macchina a stati delle pratiche (completo)
-------------------------------------------------

stateDiagram-v2
Bozza: Bozza<br/>#1900
Inviata: Inviata<br/>#2000
InCarico: Presa in carico<br/>#4000
Approvata: Accettata<br/>#7000
ApprovazioneP: Accettata in attesa<br/>di protocollazione #6000
Rifiutata: Rifiutata<br/>#9000
RifiutataP: Rifiutata in attesa <br/>di protocollazione #8000
Ritirata: Ritirata<br/>#20000
Annullata: Annullata<br/>#50000
InvioProtocollato: Protocollata<br/>#3000

```
DaIntegrare: In attesa di integrazioni<br/>#4200
DaIntegrareP: Integrazioni in attesa<br/>di protocollazione #4300
IntegrazioniP: Integrazioni protocollate<br/>#4400 
```

classDef goodState fill:white,color:blue,font-weight:bold,stroke:blue
classDef deprecatedState fill:white,color:gray,stroke:gray;
classDef badBadEvent fill:#f00,color:white,font-weight:bold,stroke-width:2px,stroke:yellow

class Pagamento, Acquisita, InvioProtocollato, ApprovazioneP, RifiutataP, DaIntegrareP, IntegrazioniP deprecatedState
class Bozza, Inviata, InCarico, DaIntegrare, Approvata, Rifiutata, Ritirata, Annullata goodState

```
[*] --> Bozza
Inviata --> [*]

Bozza --> Pagamento
Bozza --> Inviata
Pagamento --> Inviata
note left of Pagamento: Anche se il pagamento NON<br/> va a buon fine
Inviata --> Acquisita: Creazione PDF richiesta
Acquisita --> InCarico
Acquisita --> InvioProtocollato
InvioProtocollato --> InCarico

InCarico --> DaIntegrare
DaIntegrare --> InCarico
DaIntegrare --> DaIntegrareP
DaIntegrareP --> IntegrazioniP
IntegrazioniP --> InCarico

InCarico --> Approvata
InCarico --> ApprovazioneP
ApprovazioneP --> Approvata 
Approvata --> [*]

InCarico -->  Rifiutata
InCarico --> RifiutataP
RifiutataP --> Rifiutata
Rifiutata --> [*]

InCarico -->  Annullata
Annullata --> [*]

Inviata --> Ritirata
Acquisita --> Ritirata
InvioProtocollato -->  Ritirata 

Ritirata --> [*]" %}
```
