Tu correo {{ usuario.email }} todavía no está confirmado.

{{ verificacionAviso }}

{{ mensajeAlertaCuota }}
{{ cuentaBloqueada.mensaje }}
CuadraFlow SaaS multiempresa

Define tu contraseña

Tu cuenta entró con una clave temporal, así que hay que reemplazarla antes de seguir. Desde aquí también se cambia la que ya tenías.

Mínimo 8 caracteres. Usa una que no repitas en otros servicios.

{{ usuario && usuario.email }} Soporte

CuadraFlow SaaS multiempresa

Hola de nuevo

Entra con tu correo para facturar, cobrar y revisar tus libros del día.

¿Todavía no tienes cuenta? Crear una Probar la demo

Soporte © 2026 CuadraFlow

{{ tabActual }}
{{ iniciales }}
{{ mensaje.texto }}

Resumen Financiero y Fiscal

Ventas del Periodo

{{ fmtBS(resumen.ventas_totales) }}

{{ resumen.num_facturas }} facturas

Gastos Deducibles

{{ fmtBS(resumen.egresos_fiscales) }}

{{ resumen.num_egresos_fiscales }} facturas · {{ resumen.num_egresos_no_fiscales }} no fiscales {{ fmtBS(resumen.egresos_no_fiscales) }}

IVA Débito - Crédito

{{ fmtBS(resumen.posicion_iva) }}

Débito {{ fmtBS(resumen.debito_fiscal) }} · Crédito {{ fmtBS(resumen.credito_fiscal) }}

Tasa BCV

{{ resumen.tasa_bcv ? fmtTasa(resumen.tasa_bcv) : '—' }}

Valor {{ resumen.tasa_bcv_fecha }} sin registrar · {{ resumen.tasa_bcv_fuente === 'BCV_WEB' ? 'BCV oficial' : (resumen.tasa_bcv_fuente === 'BCV_RESPALDO' ? 'respaldo' : 'manual') }}

Fondos disponibles

{{ c.nombre }}: {{ fmtMoneda(c.saldo, c.moneda) }}

Últimas facturas

Nro.ClienteTotalEstado
{{ v.numero_factura }} {{ v.nombre_razon_social }} {{ fmtBS(v.monto_total_bs) }} {{ v.estatus }}
Sin facturas registradas

Últimos gastos

ProveedorNro.Total
{{ g.nombre_razon_social }} {{ g.numero_factura }} {{ fmtBS(g.monto_total_bs) }}
Sin gastos registrados

Ventas por categoría

{{ ventasCategoria.filas.length }} categoría(s) · clasifica por la principal · las líneas sin ítem del catálogo quedan sin categoría
{{ f.categoria }} {{ fmtUSD(f.monto_usd) }}
{{ Number(f.participacion).toFixed(1) }}%

Sin ventas en el período.

Asistente IA

Gemini trabajando sobre los datos reales de {{ usuario.empresa_nombre }}.

Consumo de Gemini este mes

{{ ia.saldo.gasto_usd !== null ? fmtMoneda(ia.saldo.gasto_usd, ia.saldo.moneda) : '—' }}

{{ ia.saldo.estado === 'ERROR' ? (ia.saldo.desactualizado ? 'Última lectura exacta de Google' : 'Lectura de costos no disponible') : (ia.saldo.fuente === 'GOOGLE_BIGQUERY' ? 'Exportación de facturación Google' : 'Estimado por tokens') }}

Crédito prepago restante

{{ ia.saldo.prepago.restante_usd !== null ? fmtMoneda(ia.saldo.prepago.restante_usd, ia.saldo.moneda) : (ia.saldo.prepago.registrado_usd !== null ? fmtMoneda(ia.saldo.prepago.registrado_usd, ia.saldo.moneda) : '—') }}

Tope mensual de IA

{{ ia.saldo.presupuesto_usd !== null ? fmtMoneda(ia.saldo.presupuesto_usd, ia.saldo.moneda) : '—' }}

{{ ia.saldo.origen_presupuesto === 'GOOGLE' ? 'Budget de IA en Cloud Billing' : (ia.saldo.origen_presupuesto === 'ERP' ? 'Tope definido en el ERP' : 'Sin tope de IA definido') }}

{{ ia.saldo.porcentaje_usado }}% del tope consumido

Consumo de hoy

{{ fmtUSD(ia.saldo.consumo_hoy_usd) }}

{{ Number(ia.saldo.tokens_hoy || 0).toLocaleString('es-VE') }} tokens · {{ ia.saldo.llamadas_mes || 0 }} llamadas en el mes

Lecturas de documentos este mes

{{ ia.vision_usadas || 0 }} / {{ ia.vision_limite }}

Se reinicia el día 1 de cada mes.

Lecturas disponibles

{{ iaLecturasRestantes() }}

Facturas y catálogos leídos con la IA de CuadraFlow.

Asistente (chat)

Sin límite

Las preguntas al asistente no consumen lecturas.

Está usando la IA de CuadraFlow incluida en su plan. Si carga su propia API key en Configuración, pasa a modo propio: sin límite de lecturas y con su facturación de Google.

{{ ia.saldo.prepago.mensaje }}

{{ ia.saldo.mensaje }}

La exportación de facturación se actualiza por lotes y puede tener retraso; esta cifra no representa un saldo en tiempo real.

{{ ia.saldo.estado === 'ERROR' && !ia.saldo.desactualizado ? 'Último intento:' : 'Última lectura:' }} {{ ia.saldo.actualizado_en }} · Periodo {{ ia.saldo.periodo }} · dato conservado de la última consulta exitosa

La IA todavía no está configurada

Un administrador debe cargar la API key de Gemini y configurar la exportación de facturación para consultar el costo registrado. Mientras tanto, el costo de arriba es solo una estimación por tokens.

{{ iaChatTitulo || 'Nueva conversación' }}

{{ iaChatId ? 'Guardada' : 'Sin guardar' }}

Pregúntale a la IA sobre tu operación

{{ m.texto }}
Consultando los datos…

Lecturas de documentos con IA

Cada documento procesado queda guardado. Si vuelve a subir el mismo archivo, se reutiliza el análisis y no se paga dos veces.

Fecha Documento Tipo Estado Motor Ítems Tokens Costo Acciones
{{ a.creado_en }} {{ a.archivo_nombre || '—' }} reusado ×{{ Number(a.veces_usado) - 1 }} {{ etiquetaAccionIa(a.accion) }} {{ a.estado }} {{ a.motor }} {{ a.items }} {{ Number(a.tokens_entrada) + Number(a.tokens_salida) }} {{ fmtCostoIa(a.costo_usd) }} —
Todavía no se ha procesado ningún documento con IA.

