// AAP — icons, scenarios, helpers
// NOTE QA : Les scénarios simulés (AAP_SCENARIOS) sont conservés pour rétro-compatibilité
// mais ne sont plus utilisés — les vraies réponses viennent de l'AAP via /ask (tracking_server.py)
const Icon = {
Plus: ({s=14}) => ,
Send: ({s=14}) => ,
Stop: ({s=12}) => ,
Attach: ({s=16}) => ,
Mic: ({s=16}) => ,
Sparkle: ({s=14}) => ,
Settings: ({s=16}) => ,
Share: ({s=16}) => ,
Search: ({s=14}) => ,
CRM: ({s=14}) => ,
Calc: ({s=14}) => ,
ChevronRight: ({s=14}) => ,
Bolt: ({s=14}) => ,
File: ({s=14}) => ,
Pin: ({s=14}) => ,
Check: ({s=12}) => ,
};
window.AAP_Icon = Icon;
// Pre-written conversation history for sidebar
window.AAP_HISTORY = [
{ id: 'today-1', title: 'Devis flotte 50 véhicules — Logitex', group: "Aujourd'hui", active: true },
{ id: 'today-2', title: 'Relance prospect Bouygues Construction', group: "Aujourd'hui" },
{ id: 'today-3', title: 'Analyse concurrentielle AXA Pro', group: "Aujourd'hui" },
{ id: 'y-1', title: 'Multirisque commerce — boulangerie Levain', group: 'Hier' },
{ id: 'y-2', title: 'RC Pro freelances tech — comparatif', group: 'Hier' },
{ id: 'y-3', title: 'Suivi sinistre dossier #2847', group: 'Hier' },
{ id: 'w-1', title: 'Onboarding nouveau lead — Mistral SA', group: '7 derniers jours' },
{ id: 'w-2', title: 'Email de relance Q2 — 12 prospects', group: '7 derniers jours' },
{ id: 'w-3', title: 'Pricing flotte transport routier', group: '7 derniers jours' },
{ id: 'w-4', title: 'Prévention cyber — PME industrie', group: '7 derniers jours' },
{ id: 'old-1', title: 'Renouvellement contrat Capgemini Sud', group: 'Avril' },
{ id: 'old-2', title: 'Étude marché santé entreprise', group: 'Avril' },
];
// Suggestions on welcome screen
window.AAP_SUGGESTIONS = [
{ label: 'Devis', text: "Génère un devis multirisque pour une PME de 80 salariés dans la tech" },
{ label: 'CRM', text: "Quels sont mes 5 leads les plus chauds cette semaine ?" },
{ label: 'Analyse', text: "Compare nos garanties RC Pro avec celles d'AXA et Generali" },
{ label: 'Email', text: "Rédige une relance pour un prospect qui n'a pas répondu depuis 10 jours" },
];
// The streaming response simulator
// Each scenario = ordered list of "events":
// {type:'thinking', text, ms}
// {type:'tool', name, icon, sub, params, result, durationMs}
// {type:'text', content} -- markdown-ish
// {type:'card', kind, data}
// {type:'sources', list}
window.AAP_SCENARIOS = {
'devis': {
match: /devis|multirisque|prime|cotisation|tarif/i,
events: [
{ type: 'thinking', text: 'Analyse de la demande et du profil entreprise…', ms: 900 },
{ type: 'tool', name: 'CRM · Calipso', icon: 'crm', sub: 'Recherche profil entreprise', params: [
{ k: 'secteur', v: 'tech / SaaS' },
{ k: 'effectif', v: '80 salariés' },
{ k: 'CA estimé', v: '8-12 M€' },
], result: '3 entreprises similaires trouvées · base actuarielle activée', durationMs: 1400 },
{ type: 'tool', name: 'Tarificateur Multirisque Pro v4.2', icon: 'calc', sub: 'Calcul de la prime', params: [
{ k: 'RC exploitation', v: '8 M€ — 1 240 €/an' },
{ k: 'Multirisque biens', v: '1.2 M€ — 2 180 €/an' },
{ k: 'Cyber risques', v: '500 K€ — 1 850 €/an' },
{ k: 'Pertes exploitation', v: '12 mois — 1 420 €/an' },
], result: 'Prime annuelle : 6 690 € HT', durationMs: 1800 },
{ type: 'text', content: "Voici la **proposition Calipso Multirisque Pro** que j'ai construite pour ce profil — équilibre entre couverture étendue et tarif compétitif sur le segment tech." },
{ type: 'card', kind: 'quote', data: {
title: 'Multirisque Pro · Tech 80 salariés',
rows: [
{ label: 'RC Exploitation 8 M€', value: '1 240 €' },
{ label: 'Multirisque biens 1,2 M€', value: '2 180 €' },
{ label: 'Cyber 500 K€ + assistance', value: '1 850 €' },
{ label: 'Pertes exploitation 12 mois', value: '1 420 €' },
],
total: '6 690 €',
totalLabel: 'Prime HT / an',
}
},
{ type: 'text', content: "Trois leviers d'optimisation possibles : franchise relevée à 2 500 € (-8%), exclusion data-center hors UE (-4%), ou pack 3 ans avec engagement (-12%). Veux-tu que je génère le PDF officiel et que je l'envoie au commercial ?" },
],
},
'leads': {
match: /lead|prospect|chaud|pipeline|opportunit/i,
events: [
{ type: 'thinking', text: 'Connexion au CRM et scoring des opportunités…', ms: 800 },
{ type: 'tool', name: 'CRM · Calipso', icon: 'crm', sub: 'Pipeline commercial · 7 jours', params: [
{ k: 'filtres', v: 'score > 70, stade ≥ qualification' },
{ k: 'commerciaux', v: 'tous · Île-de-France' },
], result: '47 opportunités scannées · 5 leads chauds identifiés', durationMs: 1300 },
{ type: 'tool', name: 'Recherche actualité', icon: 'search', sub: 'Signaux faibles & événements', params: [
{ k: 'sources', v: 'LinkedIn, BODACC, presse pro' },
], result: '12 signaux récents · 3 levées de fonds détectées', durationMs: 1100 },
{ type: 'text', content: "**5 leads chauds cette semaine** — classés par probabilité de signature × valeur annuelle estimée :" },
{ type: 'card', kind: 'leads', data: [
{ name: 'Margaux Lefèvre', co: 'Mistral Industries · 240 sal.', score: '94', tier: 'hot', signal: 'Levée 18M€' },
{ name: 'Karim Benali', co: 'Logitex Transport · flotte 80', score: '89', tier: 'hot', signal: 'RDV +1' },
{ name: 'Sophie Renaud', co: 'Bouygues Construction Sud', score: '82', tier: 'hot', signal: 'Devis ouvert 4×' },
{ name: 'Thomas Vidal', co: 'Capgemini Sud-Ouest', score: '76', tier: 'warm', signal: 'Renouvel. Q3' },
{ name: 'Léa Marchetti', co: 'Levain Boulangeries (12 pts)', score: '71', tier: 'warm', signal: 'Sinistre voisin' },
]
},
{ type: 'text', content: "Recommandation : appeler **Karim Benali aujourd'hui avant 17h** — il a un RDV concurrent demain et son devis flotte est prêt côté Calipso. Je peux préparer la note d'appel ?" },
],
},
'compare': {
match: /compar|axa|generali|allianz|concurr/i,
events: [
{ type: 'thinking', text: 'Comparaison des garanties sur la base produits…', ms: 900 },
{ type: 'tool', name: 'Base concurrentielle', icon: 'search', sub: 'AXA Pro · Generali Business', params: [
{ k: 'produit', v: 'RC Professionnelle' },
{ k: 'maj base', v: '14 avril 2026' },
], result: '23 critères analysés', durationMs: 1500 },
{ type: 'text', content: "**Comparatif RC Pro · Calipso vs AXA vs Generali** — sur le segment tech / conseil :" },
{ type: 'card', kind: 'compare', data: [
{ critere: 'Plafond standard', calipso: '8 M€', axa: '5 M€', gen: '6 M€' },
{ critere: 'Cyber inclus', calipso: '✓ 500K€', axa: '✗ option', gen: '✓ 250K€' },
{ critere: 'Délai indemnisation', calipso: '< 21j', axa: '< 30j', gen: '< 28j' },
{ critere: 'Prime indicative 80 sal.', calipso: '1 240 €', axa: '1 380 €', gen: '1 320 €' },
]
},
{ type: 'text', content: "Notre **avantage clé** : cyber natif et plafond supérieur à prix égal ou inférieur. Faiblesse : pas de RC Mandataire pour fonctions dirigeantes — on peut l'ajouter en option 380€/an. Tu veux le pitch deal-breaker à utiliser en RDV ?" },
],
},
'email': {
match: /email|relance|mail|message|courri/i,
events: [
{ type: 'thinking', text: 'Lecture de l\'historique et tonalité commerciale…', ms: 700 },
{ type: 'tool', name: 'CRM · Calipso', icon: 'crm', sub: 'Contexte du prospect', params: [
{ k: 'dernier contact', v: 'il y a 10 jours' },
{ k: 'stade', v: 'devis envoyé · ouvert 2×' },
{ k: 'persona', v: 'DAF · décision rationnelle' },
], result: 'Contexte récupéré', durationMs: 900 },
{ type: 'text', content: "Voici une **relance courte, valeur d'abord, sans pression** — adaptée au profil DAF :" },
{ type: 'card', kind: 'email', data: {
subject: 'Question rapide sur le devis Calipso',
body: `Bonjour Madame Renaud,\n\nJe reviens vers vous suite à notre échange du 18 avril sur la couverture multirisque pour vos 4 sites.\n\nDeux choses pourraient vous intéresser depuis :\n • Notre actuariat a affiné la tarification flotte → -7% sur la cotisation initiale\n • Un cas client comparable (BTP, 120 sal.) vient de signer — je peux partager la structure du contrat si utile\n\nUne fenêtre de 15 minutes mardi ou jeudi prochain ?\n\nBien cordialement,\nMarc Dupont · Calipso Assurances`
}
},
{ type: 'text', content: "Ton calibré pour un DAF : factuel, deux preuves concrètes, CTA simple. Je peux générer 2 variantes (plus directe / plus chaleureuse) ?" },
],
},
'default': {
match: /.*/,
events: [
{ type: 'thinking', text: 'Analyse de la demande…', ms: 800 },
{ type: 'tool', name: 'CRM · Calipso', icon: 'crm', sub: 'Recherche contextuelle', params: [
{ k: 'requête', v: 'analyse libre' },
], result: 'Contexte chargé', durationMs: 1200 },
{ type: 'text', content: "Bonne question. Voici comment je l'aborderais en m'appuyant sur les données Calipso :\n\n• **Phase 1 — qualification** : identifier le besoin réel derrière la demande\n• **Phase 2 — proposition** : construire une offre adaptée au risque et au budget\n• **Phase 3 — closing** : adresser les objections par la preuve (cas clients, indicateurs)\n\nVeux-tu que je creuse un de ces angles avec un cas concret ?" },
],
},
};
window.AAP_pickScenario = function(text) {
const S = window.AAP_SCENARIOS;
for (const key of Object.keys(S)) {
if (key === 'default') continue;
if (S[key].match.test(text)) return S[key];
}
return S.default;
};