import { useState } from "react"; import { BrowserFrame } from "@/components/Browser/BrowserFrame"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { useToast } from "@/hooks/use-toast"; import { Progress } from "@/components/ui/progress"; import { Star, ThumbsUp, ThumbsDown, Minus, Send, Plus, Edit, Eye, RefreshCw, TrendingUp, TrendingDown, Users, MessageSquare, BarChart3, Calendar } from "lucide-react"; type TabType = "dashboard" | "surveys" | "responses" | "analytics"; interface Survey { id: number; name: string; type: string; status: string; createdAt: string; sentTo: number; responses: number; projectName?: string; } interface SurveyResponse { id: number; surveyId: number; surveyName: string; customerName: string; projectName: string; score: number; category: string; feedback?: string; respondedAt: string; } const mockSurveys: Survey[] = [ { id: 1, name: "NPS Pós-Projeto Q4 2025", type: "NPS", status: "ativo", createdAt: "2025-10-01", sentTo: 25, responses: 18, projectName: "Geral" }, { id: 2, name: "Satisfação - Monitoramento Semestral", type: "CSAT", status: "ativo", createdAt: "2025-12-01", sentTo: 12, responses: 8, projectName: "Área Industrial ABC" }, { id: 3, name: "NPS Pós-Projeto Q3 2025", type: "NPS", status: "encerrado", createdAt: "2025-07-01", sentTo: 30, responses: 22, projectName: "Geral" }, { id: 4, name: "Satisfação - Investigação Confirmatória", type: "CSAT", status: "encerrado", createdAt: "2025-09-15", sentTo: 5, responses: 5, projectName: "Posto XYZ" }, ]; const mockResponses: SurveyResponse[] = [ { id: 1, surveyId: 1, surveyName: "NPS Pós-Projeto Q4 2025", customerName: "Petrobras", projectName: "Monitoramento Refinaria", score: 10, category: "promotor", feedback: "Excelente atendimento e qualidade técnica. Laudos entregues no prazo.", respondedAt: "2025-12-15" }, { id: 2, surveyId: 1, surveyName: "NPS Pós-Projeto Q4 2025", customerName: "Shell", projectName: "Investigação Posto Centro", score: 9, category: "promotor", feedback: "Equipe muito profissional. Comunicação clara durante todo o projeto.", respondedAt: "2025-12-14" }, { id: 3, surveyId: 1, surveyName: "NPS Pós-Projeto Q4 2025", customerName: "Raízen", projectName: "Remediação Base", score: 8, category: "neutro", feedback: "Bom trabalho, mas prazo poderia ser menor.", respondedAt: "2025-12-13" }, { id: 4, surveyId: 1, surveyName: "NPS Pós-Projeto Q4 2025", customerName: "Ipiranga", projectName: "Due Diligence Imóvel", score: 7, category: "neutro", respondedAt: "2025-12-12" }, { id: 5, surveyId: 1, surveyName: "NPS Pós-Projeto Q4 2025", customerName: "Vale", projectName: "Licenciamento Mineração", score: 6, category: "detrator", feedback: "Atrasos na entrega dos relatórios.", respondedAt: "2025-12-11" }, { id: 6, surveyId: 2, surveyName: "Satisfação - Monitoramento Semestral", customerName: "Área Industrial ABC", projectName: "Monitoramento Trimestral", score: 9, category: "promotor", feedback: "Equipe sempre disponível. Resultados confiáveis.", respondedAt: "2025-12-20" }, { id: 7, surveyId: 2, surveyName: "Satisfação - Monitoramento Semestral", customerName: "Área Industrial ABC", projectName: "Monitoramento Trimestral", score: 10, category: "promotor", respondedAt: "2025-12-19" }, { id: 8, surveyId: 2, surveyName: "Satisfação - Monitoramento Semestral", customerName: "Área Industrial ABC", projectName: "Monitoramento Trimestral", score: 8, category: "neutro", feedback: "Satisfeito com os serviços.", respondedAt: "2025-12-18" }, ]; export default function NPSSurvey() { const [activeTab, setActiveTab] = useState("dashboard"); const [showSurveyDialog, setShowSurveyDialog] = useState(false); const [showResponseDialog, setShowResponseDialog] = useState(false); const [selectedResponse, setSelectedResponse] = useState(null); const { toast } = useToast(); const getScoreBadge = (score: number) => { if (score >= 9) { return Promotor; } else if (score >= 7) { return Neutro; } else { return Detrator; } }; const getStatusBadge = (status: string) => { const colors: Record = { ativo: "bg-green-500", encerrado: "bg-gray-500", rascunho: "bg-yellow-500", }; const labels: Record = { ativo: "Ativo", encerrado: "Encerrado", rascunho: "Rascunho", }; return ( {labels[status] || status} ); }; const promoters = mockResponses.filter(r => r.score >= 9).length; const passives = mockResponses.filter(r => r.score >= 7 && r.score < 9).length; const detractors = mockResponses.filter(r => r.score < 7).length; const totalResponses = mockResponses.length; const npsScore = Math.round(((promoters - detractors) / totalResponses) * 100); const responseRate = mockSurveys.reduce((acc, s) => acc + s.responses, 0) / mockSurveys.reduce((acc, s) => acc + s.sentTo, 0) * 100; return (

NPS e Pesquisa de Satisfação

Medir e melhorar a experiência do cliente

setActiveTab(v as TabType)}> Dashboard Pesquisas Respostas Análises
NPS Score
= 50 ? "text-green-600" : npsScore >= 0 ? "text-yellow-600" : "text-red-600"}`}> {npsScore}

{npsScore >= 70 ? "Excelente" : npsScore >= 50 ? "Muito Bom" : npsScore >= 0 ? "Bom" : "Precisa Melhorar"}

Taxa de Resposta
{responseRate.toFixed(0)}%

{totalResponses} respostas recebidas

Promotores
{promoters}

{((promoters/totalResponses)*100).toFixed(0)}% do total

Detratores
{detractors}

{((detractors/totalResponses)*100).toFixed(0)}% do total

Distribuição de Scores Promotores vs Neutros vs Detratores
Promotores (9-10) {promoters}
Neutros (7-8) {passives}
Detratores (0-6) {detractors}
Últimos Feedbacks Comentários mais recentes dos clientes
{mockResponses.filter(r => r.feedback).slice(0, 4).map(response => (
{response.customerName} {getScoreBadge(response.score)}

{response.feedback}

))}

Pesquisas de Satisfação

Nome Tipo Projeto Enviados Respostas Taxa Status Ações {mockSurveys.map((survey) => ( {survey.name} {survey.type} {survey.projectName} {survey.sentTo} {survey.responses} {((survey.responses/survey.sentTo)*100).toFixed(0)}% {getStatusBadge(survey.status)}
{survey.status === "ativo" && ( )}
))}

Respostas Recebidas

{mockResponses.length} respostas
Cliente Projeto Pesquisa Score Categoria Data Ações {mockResponses.map((response) => ( {response.customerName} {response.projectName} {response.surveyName}
= 9 ? "text-green-500" : response.score >= 7 ? "text-yellow-500" : "text-red-500"}`} /> {response.score}
{getScoreBadge(response.score)} {new Date(response.respondedAt).toLocaleDateString("pt-BR")}
))}

Análises e Tendências

Evolução do NPS Histórico trimestral
Q4 2025 {npsScore}
Q3 2025 42
Q2 2025 35
Q1 2025 28
+{npsScore - 28} pontos no ano

Excelente evolução!

NPS por Tipo de Serviço Performance por categoria
Monitoramento 72
Investigação 65
Remediação 45
Due Diligence 52
Licenciamento 38
Principais Pontos de Melhoria Baseado nos feedbacks dos detratores
Prazo de Entrega

30% dos detratores mencionam atrasos nas entregas

Comunicação

20% pedem mais atualizações durante os projetos

Custo

15% consideram os valores acima do esperado

Criar Nova Pesquisa