Carregando portal clínico...
Portal de Ferramentas Clínicas
Email ou senha incorretos.
Esqueci minha senha
Área restrita a pacientes cadastrados e administração. Compatível com a LGPD e criptografia SSL ponta a ponta.

Olá, ...!

Acompanhe aqui a sua jornada clínica, acesse seus exercícios e envie documentos com segurança.

Etapa Atual do Seu Processo Terapêutico

Anamnese
Aliança
Avaliação
Aplicação
Devolutiva
Intervenção
Carregando status do seu processo...

Alinhamento do Nosso Processo

Na última sessão...

Nenhuma anotação de alinhamento registrada ainda.

Para a próxima sessão...

Nenhuma anotação de planejamento registrada ainda.

Exercícios e Formulários Liberados

Central de Documentos

Envie relatórios, laudos médicos, testes psicológicos anteriores ou documentos de contrato diretamente para a sua psicóloga.

Nenhum documento anexado.

Gestão de Pacientes

Nome E-mail Cadastro Termo LGPD Ações

Agenda & Notas da Semana

Semana de ... a ...

Tarefas da Semana

Adicione e marque suas obrigações administrativas, preparações de materiais ou compromissos desta semana.

Anotações Gerais da Semana

Rascunho rápido para observações importantes ou lembretes administrativos.

Aviso LGPD: Este espaço é estritamente para tarefas administrativas e lembretes pessoais. Não registre dados clínicos ou informações identificáveis dos pacientes aqui. Registros terapêuticos devem ser feitos diretamente no prontuário do paciente.
Salvo

Painel de Acessos & Configurações

Fila de Aprovações Pendentes

Aprovações clínicas para toggles de privacidade de adolescentes e consentimento de escolas.

Nenhuma solicitação pendente no momento.

Alertas de Transição de Idade

Detecção de maioridade (18 anos) e migração para perfil de adolescente (16 anos) com privacidade conservadora.

Nenhum alerta de transição de idade ativo.

Registro de Auditoria Imutável (Audit Log)

Rastreabilidade em conformidade técnica e jurídica com a LGPD e direito de saúde. Entradas não podem ser alteradas ou excluídas.

Hora Ação Detalhes

Linha de Tempo de Progresso

Configurações e Segurança Google Cloud

Regras de Segurança Recomendadas

Para proteger a privacidade dos seus pacientes em conformidade estrita com a LGPD, copie e cole as regras abaixo nos respectivos painéis do seu Console do Firebase:

1. Cloud Firestore Rules

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    // 1. CONFIGURAÇÃO DE PERFIS DE USUÁRIOS (/users/{userId})
    match /users/{userId} {
      // O próprio usuário, a terapeuta (admin), ou familiares/escola vinculados (apenas se autorizado pelo paciente/lei) podem ler
      allow read: if request.auth != null && (
        request.auth.uid == userId || 
        get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin' ||
        // Familiar Principal com acesso ativado
        (get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'family' && resource.data.familyAccess.responsibleId == request.auth.uid && resource.data.familyAccess.custodyConflict != true) ||
        // Outro Genitor com acesso ativo e sem conflito de guarda
        (get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'family' && resource.data.familyAccess.secondaryId == request.auth.uid && resource.data.familyAccess.secondaryEnabled == true && resource.data.familyAccess.custodyConflict != true) ||
        // Escola apenas se o acesso estiver ativo E explicitamente autorizado na privacidade do paciente menor/adolescente
        (get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'school' && resource.data.schoolAccess.schoolId == request.auth.uid && resource.data.schoolAccess.status == 'active' && resource.data.privacySettings.school_authorized == true)
      );
      
      // Apenas o próprio criando sua conta ou a terapeuta (admin) podem alterar dados cadastrais
      allow write: if request.auth != null && (
        (request.auth.uid == userId && request.resource.data.role == 'patient') ||
        get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin'
      );
    }
    
    // 2. PRONTUÁRIOS E LOGS CLÍNICOS E DE ATIVIDADES (/logs/{logId})
    match /logs/{logId} {
      // Bloqueia preventivamente qualquer escrita que não seja da terapeuta ou do paciente
      allow create: if request.auth != null && (request.resource.data.patientId == request.auth.uid || get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin');
      
      // REQUISITO CRÍTICO: Escola tem ACESSO ZERO aos logs clínicos/prontuário. 
      // Familiares só leem se o log não for confidencial (adminOnlyNote != true) E se a visualização estiver autorizada em privacySettings.
      allow read: if request.auth != null && (
        resource.data.patientId == request.auth.uid || 
        get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin' ||
        (
          get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'family' && 
          resource.data.adminOnlyNote != true && 
          get(/databases/$(database)/documents/users/$(resource.data.patientId)).data.privacySettings.family_authorized == true &&
          get(/databases/$(database)/documents/users/$(resource.data.patientId)).data.familyAccess.custodyConflict != true
        )
      );
      
      // Apenas a terapeuta Hellen Castro pode editar ou adicionar notas clínicas
      allow update: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin';
      
      // Retenção Legal (CFP): Bloqueia exclusão de prontuários por 5 anos após a última sessão
      allow delete: if false; 
    }
    
    // 3. LOG DE AUDITORIA 100% IMUTÁVEL (/audit_logs/{auditId})
    match /audit_logs/{auditId} {
      // Apenas a terapeuta Hellen Castro ou Cloud Functions autenticados podem ler/criar registros
      allow read, create: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin';
      
      // IMUTABILIDADE REAL: Bloqueio estrito de updates e deletes para qualquer usuário (incluindo admin)
      allow update, delete: if false;
    }
    
    // 4. FILA PLANA DE TOGGLES DE PRIVACIDADE (/privacy_toggle_requests/{requestId})
    match /privacy_toggle_requests/{requestId} {
      allow read, create: if request.auth != null && (request.resource.data.patientId == request.auth.uid || get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin');
      allow update: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin';
      allow delete: if false;
    }
  }
}

