# RF-MGN-015-004: Facturación y Cobros **Módulo:** MGN-015 - Billing y Suscripciones **Prioridad:** P0 (MVP para SaaS) **Story Points:** 13 **Estado:** Definido **Fecha:** 2025-11-24 ## Descripción El sistema debe generar facturas automáticamente por las suscripciones contratadas, procesar cobros mediante los métodos de pago registrados, y mantener un historial completo de transacciones. En México, debe soportar la generación de CFDI (Comprobante Fiscal Digital por Internet). ## Actores - **Actor Principal:** Sistema (generación automática) - **Actores Secundarios:** - Tenant Owner (consulta y descarga) - Gateway de Pagos (procesamiento) - PAC (timbrado CFDI para México) ## Precondiciones 1. Suscripción activa con plan de pago 2. Método de pago válido registrado 3. Datos fiscales del tenant (para CFDI) 4. Integración con gateway de pagos activa ## Flujo Principal - Facturación Automática 1. Sistema detecta suscripción próxima a renovar (1 día antes) 2. Sistema genera factura con líneas correspondientes: - Plan de suscripción (período) - Uso adicional si aplica - Descuentos/cupones activos 3. Sistema calcula subtotal, impuestos, total 4. Sistema intenta cobrar al método de pago principal 5. Si cobro exitoso: - Registra pago en `billing.payments` - Marca factura como `paid` - Genera CFDI si es requerido - Envía factura por email 6. Si cobro falla: Inicia flujo de reintentos ## Flujos Alternativos ### FA-1: Cobro Fallido 1. Gateway rechaza transacción 2. Sistema registra error en factura (`billing_errors`) 3. Sistema marca factura como `pending` 4. Sistema notifica al tenant owner 5. Sistema programa reintento (día 1, 3, 7) 6. Si todos fallan: Suspende suscripción ### FA-2: Factura con Cupón 1. Sistema detecta cupón activo en suscripción 2. Sistema aplica descuento según tipo (porcentaje/fijo) 3. Sistema reduce monto a cobrar 4. Línea de descuento aparece en factura 5. Sistema actualiza usos restantes del cupón ### FA-3: Solicitud de CFDI 1. Tenant owner solicita CFDI de factura 2. Sistema valida datos fiscales completos (RFC, razón social) 3. Sistema genera XML según especificación SAT 4. Sistema envía a PAC para timbrado 5. PAC retorna UUID y sello 6. Sistema almacena XML timbrado 7. Usuario puede descargar PDF y XML ### FA-4: Nota de Crédito 1. Admin genera nota de crédito (reembolso parcial/total) 2. Sistema crea factura con amount negativo 3. Sistema procesa reembolso vía gateway 4. Si CFDI: Genera comprobante de egreso 5. Crédito disponible para próximas facturas ## Reglas de Negocio - **RN-1:** Facturas se generan 1 día antes de renovación - **RN-2:** Cobro automático usa método de pago principal - **RN-3:** IVA 16% para clientes en México - **RN-4:** CFDI obligatorio para clientes con RFC - **RN-5:** Facturas pagadas no se pueden modificar - **RN-6:** Reembolsos solo mediante nota de crédito - **RN-7:** Historial de facturas disponible por 5 años - **RN-8:** Numeración consecutiva por serie ## Criterios de Aceptación - [ ] Sistema genera facturas automáticamente por renovación - [ ] Sistema procesa cobros al método de pago principal - [ ] Tenant owner puede ver historial de facturas - [ ] Tenant owner puede descargar PDF de facturas - [ ] Sistema genera CFDI para clientes mexicanos - [ ] Tenant owner puede descargar XML de CFDI - [ ] Sistema aplica cupones/descuentos correctamente - [ ] Sistema maneja reintentos de cobros fallidos - [ ] Admin puede generar notas de crédito - [ ] Sistema envía facturas por email ## Entidades Involucradas - **Principales:** - billing.invoices (id, tenant_id, subscription_id, status, subtotal, tax, total) - billing.invoice_lines (id, invoice_id, description, quantity, unit_price) - billing.payments (id, invoice_id, amount, status, gateway_response) - **Relacionadas:** - billing.subscriptions (suscripción facturada) - billing.payment_methods (método de cobro) - billing.coupon_redemptions (descuentos aplicados) ## Estados de Factura ``` draft → pending → paid ↓ overdue → void paid → refunded (nota de crédito) ``` | Estado | Descripción | |--------|-------------| | draft | En preparación | | pending | Emitida, pendiente de pago | | paid | Pagada | | overdue | Vencida (pago fallido) | | void | Anulada | | refunded | Reembolsada | ## Estructura de Factura ``` ┌────────────────────────────────────────────────┐ │ FACTURA #INV-2024-0001 │ │ Fecha: 2024-01-15 │ ├────────────────────────────────────────────────┤ │ Cliente: Demo Company S.A. de C.V. │ │ RFC: DCO123456ABC │ ├────────────────────────────────────────────────┤ │ Concepto Cant. Precio Total │ │ ───────────────────────────────────────────── │ │ Plan Professional 1 $499.00 $499.00 │ │ (Ene 15 - Feb 14) │ │ Usuarios adicionales 2 $50.00 $100.00 │ │ Descuento PROMO20 -1 20% -$119.80│ ├────────────────────────────────────────────────┤ │ Subtotal: $479.20 │ │ IVA 16%: $76.67 │ │ TOTAL: $555.87 │ ├────────────────────────────────────────────────┤ │ UUID CFDI: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx│ └────────────────────────────────────────────────┘ ``` ## Referencias - [RF-MGN-015-002](./RF-MGN-015-002-gestion-suscripciones-tenant.md) - Suscripciones - [RF-MGN-015-003](./RF-MGN-015-003-metodos-pago.md) - Métodos de Pago - [Especificación CFDI 4.0 SAT](http://omawww.sat.gob.mx/tramitesyservicios/Paginas/anexo_20_version3-3.htm) ## Notas Técnicas - **Tablas:** `billing.invoices`, `billing.invoice_lines`, `billing.payments` - **Numeración:** Serie + consecutivo (INV-2024-0001) - **CFDI:** Integración con PAC (Facturama, SW Sapien, etc.) - **Gateway:** Stripe para cobros, webhook para confirmaciones - **Jobs:** - Generación de facturas (diario, 1 día antes de renovación) - Reintentos de cobro (días 1, 3, 7) - Envío de recordatorios (3 días antes de vencimiento) ## Dependencias - **RF Requeridos:** - RF-MGN-015-002 (Suscripciones) - RF-MGN-015-003 (Métodos de Pago) - **Bloqueante para:** RF-MGN-015-005 (Registro de Uso)