/* === data.jsx · Docol (manufatura, dores em P2P) ====================
   All Portuguese, all realistic. Suppliers, SKUs, KPIs based on a
   plumbing/sanitary-ware manufacturer headquartered in Joinville SC.
   ===================================================================== */

const DOCOL = {
    company: 'Docol',
    industry: 'Manufatura',
    industryTag: 'Indústria · Metais sanitários',
    logoBg: '#C8102E',         /* Docol uses a strong red brand */
    logoMonogram: 'D',
    fundedHQ: 'Joinville, SC',
    sites: ['Joinville (matriz)', 'Manaus (Polo Industrial)'],
};

/* Studio version · stamped on every saved demo. Bump when you change
   shapes/behaviors so old shared demos still work via the version flag. */
const STUDIO_VERSION = 'v1.3.0';
const STUDIO_BUILD_DATE = '3 jun 2026';

/* Default brand color palette to offer in Level 1 */
const BRAND_SWATCHES = [
    { name: 'Docol Red',   value: '#C8102E' },
    { name: 'Aço azul',    value: '#1F4E8C' },
    { name: 'Cromado',     value: '#3F4A55' },
    { name: 'Cobre',       value: '#B05E1A' },
    { name: 'Esmeralda',   value: '#0D9488' },
    { name: 'Nous purple', value: '#6D4ADD' },
];

/* The AE / SDR using the studio · pre-filled. */
const AE = {
    name: 'Felipe Andrade',
    role: 'Account Executive · UpFlux',
    initials: 'FA',
};

/* Find & replace mappings that Level 1 (Cosmética) will apply */
const FR_MAP = [
    { from: 'UpFlux - Demonstração Comercial', to: 'Docol · Compras' },
    { from: 'Julia Ito',                       to: 'Marcos Silveira' },
    { from: 'JI',                              to: 'MS' },
    { from: 'Julia',                           to: 'Marcos' },
    { from: 'Nous purple',                     to: 'Docol Red' },
];

/* Realistic Docol-context suppliers (Level 2) */
const SUPPLIERS = [
    { name: 'Wieland do Brasil',         cat: 'Latão / Metais' },
    { name: 'Saint-Gobain Brasil',       cat: 'Cerâmica / Vidro' },
    { name: 'Tigre S.A.',                cat: 'Termoplásticos' },
    { name: 'Aperam Inox',               cat: 'Aço inoxidável' },
    { name: 'Gerdau',                    cat: 'Aço carbono' },
    { name: 'Mahle Metal Leve',          cat: 'Componentes usinados' },
    { name: 'Termomecânica',             cat: 'Cobre / Latão' },
    { name: 'Embraco',                   cat: 'Componentes auxiliares' },
];

/* Realistic Docol SKU categories */
const SKU_CATEGORIES = [
    { name: 'Monocomandos',     code: 'MC',   sample: 'MC.LOOP.CR.150', count: 218 },
    { name: 'Torneiras de mesa', code: 'TM',  sample: 'TM.PRES.CR.120', count: 174 },
    { name: 'Chuveiros',         code: 'CH',  sample: 'CH.LIVE.4F.230', count: 92 },
    { name: 'Válvulas de descarga', code: 'VD', sample: 'VD.DOCOLMATIC.32', count: 46 },
    { name: 'Registros',         code: 'RG',  sample: 'RG.BASE.34.CR',  count: 64 },
    { name: 'Acessórios para banho', code: 'AB', sample: 'AB.GANCHO.SLIM', count: 130 },
];

/* Personas (Level 3 · branched demo flow) */
const PERSONAS = [
    {
        id: 'ops',
        name: 'Marcos Silveira',
        role: 'Diretor de Operações',
        avatar: '#1F4E8C',
        firstScreen: 'chat',
        focus: 'Dashboard executivo + gargalos P2P',
        branchSummary: 'Greeting executivo → KPIs de ciclo → gargalo PO > R$ 250k',
        kpiTone: 'exec',
    },
    {
        id: 'analyst',
        name: 'Camila Reis',
        role: 'Analista de Compras Sr.',
        avatar: '#0D9488',
        firstScreen: 'chat',
        focus: 'Detalhamento de variantes e cotações',
        branchSummary: 'Pergunta sobre cotações abertas → drill em fornecedor Wieland',
        kpiTone: 'detail',
    },
    {
        id: 'cfo',
        name: 'Roberto Drumond',
        role: 'CFO',
        avatar: '#B05E1A',
        firstScreen: 'roai',
        focus: 'RoAI · valor desbloqueado + payback',
        branchSummary: 'Abre direto em RoAI Value Tracker → cenários ROI',
        kpiTone: 'cfo',
    },
    {
        id: 'cio',
        name: 'Patrícia Hwang',
        role: 'CIO',
        avatar: '#6D4ADD',
        firstScreen: 'rotinas',
        focus: 'Arquitetura · segurança · integrações SAP',
        branchSummary: 'Vê rotinas + Trust Center primeiro, depois o produto',
        kpiTone: 'tech',
    },
];

/* Level 4 · dynamic variables that get filled by the AE form */
const DYNAMIC_VARS = [
    { key: 'empresa',         label: 'Empresa',           value: 'Docol' },
    { key: 'setor',           label: 'Setor',             value: 'Manufatura · metais sanitários' },
    { key: 'pain_point',      label: 'Dor principal',     value: 'PO > R$ 250k preso na alçada' },
    { key: 'ae_nome',         label: 'AE responsável',    value: 'Felipe Andrade' },
    { key: 'persona_nome',    label: 'Persona principal', value: 'Marcos Silveira' },
    { key: 'volume_mensal',   label: 'Volume mensal POs', value: '1.840' },
    { key: 'fornec_top',      label: 'Top fornecedor',    value: 'Wieland do Brasil' },
    { key: 'meta_lead_time',  label: 'Meta lead-time P2P', value: '25 dias' },
    { key: 'spend_total',     label: 'Spend total (12M)', value: '417,1 Mi' },
    { key: 'categorias_ativas', label: 'Categorias ativas', value: '11' },
    { key: 'roi_valor',       label: 'ROI desbloqueado',  value: '2,4M' },
    { key: 'roi_payback',     label: 'Payback do programa', value: '8 meses' },
    { key: 'pedido_id',       label: 'ID de pedido (exemplo)', value: '4500427209' },
    { key: 'lead_time_atual', label: 'Lead-time atual',   value: '42 dias' },
    { key: 'spend_p2p_enderecavel', label: 'Spend endereçável', value: '42 Mi' },
    { key: 'fornecedores_ativos', label: 'Fornecedores ativos', value: '184' },
    { key: 'fornecedores_concentracao_top10', label: 'Concentração top 10', value: '62%' },
    { key: 'saving_medio_observado', label: 'Saving médio observado', value: '5,8%' },
    { key: 'erp',             label: 'ERP do prospect',   value: 'SAP MM' },
    { key: 'peer_referencia', label: 'Peer de referência', value: 'Lupatech' },
    { key: 'peer_resultado',  label: 'Resultado do peer', value: 'saving 6,4% em 11 meses' },
];

/* Level 5 · guided content (hotspots/tooltips/CTAs) on the preview */
const HOTSPOT_KINDS = {
    tooltip:   { label: 'Tooltip',   icon: 'message-circle', color: '#3B82F6' },
    video:     { label: 'Vídeo do AE', icon: 'play',         color: '#EF4444' },
    cta:       { label: 'CTA',       icon: 'zap',            color: '#F59E0B' },
    hyperlink: { label: 'Hyperlink', icon: 'arrow-right',    color: '#0D9488' },
};

const DEFAULT_HOTSPOTS = [
    {
        id: 'h1',
        screen: 'chat',
        x: 0.20, y: 0.66,
        kind: 'tooltip',
        title: 'Saudação contextual',
        text: 'Note o cumprimento por nome. O Nous reconhece você e o horário automaticamente, sem precisar configurar template de boas-vindas.',
        link: '',
        cta: '',
        videoUrl: '',
        videoDuration: '',
    },
    {
        id: 'h2',
        screen: 'chat',
        x: 0.50, y: 0.32,
        kind: 'tooltip',
        title: 'Pergunta em pt-BR sobre dados do SAP',
        text: 'Quando o time de compras da Docol pergunta "quanto a gente perdeu em PO presa em alçada esse mês?", o Nous consulta seu SAP MM em tempo real e responde com R$ 1,8M e os 47 POs específicos, incluindo Wieland do Brasil. A resposta vem em segundos, direto da fonte.',
        link: '',
        cta: '',
        videoUrl: '',
        videoDuration: '',
    },
    {
        id: 'h3',
        screen: 'agents',
        x: 0.50, y: 0.28,
        kind: 'tooltip',
        title: 'Agente "Aprovação P2P > R$ 250k"',
        text: 'Esse agente automatiza exatamente a regra que hoje trava POs grandes na alçada. Ele monitora o pipeline em tempo real, identifica POs > R$ 250k, valida 8 critérios (orçamento, fornecedor homologado, materiais críticos, etc) e roteia para o aprovador certo em < 30 min. Hoje na Docol esse processo leva 12 dias.',
        link: '',
        cta: '',
        videoUrl: '',
        videoDuration: '',
    },
    {
        id: 'h4',
        screen: 'agents',
        x: 0.30, y: 0.65,
        kind: 'cta',
        title: 'Próximo passo concreto',
        text: 'Workshop de 4h com seu time de compras + Engenharia de Valor UpFlux. Em 30 dias você tem o agente "Aprovação P2P > R$ 250k" rodando em sandbox com dados reais da Docol.',
        link: 'https://calendly.com/felipe-upflux/docol',
        cta: 'Agendar workshop dia 03/jun',
        videoUrl: '',
        videoDuration: '',
    },
    {
        id: 'h5',
        screen: 'roai',
        x: 0.50, y: 0.25,
        kind: 'tooltip',
        title: 'Peer benchmark · Lupatech',
        text: 'Lupatech (mesmo porte, mesma indústria metal-mecânica) implantou Nous em janeiro/2026. 11 meses depois: saving médio 6,4%, payback em 7 meses, R$ 3,1M recuperado. O cálculo da Docol é mais conservador (5,8% sobre R$42M endereçáveis = R$2,4M) porque escolhemos faixa inicial menor de spend.',
        link: '',
        cta: '',
        videoUrl: '',
        videoDuration: '',
    },
    {
        id: 'h6',
        screen: 'roai',
        x: 0.65, y: 0.50,
        kind: 'hyperlink',
        title: 'Case completo manufatura',
        text: 'Veja o case completo de 11 meses Lupatech, incluindo a primeira semana de implantação, os 3 agentes-piloto e o painel de auditoria que o Conselho usou para validar o ROI.',
        link: 'https://upflux.ai/cases/manufatura-lupatech',
        cta: 'Ver case completo (8 min de leitura)',
        videoUrl: '',
        videoDuration: '',
    },
];

