// Exemplo de Dashboard de Investigação em Tempo Real // /app/investigations/[id]/page.tsx "use client" import { useEffect, useState } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Progress } from '@/components/ui/progress' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { AlertTriangle, TrendingUp, Users, Calendar, FileText, Activity, AlertCircle, CheckCircle, Brain, Search, BarChart3, FileWarning } from 'lucide-react' import { useInvestigation } from '@/hooks/useInvestigation' import { LineChart, Line, BarChart, Bar, PieChart, Pie, Cell, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, ScatterChart, Scatter } from 'recharts' // Cores para os gráficos const COLORS = ['#ef4444', '#f59e0b', '#10b981', '#3b82f6', '#8b5cf6'] // Mock de agentes trabalhando const AGENT_STATUS = { abaporu: { name: 'Abaporu', status: 'completed', message: 'Investigação orquestrada' }, zumbi: { name: 'Zumbi dos Palmares', status: 'working', message: 'Detectando anomalias...' }, anita: { name: 'Anita Garibaldi', status: 'waiting', message: 'Aguardando dados' }, tiradentes: { name: 'Tiradentes', status: 'waiting', message: 'Preparando relatório' } } export default function InvestigationDashboard({ params }: { params: { id: string } }) { const { investigation, error, isLoading } = useInvestigation(params.id) const [activeTab, setActiveTab] = useState('overview') // Simulação de progresso (em produção viria via SSE) const [progress, setProgress] = useState(0) const [findings, setFindings] = useState([]) useEffect(() => { const interval = setInterval(() => { setProgress(p => Math.min(p + 10, 100)) }, 2000) return () => clearInterval(interval) }, []) if (isLoading) { return (

Carregando investigação...

) } // Dados mock para visualização const priceAnomalies = [ { name: 'Esperado', value: 50000, actual: 50000 }, { name: 'Contrato A', value: 45000, actual: 150000 }, { name: 'Contrato B', value: 80000, actual: 85000 }, { name: 'Contrato C', value: 120000, actual: 380000 }, { name: 'Contrato D', value: 60000, actual: 62000 } ] const vendorConcentration = [ { name: 'Empresa XYZ Ltda', value: 45, contracts: 23 }, { name: 'ABC Comércio', value: 22, contracts: 15 }, { name: 'Tech Solutions', value: 18, contracts: 12 }, { name: 'Outros', value: 15, contracts: 28 } ] const temporalData = [ { month: 'Jan', value: 1200000 }, { month: 'Fev', value: 980000 }, { month: 'Mar', value: 1100000 }, { month: 'Abr', value: 950000 }, { month: 'Mai', value: 1050000 }, { month: 'Jun', value: 890000 }, { month: 'Jul', value: 920000 }, { month: 'Ago', value: 1080000 }, { month: 'Set', value: 1150000 }, { month: 'Out', value: 1320000 }, { month: 'Nov', value: 1890000 }, { month: 'Dez', value: 3200000 } // Pico suspeito ] const riskLevel = progress > 80 ? 'high' : progress > 50 ? 'medium' : 'low' const anomaliesCount = Math.floor(progress / 10) + 3 return (
{/* Header */}

Investigação #{params.id}

Ministério da Saúde • Janeiro a Dezembro 2024

{progress === 100 ? 'Concluída' : 'Em Andamento'}
{/* Progress Section */} {progress < 100 && (
Progresso da Investigação {progress}%
{/* Agentes Status */}
{Object.entries(AGENT_STATUS).map(([key, agent]) => (
{agent.name}
))}
)} {/* Risk Overview */}
Nível de Risco
{riskLevel === 'high' ? 'Alto' : riskLevel === 'medium' ? 'Médio' : 'Baixo'}

Baseado em {anomaliesCount} anomalias

Anomalias Detectadas
{anomaliesCount}

Em 342 contratos analisados

Valor em Risco
R$ 2,3M

Possível superfaturamento

Concentração
67%

Em 3 fornecedores principais

{/* Main Content Tabs */} Visão Geral Anomalias Fornecedores Linha do Tempo {/* Alertas Críticos */} Alerta Crítico Detectamos contratos com sobrepreço de até 300% acima da média de mercado. 3 fornecedores concentram 67% dos contratos, indicando possível cartelização. {/* Achados Principais */}
Principais Achados
  • Alto

    Sobrepreço Sistemático

    Equipamentos médicos com valores 200-300% acima do mercado

  • Médio

    Concentração de Fornecedores

    Empresa XYZ Ltda ganhou 45% dos contratos do período

  • Médio

    Gastos de Fim de Ano

    Dezembro concentrou 35% dos gastos anuais

Atividade dos Agentes
{Object.entries(AGENT_STATUS).map(([key, agent]) => (
{agent.status === 'completed' ? : agent.status === 'working' ? : }

{agent.name}

{agent.message}

))}
Anomalias de Preço Detectadas Comparação entre valores esperados e valores contratados
`R$ ${(value/1000).toFixed(0)}k`} /> `R$ ${(value/1000).toFixed(0)}k`} /> `R$ ${value.toLocaleString('pt-BR')}`} labelFormatter={(label) => `Contrato: ${label}`} /> {priceAnomalies.map((entry, index) => ( entry.value * 1.5 ? '#ef4444' : '#10b981' } /> ))} {/* Linha de referência diagonal */}
Concentração de Fornecedores Distribuição de contratos por fornecedor
`${value}%`} > {vendorConcentration.map((entry, index) => ( ))}

Detalhes dos Fornecedores

{vendorConcentration.map((vendor, index) => (

{vendor.name}

{vendor.contracts} contratos

30 ? 'destructive' : 'secondary'}> {vendor.value}%
))}
Evolução Temporal dos Gastos Análise mensal dos valores contratados
`R$ ${(value/1000000).toFixed(1)}M`} /> `R$ ${value.toLocaleString('pt-BR')}`} /> {temporalData.map((entry, index) => ( 2000000 ? '#ef4444' : '#3b82f6' } /> ))}
Padrão Suspeito Detectado Dezembro apresentou gastos 250% acima da média mensal, indicando possível tentativa de esgotar orçamento no fim do exercício.
{/* Action Buttons */} {progress === 100 && (
)}
) }