Gestione Template - Guida Dettagliata
Gestione Template - Guida Dettagliata
Data: 22 Ottobre 2025 Focus: Pattern Matching, SQL Query, Response Template
---
π― Cos'Γ¨ un Template?
Un template Γ¨ una "ricetta" che dice all'AI Assistant:
1. QUANDO usarmi β Pattern Matching (regex) 2. COSA fare β SQL Query (recupera dati) 3. COME rispondere β Response Template (formatta risposta)
---
π PARTE 1: Pattern Matching
A Cosa Serve
Il pattern matching rileva se la query dell'utente corrisponde a questo template.
Come Funziona
Input: Query utente (es: "Qual Γ¨ stata la produzione di ieri?") Process: Confronta con pattern regex Output: Match β oppure No Match β
---
Esempi Pratici
Esempio 1: Pattern Semplice
Pattern: ``
produzione di ieri </code>`<code></p><p><strong>Match</strong>: <ul><li>β "Qual Γ¨ stata la produzione di ieri?"</li> <li>β "Voglio sapere la produzione di ieri"</li> <li>β "Dimmi la produzione di ieri"</li></p><p><strong>NO Match</strong>: <li>β "Produzione di oggi" (non c'Γ¨ "ieri")</li> <li>β "Ieri quanti pezzi?" (non c'Γ¨ "produzione")</li></p><p>---</p><p><h4><strong>Esempio 2: Pattern con Varianti</strong></h4></p><p><strong>Pattern</strong>:
produzione di (ieri|oggi)
`Match:
β
"Produzione di ieri"
β
"Produzione di oggi"
β "Produzione di questa settimana" (non prevista) Cosa significa
(ieri|oggi)?
| = OR (oppure)
(...) = gruppo
Significa: "ieri" OPPURE "oggi" ---
Esempio 3: Pattern Flessibile
Pattern:
`
(?:qual|quant)[ieaè]? (?:è |stata |la )?produzione (?:di )?(ieri|oggi|questa settimana)
`Match:
β
"Qual Γ¨ la produzione di ieri?"
β
"Quanta produzione ieri?"
β
"Produzione oggi"
β
"Qual Γ¨ stata la produzione questa settimana?" Sintassi Regex:
(?:...) = gruppo non catturante
[ieaè]? = una lettera tra quelle, opzionale
? = opzionale (puΓ² esserci o no)
| = OR---
Come Scrivere Pattern Efficaci
Regola 1: Parti dal Semplice
β Troppo complesso:
`
(?:qual[ieè]|quant[oiae]|dimmi|mostrami|visualizza).{0,50}produzione
`β
Semplice ed efficace:
`
produzione di (ieri|oggi|questa settimana)
`---
Regola 2: Usa Varianti per Sinonimi
Query possibili:
"Produzione di ieri"
"Pezzi di ieri"
"QuantitΓ di ieri" Pattern:
`
(produzione|pezzi|quantitΓ ) (?:di )?(ieri|oggi)
`---
Regola 3: Ignora Parole Non Essenziali
Query utente spesso contiene:
"Qual Γ¨..."
"Voglio sapere..."
"Dimmi..."
"Per favore..." Soluzione: Pattern ignora queste parti
`
produzione di ieri
`Match anche:
"Qual Γ¨ la produzione di ieri?"
"Voglio sapere la produzione di ieri"
"Dimmi la produzione di ieri per favore" PerchΓ©? PerchΓ© il pattern cerca solo la parte essenziale!
---
Pattern Library - Costrutti Comuni
Periodi Temporali
`regex
(ieri|oggi|questa settimana|scorsa settimana|questo mese|scorso mese)
`Confronti
`regex
confronta?.* (?:con|vs|rispetto a?)
`Operatori
`regex
(?:chi|quale) (?:Γ¨|ha) (?:l')?operatore
`Metriche
`regex
(produzione|pezzi|operazioni|lavorazioni|quantitΓ )
`Domande
`regex
(?:qual|quant|come|perch[eΓ©]|quando)
`---
ποΈ PARTE 2: SQL Query
A Cosa Serve
La query SQL recupera i dati dal database per rispondere alla domanda.
---
Struttura Database (Recap)
Tabella principale:
machine_operations_logColonne fisse:
id β ID operazione
machine_id β ID macchina
profile_id β Profilo import usato
timestamp β Data/ora operazione
csv_import_id β Da quale import CSVColonna dinamica:
raw_data β JSON con TUTTI i dati dell'operazioneEsempio
raw_data:
`json
{
"TotalPieces": 150,
"Duration": 2.5,
"UserLog": "Mario Rossi",
"NumberOfPlies": 12,
"Material": "Cartone",
"ProfileName": "Taglio Standard"
}
`I campi in
raw_data cambiano per ogni macchina/profilo!---
Query SQL - Esempi Pratici
Esempio 1: Totale Pezzi di Ieri
Cosa vogliamo:
Somma di tutti i TotalPieces di ieri
Per una specifica macchina Query SQL:
`sql
SELECT
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL(15,2))) as total_quantity
FROM machine_operations_log
WHERE machine_id = :machine_id
AND DATE(timestamp) = CURDATE() - INTERVAL 1 DAY
`Spiegazione riga per riga:
Riga 1-2: Somma il campo
TotalPieces da JSON
`sql
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL))
`
JSON_EXTRACT(raw_data, '$.TotalPieces') β Estrae valore da JSON
JSON_UNQUOTE(...) β Rimuove virgolette
CAST(... AS DECIMAL) β Converte in numero
SUM(...) β Somma tutti i valoriRiga 3: Dalla tabella operations
`sql
FROM machine_operations_log
`Riga 4: Solo per la macchina specificata
`sql
WHERE machine_id = :machine_id
`
:machine_id = parametro che verrΓ sostituito automaticamenteRiga 5: Solo operazioni di ieri
`sql
AND DATE(timestamp) = CURDATE() - INTERVAL 1 DAY
`
CURDATE() = data di oggi
- INTERVAL 1 DAY = meno 1 giorno = ieri---
Esempio 2: Conteggio Operazioni + Media Durata
Cosa vogliamo:
Numero totale operazioni
Durata media Query SQL:
`sql
SELECT
COUNT(*) as total_operations,
AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.Duration')) AS DECIMAL(15,2))) as avg_duration
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
`Nuovi concetti:
COUNT(*) β Conta righe
AVG(...) β Media
BETWEEN :date_from AND :date_to β Range date---
Esempio 3: Ranking Operatori
Cosa vogliamo:
Top 5 operatori per pezzi prodotti Query SQL:
`sql
SELECT
JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.UserLog')) as operator,
COUNT(*) as operations,
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL)) as total_pieces
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
GROUP BY operator
ORDER BY total_pieces DESC
LIMIT 5
`Nuovi concetti:
GROUP BY operator β Raggruppa per operatore
ORDER BY total_pieces DESC β Ordina per pezzi (piΓΉ alto primo)
LIMIT 5 β Solo primi 5 risultati---
Parametri Standard
Sempre disponibili in ogni query:
| Parametro | Descrizione | Esempio |
|-----------|-------------|---------|
|
:machine_id | ID macchina corrente | 5 |
| :date_from | Data inizio periodo | 2025-10-21 00:00:00 |
| :date_to | Data fine periodo | 2025-10-21 23:59:59 |Sistema sostituisce automaticamente in base al contesto!
---
Template SQL Pronti (Copia-Incolla)
Template 1: Somma Campo JSON
`sql
SELECT
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO}')) AS DECIMAL)) as total
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
`Sostituisci
{CAMPO} con: TotalPieces, Duration, NumberOfPlies, etc.---
Template 2: Conteggio + Media
`sql
SELECT
COUNT(*) as total_ops,
AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO}')) AS DECIMAL)) as avg_value
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
`---
Template 3: Group By Campo
`sql
SELECT
JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO_GROUP}')) as label,
COUNT(*) as count,
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO_SUM}')) AS DECIMAL)) as total
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
GROUP BY label
ORDER BY total DESC
LIMIT 10
`Sostituisci:
{CAMPO_GROUP} β Campo per raggruppare (es: UserLog, Material)
{CAMPO_SUM} β Campo da sommare (es: TotalPieces)---
Template 4: Confronto 2 Periodi
`sql
SELECT
DATE(timestamp) as date,
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL)) as daily_total
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp >= DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY date
ORDER BY date
`---
π¬ PARTE 3: Response Template
A Cosa Serve
Il response template formatta la risposta per l'utente usando i dati della query SQL.
---
Come Funziona
SQL restituisce:
`json
{
"total_quantity": 1850,
"total_operations": 23,
"avg_duration": 2.3
}
`Response Template:
`
π Produzione di {periodo}:β
Totale pezzi: {total_quantity}
π Operazioni: {total_operations}
β±οΈ Durata media: {avg_duration}h
`Output finale:
`
π Produzione di ieri:β
Totale pezzi: 1.850
π Operazioni: 23
β±οΈ Durata media: 2.3h
`---
Placeholder Disponibili
1. Risultati SQL (automatici)
Ogni colonna del SELECT diventa un placeholder:
`sql
SELECT
SUM(...) as total_quantity, β placeholder: {total_quantity}
COUNT(*) as total_ops, β placeholder: {total_ops}
AVG(...) as avg_value β placeholder: {avg_value}
`Usa nel template:
`
Totale: {total_quantity}
Operazioni: {total_ops}
Media: {avg_value}
`---
2. EntitΓ Estratte (da pattern)
Se il pattern cattura gruppi:
Pattern:
`
produzione di (ieri|oggi)
gruppo_1 β
`Query: "Produzione di ieri"
EntitΓ estratta:
`{periodo} = "ieri"
</code>`<code></p><p>Usa nel template:
</code>`<code>
Produzione di {periodo}: {total} pezzi
</code>`<code></p><p>Output:
</code>`<code>
Produzione di ieri: 1.850 pezzi
</code>`<code></p><p>---</p><p><h3><strong>Formattazione Response</strong></h3></p><p><h4><strong>Usa Emoji</strong> (rendono leggibile)</h4></p><p></code>`<code>
π Statistiche
β
Successo
β Errore
β οΈ Attenzione
π In crescita
π In calo
π₯ Operatori
β±οΈ Tempo
π― ObiettivoUsa Grassetto (nei messaggi)
Nelle interfacce web, puoi usare markdown:
`
Totale: {total} pezzi
`O semplice maiuscolo:
`
TOTALE: {total} pezzi
`Aggiungi Contesto (molto importante!)
β Risposta secca:
`
Totale: 1.850 pezzi
`β
Risposta con contesto:
`
Totale: 1.850 pezziRispetto alla media degli ultimi 30 giorni (1.750 pezzi),
sei +5.7% π. Ottimo lavoro!
`---
Template Esempi Completi
Template 1: Produzione Giornaliera
Response Template:
`
π Produzione di {periodo}:β
Totale pezzi: {total_quantity}
π Operazioni: {total_operations}
β±οΈ Durata media: {avg_duration}h
Rispetto alla media degli ultimi 30 giorni ({avg_30d} pezzi),
sei {delta_percent}% {emoji_trend}.
`Placeholder:
{periodo} β Estratto da pattern (ieri/oggi)
{total_quantity} β Da SQL (SUM TotalPieces)
{total_operations} β Da SQL (COUNT)
{avg_duration} β Da SQL (AVG Duration)
{avg_30d} β Calcolato dal sistema (context enrichment)
{delta_percent} β Calcolato dal sistema
{emoji_trend} β Calcolato (π se positivo, π se negativo)---
Template 2: Ranking Operatori
Response Template:
`
π₯ Top 5 Operatori ({periodo}):π₯ 1. {operator_1} - {pieces_1} pezzi ({ops_1} operazioni)
π₯ 2. {operator_2} - {pieces_2} pezzi ({ops_2} operazioni)
π₯ 3. {operator_3} - {pieces_3} pezzi ({ops_3} operazioni)
4. {operator_4} - {pieces_4} pezzi ({ops_4} operazioni)
5. {operator_5} - {pieces_5} pezzi ({ops_5} operazioni)
β‘ {operator_1} Γ¨ il piΓΉ produttivo con {pieces_per_hour} pezzi/ora.
`Placeholder:
{operator_1}, {operator_2}, etc. β Da SQL (risultati multipli)
{pieces_1}, {pieces_2}, etc. β Da SQL
{ops_1}, etc. β Da SQL
{pieces_per_hour} β Calcolato dal sistema---
Template 3: Confronto Periodi
Response Template:
`
βοΈ Confronto {periodo_1} vs {periodo_2}:π {periodo_1}: {value_1} pezzi
π {periodo_2}: {value_2} pezzi
π Variazione: {delta_abs} pezzi ({delta_percent}% {emoji})
{insight_message}
`Placeholder:
{periodo_1}, {periodo_2} β Estratti da pattern
{value_1}, {value_2} β Da SQL (2 query)
{delta_abs} β Calcolato (value_1 - value_2)
{delta_percent} β Calcolato
{emoji} β π o π
{insight_message} β Auto-generato dal sistema---
π COME SI COLLEGANO I 3 COMPONENTI
Flusso Completo - Esempio Pratico
INPUT UTENTE:
`
"Qual Γ¨ stata la produzione di ieri?"
`---
STEP 1: Pattern Matching
Pattern nel template:
`
produzione di (ieri|oggi)
`Matching:
β
Match trovato!
Gruppo catturato: (ieri)EntitΓ estratte:
`php
[
'periodo' => 'ieri',
'date_from' => '2025-10-21 00:00:00',
'date_to' => '2025-10-21 23:59:59',
]
`---
STEP 2: SQL Query
Query nel template:
`sql
SELECT
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL)) as total_quantity,
COUNT(*) as total_operations,
AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.Duration')) AS DECIMAL)) as avg_duration
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
`Sistema sostituisce parametri:
`sql
WHERE machine_id = 5
AND timestamp BETWEEN '2025-10-21 00:00:00' AND '2025-10-21 23:59:59'
`Esegue query β Risultato:
`json
{
"total_quantity": 1850,
"total_operations": 23,
"avg_duration": 2.3
}
`---
STEP 3: Response Template
Template:
`
π Produzione di {periodo}:β
Totale pezzi: {total_quantity}
π Operazioni: {total_operations}
β±οΈ Durata media: {avg_duration}h
`Sistema sostituisce placeholder:
`
{periodo} β "ieri" (da entitΓ )
{total_quantity} β 1850 (da SQL)
{total_operations} β 23 (da SQL)
{avg_duration} β 2.3 (da SQL)
`Output finale:
`
π Produzione di ieri:β
Totale pezzi: 1.850
π Operazioni: 23
β±οΈ Durata media: 2.3h
`---
π ESEMPIO COMPLETO: Template "Produzione Giornaliera"
Compilazione Form
`βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Template ID: prod_daily β
β β
β Ambito: π Produzione β
β β
β Pattern Matching: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β produzione di (ieri|oggi) ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Cache TTL: [3600] secondi (1 ora) β
β β
β β Richiede LLM β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Query SQL: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β SELECT ββ
β β SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT( ββ
β β raw_data, '$.TotalPieces')) AS DECIMAL)) as total, ββ
β β COUNT(*) as ops, ββ
β β AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT( ββ
β β raw_data, '$.Duration')) AS DECIMAL)) as avg_dur ββ
β β FROM machine_operations_log ββ
β β WHERE machine_id = :machine_id ββ
β β AND timestamp BETWEEN :date_from AND :date_to ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Response Template: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β π Produzione di {periodo}: ββ
β β ββ
β β β
Totale pezzi: {total} ββ
β β π Operazioni: {ops} ββ
β β β±οΈ Durata media: {avg_dur}h ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Follow-Up Suggestions: β
β 1. [Confronta con ieri___________________________] β
β 2. [Mostrami il trend settimanale_______________] β
β 3. [Chi ha prodotto di piΓΉ?____________________] β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Annulla] [πΎ Crea Template] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ---
β Domande Frequenti
1. Come scopro quali campi ho in
raw_data?Opzione A: Guarda i profili import
Menu β I40 β Profili Import
Vedi colonne configurate Opzione B: Query database
`sql SELECT raw_data FROM machine_operations_log WHERE machine_id = 1 LIMIT 1; </code>`<code></p><p><strong>Opzione C</strong>: AI Inspector (da implementare) <li>Mostra tutti i campi disponibili</li> <li>Con esempi di valori</li></p><p>---</p><p><h3><strong>2. Cosa succede se il campo non esiste?</strong></h3></p><p>Se query cerca </code>$.TotalPieces<code> ma non esiste nel raw_data: <li>MySQL restituisce </code>NULL<code></li> <li>SUM(NULL) = </code>0<code></li> <li>Response mostra: "0 pezzi"</li></p><p><strong>Soluzione</strong>: Usa campi che sai esistere (da profilo import)</p><p>---</p><p><h3><strong>3. Come testo il pattern prima di salvare?</strong></h3></p><p><strong>Attualmente</strong>: Manuale (provi dopo aver creato)</p><p><strong>Da implementare</strong>: Test inline <li>Scrivi pattern</li> <li>Inserisci query test</li> <li>Vedi se match β o β</li></p><p>---</p><p><h3><strong>4. Posso modificare template dopo creazione?</strong></h3></p><p><strong>SΓ¬!</strong> Usa il bottone "Modifica" nella lista template.</p><p>Puoi cambiare: <li>β Pattern</li> <li>β SQL</li> <li>β Response template</li> <li>β Suggestions</li> <li>β Ambito</li> <li>β Template ID (non modificabile)</li></p><p>---</p><p><h2>π Best Practices</h2></p><p><h3><strong>Pattern Matching</strong></h3></p><p>β <strong>DO</strong>: <li>Parti semplice, raffina dopo</li> <li>Usa varianti per sinonimi</li> <li>Testa con query reali</li></p><p>β <strong>DON'T</strong>: <li>Pattern troppo specifici (match solo 1 query)</li> <li>Pattern troppo generici (match tutto)</li> <li>Regex complesse senza testare</li></p><p>---</p><p><h3><strong>SQL Query</strong></h3></p><p>β <strong>DO</strong>: <li>Usa sempre i parametri
, </code>:date_from<code>, </code>:date_to<code></li> <li>Aggiungi alias chiari (</code>as total_quantity<code>)</li> <li>Limita risultati (LIMIT)</li> <li>Testa query in phpMyAdmin prima</li></p><p>β <strong>DON'T</strong>: <li>Valori hardcoded (WHERE machine_id = 5)</li> <li>Query senza WHERE (troppo lente)</li> <li>SELECT * (specifica colonne)</li></p><p>---</p><p><h3><strong>Response Template</strong></h3></p><p>β <strong>DO</strong>: <li>Usa emoji per chiarezza</li> <li>Aggiungi contesto (confronti, medie)</li> <li>Formatta numeri (1.850 invece di 1850)</li> <li>Suggerisci follow-up</li></p><p>β <strong>DON'T</strong>: <li>Risposte troppo lunghe (>10 righe)</li> <li>Solo numeri senza spiegazione</li> <li>Placeholder non esistenti</li></p><p>---</p><p><h2>π Prossimi Miglioramenti</h2></p><p><h3><strong>1. AI Generator</strong> (Automatizza Tutto)</h3></p><p><strong>Input</strong>: Solo query esempio <strong>Output</strong>: Template completo (pattern + SQL + response) <strong>Tempo</strong>: 2 min invece di 15 min</p><p>---</p><p><h3><strong>2. Schema Browser</strong></h3></p><p><strong>Pannello laterale</strong> che mostra: <li>Tabelle disponibili</li> <li>Campi in raw_data per ogni macchina</li> <li>Esempi di valori</li> <li>Template SQL copy-paste</li></p><p>---</p><p><h3><strong>3. Pattern Tester</strong></h3></p><p><strong>Test inline</strong> mentre scrivi:
Pattern: produzione di (ieri|oggi)Test Query: [Produzione di ieri_________]
Risultato: β
Match!
Gruppo 1: "ieri"
`</p><p>---</p><p><h3><strong>4. SQL Builder Visuale</strong></h3></p><p><strong>Drag & drop</strong> invece di scrivere SQL: </code>`<code> Campo: [TotalPieces βΌ] Aggregazione: [SUM βΌ] Alias: [total]</p><p>[Aggiungi Campo]</p><p>Filtri: β machine_id = :machine_id β timestamp BETWEEN :date_from AND :date_to</p><p>[Genera SQL] β Crea query automaticamente
---
π‘ Come Procedere
Opzione 1: Manuale Guidato (Impari facendo)
1. Creo 5 template esempio completi con spiegazioni 2. Tu li copi e modifichi per altre query 3. Impari struttura pattern/SQL/response 4. Dopo 5-10 template β Capisci la logica
Tempo: 1-2 giorni per 10 template Beneficio: Capisci tutto in profonditΓ
---
Opzione 2: AI Generator (Veloce)
1. Implemento generatore automatico 2. Tu inserisci solo query esempio 3. AI genera tutto (pattern + SQL + response) 4. Tu revisioni e salvi
Tempo: 1 ora per 30 template Beneficio: KB popolata rapidamente
---
Opzione 3: Ibrido β CONSIGLIATO
1. Oggi: Crei 3-5 template manualmente (con mio aiuto) 2. Domani: Implemento AI Generator 3. Dopodomani: Generi altri 20-30 template con AI
Beneficio:
---
β Vuoi Iniziare?
Posso aiutarti a creare il primo template insieme, passo-passo:
1. Scegli una query da gestire (es: "Produzione di ieri") 2. Io ti guido a scrivere pattern, SQL e response 3. Tu capisci la logica 4. Poi crei gli altri autonomamente (o con AI Generator)
Ti va bene questo approccio? Dimmi la query che vuoi gestire per prima! π
Analisi Codice
Blocco 1
produzione di ieri
Blocco 2
produzione di (ieri|oggi)
Blocco 3
(?:qual|quant)[ieaè]? (?:è |stata |la )?produzione (?:di )?(ieri|oggi|questa settimana)
Blocco 4
(?:qual[ieè]|quant[oiae]|dimmi|mostrami|visualizza).{0,50}produzione
Blocco 5
produzione di (ieri|oggi|questa settimana)
Blocco 6
(produzione|pezzi|quantitΓ ) (?:di )?(ieri|oggi)
Blocco 7
produzione di ieri
Blocco 8 regex
(ieri|oggi|questa settimana|scorsa settimana|questo mese|scorso mese)
Blocco 9 regex
confronta?.* (?:con|vs|rispetto a?)
Blocco 10 regex
(?:chi|quale) (?:Γ¨|ha) (?:l')?operatore
Blocco 11 regex
(produzione|pezzi|operazioni|lavorazioni|quantitΓ )
Blocco 12 regex
(?:qual|quant|come|perch[eΓ©]|quando)
Blocco 13 json
{
"TotalPieces": 150,
"Duration": 2.5,
"UserLog": "Mario Rossi",
"NumberOfPlies": 12,
"Material": "Cartone",
"ProfileName": "Taglio Standard"
}
Blocco 14 sql
SELECT
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL(15,2))) as total_quantity
FROM machine_operations_log
WHERE machine_id = :machine_id
AND DATE(timestamp) = CURDATE() - INTERVAL 1 DAY
Blocco 15 sql
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL))
Blocco 16 sql
FROM machine_operations_log
Blocco 17 sql
WHERE machine_id = :machine_id
Blocco 18 sql
AND DATE(timestamp) = CURDATE() - INTERVAL 1 DAY
Blocco 19 sql
SELECT
COUNT(*) as total_operations,
AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.Duration')) AS DECIMAL(15,2))) as avg_duration
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
Blocco 20 sql
SELECT
JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.UserLog')) as operator,
COUNT(*) as operations,
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL)) as total_pieces
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
GROUP BY operator
ORDER BY total_pieces DESC
LIMIT 5
Blocco 21 sql
SELECT
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO}')) AS DECIMAL)) as total
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
Blocco 22 sql
SELECT
COUNT(*) as total_ops,
AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO}')) AS DECIMAL)) as avg_value
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
Blocco 23 sql
SELECT
JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO_GROUP}')) as label,
COUNT(*) as count,
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.{CAMPO_SUM}')) AS DECIMAL)) as total
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
GROUP BY label
ORDER BY total DESC
LIMIT 10
Blocco 24 sql
SELECT
DATE(timestamp) as date,
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL)) as daily_total
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp >= DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY date
ORDER BY date
Blocco 25 json
{
"total_quantity": 1850,
"total_operations": 23,
"avg_duration": 2.3
}
Blocco 26
π Produzione di {periodo}:
β
Totale pezzi: {total_quantity}
π Operazioni: {total_operations}
β±οΈ Durata media: {avg_duration}h
Blocco 27
π Produzione di ieri:
β
Totale pezzi: 1.850
π Operazioni: 23
β±οΈ Durata media: 2.3h
Blocco 28 sql
SELECT
SUM(...) as total_quantity, β placeholder: {total_quantity}
COUNT(*) as total_ops, β placeholder: {total_ops}
AVG(...) as avg_value β placeholder: {avg_value}
Blocco 29
Totale: {total_quantity}
Operazioni: {total_ops}
Media: {avg_value}
Blocco 30
produzione di (ieri|oggi)
gruppo_1 β
Blocco 31
{periodo} = "ieri"
Blocco 32
Produzione di {periodo}: {total} pezzi
Blocco 33
Produzione di ieri: 1.850 pezzi
Blocco 34
π Statistiche
β
Successo
β Errore
β οΈ Attenzione
π In crescita
π In calo
π₯ Operatori
β±οΈ Tempo
π― Obiettivo
Blocco 35
**Totale**: {total} pezzi
Blocco 36
TOTALE: {total} pezzi
Blocco 37
Totale: 1.850 pezzi
Blocco 38
Totale: 1.850 pezzi
Rispetto alla media degli ultimi 30 giorni (1.750 pezzi),
sei +5.7% π. Ottimo lavoro!
Blocco 39
π Produzione di {periodo}:
β
Totale pezzi: {total_quantity}
π Operazioni: {total_operations}
β±οΈ Durata media: {avg_duration}h
Rispetto alla media degli ultimi 30 giorni ({avg_30d} pezzi),
sei {delta_percent}% {emoji_trend}.
Blocco 40
π₯ Top 5 Operatori ({periodo}):
π₯ 1. {operator_1} - {pieces_1} pezzi ({ops_1} operazioni)
π₯ 2. {operator_2} - {pieces_2} pezzi ({ops_2} operazioni)
π₯ 3. {operator_3} - {pieces_3} pezzi ({ops_3} operazioni)
4. {operator_4} - {pieces_4} pezzi ({ops_4} operazioni)
5. {operator_5} - {pieces_5} pezzi ({ops_5} operazioni)
β‘ {operator_1} Γ¨ il piΓΉ produttivo con {pieces_per_hour} pezzi/ora.
Blocco 41
βοΈ Confronto {periodo_1} vs {periodo_2}:
π {periodo_1}: {value_1} pezzi
π {periodo_2}: {value_2} pezzi
π Variazione: {delta_abs} pezzi ({delta_percent}% {emoji})
{insight_message}
Blocco 42
"Qual Γ¨ stata la produzione di ieri?"
Blocco 43
produzione di (ieri|oggi)
Blocco 44 php
[
'periodo' => 'ieri',
'date_from' => '2025-10-21 00:00:00',
'date_to' => '2025-10-21 23:59:59',
]
Blocco 45 sql
SELECT
SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.TotalPieces')) AS DECIMAL)) as total_quantity,
COUNT(*) as total_operations,
AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT(raw_data, '$.Duration')) AS DECIMAL)) as avg_duration
FROM machine_operations_log
WHERE machine_id = :machine_id
AND timestamp BETWEEN :date_from AND :date_to
Blocco 46 sql
WHERE machine_id = 5
AND timestamp BETWEEN '2025-10-21 00:00:00' AND '2025-10-21 23:59:59'
Blocco 47 json
{
"total_quantity": 1850,
"total_operations": 23,
"avg_duration": 2.3
}
Blocco 48
π Produzione di {periodo}:
β
Totale pezzi: {total_quantity}
π Operazioni: {total_operations}
β±οΈ Durata media: {avg_duration}h
Blocco 49
{periodo} β "ieri" (da entitΓ )
{total_quantity} β 1850 (da SQL)
{total_operations} β 23 (da SQL)
{avg_duration} β 2.3 (da SQL)
Blocco 50
π Produzione di ieri:
β
Totale pezzi: 1.850
π Operazioni: 23
β±οΈ Durata media: 2.3h
Blocco 51
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Template ID: prod_daily β
β β
β Ambito: π Produzione β
β β
β Pattern Matching: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β produzione di (ieri|oggi) ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Cache TTL: [3600] secondi (1 ora) β
β β
β β Richiede LLM β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Query SQL: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β SELECT ββ
β β SUM(CAST(JSON_UNQUOTE(JSON_EXTRACT( ββ
β β raw_data, '$.TotalPieces')) AS DECIMAL)) as total, ββ
β β COUNT(*) as ops, ββ
β β AVG(CAST(JSON_UNQUOTE(JSON_EXTRACT( ββ
β β raw_data, '$.Duration')) AS DECIMAL)) as avg_dur ββ
β β FROM machine_operations_log ββ
β β WHERE machine_id = :machine_id ββ
β β AND timestamp BETWEEN :date_from AND :date_to ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Response Template: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β π Produzione di {periodo}: ββ
β β ββ
β β β
Totale pezzi: {total} ββ
β β π Operazioni: {ops} ββ
β β β±οΈ Durata media: {avg_dur}h ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Follow-Up Suggestions: β
β 1. [Confronta con ieri___________________________] β
β 2. [Mostrami il trend settimanale_______________] β
β 3. [Chi ha prodotto di piΓΉ?____________________] β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Annulla] [πΎ Crea Template] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Blocco 52 sql
SELECT raw_data
FROM machine_operations_log
WHERE machine_id = 1
LIMIT 1;
Blocco 53
Pattern: produzione di (ieri|oggi)
Test Query: [Produzione di ieri_________]
Risultato: β
Match!
Gruppo 1: "ieri"
Blocco 54
Campo: [TotalPieces βΌ]
Aggregazione: [SUM βΌ]
Alias: [total]
[Aggiungi Campo]
Filtri:
β machine_id = :machine_id
β timestamp BETWEEN :date_from AND :date_to
[Genera SQL] β Crea query automaticamente