/* Default builder state */
const DEFAULT_STATE = {
    activeScreen: 'chat',
    expanded: 1,                    /* which level accordion is open */
    levels: {
        1: { enabled: true,  applied: true,  progress: 100 },
        2: { enabled: true,  applied: true,  progress: 100 },
        3: { enabled: true,  applied: true,  progress: 100 },
        4: { enabled: true,  applied: true,  progress: 100 },
        5: { enabled: true,  applied: true,  progress: 100 },
    },
    cosmetic: {
        company:     DOCOL.company,
        industry:    DOCOL.industry,
        logoBg:      DOCOL.logoBg,
        logoMonogram: DOCOL.logoMonogram,
        brandColor:  '#C8102E',
        prospectContact: 'Marcos Silveira',
        prospectContactInitials: 'MS',
        applied: true,
    },
    data: {
        suppliers: ['Wieland do Brasil', 'Saint-Gobain Brasil', 'Tigre S.A.', 'Aperam Inox', 'Mahle Metal Leve'],
        skuCategories: ['Monocomandos', 'Torneiras de mesa', 'Chuveiros', 'Válvulas de descarga'],
        sites: ['Joinville (matriz)'],
        valueRange: [50000, 750000],
        currency: 'BRL',
    },
    persona: {
        activeId: 'ops',
        branchEnabled: true,
    },
    vars: Object.fromEntries(DYNAMIC_VARS.map(v => [v.key, v.value])),
    hotspots: DEFAULT_HOTSPOTS,
    showHotspotPreview: null,         /* which hotspot is selected in the editor */
    openHotspotId: null,              /* which callout is open on the preview (click-to-open) */
    /* F5 — drill-down (transiente, fechado por padrão). O dataset sintético
       NÃO é persistido aqui: é regenerado sob demanda por window.SyntheticData. */
    drilldown: { open: false },
    /* QW3 — badge "dados simulados" no canto do preview */
    showDemoBadge: true,
    /* Categorized example questions captured during commercial discovery.
       Editable per prospect. Used in chat home + sidebar Recentes. */
    discovery: {
        estrategico: [
            {
                id: 'E1',
                label: 'Considerando os spends de cada categoria, quais tendências da operação para os próximos meses?',
                answer: {
                    text: 'O spend total dos últimos 12 meses somou **R$ {{spend_total}}** distribuídos em **{{categorias_ativas}} categorias ativas**, com forte concentração: Outros, Serviço e Manutenção respondem por **87,5%** do volume (64,14%, 16,82% e 6,54% respectivamente), padrão típico de Pareto em compras industriais.\n\nEm **abril 2026**, apenas **2** das 10 categorias analisadas apresentam tendência de crescimento · **Manutenção** com desvio de **+120,1%** vs. média dos 3 meses anteriores (R$ 9,8 Mi vs. média de R$ 4,5 Mi) e **Consumo** com **+75,41%** (R$ 5,0 Mi vs. R$ 2,8 Mi), enquanto as demais 8 categorias estão em queda, com destaque negativo para **Epi (-87,04%)**, **Marketing (-83,14%)** e **Químico (-71,24%)**.\n\nA projeção para o próximo trimestre aponta R$ 116,6 Mi para Outros, R$ 33,8 Mi para Serviço e R$ 12,0 Mi para Manutenção, totalizando **~R$ 186,9 Mi**. Ação prioritária: investigar o pico de Manutenção em abril (possível corretiva não planejada) e acionar fornecedores de Epi e Químico para entender se a queda reflete cancelamento real ou atraso de faturamento.',
                    artifact: {
                        type: 'kpi-grid',
                        title: 'Tendências de Spend por Categoria',
                        meta: ['Últimos 12 meses', '{{categorias_ativas}} categorias ativas', 'Spend total: R$ {{spend_total}}'],
                        kpis: [
                            { label: 'SPEND TOTAL (12M)', value: 'R$ {{spend_total}}', sub: 'Período: Nov 2025 - Abr 2026', highlight: true },
                            { label: 'CATEGORIAS ATIVAS',  value: '{{categorias_ativas}}', sub: 'Grupos de material' },
                            { label: 'TICKET MÉDIO',       value: 'R$ 6.799', sub: 'Por item' },
                            { label: 'CATEGORIAS EM CRESCIMENTO', value: '2', sub: '+120% (Manutenção) vs média 3m anterior' },
                        ],
                    },
                },
            },
            {
                id: 'E2',
                label: 'Qual o ROI do nosso investimento em supply chain digital?',
                answer: {
                    text: 'O programa gerou **R$ {{roi_valor}}** em valor desbloqueado nos últimos 12 meses, principalmente em redução de glosa de NF (R$ 980k) e aceleração de pagamentos a fornecedores (R$ 720k). O payback estimado é de **{{roi_payback}}**.',
                    artifact: {
                        type: 'kpi-grid',
                        title: 'RoAI · Programa Supply Chain Digital',
                        meta: ['12M', 'vs. baseline 2025'],
                        kpis: [
                            { label: 'VALOR DESBLOQUEADO', value: 'R$ {{roi_valor}}', sub: 'Acumulado 12M', highlight: true },
                            { label: 'PAYBACK',             value: '{{roi_payback}}', sub: 'do investimento total' },
                            { label: 'AUTOMAÇÕES ATIVAS',   value: '14', sub: 'rodando em produção' },
                        ],
                    },
                },
            },
            { id: 'E3', label: 'Estamos batendo a meta de lead-time P2P estabelecida no PE?' },
            { id: 'E4', label: 'Quais fornecedores estratégicos têm risco de ruptura?' },
        ],
        gestao: [
            {
                id: 'G0',
                label: 'Adorei a Curva ABC, mas é trabalhosa. Como fica viva e multidimensional?',
                answer: {
                    text: 'Hoje a Curva ABC custa horas para montar, desatualiza em dias e olha só uma dimensão (valor). A Inteligência de Performance de Fornecedor reconstrói a curva **automaticamente em três dimensões**, valor, eficiência operacional e risco, e mantém viva, sincronizada com o ERP, sem ninguém reabrir Excel.\n\nNa dimensão Eficiência, fornecedores que geram retrabalho sobem na curva mesmo sendo pequenos em valor. Na dimensão Risco, single-source e contratos vencendo aparecem em destaque. É a leitura cruzada de Diretos, Indiretos e Serviços que abre a conversa estratégica que hoje ninguém tem tempo de fazer. O artefato abaixo é a Curva ABC viva, com a tabela de itens, filtros e gráficos de concentração.',
                    artifact: {
                        type: 'iframe',
                        src: 'assets/curva-abc.html',
                        title: 'Curva ABC viva · itens multidimensionais',
                        meta: ['Atualizada em tempo real', 'Valor · eficiência · risco', 'Fonte: ERP'],
                        height: 760,
                    },
                },
            },
            {
                id: 'G1',
                label: 'Performance dos fornecedores no último trimestre',
                answer: {
                    text: '**{{fornec_top}}** lidera o ranking com OTIF de 94% e lead-time médio de 6,2 dias. Saint-Gobain Brasil entrega em prazo em 87% dos casos. Os maiores ofensores são Tigre S.A. (OTIF 71%) e um fornecedor secundário de aço inox com 8 lotes recusados no trimestre.',
                    artifact: {
                        type: 'kpi-grid',
                        title: 'Performance · {{empresa}} · Q1 2026',
                        meta: ['Janeiro–Março', '5 fornecedores principais'],
                        kpis: [
                            { label: 'OTIF MÉDIO',        value: '83%', sub: 'On-time in-full agregado', highlight: true },
                            { label: 'LEAD-TIME MÉDIO',   value: '8,4 dias', sub: 'pondrado por volume' },
                            { label: 'TOP FORNECEDOR',    value: '{{fornec_top}}', sub: 'OTIF 94% · LT 6,2d' },
                        ],
                    },
                },
            },
            { id: 'G2', label: 'Quais gargalos do meu processo P2P por unidade fabril?' },
            { id: 'G3', label: 'Variação de lead-time entre Joinville e Manaus' },
            { id: 'G4', label: 'Top 10 categorias com maior desvio de prazo' },
        ],
        operacional: [
            {
                id: '1.1',
                label: 'Requisição: O que eu preciso comprar hoje?',
                answer: {
                    text: 'Hoje **{{empresa}}** tem **23 requisições novas** aguardando aprovação, totalizando **R$ 1,84 Mi**. As 3 categorias com maior pressão: **Lubrificantes industriais** (R$ 482k), **Componentes de manutenção** (R$ 318k) e **EPI** (R$ 264k). Cinco delas estão fora do SLA de 24h e devem ser priorizadas.',
                    artifact: {
                        type: 'kpi-grid',
                        title: 'Requisições do dia · {{empresa}}',
                        meta: ['Hoje', '23 novas', 'R$ 1,84 Mi'],
                        kpis: [
                            { label: 'NOVAS HOJE',     value: '23', sub: 'Aguardando aprovação', highlight: true },
                            { label: 'CRÍTICAS',       value: '5', sub: 'SLA > 24h' },
                            { label: 'VALOR TOTAL',    value: 'R$ 1,84 Mi', sub: 'Soma do dia' },
                            { label: 'FORNECEDORES',   value: '14', sub: 'distintos' },
                        ],
                    },
                },
            },
            {
                id: '1.2',
                label: 'Requisição: Tenho requisições duplicadas abertas hoje?',
                answer: {
                    text: 'Identifiquei **4 pares de requisições duplicadas** abertas nos últimos 7 dias: mesmo CNPJ, mesmo valor (±5%), janela < 7 dias. Total potencialmente bloqueado: **R$ 312k**. Recomendação: revisar com o comprador antes de aprovar.',
                    artifact: {
                        type: 'kpi-grid',
                        title: 'Detecção de duplicidade · {{empresa}}',
                        meta: ['Últimos 7 dias', '4 pares identificados'],
                        kpis: [
                            { label: 'PARES DUPLICADOS', value: '4', sub: 'a revisar', highlight: true },
                            { label: 'VALOR BLOQUEADO',  value: 'R$ 312k', sub: 'pendente de revisão' },
                            { label: 'CNPJs ENVOLVIDOS', value: '3', sub: 'fornecedores distintos' },
                        ],
                    },
                },
            },
            { id: '3.1', label: 'Pedido: Quais POs estão com divergência?' },
            { id: '3.2', label: 'Pedido: Quais POs foram aprovados fora do fluxo padrão?' },
            { id: '4.1', label: 'Diligenciamento: Quais entregas estão pendentes?' },
            { id: '5.1', label: 'Pagamento: Quais faturas estão paradas?' },
            { id: '2.1', label: 'Cotação: Quais as cotações abertas há mais de 5 dias úteis sem retorno?' },
            {
                id: '7.1',
                label: 'Analise o histórico do item do pedido 4500427209, traga os valores e a dispersão',
                answer: {
                    text: 'O pedido **4500427209** contém **1 item** com preço unitário de **USD 1.587.136,18** e valor total de **USD 3.505.918,50**, operado pelo fornecedor **9998586277 Fornecedor 1151**. Como há apenas 1 item na amostra, a dispersão é **0,0%** e o desvio padrão é **indisponível** · não existe base histórica comparativa suficiente para afirmar se o preço está dentro ou fora do padrão de mercado, e qualquer conclusão estatística deve ser tratada com cautela.\n\nA timeline de eventos registra **500 ocorrências** distribuídas entre Criação Item da Ordem de Compra (81 eventos), Envio Ordem de Compra (75), Recebimento Concluído (79) e Aguardando Aprovação (28), com atividade concentrada em **2022-10-25** (29 eventos) e **2024-02-22** (25 eventos), sugerindo um ciclo de vida longo com múltiplos recebimentos parciais · recomenda-se auditar se o valor unitário permaneceu estável ao longo dessas revisões ou se houve reprecificação entre os eventos de aprovação.\n\n⚠️ Esta análise pode não ter sido realizada de forma completa.',
                    artifact: {
                        type: 'kpi-grid',
                        title: 'Análise de Histórico - Pedido {{pedido_id}}',
                        meta: ['Pedido: {{pedido_id}}', '1 item', 'USD 3.505.918,50'],
                        kpis: [
                            { label: 'VALOR UNITÁRIO',        value: 'USD 1.587.136,18', sub: 'Preço praticado', highlight: true },
                            { label: 'VALOR TOTAL DO PEDIDO',  value: 'USD 3.505.918,50', sub: '8.000.000 UN' },
                            { label: 'DISPERSÃO',              value: '0,0%',             sub: 'amostra insuficiente' },
                            { label: 'EVENTOS NO HISTÓRICO',   value: '500',              sub: 'distribuídos em 4 status' },
                        ],
                    },
                },
            },
        ],
    },
    /* Recent-chat shortcuts shown in sidebar · change per persona */
    recentsByPersona: {
        ops:     [
            'Quais gargalos do meu processo P2P no último trimestre?',
            'POs > R$ 250k pendentes de aprovação',
            'Lead-time médio Joinville vs Manaus',
            'Variação de glosa de NF últimos 6 meses',
        ],
        analyst: [
            'Cotações Wieland abertas há mais de 5 dias',
            'POs aprovados fora do fluxo padrão',
            'Requisições duplicadas abertas hoje',
            'Faturas paradas há mais de 7 dias',
        ],
        cfo: [
            'Valor desbloqueado pelas automações neste trimestre',
            'Cenários de ROI · projeção 12 meses',
            'Impacto fiscal das divergências de NF',
            'Custo de aprovação manual por PO',
        ],
        cio: [
            'Volume diário Sync SAP MM',
            'Latência média das integrações',
            'Trust Center · status de conformidade',
            'Logs de Reindex semântico · janela 7d',
        ],
    },
    activeCategory: null,            /* which chat category is expanded */
    consumo: { used: 0, quota: 50 },  /* análises consumidas / cota mensal */
    achados: {
        filter: 'all',
        items: [
            { id: 'ach1', title: 'Pedido 4500427209 · histórico de preço Wieland', date: '25/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'Dispersão de preço do latão CW617N nos últimos 12 meses' },
            { id: 'ach2', title: 'POs > R$ 250k presas na alçada (maio)',          date: '24/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: '47 POs · R$ 1,8M parados · lead-time médio 12 dias' },
            { id: 'ach3', title: 'Dúvida: Aprovações P2P',                          date: '22/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'Qual o percentual de requisições que estouraram o SLA de aprovação?' },
            { id: 'ach4', title: 'Concentração de fornecedores · top 10 = 62%',      date: '20/05/2026', type: 'html', category: '1 - Inteligencia de Suprimentos', preview: 'Risco de dependência: Wieland (latão) e Aperam (inox)' },
            { id: 'ach5', title: 'Faturas bloqueadas para pagamento',                date: '18/05/2026', type: 'html', category: '1 - Compras ao Pagamento' },
            { id: 'ach6', title: 'MIGOs com divergência de quantidade > 2%',         date: '16/05/2026', type: 'html', category: '1 - Compras ao Pagamento' },
            { id: 'ach7', title: 'Cauda longa · 140 fornecedores < 1% do spend',     date: '14/05/2026', type: 'html', category: '1 - Inteligencia de Suprimentos', preview: 'Oportunidade de consolidação: R$ 4-6% de saving' },
            { id: 'ach8', title: 'Projeção RoAI ano 1 · cenário conservador',        date: '12/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'R$ 2,4M sobre R$ 42M endereçáveis (saving 5,8%)' },
        ],
        categories: [
            'Todos',
            '1 - Compras ao Pagamento',
            '1 - Inteligencia de Suprimentos',
        ],
    },
    agents: {
        activeTab: 'agentes',          /* 'agentes' | 'biblioteca' */
        filter: 'all',                 /* 'all' | 'alertas' | 'priorizador' | 'insights' | 'autonomos' */
        categoryFilter: null,
        showNewTemplate: false,
        showNewAgent: false,
        active: [
            {
                id: 'p2p-priorizador',
                name: 'Priorizador Operacional',
                desc: 'Agente autônomo para priorização do dia a dia da operação P2P. Analisa filas, SLAs e impacto financeiro para sugerir o que atacar primeiro.',
                category: 'autonomos',
                tags: ['p2p', 'priorizacao'],
                status: 'live',
                lastRun: 'há 12 min',
                actions: 47,
                demoVideo: 'assets/agente-priorizador.mp4',
                prompt: 'Analise as requisições, pedidos e cotações abertas. Priorize as atividades do dia ordenadas por: 1) impacto financeiro (valor envolvido), 2) urgência (SLA), 3) dependências críticas. Gere a lista de ações para Marcos Silveira na manhã.',
            },
            {
                id: 'p2p-aprovador',
                name: 'Aprovador Inteligente',
                desc: 'Aprova POs de baixo risco automaticamente seguindo a matriz de alçada Docol. Encaminha para humanos só quando há divergência de pelo menos 1 critério.',
                category: 'autonomos',
                tags: ['p2p', 'aprovacao'],
                status: 'live',
                lastRun: 'há 23 min',
                actions: 184,
                demoVideo: 'assets/agente-priorizador.mp4',
                prompt: 'Para cada PO criada, avalie: valor, fornecedor histórico, categoria, conformidade com contrato. Aprove se TODOS os critérios estão dentro do esperado. Encaminhe para humano se houver qualquer divergência.',
            },
            {
                id: 'p2p-conciliador',
                name: 'Conciliador 3 Vias',
                desc: 'Cruza PO + NF + entrada física. Identifica e bloqueia divergências antes do pagamento. Reduz risco fiscal e re-trabalho contábil.',
                category: 'autonomos',
                tags: ['p2p', 'fiscal'],
                status: 'live',
                lastRun: 'há 1h',
                actions: 92,
                demoVideo: 'assets/agente-priorizador.mp4',
                prompt: 'A cada nota fiscal recebida, valide: (a) PO autorizada existe? (b) recebimento físico bate? (c) valores conferem? Se sim, libere para pagamento. Se não, bloqueie e crie achado.',
            },
            {
                id: 'p2p-negociador',
                name: 'Agente Negociador',
                desc: 'Conduz cotações multi-fornecedor automaticamente. Solicita propostas, compara e sugere o vencedor com base em histórico e preço-alvo.',
                category: 'autonomos',
                tags: ['p2p', 'cotacao'],
                status: 'live',
                lastRun: 'há 2h',
                actions: 31,
                demoUrl: 'agente-negociador.html',
                demoHtml: 'assets/agente-negociador.html',
                demoVideo: 'assets/agente-priorizador.mp4',
                prompt: 'Para requisições > R$ 50k sem contrato vigente, dispare cotação para top-3 fornecedores da categoria. Aguarde 5 dias úteis. Compare propostas. Sugira vencedor com justificativa econômica.',
            },
            {
                id: 'p2p-contratos',
                name: 'Agente de Contratos',
                desc: 'Monitora contratos vigentes (WK/MK): saldo consumido, prazos de renovação, compras fora de contrato e saving por pedido. Alerta vencimento e saldo crítico automaticamente.',
                category: 'autonomos',
                tags: ['p2p', 'contratos', 'compliance'],
                status: 'live',
                lastRun: 'há 1h',
                actions: 22,
                demoUrl: 'agente-contratos.html',
                demoHtml: 'agente-contratos.html',
                demoVideo: 'assets/agente-priorizador.mp4',
                prompt: 'Para cada contrato ativo, monitore: saldo consumido vs. envelope, prazo de renovação (alertas 90/60/30 dias), compras fora de contrato e saving vs. preço de referência. Dispare alerta ao responsável quando o saldo atingir 80% ou o contrato estiver a vencer.',
            },
            {
                id: 'p2p-monitor',
                name: 'Monitor de Compliance',
                desc: 'Vigia o processo P2P em tempo real procurando desvios: aprovação fora do fluxo, fornecedor sem cadastro, valor acima de alçada delegada.',
                category: 'autonomos',
                tags: ['p2p', 'compliance', 'risco'],
                status: 'live',
                lastRun: 'há 5 min',
                actions: 8,
                demoVideo: 'assets/agente-priorizador.mp4',
                prompt: 'Monitore o stream de eventos do SAP MM. Para cada PO ou pagamento, valide políticas: alçada, dual-control, fornecedor homologado, segregação de função. Levante achado se algum item falhar.',
            },
        ],
        library: [
            {
                category: 'P2P',
                items: [
                    { id: 'lib-rel-p2p',      name: 'Relatório Mensal Executivo P2P',      desc: 'Economias totais, conformidade, fornecedores e capital de giro para a diretoria financeira.', tag: 'insights' },
                    { id: 'lib-cap-giro',     name: 'Análise Semanal de Capital de Giro e Impacto Financeiro', desc: 'Impacto em capital de giro: pagamentos antecipados, descontos perdidos, prazo de pagamento e fluxo de caixa.', tag: 'priorizador' },
                    { id: 'lib-gastos',       name: 'Análise Semanal de Gastos e Concentração', desc: 'Análise de gastos: concentração por fornecedor, categoria, empresa e riscos de dependência.', tag: 'insights' },
                    { id: 'lib-compliance',   name: 'Análise Semanal de Eficiência e Compliance P2P', desc: 'Prazos internos, variantes de processo, compras fora do padrão, pagamentos antecipados e segregação de função.', tag: 'insights' },
                    { id: 'lib-fornec',       name: 'Painel Semanal de Desempenho de Fornecedores', desc: 'Desempenho de fornecedores: pontualidade, qualidade, prazo de entrega, conferência 3 vias e disputas.', tag: 'priorizador' },
                    { id: 'lib-bloqueios',    name: 'Resumo Diário de Compras e Bloqueios', desc: 'Entregas atrasadas, bloqueios de pagamento, maverick buying e volume de POs.', tag: 'insights' },
                    { id: 'lib-atraso',       name: 'Alerta de Entregas Atrasadas', desc: 'Alertar sobre POs com entrega pendente atrasada em risco de ruptura de estoque ou parada de linha.', tag: 'alertas' },
                ],
            },
            {
                category: 'O2C',
                items: [
                    { id: 'lib-o2c-rel',  name: 'Relatório Semanal de Aging de Recebíveis',  desc: 'AR aging, DSO e top clientes em atraso. Visão para a tesouraria.', tag: 'insights' },
                    { id: 'lib-o2c-risco', name: 'Alerta de Risco de Crédito',                desc: 'Cliente com pagamentos em atraso recorrentes ou acima do limite de crédito autorizado.', tag: 'alertas' },
                ],
            },
            {
                category: 'Estoque & WIP',
                items: [
                    { id: 'lib-est-rupt', name: 'Monitor de Ruptura', desc: 'SKUs em risco de ruptura nas próximas 72h baseado em consumo médio e lead time.', tag: 'alertas' },
                    { id: 'lib-est-giro', name: 'Análise de Giro de Estoque', desc: 'Curva ABC, slow movers e capital imobilizado por categoria.', tag: 'insights' },
                ],
            },
        ],
        availableTags: [
            { id: 'all',         label: 'Todas' },
            { id: 'alertas',     label: 'Alertas' },
            { id: 'priorizador', label: 'Priorizador' },
            { id: 'insights',    label: 'Insights' },
            { id: 'autonomos',   label: 'Autônomos' },
        ],
    },
    valueTracker: {
        period: '12m',                 /* '3m' | '6m' | '12m' | 'all' */
        alert: {
            message: 'Plano "Realizar Análise de Fornecedores com Custo de Aquisição" vencido com R$ 518.790 bloqueados',
            value: 518790,
            severity: 'danger',
        },
        kpis: {
            pipelineTotal: { value: 'R$ 50,2M', label: 'PIPELINE TOTAL', meta: { realizado: 'R$ 2,4M realizado', meta: 'Meta: R$ 50,2M' } },
            realizado: { value: 'R$ 2,4M', label: 'REALIZADO', meta: 'R$ 47,8M pendentes · 95% para capturar' },
            conversao: { value: '5%', label: 'TAXA DE CONVERSÃO', meta: '3 de 25 ganhos convertidos', donutPct: 5 },
        },
        pipelineValor: [
            { id: 'identificado',   label: 'IDENTIFICADO',   count: 17, value: 'R$ 7,5M',  color: '#6B7280' },
            { id: 'emRealizacao',   label: 'EM REALIZAÇÃO',  count: 3,  value: 'R$ 747k',  color: '#3B82F6' },
            { id: 'realizado',      label: 'REALIZADO',      count: 3,  value: 'R$ 41,3M', color: '#10B981' },
            { id: 'naoRealizado',   label: 'NÃO REALIZADO',  count: 1,  value: 'R$ 319k',  color: '#9CA3AF' },
            { id: 'contestado',     label: 'CONTESTADO',     count: 1,  value: 'R$ 311k',  color: '#EF4444' },
        ],
        ganhos: [
            { label: 'Consolidação de Compras Spot em Contrato',                                      status: 'realizado', valor: 0.42 },
            { label: 'Volume significativo em movimentação com lead time elevado',                    status: 'realizado', valor: 0.30 },
            { label: 'Saving Real - Custo Evitado',                                                   status: 'realizado', valor: 0.04 },
            { label: 'Volume significativo de pedidos elegíveis para automação de aprovação',         status: 'emAndamento', valor: 0.05 },
            { label: 'Volume elevado de retrabalho identificado em sistema. Custo de retrabalho.',    status: 'emAndamento', valor: 0.06 },
            { label: 'Saving de 5% sobre volume de spend elegível identificado',                      status: 'emAndamento', valor: 0.04 },
        ],
        composicao: [
            { id: 'realizado',  label: 'Realizado',          pct: 82, color: '#10B981' },
            { id: 'bloqueado',  label: 'Bloqueado (vencido)', pct: 4,  color: '#EF4444' },
            { id: 'progresso',  label: 'Em progresso',       pct: 14, color: '#8E76E7' },
        ],
        resumoGanhos: [
            { label: 'Identificado',  count: 17, color: '#9CA3AF' },
            { label: 'Realizado',     count: 3,  color: '#10B981' },
            { label: 'Contestado',    count: 1,  color: '#EF4444' },
            { label: 'Em Realização', count: 3,  color: '#3B82F6' },
            { label: 'Não Realizado', count: 1,  color: '#6B7280' },
        ],
        resumoPlanos: [
            { label: 'Backlog',      count: 11, color: '#9CA3AF' },
            { label: 'Planejado',    count: 2,  color: '#3B82F6' },
            { label: 'Concluído',    count: 3,  color: '#10B981' },
            { label: 'Em Andamento', count: 1,  color: '#F59E0B' },
        ],
        planos: [
            { id: 'p1',  title: 'Elevar DPO de MRO para 90 dias',                              priority: 'alta',  dueDate: '15 ago 2026', owner: 'Responsável de Compras', column: 'backlog' },
            { id: 'p2',  title: 'Reduzir tempo de processamento de pedidos',                    priority: 'media', dueDate: '30 mai 2025', owner: 'Rafael',                  column: 'backlog' },
            { id: 'p3',  title: 'Realizar Atividade de Definição de Padrões de Conformidade',  priority: 'media', dueDate: '14 mai 2026', owner: 'Responsável 2',           column: 'backlog' },
            { id: 'p4',  title: 'Revisão de Padrão de Integração de Dados',                    priority: 'alta',  dueDate: '7 mai 2026',  owner: 'Responsável 3',           column: 'backlog' },
            { id: 'p5',  title: 'Validação e Refinamento de Painel 5.1',                       priority: 'media', dueDate: '30 abr 2026', owner: 'Responsável 1',           column: 'backlog' },
            { id: 'p6',  title: 'Realizar Análise de Fornecedores com Custo de Aquisição',     priority: 'alta',  dueDate: '20 abr 2026', owner: 'Responsável 1',           column: 'backlog' },
            { id: 'p7',  title: 'Implementar Política de DPO Estendido',                       priority: 'media', dueDate: '12 abr 2026', owner: 'Responsável 4',           column: 'backlog' },
            { id: 'p8',  title: 'Mapear oportunidades de consolidação Spot',                   priority: 'alta',  dueDate: '5 mai 2026',  owner: 'Rafael',                  column: 'backlog' },
            { id: 'p9',  title: 'Padronizar SLA de aprovação por categoria',                   priority: 'media', dueDate: '22 mai 2026', owner: 'Responsável 2',           column: 'backlog' },
            { id: 'p10', title: 'Auditoria de fluxo de pagamento crítico',                     priority: 'alta',  dueDate: '28 mai 2026', owner: 'Responsável 3',           column: 'backlog' },
            { id: 'p11', title: 'Treinamento equipe Coupa · módulo aprovação',                 priority: 'baixa', dueDate: '10 jun 2026', owner: 'Responsável 1',           column: 'backlog' },
            { id: 'p12', title: 'Validação de Faturamento e Receita',                          priority: 'alta',  dueDate: '9 abr 2026',  owner: 'Responsável 3',           column: 'planejado' },
            { id: 'p13', title: 'Maximizar PMP em Indiretos',                                  priority: 'alta',  dueDate: '26 mar 2026', owner: 'Responsável 4',           column: 'planejado' },
            { id: 'p14', title: 'Análise comparativa de preços por região',                    priority: 'alta',  dueDate: '15 jun 2026', owner: 'Rafael',                  column: 'emAndamento' },
            { id: 'p15', title: 'Migração Wieland para contrato bilateral',                    priority: 'alta',  dueDate: '5 mar 2026',  owner: 'Responsável 3',           column: 'concluido' },
            { id: 'p16', title: 'Catálogo de fornecedores secundários · latão',                priority: 'media', dueDate: '12 fev 2026', owner: 'Responsável 1',           column: 'concluido' },
            { id: 'p17', title: 'Workshop de boas práticas P2P · diretoria',                   priority: 'baixa', dueDate: '20 jan 2026', owner: 'Rafael',                  column: 'concluido' },
        ],
        quickActions: [
            { id: 'criar-plano',  label: 'Criar Plano de Ação',    icon: 'edit-3',  variant: 'primary' },
            { id: 'registrar',    label: 'Registrar Ganho',         icon: 'trending-up', variant: 'warn' },
            { id: 'potencial',    label: 'Quais ganhos têm maior potencial de conversão rápida?',  icon: 'sparkles' },
            { id: 'comparar',     label: 'Comparar performance vs. trimestre anterior',            icon: 'bar-chart-3' },
            { id: 'oportunidades',label: 'Identificar novas oportunidades no processo',            icon: 'search' },
        ],
        assistantMessages: [],
    },
};

/* ==================================================================
   STANDARD P2P ANSWER BANK
   Respostas mínimas padronizadas, obrigatórias para TODO ambiente P2P.
   Cada item vira uma pergunta na categoria indicada do chat, com um
   artefato HTML completo. O texto e os metadados são editáveis na
   "Biblioteca de Respostas" (página de gestão). Os números dentro do
   HTML são editáveis por cliente direto na tela (edit mode).
   `replaces`: rótulos antigos que esta resposta substitui no discovery
   de cada demo, para não duplicar perguntas.
   ================================================================== */
const STANDARD_P2P_DEFAULT = [
    {
        key: 'comprar-hoje',
        category: 'operacional',
        label: 'O que eu preciso comprar hoje?',
        summary: 'O Nous consolida as requisições abertas, cruza com SLA, criticidade e impacto financeiro, e devolve a fila do dia já priorizada. Em vez de abrir várias telas do ERP, o comprador recebe o que atacar primeiro, com valor envolvido e prazo. O artefato abaixo traz a lista completa do dia, filtrável por categoria, criticidade e responsável.',
        html: 'assets/ans-comprar-hoje.html',
        title: 'O que comprar hoje · fila priorizada',
        meta: ['Tempo real', 'Priorizado por impacto e SLA', 'Fonte: ERP'],
        height: 780,
        replaces: ['preciso comprar hoje', 'Requisição: o que eu preciso comprar', 'Requisição: O que eu preciso comprar'],
    },
    {
        key: 'divergencias',
        category: 'operacional',
        label: 'Quais POs estão com divergência de quantidade ou preço?',
        summary: 'O Nous cruza Pedido, Recebimento e Nota Fiscal (3-Way Match) e separa as divergências por tipo: quantidade acima da tolerância, preço fora do contrato e sequência invertida. Cada item já vem com a etapa, o responsável pela próxima ação e a correção proposta, antes de liberar o pagamento. O artefato abaixo detalha cada PO divergente com a evidência.',
        html: 'assets/ans-divergencias.html',
        title: 'POs com divergência · 3-Way Match',
        meta: ['PO × Recebimento × NF', 'Bloqueio antes do pagamento', 'Trilha auditável'],
        height: 780,
        replaces: ['POs estão com divergência', 'quais POs estão com divergência'],
    },
    {
        key: 'slas-aprovacao',
        category: 'gestao',
        label: 'Quais SLAs de aprovação estão estourados e quem é o gargalo?',
        summary: 'O Nous mede o tempo real de cada etapa de aprovação contra o SLA definido e ranqueia os aprovadores que mais seguram o fluxo. As aprovações estouradas aparecem com o valor parado e o custo financeiro do atraso, para a conversa de governança que hoje ninguém tem dado estruturado para fazer. O artefato abaixo traz o ranking e cada caso estourado.',
        html: 'assets/ans-slas-aprovacao.html',
        title: 'SLA de aprovação · estourados',
        meta: ['Tempo real vs SLA', 'Ranking por aprovador', 'Custo do atraso'],
        height: 780,
        replaces: ['SLA de aprovação', 'aprovadores são gargalo', 'Padronizar SLA de aprovação'],
    },
    {
        key: 'gargalos-leadtime',
        category: 'gestao',
        label: 'Onde estão os gargalos e como está o lead time do P2P?',
        summary: 'A partir do process mining sobre o ERP, o Nous mostra o lead time médio de ponta a ponta (requisição a pagamento) e onde o tempo se perde em cada etapa. Os gargalos aparecem ranqueados por tempo de fila e por custo, com a comparação entre unidades quando existe. O artefato abaixo traz o funil de lead time e o detalhamento por etapa.',
        html: 'assets/ans-gargalos-leadtime.html',
        title: 'Gargalos e lead time do P2P',
        meta: ['Process mining', 'Lead time ponta a ponta', 'Por etapa e unidade'],
        height: 780,
        replaces: ['gargalos do meu processo', 'gargalos do meu processo P2P', 'Variação de lead-time'],
    },
    {
        key: 'happy-path',
        category: 'gestao',
        label: 'Qual o happy path e quanto do processo foge do padrão?',
        summary: 'O Nous reconstrói o caminho ideal do processo (happy path) e mede quanto do volume real segue esse fluxo versus quanto desvia, por variante. Cada desvio é quantificado em frequência e custo, mostrando onde a padronização rende mais. O artefato abaixo traz o happy path, as variantes de desvio e o impacto de cada uma.',
        html: 'assets/ans-happy-path.html',
        title: 'Happy path e desvios do padrão',
        meta: ['Process mining', 'Conformidade de fluxo', 'Variantes quantificadas'],
        height: 780,
        replaces: ['happy path', 'desvios do padrão', 'aprovados fora do fluxo padrão'],
    },
    {
        key: 'curva-abc',
        category: 'gestao',
        label: 'Como a Curva ABC fica viva e multidimensional, sem trabalho manual?',
        summary: 'A Inteligência de Performance de Fornecedor reconstrói a Curva ABC automaticamente em três dimensões (valor, eficiência operacional e risco) e a mantém viva, sincronizada com o ERP, sem ninguém reabrir Excel. Fornecedores que geram retrabalho sobem na curva mesmo sendo pequenos em valor; fonte única e contratos vencendo aparecem em destaque. O artefato abaixo é a Curva ABC viva, com tabela de itens, filtros e gráficos de concentração.',
        html: 'assets/curva-abc.html',
        title: 'Curva ABC viva · multidimensional',
        meta: ['Atualizada em tempo real', 'Valor · eficiência · risco', 'Fonte: ERP'],
        height: 780,
        replaces: ['Curva ABC'],
    },

    /* ---- ESTRATÉGICO (texto, sem asset — complementar por cliente) ---- */
    {
        key: 'tendencias-spend',
        category: 'estrategico',
        label: 'Quais as tendências de spend por categoria para os próximos meses?',
        summary: 'O Nous analisa o spend dos últimos 12 meses por categoria, identifica a concentração (padrão de Pareto típico de compras industriais), aponta quais categorias estão em crescimento ou queda vs. a média dos meses anteriores e projeta o próximo trimestre. Cada desvio relevante vem com a leitura de causa provável (ex.: pico de manutenção corretiva não planejada) e a ação prioritária recomendada. [Complementar com os números do cliente: spend total, nº de categorias, ticket médio e os destaques de crescimento/queda.]',
        html: '',
        title: 'Tendências de spend por categoria',
        meta: ['Últimos 12 meses', 'Concentração + projeção'],
        height: 760,
        replaces: ['tendências da operação para os próximos meses', 'tendências de spend'],
    },
    {
        key: 'roi-supplychain',
        category: 'estrategico',
        label: 'Qual o ROI / RoAI do investimento em supply chain digital?',
        summary: 'O RoAI mede, mês a mês, o valor desbloqueado pelas automações em hard saving, eficiência, capital de giro e compliance, com fórmula visível por alavanca (sem caixa-preta) e comparando prometido vs. realizado. As principais fontes costumam ser redução de glosa de NF, aceleração/normalização de pagamentos, automação de negociação e consolidação de cauda longa. [Complementar com o valor desbloqueado, payback e múltiplo do cliente, calibrados no template de RoAI.]',
        html: '',
        title: 'RoAI · programa de supply chain digital',
        meta: ['Acumulado 12 meses', 'Fórmula por alavanca'],
        height: 760,
        replaces: ['ROI do nosso investimento', 'ROI do investimento em supply chain', 'ROI projetado'],
    },
    {
        key: 'meta-leadtime-pe',
        category: 'estrategico',
        label: 'Estamos batendo a meta de lead-time P2P estabelecida no PE?',
        summary: 'O Nous compara o lead time P2P realizado (requisição a pagamento) contra a meta do Planejamento Estratégico, por unidade e por categoria, e mostra a tendência mês a mês. Onde a meta não está sendo batida, aponta a etapa responsável pelo desvio (fila de aprovação, cotação, recebimento ou pagamento) e o tamanho do gap. [Complementar com a meta do PE e o lead time atual do cliente.]',
        html: '',
        title: 'Lead-time P2P vs. meta do PE',
        meta: ['Realizado vs. meta', 'Por unidade e categoria'],
        height: 760,
        replaces: ['batendo a meta de lead-time', 'meta de lead-time P2P'],
    },
    {
        key: 'risco-ruptura',
        category: 'estrategico',
        label: 'Quais fornecedores estratégicos têm risco de ruptura?',
        summary: 'A Curva ABC viva cruza valor, eficiência e risco para destacar os fornecedores classe A com fonte única e sem contrato vigente, o maior risco de ruptura. O monitor sugere homologar uma segunda fonte antes de picos de demanda e sinaliza contratos próximos do vencimento. [Complementar com os fornecedores críticos e janelas de risco do cliente.]',
        html: '',
        title: 'Concentração de risco · fornecedores classe A',
        meta: ['Valor + eficiência + risco', 'Fonte única'],
        height: 760,
        replaces: ['risco de ruptura', 'fornecedores estratégicos têm risco', 'concentração de risco'],
    },
    {
        key: 'spend-nao-homologado',
        category: 'estrategico',
        label: 'Quanto de spend está em fornecedores não-homologados, por região e categoria?',
        summary: 'O Agente de Qualificação detecta fornecedores não-homologados no momento da criação do cadastro, e não meses depois na auditoria. O painel agrupa o spend fora de homologação por região e por categoria, com o comprador responsável de cada exceção. [Complementar com a região e as categorias críticas do cliente.]',
        html: '',
        title: 'Spend fora de homologação',
        meta: ['Por região e categoria', 'Detecção no cadastro'],
        height: 760,
        replaces: ['fornecedores não-homologados', 'spend está em fornecedores não-homologados'],
    },

    /* ---- GESTÃO (texto, sem asset) ---- */
    {
        key: 'performance-fornecedores',
        category: 'gestao',
        label: 'Como foi a performance dos fornecedores no último trimestre?',
        summary: 'O Nous ranqueia os fornecedores por OTIF (on-time in-full) e lead-time médio ponderado por volume, separando os melhores dos maiores ofensores (atrasos, lotes recusados, retrabalho). Cada ofensor vem com o impacto operacional e a recomendação (plano de melhoria, segunda fonte ou renegociação). [Complementar com OTIF médio, top fornecedor e ofensores do cliente.]',
        html: '',
        title: 'Performance de fornecedores · trimestre',
        meta: ['OTIF + lead-time', 'Top e ofensores'],
        height: 760,
        replaces: ['Performance dos fornecedores', 'performance dos fornecedores no último trimestre'],
    },
    {
        key: 'splitting-alcada',
        category: 'gestao',
        label: 'Quantas compras estão sendo fracionadas (splitting) para furar alçada?',
        summary: 'Splitting é fracionar uma compra grande em vários POs menores para ficar abaixo da alçada, uma bandeira vermelha em ambiente SOX. O agente de Compliance detecta o padrão (ex.: três POs para o mesmo fornecedor no mesmo mês que somados passariam da alçada) antes da emissão, com Trilha Auditável pronta para a auditoria interna. [Complementar com os casos e valores do cliente.]',
        html: '',
        title: 'Detecção de splitting de alçada',
        meta: ['Tempo real', 'Trilha auditável'],
        height: 760,
        replaces: ['fracionadas (splitting)', 'fracionadas (split orders)', 'furar alçada'],
    },
    {
        key: '3way-match',
        category: 'gestao',
        label: 'Quantas NFs quebraram o 3-Way Match e por quê?',
        summary: 'O 3-Way Match cruza Pedido + Recebimento + Nota Fiscal: bate, libera; não bate, trava. O Nous entrega o item já investigado, com a divergência exata (preço, quantidade, CFOP ou alíquota), responsável pela próxima ação e correção proposta. A referência best-in-class é acima de 98% de conformidade (PwC); a maioria das operações começa entre 80% e 92%, e esse gap é a oportunidade. [Complementar com a taxa de conformidade atual do cliente.]',
        html: '',
        title: 'Three-Way Match · quebras e conformidade',
        meta: ['PO × Recebimento × NF', 'Best-in-class 98%+'],
        height: 760,
        replaces: ['quebraram o 3-Way Match', 'chegaram antes do pedido', 'NFs chegaram antes'],
    },
    {
        key: 'spot-vs-contrato',
        category: 'gestao',
        label: 'Quantas compras spot rodaram para categorias que já têm contrato master ativo?',
        summary: 'Maverick buying entre áreas/regiões é clássico: comprar avulso enquanto existe contrato master não acionado, pagando de 5% a 15% mais caro. O Agente de Conformidade Contratual cruza cada cotação/PO contra o contrato master ativo e sinaliza no momento da cotação, antes da emissão. A Inteligência de Fornecedor ainda aponta oportunidades de consolidação. [Complementar com o volume spot e o sobrepreço do cliente.]',
        html: '',
        title: 'Spot vs. contrato master',
        meta: ['Sinalização proativa', 'Sobrepreço 5-15%'],
        height: 760,
        replaces: ['compras spot rodaram', 'contrato master ativo', 'spot para categorias que têm contrato'],
    },
    {
        key: 'performance-compradores',
        category: 'gestao',
        label: 'Compare a performance dos compradores: volume, ciclo médio e taxa de exceção',
        summary: 'O painel compara cada comprador por volume processado, ciclo médio SC→PC e taxa de exceção (divergências, retrabalho). A leitura revela onde o comprador sênior gasta hora-homem com cauda longa que um agente poderia rodar, liberando tempo para negociação estratégica de classe A. [Complementar com o tamanho do time e a carga operacional do cliente.]',
        html: '',
        title: 'Performance dos compradores',
        meta: ['Volume · ciclo · exceção', 'Carga operacional vs. estratégica'],
        height: 760,
        replaces: ['performance dos compradores', 'compare a performance dos compradores'],
    },

    /* ---- OPERACIONAL (texto, sem asset) ---- */
    {
        key: 'requisicoes-duplicadas',
        category: 'operacional',
        label: 'Tenho requisições duplicadas abertas hoje?',
        summary: 'O Nous identifica pares de requisições potencialmente duplicadas (mesmo CNPJ, valor dentro de ±5% e janela curta) e bloqueia para revisão antes da aprovação, evitando pagamento em dobro. Cada par vem com os fornecedores envolvidos e o valor sob risco. [Complementar com o nº de pares e o valor do cliente.]',
        html: '',
        title: 'Detecção de duplicidade',
        meta: ['Últimos 7 dias', 'Revisão antes de aprovar'],
        height: 760,
        replaces: ['requisições duplicadas', 'requisições duplicadas abertas'],
    },
    {
        key: 'pos-sem-confirmacao',
        category: 'operacional',
        label: 'Quais POs estão sem confirmação do fornecedor com entrega vencendo esta semana?',
        summary: 'O Nous lista os POs sem confirmação do fornecedor com entrega prevista para a semana e separa os críticos (risco de parada de operação). O Agente Diligenciador já dispara a cobrança automática conforme o prazo do contrato, registra o histórico e escala os casos críticos. [Complementar com o nº de POs e os itens críticos do cliente.]',
        html: '',
        title: 'POs sem confirmação · entrega na semana',
        meta: ['Risco de ruptura', 'Diligenciamento ativo'],
        height: 760,
        replaces: ['POs estão sem confirmação', 'sem confirmação do fornecedor', 'entregas estão pendentes'],
    },
    {
        key: 'recorrentes-contrato',
        category: 'operacional',
        label: 'Quais itens recorrentes deveriam virar contrato agora?',
        summary: 'O Agente Negociador identifica os SKUs que aparecem 3+ vezes em 60 dias sem contrato, dispara cotação automática para 3+ fornecedores, consolida o volume e gera um contrato anual proposto para aprovação em 1 clique. O saving médio em cauda longa fica entre 8% e 15% sobre o preço pulverizado. [Complementar com os itens recorrentes e o saving estimado do cliente.]',
        html: '',
        title: 'Recorrentes sem contrato · Auto-RFQ',
        meta: ['Auto-RFQ pronto', 'Saving 8-15%'],
        height: 760,
        replaces: ['itens recorrentes', 'deveriam virar contrato', 'recorrentes de Indiretos'],
    },
    {
        key: 'cotacoes-paradas',
        category: 'operacional',
        label: 'Quais cotações estão abertas há mais de 5 dias úteis sem retorno?',
        summary: 'O Nous lista as cotações (RFQs) abertas além do SLA de retorno, com o fornecedor, o valor estimado e os dias em aberto. O Agente Diligenciador cobra automaticamente os fornecedores e escala as que travam a operação. [Complementar com o nº de cotações e os casos do cliente.]',
        html: '',
        title: 'Cotações abertas sem retorno',
        meta: ['Acima do SLA', 'Cobrança automática'],
        height: 760,
        replaces: ['cotações abertas há mais de 5 dias', 'cotações abertas há mais de 5 dias úteis'],
    },
    {
        key: 'faturas-paradas',
        category: 'operacional',
        label: 'Pagamento: quais faturas estão paradas?',
        summary: 'O Nous separa as faturas paradas em duas frentes: bloqueadas pelo 3-Way Match (divergência legítima a tratar) e apenas aguardando liberação de alçada que já poderia ser automática. Também aponta pagamentos antecipados por bug de processo, que custam capital de giro. [Complementar com o valor total parado e a quebra por motivo do cliente.]',
        html: '',
        title: 'Faturas paradas',
        meta: ['Bloqueio vs. alçada', 'Capital de giro'],
        height: 760,
        replaces: ['faturas estão paradas', 'Pagamento: quais faturas', 'Quais faturas estão paradas'],
    },
    {
        key: 'entregas-pendentes',
        category: 'operacional',
        label: 'Diligenciamento: quais entregas estão pendentes e em risco?',
        summary: 'O Nous mostra as entregas com prazo em risco nas próximas horas/dias, priorizando o que pode parar a operação. O Agente Diligenciador cobra automaticamente conforme o prazo do contrato, registra o histórico e escala quando há risco real. [Complementar com os itens críticos e a janela de risco do cliente.]',
        html: '',
        title: 'Entregas pendentes · diligenciamento',
        meta: ['Prazo em risco', 'Cobrança + escalonamento'],
        height: 760,
        replaces: ['entregas estão pendentes', 'entregas de manutenção estão pendentes', 'entregas pendentes e em risco'],
    },
    {
        key: 'historico-pedido',
        category: 'operacional',
        label: 'Analise o histórico de um pedido e a dispersão de preço',
        summary: 'O Nous reconstrói a timeline de eventos do pedido (criação, envio, recebimento, aprovações), traz o valor unitário e total, e calcula a dispersão de preço versus o histórico do mesmo item/fornecedor. Quando a amostra é insuficiente, o Nous diz isso explicitamente em vez de inventar conclusão estatística, e recomenda a auditoria do caso. [Complementar com o nº do pedido e os valores do cliente.]',
        html: '',
        title: 'Histórico do pedido · dispersão de preço',
        meta: ['Timeline de eventos', 'Dispersão vs. histórico'],
        height: 760,
        replaces: ['histórico do pedido', 'histórico do item do pedido', 'dispersão de preço', 'analise o histórico'],
    },
];

/* Read the bank (with any edits the AE saved). Falls back to default. */
function getStandardBank() {
    try {
        const raw = localStorage.getItem('studio_standard_p2p_v1');
        if (raw) {
            const parsed = JSON.parse(raw);
            if (Array.isArray(parsed) && parsed.length) return parsed;
        }
    } catch (e) { /* ignore */ }
    return STANDARD_P2P_DEFAULT.map(s => ({ ...s }));
}
function saveStandardBank(bank) {
    try { localStorage.setItem('studio_standard_p2p_v1', JSON.stringify(bank)); } catch (e) { /* ignore */ }
}
function resetStandardBank() {
    try { localStorage.removeItem('studio_standard_p2p_v1'); } catch (e) { /* ignore */ }
}

/* ---- Uploaded HTML assets (IndexedDB) -----------------------------
   Static host has no backend, so HTML answers attached through the
   Studio are stored in the browser's IndexedDB and referenced with an
   `uploaded:<key>` src. They persist across reloads and feed the chat
   on this machine; for the live shared demo the same file should also
   be dropped into assets/ on the server (download button provided). */
const IDB_NAME = 'upflux_studio';
const IDB_STORE = 'html_assets';
function idbOpen() {
    return new Promise((res, rej) => {
        const req = indexedDB.open(IDB_NAME, 1);
        req.onupgradeneeded = () => { req.result.createObjectStore(IDB_STORE); };
        req.onsuccess = () => res(req.result);
        req.onerror = () => rej(req.error);
    });
}
async function idbPutHtml(key, text) {
    const db = await idbOpen();
    return new Promise((res, rej) => {
        const tx = db.transaction(IDB_STORE, 'readwrite');
        tx.objectStore(IDB_STORE).put(text, key);
        tx.oncomplete = () => res(true);
        tx.onerror = () => rej(tx.error);
    });
}
async function idbGetHtml(key) {
    const db = await idbOpen();
    return new Promise((res, rej) => {
        const tx = db.transaction(IDB_STORE, 'readonly');
        const r = tx.objectStore(IDB_STORE).get(key);
        r.onsuccess = () => res(r.result || null);
        r.onerror = () => rej(r.error);
    });
}
async function idbDeleteHtml(key) {
    const db = await idbOpen();
    return new Promise((res, rej) => {
        const tx = db.transaction(IDB_STORE, 'readwrite');
        tx.objectStore(IDB_STORE).delete(key);
        tx.oncomplete = () => res(true);
        tx.onerror = () => rej(tx.error);
    });
}
/* Blobs (videos) reuse the same store — IndexedDB stores Blobs natively. */
async function idbPutBlob(key, blob) { return idbPutHtml(key, blob); }
async function idbGetBlob(key) { return idbGetHtml(key); }

/* ---- Agent media bank (interactive demo HTML + video, GLOBAL) ------
   The agent list lives per-demo, but the AE manages each agent's
   interactive-demo HTML and its single video once, for the whole
   Studio. Overrides are applied by agent id at render time. */
const AGENT_MEDIA_DEFAULT = (DEFAULT_STATE.agents.active || []).map(a => ({
    id: a.id,
    name: a.name,
    demoHtml: a.demoHtml || a.demoUrl || '',
    demoVideo: a.demoVideo || '',
    demoHtmlName: '',
    demoVideoName: '',
}));
function getAgentMediaBank() {
    let saved = {};
    try { saved = JSON.parse(localStorage.getItem('studio_agent_media_v1') || '{}') || {}; } catch (e) { /* ignore */ }
    return AGENT_MEDIA_DEFAULT.map(d => ({ ...d, ...(saved[d.id] || {}) }));
}
function saveAgentMediaBank(bank) {
    const map = {};
    (bank || []).forEach(b => {
        map[b.id] = {
            demoHtml: b.demoHtml || '',
            demoVideo: b.demoVideo || '',
            demoHtmlName: b.demoHtmlName || '',
            demoVideoName: b.demoVideoName || '',
        };
    });
    try { localStorage.setItem('studio_agent_media_v1', JSON.stringify(map)); } catch (e) { /* ignore */ }
}
function resetAgentMediaBank() {
    try { localStorage.removeItem('studio_agent_media_v1'); } catch (e) { /* ignore */ }
}
/* Apply the global media bank onto a demo's agent list (by id). */
function applyAgentMedia(agents) {
    const byId = {};
    getAgentMediaBank().forEach(b => { byId[b.id] = b; });
    return (agents || []).map(a => {
        const m = byId[a.id];
        if (!m) return a;
        return { ...a, demoHtml: m.demoHtml || '', demoVideo: m.demoVideo || '', demoUrl: undefined };
    });
}

/* ---- Hotspot bank (GLOBAL standard, per main item) ----------------
   A baseline set of hotspots that explains each main item of the
   environment (what it is / what it's for). Registered for every P2P
   demo; each environment can then personalize per screen. */
const HOTSPOT_STANDARD_DEFAULT = [
    { stdKey: 'chat',    screen: 'chat',    x: 0.50, y: 0.30, kind: 'tooltip', title: 'Chat · pergunte em linguagem natural',
      text: 'É a porta de entrada do Nous. O time pergunta em português, como numa conversa, e recebe a resposta já analisada, sem abrir telas do ERP nem montar relatório. Serve para tirar qualquer dúvida sobre o processo na hora.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'mining',  screen: 'mining',  x: 0.50, y: 0.28, kind: 'tooltip', title: 'Process Mining · o processo real',
      text: 'Reconstrói o processo a partir dos eventos do ERP e mostra todas as variantes, gargalos e o tempo de cada etapa. Serve para enxergar como o processo acontece de verdade, e não como deveria ser no papel.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'agents',  screen: 'agents',  x: 0.50, y: 0.26, kind: 'tooltip', title: 'Agentes autônomos',
      text: 'Agentes de IA que executam tarefas do P2P sozinhos (priorizar, aprovar, conciliar, negociar, vigiar compliance) e só chamam o humano quando passa da alçada. Serve para tirar o trabalho repetitivo das costas do time.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'roai',    screen: 'roai',    x: 0.50, y: 0.24, kind: 'tooltip', title: 'RoAI · Value Tracker',
      text: 'Mostra, mês a mês, quanto a IA gerou em economia, eficiência, capital de giro e compliance, com a fórmula visível de cada alavanca. Serve para provar o retorno em R$, defensável diante do CFO e da auditoria.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'rotinas', screen: 'rotinas', x: 0.50, y: 0.28, kind: 'tooltip', title: 'Rotinas agendadas',
      text: 'Análises e agentes que rodam sozinhos num horário definido (toda manhã, fim de mês, etc.). Serve para garantir que o acompanhamento acontece sem ninguém precisar lembrar de rodar.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'achados', screen: 'achados', x: 0.50, y: 0.26, kind: 'tooltip', title: 'Achados',
      text: 'Onde ficam salvas as análises e descobertas relevantes, prontas para revisitar e compartilhar. Serve como memória da operação: o que já foi investigado e o que merece ação.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'brain',   screen: 'brain',   x: 0.50, y: 0.26, kind: 'tooltip', title: 'Agentes de Conhecimento',
      text: 'A camada que conecta e dá contexto às fontes de dados (ERP, notas fiscais, contratos, catálogos). Serve para garantir que toda resposta do Nous é rastreável até a fonte.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { stdKey: 'consumo', screen: 'consumo', x: 0.50, y: 0.30, kind: 'tooltip', title: 'Consumo & Cotas',
      text: 'Mostra o modelo de consumo: você paga por análise executada, não por assento. Serve para acompanhar o uso e prever custo, com transparência total.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
];
function getHotspotBank() {
    try {
        const raw = localStorage.getItem('studio_hotspots_v1');
        if (raw) {
            const parsed = JSON.parse(raw);
            if (Array.isArray(parsed) && parsed.length) return parsed;
        }
    } catch (e) { /* ignore */ }
    return HOTSPOT_STANDARD_DEFAULT.map(h => ({ ...h }));
}
function saveHotspotBank(bank) {
    try { localStorage.setItem('studio_hotspots_v1', JSON.stringify(bank)); } catch (e) { /* ignore */ }
}
function resetHotspotBank() {
    try { localStorage.removeItem('studio_hotspots_v1'); } catch (e) { /* ignore */ }
}
/* Seed the standard hotspots into a demo's set: the demo's own hotspots
   win per screen (personalization); standard ones fill screens the demo
   hasn't covered. Returns a fresh array (safe to store in state). */
function applyHotspots(demoHotspots) {
    const demo = (demoHotspots || []).filter(h => !h._std); /* drop previously-seeded standards */
    const demoScreens = new Set(demo.map(h => h.screen));
    const inherited = getHotspotBank()
        .filter(h => !demoScreens.has(h.screen))
        .map(h => ({ ...h, id: 'std-' + h.stdKey, _std: true }));
    return [...demo, ...inherited];
}

/* Convert a bank entry into a discovery question. Entries with an `html`
   path render the full HTML report in an iframe; entries without one are
   text-only answers (the AE complements them with numbers per client). */
function standardToQuestion(s) {
    const answer = { text: s.summary };
    if (s.html && String(s.html).trim()) {
        answer.artifact = {
            type: 'iframe',
            src: s.html,
            title: s.title || s.label,
            meta: s.meta || [],
            height: s.height || 760,
        };
    } else if (Array.isArray(s.kpis) && s.kpis.length) {
        answer.artifact = {
            type: 'kpi-grid',
            title: s.title || s.label,
            meta: s.meta || [],
            kpis: s.kpis,
        };
    }
    return {
        id: 'STD-' + s.key,
        label: s.label,
        standardKey: s.key,
        answer,
    };
}

/* Merge the standard bank into a demo's discovery. Standard questions
   come first in each category; the demo's own questions whose label
   matches a `replaces` entry are dropped to avoid duplicates. */
function mergeStandardBank(discovery, bank) {
    const src = discovery || {};
    const b = bank || getStandardBank();
    const cats = ['estrategico', 'gestao', 'operacional'];
    const out = {};
    cats.forEach(cat => {
        const std = b.filter(s => s.category === cat).map(standardToQuestion);
        const replaces = b.filter(s => s.category === cat).flatMap(s => s.replaces || []).map(r => r.toLowerCase());
        const existing = (src[cat] || []).filter(q => {
            if (q.standardKey) return false; /* drop any previously-merged standard */
            const L = (q.label || '').toLowerCase();
            return !replaces.some(r => L.includes(r));
        });
        out[cat] = [...std, ...existing];
    });
    Object.keys(src).forEach(k => { if (!cats.includes(k)) out[k] = src[k]; });
    return out;
}

window.STUDIO_DATA = {
    DOCOL, BRAND_SWATCHES, AE, FR_MAP, SUPPLIERS, SKU_CATEGORIES,
    PERSONAS, DYNAMIC_VARS, HOTSPOT_KINDS, DEFAULT_HOTSPOTS, DEFAULT_STATE,
    STUDIO_VERSION, STUDIO_BUILD_DATE,
    STANDARD_P2P_DEFAULT, getStandardBank, saveStandardBank, resetStandardBank,
    standardToQuestion, mergeStandardBank,
    idbPutHtml, idbGetHtml, idbDeleteHtml, idbPutBlob, idbGetBlob,
    AGENT_MEDIA_DEFAULT, getAgentMediaBank, saveAgentMediaBank, resetAgentMediaBank, applyAgentMedia,
    HOTSPOT_STANDARD_DEFAULT, getHotspotBank, saveHotspotBank, resetHotspotBank, applyHotspots,
};

/* ==================================================================
   LIBRARY SEED · 4 starter demos shown on Studio home page.
   The current Docol is the "master" with everything filled.
   The others are template stubs the AE clones and customizes.
   ================================================================== */
function buildTemplateState(overrides) {
    const base = JSON.parse(JSON.stringify(DEFAULT_STATE));
    return {
        ...base,
        ...overrides,
        cosmetic: { ...base.cosmetic, ...(overrides.cosmetic || {}) },
        persona:  { ...base.persona,  ...(overrides.persona  || {}) },
        vars:     { ...base.vars,     ...(overrides.vars     || {}) },
        discovery: overrides.discovery || base.discovery,
        hotspots: overrides.hotspots || base.hotspots,
        achados:  overrides.achados ? { ...base.achados, ...overrides.achados } : base.achados,
    };
}

/* ==================================================================
   URBANO ALIMENTOS · full demo (beneficiamento de arroz, P2P)
   Built from discovery: 6 dores, 4 alavancas RoAI, peer Romagnoli.
   ================================================================== */
const URBANO_DISCOVERY = {
    estrategico: [
        {
            id: 'E1',
            label: 'Quanto deixamos de capturar por ano em cauda longa sem contrato?',
            answer: {
                text: 'A maior alavanca é a **cauda longa sem contrato anual**: itens recorrentes (sacaria, sanitizantes, MRO) comprados em pedidos spot semana após semana, sem barganha de volume. O Nous identifica **47 SKUs recorrentes** que aparecem 3+ vezes em 60 dias sem contrato vigente.\n\nConsolidando esses itens em contratos anuais via Auto-RFQ, o saving projetado é de **R$ 2,49 milhões/ano**, a maior das 4 alavancas do business case. Some o combate a split orders e maverick buying (R$ 399k) e a redução de risco fiscal (R$ 1,86M) e o RoAI Cenário Base chega a **R$ 5,54M/ano (7,7×, payback 47 dias)**.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'RoAI · Cenário Base',
                    meta: ['Calculadora UpFlux v4.2', 'Cenário Base', 'Payback {{roi_payback}}'],
                    kpis: [
                        { label: 'CAUDA LONGA · SAVING/ANO', value: 'R$ 2,49M', sub: '47 SKUs recorrentes sem contrato', highlight: true },
                        { label: 'ROAI TOTAL/ANO',           value: 'R$ {{roi_valor}}', sub: 'múltiplo {{roi_multiplo}}' },
                        { label: 'PAYBACK',                  value: '{{roi_payback}}', sub: 'investimento {{investimento_anual}}/ano' },
                        { label: 'RISCO MITIGADO/ANO',       value: 'R$ {{roi_risco_anual}}', sub: '3-Way Match + OTIF + diligenciamento' },
                    ],
                },
            },
        },
        {
            id: 'E2',
            label: 'Qual o ROI projetado e em quanto tempo recuperamos o investimento?',
            answer: {
                text: 'O business case tem 3 cenários, todos validados pela calculadora UpFlux v4.2 com os dados declarados no discovery:\n\n• **Conservador:** R$ 3,68M/ano · 5,1× · payback 71 dias\n• **Base** (recomendado): **R$ 5,54M/ano · 7,7× · payback 47 dias**\n• **Alvo:** R$ 7,96M/ano · 11,1× · payback 33 dias\n\nContra um investimento de **{{investimento_mensal}}/mês** (R$ 311.808/ano + setup único de R$ 80k). No Cenário Base, isso é **17,7× de retorno bruto**. Se em 90 dias o piloto não atingir RoAI mínimo de 3×, o contrato é suspenso sem custo de saída.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Cenários de RoAI',
                    meta: ['3 cenários', 'Investimento {{investimento_anual}}/ano'],
                    kpis: [
                        { label: 'CONSERVADOR', value: 'R$ 3,68M', sub: '5,1× · payback 71d' },
                        { label: 'BASE',        value: 'R$ 5,54M', sub: '7,7× · payback 47d', highlight: true },
                        { label: 'ALVO',        value: 'R$ 7,96M', sub: '11,1× · payback 33d' },
                        { label: 'INVESTIMENTO',value: 'R$ 311,8k', sub: 'anual + setup R$ 80k' },
                    ],
                },
            },
        },
        {
            id: 'E3',
            label: 'Como as 80+ oportunidades da consultoria viram controles automáticos?',
            answer: {
                text: 'A consultoria anterior entregou **diagnóstico** com 80+ oportunidades de melhoria ponta-a-ponta no P2P. Converter isso em controles manualmente (mudança de processo + treinamento + auditoria de aderência) levaria **18 a 24 meses**.\n\nO Nous converte cada oportunidade em um **controle automático sobre o Protheus** em **60 a 90 dias**, sem mudar processo e sem treinar humanos. A matriz de priorização que a Controladoria já montou vira input direto do modelo de referência. As 80 oportunidades viram 80 controles, e cada controle vira um KPI dashboardizado para apresentar à diretoria.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Diagnóstico → Execução automática',
                    meta: ['80+ oportunidades mapeadas', 'Conversão em controles'],
                    kpis: [
                        { label: 'OPORTUNIDADES MAPEADAS', value: '80+', sub: 'diagnóstico da consultoria', highlight: true },
                        { label: 'PRAZO MANUAL',           value: '18-24 meses', sub: 'processo + treinamento' },
                        { label: 'PRAZO COM NOUS',         value: '60-90 dias', sub: 'controles automáticos no Protheus' },
                    ],
                },
            },
        },
        {
            id: 'E4',
            label: 'Considerando os spends de cada categoria, quais tendências para os próximos meses?',
            answer: {
                text: 'O spend endereçável de embalagens e indiretos somou **R$ {{spend_p2p_enderecavel}}** nos últimos 12 meses, concentrado em Embalagens, Sanitizantes e MRO, que respondem por **~78%** do volume P2P, padrão típico de Pareto.\n\nNos últimos 3 meses, **Embalagens** subiu **+22%** acima da média (efeito de safra e reposição de sacaria) enquanto **Serviços terceirizados** caiu **-14%**. A projeção para o próximo trimestre indica pressão em embalagem flexível plástica por causa da resina. Ação prioritária: antecipar contrato anual de sacaria via Auto-RFQ antes do próximo ciclo de safra.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Tendências de Spend por Categoria',
                    meta: ['Últimos 12 meses', 'Spend endereçável R$ {{spend_p2p_enderecavel}}'],
                    kpis: [
                        { label: 'SPEND ENDEREÇÁVEL (12M)', value: 'R$ {{spend_p2p_enderecavel}}', sub: 'embalagens + indiretos', highlight: true },
                        { label: 'CONCENTRAÇÃO TOP 3',       value: '~78%', sub: 'embalagens, sanitizantes, MRO' },
                        { label: 'CATEGORIA EM ALTA',        value: 'Embalagens', sub: '+22% vs média 3 meses' },
                        { label: 'CATEGORIA EM QUEDA',       value: 'Serviços', sub: '-14% vs média 3 meses' },
                    ],
                },
            },
        },
        {
            id: 'E5',
            label: 'Quais fornecedores estratégicos têm risco de ruptura?',
            answer: {
                text: 'O monitor de risco cruza concentração de spend, OTIF histórico e dependência de fornecedor único. **{{fornec_top}}** concentra a maior fatia de embalagens de papel e é hoje **fornecedor único** em parte da sacaria, o maior risco de ruptura mapeado.\n\nRecomendação: homologar Trombini Embalagens como fonte secundária de papel e Bemis como alternativa de flexível, reduzindo a dependência de fonte única antes do pico de safra.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Risco de ruptura por fornecedor',
                    meta: ['Concentração + OTIF + fonte única'],
                    kpis: [
                        { label: 'MAIOR RISCO',      value: '{{fornec_top}}', sub: 'fonte única em parte da sacaria', highlight: true },
                        { label: 'AÇÃO',             value: 'Homologar 2ª fonte', sub: 'Trombini + Bemis' },
                        { label: 'JANELA',           value: 'Pré-safra', sub: 'antes do pico de demanda' },
                    ],
                },
            },
        },
        {
            id: 'E6',
            label: 'Estamos batendo a meta de lead-time P2P do planejamento?',
            answer: {
                text: 'O lead-time atual ainda **não é medido de forma estruturada** (cada filial registra de um jeito). O Nous estabelece o baseline via process mining sobre o Protheus já nas primeiras semanas e passa a acompanhar contra a meta de **{{meta_lead_time}}**.\n\nO ganho vem de duas frentes: aprovação automática de itens de baixo risco e roteamento inteligente quando o prazo estoura, eliminando o tempo morto entre etapas.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Lead-time P2P vs meta',
                    meta: ['Baseline via process mining', 'Meta {{meta_lead_time}}'],
                    kpis: [
                        { label: 'LEAD-TIME ATUAL', value: 'A medir', sub: 'baseline nas primeiras semanas', highlight: true },
                        { label: 'META',            value: '{{meta_lead_time}}', sub: 'após 90 dias' },
                        { label: 'ALAVANCA',        value: 'Roteamento', sub: 'aprovação automática + escala' },
                    ],
                },
            },
        },
    ],
    gestao: [
        {
            id: 'G0',
            label: 'Adorei a Curva ABC, mas é trabalhosa. Como fica viva e multidimensional?',
            answer: {
                text: 'Hoje a Curva ABC custa horas para montar, desatualiza em dias e olha só uma dimensão (valor). A Inteligência de Performance de Fornecedor reconstrói a curva **automaticamente em três dimensões**, valor, eficiência operacional e risco, e mantém viva, sincronizada com o ERP, sem ninguém reabrir Excel.\n\nNa dimensão Eficiência, fornecedores que geram retrabalho sobem na curva mesmo sendo pequenos em valor. Na dimensão Risco, fonte única e contratos vencendo aparecem em destaque. É a leitura cruzada de embalagens, sanitizantes, MRO e serviços que abre a conversa estratégica que hoje ninguém tem tempo de fazer. O artefato abaixo é a Curva ABC viva, com a tabela de itens, filtros e gráficos de concentração.',
                artifact: {
                    type: 'iframe',
                    src: 'assets/curva-abc.html',
                    title: 'Curva ABC viva · itens multidimensionais',
                    meta: ['Atualizada em tempo real', 'Valor · eficiência · risco', 'Fonte: Protheus'],
                    height: 760,
                },
            },
        },
        {
            id: 'G1',
            label: 'Quantas compras estão sendo fracionadas (split orders) para furar alçada?',
            answer: {
                text: 'O agente **Detector de Split + Maverick** monitora todas as POs em tempo real e detecta 3 padrões: split order (2+ POs do mesmo SKU/fornecedor em < 24h que ultrapassariam a alçada se consolidados), maverick buying (PO sem RC ou em sequência invertida) e bypass de alçada (PO logo abaixo do limite, repetido pelo mesmo comprador).\n\nNo padrão observado em peers do setor, isso representa **R$ 399 mil/ano** entre saving e risco. O auditor interno já sinalizou na discovery: "comprador faz micro compras e não faz negociação".',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Split Orders & Maverick Buying',
                    meta: ['Detecção em tempo real', 'Alavanca de saving + risco'],
                    kpis: [
                        { label: 'IMPACTO/ANO',       value: 'R$ 399k', sub: 'saving + risco evitado', highlight: true },
                        { label: 'PADRÕES DETECTADOS', value: '3', sub: 'split · maverick · bypass alçada' },
                        { label: 'AÇÃO',              value: 'Tempo real', sub: 'notifica Suprimentos + Auditoria' },
                    ],
                },
            },
        },
        {
            id: 'G2',
            label: 'Quantas notas fiscais chegaram antes do pedido de compra (3-Way Match)?',
            answer: {
                text: 'Hoje a auditoria é **retroativa e manual**. O auditor minera vários relatórios para achar a informação. O processo invertido ("compras urgentes com pedido emitido depois da nota fiscal") é indefensável e ninguém sabe quantas vezes acontece por mês.\n\nO agente **Three-Way Match Fiscal** faz o match automático PO × Recebimento × NF para cada pagamento, com tolerâncias configuráveis (±2% preço, ±5% quantidade). Toda vez que uma NF chega sem PO associado, ele **bloqueia o pagamento, notifica o comprador e alerta Suprimentos, Auditoria e Controladoria simultaneamente**. Sai-se da auditoria retroativa e entra-se na governança em tempo real. Risco mitigado: **R$ 1,78M/ano**.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Three-Way Match Fiscal',
                    meta: ['PO × Recebimento × NF', 'Governança em tempo real'],
                    kpis: [
                        { label: 'RISCO MITIGADO/ANO', value: 'R$ 1,78M', sub: 'maior alavanca de risco', highlight: true },
                        { label: 'TOLERÂNCIA PADRÃO',  value: '±2% / ±5%', sub: 'preço / quantidade' },
                        { label: 'AÇÃO EM DIVERGÊNCIA', value: 'Bloqueio', sub: 'pagamento + dossiê ao auditor' },
                    ],
                },
            },
        },
        {
            id: 'G3',
            label: 'Como está a padronização do processo entre as 6+ filiais?',
            answer: {
                text: 'O diagnóstico revelou alta divergência: "uma filial usa planilha, outra Protheus, outra não faz cotação". Isso impede visibilidade gerencial e cria risco de compliance heterogêneo entre as **{{filiais}} unidades**.\n\nO Nous padroniza o processo **sem impor mudança manual**: cada filial mantém sua operação, mas o Nous lê tudo via Protheus e aplica os mesmos controles automáticos a todas. A Controladoria ganha governança ponta-a-ponta com um único painel cobrindo as 6+ filiais, incluindo a de Mato Grosso, que hoje "não faz cotação".',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Padronização entre filiais',
                    meta: ['{{filiais}} unidades', 'Governança unificada'],
                    kpis: [
                        { label: 'FILIAIS',          value: '{{filiais}}', sub: 'processos hoje heterogêneos', highlight: true },
                        { label: 'CONTROLES',        value: 'Unificados', sub: 'mesma régua em todas as unidades' },
                        { label: 'EFICIÊNCIA/ANO',   value: 'R$ {{roi_eficiencia_anual}}', sub: 'retrabalho + lead time' },
                    ],
                },
            },
        },
        {
            id: 'G4',
            label: 'Performance dos fornecedores no último trimestre',
            answer: {
                text: 'No ranking de embalagens e indiretos, **{{fornec_top}}** lidera com OTIF de 93% e lead-time médio de 6,5 dias. Trombini Embalagens entrega no prazo em 88% dos casos. Os maiores ofensores são um fornecedor de sanitizantes (OTIF 72%) e um de MRO com 6 lotes recusados no trimestre por divergência de especificação.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Performance de fornecedores · Q1',
                    meta: ['Janeiro a Março', '5 fornecedores principais'],
                    kpis: [
                        { label: 'OTIF MÉDIO',      value: '84%', sub: 'on-time in-full agregado', highlight: true },
                        { label: 'LEAD-TIME MÉDIO', value: '8,1 dias', sub: 'ponderado por volume' },
                        { label: 'TOP FORNECEDOR',  value: '{{fornec_top}}', sub: 'OTIF 93% · LT 6,5d' },
                    ],
                },
            },
        },
        {
            id: 'G5',
            label: 'Variação de lead-time entre Jaraguá do Sul e Mato Grosso',
            answer: {
                text: 'O process mining mostra que a matriz de **Jaraguá do Sul** processa uma RC de embalagem em média 35% mais rápido que a filial de **Mato Grosso**, que hoje compra de forma menos estruturada (sem cotação formal em parte dos itens).\n\nPadronizar o fluxo entre as unidades elimina esse gap e é parte da alavanca de eficiência operacional de **R$ {{roi_eficiencia_anual}}/ano**.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Lead-time por unidade',
                    meta: ['Matriz vs filial', 'Process mining'],
                    kpis: [
                        { label: 'GAP ENTRE UNIDADES', value: '~35%', sub: 'Mato Grosso mais lento', highlight: true },
                        { label: 'CAUSA',              value: 'Sem cotação', sub: 'fluxo menos estruturado' },
                        { label: 'AÇÃO',               value: 'Padronizar', sub: 'mesma régua de processo' },
                    ],
                },
            },
        },
        {
            id: 'G6',
            label: 'Top categorias com maior desvio de prazo de entrega',
            answer: {
                text: 'As 3 categorias com maior desvio entre prazo prometido e prazo realizado são **Embalagem flexível** (desvio médio +9 dias), **Sanitizantes industriais** (+6 dias) e **MRO** (+5 dias). O agente de Diligenciamento OTIF passa a cobrar o fornecedor proativamente assim que o prazo prometido entra em risco, antes de virar ruptura.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Desvio de prazo por categoria',
                    meta: ['Prometido vs realizado'],
                    kpis: [
                        { label: 'EMBALAGEM FLEXÍVEL', value: '+9 dias', sub: 'maior desvio', highlight: true },
                        { label: 'SANITIZANTES',       value: '+6 dias', sub: 'segundo maior' },
                        { label: 'MRO',                value: '+5 dias', sub: 'terceiro maior' },
                    ],
                },
            },
        },
    ],
    operacional: [
        {
            id: '1.1',
            label: 'Cadê meu pedido? (status em tempo real para a área de negócio)',
            answer: {
                text: 'Hoje o time de Suprimentos responde 30-50 perguntas "cadê meu pedido?" por dia, manualmente. O agente **Status Auto-Reporter** responde direto no chat: número da PO, status atual, tempo no status, próximo passo previsto e risco de atraso baseado no histórico do fornecedor.\n\nIsso libera ~1h/dia por pessoa do time (benchmark de cliente UpFlux). Parte da alavanca de **R$ {{roi_eficiencia_anual}}/ano** em eficiência operacional.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Status Auto-Reporter',
                    meta: ['Pedido {{pedido_id}}', 'Resposta automática'],
                    kpis: [
                        { label: 'PERGUNTAS/DIA',  value: '30-50', sub: 'hoje respondidas à mão', highlight: true },
                        { label: 'TEMPO LIBERADO', value: '~1h/dia', sub: 'por pessoa do time' },
                        { label: 'STATUS',         value: 'Tempo real', sub: 'PO + risco de atraso' },
                    ],
                },
            },
        },
        {
            id: '1.2',
            label: 'Quais itens recorrentes deveriam virar contrato anual agora?',
            answer: {
                text: 'O agente **Auto-RFQ Cauda Longa** já identificou os SKUs que aparecem 3+ vezes em 60 dias sem contrato. Exemplo concreto: sacaria de papel comprada da {{fornec_top}} praticamente toda semana, em volumes que variam entre 12 mil e 18 mil unidades, cada compra uma RC manual separada.\n\nO agente dispara cotação automática para 3+ fornecedores (Klabin, Trombini, Bemis), consolida as propostas e gera um contrato anual proposto para 1 clique de aprovação. Saving médio em cauda longa: **8-15% sobre o preço spot**.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Top recorrentes sem contrato',
                    meta: ['47 SKUs recorrentes', 'Auto-RFQ pronto'],
                    kpis: [
                        { label: 'SKUs RECORRENTES', value: '47', sub: '3+ compras em 60 dias', highlight: true },
                        { label: 'SAVING SPOT',      value: '8-15%', sub: 'sobre preço de cauda longa' },
                        { label: 'HORAS DE COTAÇÃO', value: '0h', sub: 'humano só aprova vencedor' },
                    ],
                },
            },
        },
        {
            id: '1.3',
            label: 'Requisição: o que eu preciso comprar hoje?',
            answer: {
                text: 'Hoje há **18 requisições novas** aguardando aprovação, totalizando **R$ 740 mil**. As 3 categorias com maior pressão: **Embalagens** (R$ 312k), **Sanitizantes industriais** (R$ 168k) e **MRO/EPI** (R$ 122k). Quatro delas estão fora do SLA de 24h e devem ser priorizadas.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Requisições do dia',
                    meta: ['Hoje', '18 novas', 'R$ 740k'],
                    kpis: [
                        { label: 'NOVAS HOJE',  value: '18', sub: 'aguardando aprovação', highlight: true },
                        { label: 'CRÍTICAS',    value: '4', sub: 'SLA > 24h' },
                        { label: 'VALOR TOTAL', value: 'R$ 740k', sub: 'soma do dia' },
                        { label: 'FORNECEDORES',value: '11', sub: 'distintos' },
                    ],
                },
            },
        },
        {
            id: '1.4',
            label: 'Tenho requisições duplicadas abertas hoje?',
            answer: {
                text: 'Identifiquei **3 pares de requisições duplicadas** abertas nos últimos 7 dias: mesmo CNPJ, mesmo valor (±5%), janela menor que 7 dias. Total potencialmente bloqueado: **R$ 96k**. Recomendação: revisar com o comprador antes de aprovar, padrão típico quando filiais compram o mesmo item sem visibilidade entre si.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Detecção de duplicidade',
                    meta: ['Últimos 7 dias', '3 pares identificados'],
                    kpis: [
                        { label: 'PARES DUPLICADOS', value: '3', sub: 'a revisar', highlight: true },
                        { label: 'VALOR BLOQUEADO',  value: 'R$ 96k', sub: 'pendente de revisão' },
                        { label: 'CNPJs ENVOLVIDOS', value: '2', sub: 'fornecedores distintos' },
                    ],
                },
            },
        },
        {
            id: '3.1',
            label: 'Pedido: quais POs estão com divergência?',
            answer: {
                text: 'Encontrei **9 POs com divergência** pendente de tratamento: 5 com divergência de quantidade acima de 2% no recebimento, 3 com preço acima do contrato vigente e 1 com fornecedor não homologado. Todas estão **bloqueadas para pagamento** pelo Three-Way Match até a regularização.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'POs com divergência',
                    meta: ['Bloqueadas pelo 3-Way Match'],
                    kpis: [
                        { label: 'POs DIVERGENTES', value: '9', sub: 'pendentes de tratamento', highlight: true },
                        { label: 'QTD > 2%',        value: '5', sub: 'divergência no recebimento' },
                        { label: 'PREÇO FORA',      value: '3', sub: 'acima do contrato' },
                    ],
                },
            },
        },
        {
            id: '3.2',
            label: 'Pedido: quais POs foram aprovados fora do fluxo padrão?',
            answer: {
                text: 'No último mês, **7 POs** foram aprovadas fora do fluxo padrão: 4 emitidas após a nota fiscal (sequência invertida) e 3 com salto de alçada. Juntas somam **R$ 410 mil**. O Monitor de Compliance passa a sinalizar esses casos em tempo real, com dossiê pronto para o auditor.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'POs fora do fluxo padrão',
                    meta: ['Último mês', 'R$ 410k'],
                    kpis: [
                        { label: 'POs FORA DO FLUXO', value: '7', sub: 'sequência invertida + salto', highlight: true },
                        { label: 'NF ANTES DO PO',    value: '4', sub: 'processo invertido' },
                        { label: 'VALOR ENVOLVIDO',   value: 'R$ 410k', sub: 'sob revisão' },
                    ],
                },
            },
        },
        {
            id: '4.1',
            label: 'Diligenciamento: quais entregas estão pendentes e em risco?',
            answer: {
                text: 'Há **12 entregas pendentes** com prazo prometido vencido ou em risco nas próximas 72h. A mais crítica é um lote de sacaria de papel que, se atrasar, coloca a linha de envase em risco de parada. O agente de Diligenciamento já disparou cobrança automática ao fornecedor e sugeriu fonte secundária.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Entregas pendentes',
                    meta: ['Próximas 72h', 'Risco de ruptura'],
                    kpis: [
                        { label: 'PENDENTES',  value: '12', sub: 'prazo vencido ou em risco', highlight: true },
                        { label: 'CRÍTICA',    value: '1 lote', sub: 'sacaria · risco de parada' },
                        { label: 'AÇÃO',       value: 'Cobrança auto', sub: '+ fonte secundária' },
                    ],
                },
            },
        },
        {
            id: '5.1',
            label: 'Pagamento: quais faturas estão paradas?',
            answer: {
                text: 'Há **R$ 1,2M em faturas paradas**, sendo R$ 740k bloqueadas pelo Three-Way Match (divergência legítima a tratar) e R$ 460k apenas aguardando liberação de alçada que já poderia ter sido automática. Liberar a parte automatizável melhora o prazo médio de pagamento e o relacionamento com o fornecedor.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Faturas paradas',
                    meta: ['Bloqueio vs alçada'],
                    kpis: [
                        { label: 'TOTAL PARADO',    value: 'R$ 1,2M', sub: 'aguardando tratamento', highlight: true },
                        { label: 'BLOQUEIO LEGÍTIMO',value: 'R$ 740k', sub: 'divergência a tratar' },
                        { label: 'ALÇADA',          value: 'R$ 460k', sub: 'liberação automatizável' },
                    ],
                },
            },
        },
        {
            id: '2.1',
            label: 'Cotação: quais estão abertas há mais de 5 dias úteis sem retorno?',
            answer: {
                text: 'Há **6 cotações abertas** há mais de 5 dias úteis sem retorno do fornecedor, somando **R$ 520 mil** em valor previsto. Todas são de embalagem e MRO. O agente Auto-RFQ passa a escalar automaticamente para fonte secundária quando o SLA de resposta estoura, evitando que a cotação trave a compra.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Cotações abertas sem retorno',
                    meta: ['Mais de 5 dias úteis'],
                    kpis: [
                        { label: 'COTAÇÕES ABERTAS', value: '6', sub: 'sem retorno do fornecedor', highlight: true },
                        { label: 'VALOR PREVISTO',   value: 'R$ 520k', sub: 'embalagem + MRO' },
                        { label: 'AÇÃO',             value: 'Escala auto', sub: 'fonte secundária no SLA' },
                    ],
                },
            },
        },
        {
            id: '7.1',
            label: 'Analise o histórico do pedido {{pedido_id}} e a dispersão de preço',
            answer: {
                text: 'O pedido **{{pedido_id}}** (formato Protheus) refere-se a sacaria de papel recorrente. Como o item é comprado em pedidos spot sem contrato anual, observa-se **dispersão de preço de 9,2%** entre as compras dos últimos 6 meses, exatamente o tipo de variação que a consolidação em contrato anual elimina.\n\nA timeline registra **múltiplos recebimentos parciais** ao longo do período, com 2 picos de compra alinhados ao calendário de safra. Recomenda-se priorizar este SKU no Auto-RFQ de cauda longa e travar preço com reajuste indexado.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Histórico do pedido {{pedido_id}}',
                    meta: ['Pedido {{pedido_id}}', 'ERP {{erp}}'],
                    kpis: [
                        { label: 'DISPERSÃO DE PREÇO', value: '9,2%', sub: 'últimos 6 meses · sem contrato', highlight: true },
                        { label: 'RECORRÊNCIA',        value: 'Semanal', sub: 'candidato a contrato anual' },
                        { label: 'AÇÃO SUGERIDA',      value: 'Auto-RFQ', sub: 'consolidar 3 fornecedores' },
                    ],
                },
            },
        },
    ],
};

