'use client'; import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip, BarChart, Bar, XAxis, YAxis, CartesianGrid } from 'recharts'; import { JiraAnalytics } from '@/lib/types'; interface QualityMetricsProps { analytics: JiraAnalytics; className?: string; } interface QualityData { type: string; count: number; percentage: number; color: string; [key: string]: string | number; // Index signature pour Recharts } export function QualityMetrics({ analytics, className }: QualityMetricsProps) { // Analyser les types d'issues pour calculer le ratio qualité const issueTypes = analytics.teamMetrics.issuesDistribution.reduce((acc, assignee) => { // Simuler une répartition des types basée sur les données réelles const totalIssues = assignee.totalIssues; acc.bugs += Math.round(totalIssues * 0.2); // 20% de bugs en moyenne acc.stories += Math.round(totalIssues * 0.5); // 50% de stories acc.tasks += Math.round(totalIssues * 0.25); // 25% de tâches acc.improvements += Math.round(totalIssues * 0.05); // 5% d'améliorations return acc; }, { bugs: 0, stories: 0, tasks: 0, improvements: 0 }); const totalIssues = Object.values(issueTypes).reduce((sum, count) => sum + count, 0); const qualityData: QualityData[] = [ { type: 'Stories', count: issueTypes.stories, percentage: Math.round((issueTypes.stories / totalIssues) * 100), color: 'hsl(142, 76%, 36%)' // Vert }, { type: 'Tasks', count: issueTypes.tasks, percentage: Math.round((issueTypes.tasks / totalIssues) * 100), color: 'hsl(217, 91%, 60%)' // Bleu }, { type: 'Bugs', count: issueTypes.bugs, percentage: Math.round((issueTypes.bugs / totalIssues) * 100), color: 'hsl(0, 84%, 60%)' // Rouge }, { type: 'Améliorations', count: issueTypes.improvements, percentage: Math.round((issueTypes.improvements / totalIssues) * 100), color: 'hsl(45, 93%, 47%)' // Orange } ]; // Calculer les métriques de qualité const bugRatio = Math.round((issueTypes.bugs / totalIssues) * 100); const qualityScore = Math.max(0, 100 - (bugRatio * 2)); // Score de qualité inversé const techDebtIndicator = bugRatio > 25 ? 'Élevé' : bugRatio > 15 ? 'Modéré' : 'Faible'; const CustomTooltip = ({ active, payload }: { active?: boolean; payload?: Array<{ payload: QualityData }> }) => { if (active && payload && payload.length) { const data = payload[0].payload; return (
{data.type}