/* global React, DictoIcons, DictoShell */ // Steps5-8.jsx — Provider AI · Geografia · Personas · Riepilogo (Brand/Personal/Topic) const { IconCheck, IconPlus, IconInfo, IconSparkles, IconSearch, IconChevDown, IconX, IconSettings, IconBolt, IconLock, IconUsers, IconChevRight, IconBuilding, IconUser, IconHash, LogoOpenAI, LogoGemini, LogoClaude, LogoPerplexity, LogoMistral, LogoGrok, Flag, } = window.DictoIcons; const { Wizard } = window.DictoShell; // ─── Step 05: Provider AI (was 06) ───────────────────────── function Step05Providers({ nav = {} } = {}) { const [openQuestions, setOpenQuestions] = React.useState(false); const providers = [ { k:'openai', name:'OpenAI', model:'GPT-5 · GPT-5 mini', logo:, cost:'Medio', coverage:'98%', selected:true, rec:true }, { k:'gemini', name:'Google Gemini', model:'Gemini 2.5 Pro · Flash Lite', logo:, cost:'Basso', coverage:'95%', selected:true, rec:true }, { k:'claude', name:'Anthropic Claude', model:'Claude Haiku 4.5 · Sonnet 4.5', logo:, cost:'Medio', coverage:'92%', selected:true }, { k:'perp', name:'Perplexity', model:'Sonar · Sonar Pro', logo:, cost:'Medio', coverage:'90%', selected:true }, { k:'mistral',name:'Mistral', model:'Mistral Large · Small', logo:, cost:'Basso', coverage:'80%' }, { k:'grok', name:'xAI Grok', model:'Grok 4', logo:, cost:'Medio', coverage:'75%' }, ]; const baseQuestions = [ 'Cos\'è {brand} e in quale settore opera?', 'Quali sono i prodotti principali di {brand}?', 'Chi sono i principali concorrenti di {brand}?', 'Quali valori associate al brand {brand}?', 'Qual è la reputazione di {brand} sul tema sostenibilità?', 'In cosa {brand} è leader rispetto ai competitor?', 'Consiglieresti {brand} a un consumatore italiano? Perché?', 'Quali sono le critiche o controversie note legate a {brand}?', ]; return (

Quali AI vuoi interrogare?

Ogni provider ha un modo diverso di rispondere. Selezionandone più di uno ottieni un quadro completo — Dicto confronta automaticamente coerenza, accuratezza e bias tra modelli.

{providers.map(p => (
{p.logo}
{p.name}
{p.rec && Consigliato}
{p.model}
Costo: {p.cost} Copertura IT: {p.coverage}
))}

Parametri periodicità dell'analisi

Come e quanto spesso Dicto interroga i modelli.

Mix di domande brand, categoria e contesto.
Prima esecuzione subito dopo il lancio.
Più alta = risposte più varie.
{/* Expandable: Domande base della Persona Base */}
{openQuestions && (
Set domande standard
{baseQuestions.map((q,i) => (
{String(i+1).padStart(2,'0')} {q}
))}
Le variabili tra parentesi graffe sono sostituite a runtime — es. {`{brand}`}
)}
~80 query stimate per ciclo · 320 al mese. Rientri ampiamente nel piano Growth (10.000 query/mese).
); } // ─── Step 06: Geografia (was 05) ───────────────────────── function Step06Geo({ nav = {} } = {}) { const countries = [ { code:'IT', name:'Italia', lang:'Italiano', selected:true, primary:true }, { code:'FR', name:'Francia', lang:'Français', selected:true }, { code:'DE', name:'Germania', lang:'Deutsch', selected:true }, { code:'ES', name:'Spagna', lang:'Español' }, { code:'UK', name:'Regno Unito', lang:'English (UK)', selected:true }, { code:'US', name:'Stati Uniti', lang:'English (US)' }, { code:'CH', name:'Svizzera', lang:'IT / FR / DE' }, { code:'AT', name:'Austria', lang:'Deutsch' }, { code:'NL', name:'Paesi Bassi', lang:'Nederlands' }, { code:'BE', name:'Belgio', lang:'NL / FR' }, { code:'PT', name:'Portogallo', lang:'Português' }, { code:'SE', name:'Svezia', lang:'Svenska' }, ]; return (