const URBANO_HOTSPOTS = [
    { id: 'h1', screen: 'chat',   x: 0.20, y: 0.62, kind: 'tooltip', title: 'Saudação contextual personalizada',
      text: 'Note o cumprimento por nome. O Nous reconhece você, o horário do dia e o contexto (Suprimentos, Urbano Alimentos) automaticamente. Vai aparecer assim para cada um do seu time.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h2', screen: 'chat',   x: 0.50, y: 0.32, kind: 'tooltip', title: 'Pergunta sobre cauda longa em pt-BR · sua maior alavanca',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h3', screen: 'agents', x: 0.50, y: 0.28, kind: 'tooltip', title: 'Três agentes UpFlux atuando em paralelo',
      text: 'A Urbano precisa de 3 agentes distintos do portfólio UpFlux para cobrir as 3 dinâmicas de compra. Não é um agente fazendo tudo.\n\nAgente de Cauda Longa (Auto-RFQ): embalagens, MRO, EPI, sanitizantes, serviços e TI/telecom, universo P2P padrão com fornecedor respondendo cotação. Saving R$ 1,4M/ano.\n\nAgente de Contratos: feijão contratado e itens com combinado fixo. Audita o cumprimento, alerta vencimento e recomenda renegociação. Saving R$ 390k/ano.\n\nAgente de Inteligência de Mercado: arroz e trigo commodity. Não cota, informa. Benchmark CEPEA, Conab, B3 e projeção de safra. Saving R$ 700k/ano via timing da janela de compra.\n\nSoma das 3 alavancas: R$ 2,49Mi/ano. Cada agente é produto autônomo, com licenciamento e precificação próprios.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h4', screen: 'agents', x: 0.30, y: 0.65, kind: 'cta', title: 'Próximo passo concreto',
      text: 'Workshop de 4h com Suprimentos + Controladoria + Auditoria + Engenharia de Valor UpFlux. Em 60 dias o agente Auto-RFQ está rodando em sandbox sobre o Protheus da Urbano, com dados reais. NDA já assinado · podemos partir direto para Letter of Intent alinhada ao go-live de agosto.',
      link: 'https://calendly.com/andrey-upflux/urbano', cta: 'Agendar workshop dia 03/06', videoUrl: '', videoDuration: '' },
    { id: 'h5', screen: 'roai',   x: 0.50, y: 0.25, kind: 'tooltip', title: 'Peer benchmark · Romagnoli (Paraná)',
      text: 'Romagnoli (Paraná, manufatura tradicional) saiu de maturidade muito baixa em compras para madura em 3 meses usando UpFlux. Mesmo método aplicável à Urbano: ondas Quick Wins (30-45d), depois Inteligência Agentic (60-120d), depois Garantia Avançada. RoAI auditado: 5,8× em 12 meses.\n\nContexto competitivo da Urbano (peer set anonimizado por discrição): 7 concorrentes diretos, sendo o líder de escala com faturamento de R$ 15B+ (15 a 20× o porte da Urbano), outros 4 mid-market multi-categoria e 2 regionais/premium. A vantagem do líder é escala, e não será batida por essa via. Mas o gap operacional de margem é endereçável: P2P maduro com IA agêntica neutraliza parte do gap de escala. A Lupatech provou o padrão com 7,7× em 12 meses.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h6', screen: 'roai',   x: 0.65, y: 0.50, kind: 'hyperlink', title: 'Case Lindt · controles internos no TOTVS',
      text: 'A Lindt no Brasil também usa TOTVS (não SAP) e implantou controles internos com UpFlux. Modelo de implantação direto sobre Protheus, sem migração de ERP, sem fricção com TI. Setup em 2 meses. Aplicabilidade direta para a Urbano, que também é TOTVS.',
      link: 'https://upflux.ai/cases/lindt-controles-internos', cta: 'Ver case Lindt completo', videoUrl: '', videoDuration: '' },
];

