> For the complete documentation index, see [llms.txt](https://docs.opencityitalia.it/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.opencityitalia.it/sviluppatori-e-partner-tecnologici/architettura/vista-generale.md).

# Vista generale

<figure><img src="/files/kuUtD2VkJE4XwTGoLNF7" alt=""><figcaption><p>Organizzazoine generale del sistema</p></figcaption></figure>

### Core

Il componente principale, il core, è ovviamente il frutto del lavoro dei primi anni di sviluppo della piattaforma, ed assolve ai compiti principali della stessa:

1. Definizione e organizzazione dei Servizi Digitali
2. Definizione dei Moduli on-line
3. Gestione delle Pratiche inviate dai cittadini e dei messaggi
4. Gestione degli utenti
5. Gestione Uffici e appuntamenti on-line su slot di tempo e orari di apertura.
6. Gestione Sale pubbliche e altre risorse a prenotazione flessibile

Il core assolve anche al compito di interfaccia utente, sia per i cittadini che per gli operatori e gli amministratori degli Enti.

<figure><img src="/files/QJw1k6FPxfxazm7gLFnr" alt=""><figcaption><p>Servizi che costituiscono il core</p></figcaption></figure>

{% hint style="info" %}
All'interno del core sono presenti alcune integrazioni con sistemi di protocollo e di intermediari di pagamento PagoPA: si tratta delle prime integrazioni realizzate quando lo sviluppo era di tipo monolitico, successivamente sono stati creati i sottosistemi dedicati alle integrazioni con Protocolli e Pagamenti. In futuro probabilmente queste integrazioni verranno riscritte come microservizi indipendenti, alleggerendo le responsabilità del core e guadagnandone anche la semplicità del codice e la sua manutenibilità.
{% endhint %}

Il core è costituito dai seguenti microservizi:

* **Caddy / Symfony App** (dal 2023 i due servizi sono distribuiti in una immagine unica: `registry.gitlab.com/opencontent/stanza-del-cittadino/core/app`)\
  Nota
* **Form Server**, implementazione del server di Form.IO: `registry.gitlab.com/opencontent/stanza-del-cittadino/form-server`
* **Form Builder**, un editor multi-tenant con accesso riservato agli amministratori della piattaforma per l'editing dei componenti condivisi dei form degli Enti: `registry.gitlab.com/opencontent/stanza-del-cittadino/formbuilderjs`
* **Varnish**, un cache proxy server che incrementa l'affidabilità e la scalabilità del formserver e del catalogo dei servizi: `registry.gitlab.com/opencontent/varnish:latest`
* **Gotenberg**, a Docker-powered stateless API for PDF files: `gotenberg/gotenberg:7`
* **Payment Updates,** ascolta gli eventi relativi ai pagamenti e aggiorna le pratiche di conseguenza: `registry.gitlab.com/opencontent/stanza-del-cittadino/payment-updater`
* **Signature Check**, api usata dal componente sdc\_upload di form.io per validate le firme dei documenti firmati .p7m: `geopartner/signcheckwebapi:latest`

Per un esempio completo di deploy dei microservizi si veda il file [`docker-compose.yml`](https://docs.opencityitalia.it/installazione-e-manutenzione/installazione) nel repositoy del core, che fornisce una configurazione funzionante della piattaforma.

{% hint style="info" %}
L'immagine **Caddy / Symfony App** viene usata sia per esporre la UI e le API, sia per l'esecuzione dei cron jobs, per un esempio si veda il file `docker-compose` usato in ambiente di sviluppo..
{% endhint %}

Utilizza inoltre i seguenti servizi di persistenza:

* **PostgreSQL**, per la gestione di tutti i dati e delle configurazioni della piattaforma, ad eccezione delle form. La versione usata in sviluppo è la 11 e comprende anche l'estensione PostGIS: `postgis/postgis:11-3.3-alpine`
* **MongoDB**, per la persistenza dei moduli realizzati con l'editor di Form.IO: `mongo:4.2`
* **Redis**, per la gestione delle sessioni degli utenti e della cache applicativa: `redis:5-alpine.`


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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/architettura/vista-generale.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.
