Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Davidmallega/Gastos-App/llms.txt

Use this file to discover all available pages before exploring further.

GastosApp maneja cuatro entidades principales que se persisten como arrays de objetos planos dentro del JSON almacenado en localStorage. No existe un ORM ni un esquema formal: los objetos son literales de JavaScript que siguen las formas definidas a continuación. Conocer estos modelos es fundamental para extender la app, depurar datos exportados o escribir tests sobre la lógica de negocio.

GastoCaja

Representa un gasto pagado por caja (efectivo, débito o transferencia) que puede o no tener boleta de respaldo. El IVA siempre es cero para este tipo de documento.
{
  id,
  fecha,          // 'YYYY-MM-DD'
  numero,         // N° boleta (si tieneDocumento: true)
  proveedor,
  categoria,
  metodoPago,
  tieneDocumento, // false = Sin Doc · true = Con Boleta
  neto, iva, total, // iva siempre 0
  observaciones,
  pagado,
  fechaPago,      // 'YYYY-MM-DD' elegida en el modal de pago
  tipo: 'caja',
  createdAt,      // ISO string
}
id
string
required
Identificador único generado al crear el registro. Se construye concatenando Date.now().toString() con un fragmento aleatorio de Math.random().toString(36).
fecha
string
required
Fecha del documento en formato 'YYYY-MM-DD'. Se almacena como string para evitar desfases de zona horaria en Electron (ver Arquitectura → Fechas como string).
numero
string
Número de boleta. Solo aplica cuando tieneDocumento es true. Puede quedar vacío si el usuario no lo ingresa.
proveedor
string
required
Nombre del proveedor tal como aparece en el directorio de proveedores. Se usa para el auto-completado y para las consultas de cascada al renombrar proveedores.
categoria
string
required
Nombre de la categoría asignada al gasto. Debe coincidir con un valor del array categorias del estado global.
metodoPago
string
required
Método de pago utilizado. Valores típicos: 'Efectivo', 'Débito', 'Transferencia'.
tieneDocumento
boolean
required
Indica si el gasto tiene respaldo de boleta. false = Sin Documento · true = Con Boleta. Afecta si se muestra el campo numero en la UI.
neto
number
required
Monto neto del gasto en pesos chilenos (CLP). En gastos caja equivale al total ya que el IVA es siempre 0.
iva
number
required
Monto del IVA. Siempre es 0 en gastos caja. Se incluye en el modelo por consistencia con el modelo Factura.
total
number
required
Monto total del gasto en CLP. Equivale a neto dado que iva siempre es 0.
observaciones
string
Texto libre de observaciones. Puede estar vacío.
pagado
boolean
required
Estado de pago. false = pendiente · true = pagado. Se actualiza con marcarPagado y se puede revertir con revertirPago.
fechaPago
string
Fecha en que se registró el pago, en formato 'YYYY-MM-DD'. Es null mientras el gasto esté pendiente.
tipo
string
required
Literal 'caja'. Permite discriminar entre gastos y facturas en colecciones mixtas (por ejemplo, en la vista de Pagos Pendientes).
createdAt
string
required
Timestamp ISO completo del momento en que se creó el registro (new Date().toISOString()). Se usa para ordenamiento cronológico interno.

Factura

Representa una factura electrónica SII o una Nota de Crédito. Las Notas de Crédito pueden vincularse a la factura que anulan mediante facturaRefId; la app deduce automáticamente el monto neto a pagar en las vistas de pendientes y totales.
{
  id, fecha,
  tipoDoc,        // 'Factura' | 'Nota de Crédito'
  numero,         // folio SII
  rutProveedor,
  proveedor,
  categoria,
  metodoPago,
  neto, iva, total,
  observaciones,
  pagado,
  fechaPago,
  facturaRefId,   // solo NC: ID de la factura que anula (o null)
  tipo: 'factura',
  createdAt,
}
id
string
required
Identificador único generado con el mismo patrón que GastoCaja.id.
fecha
string
required
Fecha de emisión del documento SII en formato 'YYYY-MM-DD'.
tipoDoc
string
required
Tipo de documento. Acepta exactamente dos valores: 'Factura' o 'Nota de Crédito'.
numero
string
required
Folio SII del documento. Se usa para detectar duplicados en la importación CSV.
rutProveedor
string
RUT del proveedor con el formato tal como viene del SII (puede incluir puntos y guión). Se usa para el auto-completar y para vincular con el directorio de proveedores.
proveedor
string
required
Razón social del proveedor emisor.
categoria
string
required
Categoría asignada al documento.
metodoPago
string
Método de pago. Puede quedar vacío si se completa al marcar como pagado.
neto
number
required
Monto neto en CLP (sin IVA).
iva
number
required
IVA calculado al 19% sobre el neto. En la UI se auto-calcula al ingresar el neto.
total
number
required
Total del documento: neto + iva.
observaciones
string
Texto libre de observaciones.
pagado
boolean
required
Estado de pago del documento.
fechaPago
string
Fecha de pago en formato 'YYYY-MM-DD'. Es null mientras esté pendiente.
facturaRefId
string
Solo para Notas de Crédito: contiene el id de la factura que esta NC anula. Es null si el documento es una factura regular o si la NC no está vinculada. Este campo se agregó en la migración v1 → v2.
tipo
string
required
Literal 'factura'. Discriminador de tipo en colecciones mixtas.
createdAt
string
required
Timestamp ISO de creación del registro.