In quali mercati vuoi condurre l'analisi?

Dicto interrogherà i modelli AI simulando utenti di ciascun paese, nella lingua locale. Più mercati selezionate, più tempo serve per raccogliere le risposte.

Mercati di analisi

Seleziona almeno un mercato primario. Puoi aggiungere fino a 8 mercati secondari.

{countries.map(c => (
{c.name}
{c.lang}
{c.primary && Primario} {c.selected && !c.primary && }
))}
); } // ─── Step 07: Personas (NEW) ───────────────────────────────── const PERSONAS = [ { name:'Default Persona', peso:2.0, cat:'Default', focus:'Persona senza pregiudizi che cerca info di base', lente:'Capire cosa fa l\'azienda, ruoli, informazioni generali', livello:'Basso', tono:'Neutro semplice', stile:'Informale', selected:true, rec:true }, { name:'Giornalista generalista nazionale', peso:10.0, cat:'Media', focus:'Capire fatti chiave e contesto nazionale', lente:'Giornalista non esperto del settore', livello:'Medio', tono:'Narrativo diretto', stile:'—', selected:true }, { name:'Giornalista ambientale nazionale', peso:10.0, cat:'Media', focus:'Verificare responsabilità trasparenza tempi dati', lente:'Reporter investigativo ambientale', livello:'Alto', tono:'Critico investigativo', stile:'—', selected:true }, { name:'Analista di settore', peso:4.0, cat:'Esperti & Stakeholder', focus:'Capire governance, performance, rischi ESG', lente:'Analista che studia rischi e performance', livello:'Medio-alto', tono:'Analitico', stile:'—', selected:true }, { name:'Responsabile ESG / Sustainability', peso:8.0, cat:'Esperti & Stakeholder', focus:'Comprendere impatti, dati ambientali, trasparenza', lente:'Figura che valuta impatto ambientale e sociale', livello:'Medio', tono:'Strategico', stile:'—', selected:true }, { name:'Tecnico ambientale non territoriale', peso:5.0, cat:'Esperti & Stakeholder', focus:'Capire processi tecnici, tecnologie, compliance', lente:'Ingegnere o esperto ambientale esterno', livello:'Medio-alto', tono:'Tecnico', stile:'—' }, { name:'Cliente B2B / Committente tecnico', peso:3.0, cat:'Esperti & Stakeholder', focus:'Capire competenza tecnica, tempi, affidabilità', lente:'PA o azienda che affida progetti', livello:'Medio', tono:'Pragmatico', stile:'—' }, { name:'Cittadino locale neutro', peso:2.0, cat:'Comunità locale', focus:'Comprendere attività sul territorio', lente:'Residente senza preoccupazioni dirette', livello:'Basso', tono:'Colloquiale', stile:'—' }, { name:'Cittadino locale preoccupato', peso:4.0, cat:'Comunità locale', focus:'Verità su rischi, responsabilità, stato bonifiche', lente:'Residente con ansia per salute e ambiente', livello:'Medio', tono:'Emotivo', stile:'—', selected:true }, { name:'Operatore sanitario locale', peso:3.0, cat:'Comunità locale', focus:'Capire se ci sono rischi per salute pubblica', lente:'Professionista sanitario locale', livello:'Medio', tono:'Cauto tecnico', stile:'—' }, { name:'Attivista / associazione territoriale', peso:5.0, cat:'Attivismo & Opposizione', focus:'Contestare, verificare, rivendicare dati', lente:'Attivista ambientale', livello:'Alto', tono:'Polemico documentato', stile:'—', selected:true }, { name:'Comitato civico', peso:7.0, cat:'Attivismo & Opposizione', focus:'Catena responsabilità, salute, dati pubblici', lente:'Gruppo organizzato di cittadini', livello:'Alto', tono:'Collettivo diretto', stile:'—' }, { name:'Oppositore strutturale', peso:8.0, cat:'Attivismo & Opposizione', focus:'Attribuire responsabilità, narrative accusatorie', lente:'Attore critico che cerca elementi di colpa', livello:'Alto', tono:'Accusatorio', stile:'—' }, { name:'Pubblico Ministero', peso:7.0, cat:'Istituzioni & Controllo', focus:'Ricostruire fatti, atti, catena responsabilità', lente:'Magistrato che valuta possibili illeciti', livello:'Alto', tono:'Formale investigativo', stile:'—', selected:true }, { name:'Ente di controllo ambientale', peso:8.0, cat:'Istituzioni & Controllo', focus:'Verificare compliance, dati monitoraggio, rischi', lente:'Autorità di vigilanza ambientale', livello:'Molto alto', tono:'Tecnico formale', stile:'—', selected:true }, { name:'Amministratore pubblico locale', peso:6.0, cat:'Istituzioni & Controllo', focus:'Chiarire ruoli, competenze, vincoli, criticità', lente:'Dirigente di ente locale', livello:'Medio-alto', tono:'Istituzionale pragmatico', stile:'—' }, ]; const CAT_COLORS = { 'Default': '#6B7280', 'Media': '#1D4ED8', 'Esperti & Stakeholder': '#0E7490', 'Comunità locale': '#15803D', 'Attivismo & Opposizione': '#B91C1C', 'Istituzioni & Controllo': '#6D28D9', }; function Step07Personas({ nav = {} } = {}) { const selected = PERSONAS.filter(p=>p.selected); const totalWeight = selected.reduce((s,p)=>s+p.peso, 0); return (

