Backend Firebase
Visión General
CAPI App utiliza Firebase como backend completo, proporcionando autenticación, base de datos, almacenamiento y funciones serverless.
Firestore Database
Estructura de Colecciones
users
Usuarios del sistema (doctores, pacientes, asistentes).
Campos principales:
email,displayName,photoUrlrole(Doctor, Paciente, Asistente)isAdmin(boolean)clinica(Reference)permisos(Struct con permisos granulares)- Campos de auditoría:
modifiedBy,modifiedDate,actionType
clinicas
Información de clínicas.
Campos principales:
nombre,email,telefonodireccionClinica(Struct)horarioAtencion(Array de Structs)pagos(ConfPagosStruct)zoom(ConfZoomStruct)planSuscripcion(Reference)stripe_subscription_id,stripe_subscription_statuscredits_ai,limitePacientes,limitePersonal
citas
Citas médicas.
Campos principales:
doctor(Reference a users)paciente(Reference a users)clinica(Reference)fecha,horaservicio(Reference)estado(pendiente, confirmada, completada, cancelada)- Campos de auditoría
consultas
Consultas médicas e historial clínico.
Campos principales:
doctor,paciente,clinica(References)fechaConsultanotasMedicasdiagnosticoantecedentes,signosVitales,exploracionFisicaconsentimientoInformado- Campos de auditoría
chats
Conversaciones de chat.
Campos principales:
users(Array de References)lastMessage,lastMessageTimeunreadCount(Map por usuario)createdTime
audit_logs
Logs de auditoría.
Campos principales:
userId,userEmail,userRoleaction(CREATE, UPDATE, DELETE, READ)resourceType(Consulta, Cita, Usuario, etc.)resourceIdchanges(Map con cambios)timestampipAddress,userAgent
Reglas de Seguridad
Las reglas de Firestore implementan:
- Validación por autenticación: class="highlight">
1 2 3
function isAuthenticated() { return request.auth != null; }
- Validación por rol:
class="highlight">1 2 3
function hasRole(role) { return getCurrentUser().role == role; }
- Validación por clínica:
class="highlight">1 2 3
function belongsToSameClinic(clinicRef) { return getCurrentUser().clinica == clinicRef; }
- Validación de permisos:
class="highlight">1 2 3 4 5
function hasPermission(permission) { return getCurrentUser().isAdmin == true || getCurrentUser().permisos.todos == true || getCurrentUser().permisos[permission] == true; }
Firebase Authentication
Métodos de Autenticación
- Email/Password - Autenticación principal
- Google Sign-In - Opcional (preparado)
Flujo de Autenticación
- Usuario se registra/inicia sesión
- Firebase Auth crea sesión
- App obtiene
UsersRecordde Firestore - App valida rol y permisos
- App redirige según rol
Gestión de Sesiones
- Sesiones persistentes
- Refresh tokens automáticos
- Reautenticación para operaciones sensibles
Firebase Storage
Estructura de Almacenamiento
class="highlight">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
storage/ ├── usuarios/ │ └── {userId}/ │ └── foto_perfil.jpg ├── clinicas/ │ └── {clinicaId}/ │ └── logo.png ├── pacientes/ │ └── {pacienteId}/ │ └── archivos/ │ ├── documentos/ │ └── imagenes/ └── consultas/ └── {consultaId}/ └── archivos_adjuntos/Reglas de Storage
- Validación por autenticación
- Validación por pertenencia a clínica
- Límites de tamaño de archivo
- Validación de tipos MIME
Cloud Functions
Funciones Principales
Notificaciones
sendNotification- Enviar notificaciones pushclearAppBadge- Limpiar badge de appmigrateExistingTokens- Migrar tokens FCM
Email
sendTestEmail- Enviar emails de pruebachatEmailPeriodicCheck- Verificar chats pendientes
Limpieza
cleanupDuplicateTokens- Limpiar tokens duplicadoscleanupUserTokens- Limpiar tokens de usuario
Backups
backupMedicalData- Backup automático de datos médicos
Places API
getPlacesAutocomplete- Autocompletado de direccionesgetPlaceDetails- Detalles de lugar
Estructura de Functions
class="highlight">1 2 3 4 5 6
firebase/functions/ ├── index.js # Punto de entrada ├── notification_service.js # Servicio de notificaciones ├── email_service.js # Servicio de email ├── backup_medical_data.js # Backup de datos └── ...
Firebase Cloud Messaging
Configuración
- Web:
firebase-messaging-sw.js - Android: Configuración en
AndroidManifest.xml - iOS: Configuración en
Info.plist
Flujo de Notificaciones
- Cloud Function o app envía notificación
- FCM entrega a dispositivos
- App recibe y procesa notificación
- App muestra notificación local
- App actualiza estado si es necesario
Índices de Firestore
Índices Compuestos
citas:clinica+fecha+estadoconsultas:clinica+paciente+fechaConsultachats:users(array-contains) +lastMessageTime
Configuración
Los índices se definen en
firestore.indexes.jsony se despliegan con:class="highlight">1
firebase deploy --only firestore:indexesPróximos Pasos
- Autenticación y Roles - Sistema de permisos
- Integraciones - Servicios externos
Anterior: Estructura del Proyecto ← Siguiente: Autenticación y Roles → - Validación por rol: