Por Qué el Testing de Facturación Es Crítico
Los bugs de facturación tienen impacto financiero directo. Un cálculo incorrecto de prorrateo que sobrecobra $5 a los usuarios multiplicado por 10,000 suscriptores equivale a $50,000 en reembolsos potenciales — más daño a la confianza y riesgo de churn.
La facturación de suscripciones es una de las áreas más complejas en testing de aplicaciones web porque involucra lógica dependiente del tiempo, integración con proveedores de pago, cálculos de impuestos y múltiples transiciones de estado.
El Ciclo de Vida de la Suscripción
Cada transición es un escenario de testing.
Áreas Clave de Testing
Prorrateo
Cuando un usuario cambia de plan a mitad de ciclo:
| Escenario | Comportamiento Esperado |
|---|---|
| Upgrade a mitad de ciclo | Cobrar la diferencia prorrateada inmediatamente |
| Downgrade a mitad de ciclo | Aplicar crédito al siguiente período |
| Upgrade el último día del ciclo | Cobrar casi el precio completo del nuevo plan |
| Downgrade el primer día del ciclo | Acreditar casi el monto completo del plan anterior |
Renovaciones
- La suscripción se renueva en la fecha correcta
- Se cobra el monto correcto
- Se genera y envía la factura
- El acceso continúa sin interrupción
Cancelación
- La cancelación toma efecto al final del período de facturación
- El acceso continúa hasta que termine el período pagado
- El usuario puede re-suscribirse antes de que termine
- Email de confirmación de cancelación
Fallos de Pago y Dunning
| Día | Acción | Comunicación |
|---|---|---|
| 0 | Pago falla | Email: “Pago fallido, actualiza tu tarjeta” |
| 3 | Primer reintento | Email: “Segundo intento fallido” |
| 7 | Segundo reintento | Email: “Acción requerida” |
| 14 | Tercer reintento | Email: “Aviso final” |
| 21 | Cancelar suscripción | Email: “Suscripción cancelada” |
Cálculos de Impuestos
- IVA/GST aplicado correctamente según ubicación del cliente
- Clientes exentos no pagan impuestos
- Monto de impuestos aparece en facturas
Ejercicio: Suite de Tests de Facturación por Suscripción
Estás probando una aplicación SaaS con tres planes usando Stripe como proveedor de pagos.
Configuración del Entorno
Usa modo test de Stripe con estas tarjetas:
| Número de Tarjeta | Escenario |
|---|---|
| 4242 4242 4242 4242 | Pago exitoso |
| 4000 0000 0000 0002 | Tarjeta rechazada |
| 4000 0000 0000 3220 | 3D Secure requerido |
| 4000 0025 0000 3155 | Fondos insuficientes |
Escenario 1: Ciclo de Vida Completo
| Paso | Acción | Resultado Esperado |
|---|---|---|
| 1 | Registrarse para trial de 14 días | Trial inicia, sin cargo |
| 2 | Verificar día 13 | Email recordatorio: “Tu trial termina mañana” |
| 3 | Convertir a Pro Mensual ($29/mes) | Primer cargo de $29 |
| 4 | Día 15, upgrade a Enterprise ($99/mes) | Cargo prorrateado: ($99-$29) × (15/30) = $35 |
| 5 | Esperar renovación | $99 cobrado en siguiente fecha |
| 6 | Cancelar suscripción | Acceso continúa hasta fin del período |
Escenario 2: Recuperación de Pago Fallido
| Paso | Acción | Resultado Esperado |
|---|---|---|
| 1 | Suscribirse con tarjeta exitosa | Suscripción activa |
| 2 | Actualizar a tarjeta de rechazo | Tarjeta actualizada |
| 3 | Esperar intento de renovación | Pago falla, estado “Past Due” |
| 4 | Verificar email de dunning | “Por favor actualiza tu método de pago” |
| 5 | Actualizar a tarjeta exitosa | Pago reintentado y exitoso |
| 6 | Verificar estado | Vuelve a “Active” |
Escenario 3: Cálculos de Prorrateo
| Paso | Acción | Resultado Esperado |
|---|---|---|
| 1 | Suscribirse a Basic ($10/mes) el 1 de enero | Cargo $10 |
| 2 | Upgrade a Pro ($29/mes) el 16 de enero | Prorrateado: ($29-$10) × (15/31) = $9.19 |
| 3 | Verificar preview de factura | $29 el 1 de febrero |
| 4 | Downgrade a Basic el 25 de enero | Crédito: ($29-$10) × (6/31) = $3.68 |
| 5 | Verificar próxima factura | $10 - $3.68 crédito = $6.32 |
Solución: Bugs Comunes de Facturación
Bug 1: Prorrateo con error de un día Prorrateo calculado usando días calendario incluyendo el día del cambio, resultando en sobrecobro.
Bug 2: Cancelación toma efecto inmediatamente Usuario cancela el día 5 de un mes pagado pero pierde acceso inmediatamente.
Bug 3: Renovación anual cobra precio mensual Suscripciones anuales ($290/año) renovadas a tarifa mensual ($29/mes) por error de búsqueda de plan.
Bug 4: Emails de dunning después de cancelación manual Usuario cancela manualmente pero recibe emails de “pago fallido” porque el workflow de dunning no se canceló.
Bug 5: Impuesto aplicado dos veces en upgrade Al hacer upgrade a mitad de ciclo, impuesto calculado sobre precio completo y monto prorrateado.
Bug 6: Trial se convierte sin consentimiento Trial automáticamente convertido a plan de pago sin acción explícita del usuario.
Mejores Prácticas de Testing de Facturación
- Usa manipulación de tiempo — Prueba lógica dependiente de fechas con Stripe test clocks
- Prueba flujos de pago completos — Siempre ve por el flujo UI completo, no solo llamadas API
- Verifica facturas — Cada transacción debe generar factura correcta
- Prueba manejo de monedas — Si la app soporta múltiples monedas, verifica conversión
- Documenta cada cálculo — Para tests de prorrateo e impuestos, muestra la matemática
Puntos Clave
- Testing de facturación requiere probar cada transición de estado en el ciclo de vida
- El prorrateo es el área más intensiva en cálculos — verifica la matemática para cada cambio
- Siempre prueba con tarjetas test del proveedor de pagos
- Los flujos de dunning son críticos para recuperación de ingresos
- Los cálculos de impuestos varían por jurisdicción y deben aparecer correctamente en facturas
- La cancelación no debe tomar efecto hasta el fin del período pagado