# 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
---
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
---
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
---
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
---
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 --> [*]
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.opencityitalia.it/sviluppatori-e-partner-tecnologici/integrazioni/integrazioni-con-il-flusso-delle-pratiche.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