Facturación (Ventas)

Fecha Nro. Factura Nro. Control Cliente Sucursal Total Bs IVA Emisión digital Estatus Acciones
{{ v.fecha_emision }} {{ v.numero_factura }} {{ v.numero_control || '—' }} {{ v.nombre_razon_social }} {{ v.sucursal_nombre || '—' }} {{ fmtBS(v.monto_total_bs) }} {{ fmtBS(v.iva_monto_bs) }} — {{ v.estatus_hka }} QR {{ v.estatus }}
No hay facturas. Cree la primera.

Alquileres y Depósitos

Cualquier servicio alquilable: prendas, equipos, herramientas, espacios…

Reservadas

{{ resumenAlq.reservadas }}

En la calle

{{ resumenAlq.en_calle }}

Atrasadas

{{ resumenAlq.atrasadas }}

Depósitos en custodia

{{ fmtUSD(resumenAlq.depositos_en_custodia_usd) }}

Penalizaciones

{{ fmtUSD(resumenAlq.penalizaciones_usd) }}

{{ tituloCalendario() }}
Parcial Completo Sobreventa Devuelto Con incidencia

Próximos movimientos

{{ textoProximo(p) }} {{ fmtFecha(p.fecha) }} {{ p.tipo === 'SALIDA' ? 'Salida' : 'Devolución' }} {{ p.numero_orden }} · {{ p.cliente }} {{ (p.items || []).join(' · ') }}

Disponibilidad por ítem

{{ calendario.totales.ordenes || 0 }} orden(es) en el período · {{ calendario.totales.atrasadas || 0 }} atrasada(s)

Ítem {{ etiquetaDia(dia).semana }} {{ etiquetaDia(dia).dia }}
{{ item.nombre }} {{ item.codigo || '—' }} · {{ capacidadItem(item) }} u. · {{ diasOcupados(item) }} reserva(s) cruce {{ diasEnConflicto(item) }}d
{{ c.texto }}
No hay ítems alquilables en el catálogo ni reservas en el período.
Orden Cliente Evento Devolución Servicio Depósito Alquiler Situación Depósito Acciones
{{ o.numero_orden }} {{ o.nombre_razon_social }} {{ o.fecha_evento }} {{ o.fecha_devolucion_pactada }} · atrasada {{ fmtUSD(o.monto_servicio_usd) }} {{ fmtUSD(o.monto_deposito_usd) }} {{ o.estado_alquiler }} {{ etiquetaSituacion(o.situacion) }} {{ etiquetaDeposito(o.estado_deposito) }}
No hay órdenes de alquiler.

Catálogo de ítems

Las categorías son organizacionales: agrupan, filtran informes y nunca se imprimen en la factura.

{{ seleccionCatalogo.length }} seleccionado(s)
Código Nombre Categoría Tipo Precio venta Alquiler Depósito base Stock En esta sucursal Medidas Activo Acciones
↳{{ p.codigo || '—' }} {{ p.nombre }} {{ variantesDe(p.id).length }} variante(s) — {{ p.tipo_item }} {{ p.tipo_item === 'Alquilable' ? '—' : fmtUSD(p.precio_usd) }} {{ p.tipo_item === 'Alquilable' ? fmtUSD(p.precio_alquiler_usd) : '—' }} {{ fmtUSD(p.monto_deposito_base_usd) }} {{ p.stock_actual === null || p.stock_actual === undefined ? '—' : p.stock_actual }} {{ p.stock_sucursal === null || p.stock_sucursal === undefined ? '—' : fmtCant(p.stock_sucursal) }} — {{ p.activo==1 ? 'Sí' : 'No' }}
No hay ítems en el catálogo.

Inventario

Correcciones, merma y fabricación. Todo movimiento queda con su motivo en el historial y alimenta el libro valorizado (Art. 177 Reglamento Ley de ISLR).

Transferencias entre sucursales

Mueve mercancía de un local a otro al costo promedio. El total de la empresa no cambia: el origen descuenta y el destino recibe lo mismo.

Hacen falta al menos dos sucursales activas para transferir. Créelas en «Administrar tiendas y almacenes».

Número Fecha Origen Destino Ítems Valor Bs Estado Acciones
{{ t.numero }} {{ fmtFecha(t.fecha) }} {{ t.origen_nombre }} {{ t.destino_nombre }} {{ t.total_items }} {{ fmtBS(t.monto_bs) }} {{ t.estado }}
Sin transferencias registradas.

Movimientos de inventario

Todo lo que entró y salió, con su motivo. Para compras use Gastos & Compras: generan la entrada solas.

Fecha Producto Sucursal Tipo Cantidad Costo unit. (Bs) Motivo Referencia Acciones
{{ m.fecha }} {{ m.producto_nombre }} {{ m.sucursal_nombre || '—' }} {{ m.tipo }} {{ fmtCant(m.cantidad) }} {{ fmtBS(m.costo_unitario_bs) }} {{ m.motivo }} — {{ m.referencia || '—' }}
Sin movimientos registrados.

Nueva corrección

Ajusta el stock por conteo, error de carga o sobrante. La cantidad puede ser positiva (suma) o negativa (resta).

Negativa resta.

Historial de correcciones

{{ movimientosPorMotivo('CORRECCION').length }} registro(s)
Fecha Producto Cantidad Razón
{{ m.fecha }} {{ m.producto_nombre }} {{ m.sucursal_nombre || '—' }} {{ m.tipo==='Entrada' ? '+' : '−' }}{{ fmtCant(m.cantidad) }} {{ m.observacion || m.referencia || '—' }}
Sin correcciones registradas.

Registrar merma

Siempre resta del inventario. Queda valorizada al costo promedio y visible en el libro.

Historial de mermas y autoconsumo

{{ movimientosPorMotivo(['MERMA','AUTOCONSUMO']).length }} registro(s)
Fecha Producto Cantidad Costo Motivo
{{ m.fecha }} {{ m.producto_nombre }} {{ m.sucursal_nombre || '—' }} −{{ fmtCant(m.cantidad) }} {{ fmtBS(m.costo_unitario_bs) }} {{ m.motivo }} {{ m.observacion }}
Sin mermas registradas.

Procesos de fabricación

