ERP Corporate OS
Selecciona la sucursal de trabajo
Ingresa el código de Google Authenticator
{{ userData?.nombre }}
{{ userData?.tipo }}
Panel principal del sistema.
POS y facturación
Turnos y Arqueos
Proveedores y pedidos
Productos y stock
Gestión multi-cuenta y chat
Ingresos y Egresos
Gestión de usuarios y roles
Servicio técnico y reacondicionamiento
Ajustes del sistema
Gestiona los parámetros y preferencias de la empresa.
⚠ Zona Peligrosa
Administra las categorías para los flujos de caja.
| Cargando... | |
| No hay ingresos registrados. | |
| {{ cat.cie_descripcion }} |
| Cargando... | |
| No hay egresos registrados. | |
| {{ cat.cie_descripcion }} |
Organiza tu catálogo en categorías y subcategorías.
| Código | Nombre | Categoría Padre | Productos | Acciones |
|---|---|---|---|---|
|
Cargando categorías... |
||||
| No hay categorías registradas. | ||||
| {{ cat.cat_codigo }} | {{ cat.cat_nombre }} | {{ cat.cat_padre || '—' }} | {{ cat.total_productos ?? 0 }} | |
Gestiona las diferentes sucursales de tu empresa.
| Nombre | Dirección | Teléfono | Acciones |
|---|---|---|---|
|
Cargando sucursales... |
|||
| No hay sucursales registradas. | |||
| {{ suc.su_nombre }} | {{ suc.su_direccion }} | {{ suc.su_telefono }} | |
Configuración de tasas de impuestos.
| Código | Descripción | Valor (%) | Predeterminado | Estatus | Retención | Acciones |
|---|---|---|---|---|---|---|
|
Cargando impuestos... |
||||||
| No hay impuestos registrados. | ||||||
|
{{ imp.imp_codigo }}
★ Por Defecto
|
{{ imp.imp_descripcion }} | {{ imp.imp_valor }}% | Sí (Principal) No | Activo Inactivo | Sí No | |
Gestión de depósitos y almacenes físicos.
| Código | Nombre | Sucursales Asociadas | Ciudad | Master | Garantía | Acciones |
|---|---|---|---|---|---|---|
| {{ alm.alm_codigo }} | {{ alm.alm_nombre }} | 🏬 {{ alm.sucursales_nombres }} Sin sucursales asignadas | {{ alm.alm_ciudad || '—' }} | Sí | Garantía |
Administra los bancos del sistema.
| Código | Banco | Estatus | Acciones |
|---|---|---|---|
| {{ ban.ban_codigo }} | {{ ban.ban_descripcion }} | Activo Inactivo |
Administra los puntos de facturación.
| Código | Descripción | Impresora / Serie | Sucursal | Estatus | Acciones |
|---|---|---|---|---|---|
| No hay cajas registradas. | |||||
| {{ caja.caj_codigo }} | {{ caja.caj_descripcion }} |
{{ caja.impresora_codigo }} - {{ caja.impresora_nombre }}
Serie: {{ caja.serie_codigo }}
Sin impresora
|
{{ caja.sucursal_nombre }} Sin sucursal | Activa Inactiva | |
Administra las divisas manejadas en el sistema.
| Moneda | Símbolo | Decimales | Estatus | Acciones |
|---|---|---|---|---|
| {{ div.div_nombre }} | {{ div.div_simbolo }} | {{ div.div_decimal }} | Activa Inactiva |
Administra las formas de pago aceptadas.
| Método | Descripción | Divisas Habilitadas | Estatus | Acciones |
|---|---|---|---|---|
| {{ mp.mp_nombre }} | {{ mp.mp_descripcion }} |
{{ d.simbolo }} ({{ d.nombre }})
⚠️ Sin divisas
|
Activo Inactivo |
| Cuenta / Banco | Nº de Cuenta | Divisa | Métodos Aceptados | Acciones |
|---|---|---|---|---|
| No hay registros de cuentas bancarias. | ||||
|
{{ c.cue_descripcion }}
{{ c.cue_alias }}
•
{{ c.banco_nombre || 'N/A' }}
|
{{ c.cue_codigo }}
{{ c.cue_tipo || 'CORRIENTE' }}
|
{{ c.div_simbolo || '$' }} {{ c.div_nombre || 'USD' }} |
{{ m.nombre }}
⚠️ Sin métodos
|
|
| Código | Descripción | Tipo | Serie Asociada | IP / Puerto | Estatus | Acciones |
|---|---|---|---|---|---|---|
| No hay impresoras registradas. | ||||||
| {{ i.imp_codigo }} | {{ i.imp_descripcion }} | 🧾 Fiscal 🎫 Ticket 🖥️ Punto |
{{ i.serie_codigo || 'SERIE' }}
{{ i.serie_nombre }}
{{ i.sucursal_nombre }}
Sin serie asignada
|
{{ i.imp_ip || '127.0.0.1' }}:{{ i.imp_puerto || '9100' }} | Activa Inactiva | |
| Código | Nombre | Inicio - Fin | Acciones |
|---|---|---|---|
| No hay registros. | |||
| {{ e.ej_codigo }} | {{ e.ej_nombre }} | {{ e.ej_fechainicio }} / {{ e.ej_fechafin }} | |
Gestiona las marcas disponibles para asociar a los productos.
No hay marcas registradas
Comienza agregando la primera marca de tus productos.
| ID | Nombre de la Marca | Acciones |
|---|---|---|
| {{ item.m_id }} |
|
|
Define las tarifas de venta asignadas a productos y clientes.
costo
Costo + (Costo × X%) + Y
costoiva
(Costo+IVA) + ((Costo+IVA) × X%) + Y
pvp
PVP − (PVP × X%) − Y
pvpiva
(PVP+IVA) − ((PVP+IVA) × X%) − Y
| Cód. | Nombre | Base | % (X) | Fijo (Y) | Fórmula resultante | Visible | Acciones |
|---|---|---|---|---|---|---|---|
|
Cargando tarifas... |
|||||||
| No hay tarifas registradas. | |||||||
| {{ tar.tar_codigo }} | {{ tar.tar_nombre }} | {{ tar.tar_aplicar }} | {{ tar.tar_valorx }}% | {{ tar.tar_valory }} | Costo + (Costo × {{ tar.tar_valorx }}%) + {{ tar.tar_valory }} (Costo+IVA) + ((Costo+IVA) × {{ tar.tar_valorx }}%) + {{ tar.tar_valory }} PVP − (PVP × {{ tar.tar_valorx }}%) − {{ tar.tar_valory }} (PVP+IVA) − ((PVP+IVA) × {{ tar.tar_valorx }}%) − {{ tar.tar_valory }} | ✓ Sí — | |
Gestión de series y prefijos para documentos.
| Código | Descripción | Sucursal | Sin IVA | Acciones |
|---|---|---|---|---|
| {{ ser.ser_codigo }} | {{ ser.ser_descripcion }} | {{ ser.sucursal_nombre }} Todas / Global | Sí |
Guía visual e interactiva para la creación y encadenamiento de Sucursales, Series, Impresoras, Cajas y Empleados.
Define la sede física, dirección fiscal, teléfono y zona horaria (ej. EMOCA, CC CIMA, SUCURSAL NUEVA).
Depósito de inventario y stock físico.
Se vincula a una o varias sucursales para controlar existencias y traslados.
Prefijo fiscal (ej. A, B, FISCAL SUCURSAL 2).
Asignada obligatoriamente a la Sucursal correspondiente.
Contadores para Facturas, Notas de Entrega, Presupuestos y Pedidos.
Fiscal (Reportes X/Z), Ticketera o Comandera.
Ligada a la Serie. Configura su IP de red, puerto, límite fiscal y pie de página.
Punto de cobro físico en mostrador.
Ligada obligatoriamente a la Impresora. Hereda automáticamente su Serie y Sucursal.
Se le asignan permisos sobre la Sucursal, la Serie y la Caja.
Configura plantillas, frecuencia de recordatorios y automatizaciones enviadas por WhatsApp Business.
Cargando módulos de alertas...
{{ alerta.descripcion }}
Variables Disponibles (Clic para insertar en el texto):
Bot de Notificaciones
Cuenta de Empresa Oficial
{{ testModalAlerta.alerta ? testModalAlerta.alerta.titulo : '' }}
Incluye el código internacional de país (ej: 58 para Venezuela).
Nota sobre la prueba:
Se enviará el mensaje utilizando la plantilla configurada con datos de demostración para que verifiques el formato final en tu celular.
Estas acciones eliminan datos transaccionales permanentemente. Úsalas solo para iniciar el sistema desde cero. Los catálogos (productos, clientes, proveedores, configuración) NO se eliminan. Solo se limpian movimientos y documentos.
Facturas, N/C, N/E, Presupuestos, Pedidos, Cuotas
Compras, notas de compra, crédito proveedor, pedidos
Elimina stocks, seriales/IMEI, transferencias y bitácoras de movimiento
Movimientos, sesiones de caja, arqueos y saldos de cuentas bancarias
Elimina conversaciones, historial de mensajes y logs (conserva las cuentas y plantillas)
Limpia todos los módulos simultáneamente y reinicia los correlativos de documentos a cero. El sistema quedará listo para comenzar operaciones reales.
Módulo: {{ limpieza.target === 'todo' ? 'Todo el sistema + correlativos' : limpieza.target }}
Esta acción es permanente e irreversible. Para confirmar, escribe
LIMPIAR
en el campo a continuación:
Gestión de inventario, equipos y accesorios.
| Código | Producto | Precio | Stock | |
|---|---|---|---|---|
| No hay productos registrados o no coinciden con los filtros seleccionados. | ||||
|
{{ pro.pro_codigo }}
IMEI
|
{{ pro.pro_descripcion || pro.pro_nombrecorto || 'Sin nombre' }}
{{ pro.pro_nombrecorto }}
{{ [pro.fab_nombre, pro.cat_nombre].filter(Boolean).join(' • ') }}
|
${{ formatMoney(pro.pro_precio || 0) }} |
Servicio
{{ pro.pro_stockfis }} u.
⚠️ Mín: {{ pro.pro_stockmin }}
|
|
Gestión integral del catálogo
Crea atributos (ej. Color) y asígnales valores (ej. Rojo, Azul).
Haz clic en un atributo de la lista izquierda para administrar sus posibles valores.
Stock actual, costos, PVP y seriales/IMEIs por categoría.
Si no selecciona ninguna categoría, se incluirán todas por defecto.
Movimientos globales de productos — Entradas, Salidas y Disponible.
Productos
{{ kardexData.length }}
Total Entradas
{{ kardexData.reduce((s,r)=> s + Number(r.entradas_compras) + Number(r.entradas_nc_ventas) + Number(r.ajustes_entrada) + Number(r.transferencias_entrada), 0) }}
Total Salidas
{{ kardexData.reduce((s,r)=> s + Number(r.salidas_ventas) + Number(r.salidas_nc_compras) + Number(r.ajustes_baja) + Number(r.transferencias_salida), 0) }}
Stock Disponible
{{ kardexData.reduce((s,r)=> s + Number(r.stock_actual), 0) }}
Aplica los filtros y haz clic en Filtrar para ver el kardex.
| Código | Producto | Inicial | Compras | NC Venta | Ajuste+ | Transf+ | Ventas | NC Compra | Ajuste- | Transf- | Disponible | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.pro_codigo }} | {{ row.nombre }} Servicio | {{ row.pro_tipo == 3 ? '—' : row.stock_inicial }} | {{ row.entradas_compras > 0 ? '+' + row.entradas_compras : '—' }} | {{ row.entradas_nc_ventas > 0 ? '+' + row.entradas_nc_ventas : '—' }} | {{ row.ajustes_entrada > 0 ? '+' + row.ajustes_entrada : '—' }} | {{ row.transferencias_entrada > 0 ? '+' + row.transferencias_entrada : '—' }} | {{ row.salidas_ventas > 0 ? '-' + row.salidas_ventas : '—' }} | {{ row.salidas_nc_compras > 0 ? '-' + row.salidas_nc_compras : '—' }} | {{ row.ajustes_baja > 0 ? '-' + row.ajustes_baja : '—' }} | {{ row.transferencias_salida > 0 ? '-' + row.transferencias_salida : '—' }} | {{ row.pro_tipo == 3 ? 'Intangible' : row.stock_actual }} |
{{ kardexDetalleProducto.pro_codigo }} — {{ kardexDetalleProducto.nombre }}
| Doc | Fecha | Tipo | Almacén | Empleado | Antes | Entrada | Salida | Después |
|---|---|---|---|---|---|---|---|---|
| #{{ mov.doc_id }} — | {{ mov.fecha }} | {{ mov.tipo }} | {{ mov.almacen || '—' }} | {{ mov.empleado || '—' }} | {{ mov.stock_antes }} | {{ mov.entrada > 0 ? '+' + mov.entrada : '—' }} | {{ mov.salida > 0 ? '-' + mov.salida : '—' }} | {{ mov.stock_despues }} |
Workspace completo para recepción de mercancía y carga de compras
| Código | Producto / Condición | Cantidad | Costo U. ($) | Desc. ($) | IVA % | Neto Total | |
|---|---|---|---|---|---|---|---|
| No hay productos cargados en este documento. Utilice el buscador para añadir renglones. | |||||||
| {{ item.codigo }} |
{{ item.nombre }}
🔋 Batería:
%
🏢
SERIAL / IMEI:
{{ typeof s === 'object' ? s.serial : s }}
🔋 {{ s.bateria }}%
|
${{ formatMoney(((item.cantidad * item.precio) - item.descuento) * (1 + (item.iva_pct/100))) }} | |||||
Gestión de facturación de compras, recepción de mercancía, cuentas por pagar y sugerencias de stock
| ID / Factura | Sucursal | Proveedor | Almacén | Serie | Fecha | Total | Pendiente | Estatus | Acciones | |
|---|---|---|---|---|---|---|---|---|---|---|
| Cargando facturas de compra... | ||||||||||
| No se encontraron facturas con los filtros seleccionados. | ||||||||||
| #{{ c.id }} {{ c.numfactura }} | {{ c.sucursal_nombre || 'General' }} | {{ c.proveedor_nombre || 'Proveedor N/A' }} {{ c.proveedor_cifnif }} | {{ c.almacen_nombre || 'Principal' }} | {{ c.serie_nombre || 'N/A' }} | {{ c.fecha }} | ${{ formatMoney(c.total || 0) }} | ${{ formatMoney(Math.max(0, parseFloat(c.total || 0) - parseFloat(c.total_pagado || 0))) }} | Anulada Por Aprobar Pagada Abonado ({{ Math.round((c.total_pagado / c.total) * 100) }}%) Pendiente Pago |
Acciones
Factura Anulada
Sin acciones |
|
| Totales: | ${{ formatMoney(calculateTotalsCompras(filteredFacturasCompras).total) }} | ${{ formatMoney(calculateTotalsCompras(filteredFacturasCompras).pendiente) }} | ||||||||
| ID / N° Documento | Sucursal | Proveedor | Almacén | Serie | Fecha | Total | Pendiente | Estatus | Acciones |
|---|---|---|---|---|---|---|---|---|---|
| Cargando notas de entrega... | |||||||||
| No se encontraron notas de entrega con los filtros seleccionados. | |||||||||
| #{{ n.id }} {{ n.numfactura }} | {{ n.sucursal_nombre || 'General' }} | {{ n.proveedor_nombre || 'Proveedor N/A' }} | {{ n.almacen_nombre || 'Principal' }} | {{ n.serie_nombre || 'N/A' }} | {{ n.fecha }} | ${{ formatMoney(n.total || 0) }} | ${{ formatMoney(Math.max(0, parseFloat(n.total || 0) - parseFloat(n.total_pagado || 0))) }} | Convertida a Factura Por Aprobar Pagada Abonado ({{ Math.round((n.total_pagado / n.total) * 100) }}%) Pendiente Pago |
Acciones
Convertida a Factura / Anulada
Sin acciones |
| Totales: | ${{ formatMoney(calculateTotalsCompras(filteredNotasCompras).total) }} | ${{ formatMoney(calculateTotalsCompras(filteredNotasCompras).pendiente) }} | |||||||
| ID / Correlativo | Sucursal | Proveedor | Almacén Target | Serie | Fecha Emisión | Total Est. | Pendiente | Estatus | Acciones |
|---|---|---|---|---|---|---|---|---|---|
| Cargando órdenes de pedido... | |||||||||
| No se encontraron órdenes de pedido con los filtros seleccionados. | |||||||||
| #{{ p.id }} {{ p.correlativo }} | {{ p.sucursal_nombre || 'General' }} | {{ p.proveedor_nombre || 'Proveedor N/A' }} | {{ p.almacen_nombre || 'Principal' }} | {{ p.serie_nombre || 'N/A' }} | {{ p.fecha }} | ${{ formatMoney(p.total || 0) }} | ${{ formatMoney(Math.max(0, parseFloat(p.total || 0) - parseFloat(p.total_pagado || 0))) }} | Emitida Anulada Borrador |
Acciones
Anulado
Sin acciones |
| Totales: | ${{ formatMoney(calculateTotalsCompras(filteredPedidosCompras).total) }} | ${{ formatMoney(calculateTotalsCompras(filteredPedidosCompras).pendiente) }} | |||||||
Gestión integral 360°, facturas de compra, cuentas por pagar y catálogo de productos suministrados.
| Proveedor / Razón Social | Contacto | Total Comprado | Saldo Deuda | Estatus | Acciones |
|---|---|---|---|---|---|
|
No se encontraron proveedores coincidentes. |
|||||
|
{{ (prov.nombre || 'P').substring(0, 2).toUpperCase() }}
{{ prov.cifnif || prov.documento || 'RIF N/A' }}
JURÍDICA
|
{{ prov.telefono }}
{{ prov.email }}
Sin contacto
|
${{ Number(prov.total_comprado || 0).toFixed(2) }} {{ (parseInt(prov.total_facturas || 0) + parseInt(prov.total_notas || 0)) }} compras |
${{ Number(prov.total_deuda).toFixed(2) }}
Pendiente
Al Día
|
|
|
RIF: {{ selectedProveedor.cifnif || selectedProveedor.documento || 'N/A' }} • Tel: {{ selectedProveedor.telefono }} • {{ selectedProveedor.email }}
Datos de identificación, contacto y parámetros fiscales de compras.
| Documento | Fecha | Renglones | Neto | IVA | Total ($) | Pagado | Saldo | Estatus | Acciones |
|---|---|---|---|---|---|---|---|---|---|
| No hay documentos de compra registrados para este proveedor. | |||||||||
|
{{ doc.tipo_label }}
{{ doc.num_documento || (doc.serie + '-' + doc.correlativo) }}
|
{{ doc.fecha }} | {{ doc.articulos_total || '-' }} | ${{ Number(doc.neto || 0).toFixed(2) }} | ${{ Number(doc.iva || 0).toFixed(2) }} | ${{ Number(doc.total || 0).toFixed(2) }} | ${{ Number(doc.total_pagado || 0).toFixed(2) }} | ${{ Number(doc.saldo_restante || 0).toFixed(2) }} | {{ parseInt(doc.estatus) === 2 ? 'Anulado' : (parseFloat(doc.saldo_restante || 0) <= 0.01 ? 'Pagado' : 'Pendiente') }} |
|
| Documento | Emisión | Vencimiento | Monto Total | Monto Pagado | Saldo Deuda | Estatus | Acción |
|---|---|---|---|---|---|---|---|
| No se registran cuentas por pagar en este criterio. | |||||||
|
{{ c.tipo }}
{{ c.num_documento || (c.serie + '-' + c.correlativo) }}
|
{{ c.fecha_emision }} | {{ c.fecha_vencimiento || c.fecha_emision }} {{ Math.abs(c.dias_diferencia) }} días vencido {{ c.dias_diferencia }} días restantes | ${{ Number(c.monto_total).toFixed(2) }} | ${{ Number(c.monto_pagado || 0).toFixed(2) }} | ${{ Number(c.saldo_pendiente).toFixed(2) }} | {{ parseFloat(c.saldo_pendiente) <= 0.01 ? 'Saldada' : (parseInt(c.dias_diferencia) < 0 ? 'Vencida' : 'Al Día') }} | Pagada |
| Producto / Código | Total Comprado | Costo Promedio | Último Costo | Total Gastado ($) | Seriales / IMEIs | Última Compra |
|---|---|---|---|---|---|---|
| No se registran artículos adquiridos con este proveedor. | ||||||
|
{{ art.pro_nombre }} {{ art.pro_codigo }} |
{{ Number(art.total_unidades || 0) }} unds | ${{ Number(art.costo_promedio || 0).toFixed(2) }} | ${{ Number(art.ultimo_costo || art.costo_promedio || 0).toFixed(2) }} | ${{ Number(art.total_gastado || 0).toFixed(2) }} | {{ art.seriales_ingresados }} seriales - | {{ art.ultima_compra }} |
Complete los datos de contacto y facturación del proveedor.
Gestión de facturas a crédito pendientes con proveedores.
Deuda Total
${{ formatMoney(cuentasPagarCompras.reduce((sum, cp) => sum + (parseFloat(cp.monto_total || 0) - parseFloat(cp.monto_pagado || 0)), 0)) }}
| Proveedor | Sucursal | Factura | Vencimiento | Estatus | Deuda / Total | Acciones |
|---|---|---|---|---|---|---|
|
{{ cp.proveedor_nombre }} Días crédito: {{ cp.dias_credito }} |
{{ cp.sucursal_nombre || 'General' }} |
#{{ cp.numfactura || cp.id }}
{{ formatDate(cp.fecha_deuda) }} |
{{ cp.fecha_vencimiento ? formatDate(cp.fecha_vencimiento) : 'N/A' }} |
PAGADO VENCIDO PENDIENTE |
${{ formatMoney((parseFloat(cp.monto_total || 0) - parseFloat(cp.monto_pagado || 0))) }} de ${{ formatMoney(cp.monto_total || 0) }} |
|
|
No hay deudas registradas con los filtros seleccionados Las cuentas por pagar aparecerán aquí. |
||||||
| Totales Filtrados ({{ filteredCuentasPagarCompras.length }} facturas): |
${{ formatMoney(filteredCuentasPagarCompras.reduce((sum, cp) => sum + (parseFloat(cp.monto_total || 0) - parseFloat(cp.monto_pagado || 0)), 0)) }} de ${{ formatMoney(filteredCuentasPagarCompras.reduce((sum, cp) => sum + parseFloat(cp.monto_total || 0), 0)) }} |
|||||
Productos sugeridos para reabastecimiento basados en nivel de stock
| Código | Producto | Costo Estimado | Stock Actual | Stock Mínimo | Cantidad Sugerida |
|---|---|---|---|---|---|
| Analizando inventario... | |||||
| No hay sugerencias de compra urgentes por el momento. | |||||
| {{ s.codigo }} | {{ s.nombre }} | ${{ formatMoney(s.costo || 0) }} | {{ s.stock_actual }} | {{ s.stock_minimo }} | +{{ s.sugerido_comprar }} |
Productos agotados o por debajo del mínimo crítico en almacén
| Código | Producto | Costo | Stock Actual | Stock Mínimo | Sugerido para Orden |
|---|---|---|---|---|---|
| Consultando niveles de stock... | |||||
| No existen alertas de stock mínimo crítico. | |||||
| {{ ps.codigo }} | {{ ps.nombre }} | ${{ formatMoney(ps.costo || 0) }} | {{ ps.stock_actual }} | {{ ps.stock_minimo }} | +{{ ps.sugerido_comprar }} |
Historial de vida de cada equipo, su origen de compra y estatus actual.
| Producto | IMEI / Serial | Batería/Condición | Origen | Estatus |
|---|---|---|---|---|
|
{{ t.producto_nombre }} {{ t.producto_codigo }} • {{ t.categoria_nombre || 'Sin categoría' }} |
{{ t.serial }} |
{{ t.condicion || 'Nuevo' }}
{{ t.bateria }}%
|
FACTURA NOTA #{{ t.doc_origen_id }} {{ formatDate(t.fecha_registro) }} {{ t.almacen_nombre }} |
EN STOCK VENDIDO / SALIDA |
|
No se encontraron resultados Busque por un número de IMEI, Serial o modelo. |
||||
Estadísticas consolidadas de facturación de compras
Gestión de abonos sincronizados con Tesorería y Cuentas Bancarias
| ID | # Referencia | Método / Divisa | Cuenta / Caja | Tasa (Bs/$) | Monto Original | Monto USD ($) | Fecha | |
|---|---|---|---|---|---|---|---|---|
| No se han registrado abonos anteriores para esta factura. | ||||||||
| #{{ p.id }} | {{ p.referencia || 'S/R' }} | {{ p.metodo_nombre || 'Pago' }} {{ p.divisa_nombre }} ({{ p.divisa_simbolo }}) | {{ p.cuenta_alias || 'Caja' }} {{ p.banco_nombre }} | {{ parseFloat(p.factor) > 1 ? formatMoney(p.factor) : '1.00' }} | {{ p.divisa_simbolo || '$' }} {{ formatMoney(p.monto) }} | ${{ formatMoney(p.conversion || p.monto) }} | {{ p.fecha }} Anulado | |
Gestión de facturas, notas de entrega, cotizaciones y cobros.
Facturas y Notas de Entrega emitidas
| Documento | Cliente | Fecha | Total | Estatus | Acciones |
|---|---|---|---|---|---|
|
{{ f.serie_nombre }}-{{ String(f.numfactura).padStart(6, '0') }} |
{{ f.cliente_nombre }} {{ f.cliente_dni }} |
{{ f.fecha }} |
{{ formatMoney(f.total) }} Pagado: {{ formatMoney(f.total_pagado) }} |
Anulada Pendiente Pagada Cuota Abonada ({{ Math.round((f.total_pagado / f.total) * 100) }}%) | |
| No se encontraron facturas. | |||||
| Totales ({{ facturasListFiltered.length }} doc): |
${{ formatMoney(calculateTotals(facturasListFiltered).total) }} Pagado: ${{ formatMoney(calculateTotals(facturasListFiltered).pagado) }} Por cobrar: ${{ formatMoney(calculateTotals(facturasListFiltered).pendiente) }} |
||||
Historial de notas de entrega emitidas
| Documento | Cliente | Fecha | Neto | Total | Estatus | Acciones |
|---|---|---|---|---|---|---|
|
{{ f.serie_nombre }}-{{ String(f.numfactura).padStart(6, '0') }} |
{{ f.cliente_nombre }} {{ f.cliente_dni }} |
{{ f.fecha }} | {{ formatMoney(f.neto) }} |
{{ formatMoney(f.total) }} Pagado: {{ formatMoney(f.total_pagado) }} |
{{ f.estatus == 2 ? 'Anulada' : (f.estatus == 1 ? 'Entregada' : 'Pendiente') }}
100% Pagada Abonado {{ Math.round((f.total_pagado / f.total) * 100) }}% |
|
| No se encontraron notas de entrega con los filtros seleccionados. | ||||||
| Totales ({{ notasListFiltered.length }} doc): | ${{ formatMoney(calculateTotals(notasListFiltered).neto) }} |
${{ formatMoney(calculateTotals(notasListFiltered).total) }} Pagado: ${{ formatMoney(calculateTotals(notasListFiltered).pagado) }} Por cobrar: ${{ formatMoney(calculateTotals(notasListFiltered).pendiente) }} |
||||
Historial de cotizaciones enviadas a clientes
| Documento | Cliente | Fecha | Total Presupuesto | Estatus | Acciones |
|---|---|---|---|---|---|
|
{{ f.serie_nombre }}-{{ String(f.numfactura).padStart(6, '0') }} |
{{ f.cliente_nombre }} {{ f.cliente_dni }} |
{{ f.fecha }} |
{{ formatMoney(f.total) }} |
{{ f.estatus == 2 ? 'Rechazado' : (f.estatus == 3 ? 'Procesado' : (f.estatus == 1 ? 'Aprobado' : 'Cotizado')) }} | |
| No se encontraron presupuestos con los filtros seleccionados. | |||||
| Totales ({{ presupuestosListFiltered.length }} doc): |
${{ formatMoney(calculateTotals(presupuestosListFiltered).total) }} |
||||
Historial de pedidos registrados
| Documento | Cliente | Fecha | Neto | Total | Estatus | Acciones |
|---|---|---|---|---|---|---|
|
{{ f.serie_nombre }}-{{ String(f.numfactura).padStart(6, '0') }} |
{{ f.cliente_nombre }} {{ f.cliente_dni }} |
{{ f.fecha }} | {{ formatMoney(f.neto) }} |
{{ formatMoney(f.total) }} Pagado: {{ formatMoney(f.total_pagado) }} |
{{ f.estatus == 2 ? 'Anulado' : (f.estatus == 1 ? 'Procesado' : 'Pendiente') }} | |
| No se encontraron pedidos con los filtros seleccionados. | ||||||
| Totales ({{ pedidosListFiltered.length }} doc): | ${{ formatMoney(calculateTotals(pedidosListFiltered).neto) }} |
${{ formatMoney(calculateTotals(pedidosListFiltered).total) }} Pagado: ${{ formatMoney(calculateTotals(pedidosListFiltered).pagado) }} Por cobrar: ${{ formatMoney(calculateTotals(pedidosListFiltered).pendiente) }} |
||||
Control de financiamientos, cobro de cuotas, pagos próximos y alertas de mora.
| Documento / Cuota | Cliente | Vencimiento & Estado | Monto Cuota | Abonado | Saldo Pendiente | Acciones |
|---|---|---|---|---|---|---|
|
{{ c.doc_tipo }}
{{ c.serie }}-{{ String(c.correlativo).padStart(6, '0') }}
{{ c.descripcion || 'Cuota de Financiamiento' }} |
{{ c.cliente_nombre || 'Cliente General' }}
{{ c.cliente_dni }}
📱 {{ c.cliente_telefono }}
|
Pagada
{{ c.fecha_vence }}
Vencido hace {{ Math.abs(c.dias_para_vencer) }} día(s)
Venció: {{ c.fecha_vence }}
🔔 ¡Vence Hoy!
{{ c.fecha_vence }}
Vence en {{ c.dias_para_vencer }} día(s)
{{ c.fecha_vence }}
{{ c.fecha_vence }}
En {{ c.dias_para_vencer }} días
|
${{ formatMoney(c.monto) }} | ${{ formatMoney(c.abonado || 0) }} | ${{ formatMoney(c.saldo_pendiente) }} |
|
|
No hay cuotas que coincidan con el filtro seleccionado Prueba cambiando el filtro de estado o el término de búsqueda. |
||||||
| Documento | Cliente | Emisión | Total Factura | Monto Abonado | Saldo Restante | Acciones |
|---|---|---|---|---|---|---|
|
{{ f.doc_type || 'FACTURA' }}
{{ f.serie_nombre }}-{{ String(f.numfactura).padStart(6, '0') }}
|
{{ f.cliente_nombre }} {{ f.cliente_dni }} |
{{ f.fecha }} | {{ formatMoney(f.total) }} | {{ formatMoney(f.total_pagado || 0) }} |
{{ formatMoney(parseFloat(f.total || 0) - parseFloat(f.total_pagado || 0)) }} |
|
| ¡Felicidades! No hay cuentas pendientes por cobrar. | ||||||
Gestión integral 360°, cuentas por cobrar, cuotas de financiamiento y catálogo de compras.
| Cliente / Razón Social | Contacto | Tarifa | Total Comprado | Saldo Deuda | Estatus | Acciones |
|---|---|---|---|---|---|---|
|
No se encontraron clientes coincidentes. |
||||||
|
{{ (cli.nombre || 'C').substring(0, 2).toUpperCase() }}
{{ cli.documento }}
JURÍDICA
|
{{ cli.telefono }}
{{ cli.email }}
📍
{{ cli.direccion }}
Sin contacto
|
{{ cli.tarifa_nombre || 'General' }} | ${{ Number(cli.total_comprado || 0).toFixed(2) }} |
${{ Number(cli.total_deuda || 0).toFixed(2) }}
{{ cli.total_cuotas_pendientes }} cuota(s) pend.
|
|
|
Doc: {{ selectedCliente.documento }} • Tel: {{ selectedCliente.telefono }} • {{ selectedCliente.email }} • 📍 {{ selectedCliente.direccion }}
Datos generales, canales de contacto y condiciones comerciales.
| Documento | Fecha | Sucursal | Neto | IVA | Total ($) | Pagado | Saldo | Estatus | Acciones |
|---|---|---|---|---|---|---|---|---|---|
| No hay documentos registrados para este cliente. | |||||||||
|
{{ doc.tipo_doc }}
{{ doc.serie }}-{{ doc.correlativo }}
|
{{ doc.fecha }} | {{ doc.sucursal || 'N/A' }} | ${{ Number(doc.neto || 0).toFixed(2) }} | ${{ Number(doc.iva || 0).toFixed(2) }} | ${{ Number(doc.total || 0).toFixed(2) }} | ${{ Number(doc.total_pagado || 0).toFixed(2) }} | ${{ Number(doc.saldo || 0).toFixed(2) }} | {{ parseInt(doc.estatus) === 2 ? 'Anulado' : (parseFloat(doc.saldo || 0) <= 0.01 ? 'Pagado' : 'Pendiente') }} |
|
| Cuota / Detalle | Documento Origen | Vencimiento | Monto Cuota | Monto Pagado | Saldo Restante | Estatus | Acción |
|---|---|---|---|---|---|---|---|
| No se registran cuotas en este criterio. | |||||||
| {{ c.descripcion || ('Cuota #' + c.id) }} |
{{ c.origen_tipo }}
{{ c.serie }}-{{ c.correlativo }}
|
{{ c.fecha_vencimiento }} | ${{ Number(c.monto).toFixed(2) }} | ${{ Number(c.pagado || 0).toFixed(2) }} | ${{ Number(c.saldo).toFixed(2) }} | {{ c.estado_label }} | Saldada |
| Producto / Descripción | IMEIs / Seriales | Cant. | Precio Unit. | Desc. | Total ($) | Documento | Fecha |
|---|---|---|---|---|---|---|---|
| No se registran artículos adquiridos en este historial. | |||||||
|
{{ art.nombre }} {{ art.codigo }} |
{{ art.seriales }}
Sin serial
|
{{ Number(art.cantidad) }} | ${{ Number(art.precio).toFixed(2) }} | ${{ Number(art.descuento || 0).toFixed(2) }} | ${{ Number(art.total).toFixed(2) }} |
{{ art.doc_tipo }}
{{ art.serie }}-{{ art.correlativo }}
|
{{ art.fecha }} |
Análisis cronológico (Días, Meses, Años) y desglose por Clientes con márgenes y rentabilidad.
| Período / Fecha | Docs | Unidades | Costo Total | Venta Total | Utilidad | Margen % | Acumulado Progresivo |
|---|---|---|---|---|---|---|---|
| No se encontraron operaciones de venta con los filtros seleccionados. | |||||||
| {{ fila.periodo_label }} | {{ fila.total_docs }} | {{ formatNumber(fila.total_items, 0) }} | ${{ formatNumber(fila.total_costo) }} | ${{ formatNumber(fila.total_venta) }} | ${{ formatNumber(fila.ganancia) }} | {{ formatNumber(fila.margen_porcentaje, 1) }}% | ${{ formatNumber(fila.acumulado_venta) }} |
| Totales Generales | {{ reporteResumen.total_docs }} | {{ formatNumber(reporteResumen.total_items, 0) }} | ${{ formatNumber(reporteResumen.total_costo) }} | ${{ formatNumber(reporteResumen.total_venta) }} | ${{ formatNumber(reporteResumen.total_ganancia) }} | {{ formatNumber(reporteResumen.margen_promedio, 1) }}% | ${{ formatNumber(reporteResumen.total_venta) }} |
| Fecha / Hora | Documento | Cliente | Emitido Por | Motivo de Anulación / Observaciones | Monto ($) |
|---|---|---|---|---|---|
| {{ a.fecha }} | {{ a.tipo_documento }} #{{ a.correlativo }} |
{{ a.cliente_nombre }}
{{ a.cliente_dni }}
|
{{ a.usuario }} | {{ a.observaciones || 'Sin observación registrada' }} | ${{ formatNumber(a.total) }} |
| # | Cliente / Razón Social | Cédula / RIF | Docs | Unidades | Costo | Venta Total | Utilidad | Margen % | Última Compra |
|---|---|---|---|---|---|---|---|---|---|
| No se encontraron clientes con operaciones para este rango o búsqueda. | |||||||||
| {{ idx + 1 }} | {{ cli.cliente_nombre }} | {{ cli.cliente_dni || '—' }} | {{ cli.total_docs }} | {{ formatNumber(cli.total_items, 0) }} | ${{ formatNumber(cli.total_costo) }} | ${{ formatNumber(cli.total_venta) }} | ${{ formatNumber(cli.ganancia) }} | {{ formatNumber(cli.margen_porcentaje, 1) }}% | {{ cli.ultima_venta ? formatDate(cli.ultima_venta) : '—' }} |
| # | Código | Descripción del Producto | Categoría | Cant. Vendida | Docs | Costo Total | Venta Total | Utilidad | Margen % | Última Venta |
|---|---|---|---|---|---|---|---|---|---|---|
| No se encontraron productos con operaciones para este rango o búsqueda. | ||||||||||
| {{ idx + 1 }} | {{ pro.pro_codigo }} | {{ pro.pro_descripcion }} | {{ pro.categoria }} | {{ formatNumber(pro.total_cant, 0) }} | {{ pro.total_docs }} | ${{ formatNumber(pro.total_costo) }} | ${{ formatNumber(pro.total_venta) }} | ${{ formatNumber(pro.ganancia) }} | {{ formatNumber(pro.margen_porcentaje, 1) }}% | {{ pro.ultima_venta ? formatDate(pro.ultima_venta) : '—' }} |
Control de ingresos, egresos, saldos de cuentas y traspasos.
Costo total de mercancía en almacén
Ingresos si se vende todo al precio base
Diferencia entre valor proyectado e invertido
| ID | Fecha | Cuenta Afectada | Categoría | Concepto | Monto | Estatus | Acciones |
|---|---|---|---|---|---|---|---|
| #{{ mov.fab_id }} | {{ mov.fab_fecha }} |
Nota de Crédito / Saldo Favor
Crédito en Cuenta (No Monetario Directo)
Trade-In (Equipo Usado)
Valoración de Equipo Recibido
{{ mov.cuenta_nombre || 'N/A' }}
{{ mov.banco_nombre }}
|
{{ mov.categoria_nombre || (mov.fab_modulo === 'Cobranza Saldo a Favor' ? 'Aplicación Saldo Favor' : (mov.fab_modulo === 'Trade-In' ? 'Trade-In' : 'Venta')) }} | {{ mov.fab_observacion || mov.fab_descripcion }} | {{ mov.div_simbolo }} {{ formatMoney(mov.fab_monto) }} | ||
| No se encontraron ingresos para estos filtros. | |||||||
| Total Mostrado: | ${{ formatMoney(movimientosTotales) }} | ||||||
| ID | Fecha | Cuenta Afectada | Categoría | Concepto | Monto | Estatus | Acciones |
|---|---|---|---|---|---|---|---|
| #{{ mov.fab_id }} | {{ mov.fab_fecha }} |
{{ mov.cuenta_nombre || 'N/A' }}
{{ mov.banco_nombre }}
|
{{ mov.categoria_nombre || 'Sin Categoría' }} | {{ mov.fab_observacion || mov.fab_descripcion }} | {{ mov.div_simbolo }} {{ formatMoney(mov.fab_monto) }} | ||
| No se encontraron egresos para estos filtros. | |||||||
| Total Mostrado: | ${{ formatMoney(movimientosTotales) }} | ||||||
| ID | Fecha | Concepto | Origen | → | Destino | Monto | Estatus |
|---|---|---|---|---|---|---|---|
| #{{ t.id }} | {{ t.fecha }} | {{ t.concepto || 'Traspaso interno' }} |
{{ t.cuenta_origen_nombre || '—' }}
{{ t.banco_origen }}
{{ t.metodo_origen }}
|
{{ t.cuenta_destino_nombre || '—' }}
{{ t.banco_destino }}
{{ t.metodo_destino }}
|
{{ t.simbolo_origen }} {{ parseFloat(t.monto_origen || 0).toLocaleString('de-DE', {minimumFractionDigits:2}) }}
{{ t.simbolo_destino }} {{ parseFloat(t.monto_destino || 0).toLocaleString('de-DE', {minimumFractionDigits:2}) }}
|
||
| No se encontraron traspasos para estos filtros. | |||||||
| {{ cfgTraspasos.length }} traspaso(s) | {{ cfgTraspasos[0]?.simbolo_origen || '$' }} {{ cfgTraspasos.reduce((s,t) => s + parseFloat(t.monto_origen||0), 0).toLocaleString('de-DE',{minimumFractionDigits:2}) }} | ||||||
| Fecha / Hora | Ref / Doc | Descripción de la Cuenta | Debe (Ingreso) | Haber (Egreso) |
|---|---|---|---|---|
| {{ mov.fab_fecha }} | #{{ mov.fab_id }} |
{{ mov.cuenta_nombre || 'Cuenta N/A' }}
{{ mov.fab_observacion || mov.fab_descripcion }}
|
{{ mov.div_simbolo }} {{ formatMoney(mov.fab_monto) }} | {{ mov.div_simbolo }} {{ formatMoney(Math.abs(mov.fab_monto)) }} |
| No hay movimientos contables en este período. | ||||
Conciliación cronológica entre fechas, consolidado diario y saldo progresivo continuo.
Seleccione una cuenta bancaria o caja para consultar su estado de cuenta.
Podrá ver el resumen de saldos, el consolidado de cada día y el historial ordenado de movimientos.
| # | Banco / Cuenta / Caja | Moneda | Saldo Apertura | Ingresos (+) | Egresos (-) | Saldo Cierre | Movs |
|---|---|---|---|---|---|---|---|
| {{ idx + 1 }} |
{{ item.cuenta?.bc_alias }}
{{ item.cuenta?.banco_nombre ? item.cuenta?.banco_nombre + ' • ' : '' }}{{ item.cuenta?.bc_cuenta || 'Caja / Efectivo' }}
|
{{ item.cuenta?.div_simbolo || '$' }} | ${{ formatNumber(item.saldo_inicial) }} | {{ item.total_ingresos > 0 ? '+$' + formatNumber(item.total_ingresos) : '—' }} | {{ item.total_egresos > 0 ? '-$' + formatNumber(item.total_egresos) : '—' }} | ${{ formatNumber(item.saldo_final) }} | {{ (item.movimientos || []).length }} |
| Totales Globales Consolidados | ${{ formatNumber(estadoCuentaData.resumen?.saldo_inicial || 0) }} | +${{ formatNumber(estadoCuentaData.resumen?.total_ingresos || 0) }} | -${{ formatNumber(estadoCuentaData.resumen?.total_egresos || 0) }} | ${{ formatNumber(estadoCuentaData.resumen?.saldo_final || 0) }} | {{ estadoCuentaData.resumen?.total_movs || 0 }} | ||
| # ID | Fecha & Hora | Concepto / Descripción | Categoría | Débito (-) | Crédito (+) | Saldo Progresivo |
|---|---|---|---|---|---|---|
| Sin movimientos registrados en esta cuenta para el período seleccionado. | ||||||
| — | {{ estadoCuentaFiltros.f_desde }} | SALDO ANTERIOR AL INICIO DEL PERÍODO | ${{ formatNumber(item.saldo_inicial) }} | |||
| #{{ m.id }} | {{ m.fecha_corta }} |
{{ m.descripcion }}
{{ m.observacion }}
|
{{ m.categoria }} | {{ m.debito > 0 ? '-$' + formatNumber(m.debito) : '—' }} | {{ m.credito > 0 ? '+$' + formatNumber(m.credito) : '—' }} | ${{ formatNumber(m.saldo_resultante) }} |
| Fecha | Saldo Apertura | Ingresos (+) | Egresos (-) | Saldo Cierre | Operaciones |
|---|---|---|---|---|---|
| No se registraron movimientos en la cuenta para el rango de fechas seleccionado. | |||||
| {{ d.dia_nombre }} | ${{ formatNumber(d.saldo_inicial) }} | {{ d.ingresos > 0 ? '+$' + formatNumber(d.ingresos) : '—' }} | {{ d.egresos > 0 ? '-$' + formatNumber(d.egresos) : '—' }} | ${{ formatNumber(d.saldo_final) }} | {{ d.total_ops }} ops |
| # ID | Fecha & Hora | Concepto / Descripción | Categoría | Débito (-) | Crédito (+) | Saldo Progresivo |
|---|---|---|---|---|---|---|
| No hay transacciones registradas en este período. | ||||||
| — | {{ estadoCuentaFiltros.f_desde }} | SALDO ANTERIOR AL INICIO DEL PERÍODO | ${{ formatNumber(estadoCuentaData.resumen?.saldo_inicial || 0) }} | |||
| #{{ m.id }} | {{ m.fecha_corta }} |
{{ m.descripcion }}
{{ m.observacion }}
|
{{ m.categoria }} | {{ m.debito > 0 ? '-$' + formatNumber(m.debito) : '—' }} | {{ m.credito > 0 ? '+$' + formatNumber(m.credito) : '—' }} | ${{ formatNumber(m.saldo_resultante) }} |
| Totales Período | -${{ formatNumber(estadoCuentaData.resumen?.total_egresos || 0) }} | +${{ formatNumber(estadoCuentaData.resumen?.total_ingresos || 0) }} | ${{ formatNumber(estadoCuentaData.resumen?.saldo_final || 0) }} | |||
⚠️ Sin cuentas para este método en {{ getDivisaSimbolo(currentItem.divisa_id) }}. Asigne en Configuración.
Sale de (Origen)
Cargando métodos...
Entra a (Destino)
Pagas con (Sale de tu caja/cuenta)
Recibes en (Entra a tu caja/cuenta)
Gestión de turnos, arqueos y control de efectivo.
Gestión de órdenes de reparación, reacondicionamiento y atención al cliente.
Registra una nueva orden de servicio o ajusta los filtros de búsqueda.
{{ orden.falla }}
Selecciona un teléfono del inventario para iniciar su proceso de reacondicionamiento técnico.
Carga repuestos a cada IMEI para actualizar su costo compuesto real antes de ponerlo a la venta.
No hay teléfonos propios en taller en este momento.
| Código / Orden | Equipo / Modelo | IMEI / Serial | Técnico Asignado | Inversión en Piezas | Estado | Acciones |
|---|---|---|---|---|---|---|
| {{ ord.codigo }} | {{ ord.equipo_nombre }} | {{ ord.imei || 'Sin IMEI' }} | {{ ord.tecnico_nombre }} | ${{ parseFloat(ord.costo_total || 0).toFixed(2) }} {{ ord.total_repuestos }} repuestos | {{ ord.estatus_nombre }} |
|
Auditoría completa de equipos reparados, piezas utilizadas e impacto financiero.
No hay registros en el historial todavía.
| Código | Tipo | Equipo / Modelo | IMEI | Cliente / Destino | Técnico | Inversión Repuestos | Facturado / Cobrado | Estado | Acciones |
|---|---|---|---|---|---|---|---|---|---|
| {{ ord.codigo }} | {{ ord.tipo == 2 ? 'Stock' : 'Cliente' }} | {{ ord.equipo_nombre }} | {{ ord.imei || '—' }} | {{ ord.cliente_nombre }} | {{ ord.tecnico_nombre }} | ${{ parseFloat(ord.costo_total || 0).toFixed(2) }} | {{ ord.tipo == 1 ? '$' + parseFloat(ord.precio_total || 0).toFixed(2) : 'Stock Vendible' }} | {{ ord.estatus_nombre }} |
|
Configura las etapas por las que transita una orden de reparación técnica.
| ID | Nombre del Estado | Color / Badge | Activo | Acciones |
|---|---|---|---|---|
| {{ st.id }} | {{ st.nombre }} |
{{ st.nombre }}
|
{{ st.activo == 1 ? 'Activo' : 'Inactivo' }} |
|
Gestión omnicanal centralizada de líneas de WhatsApp para atención y ventas.
No se encontraron conversaciones con estos filtros.
Tú: {{ conv.ultimo_mensaje || 'Conversación activa' }}
No hay mensajes en esta conversación.
{{ msg.contenido }}
{{ msg.adjunto_nombre || getFileName(msg.adjunto_url) }}
Documento Adjunto{{ msg.contenido }}
{{ selectedAttachment.name }}
{{ (selectedAttachment.size / 1024).toFixed(1) }} KBElige un chat de la lista izquierda o inicia uno nuevo para comenzar a responder.
Administra los números de WhatsApp asociados al sistema para recepción y envío omnicanal.
| Nombre de Línea | Número Conectado | Identificador Único (Unique ID) | Mensajes No Leídos | Estado | Acciones |
|---|---|---|---|---|---|
| No hay líneas de WhatsApp registradas. | |||||
| {{ c.nombre }} | +{{ c.numero }} | {{ c.unique_id }} | {{ c.unread_count }} — | {{ c.estado }} |
|
Configura atajos de texto (/hola, /pagos, /sat) para agilizar la atención de tus asesores de ventas.
No hay respuestas rápidas configuradas aún.
Ingresa solo tu correo y contraseña de WapiSMS. El ERP se conectará vía API, obtendrá automáticamente tu Secret Key y sincronizará tus líneas de WhatsApp.
Todos los parámetros se almacenan y gestionan directamente en la tabla wa_config de la base de datos.
Este endpoint procesa en tiempo real los mensajes entrantes (`message:received`), salientes y estados de entrega utilizando el secret configurado en la base de datos.
Gestión de cuentas, roles de acceso y matriz de permisos por módulo.
Sin usuarios registrados
Haz clic en "Nuevo Usuario" para crear la primera cuenta.
@{{ u.username }}
Configura el rol, accesos y permisos permitidos.
Configuración individual o clonación desde otro usuario
Este usuario tiene acceso total automático a todos los módulos y funciones del ERP. No requiere marcar permisos individuales.
Gestiona tu información personal y seguridad.
{{ userData?.tipo }}
Tus datos de contacto y perfil dentro de la empresa.
Actualiza tu clave de acceso al sistema.
Añade una capa extra de seguridad usando Google Authenticator.
Por seguridad, ingresa tu contraseña actual para continuar.
{{ userData?.nombre }} ({{ userData?.tipo }})
{{ confirmMessage || '¿Deseas confirmar y procesar esta acción en el sistema?' }}
Reversión segura de existencias, seriales y saldos contables.
Configura el rol, accesos y permisos permitidos.
Configuración individual o clonación desde otro usuario
Este usuario tiene acceso total automático a todos los módulos y funciones del ERP. No requiere marcar permisos individuales.
Gestión integral del catálogo
Crea atributos (ej. Color) y asígnales valores (ej. Rojo, Azul).
Haz clic en un atributo de la lista izquierda para administrar sus posibles valores.
Stock actual, costos, PVP y seriales/IMEIs por categoría.
Si no selecciona ninguna categoría, se incluirán todas por defecto.
Gestión de abonos sincronizados con Tesorería y Cuentas Bancarias
| ID | # Referencia | Método / Divisa | Cuenta / Caja | Tasa (Bs/$) | Monto Original | Monto USD ($) | Fecha | |
|---|---|---|---|---|---|---|---|---|
| No se han registrado abonos anteriores para esta factura. | ||||||||
| #{{ p.id }} | {{ p.referencia || 'S/R' }} | {{ p.metodo_nombre || 'Pago' }} {{ p.divisa_nombre }} ({{ p.divisa_simbolo }}) | {{ p.cuenta_alias || 'Caja' }} {{ p.banco_nombre }} | {{ parseFloat(p.factor) > 1 ? formatMoney(p.factor) : '1.00' }} | {{ p.divisa_simbolo || '$' }} {{ formatMoney(p.monto) }} | ${{ formatMoney(p.conversion || p.monto) }} | {{ p.fecha }} Anulado | |
⚠️ Sin cuentas para este método en {{ getDivisaSimbolo(currentItem.divisa_id) }}. Asigne en Configuración.
Sale de (Origen)
Cargando métodos...
Entra a (Destino)
Pagas con (Sale de tu caja/cuenta)
Recibes en (Entra a tu caja/cuenta)
Turno #{{ currentItem.sesion_id }}
Esto revertirá el cierre Z del turno.
Queda registrado en el log de movimientos para auditoría.
Asigna la caja y el cajero responsable
Caja: {{ detalleCierreCabecera.caja_codigo || '' }} - {{ detalleCierreCabecera.caja_nombre }} • Cajero: {{ detalleCierreCabecera.cajero }}
Caja: {{ currentItem.caja_codigo || '' }} - {{ currentItem.caja_nombre }} • Cajero: {{ currentItem.cajero }} • Turno #{{ currentItem.sesion_id }}
{{ docImpresionInfo?.doc?.tipo }} #{{ docImpresionInfo?.doc?.serie }}-{{ docImpresionInfo?.doc?.correlativo }} • Cliente: {{ docImpresionInfo?.doc?.cliente }} • Total: $ {{ Number(docImpresionInfo?.doc?.total || 0).toFixed(2) }}
Formato vertical estándar. Ideal para clientes corporativos y archivo contable.
Formato condensado media carta. Ahorra 50% de papel en mostrador.
Con plan de financiamiento (cuotas), abonos, cuentas bancarias y saldo.
Formato para entregar al cliente con historial de abonos y cuotas, sin cuentas bancarias.
Productos adquiridos (sin precios unitarios) con cronograma de cuotas y firmas de compromiso.
Active sus credenciales de WhatsApp en el módulo de WhatsApp para habilitar el envío automático de facturas y notas de entrega a sus clientes.
Asigna el monto de compra a productos en $0 y descuenta ese importe de la línea de mayor valor.
Buscando ventas con productos en $0.00...
No se encontraron facturas ni notas de entrega con artículos en monto $0.00{{ fechaFiltroRegularizar ? ' para la fecha seleccionada' : '' }}.
{{ ordenForm.tipo == 2 ? 'Reacondicionamiento de inventario de tienda' : 'Servicio técnico a cliente particular' }}
Asignación de repuestos del inventario y control de costo compuesto.
| Descripción | Cant. | Costo Unit. | Total Costo | Acción |
|---|---|---|---|---|
| Aún no se han asignado repuestos a esta orden. | ||||
| {{ r.sd_descripcion }} | {{ r.sd_cantidad }} | ${{ parseFloat(r.sd_costo).toFixed(2) }} | ${{ (parseFloat(r.sd_costo) * parseFloat(r.sd_cantidad)).toFixed(2) }} | |
| Mano de Obra: | ${{ parseFloat(currentOrden.sm_mano_obra || 0).toFixed(2) }} | |||
| Total Presupuesto Cliente: | ${{ parseFloat(currentOrden.sm_presupuesto || currentOrden.sm_precio_total || 0).toFixed(2) }} | |||
Trazabilidad completa, repuestos aplicados y bitácora de estados.
{{ h.sed_nota }}
Por: {{ h.empleado_nombre }}Devolver el equipo a stock activo con su costo compuesto.
Taller Especializado & SAT
{{ currentOrden.sm_descripcion }}
Conserve este comprobante para el retiro del equipo.
La garantía cubre exclusivamente la mano de obra y repuestos instalados.
Equipos no retirados pasados 90 días entran a disposición de almacenaje legal.
Escribe a un cliente registrado en el ERP o a un nuevo número.
Emparejamiento oficial mediante WapiSMS Gateway
Generando sesión con WapiSMS...
Obteniendo enlace seguro de WhatsApp
Pasos para vincular:
+{{ cuentaForm.numero }}
Guardando y sincronizando con el ERP...
Por seguridad, los códigos QR de WhatsApp se invalidan al minuto.
No se pudo obtener el código QR
Verifica que el Secret de WapiSMS esté configurado correctamente.
Cuentas vinculadas en WapiSMS Gateway
Si ya vinculaste una línea en el panel de WapiSMS, puedes importarla directamente al ERP.
{{ gw.phone }}
ID: {{ gw.unique }}
{{ gw.status === 'connected' ? 'Conectado' : 'Desconectado' }}Audio / Nota de Voz de WhatsApp
Este tipo de documento se puede descargar para abrir en tu equipo.
Registra los datos del cliente para este chat y vincúlalo al ERP.