- Update docs/_MAP.md with new phase references - Add docs/04-fase-saas/ phase structure - Add docs/05-fase-ia/ phase structure Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
233 lines
6.5 KiB
Markdown
233 lines
6.5 KiB
Markdown
---
|
|
id: MGN-016-billing
|
|
title: Modulo Billing - Suscripciones para Clinica Dental
|
|
type: ModuleOverview
|
|
status: Draft
|
|
version: 1.0.0
|
|
created_date: 2026-01-13
|
|
updated_date: 2026-01-13
|
|
module: billing
|
|
priority: P0
|
|
normativas: [NOM-013-SSA2-2015, CFDI-4.0]
|
|
---
|
|
|
|
# MGN-016: Billing - Sistema de Facturacion y Suscripciones Dentales
|
|
|
|
## Resumen Ejecutivo
|
|
|
|
El modulo Billing implementa el sistema de facturacion y suscripciones para consultorios y clinicas dentales, integrando Stripe Billing como proveedor de pagos. Permite gestionar suscripciones por tipo de consultorio (individual, grupal, centro dental), periodos de prueba, upgrades/downgrades y facturacion automatica con soporte para CFDI 4.0.
|
|
|
|
---
|
|
|
|
## Objetivos
|
|
|
|
### Objetivo Principal
|
|
|
|
Implementar un sistema de billing completo para clinicas dentales que permita:
|
|
- Suscripciones mensuales y anuales por tipo de consultorio
|
|
- Planes diferenciados por numero de sillones dentales
|
|
- Facturacion automatica recurrente con CFDI 4.0
|
|
- Portal de cliente self-service via Stripe
|
|
|
|
### Objetivos Secundarios
|
|
|
|
- Sincronizacion bidireccional con Stripe via webhooks
|
|
- Soporte para periodos de prueba (14 dias)
|
|
- Manejo de pagos fallidos y dunning
|
|
- Historial de facturas accesible para clinicas
|
|
- Facturacion adicional por servicios especiales
|
|
|
|
---
|
|
|
|
## Planes para Clinica Dental
|
|
|
|
| Plan | Precio/mes | Sillones | Usuarios | Storage | Features |
|
|
|------|------------|----------|----------|---------|----------|
|
|
| **Consultorio** | $499 MXN | 1 | 3 | 5 GB | Odontograma, Citas, Expedientes |
|
|
| **Clinica** | $1,499 MXN | 5 | 15 | 25 GB | + Ortodoncia, Radiografias, Reportes |
|
|
| **Centro Dental** | $3,999 MXN | Ilimitado | Ilimitado | 100 GB | + IA, WhatsApp, Multi-sucursal |
|
|
|
|
---
|
|
|
|
## Alcance
|
|
|
|
### Incluido (In Scope)
|
|
|
|
| Caracteristica | Descripcion | Prioridad |
|
|
|----------------|-------------|-----------|
|
|
| Stripe Billing | Integracion completa con Stripe | P0 |
|
|
| Planes dentales | Consultorio, Clinica, Centro | P0 |
|
|
| Suscripciones | Crear, actualizar, cancelar | P0 |
|
|
| Webhooks Stripe | Recibir y procesar eventos | P0 |
|
|
| Portal cliente | Redirect a Stripe Customer Portal | P0 |
|
|
| CFDI 4.0 | Generacion de facturas fiscales | P0 |
|
|
| Pagos OXXO | Soporte para pago en efectivo | P1 |
|
|
| Invoices | Historial con PDF | P1 |
|
|
|
|
### Excluido (Out of Scope)
|
|
|
|
| Caracteristica | Razon | Fase Futura |
|
|
|----------------|-------|-------------|
|
|
| Multi-currency | Solo MXN por ahora | Fase 2 |
|
|
| Servicios adicionales | Pagos one-time | Fase 2 |
|
|
| Facturacion por tratamiento | Complejidad | Fase 3 |
|
|
|
|
---
|
|
|
|
## Arquitectura
|
|
|
|
### Diagrama de Integracion
|
|
|
|
```
|
|
+-------------------+ +-------------------+ +-------------------+
|
|
| Frontend |---->| Billing API |---->| Stripe API |
|
|
| (Checkout) | | (NestJS) | | |
|
|
+-------------------+ +-------------------+ +-------------------+
|
|
| |
|
|
+-------+---------+ |
|
|
| | v
|
|
+----------+ +-----------+ +-------------+
|
|
| Plans DB | | Invoices | | Webhooks |
|
|
| (Dental) | | + CFDI | | (events) |
|
|
+----------+ +-----------+ +-------------+
|
|
|
|
|
v
|
|
+-----------+
|
|
| SAT/CFDI |
|
|
| Timbrado |
|
|
+-----------+
|
|
```
|
|
|
|
### Flujo de Suscripcion Dental
|
|
|
|
```
|
|
1. Dentista selecciona plan en frontend
|
|
|
|
|
2. Frontend llama POST /billing/checkout
|
|
|
|
|
3. Backend crea Checkout Session en Stripe
|
|
|
|
|
4. Backend retorna URL de Stripe Checkout
|
|
|
|
|
5. Frontend redirige a Stripe Checkout
|
|
|
|
|
6. Dentista paga (tarjeta o OXXO)
|
|
|
|
|
7. Stripe envia webhook: checkout.session.completed
|
|
|
|
|
8. Backend crea/actualiza subscription en DB
|
|
|
|
|
9. Backend activa features del plan (sillones, odontograma, etc.)
|
|
|
|
|
10. Clinica operativa con funcionalidades activas
|
|
```
|
|
|
|
---
|
|
|
|
## Facturacion CFDI 4.0
|
|
|
|
### Datos Requeridos
|
|
|
|
- RFC de la clinica
|
|
- Razon social
|
|
- Regimen fiscal
|
|
- Uso CFDI (G03 - Gastos en general)
|
|
- Codigo postal fiscal
|
|
|
|
### Flujo de Facturacion
|
|
|
|
```
|
|
1. Stripe cobra suscripcion
|
|
|
|
|
2. Webhook notifica pago exitoso
|
|
|
|
|
3. Backend genera pre-CFDI
|
|
|
|
|
4. Envia a PAC para timbrado
|
|
|
|
|
5. Almacena XML y PDF
|
|
|
|
|
6. Notifica a clinica via email
|
|
```
|
|
|
|
---
|
|
|
|
## Dependencias
|
|
|
|
### Modulos Prerequisito
|
|
|
|
| Modulo | Tipo | Descripcion |
|
|
|--------|------|-------------|
|
|
| MGN-001-auth | Requerido | Autenticacion JWT |
|
|
| MGN-002-users | Requerido | Usuario owner clinica |
|
|
| MGN-004-tenants | Requerido | Contexto multi-tenant |
|
|
| MGN-007-audit | Requerido | Logs de cambios |
|
|
|
|
### Servicios Externos
|
|
|
|
| Servicio | Proposito | Requerido |
|
|
|----------|-----------|-----------|
|
|
| Stripe | Billing y pagos | Si |
|
|
| PAC CFDI | Timbrado facturas | Si |
|
|
| Redis | Cache de planes | Opcional |
|
|
|
|
---
|
|
|
|
## Seguridad y Normativas
|
|
|
|
| Medida | Implementacion |
|
|
|--------|----------------|
|
|
| PCI Compliance | No almacenar datos de tarjeta |
|
|
| Webhook Signature | Verificar Stripe-Signature |
|
|
| CFDI Seguro | Almacenar XMLs firmados |
|
|
| Access Control | Solo owner gestiona billing |
|
|
| NOM-013-SSA2-2015 | Registro de servicios |
|
|
| LFPDPPP | Proteccion datos clinica |
|
|
|
|
---
|
|
|
|
## Configuracion
|
|
|
|
### Variables de Entorno
|
|
|
|
```bash
|
|
# Stripe
|
|
STRIPE_SECRET_KEY=sk_live_xxx
|
|
STRIPE_PUBLISHABLE_KEY=pk_live_xxx
|
|
STRIPE_WEBHOOK_SECRET=whsec_xxx
|
|
|
|
# Billing Config Dental
|
|
BILLING_TRIAL_DAYS=14
|
|
BILLING_DEFAULT_PLAN=consultorio
|
|
BILLING_SUCCESS_URL=https://clinica.ejemplo.com/billing/success
|
|
BILLING_CANCEL_URL=https://clinica.ejemplo.com/billing/cancel
|
|
|
|
# CFDI
|
|
CFDI_PAC_URL=https://pac.ejemplo.com
|
|
CFDI_PAC_USER=xxx
|
|
CFDI_PAC_PASSWORD=xxx
|
|
```
|
|
|
|
---
|
|
|
|
## Indices
|
|
|
|
- [Requerimientos Funcionales](requerimientos/INDICE-RF-BILLING.md)
|
|
- [Especificaciones Tecnicas](especificaciones/INDICE-ET-BILLING.md)
|
|
- [Historias de Usuario](historias-usuario/INDICE-US-BILLING.md)
|
|
- [Trazabilidad](implementacion/TRACEABILITY.yml)
|
|
|
|
---
|
|
|
|
## Referencias
|
|
|
|
- [erp-core/MGN-016-billing](../../../../../erp-core/docs/04-fase-saas/MGN-016-billing/) - Origen
|
|
- [Stripe Billing Docs](https://stripe.com/docs/billing) - Documentacion oficial
|
|
- [SAT CFDI 4.0](https://www.sat.gob.mx/consultas/42214/cfdi-version-4.0) - Especificacion
|
|
|
|
---
|
|
|
|
*Modulo: MGN-016-billing | Clinica Dental | Version: 1.0.0*
|
|
*Propagado desde erp-core via erp-clinicas*
|
|
*Actualizado: 2026-01-13*
|