Fecha Descripción Materia prima Producto final Costo Estado Acciones
{{ f.fecha }} {{ f.descripcion }}
{{ fmtCant(i.cantidad) }} × {{ i.nombre }}
{{ fmtCant(p.cantidad) }} × {{ p.nombre }}
{{ fmtBS(f.costo_total_bs) }} {{ f.estado === 'FABRICANDO' ? 'En proceso' : (f.estado === 'LIBERADO' ? 'Liberado' : 'Cancelado') }} —
Sin procesos. Útil para armar un ítem a partir de insumos.

Gastos & Compras

Los egresos no fiscales afectan el resultado pero no entran al Libro de Compras.
Fecha Naturaleza Proveedor Concepto Nro. Factura Nro. Control Total Bs IVA Crédito Imputación Comprobante Acciones
{{ g.fecha_emision }} No fiscal{{ g.categoria_egreso }} Fiscal {{ g.nombre_razon_social }} {{ g.concepto }} {{ g.referencia_externa }} — sin detalle — {{ g.numero_factura || '—' }} {{ g.numero_control || '—' }} {{ fmtBS(g.monto_total_bs) }} {{ g.moneda }} {{ g.monto_total_usd }} {{ Number(g.iva_monto_bs) > 0 ? fmtBS(g.iva_monto_bs) : '—' }} {{ g.imputacion_destino }} —
No hay egresos registrados.

Comisiones devengadas pendientes de factura

Comisión devengada sobre el total de cada operación (no sobre el monto financiado). Al cargar la factura mensual del proveedor se registra el gasto y el crédito fiscal de IVA correspondiente.

Proveedor Método Período Operaciones Base (Bs) Comisión (Bs) Acciones
{{ c.entidad }} {{ c.metodo }} {{ c.desde }} → {{ c.hasta }} {{ c.operaciones }} {{ fmtBS(c.base_bs) }} {{ fmtBS(c.total_bs) }}

Retenciones de IVA, ISLR y otros tributos

Las que la empresa practica como agente de retención (comprobantes AAAAMM + 8 dígitos, Providencia 0049) y las que un cliente le retiene al pagar una factura. {{ retenciones.total }} registros.

La declaración es obligatoria por quincena aun sin retenciones (Providencia SNAT/2025/000054, Art. 15). El archivo se sube al Portal Fiscal y se entera con la planilla 99035.

Retenido por mí

{{ fmtBS(retenciones.totales.retenido_practicado) }}

Base {{ fmtBS(retenciones.totales.base_practicada) }}

ISLR que me retuvieron

{{ fmtBS(retenciones.totales.islr_recibido) }}

Crédito acreditable en la declaración

IVA que me retuvieron

{{ fmtBS(retenciones.totales.iva_recibido) }}

Total sufrido {{ fmtBS(retenciones.totales.retenido_recibido) }}

Por reportar al portal

{{ fmtBS(retenciones.totales.por_reportar) }}

{{ retenciones.totales.por_reportar_cant }} comprobante(s) sin declarar

Comprobante Fecha Reporte Tipo Sujeto Documento Base % Retenido Estado Acciones
{{ r.numero_comprobante }} S/N {{ r.sentido === 'RECIBIDA' ? 'emitido por el cliente' : 'emitido por mí' }} Control {{ r.numero_control }} Rechazado por la imprenta {{ r.fecha }} {{ r.fecha_reporte }} Pendiente — {{ r.tipo }} {{ r.impuesto_nombre }} {{ r.nombre_razon_social }} {{ r.rif_cedula }} {{ r.documento }} — Control {{ r.documento_control }} {{ fmtBS(r.base_imponible_bs) }} − sust. {{ fmtBS(r.sustraendo_bs) }} {{ r.alicuota_porcentaje }}% {{ fmtBS(r.monto_retenido_bs) }} {{ r.estado }}
No hay retenciones con estos filtros. Las practicadas se generan al registrar una compra a un contribuyente especial; las sufridas, al cobrar una factura con retención del cliente.
{{ rangoRetenciones() }}

Mis empresas

Un solo usuario, varias empresas. Las Full ERP operan el día a día y aquí solo se auditan; las de solo contabilidad se usan para llevar sus libros fiscales sin punto de venta.

Cuenta de contador invitado

Esta cuenta nació porque una empresa te invitó: trabajas sus libros y no ocupas un usuario de su plan. Para abrir tus propias empresas y gestionar tu equipo, activa un plan.

Tu despacho todavía no tiene empresas

Esta cuenta es tu despacho: sirve para administrar tu cartera. Las facturas y los libros se cargan dentro de la empresa de cada cliente, no aquí. Registra la primera con Registrar empresa gestionada y luego entra a ella para trabajar.

{{ esDespachoActivo ? 'Todavía no tienes empresas' : 'No administras otras empresas' }}

{{ e.razon_social }}

{{ e.rif }}

{{ e.tipo_tenant === 'accounting_only' ? 'Solo contabilidad' : 'Full ERP' }}

Ventas

{{ e.ventas_mes || 0 }}

Compras

{{ e.compras_mes || 0 }}

Retenc.

{{ e.retenciones_mes || 0 }}

{{ e.rol_nombre || 'Sin rol' }} · tu empresa

Contador externo de esta empresa

El acceso del contador es gratuito: no consume cupos de usuarios del plan. Si el correo ya tiene cuenta, se vincula al instante; si no, se le abre su cuenta de despacho con clave temporal y se le envía el acceso por correo.

{{ c.nombre }}

{{ c.email }} · {{ c.rol_nombre }}

{{ i.email }} Pendiente

Registrar empresa gestionada

Se crea con los roles, la sucursal principal y una prueba gratuita. No tiene punto de venta ni inventario: solo libros fiscales y retenciones.

Informes

Análisis de la operación. Solo cuentan documentos vigentes: una factura anulada conserva su número pero no es una venta. Los importes se expresan en bolívares a la tasa de cada factura.

{{ nombreSucursalActiva }}

Calculando…

Carga fiscal

Facturas que el cliente ya emitió en otro sistema y hay que llevar a los libros. Los importes entran exactamente como están en el documento: no se recalcula el IVA ni se reconvierte la tasa, para que el libro coincida al céntimo.

Base {{ fmtBS(cargaTotales.base) }} Exento {{ fmtBS(cargaTotales.exento) }} IVA {{ fmtBS(cargaTotales.iva) }} (calculado) Total {{ fmtBS(cargaTotales.total) }}

Últimos documentos cargados

