Especificación de Módulo: MOD-FINANCE (Finanzas Personales y Presupuesto)
Fase: 03 — Ingeniería de Requisitos
Entregable: 07 de 09 — Especificación Detallada de Módulos
Módulo ID: MOD-FINANCE (11 de 15)
Bounded Context: PersonalAccounting / Contabilidad Personal y Presupuestos
Ubicación de Almacenamiento: .notevault/finanzas/ (transactions.json, budgets.json, accounts.json)
Responsable Técnico: NoteVault Core Engineering
1. Alcance y Responsabilidades del Módulo
El módulo MOD-FINANCE proporciona un sistema local de contabilidad de doble partida simplificada, gestión de presupuestos y control de flujo de caja:
- Libro Diario de Transacciones: Registro minucioso de ingresos (income), gastos (expense) y transferencias entre cuentas, capturando fecha, monto numérico, moneda, categoría, cuenta origen/destino y notas descriptivas.
- Gestión de Cuentas Financieras: Soporte para múltiples cuentas (Efectivo, Cuenta Bancaria, Tarjeta de Crédito, Billetera Digital, Ahorro/Inversión) con balance actualizado en tiempo real.
- Presupuestos Mensuales por Categoría: Asignación de topes de gasto mensual (Vivienda, Alimentación, Transporte, Educación, Entretenimiento, Salud) con barras de ejecución en semáforo (Verde < 70%, Ámbar 70-95%, Rojo > 100%).
- Análisis Gráfico de Flujo de Caja: Gráficos interactivos de ingresos vs gastos mensuales, tasa de ahorro acumulada y desglose porcentual de gastos por categoría.
- Coach Financiero Local: Motor analítico (
financeCoach.ts) que identifica gastos recurrentes, detecta desvíos atípicos en categorías y proyecta la fecha estimada de cumplimiento de metas de ahorro. - Privacidad Financiera Absoluta: 100% de los datos bancarios y montos residen en disco en formato JSON cifrable localmente, sin conexión a agregadores bancarios de terceros.
2. Marco Conceptual: Entidad Transacción Financiera en el Dominio
1. **Entidad principal e independiente.**
2. **Es la entidad líder del conjunto de datos:** posee un identificador global único alfanumérico inmutable (`transaction_id`: `txn_20261020_exp_supermercado`), invocado por los balances de cuentas y el cálculo presupuestario.
3. **Existe por sí misma en el registro `.notevault/finanzas/transactions.json` sin depender de una cuenta padre**, y es la única responsable de validar que el monto sea un valor estrictamente positivo y que la fecha corresponda a un formato ISO válido antes de ser persistida.
4. **Punto de entrada y límite de consistencia:** Cada inserción o anulación de transacción actualiza atómicamente el saldo disponible de las cuentas asociadas y el acumulado de la categoría correspondiente.
3. Requisitos Funcionales del Módulo (RF)
| ID RF | Declaración del Requisito Funcional | Prioridad MoSCoW | Criterio de Verificación |
|---|---|---|---|
| RF-FIN-01 | El sistema DEBE permitir registrar transacciones de ingreso, gasto y transferencia indicando monto, fecha, categoría y cuenta. | Must Have | Componente FinanceModule.tsx agrega la transacción y actualiza saldos al instante. |
| RF-FIN-02 | El sistema DEBE calcular y mostrar el balance neto actual sumando todas las cuentas financieras activas. | Must Have | Balance Total = Suma(Ingresos) - Suma(Gastos) en el mes seleccionado. |
| RF-FIN-03 | El sistema DEBE permitir definir presupuestos mensuales máximos por categoría y mostrar el porcentaje consumido. | Must Have | Alerta visual en rojo si gasto_categoria > presupuesto_asignado. |
| RF-FIN-04 | El sistema DEBE permitir crear, editar y archivar cuentas bancarias o billeteras con su saldo inicial. | Must Have | Las transacciones imputadas a una cuenta debitan o acreditan su saldo reactivamente. |
| RF-FIN-05 | El sistema DEBE presentar un gráfico mensual de distribución de gastos agrupado por categorías principales. | Should Have | Gráfico de dona o barras horizontales renderiza proporciones exactas. |
| RF-FIN-06 | El sistema DEBE permitir exportar el historial de transacciones a formato CSV para auditorías en hojas de cálculo externas. | Should Have | Generación de archivo descargable con campos: ID, Fecha, Tipo, Categoría, Monto, Cuenta. |
| RF-FIN-07 | El sistema DEBE emitir advertencias proactivas mediante financeCoach.ts cuando el ritmo de gasto proyecte agotar el presupuesto antes de fin de mes. |
Could Have | Alerta no intrusiva: "Al ritmo actual, el presupuesto de Ocio se superará el día 22". |
4. Requisitos No Funcionales del Módulo (RNF Local)
| ID RNF | Dimensión ISO 25010 | Declaración y Métrica Cuantitativa | Método de Medición |
|---|---|---|---|
| RNF-FIN-01 | Eficiencia de Desempeño | Velocidad de Balance: El cálculo de saldos y agregaciones sobre un historial de 10,000 transacciones debe tardar < 20 ms. | Benchmark de agregación de arrays en useFinance. |
| RNF-FIN-02 | Confiabilidad | Precisión Monetaria: Todas las operaciones de montos deben almacenarse en centavos enteros o con aritmética decimal fija para evitar errores de coma flotante (0.1 + 0.2). |
Test unitario con sumas fraccionarias acumuladas. |
| RNF-FIN-03 | Seguridad | Privacidad Local: El módulo jamás debe enviar montos, descripciones o balances a ningún servidor o servicio analítico remoto. | Inspección de tráfico de red en tests E2E certificando 0 peticiones salientes. |
| RNF-FIN-04 | Usabilidad | Soporte de Moneda Configurable: Capacidad de formatear montos en moneda local (USD, EUR, COP, MXN, etc.) con sus símbolos y separadores de miles/decimales. | Test de formateo con Intl.NumberFormat. |
5. Historias de Usuario con Criterios Gherkin
US-FIN-01: Registro rápido de gasto y actualización de presupuesto
Como usuario que cuida sus finanzas personales,
Quiero registrar un gasto de supermercado de $45.00 en mi cuenta bancaria,
Para verificar cuánto dinero me queda disponible en mi presupuesto de Alimentación para el resto del mes.
Escenario: Registro de gasto e impacto presupuestario
Dado que el presupuesto de "Alimentación" tiene un tope de $300.00 y lleva gastado $180.00
Cuando el usuario registra un gasto de $45.00 con categoría "Alimentación"
Entonces el sistema debita $45.00 del saldo de la cuenta
Y el acumulado de la categoría sube a $225.00 (75% del presupuesto)
Y la barra de progreso cambia de verde a color ámbar de advertencia
Y la transacción se guarda atómicamente en "transactions.json".
6. Especificación Detallada de Casos de Uso
UC-FIN-01: Registrar Transacción Financiera
| Campo | Detalle de Especificación |
|---|---|
| ID y Nombre | UC-FIN-01 — Registrar Transacción Financiera |
| Actor Principal | Usuario Registrado |
| Precondición | Existe al menos una cuenta financiera configurada en .notevault/finanzas/accounts.json. |
| Flujo Principal | 1. El usuario pulsa "+ Nueva Transacción". 2. Selecciona el tipo: Gasto, Ingreso o Transferencia. 3. Ingresa el monto numérico y la fecha (por defecto hoy). 4. Selecciona la categoría (ej. "Transporte") y la cuenta (ej. "Efectivo"). 5. Añade una nota descriptiva opcional. 6. Pulsa "Confirmar Transacción". 7. El sistema valida que el monto sea > 0 y genera el ID de transacción. 8. Añade la transacción al registro en memoria y actualiza el saldo de la cuenta. 9. Si es un gasto, suma el monto al presupuesto de la categoría correspondiente. 10. Ejecuta la escritura atómica en .notevault/finanzas/transactions.json.11. Muestra la transacción en la parte superior del listado histórico. |
| Flujos Alternativos | A1 (Transferencia entre cuentas): Si el tipo es "Transferencia", el usuario selecciona cuenta origen y cuenta destino. El sistema debita la cuenta origen y acredita la cuenta destino en una única transacción atómica. |
| Excepciones | E1 (Monto negativo o cero): El sistema bloquea el registro y resalta el campo de monto con mensaje "El monto debe ser superior a 0". |
| Postcondición | El archivo transactions.json almacena el registro y el balance global de la cuenta queda actualizado. |
7. Diagrama de Actividad del Módulo
flowchart TD
A[Abrir Módulo de Finanzas] --> B[Cargar transactions.json y accounts.json]
B --> C[Calcular Balance Total y Presupuestos del Mes]
C --> D[Renderizar Dashboard y Gráfico de Categorías]
D --> E{Acción de Usuario}
E -->|Registrar Gasto/Ingreso| F[Formulario de Transacción]
E -->|Definir Presupuesto| G[Asignar Topes Mensuales por Categoría]
E -->|Exportar a CSV| H[Generar Archivo CSV Descargable]
F --> I[Validar Monto > 0 y Campos Obligatorios]
I --> J{¿Tipo de Transacción?}
J -->|Gasto| K[Debitar Cuenta y Sumar a Gasto de Categoría]
J -->|Ingreso| L[Acreditar Cuenta y Sumar a Ingresos del Mes]
J -->|Transferencia| M[Debitar Origen y Acreditar Destino]
K --> N[Comprobar Si Supera Presupuesto]
N -->|Sí| O[Activar Badge Rojo de Alerta Presupuestaria]
N -->|No| P[Continuar]
O --> Q[Serializar transactions.json y accounts.json]
P --> Q
L --> Q
M --> Q
Q --> R[Escritura Atómica en Disco]
R --> C
8. Implicación de Compuerta de Fase (Gate 3 Criteria)
- ¿Bloquea el avance a Modelado/Fase 4?: No.
- Condición de Pase: Las rutinas de cálculo financiero utilizan precisión decimal exacta sin desbordamiento de punto flotante y operan con persistencia local simétrica entre plataformas.