const URBANO_ACHADOS = {
    filter: 'all',
    items: [
        { id: 'uach1', title: 'Cauda longa · 47 SKUs recorrentes sem contrato', date: '24/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'R$ 2,49Mi/ano de saving não capturado por consolidação' },
        { id: 'uach2', title: 'Split orders detectados · maio',                  date: '23/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'Micro compras fracionadas para furar alçada' },
        { id: 'uach3', title: 'NF antes do pedido · exceções de 3-Way Match',     date: '22/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'Compras urgentes com pedido emitido após a nota fiscal' },
        { id: 'uach4', title: 'Divergência de processo entre 6 filiais',          date: '20/05/2026', type: 'html', category: '1 - Inteligencia de Suprimentos', preview: 'Uma filial usa planilha, outra Protheus, outra não cota' },
        { id: 'uach5', title: 'Projeção RoAI · Cenário Base R$ 5,54Mi (7,7×)',     date: '18/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'Payback 47 dias · investimento R$ 311,8k/ano' },
        { id: 'uach6', title: '80+ oportunidades da consultoria → controles',     date: '15/05/2026', type: 'html', category: '1 - Inteligencia de Suprimentos', preview: 'Conversão em 60-90 dias vs 18-24 meses manual' },
    ],
    categories: ['Todos', '1 - Compras ao Pagamento', '1 - Inteligencia de Suprimentos'],
};

const URBANO_STATE = buildTemplateState({
    activeScreen: 'chat',
    cosmetic: {
        company: 'Urbano Alimentos',
        industry: 'Alimentos & Bebidas',
        logoMonogram: 'U',
        prospectContact: 'Peterson Duarte',
        prospectContactInitials: 'PD',
    },
    data: {
        suppliers: ['Klabin', 'Trombini Embalagens', 'Bemis Brasil', '3M do Brasil', 'Linha Verde Sanitizantes'],
        skuCategories: ['Embalagens (sacaria papel + flexível)', 'Insumos químicos e sanitizantes', 'MRO industrial + EPI', 'Serviços terceirizados', 'TI e telecom'],
        sites: ['Jaraguá do Sul/SC (matriz)', 'Filial Mato Grosso'],
        valueRange: [5000, 150000],
        currency: 'BRL',
    },
    persona: {
        activeId: 'ops',
        branchEnabled: true,
        overrides: {
            ops:     { name: 'Peterson Duarte',   role: 'Gerente de Suprimentos' },
            analyst: { name: 'Cristiano Tomazini', role: 'Auditor Interno' },
            cfo:     { name: 'Natalya',            role: 'Diretoria' },
            cio:     { name: 'Emily Floriani',     role: 'Controladoria' },
        },
    },
    vars: {
        empresa: 'Urbano Alimentos',
        setor: 'Alimentos & Bebidas · Beneficiamento de Arroz',
        pain_point: 'Cauda longa sem contrato anual + auditoria retroativa manual',
        ae_nome: 'Andrey de Almeida',
        persona_nome: 'Peterson Duarte',
        volume_mensal: '1.000',
        fornec_top: 'Klabin',
        meta_lead_time: 'redução de 30-40% em 90 dias',
        lead_time_atual: 'não medido (process mining estimará)',
        spend_total: '100 Mi',
        spend_p2p_enderecavel: '40 Mi',
        fornecedores_ativos: 'múltiplos',
        fornecedores_concentracao_top10: 'a mapear',
        saving_medio_observado: 'cauda longa 8-15%',
        erp: 'Protheus/TOTVS',
        peer_referencia: 'Romagnoli',
        peer_resultado: 'baixa → madura em 3 meses (5,8× em 12m)',
        roi_valor: '5,54M',
        roi_payback: '47 dias',
        roi_multiplo: '7,7x',
        roi_eficiencia_anual: '301k',
        roi_risco_anual: '1,86M',
        investimento_mensal: 'R$ 25.984',
        investimento_anual: 'R$ 311.808',
        filiais: '6+',
        pedido_id: 'PC-2026-00824',
        categorias_ativas: '8',
    },
    discovery: URBANO_DISCOVERY,
    hotspots: URBANO_HOTSPOTS,
    achados: URBANO_ACHADOS,
});

/* ==================================================================
   HABIB'S — QSR multi-unidade (500+ lojas, 18 estados, Protheus)
   Discovery espelha Docol/Urbano + dores específicas do QSR.
   ================================================================== */
const HABIBS_DISCOVERY = {
    estrategico: [
        {
            id: 'E1',
            label: 'Quanto deixamos de capturar por ano em cauda longa de Indiretos sem contrato?',
            answer: {
                text: 'A maior alavanca está na **cauda longa de Indiretos**: uniformes, brindes, materiais de limpeza, descartáveis genéricos e ferramentas de MRO comprados pulverizadamente entre as **{{lojas}} lojas**, item a item, sem agregação de volume. Esse conjunto soma **25-35% do spend de Indiretos**, mas cada compra ocupa o mesmo tempo de comprador que um item classe A.\n\nConsolidando via Agente Negociador, o saving projetado é de **R$ {{roi_cauda_longa}}/ano**. Somando a conversão de spot para contrato (R$ {{roi_consolidacao}}) e a redução de retrabalho em 3-Way Match (R$ {{roi_retrabalho}}), o RoAI Cenário Base chega a **R$ {{roi_valor}}/ano ({{roi_multiplo}}, payback {{roi_payback}})**.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'RoAI · Cenário Base',
                    meta: ['Calculadora UpFlux v4.2', 'Cenário Base', 'Payback {{roi_payback}}'],
                    kpis: [
                        { label: 'CAUDA LONGA · SAVING/ANO', value: 'R$ {{roi_cauda_longa}}', sub: 'Indiretos sem contrato', highlight: true },
                        { label: 'ROAI TOTAL/ANO',           value: 'R$ {{roi_valor}}', sub: 'múltiplo {{roi_multiplo}}' },
                        { label: 'PAYBACK',                  value: '{{roi_payback}}', sub: 'investimento {{investimento_anual}}/ano' },
                        { label: 'TEMPO LIBERADO',           value: '~0,5 FTE', sub: 'time de {{time_compras}} pessoas' },
                    ],
                },
            },
        },
        {
            id: 'E2',
            label: 'Qual o ROI projetado e em quanto tempo recuperamos o investimento?',
            answer: {
                text: 'O business case tem 3 cenários, validados pela calculadora UpFlux v4.2 com os parâmetros do discovery:\n\n• **Conservador:** R$ 2,9M/ano · 4,2× · payback 86 dias\n• **Base** (recomendado): **R$ {{roi_valor}}/ano · {{roi_multiplo}} · payback {{roi_payback}}**\n• **Alvo:** R$ 6,8M/ano · 9,8× · payback 38 dias\n\nO retorno médio observado nos clientes UpFlux é **6× sobre o investimento em menos de 12 meses**. Para a apresentação interna do dia {{data_apresentacao}}, o número que vai para o Clayton e a TI deve ser o do Habib\u2019s, calibrado com volume real de PO no Protheus.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Cenários de RoAI',
                    meta: ['3 cenários', 'Investimento {{investimento_anual}}/ano'],
                    kpis: [
                        { label: 'CONSERVADOR', value: 'R$ 2,9M', sub: '4,2× · payback 86d' },
                        { label: 'BASE',        value: 'R$ {{roi_valor}}', sub: '{{roi_multiplo}} · payback {{roi_payback}}', highlight: true },
                        { label: 'ALVO',        value: 'R$ 6,8M', sub: '9,8× · payback 38d' },
                        { label: 'BENCHMARK',   value: '6×', sub: 'média clientes < 12 meses' },
                    ],
                },
            },
        },
        {
            id: 'E3',
            label: 'Quanto de spend está em fornecedores não-homologados, por região e categoria?',
            answer: {
                text: 'Em operação multi-unidade com **{{lojas}} lojas em {{estados}} estados**, é comum fornecedores entrarem "pela porta dos fundos": uma compra emergencial de uma regional traz um fornecedor que nunca passou pelo processo central de homologação. Hoje isso só aparece na auditoria, meses depois.\n\nO Agente de Qualificação detecta no momento da criação do cadastro. O painel mostra o spend não-homologado agrupado por região (Sudeste concentra a maior fatia) e por categoria (embalagem e manutenção predial lideram), com o comprador responsável de cada exceção.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Spend fora de homologação',
                    meta: ['{{lojas}} lojas · {{estados}} estados', 'Por região e categoria'],
                    kpis: [
                        { label: 'REGIÃO CRÍTICA',    value: 'Sudeste', sub: 'maior spend não-homologado', highlight: true },
                        { label: 'CATEGORIAS TOPO',   value: 'Embalagem + Predial', sub: 'trazidas por regionais' },
                        { label: 'DETECÇÃO',          value: 'No cadastro', sub: 'não mais na auditoria' },
                    ],
                },
            },
        },
        {
            id: 'E4',
            label: 'Qual a concentração de risco: fornecedores classe A com single source e sem contrato?',
            answer: {
                text: 'A Curva ABC viva cruza valor, eficiência e risco. Os fornecedores **classe A single-source e sem contrato vigente** são o maior risco de ruptura, crítico num QSR onde falta de proteína, embalagem ou bebida para uma loja vira venda perdida imediata.\n\nO monitor destaca esses fornecedores e sugere homologar uma segunda fonte antes de picos de operação (como a virada de Copa, quando o volume de Diretos sobe 30-60%).',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Concentração de risco · Curva A',
                    meta: ['Valor + Eficiência + Risco', 'Single source'],
                    kpis: [
                        { label: 'MAIOR RISCO',  value: 'Proteínas', sub: 'classe A single-source', highlight: true },
                        { label: 'JANELA',       value: 'Pré-Copa', sub: 'volume sobe 30-60%' },
                        { label: 'AÇÃO',         value: 'Homologar 2ª fonte', sub: 'antes do pico' },
                    ],
                },
            },
        },
    ],
    gestao: [
        {
            id: 'G1',
            label: 'Adorei a Curva ABC, mas é trabalhosa. Como fica viva e multidimensional?',
            answer: {
                text: 'Hoje a Curva ABC custa horas para montar, desatualiza em dias e olha só uma dimensão (valor). A Inteligência de Performance de Fornecedor reconstrói a curva **automaticamente em três dimensões**, valor, eficiência operacional e risco, e mantém viva, sincronizada com o Protheus, sem ninguém reabrir Excel.\n\nNa dimensão Eficiência, fornecedores que geram retrabalho sobem na curva mesmo sendo pequenos em valor. Na dimensão Risco, single-source e contratos vencendo aparecem em destaque. É a leitura cruzada de Diretos, Indiretos e Serviços que abre a conversa estratégica que hoje ninguém tem tempo de fazer. O artefato abaixo é a Curva ABC viva, com a tabela de itens, filtros e gráficos de concentração.',
                artifact: {
                    type: 'iframe',
                    src: 'assets/curva-abc.html',
                    title: 'Curva ABC viva · itens multidimensionais',
                    meta: ['Atualizada em tempo real', 'Valor · eficiência · risco', 'Fonte: Protheus'],
                    height: 760,
                },
            },
        },
        {
            id: 'G2',
            label: 'Quantas compras estão sendo fracionadas (splitting) para furar alçada?',
            answer: {
                text: 'Splitting é fracionar uma compra grande em vários POs menores para ficar abaixo da alçada. Em operação multi-unidade isso aparece naturalmente quando uma necessidade é distribuída entre filiais, e em ambiente SOX é uma bandeira vermelha.\n\nCenário típico: três POs de R$ 4.500 para o mesmo fornecedor de manutenção no mesmo mês, todos abaixo da alçada do supervisor, que somados deveriam passar pelo gerente. O agente de Compliance detecta o padrão e sinaliza, com Trilha Auditável pronta para a auditoria interna.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Detecção de Splitting',
                    meta: ['Tempo real', 'Ambiente SOX'],
                    kpis: [
                        { label: 'PADRÃO',        value: 'Splitting', sub: '3 POs sob alçada → 1 acima', highlight: true },
                        { label: 'DETECÇÃO',      value: 'Antes da emissão', sub: 'não na auditoria' },
                        { label: 'EVIDÊNCIA',     value: 'Trilha auditável', sub: 'pronta p/ SOX' },
                    ],
                },
            },
        },
        {
            id: 'G3',
            label: 'Quantas NFs chegaram antes do pedido / quebraram o 3-Way Match?',
            answer: {
                text: 'O 3-Way Match cruza Pedido + Recebimento + Nota Fiscal. Bate, libera pagamento; não bate, trava. Hoje, quando trava, alguém investiga manualmente. O Nous traz o item **já investigado**: divergência exata (preço, quantidade, CFOP ou alíquota), responsável pela próxima ação e proposta de correção.\n\nA referência best-in-class é **acima de 98% de conformidade** (PwC); a maioria das operações QSR começa entre 80% e 92%. Esse gap é a oportunidade do Habib\u2019s. Cenário típico: NF de queijo com preço 7% acima do contrato master, bloqueada antes do pagamento.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Three-Way Match automatizado',
                    meta: ['PO × Recebimento × NF', 'Governança proativa'],
                    kpis: [
                        { label: 'BEST-IN-CLASS', value: '98%+', sub: 'conformidade (PwC)', highlight: true },
                        { label: 'PONTO DE PARTIDA QSR', value: '80-92%', sub: 'o gap é a oportunidade' },
                        { label: 'AÇÃO EM DIVERGÊNCIA', value: 'Bloqueio', sub: '+ correção proposta' },
                    ],
                },
            },
        },
        {
            id: 'G4',
            label: 'Em qual etapa de aprovação perdemos mais tempo e quais aprovadores são gargalo?',
            answer: {
                text: 'O process mining sobre o Protheus mostra o tempo médio de fila por alçada e ranqueia os aprovadores que mais seguram o fluxo. Hoje, com **~20% do P2P registrado no Protheus e ~80% em planilha e e-mail**, essa visão não existe de forma estruturada.\n\nO maior gargalo costuma ser a aprovação de POs acima da alçada do supervisor, que depende do gerente regional. O Nous mostra o ranking, o tempo médio em cada etapa e o custo financeiro do atraso.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Gargalos de aprovação',
                    meta: ['Ranking por aprovador', 'Tempo de fila por alçada'],
                    kpis: [
                        { label: 'P2P NO PROTHEUS HOJE', value: '~20%', sub: '80% em planilha e e-mail', highlight: true },
                        { label: 'MAIOR FILA',           value: 'PO > alçada', sub: 'depende do gerente regional' },
                        { label: 'VISÃO',                value: 'Ranking + custo', sub: 'do atraso por etapa' },
                    ],
                },
            },
        },
        {
            id: 'G5',
            label: 'Compare a performance dos compradores: volume, ciclo médio e taxa de exceção',
            answer: {
                text: 'O time de **{{time_compras}} pessoas** cobre as {{lojas}} lojas, dividido entre Diretos e Indiretos. O painel compara cada comprador por volume processado, ciclo médio SC→PC e taxa de exceção (divergências, retrabalho).\n\nA leitura revela onde o comprador sênior está gastando hora-homem com cauda longa que o Agente Negociador poderia rodar, liberando tempo para negociação estratégica de classe A.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Performance dos compradores',
                    meta: ['Time de {{time_compras}}', 'Diretos + Indiretos'],
                    kpis: [
                        { label: 'CARGA OPERACIONAL', value: '~70%', sub: 'meta: inverter p/ estratégico', highlight: true },
                        { label: 'CICLO MÉDIO',       value: 'SC→PC', sub: 'comparado por comprador' },
                        { label: 'OPORTUNIDADE',      value: 'Cauda longa', sub: 'migrar p/ Agente Negociador' },
                    ],
                },
            },
        },
        {
            id: 'G6',
            label: 'Quantas compras spot rodaram para categorias que têm contrato master ativo?',
            answer: {
                text: 'Maverick buying entre regiões é clássico em QSR: a regional Sul compra óleo de fritura avulso enquanto existe contrato master nacional não acionado. A compra spot fica entre **5% e 15% mais cara** que o contrato.\n\nO Agente de Conformidade Contratual cruza cada cotação/PO contra o contrato master ativo e sinaliza **no momento da cotação**, antes da emissão, e não depois do pagamento. A Inteligência de Fornecedor ainda aponta oportunidades de consolidação nacional.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Spot vs contrato master',
                    meta: ['Maverick entre regiões', 'Sinalização proativa'],
                    kpis: [
                        { label: 'SOBREPREÇO SPOT', value: '5-15%', sub: 'vs contrato master', highlight: true },
                        { label: 'SINALIZAÇÃO',     value: 'Na cotação', sub: 'antes da emissão' },
                        { label: 'GANHO',           value: 'Consolidação', sub: 'volume nacional agregado' },
                    ],
                },
            },
        },
    ],
    operacional: [
        {
            id: '1.1',
            label: 'Liste as NFs paradas há mais de 7 dias agrupadas pelo motivo do bloqueio',
            answer: {
                text: 'Há **14 NFs paradas** há mais de 7 dias, somando **R$ 1,3M**, agrupadas por motivo: 6 por divergência de preço vs contrato, 4 por quantidade no recebimento, 3 aguardando aprovação fiscal e 1 com CFOP incorreto. Cada uma vem com a etapa exata, o aprovador responsável e o custo financeiro do atraso.\n\nDestaque: uma NF de queijo da regional Sudeste com preço 7% acima do contrato master, bloqueada antes do pagamento.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'NFs paradas > 7 dias',
                    meta: ['Por motivo de bloqueio', 'R$ 1,3M'],
                    kpis: [
                        { label: 'NFs PARADAS',    value: '14', sub: '> 7 dias em pendência', highlight: true },
                        { label: 'VALOR TRAVADO',  value: 'R$ 1,3M', sub: 'aguardando ação' },
                        { label: 'MAIOR MOTIVO',   value: 'Preço vs contrato', sub: '6 NFs divergentes' },
                    ],
                },
            },
        },
        {
            id: '1.2',
            label: 'Quais POs foram emitidos para fornecedores sem contrato vigente (maverick)?',
            answer: {
                text: 'Nos últimos 30 dias, **22 POs** foram emitidos para fornecedores sem contrato vigente, somando **R$ 680k**. A maior parte em manutenção predial e embalagem, trazidos por compras emergenciais de regionais. Cada PO vem com valor, comprador responsável e a categoria onde houve maverick buying.\n\nEsses são exatamente os casos que o Agente de Conformidade Contratual passa a sinalizar no momento da cotação.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'POs sem contrato (maverick)',
                    meta: ['Últimos 30 dias', 'R$ 680k'],
                    kpis: [
                        { label: 'POs MAVERICK',  value: '22', sub: 'fornecedor sem contrato', highlight: true },
                        { label: 'VALOR',         value: 'R$ 680k', sub: 'fora de contrato' },
                        { label: 'CATEGORIA TOPO', value: 'Predial + Embalagem', sub: 'compras de regional' },
                    ],
                },
            },
        },
        {
            id: '1.3',
            label: 'Requisição: o que eu preciso comprar hoje?',
            answer: {
                text: 'Hoje há **31 requisições novas** aguardando aprovação, somando **R$ 920k**. As 3 categorias com maior pressão: **Embalagens primárias** (R$ 384k), **Manutenção de loja / HVAC** (R$ 246k) e **Descartáveis** (R$ 152k). Seis estão fora do SLA de 24h e devem ser priorizadas, sendo duas de manutenção de fritadeira em loja, com risco de parada.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Requisições do dia',
                    meta: ['Hoje', '31 novas', 'R$ 920k'],
                    kpis: [
                        { label: 'NOVAS HOJE',  value: '31', sub: 'aguardando aprovação', highlight: true },
                        { label: 'CRÍTICAS',    value: '6', sub: 'SLA > 24h' },
                        { label: 'VALOR TOTAL', value: 'R$ 920k', sub: 'soma do dia' },
                        { label: 'CATEGORIA TOPO', value: 'Embalagens', sub: 'R$ 384k' },
                    ],
                },
            },
        },
        {
            id: '1.4',
            label: 'Quais POs estão sem confirmação do fornecedor com entrega vencendo esta semana?',
            answer: {
                text: 'Há **9 POs sem confirmação** do fornecedor com entrega prevista para esta semana, sendo 3 críticos de manutenção de equipamento de cozinha (fritadeira e refrigeração) que, se atrasarem, param a operação da loja. O Agente Diligenciador já disparou cobrança automática conforme o prazo do contrato e escalou os 3 críticos.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'POs sem confirmação · entrega na semana',
                    meta: ['Risco de ruptura', 'Diligenciamento ativo'],
                    kpis: [
                        { label: 'SEM CONFIRMAÇÃO', value: '9', sub: 'entrega esta semana', highlight: true },
                        { label: 'CRÍTICOS',        value: '3', sub: 'manutenção de cozinha' },
                        { label: 'AÇÃO',            value: 'Cobrança auto', sub: '+ escalonamento' },
                    ],
                },
            },
        },
        {
            id: '1.5',
            label: 'Quais itens recorrentes de Indiretos deveriam virar contrato agora?',
            answer: {
                text: 'O Agente Negociador identificou os SKUs de Indiretos que aparecem 3+ vezes em 60 dias sem contrato: descartáveis genéricos, materiais de limpeza, uniformes e ferramentas de MRO. Exemplo: copos e tampas comprados avulsos por várias regionais toda semana.\n\nEle dispara cotação automática para 3+ fornecedores, consolida o volume nacional e gera um contrato anual proposto para 1 clique de aprovação. Saving médio em cauda longa: **8-15%** sobre o preço pulverizado.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Recorrentes de Indiretos sem contrato',
                    meta: ['Auto-RFQ pronto', 'Volume nacional'],
                    kpis: [
                        { label: 'SAVING SPOT',    value: '8-15%', sub: 'vs preço pulverizado', highlight: true },
                        { label: 'AGREGAÇÃO',      value: 'Nacional', sub: 'volume de todas as regionais' },
                        { label: 'HORAS COTAÇÃO',  value: '0h', sub: 'humano só aprova vencedor' },
                    ],
                },
            },
        },
        {
            id: '3.1',
            label: 'Quais divergências de preço entre PO e NF aconteceram nos últimos 30 dias?',
            answer: {
                text: 'Foram **18 divergências de preço** PO × NF nos últimos 30 dias, sendo as mais relevantes em laticínios e papel kraft, com NF acima do preço acordado. Caso típico: papel kraft cobrado de uma regional 12% acima da média histórica daquele fornecedor, e o Nous alerta antes da emissão do próximo PO.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Divergências de preço PO × NF',
                    meta: ['Últimos 30 dias', 'Anomalia de preço'],
                    kpis: [
                        { label: 'DIVERGÊNCIAS', value: '18', sub: 'preço PO ≠ NF', highlight: true },
                        { label: 'CASO TOPO',    value: 'Papel kraft +12%', sub: 'acima da média histórica' },
                        { label: 'AÇÃO',         value: 'Alerta pré-PO', sub: 'antes do próximo pedido' },
                    ],
                },
            },
        },
        {
            id: '4.1',
            label: 'Quais entregas de manutenção estão pendentes e em risco pré-Copa?',
            answer: {
                text: 'Há **12 entregas de manutenção** com prazo em risco nas próximas 72h, com foco em HVAC, refrigeração e fritadeiras, equipamentos que precisam estar 100% antes do pico de operação. A mais crítica é um reparo de fritadeira contratado para entregar dia 5 cujo fornecedor parou de responder.\n\nO Agente Diligenciador cobra automaticamente conforme o prazo do contrato, registra o histórico e escala quando há risco real de parada de loja.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Manutenção pendente · pré-Copa',
                    meta: ['Próximas 72h', 'Risco de parada'],
                    kpis: [
                        { label: 'EM RISCO',   value: '12', sub: 'HVAC · refrig · fritadeira', highlight: true },
                        { label: 'CRÍTICA',    value: '1 fritadeira', sub: 'fornecedor sem resposta' },
                        { label: 'AÇÃO',       value: 'Cobrança + escala', sub: 'antes de parar loja' },
                    ],
                },
            },
        },
        {
            id: '5.1',
            label: 'Pagamento: quais faturas estão paradas?',
            answer: {
                text: 'Há **R$ 1,1M em faturas paradas**: R$ 690k bloqueadas pelo 3-Way Match (divergência legítima a tratar) e R$ 410k apenas aguardando liberação de alçada que já poderia ser automática. Em operação multi-unidade também aparecem pagamentos adiantados por bug de processo, que custam capital de giro.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Faturas paradas',
                    meta: ['Bloqueio vs alçada'],
                    kpis: [
                        { label: 'TOTAL PARADO',     value: 'R$ 1,1M', sub: 'aguardando tratamento', highlight: true },
                        { label: 'BLOQUEIO LEGÍTIMO', value: 'R$ 690k', sub: 'divergência 3WM' },
                        { label: 'ALÇADA',           value: 'R$ 410k', sub: 'liberação automatizável' },
                    ],
                },
            },
        },
        {
            id: '2.1',
            label: 'Analise o histórico do pedido {{pedido_id}} e a dispersão de preço',
            answer: {
                text: 'O pedido **{{pedido_id}}** (formato Protheus) refere-se a embalagem primária recorrente (copos/tampas). Como o item é comprado avulso por várias regionais sem contrato nacional, observa-se **dispersão de preço de 11,4%** entre as compras dos últimos 6 meses entre as regiões.\n\nÉ exatamente o tipo de variação que a consolidação em contrato nacional elimina. Recomenda-se priorizar este SKU no Auto-RFQ do Agente Negociador.',
                artifact: {
                    type: 'kpi-grid',
                    title: 'Histórico do pedido {{pedido_id}}',
                    meta: ['Pedido {{pedido_id}}', 'ERP {{erp}}'],
                    kpis: [
                        { label: 'DISPERSÃO DE PREÇO', value: '11,4%', sub: 'entre regiões · 6 meses', highlight: true },
                        { label: 'RECORRÊNCIA',        value: 'Semanal', sub: 'candidato a contrato nacional' },
                        { label: 'AÇÃO SUGERIDA',      value: 'Auto-RFQ', sub: 'consolidar volume nacional' },
                    ],
                },
            },
        },
    ],
};