Sólo los que no salieron del punto de venta.

Todavía no hay documentos de carga fiscal.
{{ d.nombre }} {{ d.tipo === 'VENTAS' ? 'Venta' : 'Compra' }}
N° {{ d.numero_factura }} · {{ d.fecha }} {{ fmtBS(d.total) }}

{{ impArchivo }} · {{ impDetalle }} · costo estimado {{ fmtCostoFiscal(impEstimacion.costo_usd) }}

Primeras filas del archivo

{{ impExtracto }}

{{ impResumen.documentos }} documento(s) reconocidos · {{ impResumen.descartadas }} con errores

Columnas detectadas: {{ (impResultado.columnas || []).join(' · ') || 'no informadas' }}

Base {{ fmtBS(impResumen.base) }} Exento {{ fmtBS(impResumen.exento) }} IVA {{ fmtBS(impResumen.iva) }} Total {{ fmtBS(impResumen.total) }}

{{ a }}

# Fecha RIF Razón social Factura Control Base Exento IVA Total Estado
{{ i + 1 }} {{ f.fecha || '—' }} {{ f.rif || '—' }} {{ f.nombre || '—' }} {{ f.numero_factura || '—' }} {{ f.numero_control || '—' }} {{ fmtBS(f.base_imponible) }} {{ fmtBS(f.exento) }} {{ fmtBS(f.iva) }} {{ fmtBS(f.total) }} {{ f.errores.join(', ') }} Lista

Las que ya existen por RIF y número de factura se omiten solas, sin duplicar el libro.

Omitidas al cargar:

  • Fila {{ o.fila }} · {{ o.rif }} · {{ o.factura }}: {{ o.motivo }}

Libros Fiscales (SENIAT)

Registro cronológico obligatorio. Libro de ventas: Arts. 76 y 77 del Reglamento de la Ley de IVA · Libro de compras: Art. 75. Sólo documentos fiscales.

{{ nombreLibroSucursal }}

Informe LISAEA percibido

Netea lo pagado en compras contra lo cobrado en ventas del período. El rango no puede superar los 31 días. Sólo se admiten facturas de forma libre, talonario manual y contingencia: las impresoras fiscales y la imprenta digital no soportan LISAEA.

Pagado en compras

{{ fmtBS(informeLisaea.pagado_compras_bs) }}

Cobrado en ventas

{{ fmtBS(informeLisaea.cobrado_ventas_bs) }}

Neto del período

{{ fmtBS(informeLisaea.neto_bs) }}

Documentos del período

{{ informeLisaea.filas.length }} documento(s) · {{ informeLisaea.dias || 0 }} día(s)
Fecha Origen Tipo Número RIF Contraparte LISAEA
{{ f.fecha }} {{ f.origen }} {{ f.tipo }} {{ f.numero }} {{ f.rif_cedula }} {{ f.nombre_razon_social }} {{ fmtBS(f.monto_bs) }}
Sin documentos con LISAEA en el período.

Libro de inventario valorizado

Registro mensual de entradas y salidas por unidades y valores, al costo histórico en bolívares. El costo es un promedio ponderado que pasa de un mes al siguiente; el autoconsumo y la existencia final se valoran a ese promedio y las salidas se calculan por diferencia para que el libro cuadre al céntimo. Art. 177 del Reglamento de la Ley de ISLR.

Mes cerrado {{ fmtFecha(art177.cerrado_en) }} Cierre disponible desde {{ fmtFecha(art177.cierre_disponible_desde) }} · plazo del Art. 177: {{ fmtFecha(art177.cerrable_desde) }}

{{ art177.nota_cierre }}

Historial de cierres y reaperturas ({{ art177.historial.length }})
  • {{ h.accion === 'REAPERTURA' ? 'Reapertura' : 'Cierre' }} · {{ fmtFecha(h.creado_en) }} · {{ h.usuario }} · "{{ h.motivo }}"

Valor inicial

{{ fmtBS(art177.totales.ini_valor) }}

{{ fmtCant(art177.totales.ini_qty) }} {{ Number(art177.totales.ini_qty) === 1 ? 'unidad' : 'unidades' }}

Entradas

{{ fmtBS(art177.totales.ent_valor) }}

{{ fmtCant(art177.totales.ent_qty) }} {{ Number(art177.totales.ent_qty) === 1 ? 'unidad' : 'unidades' }}

Salidas

{{ fmtBS(art177.totales.sal_valor) }}

{{ fmtCant(art177.totales.sal_qty) }} {{ Number(art177.totales.sal_qty) === 1 ? 'unidad' : 'unidades' }}

Autoconsumo

{{ fmtBS(art177.totales.aut_valor) }}

{{ fmtCant(art177.totales.aut_qty) }} {{ Number(art177.totales.aut_qty) === 1 ? 'unidad' : 'unidades' }}

Valor final

{{ fmtBS(art177.totales.fin_valor) }}

{{ fmtCant(art177.totales.fin_qty) }} {{ Number(art177.totales.fin_qty) === 1 ? 'unidad' : 'unidades' }} · cuadre {{ fmtBS(art177.cuadre) }}

Detalle por ítem

{{ art177.filas.length }} ítem(s) con movimiento o existencia

Código Descripción Costo unit.
Bs
Cant.
inicial
Valor
inicial
Cant.
entradas
Valor
entradas
Cant.
salidas
Valor
salidas
Cant.
autoconsumo
Valor
autoconsumo
Cant.
final
Valor
final
{{ f.codigo || '—' }} {{ f.nombre }} {{ Number(f.costo_unitario_bs).toLocaleString('es-VE', { minimumFractionDigits: 4, maximumFractionDigits: 4 }) }} {{ fmtCant(f.ini_qty) }} {{ fmtBS(f.ini_valor) }} {{ Number(f.ent_qty) ? fmtCant(f.ent_qty) : '—' }} {{ Number(f.ent_valor) ? fmtBS(f.ent_valor) : '—' }} {{ Number(f.sal_qty) ? fmtCant(f.sal_qty) : '—' }} {{ Number(f.sal_valor) ? fmtBS(f.sal_valor) : '—' }} {{ Number(f.aut_qty) ? fmtCant(f.aut_qty) : '—' }} {{ Number(f.aut_valor) ? fmtBS(f.aut_valor) : '—' }} {{ fmtCant(f.fin_qty) }} {{ fmtBS(f.fin_valor) }}
Sin movimientos de inventario en el período.
TOTALES {{ fmtCant(art177.totales.ini_qty) }} {{ fmtBS(art177.totales.ini_valor) }} {{ fmtCant(art177.totales.ent_qty) }} {{ fmtBS(art177.totales.ent_valor) }} {{ fmtCant(art177.totales.sal_qty) }} {{ fmtBS(art177.totales.sal_valor) }} {{ fmtCant(art177.totales.aut_qty) }} {{ fmtBS(art177.totales.aut_valor) }} {{ fmtCant(art177.totales.fin_qty) }} {{ fmtBS(art177.totales.fin_valor) }}

