import React, { useState, useMemo } from 'react'; import { CheckCircle2, PieChart, FileText, ShieldCheck, Users, Send, BrainCircuit, ScanLine, LayoutDashboard, AlertCircle } from 'lucide-react'; // ========================================== // DONNÉES & CONFIGURATION // ========================================== const SUITE_PRICE_PER_FILE = 29; type UnitType = 'dossier' | 'expert'; interface Tool { id: string; label: string; category: string; desc: string; icon: React.ComponentType<{ size?: number; strokeWidth?: number }>; unit: UnitType; publicPrice: number; color: string; bg: string; } interface ToolResult extends Tool { volA: number; lineCostA: number; } type VolumeState = Record; // Données enrichies avec les descriptions const TOOLS_DATA: Tool[] = [ { id: 'mcf', label: 'MyCompanyFiles', category: 'Collecte & Flux', desc: 'Portail client sécurisé, zéro mail, application mobile.', icon: Users, unit: 'dossier', publicPrice: 2.0, color: 'text-orange-500', bg: 'bg-orange-50' }, { id: 'evoliz', label: 'Evoliz', category: 'Facturation & Gestion', desc: 'Facturation TPE/PME, préparation Facture Électronique (PDP).', icon: FileText, unit: 'dossier', publicPrice: 40.0, color: 'text-yellow-600', bg: 'bg-yellow-50' }, { id: 'chaintrust', label: 'Chaintrust', category: 'Automatisation Saisie', desc: 'OCR certifié et IA pour zéro intervention manuelle.', icon: ScanLine, unit: 'dossier', publicPrice: 20.0, color: 'text-indigo-600', bg: 'bg-indigo-50' }, { id: 'inqom', label: 'Inqom', category: 'Production Comptable', desc: 'IA générative, flux bancaires temps réel, production automatisée.', icon: BrainCircuit, unit: 'dossier', publicPrice: 20.0, color: 'text-purple-600', bg: 'bg-purple-50' }, { id: 'finthesis', label: 'Finthesis', category: 'Pilotage & Conseil', desc: 'Business Intelligence, prévisionnels et tableaux de bord dynamiques.', icon: PieChart, unit: 'dossier', publicPrice: 60.0, color: 'text-cyan-600', bg: 'bg-cyan-50' }, { id: 'kanta', label: 'Kanta', category: 'Conformité & LCB-FT', desc: 'Lutte Anti-Blanchiment, lettres de missions, conformité dossier.', icon: ShieldCheck, unit: 'expert', publicPrice: 91.66, // 1100 €/an ramené au mois color: 'text-pink-600', bg: 'bg-pink-50' }, { id: 'kinexo', label: 'Kinexo', category: 'Gestion Interne', desc: 'Suivi des temps, facturation cabinet et pilotage rentabilité.', icon: LayoutDashboard, unit: 'dossier', publicPrice: 2.68, color: 'text-emerald-600', bg: 'bg-emerald-50' }, { id: 'teledec', label: 'Teledec', category: 'Admin & Fiscal', desc: 'Télétransmission sécurisée des liasses fiscales et EDI.', icon: Send, unit: 'dossier', publicPrice: 5.0, // Estimation prix public si non inclus color: 'text-blue-600', bg: 'bg-blue-50' }, ]; // ========================================== // COMPOSANT PRINCIPAL // ========================================== export default function VismaSimulator() { // --- STATES --- const [totalFiles, setTotalFiles] = useState(500); const [volumes, setVolumes] = useState(() => { const initial: VolumeState = {}; const defaultFiles = 500; TOOLS_DATA.forEach(tool => { if (tool.unit === 'expert') { initial[tool.id] = 2; // 2 experts par défaut } else { initial[tool.id] = Math.floor(defaultFiles * 0.2); // 20% du parc équipé } }); return initial; }); // --- HANDLERS --- const handleTotalFilesChange = (value: string) => { const num = parseInt(value, 10); const safe = isNaN(num) || num < 0 ? 0 : num; setTotalFiles(safe); }; const handleVolumeChange = (id: string, value: string) => { const num = parseInt(value, 10); const safe = isNaN(num) || num < 0 ? 0 : num; setVolumes(prev => ({ ...prev, [id]: safe })); }; // --- CALCULS --- const results = useMemo(() => { let costA = 0; const costB = totalFiles * SUITE_PRICE_PER_FILE; const breakdown: ToolResult[] = TOOLS_DATA.map(tool => { const volA = volumes[tool.id] ?? 0; const lineCostA = volA * tool.publicPrice; costA += lineCostA; return { ...tool, volA, lineCostA }; }); const savings = costA - costB; const savingsPercent = costA > 0 ? (savings / costA) * 100 : 0; return { costA, costB, savings, savingsPercent, breakdown }; }, [totalFiles, volumes]); // --- FORMATTERS --- const formatEUR = (num: number) => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(num); // ========================================== // RENDER // ========================================== return (
{/* HEADER */}
Simulateur de Rentabilité Powered by Visma

La Suite Visma Expert

Comparez le coût de vos outils actuels versus l'offre unifiée à 29€/dossier incluant les 8 leaders du marché.

{/* KPI HEADERS */}
Coût par dossier
29 € /mois
{/* MAIN CONTENT */}
{/* GLOBAL INPUT CARD */}
handleTotalFilesChange(e.target.value)} className="w-full text-4xl font-bold text-slate-900 border-b-2 border-slate-200 focus:border-blue-600 outline-none py-2 bg-transparent transition-colors" placeholder="Ex: 500" /> dossiers

L'offre Suite Visma Expert s'applique à 100% du parc.

{/* RESULTS SUMMARY */}
{/* Scenario A Card */}
Coût Actuel (Estimé)
{formatEUR(results.costA)}{' '} /mois
Prix publics cumulés
{/* Scenario B Card */}
Avec Visma Expert
{formatEUR(results.costB)}{' '} /mois
Tout inclus, illimité
{/* SAVINGS BAR */}
Économie Potentielle = 0 ? 'text-green-600' : 'text-red-500' }`} > {results.savings >= 0 ? '+' : ''} {formatEUR(results.savings)} / mois
= 0 ? 'bg-green-500' : 'bg-red-400' }`} style={{ width: `${Math.min(Math.abs(results.savingsPercent), 100)}%` }} />
{results.savings > 0 && (

Vous économisez {Math.round(results.savingsPercent)}% sur votre budget logiciel global

)}
{/* COMPARISON TABLE */}
{/* Table Header */}
Les 8 Piliers de l'Écosystème
Votre Situation Actuelle
Suite Visma Expert
{results.breakdown.map((item) => (
{/* 1. TOOL DESCRIPTION (Left) */}

{item.label}

{item.category}

{item.desc}

{/* 2. SCENARIO A (Middle) */}
handleVolumeChange(item.id, e.target.value)} className="w-full text-center py-1 px-2 border border-slate-300 rounded-md text-slate-700 font-medium focus:border-red-400 focus:ring-2 focus:ring-red-100 outline-none transition-all" /> {item.unit === 'dossier' ? 'dossiers équipés' : 'licences experts'}
x {item.publicPrice}€
{formatEUR(item.lineCostA)}
{/* 3. SCENARIO B (Right) */}