---
title: 'Analisi dei consumi'
description: 'Analisi completa di un singolo nodo di misura gas: qualità dei dati, profilo di consumo, passaporto del dispositivo e giornale eventi, con dettaglio forense opzionale.'
section: AI Analytics
weight: 1
related:
  - ai-analytics/node-reports/metering-bypass
  - ai-analytics/node-reports/battery-forecast
  - ai-analytics/fleet-reports/top-problem-nodes
---

import Alert from '@/components/docs/Alert.astro';
import Image from '@/components/docs/Image.astro';

L'Analisi dei consumi è un approfondimento metrologico e operativo dettagliato su **un singolo nodo di misura gas** nel periodo selezionato. L'obiettivo non è solo tracciare una curva di consumo, ma rispondere alle domande pratiche del servizio di misura. L'analisi applica i riferimenti metrologici internazionali laddove giustificano un valore: ISO 5167 (misura con diaframma), EN 12405-1 (convertitori elettronici di volume), OIML R 137 (contatori gas), OIML R 140 (sistemi di misura per combustibili gassosi), ISO 6976 (potere calorifico), EN 1359 (contatori gas a membrana) ed EN 14236 (contatori gas domestici a ultrasuoni).

## Scopo

<Image
  src="/images/ai-analytics/consumption-analytics/01_hero_block.svg"
  alt="Intestazione del report"
/>

_Intestazione del report._ La prima cosa che il lettore vede: nome e indirizzo del nodo, tipo di correttore, metriche chiave dell'ultima ora (P, T), volume totale di dati nella finestra (punti), numero di eventi rilevati, metodo di analisi (rules / rules+LLM / LLM-only), durata del recupero e periodo coperto.

Il report risponde alle domande quotidiane del servizio di misura:

- se i dati del periodo selezionato sono completi;
- se l'archivio è utilizzabile per la chiusura commerciale del periodo;
- se è presente un buco di coda alla fine del periodo;
- se la telemetria corrente è funzionante;
- se la portata oraria coincide con il volume cumulato;
- se qualche sensore P/T è bloccato;
- se vi sono problemi di comunicazione o di consegna dell'archivio;
- se il passaporto metrologico è sufficientemente compilato;
- se vi sono pattern sospetti di sotto-conteggio;
- se è necessario un sopralluogo;
- quale ruolo deve intervenire: metrologo, dispatcher, tecnico delle comunicazioni, tecnico di integrazione, squadra in campo o analista di fatturazione.

<Alert type="warning">
  Il report **non è una constatazione formale di incidente**. Non prova manomissioni, bypass o furto
  di gas. Mostra indicatori tecnici e metrologici che richiedono verifica. Un verdetto legale è un
  processo a parte che richiede un sopralluogo obbligatorio.
</Alert>

## Logica di base

Il report separa **tre valutazioni ortogonali** che non devono essere mescolate:

| Valutazione                        | Significato                                                                    |
| ---------------------------------- | ------------------------------------------------------------------------------ |
| Idoneità dei dati di periodo       | se l'archivio è utilizzabile per il periodo selezionato                        |
| Stato della telemetria corrente    | se il nodo è attivo nel momento di generazione del report                      |
| Idoneità alla chiusura commerciale | se il periodo è utilizzabile per la fatturazione senza riconciliazione manuale |

Un periodo storico può essere perfettamente utilizzabile per l'analisi anche se oggi il nodo è silente.

**Esempio di interpretazione corretta:**

```
Dati di periodo:        utilizzabili con riserva
Monitoraggio corrente:  degradato
Chiusura fatturazione:  non pronta per la chiusura definitiva
```

Questa non è una contraddizione. Significa: i dati storici sono parzialmente utilizzabili, ma la telemetria corrente o la chiusura commerciale richiedono una verifica aggiuntiva.

## Glossario

| Termine               | Significato                                                    |
| --------------------- | -------------------------------------------------------------- |
| Q                     | portata oraria, m³/h                                           |
| P                     | pressione del gas, kPa                                         |
| T                     | temperatura del gas, °C                                        |
| V                     | volume cumulato, m³                                            |
| ΣQ                    | somma delle portate orarie sul periodo                         |
| ΔV                    | incremento del volume cumulato sul periodo                     |
| H_expected            | quante ore erano dovute nel periodo di riferimento             |
| H_received            | quante registrazioni orarie sono state effettivamente ricevute |
| H_validQ              | quante registrazioni hanno un valore di portata valido         |
| H_nullQ               | quante registrazioni esistono ma con portata NULL              |
| H_missing             | quante ore sono assenti dall'archivio                          |
| final_tail_gap        | assenza di dati alla fine del periodo                          |
| internal_gap          | buco all'interno del periodo                                   |
| freshness             | quanto è recente l'ultima ora d'archivio                       |
| passport completeness | grado di compilazione del passaporto metrologico               |
| incident              | un problema raggruppato che richiede un intervento             |

## Finestra temporale di analisi

### Inizio e fine del periodo

Si impostano l'inizio e la fine del periodo. Il report analizza ogni ora dalle 00:00 del primo giorno alle 23:00 dell'ultimo giorno:

$$
\text{window\_start} = \text{report\_start } 00{:}00, \quad
\text{window\_end} = \text{report\_end } 23{:}00
$$