Revisar antes de declarar

Ítems con existencia sin costo registrado (se valorizan en Bs 0):

{{ art177.avisos.sin_costo.join(' · ') }}

Entradas sin costo en bolívares ni tasa de cambio aplicable:

{{ art177.avisos.sin_tasa.join(' · ') }}

Ítems con existencia en el catálogo sin movimientos de inventario (no entran al libro):

{{ art177.avisos.stock.join(' · ') }}

Contingencia

Facturación con talonarios físicos autorizados cuando no hay acceso al sistema. La información se remite a la imprenta digital o a la API del SENIAT el día siguiente (Art. 6 y 7 · Providencia SNAT/2026/00093).

Talonarios autorizados

Talonario Imprenta Rango de control Usados Disponibles Próximo Activo Acciones
{{ t.descripcion }} {{ t.facturas }} factura(s) {{ t.imprenta || '—' }} {{ t.imprenta_rif || '' }} {{ t.control_desde }} → {{ t.control_hasta }} {{ t.control_usados }} {{ t.control_disponibles }} {{ t.control_disponibles > 0 ? t.proximo_control : '—' }} {{ Number(t.activo) === 1 ? 'Activo' : 'Inactivo' }}
No hay talonarios registrados.

Facturas emitidas en contingencia

Fecha / hora Factura N° Control Talonario Cliente Total Bs Remisión
{{ fmtFecha(c.fecha_emision) }}{{ c.hora_emision || '' }} {{ c.numero_factura }} {{ c.numero_control || '—' }} {{ c.talonario || '—' }} {{ c.nombre_razon_social }} {{ c.rif_cedula }} {{ fmtBS(c.monto_total_bs) }} Remitida {{ c.remision_fecha ? fmtFecha(c.remision_fecha) : '' }} Pendiente
Sin facturas de contingencia.

Notas de Débito y Crédito

Las notas de crédito reducen el débito fiscal y las de débito lo aumentan. Se reflejan automáticamente en el Libro de Ventas o de Compras según su ámbito (documentos 02 y 03 del SENIAT). Toda nota referencia la factura que ajusta y no puede acreditar más de lo que esa factura tiene pendiente de acreditar.

Fecha Tipo Ámbito Tercero Documento Afecta a Motivo Total Bs Estatus Acciones
{{ fmtFecha(n.fecha) }} {{ n.tipo==='NOTA_CREDITO' ? 'Crédito' : 'Débito' }} {{ n.ambito }}
{{ n.nombre_razon_social }}
{{ n.rif_cedula }}
{{ n.numero_documento }}
Ctrl. {{ n.numero_control }}
— {{ n.motivo || '—' }} {{ fmtBS(n.monto_total_bs) }} devuelto {{ fmtBS(n.monto_devuelto_bs) }} {{ n.estatus }}
No hay notas registradas.

Clientes y Proveedores

El archivo exportado sirve de plantilla: se edita y se vuelve a subir; los contactos existentes se actualizan en vez de duplicarse.

TipoRIF/CINombre / Razón SocialTeléfonoEmailAcciones
{{ t.tipo }} {{ t.rif_cedula }} {{ t.nombre_razon_social }} {{ t.telefono || '—' }} {{ t.email || '—' }}
No hay terceros.

Tesorería

Fondos por cuenta y moneda. El fondeo de divisas (P2P) es una transferencia, no un gasto.

{{ c.nombre }}

{{ etiquetaTipoCuenta(c.tipo) }} · {{ c.moneda }}

{{ fmtMoneda(c.saldo, c.moneda) }}

No hay cuentas de tesorería. Cree una para reflejar sus fondos.

Cobros por acreditar ({{ cobrosPendientes.length }})

Dinero cobrado que aún no está en tu cuenta. Puede liquidarse en varias partes: cada abono descuenta la comisión de esa parte y el saldo pendiente baja. Si emites una nota de crédito sobre la factura, el pendiente se reduce solo.

Factura Cliente Método Bruto Pendiente Comisión en el cobro Acciones
{{ c.numero_factura }} {{ c.fecha_emision }} {{ c.nombre_razon_social }} {{ c.rif_cedula }} {{ c.metodo }} {{ c.dias_abono }} día(s) de abono Abono estimado: {{ fechaAbonoEstimada(c) }} · atrasado {{ fmtMoneda(c.monto_bs, 'BS') }} abonado {{ fmtBS(c.monto_conciliado_bs) }} ajustado por NC {{ fmtBS(c.ajuste_nc_bs) }} {{ fmtBS(pendienteCobro(c)) }} de {{ fmtBS(c.monto_bs) }} Se factura aparte
Fecha Tipo Cuenta Monto Valor Bs Dif. cambiaria Referencia Acciones
{{ m.fecha }} {{ m.tipo }} {{ m.origen_nombre }} → {{ m.destino_nombre }} {{ m.cuenta_nombre }} {{ m.descripcion }} {{ fmtMoneda(m.monto, m.moneda) }} × {{ fmtTasa(m.tasa) }} + {{ fmtMoneda(m.monto_destino, m.destino_moneda || 'BS') }} {{ fmtBS(m.monto_bs) }} {{ Number(m.diferencia_cambiaria_bs) ? fmtBS(m.diferencia_cambiaria_bs) : '—' }} {{ m.referencia || '—' }}
No hay movimientos.

Cotizaciones & Presupuestos

Presupuestos para el cliente: no son documentos fiscales, no mueven inventario ni cuentan como venta. Cuando el cliente acepta, se convierten en factura.

Número Estado Cliente Fecha Vence Total Bs Enviada Acciones
{{ etiquetaEstadoCotizacion(c.estado) }}

{{ c.nombre_razon_social }}

{{ c.rif_cedula }}

