RF32: Usuario consulta modelos de suscripción
Descripción
Como usuario, quiero ver los planes de suscripción disponibles (Free, Pro Mensual, Pro Anual) con sus precios y beneficios para decidir cuál contratar.
Los planes y sus Price IDs de Stripe se gestionan como configuración (variables de entorno), nunca hardcodeados (Stripe — Suscripciones).
| Campo | Valor |
|---|---|
| Módulo | Subscription Module |
| Actor | Usuario (autenticado o no) |
| Endpoint | GET /subscription/plans |
| Precondiciones | Ninguna (lista pública de planes) |
| Prioridad | Alta (MVP) |
| Etapa | MVP |
| Requisitos relacionados | RF33, RF38 |
Reglas de negocio
- RN-32.1 — Los planes mostrados provienen de la configuración (
Price IDsen variables de entorno), no del código. - RN-32.2 — Cada plan muestra nombre, ciclo (mensual/anual), precio, moneda y beneficios; el Free aparece como opción base.
- RN-32.3 — Se marca cuál es el plan actual del usuario si está autenticado.
- RN-32.4 — En la app móvil, los precios mostrados respetan las reglas de Apple/Google si el cobro es in-app (Suscripciones Mobile).
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
| — | Endpoint de solo lectura sin parámetros obligatorios. | — |
Criterios de aceptación
Escenario 1: Consulta de planes exitosa
Dado que abro la sección de suscripciones,
Cuando se cargan los planes,
Entonces el sistema muestra Free, Pro Mensual y Pro Anual con precio y beneficios,
Y responde 200 OK.
Escenario 2: Usuario autenticado con plan activo
Dado que tengo un plan Pro activo, Cuando consulto los planes, Entonces se resalta mi plan actual.
Escenario 3: Configuración de planes no disponible
Dado que la configuración de precios no se puede leer, Cuando consulto los planes, Entonces el sistema muestra un mensaje de error controlado sin exponer detalles internos.
Criterios no funcionales
- Respuesta < 1 s; la lista puede cachearse.
- Comunicación TLS 1.2+.