# Modelo de base de datos: gastos e ingresos

La aplicación usa IndexedDB en el navegador para persistir los movimientos sin servidor ni frameworks.

## Base de datos

- Nombre: `qofre_finanzas`
- Versión: `1`

## Tabla / object store: `transactions`

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `id` | number | Sí | Identificador autoincremental. |
| `type` | enum | Sí | `income` para ingreso o `expense` para gasto. |
| `amount` | number | Sí | Monto positivo del movimiento. |
| `category` | string | Sí | Categoría simple, por ejemplo `Comida`, `Sueldo`, `Transporte`. |
| `date` | string | Sí | Fecha en formato `YYYY-MM-DD`. |
| `note` | string | No | Descripción corta opcional. |
| `createdAt` | string | Sí | Fecha/hora ISO en que se registró el movimiento. |

## Índices

- `date`: permite ordenar o filtrar movimientos por fecha.
- `type`: permite separar ingresos y gastos.

## Reglas mínimas

- `amount` debe ser mayor que `0`.
- `type` solo acepta `income` o `expense`.
- `date` debe guardarse como texto ISO `YYYY-MM-DD`.
- Los totales se calculan desde los registros guardados:
  - ingresos = suma de movimientos `income`
  - gastos = suma de movimientos `expense`
  - balance = ingresos - gastos