{{ fmtFecha(c.fecha) }} {{ c.fecha_vencimiento ? fmtFecha(c.fecha_vencimiento) : '—' }} VENCIDA {{ fmtBS(c.monto_total_bs) }} {{ fmtFecha(String(c.enviada_en).slice(0,10)) }} —
No hay cotizaciones con estos filtros. Cree una para enviarle un presupuesto al cliente.
{{ rangoCotizaciones() }}

CxC & CxP

Lo que te deben los clientes y lo que debes a los proveedores. Las cuentas nacen del documento: una factura a crédito o una compra que no se pagó al registrarse.

Por cobrar

{{ fmtBS(cuentasResumen.cobrar) }}

{{ cuentasResumen.cuentas_cobrar }} cuenta(s) abierta(s)

Por pagar

{{ fmtBS(cuentasResumen.pagar) }}

{{ cuentasResumen.cuentas_pagar }} cuenta(s) con proveedores

Cobro vencido

{{ fmtBS(cuentasResumen.cobrar_vencido) }}

Clientes que pasaron la fecha límite

Pago vencido

{{ fmtBS(cuentasResumen.pagar_vencido) }}

{{ cuentasResumen.vencidas }} vencida(s) en total

Tipo Estado Fecha límite Documento Fecha doc. Tercero Descripción Monto total Pendiente Pagado el Acciones
{{ c.tipo === 'COBRAR' ? 'Por cobrar' : 'Por pagar' }} {{ c.estado === 'PAGADO' ? 'Pagado' : (c.estado === 'CANCELADO' ? 'Cancelado' : 'Pendiente') }} {{ c.fecha_vencimiento ? fmtFecha(c.fecha_vencimiento) : '—' }} VENCIDA {{ fmtFecha(c.documento_fecha) }}

{{ c.nombre_razon_social }}

{{ c.rif_cedula }}

{{ c.descripcion || '—' }}

{{ fmtBS(c.monto_total_bs) }} {{ fmtBS(c.pendiente_bs) }} {{ c.pagado_en ? fmtFecha(String(c.pagado_en).slice(0, 10)) : '—' }}
No hay cuentas con estos filtros. Emite una factura a crédito o registra una compra sin pagar para que aparezcan aquí.
{{ rangoCuentas() }}

Auditoría

Historial de todo lo que ocurre en la empresa: quién, cuándo, desde qué IP y con qué resultado.

Fecha Usuario Acción Resultado Mensaje IP
{{ a.creado_en }}

{{ a.usuario_nombre || '—' }}

{{ a.usuario_email || '' }}

{{ a.accion }} {{ a.resultado }} {{ a.mensaje }} {{ a.ip }}
Sin registros.
Mostrando {{ auditoria.length }} registro(s) de esta empresa.

Evidencia #{{ auditoriaDetalle.id }}

{{ auditoriaDetalle.creado_en }}

Usuario
{{ auditoriaDetalle.usuario_nombre || '—' }} {{ auditoriaDetalle.usuario_email || '' }}
Acción
{{ auditoriaDetalle.accion }}
Resultado
{{ auditoriaDetalle.resultado }} · {{ auditoriaDetalle.nivel }}
IP / ruta
{{ auditoriaDetalle.ip || '—' }} · {{ auditoriaDetalle.ruta || '—' }}

Mensaje

{{ auditoriaDetalle.mensaje || '—' }}

Datos guardados

{{ auditoriaDetalle.datos || '(sin datos adicionales)' }}

hash: {{ auditoriaDetalle.hash }}

Mi plan y facturación

Estado de la suscripción, consumo, pagos y recibos.

{{ cargandoMiPlan ? 'Cargando…' : 'No se pudo cargar la información del plan.' }}

Su suscripción está vencida

Venció el {{ miPlan.suscripcion.vencimiento }}. Reporte su pago para reactivar el servicio.

Su plan vence {{ miPlan.suscripcion.dias_restantes === 0 ? 'hoy' : 'en ' + miPlan.suscripcion.dias_restantes + ' día(s)' }}

Renueve antes del {{ miPlan.suscripcion.vencimiento }} para no perder el acceso.

Empresa en cartera del despacho

Esta empresa la trabaja {{ miPlan.despacho_nombre || 'el despacho' }} desde su propia cuenta, y sus libros fiscales están cubiertos por el plan del despacho. La empresa no tiene plan propio ni necesita iniciar sesión.

Si el cliente quiere operar el día a día (punto de venta, inventario, alquileres), reporta aquí el pago de un plan de tienda: al aprobarse, la empresa pasa a Full ERP y sale de la cartera.

Cuenta de cortesía

Esta cuenta está activa sin costo, con todos los beneficios de su plan. No tiene pagos ni renovaciones pendientes.

Plan actual

{{ miPlan.incluida_en_despacho ? 'Incluida en el despacho' : (miPlan.suscripcion ? miPlan.suscripcion.plan_nombre : 'Sin plan') }}

{{ miPlan.incluida_en_despacho ? 'Los libros fiscales los cubre el plan de tu despacho; no hay un plan propio que renovar.' : (miPlan.suscripcion ? miPlan.suscripcion.plan_descripcion : 'Su cuenta no tiene un plan asignado.') }}

Precio{{ miPlanEsCortesia ? 'Sin costo' : (miPlan.suscripcion ? fmtUSD(miPlan.suscripcion.precio_plan_usd) + '/mes' : '—') }}

Estado {{ miPlan.suscripcion ? etiquetaEstadoSuscripcion(miPlan.suscripcion.estado) : '—' }}

Próxima renovación{{ miPlan.suscripcion ? (miPlan.suscripcion.vencimiento || '—') : '—' }}

Días restantes {{ miPlan.suscripcion.dias_restantes }}

Consumo de su plan

{{ m.etiqueta }} {{ m.usado }} / {{ m.limite }} · sin límite +{{ m.gracia }} gracia +{{ m.creditos }} extra

La facturación fiscal no tiene tope: los folios los administra su imprenta digital.

Cuota de alquileres de {{ miPlan.cuota_alquileres.periodo }}: {{ miPlan.cuota_alquileres.usados }} de {{ miPlan.cuota_alquileres.tope }} disponibles ({{ miPlan.cuota_alquileres.base }} del plan + {{ miPlan.cuota_alquileres.gracia }} de gracia + {{ miPlan.cuota_alquileres.creditos }} de paquetes).

Datos para realizar el pago

Pago Móvil

{{ miPlan.datos_pago.pago_movil }}

Zelle

{{ miPlan.datos_pago.zelle }}

Transferencia

{{ miPlan.datos_pago.transferencia }}

Efectivo

