75e67eae5d
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>
221 lines
8.8 KiB
JavaScript
221 lines
8.8 KiB
JavaScript
/*
|
|
|--------------------------------------------------------------------------
|
|
| Agência PSI
|
|
|--------------------------------------------------------------------------
|
|
| Criado e desenvolvido por Leonardo Nohama
|
|
|
|
|
| Tecnologia aplicada à escuta.
|
|
| Estrutura para o cuidado.
|
|
|
|
|
| Arquivo: src/router/routes.clinic.js
|
|
| Data: 2026
|
|
| Local: São Carlos/SP — Brasil
|
|
|--------------------------------------------------------------------------
|
|
| © 2026 — Todos os direitos reservados
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
import RouterPassthrough from '@/layout/RouterPassthrough.vue';
|
|
|
|
// ── Rotas fullscreen — ficam fora do AppLayout compartilhado ──────────────
|
|
export const clinicStandalone = [
|
|
{
|
|
path: '/admin/setup',
|
|
name: 'admin.setup',
|
|
component: () => import('@/features/setup/SetupWizardPage.vue'),
|
|
meta: { area: 'admin', requiresAuth: true, roles: ['clinic_admin'], fullscreen: true }
|
|
}
|
|
];
|
|
|
|
// ── Rotas de app — serão filhas do AppLayout compartilhado no index.js ────
|
|
export default {
|
|
path: 'admin',
|
|
component: RouterPassthrough,
|
|
meta: {
|
|
area: 'admin',
|
|
requiresAuth: true,
|
|
roles: ['clinic_admin']
|
|
},
|
|
children: [
|
|
// ======================================================
|
|
// 📊 DASHBOARD
|
|
// ======================================================
|
|
{ path: '', name: 'admin.dashboard', component: () => import('@/views/pages/clinic/ClinicDashboard.vue') },
|
|
|
|
// ======================================================
|
|
// 💬 CONVERSAS (CRM de WhatsApp)
|
|
// ======================================================
|
|
// Redirect pro layout Melissa (versão oficial). RLS do Postgres
|
|
// garante que o admin vê dados da clínica e o terapeuta vê só os
|
|
// dele — independente da rota de entrada. A `CRMConversasPage`
|
|
// antiga continua no repo (sem rota apontando) até validarmos.
|
|
{
|
|
path: 'conversas',
|
|
name: 'admin-conversas',
|
|
redirect: { name: 'Melissa', params: { secao: 'conversas' } }
|
|
},
|
|
|
|
// ======================================================
|
|
// 🧩 CLÍNICA — MÓDULOS (tenant_features)
|
|
// ======================================================
|
|
{
|
|
path: 'clinic/features',
|
|
name: 'admin-clinic-features',
|
|
component: () => import('@/views/pages/clinic/clinic/ClinicFeaturesPage.vue'),
|
|
meta: { roles: ['clinic_admin', 'tenant_admin'] }
|
|
},
|
|
{
|
|
path: 'clinic/professionals',
|
|
name: 'admin-clinic-professionals',
|
|
component: () => import('@/views/pages/clinic/clinic/ClinicProfessionalsPage.vue'),
|
|
meta: { requiresAuth: true, roles: ['clinic_admin', 'tenant_admin'] }
|
|
},
|
|
|
|
// ======================================================
|
|
// 💳 MEU PLANO
|
|
// ======================================================
|
|
{
|
|
path: 'meu-plano',
|
|
name: 'admin-meu-plano',
|
|
component: () => import('@/views/pages/billing/ClinicMeuPlanoPage.vue')
|
|
},
|
|
|
|
// ======================================================
|
|
// 📅 AGENDA DA CLÍNICA
|
|
// ======================================================
|
|
{
|
|
path: 'agenda/clinica',
|
|
name: 'admin-agenda-clinica',
|
|
component: () => import('@/features/agenda/pages/AgendaClinicaPage.vue'),
|
|
meta: { feature: 'agenda.view', roles: ['clinic_admin', 'tenant_admin'] }
|
|
},
|
|
|
|
// Recorrências
|
|
{
|
|
path: 'agenda/recorrencias',
|
|
name: 'admin-agenda-recorrencias',
|
|
component: () => import('@/features/agenda/pages/AgendaRecorrenciasPage.vue'),
|
|
meta: { feature: 'agenda.view', roles: ['clinic_admin', 'tenant_admin'], mode: 'clinic' }
|
|
},
|
|
|
|
// ✅ Compromissos determinísticos
|
|
{
|
|
path: 'agenda/compromissos',
|
|
name: 'admin-agenda-compromissos',
|
|
component: () => import('@/features/agenda/pages/CompromissosDeterminados.vue'),
|
|
meta: { feature: 'agenda.view', roles: ['clinic_admin', 'tenant_admin'] }
|
|
},
|
|
|
|
// ======================================================
|
|
// 👥 PACIENTES
|
|
// ======================================================
|
|
{
|
|
path: 'pacientes',
|
|
name: 'admin-pacientes',
|
|
component: () => import('@/features/patients/PatientsListPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/cadastro',
|
|
name: 'admin-pacientes-cadastro',
|
|
component: () => import('@/features/patients/cadastro/PatientsCadastroPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/cadastro/:id',
|
|
name: 'admin-pacientes-cadastro-edit',
|
|
component: () => import('@/features/patients/cadastro/PatientsCadastroPage.vue'),
|
|
props: true,
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/grupos',
|
|
name: 'admin-pacientes-grupos',
|
|
component: () => import('@/features/patients/grupos/GruposPacientesPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/tags',
|
|
name: 'admin-pacientes-tags',
|
|
component: () => import('@/features/patients/tags/TagsPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/medicos',
|
|
name: 'admin-pacientes-medicos',
|
|
component: () => import('@/features/patients/medicos/MedicosPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/link-externo',
|
|
name: 'admin-pacientes-link-externo',
|
|
component: () => import('@/features/patients/cadastro/PatientsExternalLinkPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
{
|
|
path: 'pacientes/cadastro/recebidos',
|
|
name: 'admin-pacientes-recebidos',
|
|
component: () => import('@/features/patients/cadastro/recebidos/CadastrosRecebidosPage.vue'),
|
|
meta: { tenantFeature: 'patients' }
|
|
},
|
|
|
|
// ======================================================
|
|
// 📄 DOCUMENTOS
|
|
// ======================================================
|
|
// /documents/templates removido — mudou pra /configuracoes/documentos/templates
|
|
// (setup/config, não operação clínica).
|
|
|
|
// ======================================================
|
|
// 🔐 SEGURANÇA
|
|
// ======================================================
|
|
{
|
|
path: 'settings/security',
|
|
name: 'admin-settings-security',
|
|
component: () => import('@/views/pages/auth/SecurityPage.vue')
|
|
},
|
|
|
|
// ======================================================
|
|
// 👥 MEMBROS & CONVITES
|
|
// ======================================================
|
|
{
|
|
path: 'members',
|
|
name: 'admin-members',
|
|
component: () => import('@/views/pages/admin/MembersPage.vue'),
|
|
meta: { roles: ['tenant_admin', 'clinic_admin'] }
|
|
},
|
|
|
|
// ======================================================
|
|
// 🔒 MÓDULO PRO — Online Scheduling
|
|
// ======================================================
|
|
{
|
|
path: 'online-scheduling',
|
|
name: 'admin-online-scheduling',
|
|
component: () => import('@/views/pages/clinic/OnlineSchedulingAdminPage.vue'),
|
|
meta: { feature: 'online_scheduling.manage' }
|
|
},
|
|
|
|
// ======================================================
|
|
// 🔒 PRO — Agendamentos Recebidos
|
|
// ======================================================
|
|
{
|
|
path: 'agendamentos-recebidos',
|
|
name: 'admin-agendamentos-recebidos',
|
|
component: () => import('@/features/agenda/pages/AgendamentosRecebidosPage.vue'),
|
|
meta: { feature: 'online_scheduling.manage' }
|
|
},
|
|
|
|
// ======================================================
|
|
// 💰 FINANCEIRO
|
|
// ======================================================
|
|
{
|
|
path: 'financeiro',
|
|
name: 'admin-financeiro',
|
|
component: () => import('@/features/financeiro/pages/FinanceiroDashboardPage.vue')
|
|
},
|
|
{
|
|
path: 'financeiro/lancamentos',
|
|
name: 'admin-financeiro-lancamentos',
|
|
component: () => import('@/features/financeiro/pages/FinanceiroPage.vue')
|
|
}
|
|
]
|
|
};
|