// Bellia — Module Ventes (variante B : tabs pill + hero KPI + tableau) const VENTES_TABS = [ { id: 'ca', label: 'CA Général' }, { id: 'panier', label: 'Panier moyen' }, { id: 'modes', label: 'Modes de vente' }, { id: 'regl', label: 'Modes de règlement' }, { id: 'rep', label: 'Répartition' }, { id: 'z', label: 'Ticket Z' }, { id: 'tva', label: 'TVA collectée' }, ]; const VENTES_SERVICES = [ { id: 'dej', name: 'Déjeuner', tickets: 1480, panier: 28.50, ca: 42180, evol: 8.4, color: C.orange }, { id: 'din', name: 'Dîner', tickets: 1120, panier: 45.80, ca: 51296, evol: 6.2, color: C.orangeDp }, { id: 'brn', name: 'Brunch week-end', tickets: 380, panier: 32.10, ca: 12198, evol: 14.7, color: C.warn }, ]; const VentesScreen = ({ onNav }) => { const [tab, setTab] = React.useState('ca'); const [range, setRange] = React.useState('30j'); return (
}>Filtres }>Exporter } /> {/* ====== TABS PILL ====== */}
{VENTES_TABS.map(t => { const active = tab === t.id; return ( ); })}
{[{ id: '7j', l: '7 jours' }, { id: '30j', l: '30 jours' }, { id: 'ytd', l: 'YTD' }].map(p => ( ))}
{/* ====== HERO + KPIs ====== */}
{/* Hero: CA TTC */}
CA TTC · MAI 2026
{eur(MONTH_TOTAL)}
}>+8,1 % vs N-1
Objectif {eur(92000)} · {pct((MONTH_TOTAL / 92000) * 100, 0)} atteint
{/* 4 KPI verticaux compactés en grille */}
INSIGHT BELLIA IA
Les dîners du jeudi génèrent {pct(18)} de panier en plus depuis 3 semaines.
{/* ====== ROW 2 — bar chart + breakdown ====== */}
CA par jour — 14 derniers jours
Barres = 2026, ombres = 2025
Tous services Tous modes
Top 5 produits
{[ { n: 'Burger maison', c: 9842, pct: 78 }, { n: 'Salade de saison', c: 6210, pct: 49 }, { n: 'Pavé de saumon', c: 5680, pct: 45 }, { n: 'Tartare de bœuf', c: 4920, pct: 39 }, { n: 'Tiramisu maison', c: 3180, pct: 25 }, ].map((p, i) => (
{p.n}
{eur(p.c)}
))}
{/* ====== TABLE — détail par service ====== */}
Ventilation par service
3 services · 2 980 tickets au total
Personnaliser les colonnes }>CSV
{['Service', 'Tickets', 'Panier moyen', 'CA TTC', 'Évolution N-1', 'Part'].map((h, i) => ( ))} {VENTES_SERVICES.map((s, i) => { const total = VENTES_SERVICES.reduce((a, x) => a + x.ca, 0); const part = (s.ca / total) * 100; return ( ); })}
{h}
{s.name}
{i === 0 ? '12 h – 14 h 30' : i === 1 ? '19 h – 22 h 30' : 'sam. dim. 10 h – 15 h'}
{num(s.tickets)} {eur(s.panier, 2)} {eur(s.ca)} {signedPct(s.evol)}
{pct(part, 0)}
TOTAL 2 980 {eur(35.27, 2)} {eur(105674)} +8,1 % 100 %
); }; const KpiCompact = ({ label, value, delta, deltaKind }) => (
{label.toUpperCase()}
{value}
{delta}
); window.VentesScreen = VentesScreen;