From a2d90bf68f6c4f0c51d280d24ef03e115e23cb67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gustavo?= <166467972+JoaoGustavo-dev@users.noreply.github.com> Date: Thu, 30 Oct 2025 18:21:30 -0300 Subject: [PATCH] fix-report-page --- susconecta/app/paciente/page.tsx | 60 ++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/susconecta/app/paciente/page.tsx b/susconecta/app/paciente/page.tsx index eb631df..6822431 100644 --- a/susconecta/app/paciente/page.tsx +++ b/susconecta/app/paciente/page.tsx @@ -730,6 +730,60 @@ export default function PacientePage() { const [loadingReports, setLoadingReports] = useState(false) const [reportsError, setReportsError] = useState(null) const [reportDoctorName, setReportDoctorName] = useState(null) + const [doctorsMap, setDoctorsMap] = useState>({}) + + // Helper to derive a human-friendly title for a report/laudo + const reportTitle = (rep: any, preferDoctorName?: string | null) => { + if (!rep) return 'Laudo' + // prefer a resolved doctor name when we have a map + try { + const maybeId = rep?.doctor_id ?? rep?.created_by ?? rep?.doctor ?? null + if (maybeId) { + const doc = doctorsMap[String(maybeId)] + if (doc) { + const name = doc.full_name || doc.name || doc.fullName || doc.doctor_name || null + if (name) return String(name) + } + } + } catch (e) { + // ignore + } + // Try common fields that may contain the doctor's/author name first + const tryKeys = [ + 'doctor_name', 'doctor_full_name', 'doctorFullName', 'doctorName', + 'requested_by_name', 'requested_by', 'requester_name', 'requester', + 'created_by_name', 'created_by', 'executante', 'executante_name', + 'title', 'name', 'report_name', 'report_title' + ] + for (const k of tryKeys) { + const v = rep[k] + if (v !== undefined && v !== null && String(v).trim() !== '') return String(v) + } + if (preferDoctorName) return preferDoctorName + return 'Laudo' + } + + // When reports are loaded, try to resolve doctor records for display + useEffect(() => { + let mounted = true + if (!reports || !Array.isArray(reports) || reports.length === 0) return + ;(async () => { + try { + const ids = Array.from(new Set(reports.map((r: any) => r.doctor_id || r.created_by || r.doctor).filter(Boolean).map(String))) + if (ids.length === 0) return + const docs = await buscarMedicosPorIds(ids).catch(() => []) + if (!mounted) return + const map: Record = {} + for (const d of docs || []) { + if (d && d.id !== undefined && d.id !== null) map[String(d.id)] = d + } + setDoctorsMap(map) + } catch (e) { + // ignore resolution errors + } + })() + return () => { mounted = false } + }, [reports]) useEffect(() => { let mounted = true @@ -789,11 +843,11 @@ export default function PacientePage() {
{reportsError}
) : (!reports || reports.length === 0) ? (
Nenhum laudo encontrado para este paciente.
- ) : ( + ) : ( reports.map((r) => (
-
{r.title || r.name || r.report_name || 'Laudo'}
+
{reportTitle(r)}
Data: {new Date(r.report_date || r.created_at || Date.now()).toLocaleDateString('pt-BR')}
@@ -813,7 +867,7 @@ export default function PacientePage() { {selectedReport && ( <>
-
{selectedReport.title || selectedReport.name || 'Laudo'}
+
{reportTitle(selectedReport, reportDoctorName)}
Data: {new Date(selectedReport.report_date || selectedReport.created_at || Date.now()).toLocaleDateString('pt-BR')}
{reportDoctorName &&
Profissional: {reportDoctorName}
}