Files
agenciapsilmno/src/navigation/menus/clinic.menu.js
T
Leonardo 75e67eae5d docs/templates: move pra Configurações (3 layouts)
Templates de documentos sao "setup", nao operacao diaria — deveriam
viver em Configuracoes, nao no menu de Documentos do paciente.

Mudancas:

1. Melissa — melissaConfigGrupos.js ganha grupo "Documentos" com
   1 item "Modelos de documentos" -> slug `documentos-templates`
   (pagina nativa MelissaDocumentosTemplates ja existe + ja esta
   wired no MelissaLayout linha 2896).

2. Rail/Classic — routes.configs.js ganha rota
   /configuracoes/documentos/templates (name=ConfiguracoesDocumentos
   Templates) apontando pro mesmo DocumentTemplatesPage.vue.

3. Rotas antigas removidas — routes.therapist.js e routes.clinic.js
   nao tem mais /documents/templates nem nomes de rota
   therapist-documents-templates / admin-documents-templates.
   URLs antigas dao 404 (decisao do user — limpa).

4. ConfiguracoesPage (sidebar Rail/Classic) ganha grupo
   "Documentos" antes do "Empresa & Plataforma" com item "Modelos
   de documentos".

5. Menus de pacientes (therapist.menu + clinic.menu) NAO tem mais
   "Templates" — caminho de acesso e Configuracoes.

6. pagesIndex.js (busca global) atualizado: novo path, novos
   keywords (recibo, atestado, laudo, tcle, lgpd, consent), roles
   ['therapist','admin'].

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 16:11:33 -03:00

131 lines
5.4 KiB
JavaScript

/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/navigation/menus/clinic.menu.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
export default function adminMenu(ctx = {}) {
const menu = [
{
label: 'Clínica',
items: [
// ✅ usar name real da rota (evita /admin cair em redirect estranho)
{ label: 'Dashboard', icon: 'pi pi-fw pi-home', to: { name: 'admin.dashboard' } },
{
label: 'Agenda da Clínica',
icon: 'pi pi-fw pi-calendar',
to: { name: 'admin-agenda-clinica' },
feature: 'agenda.view',
badgeKey: 'agendaHoje'
},
{
label: 'Recorrências',
icon: 'pi pi-fw pi-refresh',
to: { name: 'admin-agenda-recorrencias' },
feature: 'agenda.view'
},
// ✅ Compromissos determinísticos (tipos)
{
label: 'Compromissos',
icon: 'pi pi-fw pi-clock',
to: { name: 'admin-agenda-compromissos' },
feature: 'agenda.view'
}
]
},
// CRM de conversas / WhatsApp
{
label: 'Conversas',
icon: 'pi pi-fw pi-comments',
to: { name: 'admin-conversas' },
badgeKey: 'conversasUnread'
},
// ✅ SEM IF: sempre existe, só fica visível quando a feature estiver ligada
{
label: 'Pacientes',
visible: () => {
// 1) enquanto tenant/features estão carregando, NÃO some (evita piscar ao trocar de aba)
if (ctx?.tenantLoading?.()) return true;
if (ctx?.tenantFeaturesLoading?.()) return true;
// 2) quando estabilizou, aí sim decide pela feature
return !!ctx?.tenantFeatureEnabled?.('patients');
},
items: [
// ✅ usar name real das rotas (você já tem todas no routes.clinic.js)
{ label: 'Lista de Pacientes', icon: 'pi pi-fw pi-users', to: { name: 'admin-pacientes' }, quickCreate: true, quickCreateRoute: 'admin-pacientes-cadastro', quickCreateLinkTo: { name: 'admin-pacientes-link-externo' } },
{ label: 'Grupos', icon: 'pi pi-fw pi-sitemap', to: { name: 'admin-pacientes-grupos' } },
{ label: 'Tags', icon: 'pi pi-fw pi-tags', to: { name: 'admin-pacientes-tags' } },
{ label: 'Médicos & Referências', icon: 'pi pi-fw pi-heart', to: { name: 'admin-pacientes-medicos' } },
{ label: 'Link Externo', icon: 'pi pi-fw pi-link', to: { name: 'admin-pacientes-link-externo' } },
{ label: 'Cadastros recebidos', icon: 'pi pi-inbox', to: { name: 'admin-pacientes-recebidos' }, badgeKey: 'cadastrosRecebidos' }
// "Templates de Documentos" movido pra Configurações
]
},
{
label: 'Gestão',
items: [
{ label: 'Profissionais', icon: 'pi pi-fw pi-id-card', to: { name: 'admin-clinic-professionals' } },
{
label: 'Tipos de Clínicas',
icon: 'pi pi-fw pi-sliders-h',
to: { name: 'admin-clinic-features' },
visible: () => {
if (ctx?.tenantLoading?.()) return true; // ← true durante loading (evita piscar)
const role = ctx?.role?.();
return role === 'clinic_admin'; // tenant_admin normaliza para clinic_admin
}
},
{ label: 'Meu plano', icon: 'pi pi-fw pi-credit-card', to: { name: 'admin-meu-plano' } }
]
},
{
label: 'Financeiro',
items: [{ label: 'Cobranças', icon: 'pi pi-fw pi-wallet', to: { name: 'admin-financeiro' } }]
},
{
label: 'Sistema',
items: [
{ label: 'Meu Perfil', icon: 'pi pi-fw pi-user', to: '/account/profile' },
{ label: 'Meu Negócio', icon: 'pi pi-fw pi-building', to: '/account/negocio' },
{ label: 'Segurança', icon: 'pi pi-fw pi-shield', to: { name: 'admin-settings-security' } },
{
label: 'Agendamento Online (PRO)',
icon: 'pi pi-fw pi-calendar-plus',
to: { name: 'admin-online-scheduling' },
feature: 'online_scheduling.manage',
proBadge: true
},
{
label: 'Agendamentos Recebidos',
icon: 'pi pi-fw pi-inbox',
to: { name: 'admin-agendamentos-recebidos' },
feature: 'online_scheduling.manage',
proBadge: true,
badgeKey: 'agendamentosRecebidos'
}
]
}
];
return menu;
}