# Importazioni massive

## Introduzione

La seguente sezione descrive lo standard per l'importazione massiva di dati da sistemi esterni e della loro integrazione all’interno della piattaforma. L'importazione viene attivata in corrispondenza di specifici eventi applicativi (ad esempio autenticazione dell’utente o trigger di sistema quali eventi o webhook) e gestisce la sincronizzazione dei record tra i provider esterni e il sistema di archiviazione locale.

## Trigger Pattern

{% @mermaid/diagram content="flowchart TB
A\[Azione Utente] --> B\[Event Source]
B --> C\[Event Handler]
C --> D\[Authentication Flow]
D --> E\[Import Flow]" %}

### **Event Source**

Componente responsabile della generazione di eventi, derivanti da interazioni utente o trigger applicativi/sistemici (es. autenticazione, webhook, scheduler).

### **Event Handler**

Modulo di orchestrazione che riceve eventi dall’Event Bus, li interpreta e instrada i flussi applicativi corrispondenti.

### **Authentication Flow**

Flusso dedicato alla gestione dei meccanismi di autenticazione e autorizzazione necessari per l’accesso a sistemi o provider esterni.

### **Import Flow**

Flusso che implementa la logica di acquisizione, trasformazione e integrazione dei dati provenienti da sistemi esterni nel dominio applicativo locale.

## Three-Phase Import Pattern

Il pattern di importazione si suddivide in tre fasi:

{% @mermaid/diagram content="flowchart LR
A\[Phase 1: Prepare] --> B\[Phase 2: Execute]
B --> C\[Phase 3: Process]" %}

### **Fase 1: Preparazione (Request Builder)**

* **Input**: Parametri contestuali (utente, tenant, configurazioni applicative)
* **Output**: Richiesta strutturata per il sistema esterno
* **Responsabilità**: Composizione della richiesta (payload, intestazioni, endpoint di destinazione)

### **Fase 2: Esecuzione (Provider Communication)**

* **Input**: Richiesta preparata
* **Output**: Risposta del sistema esterno
* **Responsabilità**: Invocazione del canale di comunicazione (es. HTTP, SOAP, gRPC), gestione degli errori, raccolta di metriche e tracciamento delle prestazioni

### **Fase 3: Elaborazione (Data Processing)**

* **Input**: Risposta del sistema esterno
* **Output**: Entità normalizzate e integrate nel dominio applicativo locale
* **Responsabilità**: Mappatura, arricchimento e persistenza dei dati

## Data Processing Pattern

Il pattern di importazione e gestione dei dati si articola in **sei fasi principali**, ognuna con responsabilità specifiche e complementari. Questo approccio garantisce ordine, chiarezza e tracciabilità del processo end-to-end, dalla ricezione dei dati esterni fino alla loro persistenza e notifica nel sistema locale.

{% @mermaid/diagram content="flowchart TB
A\[Dati Provider Esterno] --> B\[Data Lookup]
B --> C{Esiste?}
C -- Sì --> D\[Update Pattern]
C -- No --> E\[Create Pattern]
D --> F\[Data Enrichment]
E --> F\[Data Enrichment]
F --> G\[Persistence]
G --> H\[Event Publish]
" %}

### Data Lookup

La prima fase prevede la ricerca e l’identificazione di entità già presenti nel sistema, al fine di determinare se i dati ricevuti corrispondono a record esistenti.

### Update Pattern

Se un’entità esistente viene individuata, entra in gioco la strategia di aggiornamento. In questa fase vengono applicate le regole di aggiornamento per mantenere i dati coerenti e allineati con le informazioni più recenti.

### Create Pattern

Qualora non venga rilevata alcuna corrispondenza, il sistema procede alla creazione di nuove entità. Questa fase consente di ampliare il patrimonio informativo con record del tutto nuovi.

### Data Enrichment

Una volta individuate o create le entità, queste possono essere arricchite con informazioni complementari. L’arricchimento può attingere a fonti esterne o interne per completare i dati e aumentarne il valore informativo.

### Persistence

Terminata la fase di arricchimento, le entità normalizzate vengono salvate nel livello di persistenza del sistema. Questa operazione assicura la disponibilità dei dati per le elaborazioni successive e per l’uso applicativo.

### Event Publish

Infine, ogni modifica o creazione viene notificata all’infrastruttura di messaggistica tramite la pubblicazione di eventi. In questo modo altri componenti o servizi possono reagire in tempo reale ai cambiamenti avvenuti.

## External Data Enrichment Pattern

Il processo di arricchimento dei dati si fonda su diverse fonti informative e di configurazione. Ognuna di esse fornisce un contributo specifico alla costruzione dell’entità finale, garantendo accuratezza, coerenza e contestualizzazione rispetto al dominio applicativo.

{% @mermaid/diagram content="flowchart TB
A\[Dati Core dal Provider]
C\[Dataset Esterni]
D\[Data Enricher]
E\[Entità Arricchita]

```
A --> D
C --> D
D -.-> E
```

" %}

### Dati Core dal Provider

Contiene le configurazioni specifiche di tenant e servizio, consentendo di adattare la logica di arricchimento al contesto applicativo e garantendo flessibilità multi-tenant.

### Dataset Esterni

Rappresenta una possibile fonte esterna di supporto, costituita da dataset o sistemi di categorizzazione che possono essere utilizzati per classificare e organizzare i dati secondo criteri predefiniti. L’impiego di questa fonte è opzionale e non sempre necessario: viene adottato solo nei casi in cui la classificazione o la segmentazione delle entità porti un valore aggiunto al processo di arricchimento.
