# Primo avvio e configurazione

Una volta scelto il tipo di distribuzione, creato il file delle istanze e creati i database si potrà effettuare il deploy dei servizi che compongono la piattaforma.

Al primo avvio verranno svolte alcune operazioni in automatico:

* Esecuzione delle migrazioni su tutti i database delle istanze specificate nel file `instances.yml`
* Esecuzione delle migrazioni sul database del registry
* Creazione dei topics di kafka necessari
* Creazione degli stream e delle tabelle sul  servizio **ksqldb-server**

Una volta eseguite queste azioni automatiche dovranno essere finalizzate le configruazioni degli ambienti da parte dell'utente.

### Configurazione dell'utente admin per il registry

Entrare nel servizio **registry** ed eseguire il seguente comando:

```
/app/venv/bin/python3.9 manage.py createsuperuser
```

Verrà avviata una procedura guidata per la creazione dell'utente **admin** per il registry

### Installazione dei componenti base nel form server

L'installazione dei componenti base nel formserver può essere fatta in automatico tramite l'esecuzione del formserver-init (Per maggiori info guardare i file di distribuzione)

Queste operazioni possono essere eseguite anche manualmente, effettuato una post alle api del form server:

I componenti da creare sono:

[address](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/address.json), [birth-info](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/birth-info.json), [fiscal-code](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/fiscal-code.json), [full-name](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/full-name.json), [gender](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/gender.json), [iban](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/iban.json), [minor-personal-data](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/minor-personal-data.json), [personal-data-contacts](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/personal-data-contacts.json), [personal-data-light](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/personal-data-light.json), [personal-data-minimal](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/personal-data-minimal.json), [personal-data](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/personal-data.json), [residency](https://gitlab.com/opencity-labs/area-personale/core/-/blob/master/compose_conf/formserver/init.d/residency.json)&#x20;

### Variabili ambiente <a href="#environment-variables" id="environment-variables"></a>

Di seguito la lista delle variabili d'ambiente che possono essere configurare nel microservizio core della piattaforma

| Nome                            | Required | Default                                                                        | Note                                                                                                                                                                                                  |
| ------------------------------- | -------- | ------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OCSDC\_SCHEME                   | No       | https                                                                          | Usato per i link inseriti nelle email transazionali                                                                                                                                                   |
| OCSDC\_HOST                     | No       | localtest.me                                                                   | Usato per i link inseriti nelle email transazionali                                                                                                                                                   |
| DB\_DRIVER                      | No       | pdo\_pgsql                                                                     | Database configuration                                                                                                                                                                                |
| DB\_HOST                        | No       | postgres                                                                       |                                                                                                                                                                                                       |
| DB\_PORT                        | No       | 5432                                                                           |                                                                                                                                                                                                       |
| DB\_NAME                        | No       | sdc\_multi                                                                     |                                                                                                                                                                                                       |
| DB\_USER                        | No       | sdc                                                                            |                                                                                                                                                                                                       |
| DB\_PASSWORD                    | No       | sdc                                                                            |                                                                                                                                                                                                       |
| MAILER\_URL                     | No       | smtp\://mailserver:1025                                                        | Configurazione per l'invio di messaggi transazionali (DSN)                                                                                                                                            |
| PEC\_MAILER\_TRANSPORT          | No       | smtp                                                                           | Configurazione server per l'invio di messaggi ai sistemi di protocollo che accettano PEC                                                                                                              |
| PEC\_MAILER\_HOST               | Yes      | smtp.pec.host                                                                  |                                                                                                                                                                                                       |
| PEC\_MAILER\_PORT               | No       | 465                                                                            |                                                                                                                                                                                                       |
| PEC\_MAILER\_USER               | No       | null                                                                           |                                                                                                                                                                                                       |
| PEC\_MAILER\_PASSWORD           | No       | null                                                                           |                                                                                                                                                                                                       |
| PEC\_DELIVERY\_ADDRESS          | Yes      | <pec.stanzadelcittadino@localtest.me>                                          |                                                                                                                                                                                                       |
| APP\_SECRET                     | Yes      | ThisTokenIsNotSoSecretChangeIt                                                 |                                                                                                                                                                                                       |
| DEFAULT\_FROM\_EMAIL\_ADDRESS   | No       | <stanzadelcittadino@localtest.me>                                              |                                                                                                                                                                                                       |
| WKHTMLTOPDF\_SERVICE            | Yes      | [http://gotenberg:3000](http://gotenberg:3000/)                                | Url dell'API del servizio Gotenberg                                                                                                                                                                   |
| PDF\_CONVERT\_TYPE              | No       | url                                                                            | Tipo di conversione utilizzata nella stampa pdf di una pratica, possibili valori: url - (il micro servizio visita la pagina da stampare), html (al micro servizio viene passato l'html della pratica) |
| EZ\_PASSWORD                    | No       | ez                                                                             |                                                                                                                                                                                                       |
| PASSWORD\_LIFE\_TIME            | No       | 365                                                                            | Durata in giorni della password per amministratori e operatori: dopo questa data l'account resta attivo ma al primo login verra' richiesto il cambio password                                         |
| INACTIVE\_USER\_LIFE\_TIME      | No       | 545                                                                            | Numero massimo di giorni dopo il quale in assenza di login l'account viene bloccato                                                                                                                   |
| FORMSERVER\_PRIVATE\_URL        | Yes      | http//formserver                                                               | URL al formserver usato dal processo PHP per aggiornare i moduli                                                                                                                                      |
| FORMSERVER\_PUBLIC\_URL         | Yes      | [http://formserver.localtest.me](http://formserver.localtest.me/)              | URL al formserver usato da utenti ed operatori per visualizzare i moduli                                                                                                                              |
| FORMSERVER\_ADMIN\_URL          | Yes      | [http://formserver.localtest.me](http://formserver.localtest.me/)              | URL al formserver usato dagli amministratori per visualizzare i moduli                                                                                                                                |
| HASH\_VALIDITY                  | No       | 1                                                                              |                                                                                                                                                                                                       |
| TOKEN\_TTL                      | No       | 3600                                                                           | Durata del token di autenticazione in secondi                                                                                                                                                         |
| RECAPTCHA\_KEY                  | Yes      |                                                                                | Credenziali del recaptcha usato sulle pratiche anonime                                                                                                                                                |
| RECAPTCHA\_SECRET               | Yes      |                                                                                | Credenziali del recaptcha usato sulle pratiche anonime                                                                                                                                                |
| SENTRY\_DSN                     | No       |                                                                                | Se configurato abilita l'integrazione con un server [Sentry](https://sentry.io/)                                                                                                                      |
| SENTRY\_TRACES\_SAMPLE\_RATE    | No       |                                                                                | Decimale da 0 a 1. Specifica la percentuale di transazioni inviate a Sentry. (Esemio: se impostato 0.2 il 20% delle transazioni saranno registrate ed inviate)                                        |
| LOGIN\_ROUTE                    | No       | login\_pat                                                                     | Autenticazione di default, sovrascribile per tenant                                                                                                                                                   |
| SINGLE\_LOGOUT\_URL             | No       | /Shibboleth.sso/Logout                                                         | Url a cui rendirizzare dopo il logout                                                                                                                                                                 |
| BROWSERS\_RESTRICTIONS          | No       | null                                                                           |                                                                                                                                                                                                       |
| CACHE\_MAX\_AGE                 | No       | 0                                                                              | Valore degli header `cache-control` restituiti dai path che consentono il caching                                                                                                                     |
| UPLOAD\_DESTINATION             | No       | local\_filesystem                                                              | Destinazione dei file caricati dagli utenti del sistema. Alternativa: s3\_filesystem e allora richiede le variabili S3\_\*\* per dettagliare le configurazioni                                        |
| S3\_REGION                      | No       | eu-west-1                                                                      |                                                                                                                                                                                                       |
| S3\_KEY                         | No       |                                                                                |                                                                                                                                                                                                       |
| S3\_SECRET                      | No       |                                                                                |                                                                                                                                                                                                       |
| S3\_BUCKET                      | No       | test                                                                           |                                                                                                                                                                                                       |
| KAFKA\_BROKERS                  | No       |                                                                                | Lista dei broker di kafka, necessaria per i check sui pagamenti                                                                                                                                       |
| KAFKA\_URL                      | No       | null                                                                           | Se configurato, gli eventi delle entità dell'applicativo vengono inviati al server Kafka                                                                                                              |
| KAFKA\_TOPIC\_APPLICATIONS      | No       | applications                                                                   | Nome del topic a cui vengono inviati gli eventi relativi alle Pratiche                                                                                                                                |
| KAFKA\_TOPIC\_SERVICES          | No       | services                                                                       | Nome del topic a cui vengono inviati gli eventi relativi ai Servizi                                                                                                                                   |
| KAFKA\_TOPIC\_PAYMENTS          | No       | payments                                                                       | Nome del topic a cui vengono inviati gli eventi relativi ai Payments                                                                                                                                  |
| API\_VERSION                    | No       | 1                                                                              | Versione delle API service in caso non venga specificato                                                                                                                                              |
| SKIP\_CACHE\_WARMUP             | No       | false                                                                          | Salta la creazione anticipata della cache all'avvio del container                                                                                                                                     |
| SIGNATURE\_CHECK\_WS\_URL       | No       | null                                                                           | Url del microservizio per la verifica dei file firmati                                                                                                                                                |
| IP\_INFO\_WS\_URL               | No       | null                                                                           | Url del microservizio per recupero di informazioni da ip                                                                                                                                              |
| DEFAULT\_CACHE\_REDIS\_PROVIDER | No       | redis\://redis:6379                                                            | Provider della cache redis espresso in DSN. Es: redis\://redis:6379                                                                                                                                   |
| DEFAULT\_CACHE\_LIFETIME        | No       | 86400                                                                          | TTL (Time To Live) della cache dell'applicazione espresso in secondi. Valore di default 86400 (1 giorno)                                                                                              |
| DEFAULT\_CACHE\_PREFIX\_SEED    | No       | sdc                                                                            | Utilizzato per calcolare le chiavi della cache                                                                                                                                                        |
| SATISFY\_WIDGET\_URL            | No       | <https://static.opencityitalia.it/widgets/satisfy/version/1.5.5/js/satisfy.js> | Url del widget per la valutazione delle pagine/servizi da parte degli utenti                                                                                                                          |
| SATISFY\_API\_URL               | No       | <https://satisfy.opencityitalia.it/v1/graphql>                                 | Endpoint API per la configurazione del widget di soddisfazione utente                                                                                                                                 |
| SATISFY\_RATINGS\_URL           | No       | <https://satisfy.opencityitalia.it/api/v1/ratings>                             | Endpoint API per le valutazioni del widget di soddisfazione utente                                                                                                                                    |
| SATISFY\_SECRET                 | No       | null                                                                           | Secret per accesso alle API per la configurazione del widget di soddisfazione utente                                                                                                                  |
| REGISTRY\_API\_URL              | No       | null                                                                           | Endpoint API per la configurazione dei protocolli esterni disponibili nel registry                                                                                                                    |
| REGISTRY\_API\_KEY              | No       | null                                                                           | Secret per accesso alle API per la configurazione dei protocolli esterni disponibili nel registry                                                                                                     |
| HOME\_PAGE                      | No       | servizi\_list                                                                  | Serve per specificare una homepage differente dalla lista dei servizi, il valore deve essere il nome di una rotta                                                                                     |
| API\_USER\_PASSWORD             | No       | change\_me                                                                     | Password per l'utente api                                                                                                                                                                             |
| STACK\_IDENTIFIER               | No       | sdc                                                                            | Identificativo dello stack attuale                                                                                                                                                                    |

### Integrazioni terze parti <a href="#integrazioni-terze-parti" id="integrazioni-terze-parti"></a>

| Nome                      | Required | Default                            | Note                                                                                                                                |
| ------------------------- | -------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| PITRE\_ADAPTER\_URL       | No       | [http://pitre](http://pitre/)      | Indirizzo del Pitre Soap Proxy                                                                                                      |
| GISCOM\_ADAPTER\_URL      | No       | <https://www.giscom.cloud/WebAPI/> |                                                                                                                                     |
| GISCOM\_PASSWORD          | No       | giscom                             |                                                                                                                                     |
| GISCOM\_ADAPTER\_USERNAME | No       | pippo                              |                                                                                                                                     |
| GISCOM\_ADAPTER\_PASSWORD | No       | passw                              |                                                                                                                                     |
| QUEUEIT\_CUSTOMER\_ID     | No       |                                    | Integrazione con servizio [queue-it](https://queue-it.com/)                                                                         |
| QUEUEIT\_SECRET           | No       |                                    | Your 72 char secret key as specified in Go Queue-it self-service platform                                                           |
| QUEUEIT\_CONFIG\_FILE     | No       |                                    | Absolute path of [Queue-it configuration file](https://github.com/queueit/KnownUser.V3.PHP/blob/master/Documentation/README.md)     |
| MYPAY\_ADAPTER\_URL       | No       |                                    | Indirizzo del MyPay Soap Proxy                                                                                                      |
| IO\_API\_URL              | No       | <https://api.io.italia.it/api/v1>  | Url a cui effettuare le chiamate per l'App.IO: e' possibile con questa variabile indirizzare le chiamate a un proprio proxy interno |

### &#x20;<a href="#configurazione-tenants" id="configurazione-tenants"></a>

### Configurazione tenants <a href="#configurazione-tenants" id="configurazione-tenants"></a>

Il sistema è *multitenant-multiple-databases*, i tenant configurati sono nel file `app/instances_${APP_ENV}.yml`

E' possibile sovrascrivere il file dei tenant con alcune variabili d'ambiente:

| Nome                             | Required | Default | Note                                                                                         |
| -------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------- |
| INSTANCE\_OVERRIDE               | No       | false   | Impostare a true per abilitare la funzionalità                                               |
| INSTANCE\_address                | No       |         | Indirizzo completo dell'applicazione, es: stanzadelcittadino.localtest.me/comune-di-bugliano |
| INSTANCE\_identifier             | No       |         | Identificativo dell'ente sul database, es: comune-di-bugliano                                |
| INSTANCE\_database:              | No       |         | Nome del database dell'istanza, es: sdc\_bugliano                                            |
| INSTANCE\_codice\_meccanografico | No       |         | Codice meccanografico, es: c\_cbug (puo' essere un codice di fantasia)                       |

### &#x20;<a href="#abilitazione-features" id="abilitazione-features"></a>

### Abilitazione features <a href="#abilitazione-features" id="abilitazione-features"></a>

Mediante specifiche variabili d'ambiente è possibile abilitare o disabilitare features.

```
FEATURE_NOME=true
```

Feature disponibili:

* Browser outdated, si abilita tramite la variabile d'ambiente `FEATURE_NEW_OUTDATED_BROWSER`: sostituisce il vecchio plugin browser outdated per la verifica di browser obsoleti. Migliora la scelta di browser compatibili tramite la versione minima configurata. Supporta browser mobile con callback specifiche per Web - Android - IOS.
* Interfaccia di dettaglio pratica per il cittadino, si abilita tramite la variabile d'ambiente `FEATURE_APPLICATION_DETAIL`: sostituisce l'interfaccia di dettaglio ad uso del cittadino, migliorandone la user experience. Consente inoltre lo scambio di messaggi tra operatore e cittadino.
* Calendari con appuntamenti a intervalli dinamici, si abilita tramite la variabile d'ambiente `FEATURE_CALENDAR_TYPE`: aggiunge la possibilità di modificare la tipologia di appuntamenti di un calendario aggiungendo la possibilità di gestire prenotazioni ad intervalli variabili
* Interfaccia per operatori e admin, si abilita tramite la variabile d'ambiente `FEATURE_ANALYTICS`: abilita la pagina operatori/analytics mostrando dati statistici della stanza.
* Identificativo univoco del servizio, si abilita/disabilita tramite la variabile d'ambiente `FEATURE_SERVICE_IDENTIFIER`: Consente all'amministratore di definire ed editare per ogni servizio un identificativo univoco.
* Orari di apertura sovrapposti, si abilita/disabilita tramite la variabile d'ambiente `FEATURE_OVERLAPPED_OPENING_HOURS`: Consente all'amministratore di creare un calendario dove si possono aggiungere più orari di apertura nella stessa fascia oraria. Sovrascribile a livello di tenant.
* Gestione dovuti, mediante variabile d'ambiente `FEATURE_DUE_AMOUNT`. Sovrascribile a livello di tenant con `feature_due_amount`.
* Abilitazione dell'integrazione con la PDND, mediante variabile d'ambiente `FEATURE_PDND`. Sovrascribile a livello di tenant con `feature_pdnd`.
* Abilitazione della personalizzazione dei template dei pdf per ente e servizio mediante variabile d'ambiente `FEATURE_CUSTOM_TEMPLATES`. Sovrascribile a livello di tenant con `feature_custom_templates`.
* Abilitazione dell'interfaccia di configurazione dei pagamenti multipli (Supportata solo su alcuni proxy di pagamento è attualmente ancora in sviluppo) `FEATURE_MULTIPLE_PAYMENTS`. Sovrascrivibile a livello di tenant con `feature_multiple_payments`.
* Abilitazione del backoffice lato operatore per la moderazione delle segnalazioni `FEATURE_INEFFICIENCIES_BACKOFFICE`. Sovrascribile a livello di tenant con `feature_inefficiencies_backoffice`.
* Abilitazione della sezione lato amministratore per l'assegnazione automatica delle pratiche in base al valore di un campo espresso in fase di compilazione della pratica `FEATURE_AUTOMATIC_APPLICATIONS_ASSIGNMENT`. Sovrascribile a livello di tenant con `feature_automatic_applications_assignment`
* Abilitazione della visualizzazione e gestione da parte degli operatori del Livello di priorità delle pratiche. `FEATURE_APPLICATIONS_PRIORITY`. Sovrascribile a livello di tenant con `feature_applications_priority`
* Abilitazione di 2 nuovi workflow per la gestione delle pratica Silenzio assenso e Silenzio diniego `FEATURE_TACIT_OUTCOME`. Sovrascribile a livello di tenant con `feature_tacit_outcome`
* Abilitazione della nuova area personale per la visualizzazione delle pratiche `FEATURE_PERSONAL_AREA_V2`. Sovrascribile a livello di tenant con `feature_personal_area_v2`
* Abilitazione della nuova area personale per la visualizzazione dei d `FEATURE_PERSONAL_AREA_DOCUMENTS_V2`. Sovrascribile a livello di tenant con `feature_personal_area_documents_v2`
* Abilitazione di una nuova tipologia di servizio denominato Helpdesk `FEATURE_HELPDESK_SERVICE`. Sovrascribile a livello di tenant con `feature_helpdesk_service` . Il servizio Helpdesk è un tipo di servizio che ha una gestione semplificata e crea una tipologia di pratiche denominate Ticket
* Abilitazione dell'integrazione con il CMS dei calendari raggruppati `FEATURE_GROUPED_CALENDARS`. Sovrascribile a livello di tenant con `feature_grouped_calendars` . Abilitanto questa opzione sarà possibile raggruppare lato cms i calendari erogati da un unico servizio, l'area personale terrà conto di questi raggruppamenti  in caso di modifica degli appuntamenti permettendo di spostarli in uno dei calendari collegati.
* Abilitazione della generazione di un codice breve per le pratiche tramite l'associazione dei servizi ad una strategia di generazione di codici `FEATURE_APPLICATION_SHORT_CODE` . Sovrascrivibile a livello di tenant con `feature_application_short_code`
* Abilitazione della creazione dei documenti ai fini della protocollazione tramite API (per ora supportata solo su un intermediario di protocollo `FEATURE_DOCUMENTS_API` . Sovrascrivibile a livello di tenant con `feature_documents_api`.
* Restrizione della modifica dei calendari ai soli proprietari del calendario e agli amministratori, della creazione ai solo amministratori `FEATURE_CALENDAR_MANAGEMENT_RESTRICTION`. Sovrascrivibile a livello di tenant con `feature_calendar_management_restriction`&#x20;
* Il cambio stato delle pratiche con pagamento associato avviene solo dopo effettivo aggiornamento dei pagamenti tramite payment poller e non al ritorno dal checkout  `FEATURE_STRICT_PAYMENT_CHECK`. Sovrascrivibile a livello di tenant con `feature_strict_payment_check`

### Abilitazione protocolli <a href="#abilitazione-protocolli" id="abilitazione-protocolli"></a>

Nel file di configurazione `config/packages/app.yaml` è possibile configurare i protocolli disponibili all'amministratore nella configurazione del servizio. Per configurare un protocollo è sufficiente aggiungere una voce alla lista dei protocolli disponibili `register_providers`

```
  <key>:
    name: <name>
    url: <protocol_provider_url>
    handler: <handler>
    headers:
      - '<header-name>=<header_value>'
    enabled: <true|false>
```

dove:

| Nome      | Required | Note                                                                                                                                                    |
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `key`     | Yes      | Identificativo univoco del protocollo                                                                                                                   |
| `name`    | Yes      | Nome visualizzato dall'amministratore nella configurazione del servizio                                                                                 |
| `handler` | Yes      | Tipologia di protocollo: `infor` `sipal` `pec` `pitre` `external` (indicare `external` se l'implementazione del protocollo è esterna all'applicazione ) |
| `url`     | No       | Url API del protocollo esterno (obbligatorio se si utilizza l'handler `external`)                                                                       |
| `headers` | No       | Eventiali headers necessari per la comunicazione con le API del protocollo esterno                                                                      |
| `enabled` | Yes      | Indica se la configurazione del protocollo è abilitata sull'ente                                                                                        |

<br>