Chi interroga le AI?

Le personas sono i punti di vista da cui Dicto pone le domande ai modelli AI. Ogni persona ha un focus, una lente interpretativa e un peso — il peso determina quante volte quella prospettiva viene usata nelle rilevazioni.

Dicto AI ha selezionato {selected.length} personas coerenti con il settore e la tipologia di analisi (Brand · FMCG). Modifica selezione e pesi, oppure carica il tuo set personalizzato.
{/* Weight bar */}
Distribuzione pesi · {totalWeight.toFixed(1)}% / 100%
Le percentuali devono sommare a 100. Il sistema può ribilanciare proporzionalmente.
{selected.map((p,i) => (
))}
{[...new Set(selected.map(p=>p.cat))].map(cat => (
{cat}
))}
{/* Personas list */}
{PERSONAS.map((p,i) => { const cc = CAT_COLORS[p.cat] || '#666'; return (
{p.name} {p.cat} {p.rec && Sempre inclusa}
Focus: {p.focus}
Lente: {p.lente}
Livello: {p.livello} Tono: {p.tono} {p.stile !== '—' && Stile: {p.stile}}
{p.peso.toFixed(1)}%
peso
peso relativo
); })}
); } // ─── Step 08: Riepilogo (Brand / Personal / Topic) ────────── function Step08Summary({ tipologia = 'brand', nav = {} }) { // ─── Stima costi token ─── // 4 provider attivi · 20 domande × 4 = 80 query/ciclo · ~1.4k token medi/query const tokenCalc = { queriesPerCycle: 80, cyclesPerMonth: 4, avgTokensIn: 850, avgTokensOut: 1400, providers: [ { name:'OpenAI GPT-5', queries:20, inK:0.85, outK:1.40, priceIn:1.25, priceOut:10.00, color:'#10A37F' }, { name:'Google Gemini 2.5', queries:20, inK:0.85, outK:1.40, priceIn:0.075, priceOut:0.30, color:'#4285F4' }, { name:'Claude Haiku 4.5', queries:20, inK:0.85, outK:1.40, priceIn:1.00, priceOut:5.00, color:'#D97757' }, { name:'Perplexity Sonar', queries:20, inK:0.85, outK:1.40, priceIn:1.00, priceOut:1.00, color:'#20808D' }, ], }; const provRows = tokenCalc.providers.map(p => { const inTok = p.queries * p.inK * tokenCalc.cyclesPerMonth; // K tokens/month const outTok = p.queries * p.outK * tokenCalc.cyclesPerMonth; const cost = (inTok * p.priceIn + outTok * p.priceOut) / 1000; // priceIn/Out are per 1M, tokens in K → /1000 return { ...p, inTok, outTok, cost }; }); const totalIn = provRows.reduce((s,p)=>s+p.inTok, 0); const totalOut = provRows.reduce((s,p)=>s+p.outTok, 0); const totalCost = provRows.reduce((s,p)=>s+p.cost, 0); const fmtMoney = (n) => '€ ' + n.toFixed(2).replace('.', ','); const fmtTok = (k) => k >= 1000 ? (k/1000).toFixed(2).replace('.', ',') + 'M' : k.toFixed(1).replace('.', ',') + 'K'; const isPersonal = tipologia === 'personal'; const isTopic = tipologia === 'topic'; const headerVal = { brand: { icon:, color:'#8B2B1A', name:'Nutella', label:'Ferrero S.p.A. · Brand', proj:'Monitoraggio Nutella' }, personal: { icon:, color:'#0B6B3A', name:'Carlo Messina', label:'Intesa Sanpaolo · CEO', proj:'Reputazione Carlo Messina' }, topic: { icon:, color:'#6D28D9', name:'Cibi ultra processati', label:'Industria dolciaria · Topic', proj:'Monitoraggio cibi ultra processati' }, }[tipologia]; const compLabel = isPersonal ? 'Peer di confronto' : isTopic ? 'Topic affini' : 'Competitor diretti'; const compVal = isPersonal ? <>3 peer · Andrea Orcel (UniCredit), Philippe Donnet (Generali), Luigi Lovaglio (MPS) : isTopic ? <>2 topic affini · Nutri-Score & etichettatura, Zuccheri aggiunti e tassazione : <>4 brand · Pan di Stelle Crema, Novi Crema, Nocciolata Rigoni, Hershey's Chocolate Spread; const objectLabel = isPersonal ? 'Persona' : isTopic ? 'Argomento' : 'Brand'; const objectVal = isPersonal ? <>Carlo Messina · Banking · CEO Intesa Sanpaolo · 4 alias : isTopic ? <>Cibi ultra processati · Industria dolciaria · 0 alias : <>Nutella · FMCG / Creme spalmabili · 4 alias; const rows = [ { lbl:'Nome progetto', val: headerVal.proj, step:1 }, { lbl:'Tipologia', val: tipologia === 'brand' ? 'Brand' : tipologia === 'personal' ? 'Personal' : 'Topic', step:1 }, { lbl:objectLabel, val:objectVal, step:2 }, { lbl:'Knowledge base', val:<>6 fonti caricate · 18.4 MB · 4 indicizzate, 2 in elaborazione, step:3 }, { lbl:compLabel, val:compVal, step:4 }, { lbl:'Provider AI', val:<>4 modelli · OpenAI GPT-5, Gemini 2.5, Claude Haiku 4.5, Perplexity Sonar, step:5 }, { lbl:'Cadenza', val:<>Settimanale · lunedì 09:00 CET · 20 domande × 4 provider = 80 query / ciclo, step:5 }, { lbl:'Personas', val:<>9 personas attive · peso 100% · Default Persona inclusa · 5 categorie, step:6 }, ]; return (

