From 9fd078e36f17e7494e1b0966819eaaa8f7e36f87 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Tue, 7 Jul 2026 20:18:01 +0200 Subject: [PATCH] =?UTF-8?q?feat(comunicacao-interna):=20pr=C3=A9-preenche?= =?UTF-8?q?=20endere=C3=A7o=20a=20partir=20da=20cl=C3=ADnica?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Perfil sem endereço próprio → GET /api/comunicacao sugere o endereço já cadastrado da clínica (só confirmar, não redigitar) + flag endereco_da_clinica. Modal mostra aviso "puxamos o endereço da clínica — é só conferir". Resolve a fricção do dono, cuja clínica já tem endereço. Co-Authored-By: Claude Opus 4.8 --- backend/server.js | 8 +++++++- frontend/components/ComunicacaoInternaModal.tsx | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/server.js b/backend/server.js index 597704a..d349c0e 100644 --- a/backend/server.js +++ b/backend/server.js @@ -7588,7 +7588,13 @@ app.get('/api/comunicacao/:usuarioId', authGuard, async (req, res) => { if (!(await podeEditarComunicacao(req.authUser.userId, alvo, clinicaId))) return res.status(403).json({ error: 'Sem permissão.' }); const { rows } = await pool.query('SELECT endereco, numeros, agenda, completo FROM pessoa_comunicacao WHERE usuario_id=$1 AND clinica_id=$2', [alvo, clinicaId]); const p = rows[0] || { endereco: {}, numeros: [], agenda: {}, completo: false }; - res.json({ usuario_id: alvo, clinica_id: clinicaId, ...p }); + // Perfil ainda sem endereço próprio → sugere o endereço da CLÍNICA (só confirmar, não redigitar). + let enderecoDaClinica = false; + if (!p.endereco || !p.endereco.cidade) { + const { rows: cr } = await pool.query('SELECT logradouro, numero, bairro, cidade, estado, cep FROM clinicas WHERE id=$1', [clinicaId]); + if (cr[0] && (cr[0].cidade || cr[0].logradouro)) { p.endereco = { ...cr[0], ...(p.endereco || {}) }; enderecoDaClinica = true; } + } + res.json({ usuario_id: alvo, clinica_id: clinicaId, ...p, endereco_da_clinica: enderecoDaClinica }); } catch (e) { res.status(500).json({ error: e.message }); } }); diff --git a/frontend/components/ComunicacaoInternaModal.tsx b/frontend/components/ComunicacaoInternaModal.tsx index 04d8b61..1bea337 100644 --- a/frontend/components/ComunicacaoInternaModal.tsx +++ b/frontend/components/ComunicacaoInternaModal.tsx @@ -77,6 +77,7 @@ export const ComunicacaoInternaModal: React.FC<{ const [endereco, setEndereco] = useState({}); const [numeros, setNumeros] = useState([]); const [agenda, setAgenda] = useState({}); + const [enderecoDaClinica, setEnderecoDaClinica] = useState(false); const load = useCallback(async () => { setLoading(true); @@ -87,6 +88,7 @@ export const ComunicacaoInternaModal: React.FC<{ setEndereco(d.endereco || {}); setNumeros(Array.isArray(d.numeros) ? d.numeros : []); setAgenda(d.agenda || {}); + setEnderecoDaClinica(!!d.endereco_da_clinica); } catch { /* mantém vazio */ } finally { setLoading(false); } }, [usuarioId, clinicaId]); useEffect(() => { load(); }, [load]); @@ -158,7 +160,8 @@ export const ComunicacaoInternaModal: React.FC<{ {/* ── Endereço ── */}
-

Endereço

+

Endereço

+ {enderecoDaClinica &&

Puxamos o endereço da clínica — é só conferir (ou ajustar, se o seu for diferente).

}