2. Firebase Storage Rules (Uploads de ferramentas)

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    // Apenas a admin pode fazer upload de ferramentas
    // Pacientes podem baixar suas próprias ferramentas personalizadas
    match /patients/{patientId}/{allPaths=**} {
      allow read: if request.auth != null && (request.auth.uid == patientId || firestore.get(/databases/(default)/documents/users/$(request.auth.uid)).data.role == 'admin');
      allow write: if request.auth != null && firestore.get(/databases/(default)/documents/users/$(request.auth.uid)).data.role == 'admin';
    }
  }
}

3. Funções Agendadas (Firebase Scheduled Functions)

Para garantir a conformidade com a LGPD e evitar vulnerabilidades legais por permissões desatualizadas (quando um paciente fica sem fazer login por meses), a transição de idade NÃO deve depender do login do usuário. Em vez disso, deve ser executada por uma Cloud Function diária:

// cloud/functions/index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

// EXECUÇÃO DIÁRIA (CRON: 0 0 * * *)
exports.dailyAgeAndConsentTransitions = functions.pubsub
  .schedule('0 0 * * *')
  .timeZone('America/Sao_Paulo')
  .onRun(async (context) => {
    const todayStr = new Date().toISOString().split('T')[0];
    const jobRunRef = admin.firestore().doc(`job_runs/age_transitions_${todayStr}`);
    
    // 1. GARANTE IDEMPOTÊNCIA DO JOB
    const runSnap = await jobRunRef.get();
    if (runSnap.exists) {
      console.log("Job de transição já executado hoje. Abortando.");
      return null;
    }
    await jobRunRef.set({ executed_at: admin.firestore.FieldValue.serverTimestamp() });

    const now = new Date();
    const usersSnap = await admin.firestore().collection('users').where('role', '==', 'patient').get();
    const batch = admin.firestore().batch();

    usersSnap.forEach(docSnap => {
      const pat = docSnap.data();
      if (!pat.birthDate) return;

      const birth = new Date(pat.birthDate);
      let age = now.getFullYear() - birth.getFullYear();
      const m = now.getMonth() - birth.getMonth();
      if (m < 0 || (m === 0 && now.getDate() < birth.getDate())) {
        age--;
      }

      // Transição Automática 16 anos (ECA + CFP)
      if (age >= 16 && age < 18 && !pat.transition_16_done) {
        batch.update(docSnap.ref, {
          transition_16_done: true,
          privacySettings: { family_authorized: false, school_authorized: false },
          'familyAccess.suspended': false
        });
      }

      // Transição Automática Maioridade 18 anos (LGPD)
      if (age >= 18 && !pat.ageTransition) {
        const deadline = new Date();
        deadline.setDate(deadline.getDate() + 30);
        batch.update(docSnap.ref, {
          ageTransition: {
            status: 'pending',
            deadline: deadline.toISOString(),
            birthday: now.toISOString(),
            reminders: { notified_15: false, notified_27: false }
          },
          'familyAccess.suspended': true,
          'schoolAccess.status': 'suspended'
        });
      }
    });

    await batch.commit();
    console.log("Job de transição de idade concluído com sucesso.");
    return null;
  });

4. Observações de Segurança & LGPD

  • Exclusão Explícita da Escola: Note que as regras do Firestore para /logs/{logId} não possuem nenhuma cláusula permitindo acesso a perfis do tipo school. Isso impede que qualquer manipulação de requisições leia prontuários.
  • Retenção de Dados de 5 anos (CFP): O bloqueio de exclusão em logs (allow delete: if false;) cumpre a exigência de arquivamento obrigatório por no mínimo 5 anos.
  • Log de Auditoria Imutável: Bloqueia atualizações e deleções, servindo como prova de conformidade perante órgãos fiscalizadores.
Nome do Exercício