const HABIBS_HOTSPOTS = [
    { id: 'h1', screen: 'chat',   x: 0.20, y: 0.62, kind: 'tooltip', title: 'Saudação contextual personalizada',
      text: 'Note o cumprimento por nome. O Nous reconhece você, o horário e o contexto (Indiretos, QSR multi-unidade) automaticamente. Vai aparecer assim para cada comprador do time, sem configurar template.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h2', screen: 'chat',   x: 0.50, y: 0.32, kind: 'tooltip', title: 'Pergunta em pt-BR sobre dados do Protheus',
      text: 'Quando o comprador pergunta "liste as NFs paradas há mais de 7 dias", o Nous consulta o Protheus em tempo real e responde com a lista acionável: NF, etapa, aprovador responsável e custo do atraso. A resposta é acionável, não descritiva. Não volta "existe um problema na aprovação", volta "R$ 1,3M parados em 14 NFs".',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h3', screen: 'agents', x: 0.50, y: 0.28, kind: 'tooltip', title: 'Quatro agentes para a realidade do QSR',
      text: 'A Habib\u2019s precisa de 4 agentes especialistas: Negociador (cauda longa de Indiretos), Diligenciador (entregas críticas pré-Copa), Conformidade Contratual (spot que devia ser contrato) e Qualificação de Fornecedor (não-homologado entrando por regional). Cada um detecta, age ciclicamente e encaminha para o humano quando passa da alçada. É execução autônoma, não RPA nem dashboard.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h4', screen: 'agents', x: 0.30, y: 0.65, kind: 'cta', title: 'Próximo passo concreto',
      text: 'Apresentação interna dia {{data_apresentacao}} com Clayton (diretor) e TI. Antes disso: workshop de RoAI para calibrar o business case com o volume real de PO no Protheus do Habib\u2019s e percorrer as 5 estações com o time.',
      link: 'https://calendly.com/upflux/habibs', cta: 'Agendar workshop de RoAI', videoUrl: '', videoDuration: '' },
    { id: 'h5', screen: 'roai',   x: 0.50, y: 0.25, kind: 'tooltip', title: 'A prova em R$ para o Clayton e a TI',
      text: 'O Value Tracker registra, mês a mês, quanto cada ação trouxe em hard saving, eficiência, capital de giro e compliance. Cada alavanca tem fórmula visível, sem caixa-preta, defensável em conversa com CFO ou auditoria. E compara prometido vs realizado: prova que a IA entregou, não promete.',
      link: '', cta: '', videoUrl: '', videoDuration: '' },
    { id: 'h6', screen: 'roai',   x: 0.65, y: 0.50, kind: 'hyperlink', title: 'As 5 alavancas do business case',
      text: 'Automação de negociação (spend elegível × 5%), consolidação spot→contrato (×5-8%), redução de retrabalho em P2P (horas × custo × 20-50%), produtividade com automação e redução de pagamentos antecipados (DPO). Cada uma quantificada com os dados do Habib\u2019s no template de RoAI.',
      link: 'https://upflux.ai/cases/qsr-multiunidade', cta: 'Ver alavancas detalhadas', videoUrl: '', videoDuration: '' },
];