### Numero atteso di ore

$$
H_\text{expected} = \mathrm{count}(\text{hours from window\_start to window\_end})
$$

Per un periodo annuale tipicamente $H_\text{expected} \approx 8760$.

## Suddivisione della disponibilità d'archivio

| Categoria         | Significato                                               |
| ----------------- | --------------------------------------------------------- |
| Ora valida        | la registrazione esiste con un valore di portata corretto |
| Ora NULL          | la registrazione esiste ma la portata è vuota             |
| Buco interno      | ora mancante all'interno del periodo                      |
| Buco di coda      | ore mancanti alla fine del periodo                        |
| Ora non osservata | qualsiasi ora priva di un valore di portata valido        |

**Formule:**

$$
H_\text{received} = \mathrm{count}(\text{hourly records})
$$

$$
H_\text{validQ} = \mathrm{count}(\text{records where } Q \neq \text{NULL and } Q \geq 0)
$$

$$
H_\text{nullQ} = \mathrm{count}(\text{records where } Q = \text{NULL})
$$

$$
H_\text{missing} = \max(0, H_\text{expected} - H_\text{received})
$$

$$
H_\text{unobserved} = H_\text{missing} + H_\text{nullQ}
$$

<Alert type="warning">
  Il buco di coda **non viene conteggiato due volte** in aggiunta a `missing_records` quando quelle
  ore fanno già parte del totale delle ore mancanti.
</Alert>

## Completezza dei dati

<Image
  src="/images/ai-analytics/consumption-analytics/07_completeness_validity.svg"
  alt="Disponibilità, attualità e validità dei dati"
/>

_Disponibilità, attualità e validità_ sono tre fette ortogonali nel controllo di idoneità dell'archivio, prima di qualsiasi analisi di merito. La **completezza** risponde: quante delle ore attese sono arrivate. L'**attualità** — quanto sono aggiornati i dati _in questo momento_. La **validità** — se i valori rientrano in intervalli fisicamente ragionevoli.

### Formula di copertura

$$
\mathrm{Coverage}_\text{valid} = \frac{H_\text{validQ}}{H_\text{expected}} \times 100\,\%
$$

Inoltre:

$$
\mathrm{Coverage}_\text{received} = \frac{H_\text{received}}{H_\text{expected}} \times 100\,\%
$$

La differenza è importante:

- `Coverage_received` — se le registrazioni sono arrivate del tutto;
- `Coverage_valid` — se sono utilizzabili per l'analisi della portata.

### Interpretazione della copertura

| Copertura | Stato      | Significato                                       |
| --------- | ---------- | ------------------------------------------------- |
| ≥ 98 %    | Eccellente | archivio quasi completo                           |
| 95–98 %   | Buona      | utilizzabile con riserve minori                   |
| 80–95 %   | Attenzione | buchi evidenti                                    |
| 50–80 %   | Grave      | richiesta riconciliazione manuale                 |
| < 50 %    | Critica    | non utilizzabile per la maggior parte dei compiti |

## Buco di coda

Buco di coda = assenza di dati d'archivio alla fine del periodo selezionato.

$$
H_\text{tail} = \text{window\_end} - \text{last\_valid\_archive\_hour}
$$

| Coda    | Stato                                                            |
| ------- | ---------------------------------------------------------------- |
| ≤ 2 h   | accettabile                                                      |
| 2–6 h   | attenzione                                                       |
| 6–24 h  | grave                                                            |
| > 24 h  | critico                                                          |
| > 168 h | dispositivo silente da oltre una settimana — sopralluogo urgente |

Il buco di coda risponde alla domanda: **il periodo può considerarsi completamente chiuso?** Se mancano dati alla fine, il report può comunque essere utilizzabile per l'analisi retrospettiva ma **non è pronto** per la chiusura commerciale definitiva (vedi Verdetto di misura commerciale).

## Attualità dei dati

Due metriche di attualità distinte.

### Attualità rispetto alla fine del periodo

Usata per l'analisi storica e la fatturazione:

$$
\mathrm{Lag}_\text{period} = \text{window\_end} - \text{last\_valid\_archive\_hour}
$$

Risponde: **vi sono dati fino alla fine del periodo selezionato?**

### Attualità rispetto al momento di generazione

Usata per il monitoraggio corrente:

$$
\mathrm{Lag}_\text{current} = \text{generation\_time} - \text{last\_valid\_archive\_hour}
$$

Risponde: **il nodo è attivo proprio adesso?**

### Copertura delle ultime 24 ore

$$
\mathrm{Fresh}_{24h} = \frac{H_\text{validQ, last 24h}}{24} \times 100\,\%
$$

### Punteggio composito di attualità

$$
\mathrm{LagScore} = \max(0, 100 - 2 \times \mathrm{Lag}_\text{period})
$$

$$
\mathrm{FreshnessScore} = \frac{\mathrm{LagScore} + \mathrm{Fresh}_{24h}}{2}
$$

## Stato della telemetria corrente

<Image
  src="/images/ai-analytics/consumption-analytics/16_telemetry_major.svg"
  alt="Stato della telemetria corrente e riepilogo del nodo"
/>