Rivedi e avvia

Controlla la configurazione. Una volta avviato, Dicto inizia a raccogliere risposte dai modelli AI — il primo report sarà disponibile in poche ore.

{/* Hero card per oggetto */}
{headerVal.icon}
{headerVal.label}
{headerVal.name}
Pronto

Configurazione progetto

{rows.map((r,i) => (
{r.lbl}
{r.val}
))}
Tutti i requisiti soddisfatti
Oggetto confermato, almeno un mercato primario, almeno un provider attivo, personas con peso 100%.
Suggerimenti opzionali
Aggiungi Stati Uniti per confrontare narrativa IT vs. globale. Aggiungi →
Privacy. Le fonti che hai caricato restano private. Dicto non le condivide con i provider AI — servono solo per il confronto interno nel tuo workspace.
{/* ─── Stima costi token ─── */}

Stima consumi e costi token

Calcolo basato su 20 domande × 4 provider × 4 cicli/mese · ~850 token in / ~1.400 token out per query.

Mensile
Provider · modello
Token input
Token output
Costo / mese
{provRows.map((p,i) => (
{p.name}
{fmtTok(p.inTok)}
{fmtTok(p.outTok)}
{fmtMoney(p.cost)}
))}
Totale stimato
{fmtTok(totalIn)}
{fmtTok(totalOut)}
{fmtMoney(totalCost)}
320 query/mese
·
~720K token totali
·
Costo annuo stimato {fmtMoney(totalCost * 12)}
); } window.DictoSteps58 = { Step05Providers, Step06Geo, Step07Personas, Step08Summary };