# CRM Clinicas SaaS — Documento de Diseno **Fecha:** 2026-03-02 **Estado:** Aprobado **Cliente:** Clinica general multiespecialidad (Mexico) **Deployment:** Self-hosted en VM Ubuntu 24.04 (4 CPU, 15GB RAM, 24GB disco) --- ## 1. Vision General CRM SaaS completo para clinicas medicas en Mexico. MVP orientado a una clinica pequena (1-3 doctores) con arquitectura multi-tenant preparada para escalar a multiples clientes. ## 2. Stack Tecnologico | Capa | Tecnologia | |------|-----------| | Frontend | Next.js 15 (App Router) + TypeScript + Tailwind CSS + shadcn/ui | | Backend/BaaS | Supabase Self-Hosted (PostgreSQL + Auth + Storage + Realtime) | | CFDI | Facturama API | | WhatsApp | Twilio / 360dialog | | Pagos SaaS | Conekta | | Reverse Proxy | Nginx | | SSL | Certbot + Let's Encrypt (cuando haya dominio) | | Contenedores | Docker + Docker Compose | | OS | Ubuntu 24.04 LTS | ## 3. Arquitectura ``` VM (Ubuntu 24.04) Docker Compose: - Nginx (:80) -> reverse proxy - Next.js App (:3000) - Supabase Stack: - PostgreSQL (:5432) - GoTrue Auth (:9999) - Storage (:5000) - Realtime (:4000) - Kong API Gateway (:8000) - Studio (:3001) — admin panel ``` ### Multi-tenancy Row-Level Security (RLS) en PostgreSQL. Cada tabla tiene `clinic_id`. Politicas RLS filtran automaticamente segun el JWT del usuario autenticado. Ningun query puede cruzar datos entre clinicas. ## 4. Modulos del MVP ### 4.1 Gestion de Pacientes - CRUD completo con datos demograficos, CURP, alergias, tipo de sangre - Busqueda rapida por nombre, telefono, CURP - Timeline cronologico (citas, consultas, facturas, archivos) - Comunicacion WhatsApp - Fuente de captacion (referido, redes, Google) - Import/export CSV ### 4.2 Agenda y Citas - Calendario visual (dia/semana/mes) por doctor - Drag-and-drop para reagendar - Slots configurables por doctor (duracion, horarios por dia) - Bloqueo de horarios (vacaciones, juntas) - Estados: scheduled -> confirmed -> in_progress -> completed / cancelled / no_show - Recordatorios automaticos WhatsApp 24h y 1h antes - Lista de espera - Vista de recepcion (citas del dia, quien llego, quien esta en consulta) ### 4.3 Expediente Clinico Electronico - Historia clinica: antecedentes familiares, personales, quirurgicos, medicamentos, alergias, inmunizaciones - Nota de consulta SOAP (Subjective, Objective, Assessment, Plan) - Signos vitales con graficas de tendencia - Diagnosticos CIE-10 - Receta digital PDF con cedula profesional - Archivos adjuntos (labs, imagenes, estudios) - Firma digital del doctor - Export PDF del expediente completo ### 4.4 Facturacion y Pagos - Catalogo de servicios con claves SAT - Creacion de factura desde consulta completada - Timbrado CFDI 4.0 via Facturama API - Cancelacion CFDI con motivo - Formas de pago: efectivo, tarjeta, transferencia - Cuentas por cobrar y parcialidades - Corte de caja diario - Reportes de ingresos por periodo, doctor, servicio ### 4.5 Inventario - Catalogo de productos (medicamento, insumo, material, equipo) - Control de stock por sucursal - Movimientos: entrada, salida, ajuste, merma - Alertas de stock minimo - Vinculacion a consulta (descuento automatico) - Vinculacion a factura - Reporte de movimientos ### 4.6 Dashboard y Reportes - KPIs: pacientes nuevos, citas del dia, ingresos del mes, tasa ausentismo - Graficas: ingresos por mes, citas por doctor, servicios mas solicitados - Ocupacion de agenda por doctor - Inventario critico ## 5. Modelo de Datos ### Tablas principales: ``` clinics (tenant) users (doctores, staff — vinculado a auth.users) patients doctor_schedules appointments medical_records (antecedentes) consultation_notes (notas SOAP por visita) prescriptions medical_files services_catalog invoices invoice_items payments products inventory_stock inventory_movements branches audit_log ``` ### Campos clave por tabla: **clinics:** id, name, slug, rfc, razon_social, regimen_fiscal, codigo_postal, pac_provider, pac_api_key (encrypted), subscription_plan, subscription_status **patients:** id, clinic_id, first_name, last_name, date_of_birth, gender, curp, phone, email, address (jsonb), blood_type, allergies (text[]), emergency_contact (jsonb), source **appointments:** id, clinic_id, patient_id, doctor_id, starts_at, ends_at, status, type, reason, reminder_sent **consultation_notes:** id, clinic_id, patient_id, doctor_id, appointment_id, subjective, objective, assessment, plan, vital_signs (jsonb), diagnoses (jsonb CIE-10), is_signed **invoices:** id, clinic_id, patient_id, invoice_number, cfdi_uuid, cfdi_status, uso_cfdi, forma_pago, metodo_pago, subtotal, tax_amount, total, payment_status **products:** id, clinic_id, sku, name, category, unit, purchase_price, sale_price, min_stock **inventory_movements:** id, clinic_id, product_id, type, quantity, reason, reference_id ## 6. Seguridad y Cumplimiento - NOM-004-SSA3-2012: Notas SOAP, firma digital, historial inmutable (soft delete) - NOM-024-SSA3-2012: Control de acceso, bitacora de accesos, integridad - LFPDPPP: Aviso de privacidad, consentimiento, encriptacion, derechos ARCO - CFDI 4.0 SAT: PAC certificado (Facturama), claves SAT, XML firmado - Multi-tenancy: RLS de PostgreSQL - Encriptacion: HTTPS (cuando hay dominio), encriptacion at-rest, pgcrypto para campos sensibles - Auditoria: tabla audit_log con triggers automaticos - Roles: owner > admin > doctor > receptionist - Backups: pg_dump cron diario con rotacion 7 dias ## 7. Estructura del Proyecto ``` src/ app/ (auth)/ — login, register, forgot-password (dashboard)/ — layout protegido con sidebar patients/ appointments/ medical-records/ billing/ inventory/ settings/ api/webhooks/ — conekta, whatsapp components/ ui/ — shadcn/ui forms/ calendar/ medical/ layout/ lib/ supabase/ — client, server, admin cfdi/ — integracion PAC whatsapp/ utils/ hooks/ types/ supabase/ migrations/ seed.sql functions/ — edge functions (reminders, cfdi) docker-compose.yml nginx.conf ``` ## 8. Integraciones Externas | Servicio | Uso | Costo | |----------|-----|-------| | Facturama | CFDI SAT | ~$1.50 MXN/factura | | Twilio/360dialog | WhatsApp | ~$0.50 MXN/mensaje | | Conekta | Pagos suscripciones | 2.9% + $2.50/tx | | Resend | Emails transaccionales | Free tier | ## 9. Modelo de Negocio SaaS | Plan | Precio | Doctores | Sucursales | Features | |------|--------|----------|------------|----------| | Basico | $799 MXN/mes | 1 | 1 | Agenda + Expediente | | Pro | $1,499 MXN/mes | 3 | 2 | + Facturacion + Inventario | | Enterprise | $2,999 MXN/mes | Ilimitado | Ilimitado | + WhatsApp + Reportes avanzados | Trial gratuito: 14 dias (Plan Pro) ## 10. Costos Operativos (Self-Hosted) | Concepto | Mensual | |----------|---------| | VM | $0 (existente) | | Dominio | ~$17 MXN/mes | | Facturama | ~$300 MXN/mes | | Twilio | ~$200 MXN/mes | | **Total** | **~$520 MXN/mes** | ## 11. Roadmap | Fase | Semanas | Entregable | |------|---------|-----------| | 1 - Fundacion | 1-2 | Docker setup, auth, multi-tenancy RLS, layout, CRUD pacientes | | 2 - Agenda | 3-4 | Calendario, slots, citas, estados, vista recepcion | | 3 - Expediente | 5-7 | Historia clinica, notas SOAP, recetas PDF, archivos | | 4 - Facturacion | 8-10 | Catalogo servicios, facturas, CFDI, pagos, corte de caja | | 5 - Inventario | 11-12 | Productos, stock, movimientos, alertas | | 6 - Polish | 13-14 | Dashboard, reportes, WhatsApp, testing, produccion | ## 12. Deployment (Self-Hosted) - Docker Compose con todos los servicios - Nginx como reverse proxy (:80) - Acceso por IP publica (sin dominio por ahora) - SSL con Certbot cuando se agregue dominio - Backups automaticos con pg_dump + cron - Monitoreo basico con docker logs + healthchecks