_Monitoraggio corrente e riepilogo del nodo._ Questo blocco risponde alla domanda "possiamo agire su questo archivio in questo momento?". Vengono confrontati tre istanti: l'ultima ora archiviata, la fine della finestra di riferimento e il momento di generazione del report. Se le comunicazioni sono recenti ma l'archivio è in ritardo — il problema **non è presso il dispatcher** ma nel parser/upload lato server. Il commento dell'IA produce un breve riepilogo leggibile per l'operatore, **senza prevalere** sugli stati formali.

Calcolato **rispetto al momento di generazione**, non al periodo:

$$
\mathrm{Lag}_\text{archive, current} = \text{generation\_time} - \text{last\_archive\_hour}
$$

$$
\mathrm{Age}_\text{session} = \text{generation\_time} - \text{last\_session\_time}
$$

| Lag         | Stato      |
| ----------- | ---------- |
| ≤ 6 h       | normale    |
| 6–24 h      | attenzione |
| 24–72 h     | grave      |
| > 72 h      | critico    |
| nessun dato | critico    |

**Diagnosi differenziale:**

| Sintomo                               | Causa probabile                                     |
| ------------------------------------- | --------------------------------------------------- |
| sessioni recenti, archivio in ritardo | problema di **consegna archivio / parser / import** |
| nessuna sessione, nessun archivio     | modem / SIM / antenna / alimentazione / batteria    |

## Validità dei dati

Controlli di intervallo fisico per canale:

| Canale        | Condizione                                     |
| ------------- | ---------------------------------------------- |
| Portata Q     | $Q \geq 0$                                     |
| Pressione P   | $0 < P \leq 5000\text{ kPa}$                   |
| Temperatura T | $-50\,°\mathrm{C} \leq T \leq 80\,°\mathrm{C}$ |

Per canale:

$$
\mathrm{Validity}_\text{ch} = \frac{N_\text{ok}}{N_\text{total}} \times 100\,\%,
\quad
N_\text{ok} = N_\text{total} - N_\text{null} - N_\text{below} - N_\text{above}
$$

Aggregato:

$$
\mathrm{Validity}_\text{total} = \frac{\sum N_\text{ok}}{\sum N_\text{checked}} \times 100\,\%
$$

## Stabilità dei sensori

<Image
  src="/images/ai-analytics/consumption-analytics/06_sensor_health.svg"
  alt="Diagnostica della stabilità dei sensori"
/>

_Diagnostica dettagliata per i sensori P e T._ Ogni tratto bloccato riceve il proprio inizio/fine/durata/valore. Intervalli lunghi con lo stesso valore sono quasi sempre segno di guasto dell'ADC / reset del sensore / arresto operativo del flusso — **non** fisica reale. I picchi — salti bruschi ≥ soglia per ora — sono invece un artefatto di telemetria o un reset del sensore.

<Image
  src="/images/ai-analytics/consumption-analytics/05_sensors_critical.svg"
  alt="Stato dei sensori e piano d'azione"
/>

_Interpretazione e piano d'azione per i sensori._ "Stato del sensore: CRITICO" è una sintesi testuale finale su entrambi i canali. Ogni problema rilevato viene automaticamente etichettato con una raccomandazione, una priorità, un ruolo responsabile e un breve trigger (cosa specificamente è scattato).

### Sensore bloccato

Un sensore è considerato bloccato se il valore cambia a malapena per un tempo superiore alla soglia (24 h):

$$
H_\text{stuck} \geq 24 \text{ h}
$$

Tolleranza di identità (0,1 %):

$$
\mathrm{tol}(x) = \max\bigl(0.05,\ |x| \times 0.001\bigr)
$$

I punti sono considerati identici se $|x_i - x_\text{run}| \leq \mathrm{tol}(x_\text{run})$.

### Picco di temperatura

$$
|T_i - T_{i-1}| > 20\,°\mathrm{C / h}
$$

### Picco di pressione

$$
|P_i - P_{i-1}| > \max(1.0, 0.5 \times \overline{P})
$$

### Interpretazione

| Indicatore         | Significato                                                |
| ------------------ | ---------------------------------------------------------- |
| T bloccata a lungo | possibile guasto del sensore T                             |
| P bloccata a lungo | possibile guasto del sensore P o modalità `P_const`        |
| Molti picchi di P  | instabilità del canale o artefatto di telemetria           |
| Molti picchi di T  | errore del sensore o cambio brusco di modalità tecnologica |

<Alert type="warning">
  Un sensore bloccato **non è prova di manomissione**. È principalmente un rischio metrologico che
  richiede verifica secondo OIML R 137 / EN 12405-1.
</Alert>

## Punteggi aggregati di qualità d'archivio

<Image
  src="/images/ai-analytics/consumption-analytics/08_quality_summary.svg"
  alt="Pannello aggregato di qualità"
/>

_Pannello aggregato di qualità._ In alto — i KPI chiave del report (ore di dati, volume, eventi, inattività/deriva). Sotto — le schede di sezione (qualità dei dati, profilo di consumo, passaporto tecnico, sotto-conteggio e manomissione, anomalie e incidenti, giornaliero, sorgenti). Nella scheda qualità dei dati — 6 sotto-indicatori 0–100 più un verdetto verbale e i pesi del punteggio composito.

Il report produce **5 punteggi ortogonali** (0–100 ciascuno) che coprono aspetti distinti della qualità:

| Punteggio                     | Riguarda                               |
| ----------------------------- | -------------------------------------- |
| `score_historical_archive`    | usabilità dei dati storici del periodo |
| `score_data_validity`         | correttezza dei valori Q/P/T           |
| `score_sensor_health`         | stato dei sensori (bloccaggi, picchi)  |
| `score_timeliness`            | attualità di archivio e sessioni       |
| `score_operational_readiness` | prontezza per il monitoraggio corrente |

<Alert type="warning">
  Uno **scalare composito** unico di "qualità complessiva" non viene volutamente prodotto —
  mescolare l'usabilità storica con l'attualità produce un quadro falsamente rassicurante. Ogni
  punteggio si legge separatamente con il proprio verdetto.
</Alert>

## Stima del volume potenzialmente non osservato

<Image
  src="/images/ai-analytics/consumption-analytics/14_uncovered_volume.svg"
  alt="Stima del rischio del volume non osservato"
/>

_Due stime diverse dello stesso volume._ La media di periodo è conservativa (riempimento della coda con profilo piatto), mentre il profilo per ore attive coglie meglio il ritmo diurno (turno di lavoro / notte / weekend). Lo scarto tra le due è l'**intervallo di incertezza**, non un singolo punto. Il livello di rischio dipende dalla durata del buco e dalla portata media caratteristica.

<Image
  src="/images/ai-analytics/consumption-analytics/11_anomalous_month.svg"
  alt="Mese di consumo anomalo"
/>

_Mese di consumo anomalo._ Le anomalie mensili sono un segnale a parte, valutato rispetto al ritmo annuale (stagione di riscaldamento vs estate). Se un determinato mese supera **in modo sostanziale** la mediana degli altri (soglia × 2), viene automaticamente evidenziato in cima con il suggerimento di controllare il feed eventi, il passaporto e le cause tecnologiche.

Questo blocco stima quanto gas potrebbe essere passato durante le ore prive di dati d'archivio validi.

<Alert type="warning">
  Questa **non è una perdita confermata**. Non è una cifra di furto né una richiesta di danni
  automatica. È una stima del **punto cieco** — il volume non coperto da un archivio valido.
</Alert>

### Ore senza dati validi

$$
H_\text{blind} = H_\text{missing} + H_\text{nullQ}
$$

### Stima basata sulla media

$$
\overline{Q} = \frac{\sum Q_\text{valid}}{H_\text{validQ}},
\qquad
V_\text{blind, mean} = H_\text{blind} \times \overline{Q}
$$

Adatta a oggetti con consumo relativamente uniforme.

### Stima basata sul profilo

Portata tipica per ora del giorno $h$ (mediana sul periodo):

$$
\mathrm{Profile}(h) = \mathrm{median}(Q \mid \text{hour\_of\_day} = h)
$$

$$
V_\text{blind, profile} = \sum_{t \in \text{BlindHours}} \mathrm{Profile}(\text{hour}(t))
$$

Se il profilo di un'ora non è affidabile, si usa $\overline{Q}$.

### Intervallo di stima

Vengono mostrate entrambe le stime. Se sono vicine — il profilo giornaliero è stabile. Se divergono in modo significativo — l'oggetto ha una modalità operativa marcata ed è richiesta cautela.

## Nodo inattivo

Se un nodo non ha avuto praticamente alcun consumo reale nel periodo, l'assenza di portata **non viene trattata come un rischio**.

### Verifica di inattività

Soglia adattiva di quasi-zero:

$$
Q_\text{nearzero} = \max(0.5, 0.05 \times \mathrm{median}(Q))
$$

Il nodo è considerato inattivo quando valgono **entrambe** le condizioni:

$$
\overline{Q} \leq 0.05\text{ m³/h} \quad \text{and} \quad V_\text{blind, mean} < 5\text{ m³}
$$

### Effetto

La scala di gravità diventa più indulgente (massimo `medium` invece di `critical`) e il report dichiara:

> Il nodo era di fatto offline / fermo stagionalmente. L'assenza di consumo non viene trattata come un rischio di sotto-conteggio.

## Riconciliazione Q/V

<Image
  src="/images/ai-analytics/consumption-analytics/13_qv_volume.svg"
  alt="Analisi del volume accumulato"
/>

_Riconciliazione portata oraria vs accumulatore._ Il calcolo commerciale metrologico è guidato dall'incremento di V, non dalla somma dei valori istantanei di Q. Una corrispondenza ΣQ ≈ ΔV ≥ 80 % delle ore è la norma per un nodo sano. Le **inversioni di V** (da ora a ora, $V_{t+1} < V_t$) e i **salti bruschi di V** sono segni critici di guasto d'archivio e richiedono quasi sempre un'indagine.

Il blocco metrologico chiave. Confronta la somma delle portate orarie con l'incremento del contatore cumulato.

### Quantità di base

$$
\Sigma Q = \sum_{h=1}^{n} Q_h, \qquad
\Delta V = V_\text{end} - V_\text{start}
$$

