Reportes financieros
La vista de Reportes (ruta /accounting/reportes) te entrega tres reportes financieros clave para entender la salud de tu negocio en un periodo:
- Estado de resultados: ingresos, egresos y utilidad neta, con variación porcentual vs periodo anterior.
- Flujo de efectivo: saldo inicial, entradas, salidas, flujo neto y saldo final, con tabla diaria.
- Saldos: lista por cuenta con saldo inicial y final del periodo.
Cada reporte permite filtrar por sucursal (“Todas” o una específica) y por rango de fechas desde/hasta, exportar a CSV dinámico según el tab activo e imprimir nativo (window.print).
La vista incluye el disclaimer en el footer: “No sustituye estados financieros fiscales ni contabilidad de partida doble”. Úsala como herramienta de gestión operativa, no como reemplazo de tu software contable certificado.
Para ver movimientos detalle por detalle usa Ingresos; para registrar salidas usa Egresos; para configurar cuentas y categorías revisa Configuración contable.
Antes de empezar
Sección titulada «Antes de empezar»- Selector de sucursal del header ya aplicado. Si estás en “Todas” verás datos consolidados y una sección adicional “Resultado por sucursal”. Si estás en una sucursal específica, los KPIs solo serán de esa sucursal.
- Rango de fechas definido. El reporte siempre consulta por
date_fromydate_to(formato ISOYYYY-MM-DD). Sin fechas, no carga. - Movimientos
posteden el periodo. Reportes solo considera movimientosposted(ypaidcuando aplica).voided,draft,pendingyto_payse excluyen. - Cuentas y categorías configuradas. Si no tienes categorías o cuentas activas, las tablas “por categoría” y “por cuenta” saldrán vacías.
- Conceptos previos útiles:
- Periodo anterior: el rango igual anterior inmediato al rango actual. Si pides
01/06al30/06/2026, el periodo anterior es01/05al31/05/2026. - Variación %:
(valor actual − valor anterior) / valor anterior × 100. Si el periodo anterior fue cero, la variación se muestra como “n/a”.
- Periodo anterior: el rango igual anterior inmediato al rango actual. Si pides
- Tiempo de lectura: 7 minutos.
Paso a paso detallado
Sección titulada «Paso a paso detallado»Parte 1: Conocer la pantalla
Sección titulada «Parte 1: Conocer la pantalla»Elementos comunes a los 3 tabs
Sección titulada «Elementos comunes a los 3 tabs»| Zona | Contenido |
|---|---|
| Selects de fecha | ”Desde” y “Hasta” en formato DD/MM/YYYY. |
| Botón Actualizar | Dispara la consulta con los filtros actuales. |
| Botón CSV | Exporta el tab activo a csv (nombre dinámico según tab y rango). |
| Botón Imprimir | Abre el diálogo nativo de impresión (window.print). |
| Tabs | Estado de resultados / Flujo de efectivo / Saldos. |
| Footer disclaimer | ”No sustituye estados financieros fiscales ni contabilidad de partida doble”. |
Flujo general
Sección titulada «Flujo general»- Selecciona sucursal en el header (o “Todas”).
- Define rango de fechas Desde/Hasta.
- Clic en Actualizar. La vista llama a
AccountingService.getIncomeStatement({date_from, date_to, sucursal_id})y/ogetCashFlow(...). - Revisa los KPIs, tablas y variaciones.
- Exporta CSV o imprime si lo necesitas.
Parte 2: Tab Estado de resultados
Sección titulada «Parte 2: Tab Estado de resultados»KPIs superiores
Sección titulada «KPIs superiores»| KPI | Significado |
|---|---|
| Ingresos | Suma de movimientos de tipo ingreso posted en el rango. |
| Egresos | Suma de movimientos de tipo egreso posted en el rango. |
| Utilidad neta | Ingresos − Egresos. |
Cada KPI muestra su variación porcentual vs periodo anterior:
- Flecha verde si variación positiva.
- Flecha roja si variación negativa.
- “n/a” si el periodo anterior tuvo valor cero (no se puede dividir sobre cero).
- Ingresos por categoría: categoría, monto total, % del total de ingresos.
- Egresos por categoría: categoría, monto total, % del total de egresos.
- Resultado por sucursal (solo si header = “Todas”): sucursal | ingresos | egresos | utilidad neta. Útil para comparar sucursales.
Cómo interpretarlo
Sección titulada «Cómo interpretarlo»| Situación | Posible lectura |
|---|---|
| Utilidad neta sube +20% vs mes anterior | Buen mes: revisa qué categoría de ingreso creció y replícala. |
| Ingresos estables pero utilizadidad neta cae 10% | Revisa egresos; suele ser insumos, sueldos o servicios. |
| Ingresos suben pero utilidad neta cae | Costos creciendo más rápido que ventas: analiza ticket promedio y márgenes. |
| Una sucursal con utilidad negativa | Esa sucursal está operando en pérdida; agenda revisión con gerente. |
| Variación % “n/a” | Periodo anterior sin datos: faltan movimientos posted en ese rango, no es un error. |
Parte 3: Tab Flujo de efectivo
Sección titulada «Parte 3: Tab Flujo de efectivo»| KPI | Cálculo |
|---|---|
| Saldo inicial | Balance de cuentas al día anterior al date_from. Considera saldos iniciales de cuentas + movimientos previos. |
| Entradas | Suma de ingresos posted del rango. |
| Salidas | Suma de egresos posted del rango. |
| Flujo neto | Entradas − Salidas. |
| Saldo final | Saldo inicial + Flujo neto. |
Tabla diaria
Sección titulada «Tabla diaria»| Columna | Contenido |
|---|---|
| Fecha | Día del rango. |
| Entradas | Ingresos posted de ese día. |
| Salidas | Egresos posted de ese día. |
| Neto | Entradas − Salidas. |
Puedes ver día por día cómo fluyó el efectivo. Útil para detectar semanas con salidas concentradas (ej. quincenas de sueldos) o días con entradas inesperadas.
Cómo interpretarlo
Sección titulada «Cómo interpretarlo»- Saldo inicial negativo: sospechoso. Las cuentas contables no deberían estar en negativo; revisa tu configuración de saldos iniciales.
- Flujo neto negativo aunque la utilidad sea positiva: significa que algunos ingresos del periodo no entraron como efectivo (puede ser tarjeta, transferencia pendiente). Revisa el tab Saldos para confirmar.
- Salidas concentradas en una fecha: identifica el motivo (renta, quincena, reabastecimiento grande de inventario).
Parte 4: Tab Saldos
Sección titulada «Parte 4: Tab Saldos»Lista por cuenta
Sección titulada «Lista por cuenta»| Columna | Contenido |
|---|---|
| Nombre | Nombre de la cuenta contable. |
| Sucursal | Sucursal asignada (o blank para cuentas globales). |
| Tipo | cash, bank, card, digital, other. |
| Saldo inicio periodo | Balance al día anterior al date_from. |
| Saldo final | Saldo inicial + Σ(movimientos posted del rango). |
Cómo interpretarlo
Sección titulada «Cómo interpretarlo»- Saldo final inferior al saldo inicial: la cuenta gastó más de lo que recibió en el periodo. Si es una caja y baja mucho, valida arqueos.
- Saldo final negativo: vista en una cuenta
cardodigitalpuede ser deuda (tarjeta de crédito o línea de crédito). En cuentascashobankes señal de error de configuración. - Comparar entre cuentas: si tienes 2 cajas y una baja mucho mientras la otra sube, puede ser que el dinero esté migrando físicamente entre sucursales o que los ingresos estén registrándose en la cuenta incorrecta.
Parte 5: Exportar CSV
Sección titulada «Parte 5: Exportar CSV»Cada tab genera un CSV diferente:
- Estado de resultados:
estado_de_resultados_YYYY-MM-DD_YYYY-MM-DD.csvcon KPIs + tabla Ingresos por categoría + tabla Egresos por categoría + Resultado por sucursal (si aplica). - Flujo de efectivo:
flujo_de_efectivo_YYYY-MM-DD_YYYY-MM-DD.csvcon KPIs + tabla diaria. - Saldos:
saldos_YYYY-MM-DD_YYYY-MM-DD.csvcon la tabla por cuenta.
Detalle de columnas del CSV
Sección titulada «Detalle de columnas del CSV»- Para Estado de resultados:
categoria, monto, porcentajeen cada sección +sucursal, ingresos, egresos, utilidaden la sección de sucursales. - Para Flujo de efectivo:
fecha, entradas, salidas, neto. - Para Saldos:
nombre_cuenta, sucursal, tipo, saldo_inicio, saldo_final.
El CSV abre directamente en Excel o Google Sheets. Usa separador coma y codificación UTF-8 (caracteres acentuados en español se ven bien).
Parte 6: Imprimir
Sección titulada «Parte 6: Imprimir»El botón Imprimir lanza window.print() del navegador con un CSS optimizado para papel:
- Oculta sidebar y filtros visuales no esenciales.
- Genera cabecera con nombre del negocio, sucursal seleccionada y rango de fechas.
- Imprime el tab activo en hoja A4 vertical (si el tab es “Flujo de efectivo” y tiene tabla diaria grande, recomienda horizontal).
Para la mayoría de los casos, exportar CSV y compartirlo por correo es más útil que imprimir papel. Reserva la impresión para reuniones mensuales con gerentes.
Parte 7: APIs utilizadas
Sección titulada «Parte 7: APIs utilizadas»AccountingService.getIncomeStatement({date_from, date_to, sucursal_id})— KPIs + tablas de estado de resultados + resultado por sucursal.AccountingService.getCashFlow({date_from, date_to, sucursal_id})— KPIs + tabla diaria de flujo.- Para Saldos: consulta de cuentas + movimientos, el frontend arma las columnas saldo inicial y final.
Ejemplo practico
Sección titulada «Ejemplo practico»Eres dueño del Restaurante El Buen Sazón con 3 sucursales. Es 2 de julio 2026, tienes reunión con tus 3 gerentes a las 11 AM y quieres llegar con el cierre de junio claro.
Objetivo
Sección titulada «Objetivo»- Ver estado de resultados de junio en “Todas” y comparar con mayo.
- Identificar la sucursal con mayor utilidad.
- Ver el flujo de efectivo del mes, detectar concentraciones de salida.
- Verificar saldos finales de cada cuenta.
- Generar 3 CSV para tu contador.
Recorrido
Sección titulada «Recorrido»Miércoles 2 julio, 9:00 AM — Estado de resultados
- Header en “Todas”. Clic en Contabilidad > Reportes. Tab “Estado de resultados”.
- Rango
01/06/2026–30/06/2026. Clic Actualizar. - KPIs: Ingresos $812,500 (+8.2%), Egresos $501,700 (+3.1%), Utilidad neta $310,800 (+23.4%).
- Tabla Ingresos por categoría: “Venta directa” $540,200 (66.5%), “Pedido digital” $210,000 (25.8%), “Consumo local” $62,300 (7.7%).
- Tabla Egresos por categoría: “Insumos” $185,000 (36.9%), “Sueldos” $164,000 (32.7%), “Renta y servicios” $48,000 (9.6%), “Marketing” $35,000 (7.0%), “Otros” $69,700 (13.8%).
- Resultado por sucursal: Insurgentes $142,300 (45.8%), Vallejo $98,500 (31.7%), Guadalajara $70,000 (22.5%).
- Clic CSV → se descarga
estado_de_resultados_2026-06-01_2026-06-30.csv.
Miércoles 9:15 AM — Flujo de efectivo
- Clic en tab “Flujo de efectivo”. Mismas fechas, clic Actualizar.
- KPIs: Saldo inicial $312,800, Entradas $812,500, Salidas $501,700, Flujo neto $310,800, Saldo final $623,600.
- Tabla diaria: detectas el día 15 con salidas $48,900 (sueldos quincena) y el 30 con salidas $15,000 (renta Vallejo + reabastecimiento).
- Clic CSV →
flujo_de_efectivo_2026-06-01_2026-06-30.csv.
Miércoles 9:25 AM — Saldos por cuenta
- Clic en tab “Saldos”. Actualizar.
- Lista:
- Caja Insurgentes: $24,500 (cash)
- Caja Vallejo: $18,200 (cash)
- Caja Guadalajara: $21,100 (cash)
- Banco Azteca 0492: $215,000 (bank)
- Banorte 8821: $180,000 (bank)
- Tarjeta BBVA 1188: $165,800 (card)
- Mercado Pago: $-2,000 (digital, deuda)
- Clic CSV →
saldos_2026-06-01_2026-06-30.csv.
Miércoles 9:30 AM — Imprimir para la reunión
- Vuelves al tab “Estado de resultados”.
- Clic Imprimir. En el diálogo eliges “Guardar como PDF” para tener un archivo con el reporte formateado y llevars a tus gerentes.
Resultados después de 1 mes
Sección titulada «Resultados después de 1 mes»- Reunión mensual más estructurada: cada gerente vio su utilidad, comparó con otras sucursales, propusimos acciones concretas (Insurgentes replica su promoción de desayuno en Vallejo).
- Detección de deuda oculta: Mercado Pago en $-2,000 → decidiste saldarla y mantener la cuenta en positivo para no perder herramientas de cobro digital.
- Reporte al contador en 30 segundos: le enviaste los 3 CSV sin editarlos.
Flujo de trabajo recomendado
Sección titulada «Flujo de trabajo recomendado»Rutina semanal
Sección titulada «Rutina semanal»- Lunes 9 AM: Estado de resultados con rango “Semana pasada” en “Todas”. Revisa variación %.
- Si el ingreso bajó en una sucursal específica, filtra por esa sucursal en el header y vuelve a Actualizar para aislar.
- Revisa Saldos para confirmar que ninguna cuenta quedó en negativo injustificado.
Rutina mensual
Sección titulada «Rutina mensual»- Día 1 del mes, 9 AM: rango “Mes anterior” en “Todas”. Estado de resultados.
- 9:15 AM: Flujo de efectivo del mes. Detecta concentración de salidas.
- 9:25 AM: Saldos por cuenta. Detecta cuentas con saldo cero o negativo.
- 9:30 AM: Exporta los 3 CSV y reúne con tu contador.
- 9:45 AM: Revisión “Resultado por sucursal”: identifica la de mayor y menor utilidad, agenda conversaciones con gerentes.
Rutina trimestral
Sección titulada «Rutina trimestral»- Rango del trimestre completo.
- Compara la utilizadidad del trimestre vs trimestres anteriores mentalmente o con captura del CSV.
- Identifica patrones estacionales (verano vs diciembre).
Antes de cada exportación CSV
Sección titulada «Antes de cada exportación CSV»- Confirma el selector de sucursal (“Todas” si quieres consolidado para el contador, sucursal específica si quieres aislada).
- Confirma el rango de fechas.
- Abre el CSV en Excel/Google Sheets antes de enviarlo para validar que las columnas tienen el contenido esperado.
Errores comunes y soluciones
Sección titulada «Errores comunes y soluciones»| Error | Causa probable | Solución paso a paso |
|---|---|---|
| ”Variación %: n/a” | Periodo anterior con valor cero (no había movimientos posted). | Comportamiento esperado. Si tenant nuevo o primer mes en operación, llenará en los siguientes meses. |
| ”Resultado por sucursal no aparece” | Estás en una sucursal específica, no en “Todas”. | Cambia el selector del header a “Todas” y vuelve a Actualizar. |
| ”Saldo inicial negativo” | Cuenta con saldo inicial negativo mal configurado o movimientos previos en otro sentido. | 1. Revisa Configuración > Cuentas, saldo inicial. 2. Si la cuenta es card, puede ser deuda (válido). 3. Si es cash, corrige el saldo inicial. |
| ”Flujo neto ≠ Utilidad neta del estado de resultados” | Comportamiento normal: ingresos por tarjeta o transferencia cuentan como ingreso pero no como entrada de efectivo inmediata. | Revisa el tab Saldos para ver en qué cuenta se acumuló la diferencia. |
| ”CSV sale con caracteres raros en Excel” | Excel abriendo UTF-8 sin BOM. | 1. Abre Excel > Datos > Desde texto. 2. Selecciona el CSV y elige origen “65001 Unicode UTF-8”. |
| ”Imprimir sale con sidebar” | CSS de impresión no aplicó. | 1. Cancela el diálogo de impresión. 2. Pulsa Imprimir de nuevo. 3. Si persiste, actualiza la página. |
| ”Los KPIs cargan pero la tabla sale vacía” | Hay movimientos pero sin categoría asignada. | 1. Revisa en Ingresos/Egresos los movimientos del rango. 2. Identifica los que no tienen categoría y reasígnala. 3. Refresca Reportes. |
| ”El saldo final no cuadra con mi extracto bancario” | Movimientos no registrados o categorías capturadas con fechas distintas a las del banco. | 1. Revisa Egresos del mes vs los cargos del banco. 2. Identifica diferencias y registra los egresos faltantes. 3. En una versión futura, conciliación automática con cuentas bancarias. |
| ”Cambié a sucursal específica y el botón CSV sale gris” | La consulta aún está cargando. | Espera unos segundos a que termine el Actualizar; el botón se habilita solo. |
Preguntas frecuentes
Sección titulada «Preguntas frecuentes»P: ¿Reportes es lo mismo que mi estado de resultados fiscal? R: No. Es un reporte operativo basado en movimientos contables de Emelit Express. Para tu estado de resultados fiscal ante el SAT, usa tu software contable certificado (Aspel, ContPAqi). El disclaimer del footer deja esto claro: “No sustituye estados financieros fiscales ni contabilidad de partida doble”.
P: ¿Por qué la utilidad neta del reporte difiere de mi facturación CFDI? R: Porque los ingresos del reporte incluyen ventas no facturadas (pedidos de menudeo en caja, por ejemplo). Las facturas CFDI son un subconjunto de los ingresos. Las órdenes facturadas también aparecen aquí como ingresos, pero aquí verás todo el universo.
P: ¿Por qué el flujo neto no es igual a la utilidad neta? R: Conducta normal: ingresos tarjeta, transferencias pendientes, anticipos y otros efectos no efectivo hacen que el flujo neto difiera de la utilidad. Es la diferencia clásica entre “devengado” (estado de resultados) y “percibido” (flujo de efectivo).
P: ¿La variación % usa periodo calendario anterior exacto?
R: Sí. Si pides 01/06–30/06, el sistema compara con 01/05–31/05. Mantiene el mismo número de días del rango configurado hacia atrás.
P: ¿Puedo comparar dos periodos arbitrarios (ej. junio 2026 vs junio 2025)? R: No en esta versión. La variación es siempre vs el periodo inmediato anterior de la misma duración. Para comparación año contra año, exporta ambos CSV y compáralos en Excel.
P: ¿Qué moneda usan los KPIs? R: MXN, moneda del negocio configurada en Emelit Express. Las cantidades se muestran con separadores de miles (coma) y dos decimales.
P: ¿El CSV incluye formulas Excel? R: No. El CSV es plano (texto separado por comas). Si necesitas formulas, puedes agregarlas en Excel después; el CSV te entrega solo los valores numéricos.
P: ¿Imprimir respeta el rango de fechas? R: Sí. El CSS de impresión conserva la cabecera con el rango, el selector de sucursal activo y los KPIs. Si el reporte tiene muchas filas (ej. flujo de efectivo de un trimestre), verifica que el navegador no corte la impresión entre páginas.
P: ¿Qué “Otros” hace en Egresos por categoría? R: “Otros” incluye el total de egresos que no tienen categoría asignada o que están en categorías que no se desglosan. Si todo sale en “Otros”, falta categorizar tus egresos: revísalos y asígnales categoría.
P: ¿Las cuentas globales aparecen en Saldos? R: Sí. Las cuentas globales (sin sucursal) aparecen con la columna Sucursal en blanco. En modo sucursal específica, las cuentas globales también se incluyen porque afectan al negocio completo.
P: ¿Puedo ver reportes por rango mayor a un año? R: Sí, no hay límite de días. Si pides un año completo, la carga puede ser lenta porque el backend procesa todos los movimientos posted del rango. Recomendamos máximo un trimestre por consulta para tiempos rápidos.
P: ¿El saldo inicial incluye movimientos voided?
R: No. Solo movimientos posted (y paid cuando aplica) forman parte del cálculo del saldo inicial. voided, draft, pending y to_pay se excluyen.
P: ¿Cómo imprimo solo una sucursal? R: Cambia el selector del header a esa sucursal antes de imprimir. El CSS de impresión respeta el selector activo.
P: ¿Por qué en “Todas” mi “Resultado por sucursal” suma más/menos que el total global?
R: No debería ocurrir. Si pasa, algunos movimientos no están asignados a ninguna sucursal o tienen sucursal_id inválido. Revisa en Ingresos si hay filas con sucursal en blanco y corrígelas en Pedidos.
Para ver el detalle de los movimientos que alimentan estos reportes, regresa a la guía general o profundiza en Ingresos y Egresos.