{{ miPlan.datos_pago.efectivo }}

Instrucciones

{{ miPlan.datos_pago.instrucciones }}

Solicite los datos de pago a soporte de CuadraFlow.

Paquetes de excedente

Si un mes necesita más órdenes de alquiler de las que incluye su plan, compre un paquete: se suman solo a este mes y no cambia su plan.

{{ q.nombre }}

{{ q.descripcion }}

{{ fmtUSD(q.precio_usd) }}

Historial de pagos

Fecha Plan Método Referencia Monto Estado
{{ p.fecha_pago }} {{ p.plan_nombre || '—' }} {{ miPlan.metodos[p.metodo] || p.metodo }} {{ p.referencia || '—' }} {{ fmtUSD(p.monto_usd) }} {{ p.estado }} {{ p.nota_admin }} En revisión
Todavía no hay pagos registrados.

{{ paqueteElegido ? 'Comprar paquete de excedente' : 'Reportar un pago' }}

{{ paqueteElegido.nombre }} · +{{ paqueteElegido.cantidad }} órdenes de alquiler para el mes en curso · {{ fmtUSD(paqueteElegido.precio_usd) }}

Al aprobarse el pago se crea la cuenta del administrador con este correo y se le envía una clave temporal para iniciar sesión. Debe ser un correo que no tenga cuenta aún.

Captura de pantalla del pago (JPG, PNG o WEBP, máx. 5 MB).

Usuarios y roles

Cada usuario trabaja con un rol, y el rol define exactamente qué puede hacer en el sistema.

NombreEmailRolEstadoAcciones
{{ u.nombre }} {{ u.email }} {{ u.rol_nombre || u.rol }} admin {{ u.estado==1 ? 'Activo' : 'Inactivo' }}

Sin usuarios registrados.

{{ r.nombre }} sistema

{{ r.descripcion || 'Sin descripción.' }}

{{ (r.permisos || []).length }} permisos · {{ r.usuarios }} usuarios

Sin roles. Cree el primero con "Nuevo rol".

Vendedores

Cada vendedor tiene su porcentaje de comisión; la comisión se calcula sobre el neto sin impuestos de la factura.

Vendedor Comisión Facturas Comisión pendiente Estado Acciones
{{ v.nombre }} {{ v.cedula }} {{ v.comision_porcentaje }} % {{ v.facturas }} {{ fmtUSD(v.comision_pendiente_usd) }} {{ fmtBS(v.comision_pendiente_bs) }} {{ Number(v.activo) === 1 ? 'Activo' : 'Inactivo' }}

Sin vendedores registrados.

{{ r.nombre }}

{{ r.facturas }} fact.

{{ fmtUSD(r.pendiente_usd) }}

{{ fmtBS(r.pendiente_bs) }} pendientes

Base: {{ fmtUSD(r.base_usd) }} Pagado: {{ fmtUSD(r.pagada_usd) }}
Factura Fecha Cliente Vendedor Base % Comisión Estado
{{ f.numero_factura }} {{ fmtFecha(f.fecha_emision) }} {{ f.cliente }} {{ f.vendedor_nombre }} {{ fmtUSD(f.comision_base_usd) }} {{ f.comision_porcentaje }} % {{ fmtUSD(f.comision_monto_usd) }} {{ f.comision_estado }}

Sin comisiones para el filtro seleccionado.

Pagos registrados
Fecha Vendedor Facturas Monto Cuenta Referencia
{{ fmtFecha(p.fecha) }} {{ p.vendedor_nombre }} {{ p.facturas }} {{ fmtUSD(p.monto_usd) }} {{ p.cuenta_nombre || '—' }} {{ p.referencia || '—' }}

Sin pagos registrados.

Configuración

Cada área agrupa sus ajustes. Si no recuerda dónde está algo, búsquelo por nombre.

Sin coincidencias. Pruebe con «imprenta», «correo», «IVA», «impresora»…

Logo de la empresa

Se muestra en el menú lateral del sistema. JPG, PNG o WEBP hasta 4 MB; un logo horizontal o cuadrado con fondo transparente se ve mejor.

Logo actual

Datos fiscales

Tasa BCV

Tasa vigente

{{ resumen.tasa_bcv ? fmtTasa(resumen.tasa_bcv) : 'Sin registrar' }}

Valor: {{ resumen.tasa_bcv_fecha }}

{{ etiquetaFuente(resumen.tasa_bcv_fuente) }}

Se consulta el portal del BCV y, si no responde, un respaldo público. La tasa se guarda con la fecha valor publicada por el BCV y se actualiza una vez al día.

Imprenta digital

Elija con qué proveedor emite sus documentos fiscales. Cada uno guarda sus propias credenciales y puede cambiarse en cualquier momento; el token se renueva solo.

{{ empresa.imprenta_configurada ? 'Credenciales completas: la facturación puede emitir.' : 'Faltan credenciales del proveedor seleccionado: las facturas quedarán pendientes de emisión.' }}

The Factory HKA

ABC Digital Printing

ABC entrega la URL de la API junto con las credenciales de sandbox y producción. Los documentos se emiten con /emision y se anulan con /anular.

ABC solo reconoce VEF: si se envía VES responde «MONEDA INVALIDO». Se envía VEF aunque el código ISO vigente sea VES.

El tipo de ítem solo se usa en líneas sin producto del catálogo: con producto se toma de la ficha (Producto = bien, Servicio y Alquilable = servicio).

ABC envía el documento al correo del cliente únicamente cuando se marca «Sí» y el cliente tiene correo cargado. Si no lo tiene, se envía la dirección vacía y no se notifica a nadie.

{{ imprentaDiag.nombre }} · conexión OK

{{ imprentaDiag.nombre }} · revisar configuración

Token válido hasta: {{ imprentaDiag.token_expiracion }}

Rangos de numeración disponibles: {{ imprentaDiag.total_rangos }}

{{ imprentaDiag.aviso_series }}

{{ imprentaDiag.error }}

Abrir el portal de ABC

Impuestos

IVA, IGTF, LISAEA, tasas municipales y otros tributos de la empresa.

Tiendas y almacenes

Varias sucursales a la vez: facturas, compras y movimientos quedan registrados con el local donde ocurrieron.

{{ sucursales.length }} sucursal(es) · límite del plan: {{ sucursalesLimite === 0 ? 'sin límite' : sucursalesLimite }}

IGTF y Retenciones

IGTF (transacciones en divisas)

