'use client' import React, { useState, useEffect, useCallback } from 'react' import { API, AuditFinding, CAPA, InternalAudit } from '../_types' import { EmptyState, LoadingSpinner, StatCard, StatusBadge } from './shared' // ============================================================================= // TAB: AUDITS (Internal Audits + Findings + CAPA) // ============================================================================= export function AuditsTab() { const [audits, setAudits] = useState([]) const [findings, setFindings] = useState([]) const [capas, setCAPAs] = useState([]) const [loading, setLoading] = useState(true) const [subTab, setSubTab] = useState<'audits' | 'findings' | 'capa'>('audits') const load = useCallback(async () => { setLoading(true) try { const [aRes, fRes, cRes] = await Promise.all([ fetch(`${API}/internal-audits`), fetch(`${API}/findings`), fetch(`${API}/capa`), ]) if (aRes.ok) { const d = await aRes.json(); setAudits(d.audits || []) } if (fRes.ok) { const d = await fRes.json(); setFindings(d.findings || []) } if (cRes.ok) { const d = await cRes.json(); setCAPAs(d.actions || []) } } catch { /* ignore */ } setLoading(false) }, []) useEffect(() => { load() }, [load]) if (loading) return const openFindings = findings.filter(f => f.status !== 'closed') const majors = findings.filter(f => f.finding_type === 'major') return (
{/* Stats */}
0 ? 'red' : 'green'} /> 0 ? 'red' : 'green'} />
{/* Sub-tabs */}
{(['audits', 'findings', 'capa'] as const).map(t => ( ))}
{subTab === 'audits' && (
{audits.length === 0 ? : audits.map(a => (
{a.audit_id} {a.title}
Typ: {a.audit_type} Datum: {new Date(a.planned_date).toLocaleDateString('de-DE')} Auditor: {a.lead_auditor} Findings: {a.total_findings || 0} (Major: {a.major_findings || 0}, Minor: {a.minor_findings || 0})
{a.audit_conclusion && (

{a.audit_conclusion}

)}
))}
)} {subTab === 'findings' && (
{findings.length === 0 ? : findings.map(f => (
{f.finding_id} {f.finding_type.toUpperCase()} {f.title} {f.is_blocking && Blockiert}

{f.description}

ISO: {f.iso_chapter} Verantwortlich: {f.owner} Auditor: {f.auditor} {f.due_date && Frist: {new Date(f.due_date).toLocaleDateString('de-DE')}}
))}
)} {subTab === 'capa' && (
{capas.length === 0 ? : capas.map(c => (
{c.capa_id} {c.capa_type === 'corrective' ? 'Korrektur' : 'Vorbeugung'} {c.title}
Zustaendig: {c.assigned_to} Ziel: {new Date(c.planned_completion).toLocaleDateString('de-DE')} {c.actual_completion && Abgeschlossen: {new Date(c.actual_completion).toLocaleDateString('de-DE')}} {c.effectiveness_verified !== null && ( Wirksamkeit: {c.effectiveness_verified ? 'Bestaetigt' : 'Nicht bestaetigt'} )}
))}
)}
) }