/* * ============================================================================= * VibeQuant (vquant) — AI-Powered Financial Intelligence Platform * ----------------------------------------------------------------------------- * File: client/src/components/explore/analyst-view.tsx * * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * Website: https://www.spboucher.ai * Demo: https://www.vquant.ai * License: MIT (see LICENSE) * * Copyright © 2026 Simon-Pierre Boucher. All rights reserved. * ============================================================================= */ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { TrendingUp, TrendingDown, Award, Target, DollarSign, Users } from "lucide-react"; interface AnalystEstimate { date: string; symbol: string; estimatedRevenueAvg: number; estimatedRevenueLow: number; estimatedRevenueHigh: number; estimatedEbitdaAvg: number; estimatedEbitdaLow: number; estimatedEbitdaHigh: number; estimatedEbitAvg: number; estimatedEbitLow: number; estimatedEbitHigh: number; estimatedNetIncomeAvg: number; estimatedNetIncomeLow: number; estimatedNetIncomeHigh: number; estimatedSgaExpenseAvg: number; estimatedSgaExpenseLow: number; estimatedSgaExpenseHigh: number; estimatedEpsAvg: number; estimatedEpsLow: number; estimatedEpsHigh: number; numberAnalystEstimatedRevenue: number; numberAnalystsEstimatedEps: number; } interface DividendData { date: string; label: string; adjDividend: number; dividend: number; recordDate: string; paymentDate: string; declarationDate: string; } interface AnalystViewProps { analystEstimates?: AnalystEstimate[]; dividends?: DividendData[]; } export function AnalystView({ analystEstimates, dividends }: AnalystViewProps) { const formatCurrency = (value: number) => { if (!value) return "N/A"; const absValue = Math.abs(value); if (absValue >= 1e12) return `$${(value / 1e12).toFixed(2)}T`; if (absValue >= 1e9) return `$${(value / 1e9).toFixed(2)}B`; if (absValue >= 1e6) return `$${(value / 1e6).toFixed(2)}M`; if (absValue >= 1e3) return `$${(value / 1e3).toFixed(2)}K`; return `$${value.toFixed(2)}`; }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString('fr-FR', { year: 'numeric', month: 'short', day: 'numeric' }); }; const estimateRows = [ { label: "Revenu", avgKey: "estimatedRevenueAvg", lowKey: "estimatedRevenueLow", highKey: "estimatedRevenueHigh", analystKey: "numberAnalystEstimatedRevenue", isCurrency: true }, { label: "EBITDA", avgKey: "estimatedEbitdaAvg", lowKey: "estimatedEbitdaLow", highKey: "estimatedEbitdaHigh", isCurrency: true }, { label: "EBIT", avgKey: "estimatedEbitAvg", lowKey: "estimatedEbitLow", highKey: "estimatedEbitHigh", isCurrency: true }, { label: "Revenu Net", avgKey: "estimatedNetIncomeAvg", lowKey: "estimatedNetIncomeLow", highKey: "estimatedNetIncomeHigh", isCurrency: true }, { label: "Dépenses SG&A", avgKey: "estimatedSgaExpenseAvg", lowKey: "estimatedSgaExpenseLow", highKey: "estimatedSgaExpenseHigh", isCurrency: true }, { label: "BPA", avgKey: "estimatedEpsAvg", lowKey: "estimatedEpsLow", highKey: "estimatedEpsHigh", analystKey: "numberAnalystsEstimatedEps", isEPS: true }, ]; return (
Aucune estimation d'analyste disponible
Cette entreprise ne verse pas de dividendes