Se aplica al registrar ventas, alquileres o compras pagadas en moneda extranjera.

Retenciones (agente de retención)

Al registrar una compra a un contribuyente especial se generan los comprobantes automáticamente.

Métodos de pago y comisiones

Cada forma de pago tiene su comisión y sus días de abono. En una factura con varias formas de pago (por ejemplo inicial con punto de venta y saldo con Cashea) la comisión se calcula por cada pago.

Método Naturaleza Comisión % Días abono Cuenta destino Comisión Activo Acciones
{{ m.nombre }} {{ etiquetaTipoMetodo(m.tipo) }} {{ Number(m.comision_porcentaje) ? m.comision_porcentaje + ' %' : '—' }} {{ m.dias_abono }} {{ nombreCuenta(m.cuenta_tesoreria_id) }} {{ m.comision_con_factura==1 ? 'Con factura' : 'Sin factura' }} — {{ m.activo==1 ? 'Sí' : 'No' }}
Sin métodos de pago definidos.

Cashea (Web Checkout)

Cashea entrega la API Key, el Auth Token y el Store ID al afiliar el comercio. Mientras no estén cargados, el sistema funciona en modo demostración con un enlace local de retorno para probar el flujo completo.

URL de notificación: api.php?action=cashea_webhook
Retorno del cliente: cashea_retorno.php

Compra mínima informada por Cashea: {{ fmtUSD(casheaEstado.min_amount) }}

Contrato de alquiler

Sin la aceptación del contrato el sistema no deja facturar un alquiler. Este texto es el que lee el cliente en su teléfono y el que sale en la hoja impresa.

Es el modo sugerido al abrir una orden; en cada alquiler el vendedor puede usar el otro.

El documento incluye automáticamente Encabezado con logo, razón social, RIF, dirección y contacto · datos del cliente · bienes alquilados con sus atributos · fechas, monto del servicio, depósito y tasa BCV · tres bloques de firma (contrato, recepción y devolución).

Si lo deja vacío se usa un texto genérico de alquiler. Numere las cláusulas para que se lean mejor.

Correo saliente (SMTP)

Buzón con el que el sistema envía el enlace de firma del contrato. Si no se configura, el enlace igual se puede mostrar como QR en el mostrador.

Módulos del sistema

Active sólo lo que usa su negocio. La interfaz se adapta automáticamente.

Cliente de impresión (Windows)

Permite que el ERP imprima las facturas (PDF) directamente en una impresora de esta PC, sin abrir el cuadro de diálogo del navegador. En teléfonos y tablets se sigue usando la impresión del navegador.

{{ impresoraEstado==='conectado' ? 'Conectado' : impresoraEstado==='conectando' ? 'Conectando…' : impresoraEstado==='movil' ? 'No aplica en móvil' : impresoraEstado==='error' ? 'Sin conexión' : 'Sin verificar' }}

Equipo conectado: {{ impresoraMensaje }}

{{ impresoraMensaje }}

Está navegando desde un móvil. El ejecutable solo funciona en la PC con Windows que tiene la impresora; desde el móvil el PDF se abre en el visor del navegador para imprimir o guardar.

1. Instalar en la PC de caja

  1. Descargue PrintServer.exe y guárdelo en una carpeta fija (ej. C:\ERP-Impresion).
  2. Ejecútelo con doble clic: queda como icono de impresora junto al reloj.
  3. En ese icono elija la impresora, guarde y marque «Iniciar con Windows».

Versión {{ clienteImpresion.version || '—' }} · {{ clienteImpresion.tamano_mb }} MB

El ejecutable no está en el servidor (falta la carpeta printclient).

2. Impresora y conexión

La lista se llena con las impresoras de la PC donde corre el cliente.

Atributos personalizables

Campos propios de su rubro (medidas, seriales, destinatario, colores…). Se imputan en cada operación y aparecen automáticamente en los formularios.

Etiqueta Código Tipo Se aplica a Obligatorio Activo Acciones
{{ a.etiqueta }} {{ a.codigo }} {{ a.tipo }} {{ a.ambito === 'ORDEN' ? 'Operación' : (a.ambito === 'LINEA' ? 'Ítem/Línea' : 'Factura') }} {{ a.requerido==1 ? 'Sí' : '—' }} {{ a.activo==1 ? 'Sí' : 'No' }}
Aún no hay atributos definidos.

Categorías de egreso

Clasificación propia para los egresos sin factura legal (P2P/crypto, servicios del exterior, SaaS…). No alteran el tratamiento fiscal: sólo ordenan el estado de resultados.

Nombre Descripción Orden Activa Acciones
{{ c.nombre }} {{ c.descripcion || '—' }} {{ c.orden }} {{ c.activo==1 ? 'Sí' : 'No' }}
Sin categorías definidas.

Inteligencia Artificial (Gemini)

El costo se consulta en BigQuery y el tope en Cloud Billing Budgets (solo budgets de IA). El crédito prepago de Gemini se registra aquí porque Google no lo publica por API. Los secretos se guardan cifrados.

{{ ia.modo === 'PLATAFORMA' ? 'Usando la IA incluida en su plan (CuadraFlow)' : (ia.modo === 'PROPIA' ? 'Usando su propia API key de Gemini' : 'IA sin configurar') }}

El crédito prepago se copia de AI Studio → Facturación → Crédito disponible: Google no lo publica en ninguna API. El ERP descuenta de ese saldo el consumo real de Gemini que exporta BigQuery desde la fecha indicada (sin incluir recargas automáticas). El tope mensual de IA solo toma budgets de Google que incluyan el servicio de Gemini; los budgets de otros servicios (por ejemplo Compute Engine) se ignoran.

Diagnóstico

Gemini: {{ iaDiag.gemini ? 'OK' : 'Error' }} — {{ iaDiag.gemini_error }}

Modelos disponibles: {{ iaDiag.modelos.slice(0, 8).join(', ') }}

Facturación (BigQuery): {{ iaDiag.billing ? 'OK' : 'Error' }} — {{ iaDiag.billing_error }}

Gasto del mes: {{ fmtUSD(iaDiag.gasto.gasto_usd) }} (bruto {{ fmtUSD(iaDiag.gasto.bruto_usd) }}, créditos {{ fmtUSD(iaDiag.gasto.creditos_usd) }})

Presupuesto Google: {{ iaDiag.presupuesto.monto != null ? fmtUSD(iaDiag.presupuesto.monto) : 'no definido' }} — {{ iaDiag.presupuesto.error }}