Prompt AI migliorato: salute, stagionalità, scadenze, inventario dettagliato

This commit is contained in:
dadaloop82
2026-03-10 13:39:09 +00:00
parent 9b1a933f10
commit 7a99c7e9c3
+47 -17
View File
@@ -1239,20 +1239,43 @@ function bringSuggestItems(PDO $db): void {
"); ");
$inventory = $stmt->fetchAll(PDO::FETCH_ASSOC); $inventory = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Build context // Build detailed context with expiry info
$invLines = []; $invLines = [];
$expiringItems = [];
$expiredItems = [];
$categories = [];
foreach ($inventory as $item) { foreach ($inventory as $item) {
$cat = $item['category'] ?: 'altro';
$categories[$cat] = ($categories[$cat] ?? 0) + 1;
$line = "- {$item['name']}"; $line = "- {$item['name']}";
if ($item['brand']) $line .= " ({$item['brand']})"; if ($item['brand']) $line .= " ({$item['brand']})";
$line .= ": {$item['quantity']} {$item['unit']} in {$item['location']}"; $line .= ": {$item['quantity']} {$item['unit']} in {$item['location']}";
if ($item['expiry_date']) { if ($item['expiry_date']) {
$dl = intval($item['days_left']); $dl = intval($item['days_left']);
if ($dl < 0) $line .= " [SCADUTO]"; if ($dl < 0) {
elseif ($dl <= 3) $line .= " [scade tra {$dl}g]"; $line .= " [⚠️ SCADUTO da " . abs($dl) . " giorni]";
$expiredItems[] = $item['name'];
} elseif ($dl <= 2) {
$line .= " [🔴 SCADE TRA {$dl} GIORNI - USARE SUBITO]";
$expiringItems[] = $item['name'] . " (tra {$dl}g)";
} elseif ($dl <= 7) {
$line .= " [🟡 scade tra {$dl} giorni]";
$expiringItems[] = $item['name'] . " (tra {$dl}g)";
} elseif ($dl <= 14) {
$line .= " [scade tra {$dl} giorni]";
}
} }
$invLines[] = $line; $invLines[] = $line;
} }
$inventoryText = empty($invLines) ? 'La dispensa è VUOTA.' : implode("\n", $invLines); $inventoryText = empty($invLines) ? 'La dispensa è COMPLETAMENTE VUOTA.' : implode("\n", $invLines);
$expiryContext = '';
if (!empty($expiredItems)) {
$expiryContext .= "\n\nPRODOTTI SCADUTI da sostituire: " . implode(', ', $expiredItems);
}
if (!empty($expiringItems)) {
$expiryContext .= "\n\nPRODOTTI IN SCADENZA (priorità per sostituzione): " . implode(', ', $expiringItems);
}
$bringText = empty($bringItems) $bringText = empty($bringItems)
? 'La lista della spesa Bring! è attualmente VUOTA.' ? 'La lista della spesa Bring! è attualmente VUOTA.'
@@ -1265,25 +1288,32 @@ function bringSuggestItems(PDO $db): void {
$anno = date('Y'); $anno = date('Y');
$prompt = <<<PROMPT $prompt = <<<PROMPT
Sei un esperto consulente per la spesa domestica italiano. Analizza la dispensa dell'utente e suggerisci cosa comprare. Sei un nutrizionista e consulente per la spesa domestica italiano. Il tuo obiettivo è aiutare l'utente a fare una spesa SANA, EQUILIBRATA e INTELLIGENTE.
DATA ATTUALE: {$meseIt} {$anno} DATA ATTUALE: {$meseIt} {$anno}
INVENTARIO ATTUALE (cosa ha già in casa): === INVENTARIO ATTUALE (cosa ha già in casa) ===
{$inventoryText} {$inventoryText}{$expiryContext}
=== LISTA BRING! (già pianificato per la spesa) ===
{$bringText} {$bringText}
REGOLE TASSATIVE: === IL TUO COMPITO ===
1. È VIETATO suggerire prodotti che sono GIÀ nella lista Bring! sopra elencata. Anche se con nome leggermente diverso (es. "Fagioli" vs "Fagioli in lattina") NON suggerirli. Analizza attentamente l'inventario dell'utente e suggerisci cosa MANCA per una settimana di alimentazione sana.
2. NON suggerire prodotti che l'utente ha già in abbondanza nell'inventario
3. Suggerisci FRUTTA E VERDURA DI STAGIONE per {$meseIt} RAGIONA COSÌ:
4. Suggerisci prodotti base che sembrano mancare (es. latte, uova, pane se non presenti) 1. CONTROLLA cosa ha già: guarda OGNI prodotto nell'inventario prima di suggerire. Se ha già pollo, non suggerire pollo. Se ha già pasta, non suggerire altra pasta.
5. Se qualcosa sta per scadere, suggerisci un sostituto 2. CONTROLLA la lista Bring!: NON suggerire nulla che sia già nella lista. Neanche varianti simili (es. "Fagioli" se c'è "Fagioli in lattina").
6. Pensa come un nutrizionista: dieta equilibrata e varia 3. PRODOTTI SCADUTI/IN SCADENZA: se qualcosa sta per scadere o è scaduto, suggerisci un sostituto fresco.
7. Massimo 15 suggerimenti, ordinati per priorità 4. STAGIONALITÀ ({$meseIt}): prediligi FRUTTA e VERDURA di stagione. A {$meseIt} in Italia: carciofi, asparagi, spinaci, bietole, finocchi, radicchio, arance, kiwi, mele, pere.
8. Ogni suggerimento deve avere un motivo chiaro 5. DIETA SANA: assicurati che l'utente abbia proteine, fibre, vitamine, carboidrati complessi. Evita eccessi di prodotti trasformati.
9. Prima di includere ogni suggerimento, VERIFICA che non sia già nella lista Bring! sopra 6. BASI MANCANTI: controlla se mancano alimenti essenziali come uova, latte, pane, frutta fresca, verdura, proteine.
7. VARIETÀ: non suggerire 5 tipi di frutta se manca la carne. Bilancia le categorie.
LIMITI:
- Massimo 12 suggerimenti
- Ordina per PRIORITÀ REALE (prima le mancanze gravi, poi i nice-to-have)
- Ogni motivo deve essere SPECIFICO ("non hai proteine fresche" non "è buono")
Rispondi SOLO con un JSON valido (senza markdown, senza backtick): Rispondi SOLO con un JSON valido (senza markdown, senza backtick):
{ {