Targ Apps Docs

Páginas secundarias (wireframes)

Categories, Budgets y Reports en Targ-Apps-Finance.

Categories (pages/Categories.js, TAF-007)

CRUD conectado a useFinance() con UI Chroma-Style (.cs-card, .cs-btn, tabs) y CategoryForm sobre FormField.

BloqueImplementación
SeeddefaultCategories.js sembrado en FinanceProvider con seedIfEmpty
TabsFiltro reactivo por income / expense (botones .cs-btn)
ListaTarjetas por categoría con swatch de color, icono y acciones
FormularioCategoryForm + FormField; validación de nombre único por tipo; entrada animada
EliminarremoveCategory; bloqueado si hay transacciones (toast + botón deshabilitado)

Budgets (pages/Budgets.js, TAF-014)

Lógica conectada a useFinance() con UI tipo ledger (.taf-budgets-*):

BloqueImplementación
CabeceraPageHeader + CTA «Nuevo presupuesto» con icono Lucide plus
PeriodoBarra .taf-budgets-period con mes activo (currentPeriod) y contador de categorías
ListaMap sobre budgets() con BudgetProgress (.taf-budgets-item)
FormularioBudgetForm + addBudget (panel .taf-budgets-form-panel, toggle con Show)
ProgresogetBudgetSpent / getBudgetProgress — barra contenida cobre/ámbar/rojo según data-status: ok, warning, exceeded
VacíoEmptyState con icono pieChart y CTA «Nuevo presupuesto»
DuplicadosRechazados si ya existe presupuesto monthly para la categoría

Solo categorías expense pueden tener presupuesto. Eliminar vía icono trash2 en cada ítem.

Reports (pages/Reports.js, TAF-013)

Reportes con jerarquía tipográfica y pestañas estilo ledger. Estilos en finance.css con prefijo .taf-reports-*. ECharts (CDN globalThis.echarts) y cálculos en logic/reportCalculations.js:

BloqueImplementación
HeaderPageHeader — eyebrow «Análisis», título «Reportes»
Selector de rango (firma visual).taf-reports-period — pestañas con subrayado cobre: Este mes / Trimestre / Año (hookState)
Indicadores del periodo.taf-reports-ledger — ingresos, gastos, resultado y % de ahorro en fila tipográfica (sin tarjetas de color)
Gastos por categoríaCategoryDonutChart + groupExpensesByCategory + desglose con barras cobre (.taf-reports-breakdown)
Tendencia mensualTrendChart — últimos 6 meses (mensual); gráficos embebidos sin doble tarjeta (embedded)
PatrimonioNetWorthChart — panel ancho .taf-reports-panel--wide; mensual (6 meses)
Tooltips y leyendasbuildChartTooltip() + getChartTheme() (confine, appendToBody, posición dentro del view rect; evita recorte en paneles embebidos)
Estado vacíoEmptyState — «Sin movimientos para analizar» con CTA a transacciones
AnimaciónanimateCards al cambiar rango
Carga de gráficosSpinner .chart-loader (--cs-primary); aria-busy en contenedor

Los wrappers viven en src/components/charts/ (mountEcharts.js, chartStyles.js con cva). Sin dependencias React — solo el runtime ECharts del CDN. Si no hay datos, se muestra el mensaje vacío (data-slot="empty") y no el spinner.

API de cálculos (logic/reportCalculations.js):

  • getRangeBounds, filterTransactionsByRange
  • groupExpensesByCategory / groupByCategory
  • groupIncomeExpenseByMonth / groupByMonth
  • groupIncomeExpenseByDay — día 1 al fin del mes (dashboard, granularity: "day")
  • computeNetWorthTrend
  • computeNetWorthTrendByDay — patrimonio diario del mes en curso
  • hasChartData

Los datos provienen de useFinance().transactions, categories, activeAccounts — sin duplicar fórmulas de ledger.js.

Convención

Atributos data-page, data-slot, data-wireframe y data-status para pruebas e implementación.

On this page