$$
\mathrm{Diff} = \Sigma Q - \Delta V, \qquad
\mathrm{Diff}_\% = \frac{\Sigma Q - \Delta V}{\Delta V} \times 100\,\%
$$

### Interpretazione dello scostamento

| $\vert\mathrm{Diff}_\%\vert$ | Verdetto                         |
| ---------------------------- | -------------------------------- |
| ≤ 2 %                        | `good` (allineato)               |
| 2–5 %                        | `warn` (allineato con riserve)   |
| > 5 %                        | `bad` (scostamento)              |
| nessun V                     | `unavailable`                    |
| base Q/V sconosciuta         | richiede verifica del passaporto |

### Monotonicità del contatore

Il contatore deve crescere o rimanere costante.

Inversione: $\Delta V_h < -0.5\text{ m³}$ → incidente `V_ROLLBACK`.

Salto brusco: $\Delta V_h > V_\text{jump\_threshold}$ → incidente `V_JUMP`.

### Riconciliazione oraria $Q \cdot 1\text{h} \approx \Delta V$

Per ogni ora con entrambi $Q$ e $V$:

$$
\mathrm{Match}_h = \frac{|Q_h - \Delta V_h|}{\max(Q_h, \Delta V_h)}
$$

L'ora è allineata se $\mathrm{Match}_h \leq 20\,\%$. Quota di ore allineate:

$$
\mathrm{Match}_\% = \frac{H_\text{matched}}{H_\text{checked}} \times 100\,\%
$$

### Limiti della riconciliazione Q/V

Anche una buona corrispondenza numerica non equivale all'usabilità commerciale. È necessario sapere:

| Domanda                             | Perché conta                                            |
| ----------------------------------- | ------------------------------------------------------- |
| Q — volume standard o di esercizio? | basi diverse introducono un bias                        |
| V — volume standard o di esercizio? | serve la stessa base                                    |
| Qual è il peso d'impulso?           | necessario per una riconciliazione commerciale completa |
| V è monotono?                       | le inversioni mettono in dubbio l'archivio              |
| Vi sono correzioni manuali?         | possono spiegare la divergenza                          |

Se la base è sconosciuta:

> La riconciliazione Q/V è numericamente allineata, ma la base commerciale non è confermata. È richiesta la verifica del passaporto, del peso d'impulso e della base di volume (vedi EN 12405-1 §7).

## Comunicazioni vs archivio

<Image
  src="/images/ai-analytics/consumption-analytics/12_csq_vs_archive.svg"
  alt="Diagnostica CSQ vs archivio"
/>

_Diagnostica differenziale "comunicazioni vs upload"._ Se nella finestra esistono sessioni ma non l'archivio — il dispositivo risponde via GSM/CSQ, ma l'archivio non viene scritto oppure non viene analizzato dal server. Questo **non** è un problema di dispatcher / modem — deve essere gestito da un tecnico di integrazione.

### Formule di base

$$
N_\text{sessions} = \mathrm{count}(\text{sessions}), \quad
N_\text{success} = \mathrm{count}(\text{successful sessions})
$$

$$
\mathrm{SessionSuccess}_\% = \frac{N_\text{success}}{N_\text{sessions}} \times 100\,\%
$$

### Consegna dell'archivio

Per ogni buco verifichiamo se nella stessa finestra temporale si sono verificate sessioni:

- `gap_with_sessions` — buco d'archivio con sessioni presenti;
- `gap_without_sessions` — buco d'archivio senza alcuna sessione.

### Diagnosi differenziale

| Situazione                                  | Causa probabile                                        |
| ------------------------------------------- | ------------------------------------------------------ |
| nessuna sessione, nessun archivio           | modem / SIM / antenna / alimentazione                  |
| sessioni OK, archivio non aggiornato        | consegna archivio orario / parser / import             |
| sessioni OK ma parte dell'archivio mancante | lettura parziale / page break / backend                |
| sessioni recenti, archivio obsoleto         | **non un problema GSM**, problema di consegna archivio |
| timestamp di sessione nel futuro            | disallineamento orologio / fuso orario                 |

### Qualità del segnale

Se la qualità del segnale è riportata come CSQ:

$$
\mathrm{RSSI}_\text{dBm} \approx -113 + 2 \times \mathrm{CSQ}
$$

Esempio: CSQ=29 → RSSI ≈ −55 dBm (eccellente).

## Passaporto metrologico

### Campi obbligatori con pesi

Il passaporto definisce 11 campi con pesi:

| Campo                      | Peso    | Perché                              |
| -------------------------- | ------- | ----------------------------------- |
| equipment_serial_number    | 1.0     | identificazione                     |
| equipment_type_id          | 1.0     | modello/tipo                        |
| installation_date          | 0.8     | contesto operativo                  |
| **verification_date**      | **1.5** | validità legale (OIML R 137 cl. 3)  |
| next_verification_date     | 1.0     | controllo della scadenza            |
| **flow_range** (Qmin/Qmax) | **1.5** | campo di portata secondo EN 12405-1 |
| meter_serial_number        | 1.0     | identificazione in sito             |
| meter_type                 | 1.0     | aggancio metrologico                |
| firmware_version           | 0.5     | compatibilità e bug noti            |
| p_const                    | 0.5     | pressione sostituita                |
| pulse_weight               | 0.8     | per la riconciliazione Q/V          |

