RF40: Usuario solicita factura electrónica
Descripción
Como usuario autenticado que pagó una suscripción, quiero solicitar la factura electrónica (CFDI) de mi pago para deducir el gasto y cumplir mis obligaciones fiscales.
La facturación CFDI requiere el RFC del usuario (RF13) y sus datos fiscales (uso de CFDI, régimen). La emisión se realiza mediante un PAC (Proveedor Autorizado de Certificación) integrado; Finnova relaciona la factura con el pago de Stripe.
| Campo | Valor |
|---|---|
| Módulo | Subscription Module (coordina con Accounting) |
| Actor | Usuario autenticado |
| Endpoint | POST /subscription/invoices |
| Precondiciones | Sesión activa; pago existente facturable; RFC y datos fiscales registrados |
| Prioridad | Media (post-MVP) |
| Etapa | MVP |
| Requisitos relacionados | RF13, RF38, RF66 |
Reglas de negocio
- RN-40.1 — Solo se factura un pago efectivamente realizado y dentro del plazo fiscal permitido (mismo mes/ejercicio, según reglas del SAT).
- RN-40.2 — Requiere RFC válido (RF13), régimen fiscal y uso de CFDI.
- RN-40.3 — La factura se emite vía PAC; Finnova guarda el CFDI (XML + PDF) y lo relaciona con el pago.
- RN-40.4 — Un mismo pago no se factura dos veces (idempotencia); si ya existe, se reenvía la factura previa.
- RN-40.5 — Los archivos CFDI se almacenan de forma segura y se entregan por enlace prefirmado/descarga autenticada.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
paymentId | Obligatorio. Pago propio y facturable. | "El pago no existe o no es facturable." |
taxRegime | Obligatorio. Catálogo SAT. | "Selecciona un régimen fiscal válido." |
cfdiUse | Obligatorio. Catálogo SAT. | "Selecciona un uso de CFDI válido." |
| RFC | Debe existir y ser válido (RF13). | "Registra un RFC válido antes de facturar." |
Criterios de aceptación
Escenario 1: Emisión de factura exitosa
Dado que tengo RFC y datos fiscales válidos y un pago facturable,
Cuando solicito la factura,
Entonces el sistema emite el CFDI vía PAC,
Y guarda XML y PDF relacionados al pago,
Y me responde 201 Created con el enlace de descarga.
Escenario 2: RFC o datos fiscales faltantes
Dado que no tengo RFC registrado,
Cuando intento facturar,
Entonces el sistema responde 400 con "Registra un RFC válido antes de facturar".
Escenario 3: Pago no facturable o fuera de plazo
Dado que el pago no existe, no es mío o ya pasó el plazo fiscal, Cuando intento facturar, Entonces el sistema responde con un error claro y no emite CFDI.
Escenario 4: Pago ya facturado (idempotencia)
Dado que un pago ya tiene factura, Cuando vuelvo a solicitarla, Entonces el sistema reenvía el CFDI existente sin duplicarlo.
Escenario 5: Error del PAC
Dado que el PAC no responde o rechaza la emisión, Cuando solicito la factura, Entonces el sistema informa el error y permite reintentar, sin marcar el pago como facturado.
Criterios no funcionales
- CFDI almacenado de forma segura; descarga autenticada.
- Comunicación TLS 1.2+; datos fiscales tratados como datos personales.