RF31: Usuario invierte en el sistema (Finnova)
:::warning Fuera del alcance del MVP Este requisito describe un producto de rendimiento fijo tipo "cajita" (similar a las cajitas de Nu o Smart Cash de GBM): el usuario deposita dinero y Finnova ofrece una tasa de rendimiento. Esto implica captación de recursos y promesa de rendimiento, lo cual en México está fuertemente regulado (CNBV/Banxico) y, cuando se implemente, será a través de un socio financiero regulado, no con balance propio de Finnova.
Decisión: queda fuera del alcance del MVP (15-jun-2026). Antes de su implementación deben definirse como requisitos previos: el socio regulado, KYC, perfilamiento de riesgo (suitability), controles AML/PLD, términos de tasa/liquidez y cobertura aplicable (ver RNF-14). La especificación de abajo es un borrador conceptual sujeto a esa definición. :::
Descripción
Como usuario autenticado, quiero depositar dinero en un producto de rendimiento fijo dentro de Finnova para obtener un rendimiento sobre mi saldo sin salir de la app.
A diferencia del broker externo (RF30), aquí Finnova actúa como front-end de un socio financiero regulado que capta, resguarda y paga el rendimiento; Finnova no custodia los fondos con balance propio. El saldo y el rendimiento (balance, accrued_yield) se cifran a nivel de campo (Cifrado §4.2). Todo monto sigue RNF-05 (decimal + moneda).
| Campo | Valor |
|---|---|
| Módulo | Investments Module (integración con socio regulado) |
| Actor | Usuario autenticado |
| Endpoint | POST /investments/savings/deposits (borrador) |
| Precondiciones | Sesión activa; KYC aprobado por el socio; perfil de riesgo completo; fondos válidos; términos y riesgos aceptados |
| Prioridad | Fuera de MVP (requiere socio regulado y marco AML/KYC) |
| Etapa | MBI 3 |
| Requisitos relacionados | RF29, RF30, RF45, RNF-14 |
Reglas de negocio
- RN-31.1 — Se requiere KYC aprobado por el socio regulado, perfil de riesgo completo y aceptación explícita de términos/riesgos antes de depositar.
- RN-31.2 — El depósito se valida contra fondos/método de pago disponibles y los límites AML/PLD del socio.
- RN-31.3 —
balanceyaccrued_yieldse cifran a nivel de campo (clave por usuario). - RN-31.4 — Todo depósito es idempotente (idempotency key) para evitar duplicar movimientos ante reintentos (RNF-09).
- RN-31.5 — Se registra el movimiento con su estado (
pending,confirmed,failed) y comprobante; la fuente de verdad del saldo/rendimiento es el socio regulado. - RN-31.6 — La tasa de rendimiento, condiciones de liquidez (retiro) y cualquier cobertura/garantía se muestran con descargo de responsabilidad; no constituye asesoría financiera personalizada formal.
Validaciones de entrada
| Campo | Reglas | Mensaje de error |
|---|---|---|
instrumentId | Obligatorio. Instrumento válido. | "Selecciona un instrumento válido." |
amount | Obligatorio. Numérico ≥ mínimo del instrumento. | "El monto mínimo para este instrumento es X." |
termsAccepted | Obligatorio. Debe ser true. | "Debes aceptar los términos y riesgos de inversión." |
Validación de tipos/montos y consultas parametrizadas; no se aceptan inyecciones SQL.
Criterios de aceptación
Escenario 1: Inversión exitosa
Dado que tengo perfil de inversión completo, fondos suficientes y acepto los términos,
Cuando confirmo una orden con un monto válido,
Entonces el sistema crea la orden (idempotente), descuenta/cobra el monto,
Y actualiza mi portafolio (valores cifrados),
Y responde 201 Created con comprobante.
Escenario 2: Monto por debajo del mínimo
Dado que ingreso un monto menor al mínimo del instrumento,
Cuando intento confirmar,
Entonces el sistema responde 400 con "El monto mínimo para este instrumento es X".
Escenario 3: Fondos/método de pago insuficientes
Dado que no tengo fondos suficientes,
Cuando intento invertir,
Entonces el sistema responde 402/400 con un mensaje claro y no ejecuta la orden.
Escenario 4: Términos no aceptados
Dado que no acepto los términos y riesgos, Cuando intento confirmar, Entonces la acción se bloquea con "Debes aceptar los términos y riesgos de inversión".
Escenario 5: Reintento duplicado (seguridad/consistencia)
Dado que reintento la misma orden por un fallo de red, Cuando llega con la misma idempotency key, Entonces el sistema no crea una inversión duplicada.
Criterios no funcionales
- Operación transaccional; valores del portafolio cifrados en reposo.
- Comunicación TLS 1.2+; comprobante auditable.