### Formula di completezza

$$
\mathrm{PassportCompleteness} = \frac{\sum w_\text{filled}}{\sum w_\text{required}} \times 100\,\%
$$

### Interpretazione

| Completezza | Stato               |
| ----------- | ------------------- |
| ≥ 80 %      | COMPLETE            |
| 50–80 %     | PARTIAL             |
| 20–50 %     | INCOMPLETE          |
| < 20 %      | CRITICAL_INCOMPLETE |

Se il passaporto è incompleto, il verdetto commerciale deve includere una riserva:

> Passaporto metrologico incompleto. Il verdetto commerciale richiede una riconciliazione manuale e il riferimento a OIML R 137 / EN 12405-1.

## Pattern sospetti di sotto-conteggio

<Image
  src="/images/ai-analytics/consumption-analytics/03_forensic_signals.svg"
  alt="Triage dei segnali di sotto-conteggio"
/>

_Triage dei segnali._ Ogni segnale è classificato in una categoria, ha un livello di evidenza (low / medium / high), una priorità di campo, un'evidenza formale e un'azione raccomandata. **Questo non è un verdetto sul nodo** — è un elenco di finestre che necessitano di una verifica manuale da parte di un operatore o del personale di servizio.

Si tratta di **euristiche**, non di prove.

### Soglia di quasi-zero

$$
Q_\text{nearzero} = \max(0.5, 0.05 \times \mathrm{median}(Q))
$$

### Portata nulla durante le ore attive

Un'ora è sospettosamente silente se $Q_h < Q_\text{nearzero}$ E ricade nell'intervallo tipico di attività dell'oggetto.

### P viva + zero (Q≈0 con P viva)

Può essere:

- arresto / valvola a valle chiusa / fermo stagionale;
- modalità P_const o guasto del sensore;
- errore dell'ingresso a impulsi;
- **possibile manomissione** — ma non provata.

<Alert type="warning">
  P viva + zero **non è prova di manomissione**. È solo un motivo per verificare la modalità di
  funzionamento del nodo.
</Alert>

### Interruzione-ripresa

Pattern: Q normale → Q≈0 → Q normale. Cambio brusco di modalità ma non prova di violazione. Possibili spiegazioni: arresto pianificato / fermo dell'oggetto / chiusura valvola / guasto del canale / intervento manuale / errore di consegna archivio.

### Manomissione confermata

Un pattern statistico da solo **non può** confermare una manomissione. Servono **prove concrete**:

- apertura del quadro (cover_open negli eventi del dispositivo);
- interferenza magnetica;
- modifiche dei parametri (parameter_change);
- modifica non autorizzata di P_const;
- reset dell'archivio;
- manipolazione confermata dell'ingresso a impulsi;
- verbale di sopralluogo;
- foto / sigilli / letture in sito.

Formato corretto del verdetto:

```
Manomissione confermata: NON RILEVATA
Pattern sospetti:        PRESENTI
Idoneità legale:         NON PRONTA
```

## Verdetto di misura commerciale

<Image
  src="/images/ai-analytics/consumption-analytics/02_commercial_verdict.svg"
  alt="Verdetto di misura commerciale"
/>

_Stato gestionale._ Le 7 righe chiudono 7 diverse domande a livello manageriale: si può chiudere il periodo (fatturazione), il nodo funziona adesso (monitoraggio), archivio e accumulatore coincidono (Q×h vs ΔV), serve un sopralluogo, sono presenti pattern sospetti, quanto sono integri i dati, sono presenti tutti i parametri del passaporto. Ogni riga è cliccabile e rimanda al blocco di evidenza del report.

Il verdetto di sintesi per il responsabile del servizio di misura.

### Regole dell'archivio di fatturazione

**Pronto:**

- Copertura ≥ 98 %
- Buco di coda ≤ 2 h
- Q/V allineato (`good`)
- V monotono
- Passaporto COMPLETE
- Nessun problema critico ai sensori

**Pronto con riserve:**

- Copertura 95–98 %
- Buco di coda 2–24 h
- Q/V allineato con riserve (`warn`)
- Passaporto PARTIAL
- Nessun blocco critico

**Non pronto per la chiusura definitiva:**

- Buco di coda > 24 h OPPURE
- Q/V non classificato OPPURE
- Inversione di V presente OPPURE
- Passaporto incompleto nei campi commerciali OPPURE
- Problema critico ai sensori

**Non utilizzabile:**

- Copertura criticamente bassa OPPURE
- Archivio corrotto OPPURE
- V con inversioni/picchi gravi OPPURE
- Q/V completamente incoerente OPPURE
- Canale chiave non disponibile

### Monitoraggio corrente — valutato separatamente

| Condizione                               | Stato                               |
| ---------------------------------------- | ----------------------------------- |
| archivio e sessione recenti              | utilizzabile                        |
| archivio in ritardo ma sessioni presenti | degradato / problema di consegna    |
| archivio e sessioni obsoleti             | critico / problema di comunicazione |
| timestamp non valido                     | inaffidabile                        |

### Ispezione in campo

È richiesto un sopralluogo se vale **almeno una** delle condizioni:

- buco di coda non ripristinato;
- Q/V non classificato;
- inversione del contatore presente;
- passaporto criticamente incompleto;
- sensore P o T bloccato;
- pattern sospetti di sotto-conteggio;
- giornale eventi non disponibile in presenza di anomalie marcate;
- telemetria corrente criticamente degradata.

## Incidenti

Un incidente è un problema **raggruppato**, non ogni singola registrazione grezza.

### Tipi

| Tipo                   | Significato                                |
| ---------------------- | ------------------------------------------ |
| `FINAL_TAIL_GAP`       | nessun dato alla fine del periodo          |
| `COMMUNICATION_GAP`    | interruzione delle comunicazioni           |
| `ARCHIVE_DELIVERY_GAP` | sessioni presenti, archivio non consegnato |
| `Q_V_MISMATCH`         | Q e V non quadrano                         |
| `V_ROLLBACK`           | contatore tornato indietro                 |
| `P_SENSOR_STUCK`       | pressione bloccata                         |
| `T_SENSOR_STUCK`       | temperatura bloccata                       |
| `PASSPORT_INCOMPLETE`  | campi del passaporto mancanti              |
| `TAMPERING_CANDIDATE`  | pattern sospetto, non una prova            |

### Principio di raggruppamento

```
eventi grezzi → incidenti raggruppati → incidenti a massima priorità
```

Esempio: 301 grezzi → 15 raggruppati → Top-5 da intervenire. All'operatore non devono essere mostrati 301 eventi identici come 301 problemi separati.

## Piano d'azione

<Image
  src="/images/ai-analytics/consumption-analytics/09_action_plan_checklist.svg"
  alt="Piano d'azione per ruolo e checklist di campo"
/>

_Azioni con priorità P0/P1/P2._ Ogni azione porta con sé un ruolo responsabile, una scadenza (oggi / entro la giornata / 1–3 giorni) e la **causa** che l'ha inserita nell'elenco. La checklist di campo è costruita automaticamente dal verdetto e dagli incidenti aperti: cosa portare, cosa guardare, cosa misurare — etichettata P0/P1 per la prioritizzazione in sito.

Ogni raccomandazione è legata a una causa.

| Campo    | Descrizione                       |
| -------- | --------------------------------- |
| ID       | numero della raccomandazione      |
| Priority | P0 / P1 / P2 / P3                 |
| Action   | cosa fare                         |
| Role     | chi è responsabile                |
| Deadline | quando completare                 |
| Cause    | perché è sorta questa azione      |
| Status   | open / assigned / done / verified |

### Esempi di regole

| Condizione                   | Azione                                                                      |
| ---------------------------- | --------------------------------------------------------------------------- |
| coda > 24h, sessioni recenti | backend: ripristinare la consegna dell'archivio orario                      |
| coda > 24h, nessuna sessione | comunicazioni: controllare modem/SIM/alimentazione                          |
| T bloccata ≥ 24h             | metrologo: verificare il sensore T (OIML R 137)                             |
| P bloccata ≥ 24h             | metrologo: verificare il sensore P o l'impostazione P_const                 |
| scostamento Q/V              | metrologo + fatturazione: riconciliare V, Q, peso d'impulso (EN 12405-1 §7) |
| passaporto incompleto        | admin / metrologo: compilare il passaporto                                  |
| pattern sospetti             | squadra in campo: controllare sigilli, ingresso a impulsi, valvole          |

## Checklist di campo

### Cosa portare

manometro di riferimento • termometro di riferimento • multimetro • tester di segnale/antenna • kit di sigilli • protocollo di ispezione • accesso ad archivio e passaporto • acquisizione foto.

### Cosa controllare

sigilli del correttore e del contatore • cavo a impulsi • sensori P, T • modem, antenna, alimentazione, batteria • valvole di intercettazione • eventuale bypass • passaporto vs apparecchiatura effettiva.

### Cosa misurare

P, T di riferimento • Q corrente • V cumulato • letture del contatore esterno • CSQ/RSSI • tensione di alimentazione • impulsi in ingresso • data/ora del correttore • P_const • Qmin/Qmax • peso d'impulso.

### Cosa fotografare

display del correttore (P/T/Q/V) • data/ora sul dispositivo • numeri di serie • sigilli • cavo a impulsi • sensori • modem e antenna • vista generale • posizioni delle valvole.

## Sorgente per profilo comportamentale

L'archivio API specifico e il campo vengono selezionati automaticamente in base al comportamento del dispositivo. Tre famiglie:

### Archivio orario continuo

Il dispositivo scrive una registrazione **esattamente una volta all'ora**. Priorità della sorgente:

1. campo diretto "portata per ora" (se il dispositivo lo calcola);
2. Δ del volume standard cumulato;
3. Δ del volume di esercizio cumulato.

Buco accettabile — **esattamente 1 ora**.

### Upload basato su sessioni con archivio dello stato corrente

Il dispositivo scrive le registrazioni quando si connette, non rigorosamente ogni ora. La sorgente primaria è la **portata istantanea** (calcolata dal dispositivo); il fallback è il Δ del volume cumulato normalizzato:

$$
\dot Q_h = \frac{V_t - V_{t-\Delta t}}{\Delta t / 3600}
$$

