Arquitectura del Sistema
Visión General
CAPI App sigue una arquitectura cliente-servidor con backend serverless usando Firebase. La aplicación Flutter se comunica con Firebase para todas las operaciones de backend, y Firebase se integra con servicios externos para funcionalidades adicionales.
Diagrama de Arquitectura
graph TB
subgraph Cliente["Cliente Flutter"]
iOS[iOS App]
Android[Android App]
Web[Web App]
end
subgraph Firebase["Firebase Backend"]
Firestore[(Firestore)]
Auth[Firebase Auth]
Storage[Firebase Storage]
Functions[Cloud Functions]
FCM[Cloud Messaging]
end
subgraph Servicios["Servicios Externos"]
Stripe[Stripe API]
Zoom[Zoom API]
RevenueCat[RevenueCat]
N8N[N8N Workflows]
Places[Google Places]
end
iOS --> Firebase
Android --> Firebase
Web --> Firebase
Firebase --> Servicios
Firestore --> Functions
Functions --> Stripe
Functions --> Zoom
Functions --> N8N
Flujo de Datos
Autenticación
sequenceDiagram
participant U as Usuario
participant App as Flutter App
participant Auth as Firebase Auth
participant FS as Firestore
U->>App: Login
App->>Auth: signInWithEmailAndPassword
Auth-->>App: User Credential
App->>FS: Obtener UsersRecord
FS-->>App: Datos del Usuario
App->>App: Validar Rol
App-->>U: Redirigir según Rol
Operaciones CRUD
sequenceDiagram
participant App as Flutter App
participant FS as Firestore
participant Audit as Audit Logger
participant Functions as Cloud Functions
App->>FS: Create/Update/Delete
FS->>Audit: Registrar Acción
Audit->>FS: Guardar en audit_logs
FS-->>App: Confirmación
FS->>Functions: Trigger (si aplica)
Functions->>Functions: Procesar Evento
Estructura de Base de Datos
Colecciones Principales
- users - Usuarios del sistema (doctores, pacientes, asistentes)
- clinicas - Información de clínicas
- citas - Citas médicas
- consultas - Consultas médicas e historial clínico
- chats - Conversaciones de chat
- servicios - Servicios médicos ofrecidos
- audit_logs - Logs de auditoría
- business_metrics - Métricas de negocio
Relaciones
class="highlight">
1
2
3
4
5
clinicas (1) ──< (N) users
users (1) ──< (N) citas
users (1) ──< (N) consultas
users (1) ──< (N) chats
clinicas (1) ──< (N) servicios
Sistema de Roles y Permisos
Roles Disponibles
- Doctor - Profesional de la salud
- Variante: Doctor Admin (isAdmin: true)
- Paciente - Usuario paciente
- Asistente - Asistente de clínica
Permisos Granulares
El sistema incluye 15+ permisos específicos:
verCitas, crearCitas, editarCitas, eliminarCitas verPacientes, crearPacientes, editarPacientes verConsultas, crearConsultas, editarConsultas verEquipo, gestionarEquipo verServicios, gestionarServicios configurarClinica todos (permiso maestro)
Patrones de Diseño
State Management
- Provider - Para estado global
- FlutterFlow State - Para estado de páginas
- Streams - Para datos en tiempo real de Firestore
Servicios
- Singleton Services - Para servicios compartidos
- Repository Pattern - Para acceso a datos
- Service Layer - Para lógica de negocio
Seguridad
Firestore Security Rules
- Validación por rol
- Validación por pertenencia a clínica
- Validación de permisos específicos
- Auditoría de acceso
Autenticación
- Firebase Auth con email/password
- Reautenticación para operaciones sensibles
- Validación de sesión en todas las operaciones
Integraciones
Stripe
- Webhooks para eventos de suscripción
- Stripe Connect para pagos paciente-doctor
- Sincronización de estado de suscripciones
Zoom
- API para creación de reuniones
- Enlaces instantáneos por clínica
- Configuración por clínica
RevenueCat
- Sincronización de compras iOS
- Webhooks para eventos de suscripción
- Validación de entitlements
N8N
- Workflows para automatización
- Webhooks para eventos del sistema
- Emails automáticos
Próximos Pasos
- Instalación y Configuración - Configura tu entorno
- Estructura del Proyecto - Conoce la organización del código
Anterior: Introducción ← Siguiente: Instalación y Configuración →