feat: CRM Clinicas SaaS - MVP completo
- Auth: Login/Register con creacion de clinica - Dashboard: KPIs reales, graficas recharts - Pacientes: CRUD completo con busqueda - Agenda: FullCalendar, drag-and-drop, vista recepcion - Expediente: Notas SOAP, signos vitales, CIE-10 - Facturacion: Facturas con IVA, campos CFDI SAT - Inventario: Productos, stock, movimientos, alertas - Configuracion: Clinica, equipo, catalogo servicios - Supabase self-hosted: 18 tablas con RLS multi-tenant - Docker + Nginx para produccion Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
238
docs/plans/2026-03-02-crm-clinicas-design.md
Normal file
238
docs/plans/2026-03-02-crm-clinicas-design.md
Normal file
@@ -0,0 +1,238 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user