Buco accettabile — **fino a 6 ore**; se $\Delta t > 6\text{ h}$ il punto è considerato non valido (probabile perdita di dati, non scarico del contatore).

### Blocchi di sola telemetria

Il dispositivo trasmette solo comunicazioni/stato, non misura il gas — il report mostra N/A con "questo dispositivo non ha un punto di misura".

### Fallback su dati radi

Se l'archivio primario fornisce < 50 % dei punti attesi, viene provato automaticamente l'archivio secondario delle sessioni (così com'è, senza griglia oraria) e il calcolo procede a partire da esso.

## Limiti della metodologia

### Archivio

Se l'archivio orario è incompleto, tutte le stime per le ore mancanti sono **approssimate**.

### Q/V

La riconciliazione Q/V è significativa solo quando Q e V:

- condividono un'unica base di volume (standard o di esercizio);
- hanno un peso d'impulso corretto;
- appartengono alla stessa sorgente di misura;
- sono sincronizzati nel tempo.

Vedi OIML R 137 per la procedura di verifica ed EN 12405-1 §7 per la base di conversione.

### Passaporto

In assenza di Qmin/Qmax, data di verifica, P_const o peso d'impulso, il verdetto commerciale deve riportare una riserva.

### Pattern sospetti

I pattern di sotto-conteggio **non sono prova** di manomissione. Stabiliscono soltanto la priorità dell'ispezione.

### Commento dell'IA

Il commento dell'IA **non partecipa** al verdetto legale e non sostituisce le regole formali. Aiuta soltanto a spiegare la situazione in linguaggio semplice.

## Come leggere il report

<Image
  src="/images/ai-analytics/consumption-analytics/04_chart_qpt_profile.svg"
  alt="Portata, pressione e temperatura con profilo di consumo"
/>

_Visualizzazione Q/P/T e profili comportamentali._ Sul grafico principale gli eventi sono evidenziati come bande verticali semitrasparenti per tipo (picco / inattività / perdita / sensore bloccato / nessun dato) — qualsiasi tipo può essere mostrato/nascosto cliccando il relativo chip. Le medie mobili a 7 / 30 giorni forniscono uno smussamento stagionale. Il pattern di consumo è una doppia scomposizione: profilo giornaliero (ora del giorno) suddiviso per giorno feriale/weekend e una heatmap calendario "giorno della settimana × mese" che mostra la stabilità del turno di lavoro.

<Image
  src="/images/ai-analytics/consumption-analytics/10_period_compare.svg"
  alt="Confronto con il periodo precedente"
/>

_Confronto periodo su periodo._ Un delta anno su anno nasconde due insidie: (1) il **cambio di copertura del periodo precedente** (se era del 6 %, una crescita di eventi "33×" è un artefatto della divisione, non la realtà) e (2) la **mancata normalizzazione della durata**. Perciò con copertura < 50 % il confronto maschera il Δ % e mostra solo i delta assoluti, per evitare di portare l'operatore a conclusioni errate.

1. Iniziare dal **Verdetto di misura commerciale**.
2. Verificare se il periodo è pronto per la fatturazione.
3. Controllare separatamente il monitoraggio corrente.
4. Passare ai **Top-5 incidenti**.
5. Se c'è una coda — andare a "comunicazioni vs archivio".
6. Se c'è una discrepanza Q/V — andare all'analisi del volume accumulato.
7. Se i sensori P/T sono bloccati — andare alla stabilità dei sensori.
8. Se il passaporto è incompleto — **non** emettere un verdetto commerciale netto.
9. Se esistono pattern sospetti — pianificare un controllo, ma **non emettere un verdetto legale**.
10. Eseguire il piano d'azione per ruolo.

## Criteri minimi per un report completo

Un report è considerato completo se contiene:

- periodo di analisi • $H_\text{expected}$ • registrazioni ricevute • registrazioni valide • registrazioni NULL • buchi interni • buco di coda • copertura • attualità • validità Q/P/T • salute dei sensori • stima del volume non osservato • riconciliazione Q/V • monotonicità di V • comunicazioni vs archivio • completezza del passaporto • Top-5 incidenti • piano d'azione per ruolo • checklist di campo;

- tre disclaimer obbligatori:
  - sul sotto-conteggio (è una stima del punto cieco, non una cifra di perdita);
  - sul sospetto di manomissione (i pattern ≠ prova);
  - sul commento dell'IA (non è un verdetto legale).

## Parametri di esecuzione

| Parametro        | Descrizione                                                                                                                                                                                                                                                                                                                        |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Nodo di misura # | il nodo di misura da analizzare                                                                                                                                                                                                                                                                                                    |
| Periodo da       | inizio della finestra di analisi (predefinito: un anno indietro)                                                                                                                                                                                                                                                                   |
| Periodo a        | fine della finestra di analisi (predefinito: ieri)                                                                                                                                                                                                                                                                                 |
| Analisi estesa   | carica inoltre l'archivio delle sessioni di comunicazione e l'archivio degli eventi anomali del correttore. Abilita i blocchi Data Source Readiness, Communication Health e Device Abnormal Log e riempie la Root Cause Matrix con confidenza e causa radice per evento. Aggiunge 5–15 secondi al tempo di costruzione del report. |
