El móduloDocumentation 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.
src/utils/format.js concentra toda la lógica de presentación y cálculo numérico de GastosApp. Exporta funciones puras —sin efectos secundarios ni dependencias de estado— que son consumidas por páginas, componentes y la suite de tests. Todas las operaciones con fechas usan tiempo local para evitar desfases UTC en las zonas horarias chilenas (UTC-3 / UTC-4).
formatCLP
Convierte un número a su representación en pesos chilenos usando el localees-CL de la API Intl.NumberFormat.
Valor numérico a formatear. Se acepta también un string numérico;
null y undefined se tratan como 0.string con formato de moneda CLP (separador de miles con punto, sin decimales).
parseLocalDate
Parsea una cadena'YYYY-MM-DD' como fecha local, evitando el desfase de zona horaria que ocurre al usar new Date('YYYY-MM-DD') (que interpreta la cadena como UTC medianoche y puede retroceder un día en Chile).
Fecha en formato
'YYYY-MM-DD'. Retorna null si el valor está vacío o mal formado.Date construido con new Date(year, month - 1, day) —sin conversión UTC.
Esta función es la base de todas las demás operaciones con fechas del módulo. Usarla garantiza que
formatDate('2025-06-15') siempre muestre el día 15, independientemente de si el sistema corre en UTC-3 o UTC-5.formatDate
Formatea una fecha'YYYY-MM-DD' a la representación local larga 'DD/MM/YYYY' según el locale es-CL.
Fecha en formato
'YYYY-MM-DD'. Retorna '—' para valores vacíos o inválidos.string con formato 'DD/MM/YYYY' o '—' en caso de error.
formatDateShort
Formatea una fecha'YYYY-MM-DD' a su representación corta 'DD Mmm' (día + mes abreviado) según el locale es-CL.
Fecha en formato
'YYYY-MM-DD'. Retorna '—' para valores vacíos o inválidos.string con formato corto, por ejemplo '15 jun.'. Útil para columnas de tabla con espacio reducido.
getMesLabel
Genera la etiqueta textual de un mes y año dados.Año con cuatro dígitos, por ejemplo
2025.Mes en base 0 (enero =
0, diciembre = 11), igual que Date.getMonth().string con el nombre del mes y el año, por ejemplo 'Junio 2025'.
getMesesOptions
Genera la lista de los últimos 12 meses desde el mes actual, ordenados del más reciente al más antiguo. Se usa para poblar el selector de período en los módulos de facturas, gastos y compromisos. No recibe parámetros. Retorna:Array<{ year: number, month: number, label: string }> con 12 elementos.
getItemsByMonth
Filtra un array de documentos (gastos, facturas, etc.) por año y mes, usando el campofecha del documento. Si fecha no existe, recurre a createdAt.
Array de documentos. Cada elemento debe tener un campo
fecha ('YYYY-MM-DD') o createdAt (ISO string).Año con cuatro dígitos.
Mes en base 0 (enero =
0).buildNCMap
Construye un mapa de cobertura de Notas de Crédito indexado porfacturaRefId. Se usa para calcular el monto efectivo de cada factura una vez descontadas sus NC vinculadas, incluso cuando la NC pertenece a un período diferente al de la factura.
Array completo de facturas (puede incluir facturas ordinarias y Notas de Crédito). Solo se procesan los elementos cuyo
tipoDoc === 'Nota de Crédito' y que tengan facturaRefId definido.object con estructura { [facturaId: string]: number }, donde el valor es la suma total de todas las NC vinculadas a esa factura.
La función filtra por tipoDoc === 'Nota de Crédito' y facturaRefId no nulo, luego acumula los totales agrupados por facturaRefId:
Las NC sin
facturaRefId (NC no vinculadas) no aparecen en el mapa. Su efecto se aplica directamente en calcTotals.calcTotals
Calcula los totales agregados de un conjunto de ítems (gastos por caja o facturas SII), aplicando correctamente la deducción de Notas de Crédito tanto vinculadas como no vinculadas.Array de documentos del período a calcular.
Mapa de cobertura NC generado por
buildNCMap. Opcional: si se omite, la función construye un mapa interno a partir de los propios items (comportamiento anterior). Se recomienda pasar el mapa externo cuando hay NC de períodos distintos al del período analizado.{ neto: number, iva: number, total: number, pagado: number, pendiente: number }.
Lógica de deducción de NC
- NC vinculada (
facturaRefIddefinido): el monto de la NC se descuenta deleffectiveAmtde la factura referenciada (Math.max(0, amt - ncCovered)). La NC en sí se omite del acumulador para evitar doble conteo. - NC sin vínculo (
facturaRefIdnulo): su neto, IVA y total se restan directamente del acumulador global.
addDays
Suma un número de días a una fecha'YYYY-MM-DD' y retorna la nueva fecha en el mismo formato. Usa parseLocalDate internamente para evitar desfases UTC.
Fecha base en formato
'YYYY-MM-DD'.Número de días a sumar (puede ser negativo para restar días).
string en formato 'YYYY-MM-DD' o null si algún parámetro es inválido.
getPendienteHealth
Calcula el estado de salud (semáforo) de un documento pendiente de pago según cuántos días han transcurrido desde su fecha de referencia. Si se proporcionafechaVencimiento, esta tiene prioridad sobre fecha.
Fecha del documento en formato
'YYYY-MM-DD'. Se usa como referencia si no se pasa fechaVencimiento.Fecha de vencimiento opcional en formato
'YYYY-MM-DD'. Cuando se pasa, el semáforo se calcula sobre esta fecha en lugar de fecha. Útil para proveedores con plazoPago configurado.{ label: string, color: 'blue' | 'green' | 'yellow' | 'red' }.
Tabla del semáforo
| Días desde la fecha de referencia | label | color |
|---|---|---|
< 0 (fecha futura) | 'Programado' | 'blue' |
0 – 3 | 'Pendiente' | 'green' |
4 – 7 | 'Pendiente' | 'yellow' |
> 7 | 'Atrasado' | 'red' |
parseSIIDate
Convierte una fecha en formatoDD/MM/YYYY (formato usado por el SII en los CSV del Libro de Compras) al formato interno 'YYYY-MM-DD'. Si la cadena ya está en formato ISO, la retorna sin cambios.
Cadena de fecha. Acepta
'DD/MM/YYYY' o 'YYYY-MM-DD'. Retorna '' para valores nulos o vacíos.string en formato 'YYYY-MM-DD' o ''.
parseNumber
Parsea cadenas numéricas con formato chileno (puntos como separador de miles, coma como separador decimal) y las convierte anumber. Elimina cualquier carácter no numérico, incluyendo el símbolo $.
Cadena numérica a parsear. Retorna
0 para valores vacíos, null o undefined.number (resultado de parseFloat después de normalizar la cadena).