const HABIBS_ACHADOS = {
    filter: 'all',
    items: [
        { id: 'hach1', title: 'Cauda longa de Indiretos · SKUs recorrentes sem contrato', date: '30/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: 'Descartáveis, limpeza, uniformes, MRO · 25-35% do spend Indiretos' },
        { id: 'hach2', title: 'NFs paradas > 7 dias por motivo de bloqueio',            date: '29/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: '14 NFs · R$ 1,3M travados' },
        { id: 'hach3', title: 'Fornecedores não-homologados por região',               date: '28/05/2026', type: 'html', category: '1 - Inteligencia de Suprimentos', preview: 'Entrando pela porta dos fundos via regionais' },
        { id: 'hach4', title: 'Splitting de alçada detectado · manutenção',             date: '27/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: '3 POs de R$ 4.500 mesmo fornecedor/mês' },
        { id: 'hach5', title: 'Curva ABC viva · Diretos × Indiretos × Serviços',         date: '26/05/2026', type: 'html', category: '1 - Inteligencia de Suprimentos', preview: 'Valor + eficiência + risco · atualizada em tempo real' },
        { id: 'hach6', title: 'Projeção RoAI · Cenário Base (payback 47 dias)',          date: '25/05/2026', type: 'html', category: '1 - Compras ao Pagamento', preview: '5 alavancas P2P com fórmula visível' },
    ],
    categories: ['Todos', '1 - Compras ao Pagamento', '1 - Inteligencia de Suprimentos'],
};

const HABIBS_STATE = buildTemplateState({
    activeScreen: 'chat',
    cosmetic: {
        company: "Habib's",
        industry: 'Alimentação · QSR',
        logoMonogram: 'H',
        prospectContact: 'Carlos Alexandre',
        prospectContactInitials: 'CA',
    },
    data: {
        suppliers: ['Frigorífico Nacional', 'Indústria de Embalagens QSR', 'Coca-Cola FEMSA', 'Prestador HVAC Regional', 'Distribuidor de Descartáveis'],
        skuCategories: ['Proteínas (carne, frango)', 'Embalagens primárias', 'MRO de loja (HVAC, fritadeira)', 'Descartáveis e EPI', 'Serviços (limpeza, logística)', 'Bebidas (contrato master)'],
        sites: ['Matriz (compras centralizadas)', 'Regional Sudeste', 'Regional Sul', 'Regional Nordeste'],
        valueRange: [2000, 120000],
        currency: 'BRL',
    },
    persona: {
        activeId: 'ops',
        branchEnabled: true,
        overrides: {
            ops:     { name: 'Carlos Alexandre', role: 'Coordenador de Indiretos' },
            analyst: { name: 'Comprador Diretos', role: 'Comprador de Diretos' },
            cfo:     { name: 'Clayton',           role: 'Diretor' },
            cio:     { name: 'TI Habib\u2019s',   role: 'Tecnologia da Informação' },
        },
    },
    vars: {
        empresa: "Habib's",
        setor: 'Alimentação · QSR multi-unidade',
        pain_point: 'Visibilidade no escuro + cauda longa de Indiretos + controle reativo',
        ae_nome: 'UpFlux',
        persona_nome: 'Carlos Alexandre',
        volume_mensal: 'a mapear (20% no Protheus)',
        fornec_top: 'Frigorífico Nacional',
        meta_lead_time: 'redução de 30-40% em 90 dias',
        lead_time_atual: 'não medido (process mining estimará)',
        spend_total: 'a calibrar no business case',
        spend_p2p_enderecavel: 'a calibrar',
        fornecedores_ativos: 'múltiplos · 18 estados',
        fornecedores_concentracao_top10: 'a mapear',
        saving_medio_observado: 'cauda longa 8-15%',
        erp: 'TOTVS Protheus',
        peer_referencia: 'clientes QSR UpFlux',
        peer_resultado: '6× em menos de 12 meses',
        roi_valor: '4,9M',
        roi_payback: '47 dias',
        roi_multiplo: '6,8x',
        roi_cauda_longa: '1,9M',
        roi_consolidacao: '1,4M',
        roi_retrabalho: '980k',
        roi_eficiencia_anual: '620k',
        roi_risco_anual: '1,5M',
        investimento_mensal: 'R$ 30.000',
        investimento_anual: 'R$ 360.000',
        lojas: '500+',
        estados: '18',
        time_compras: '8',
        filiais: '500+',
        data_apresentacao: '11/06',
        pedido_id: 'PC-2026-01147',
        categorias_ativas: '12',
    },
    discovery: HABIBS_DISCOVERY,
    hotspots: HABIBS_HOTSPOTS,
    achados: HABIBS_ACHADOS,
});

const LIBRARY_SEED = [
    {
        id: 'docol-p2p-v1',
        name: 'Docol · P2P',
        prospect: 'Docol',
        industry: 'Manufatura',
        persona: 'Marcos Silveira',
        personaRole: 'Diretor de Operações',
        owner: 'Felipe Andrade',
        ownerInitials: 'FA',
        status: 'ready',                /* 'draft' | 'ready' | 'shared' */
        version: STUDIO_VERSION,
        createdAt: '2026-05-12',
        updatedAt: '2026-05-25',
        views: 3,
        shareCount: 1,
        accent: '#6D4ADD',
        state: DEFAULT_STATE,
        thumbHint: 'P2P · 11d 6h · R$ 2,4M desbloqueado',
    },
    {
        id: 'magalu-varejo',
        name: 'Magazine Luiza · Supply',
        prospect: 'Magazine Luiza',
        industry: 'Varejo',
        persona: 'Diretor de Supply Chain',
        personaRole: 'Diretor de Supply Chain',
        owner: 'Felipe Andrade',
        ownerInitials: 'FA',
        status: 'draft',
        version: STUDIO_VERSION,
        createdAt: '2026-05-22',
        updatedAt: '2026-05-22',
        views: 0,
        shareCount: 0,
        accent: '#0066FF',
        state: buildTemplateState({
            cosmetic: { company: 'Magazine Luiza', industry: 'Varejo', logoMonogram: 'M' },
            vars: {
                empresa: 'Magazine Luiza',
                setor: 'Varejo · Multicanal',
                pain_point: 'Lead time de reposição vs. sazonalidade',
                volume_mensal: '8.420',
                fornec_top: 'Whirlpool',
                meta_lead_time: '14 dias',
            },
        }),
        thumbHint: 'Reposição · stockout · Black Friday',
    },
    {
        id: 'ambev-mro',
        name: 'Ambev · Compras indiretas',
        prospect: 'Ambev',
        industry: 'Bens de consumo',
        persona: 'Gerente de Compras Indiretas',
        personaRole: 'Gerente de Compras Indiretas',
        owner: 'Patrícia Hwang',
        ownerInitials: 'PH',
        status: 'shared',
        version: 'v1.1.0',              /* older version · stays compatible */
        createdAt: '2026-04-28',
        updatedAt: '2026-05-14',
        views: 7,
        shareCount: 3,
        accent: '#F59E0B',
        state: buildTemplateState({
            cosmetic: { company: 'Ambev', industry: 'Bens de consumo', logoMonogram: 'A' },
            vars: {
                empresa: 'Ambev',
                setor: 'Bens de consumo · Bebidas',
                pain_point: 'Aprovação MRO acima de R$ 500k',
                volume_mensal: '4.180',
                fornec_top: 'Aurora',
                meta_lead_time: '21 dias',
            },
        }),
        thumbHint: 'MRO · alçada R$ 500k · 7 plantas',
    },
    {
        id: 'unimed-saude',
        name: 'Unimed BH · Glosa',
        prospect: 'Unimed BH',
        industry: 'Saúde',
        persona: 'Diretor Financeiro',
        personaRole: 'Diretor Financeiro',
        owner: 'Felipe Andrade',
        ownerInitials: 'FA',
        status: 'draft',
        version: STUDIO_VERSION,
        createdAt: '2026-05-19',
        updatedAt: '2026-05-21',
        views: 0,
        shareCount: 0,
        accent: '#0D9488',
        state: buildTemplateState({
            cosmetic: { company: 'Unimed BH', industry: 'Saúde', logoMonogram: 'U' },
            vars: {
                empresa: 'Unimed BH',
                setor: 'Saúde suplementar',
                pain_point: 'Glosa de honorários médicos',
                volume_mensal: '12.300',
                fornec_top: 'CBHPM Cooperados',
                meta_lead_time: '15 dias',
            },
        }),
        thumbHint: 'Glosa por especialidade · auditoria',
    },
    {
        id: 'urbano-arroz-p2p',
        name: 'Urbano Alimentos · P2P',
        prospect: 'Urbano Alimentos',
        industry: 'Alimentos & Bebidas',
        persona: 'Peterson Duarte',
        personaRole: 'Gerente de Suprimentos',
        owner: 'Andrey de Almeida',
        ownerInitials: 'AA',
        status: 'ready',
        version: STUDIO_VERSION,
        createdAt: '2026-05-25',
        updatedAt: '2026-05-25',
        views: 0,
        shareCount: 0,
        accent: '#E63946',
        state: URBANO_STATE,
        thumbHint: 'Cauda longa · R$ 2,49Mi · RoAI 7,7×',
    },
    {
        id: 'habibs-qsr-p2p',
        name: "Habib's · P2P",
        prospect: "Habib's",
        industry: 'Alimentação · QSR',
        persona: 'Carlos Alexandre',
        personaRole: 'Coordenador de Indiretos',
        owner: 'UpFlux',
        ownerInitials: 'UF',
        status: 'ready',
        version: STUDIO_VERSION,
        createdAt: '2026-06-01',
        updatedAt: '2026-06-01',
        views: 0,
        shareCount: 0,
        accent: '#E11D2A',
        state: HABIBS_STATE,
        thumbHint: 'QSR 500+ lojas · cauda longa Indiretos · RoAI 6,8×',
    },
];

window.STUDIO_DATA.LIBRARY_SEED = LIBRARY_SEED;