Proveedor

Directorio de proveedores con información fiscal y comercial. La razonSocial es el campo canónico que se usa en los documentos; nombreFantasia se muestra como tooltip en las tablas.
{
  id, rut,
  razonSocial,    // requerido
  nombreFantasia,
  contacto,
  categoria,
  plazoPago,      // días (null = sin plazo)
  observaciones,
}
id
string
required
Identificador único. Los proveedores creados antes de la v1 del schema tienen IDs del tipo 'legacy_0', 'legacy_1', etc.
rut
string
RUT del proveedor. Puede estar vacío si el proveedor no tiene RUT registrado. Se normaliza para comparaciones eliminando puntos, guión y espacios.
razonSocial
string
required
Nombre legal del proveedor. Es el campo canónico que aparece en los documentos y se usa en las búsquedas de auto-completar.
nombreFantasia
string
Nombre comercial o de fantasía. Se muestra como tooltip sobre la razón social en las tablas cuando difiere de ella.
contacto
string
Información de contacto libre (email, teléfono, nombre de contacto).
categoria
string
Categoría por defecto que se asigna automáticamente al seleccionar este proveedor en un formulario de gasto o factura.
plazoPago
number
Días de plazo de pago acordados con el proveedor. Se usa para calcular una _fechaVencimiento virtual al renderizar la lista de pendientes. null significa sin plazo definido. Este campo se agregó en la migración v3 → v4.
observaciones
string
Texto libre de observaciones internas sobre el proveedor.

Compromiso

Plantilla de gasto recurrente que genera automáticamente documentos (GastoCaja o Factura) al registrarse. El estado del compromiso se calcula dinámicamente en cada apertura de la app comparando ultimoRegistro con la frecuencia y el día de vencimiento configurados.
{
  id, nombre,
  tipo,           // 'caja' | 'factura'
  monto,
  categoria,
  proveedor,
  metodoPago,
  frecuencia,     // 'mensual'|'quincenal'|'semanal'|'bimestral'|'trimestral'|'anual'
  diaMes,         // 1-31 (frecuencias no semanales)
  diaSemana,      // 0-6 (solo semanal)
  activo,
  observaciones,
  ultimoRegistro, // ISO string
  ultimoRegistroId,
  creadoEn,
}
id
string
required
Identificador único del compromiso.
nombre
string
required
Nombre descriptivo del compromiso (ej. 'Arriendo local', 'Luz mensual').
tipo
string
required
Tipo de documento que genera al registrarse. 'caja' crea un GastoCaja; 'factura' crea una Factura con IVA calculado al 19%.
monto
number
required
Monto del compromiso en CLP. Si tipo es 'factura', el neto se calcula como Math.round(monto / 1.19) y el IVA como monto - neto.
categoria
string
required
Categoría que se asigna al documento generado.
proveedor
string
Nombre del proveedor que se asigna al documento generado. Si está vacío, se usa nombre.
metodoPago
string
Método de pago que hereda el documento generado.
frecuencia
string
required
Frecuencia de repetición. Valores posibles: 'mensual', 'quincenal', 'semanal', 'bimestral', 'trimestral', 'anual'.
diaMes
number
Día del mes de vencimiento (1–31). Aplica a todas las frecuencias excepto 'semanal'.
diaSemana
number
Día de la semana de vencimiento (0 = domingo, 6 = sábado). Solo aplica cuando frecuencia es 'semanal'.
activo
boolean
required
Indica si el compromiso está activo. Un compromiso inactivo no genera alertas de vencimiento y aparece con el estado 'Inactivo' en la UI.
observaciones
string
Texto libre de observaciones.
ultimoRegistro
string
Timestamp ISO del momento en que se registró por última vez este compromiso (new Date().toISOString()). Es null si nunca se ha registrado. La lógica de estado (getCompromisoStatus) lo compara con la fecha actual y la frecuencia para determinar si el compromiso está Registrado, Vencido, Próximo, etc.
ultimoRegistroId
string
id del último documento (GastoCaja o Factura) generado al registrar el compromiso. Permite navegar desde el compromiso al documento generado.
creadoEn
string
required
Timestamp ISO de creación del compromiso.

Estado del schema

El estado completo se serializa como un único objeto JSON bajo la clave 'gastos_app_data' en localStorage:
{
  schemaVersion: 4,
  gastosCaja:  [...],
  facturas:    [...],
  compromisos: [...],
  categorias:  [...],
  proveedores: [...],
  papelera:    [...],
}
La propiedad schemaVersion es 4 en la versión actual. Al cargar los datos (al iniciar la app o al importar un backup), la función migrateData aplica las migraciones necesarias para llevar cualquier versión anterior al schema actual sin pérdida de datos.
Cuando un registro se elimina desde cualquier módulo de la app, no se borra permanentemente: se mueve al array papelera[] con dos campos adicionales agregados automáticamente:
  • deletedAt: timestamp ISO del momento de la eliminación.
  • deletedFrom: string que indica el array de origen ('gastosCaja', 'facturas' o 'compromisos').
La constante PAPELERA_DAYS = 30 define el tiempo de retención. Al iniciar la app, la función purgePapelera elimina silenciosamente todos los ítems cuyo deletedAt supere los 30 días. Los ítems dentro del plazo pueden restaurarse a su sección original con todos sus datos intactos.

Build docs developers (and LLMs) love