RF37: Usuario elimina método de pago
Descripción
Como usuario autenticado, quiero eliminar un método de pago registrado para dejar de tener una tarjeta asociada a mi cuenta.
Se elimina (detach) el PaymentMethod del Customer en Stripe. Si hay una suscripción de pago activa que depende de él, se previene dejar la suscripción sin método válido.
| Campo | Valor |
|---|---|
| Módulo | Subscription Module |
| Actor | Usuario autenticado |
| Endpoint | DELETE /subscription/payment-method/:id |
| Precondiciones | Sesión activa; el método pertenece al Customer del usuario |
| Prioridad | Media (MVP) |
| Etapa | MVP |
| Requisitos relacionados | RF34, RF36, RF39 |
Reglas de negocio
- RN-37.1 — Solo se puede eliminar un método propio (validado por
user_id/customer_id). - RN-37.2 — No se permite eliminar el único método si hay una suscripción de pago activa con renovación automática; primero se debe agregar otro o cancelar/desactivar la renovación.
- RN-37.3 — La eliminación hace
detachen Stripe; Finnova no guarda datos de tarjeta que eliminar.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
id | Obligatorio. PaymentMethod del usuario. | "Método de pago no encontrado." (404) |
Authorization | Bearer válido. | "Sesión no válida." (401) |
Criterios de aceptación
Escenario 1: Eliminación exitosa
Dado que tengo más de un método o no tengo suscripción de pago activa que dependa de él,
Cuando elimino el método,
Entonces el sistema hace detach en Stripe,
Y responde 200 OK,
Y deja de mostrarlo.
Escenario 2: Único método con suscripción activa
Dado que es mi único método y tengo una suscripción de pago con renovación automática,
Cuando intento eliminarlo,
Entonces el sistema lo impide con 409 Conflict y un mensaje que explica agregar otro o cancelar/desactivar la renovación.
Escenario 3: Método inexistente o ajeno (seguridad)
Dado que envío un id que no es mío,
Cuando intento eliminar,
Entonces el sistema responde 404 Not Found.
Criterios no funcionales
- Operación idempotente; comunicación TLS 1.2+.