diff --git a/susconecta/app/(main-routes)/pacientes/layout.tsx b/susconecta/app/(main-routes)/pacientes/layout.tsx
new file mode 100644
index 0000000..4e9bd5c
--- /dev/null
+++ b/susconecta/app/(main-routes)/pacientes/layout.tsx
@@ -0,0 +1,11 @@
+import type { ReactNode } from "react";
+import { ChatWidget } from "@/components/features/pacientes/chat-widget";
+
+export default function PacientesLayout({ children }: { children: ReactNode }) {
+ return (
+ <>
+ {children}
+
+ >
+ );
+}
diff --git a/susconecta/app/laudos-editor/page.tsx b/susconecta/app/laudos-editor/page.tsx
index 04629ec..52bd823 100644
--- a/susconecta/app/laudos-editor/page.tsx
+++ b/susconecta/app/laudos-editor/page.tsx
@@ -5,7 +5,7 @@ import { useRouter } from 'next/navigation';
import ProtectedRoute from '@/components/shared/ProtectedRoute';
import { useAuth } from '@/hooks/useAuth';
import { useToast } from '@/hooks/use-toast';
-import { listarPacientes, buscarMedicos } from '@/lib/api';
+import { listarPacientes, buscarMedicos, getUserInfo } from '@/lib/api';
import { useReports } from '@/hooks/useReports';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
@@ -186,25 +186,49 @@ export default function LaudosEditorPage() {
// Se já temos um nome razoável, não sobrescrever
if (solicitanteNome && solicitanteNome.trim().length > 1) return;
if (!user) return;
- // Buscar médicos por email (buscarMedicos aceita termos com @ e faz a busca por email)
- if (user.email && user.email.includes('@')) {
- const docs = await buscarMedicos(user.email).catch(() => []);
+
+ // First try: query doctors index with any available identifier (email, id or username)
+ try {
+ const term = (user.email && user.email.trim()) || user.name || user.id || '';
+ if (term && term.length > 1) {
+ const docs = await buscarMedicos(term).catch(() => []);
+ if (!mounted) return;
+ if (Array.isArray(docs) && docs.length > 0) {
+ const d = docs[0];
+ if (d && (d.full_name || (d as any).nome)) {
+ setSolicitanteNome((d.full_name as string) || ((d as any).nome as string) || user.name || user.email || '');
+ setSolicitanteId(user.id || solicitanteId);
+ return;
+ }
+ }
+ }
+ } catch (err) {
+ // non-fatal, continue to next fallback
+ }
+
+ // Second try: fetch consolidated user-info (may contain profile.full_name)
+ try {
+ const info = await getUserInfo().catch(() => null);
if (!mounted) return;
- if (Array.isArray(docs) && docs.length > 0) {
- const d = docs[0];
- // Preferir full_name do médico quando disponível
- if (d && (d.full_name || (d as any).nome)) {
- setSolicitanteNome((d.full_name as string) || ((d as any).nome as string) || user.name || user.email || '');
+ if (info && (info.profile as any)?.full_name) {
+ const full = (info.profile as any).full_name as string;
+ if (full && full.trim().length > 1) {
+ setSolicitanteNome(full);
+ setSolicitanteId(user.id || solicitanteId);
return;
}
}
+ } catch (err) {
+ // ignore and fallback
}
- // Fallbacks: usar user.name se existir; caso contrário, email completo
+ // Final fallback: use name from auth user or email/username
setSolicitanteNome(user.name || user.email || '');
+ setSolicitanteId(user.id || solicitanteId);
} catch (err) {
// em caso de erro, manter o fallback
setSolicitanteNome(user?.name || user?.email || '');
+ setSolicitanteId(user?.id || solicitanteId);
}
}
@@ -480,15 +504,9 @@ export default function LaudosEditorPage() {
)}
- {/* Solicitante e Prazo */}
+ {/* Prazo */}
{pacienteSelecionado && (
-
-
-
-
-
+