logo

Bienvenido(a)

Panel de Control de Tengo Hambre

{{ loginError }}

¿Aún no tienes cuenta? Registrate

Notificaciones {{ notifs.unreadCount }} nuevas

No tienes notificaciones recientes.

{{ n.title }}

{{ notifs.getTimeElapsed(n.time) }}

{{ n.message }}

{{ username ? username.charAt(0).toUpperCase() : 'A' }}

Dashboard Global

Visión general del estado de la plataforma SaaS y ganancias

Mostrando: {{ saas.kpiDateFrom.value }} → {{ saas.kpiDateTo.value }}

Comisiones Hoy Comisiones {{ saas.kpiDateFrom.value }} → {{ saas.kpiDateTo.value }}

${{ saas.kpiRangeApplied.value ? saas.kpiRangeStats.value.totalCommissions.toFixed(2) : (saas.dashboardStats.value.kpis?.todayProfits || 0) }}

Ingreso plataforma hoy Ingreso plataforma en el periodo

Pedidos Hoy Pedidos {{ saas.kpiDateFrom.value }} → {{ saas.kpiDateTo.value }}

{{ saas.kpiRangeApplied.value ? saas.kpiRangeStats.value.totalOrders : (saas.dashboardStats.value.kpis?.todayOrders || 0) }}

Volumen plataforma Volumen en el periodo

Deuda Total Pendiente Deuda Generada {{ saas.kpiDateFrom.value }} → {{ saas.kpiDateTo.value }}

${{ saas.kpiRangeApplied.value ? saas.kpiRangeStats.value.totalDebt.toFixed(2) : (saas.dashboardStats.value.kpis?.totalDebt || 0) }}

Por cobrar a negocios (total acumulado) Comisiones generadas en el periodo

Visitas Hoy

{{ saas.dashboardStats.value.kpis?.todayVisits || 0 }}

Tráfico usuarios hoy

Base de Negocios

{{ saas.dashboardStats.value.kpis?.totalBusinesses || 0 }} Registrados

Estatus Operativo

{{ saas.dashboardStats.value.kpis?.activeBusinesses || 0 }} Negocios Activos

Gráficos de Actividad

Periodo:

Visitas Generales por Día

Ganancias por Comisiones (MXN)

Últimas Ventas Globales

Ventas de todos los negocios en la plataforma

Total Pedidos

{{ saas.globalOrdersKpis.value.totalOrders.toLocaleString() }}

Venta Total

${{ (saas.globalOrdersKpis.value.totalRevenue || 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}

Comisiones

${{ (saas.globalOrdersKpis.value.totalCommissions || 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}

Cargando ventas...

No hay ventas que mostrar

Ajusta los filtros o espera nuevas órdenes

Folio Negocio Fecha Cliente Canal Método Total Estado Acción
#{{ ord._id.slice(-6).toUpperCase() }}
{{ (ord.businessId?.name || '?')[0].toUpperCase() }}

{{ ord.businessId?.name || 'N/A' }}

/menu/{{ ord.businessId?.slug || '—' }}

{{ new Date(ord.createdAt).toLocaleDateString('es-MX', {day:'2-digit', month:'short'}) }}
{{ new Date(ord.createdAt).toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}) }}
{{ ord.customerId ? ord.customerId.name : (ord.customerName || 'Mostrador') }}
{{ ord.customerPhone }}
{{ ord.source === 'pos' ? 'POS' : 'Web' }} 🏍 {{ ord.paymentMethod || '—' }} ${{ (ord.total || 0).toFixed(2) }}
+${{ ord.deliveryCost.toFixed(2) }} envío
{{ { completed:'Completado', cancelled:'Cancelado', pending:'Pendiente', preparing:'Preparando', ready:'Listo' }[ord.status] || ord.status }} —
Página {{ saas.globalOrdersPagination.value.page }} de {{ saas.globalOrdersPagination.value.pages }} — {{ saas.globalOrdersPagination.value.total.toLocaleString() }} ventas en total
...

Gestión de Negocios

Administra clientes, planes y comisiones SaaS

Total Negocios

{{ businesses.length }}

Activos

{{ businesses.filter(b => b.active).length }}

Total Ventas Plataforma

${{ businesses.reduce((s,b) => s + (b.totalRevenue || 0), 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}

{{ businesses.reduce((s,b) => s + (b.totalOrders || 0), 0) }} pedidos en total

Deuda Total Pendiente

${{ businesses.reduce((s,b) => s + (b.commissionDebt || 0), 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}

Negocio URL Slug Plan Estado Total Ventas Deuda Comisión Acciones
{{ biz.name }}
{{ biz.ownerEmail }}
/menu/{{ biz.slug }} {{ biz.plan }}
${{ (biz.totalRevenue || 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }} {{ biz.totalOrders || 0 }} pedidos
${{ (biz.commissionDebt || 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}

Ranking de Restaurantes

Clasificación oficial por volumen de pedidos y facturación generada

Líder del Mes

{{ dashboardStats.ranking?.[0]?.name || '---' }}

{{ dashboardStats.ranking?.[0]?.orderCount || 0 }} pedidos registrados

Total Pedidos en Ranking

{{ (dashboardStats.ranking || []).reduce((s, r) => s + (r.orderCount || 0), 0) }}

En {{ dashboardStats.ranking?.length || 0 }} restaurantes registrados

Facturación Total

${{ ((dashboardStats.ranking || []).reduce((s, r) => s + (r.totalRevenue || 0), 0)).toLocaleString('en-US', {minimumFractionDigits: 2}) }}

Acumulado en este periodo

Tabla de Posiciones

Mostrando {{ (dashboardStats.ranking || []).filter(b => !rankingSearchQuery || b.name.toLowerCase().includes(rankingSearchQuery.toLowerCase()) || b.slug.toLowerCase().includes(rankingSearchQuery.toLowerCase())).length }} restaurantes

Cargando posiciones...

No hay datos para mostrar.

1 2 3 #{{ idx + 1 }}

{{ biz.name }}

Bloqueado

/{{ biz.slug }}

{{ biz.orderCount }} {{ biz.orderCount === 1 ? 'pedido' : 'pedidos' }}

Ventas: ${{ (biz.totalRevenue || 0).toLocaleString('en-US', {minimumFractionDigits: 2}) }}

Usuarios Frecuentes

Historial y frecuencia de compra de clientes de la plataforma por número telefónico

Clientes Identificados

{{ saas.frequentCustomersStats.value.total || 0 }}

Con número telefónico registrado

Clientes Nuevos (1 pedido)

{{ saas.frequentCustomersStats.value.newCount || 0 }}

Realizaron su primera compra

Con 5 Pedidos

{{ saas.frequentCustomersStats.value.twoOrdersCount || 0 }}

Registraron recompra inicial

Clientes Frecuentes (10+)

{{ saas.frequentCustomersStats.value.frequentCount || 0 }}

Clientes con alta recurrencia

Cliente (Teléfono / Nombre) Clasificación Cant. Pedidos Negocios Frecuentados Última Compra Total Gastado Acciones
Cargando usuarios frecuentes...
No se encontraron usuarios frecuentes.
{{ cust.name || 'Cliente sin nombre' }}
{{ cust.phone }}
{{ cust.orderCount <= 5 ? 'Cliente Nuevo' : cust.orderCount >= 5 && cust.orderCount < 10 ? '+5 pedidos' : 'Cliente Frecuente' }} {{ cust.orderCount }}
logo {{ biz.name }}
{{ new Date(cust.lastOrderDate).toLocaleDateString('es-ES') }} ${{ (cust.totalSpent || 0).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}
Página {{ saas.frequentCustomersPagination.value.page }} de {{ saas.frequentCustomersPagination.value.pages }} — {{ saas.frequentCustomersPagination.value.total }} registros

Mi Billetera

Control de pagos, dispersiones y comisiones de todos los negocios.

Total Cobrado

${{ saas.dispersionPeriodKpis.value.totalCobrado.toLocaleString('en-US',{minimumFractionDigits:2}) }}

Pagos con tarjeta en el periodo

Comisión Tengo Hambre

${{ saas.dispersionPeriodKpis.value.commissionTH.toLocaleString('en-US',{minimumFractionDigits:2}) }}

Comisión generada en el periodo

Comisión Stripe

${{ saas.dispersionPeriodKpis.value.commissionStripe.toLocaleString('en-US',{minimumFractionDigits:2}) }}

Comisión de Stripe en el periodo

Total a Dispersar

${{ saas.dispersionPeriodKpis.value.totalToDisperse.toLocaleString('en-US',{minimumFractionDigits:2}) }}

Monto a dispersar a restaurantes

Detalle de dispersiones por día

Haz clic en el icono para ver el desglose por restaurante.

Periodo de análisis
al
Fecha Pedidos Total cobrado Comisión TH Comisión Stripe Monto a dispersar Estado Restaurantes Acción
Cargando dispersiones...

No hay cortes en el periodo seleccionado.

Ajusta las fechas del filtro o genera un nuevo corte.

Balance

Control de ventas, comisiones y balance de todos los restaurantes.

Ventas en efectivo

{{ saas.balanceMoney(saas.balanceKpis.value.cashSales) }}

Total del mes

Ventas con tarjeta

{{ saas.balanceMoney(saas.balanceKpis.value.cardSales) }}

Total del mes

Total de venta

{{ saas.balanceMoney(saas.balanceKpis.value.totalSales) }}

Total del mes

Total de pedidos

{{ (saas.balanceKpis.value.totalOrders || 0).toLocaleString('en-US') }}

Total del mes

Ganancia Teorica

{{ saas.balanceMoney(saas.balanceKpis.value.monthlyProfit) }}

Total ganado (Aún si falta cobrar)

En Bancos (Neto)

{{ saas.balanceMoney(saas.balanceKpis.value.realCashInBank) }}

Stripe retenido - Dispersiones

# Restaurante Ventas
Efectivo
Ventas
Tarjeta
Total de
Venta
Total de
Pedidos
Comisión
(5%)
$5
por pedido
Mantenimiento Deuda
Pendiente
Saldos
con tarjeta
Balance Estatus
Calculando balance...
No se encontraron restaurantes para este filtro.
{{ idx + 1 }} {{ stat.businessName }} {{ saas.balanceMoney(stat.cashSales) }} {{ saas.balanceMoney(stat.cardSales) }} {{ saas.balanceMoney((stat.cashSales || 0) + (stat.cardSales || 0)) }} {{ stat.totalOrders || 0 }} — — {{ saas.balanceMoney(stat.maintenance) }} {{ saas.balanceMoney(stat.totalFees) }} {{ saas.balanceMoney(stat.cardBalance) }}
{{ saas.balanceMoney(stat.balance) }}
{{ stat.balance > 0 ? 'Nos deben' : (stat.balance < 0 ? 'Debemos' : 'En 0') }}

Resumen {{ saas.balanceMonthLabel.value }}

Total efectivo

{{ saas.balanceMoney(saas.balanceKpis.value.cashSales) }}

Total tarjeta

{{ saas.balanceMoney(saas.balanceKpis.value.cardSales) }}

Total de venta

{{ saas.balanceMoney(saas.balanceKpis.value.totalSales) }}

Total de pedidos

{{ (saas.balanceKpis.value.totalOrders || 0).toLocaleString('en-US') }}

Total comisión (5%)

{{ saas.balanceMoney(saas.balanceKpis.value.commissionPercent) }}

Total $5 por pedido

{{ saas.balanceMoney(saas.balanceKpis.value.commissionFixed) }}

Total mantenimiento

{{ saas.balanceMoney(saas.balanceKpis.value.maintenance) }}

Total Fees

{{ saas.balanceMoney(saas.balanceKpis.value.totalFees) }}

Ganancia mensual

{{ saas.balanceMoney(saas.balanceKpis.value.monthlyProfit) }}

Total del mes

Catálogo de Municipios

Gestiona las zonas de cobertura disponibles para los negocios.

Nombre C.P. Ciudad Zona Costo Envío Estado Acciones
Cargando...
No hay municipios registrados.
{{ mun.name }} {{ mun.zipCode }} {{ mun.city }} {{ mun.zone || 'General' }} Gratis / Sin zonas Activa Inactiva

Categorías Globales (Marketplace)

Gestiona las categorías de comida disponibles para todos los negocios.

Categoría Estado Acciones
{{ cat.emoji }}

{{ cat.name }}

{{ cat._id }}

No se encontraron categorías

Intenta con otro término o crea una nueva.

Panel de Control

{{ kpi.value }}

{{ kpi.label }}

Ventas Última Semana

Más Vendidos

Aún no hay ventas

  • {{ prod.name }}

    {{ prod.salesCount }} vendidos

    ${{ prod.price }}

{{ prod.name }}

{{ prod.barcode || 'Sin código' }}

${{ prod.price }}
{{ prod.stock || '∞' }}

No se encontraron productos

{{ tab.name }}
{{ pos.activeTab.value.customer.name[0] }}
{{ pos.activeTab.value.customer ? pos.activeTab.value.customer.name : 'Mostrador' }} {{ pos.activeTab.value.customer.points }} Pts

Escanea productos

{{ item.name }}

${{ item.price }}/u

+{{ opt.name }} +{{ item.selectedOptions.length - 1 }}
${{ (item.price * item.qty).toFixed(2) }}
{{ item.qty }}
Subtotal ${{ pos.currentTotals.value.subtotal.toFixed(2) }}
Descuento -${{ pos.currentTotals.value.discountAmount.toFixed(2) }}
Comisión ({{ settings.commissionPosAmount }}{{ settings.commissionPosType === 'percent' ? '%' : '$' }}) +${{ pos.currentTotals.value.commissionAmount.toFixed(2) }}
IVA ({{ settings.iva }}%) ${{ pos.currentTotals.value.tax.toFixed(2) }}
Total ${{ pos.currentTotals.value.total.toFixed(2) }}

Programa de Lealtad

Configuración

Activar Programa

Escanear

Productos

Gestión de platillos y existencias

ImagenNombreStockOrdenPrecioCategoríasEstadoAcciones

Biblioteca de Medios

Gestiona imágenes y videos

No se encontraron archivos.

Categorías

Organiza tu menú en secciones

{{ cat.name }}

{{ cat.description || 'Sin descripción' }}

{{ cat.active ? 'Visible' : 'Oculta' }}

Complementos y Extras

Grupos de opciones

{{ addon.name }}

{{ addon.required ? 'Obligatorio' : 'Opcional' }}Max: {{ addon.maxOptions }}

Opciones ({{ addon.options.length }})

  • {{ opt.name }}+${{ opt.priceExtra }}Gratis

Publicidad Global

Promociones visibles en el menú y Froods

Banners

{{ banner.active ? 'ACTIVO' : 'INACTIVO' }}

{{ banner.title }}

{{ banner.description }}

No hay banners configurados

Froods (Reels)

{{ frood.active ? 'Activo' : 'Oculto' }}

{{ frood.title }}

{{ frood.description }}

No hay Froods (Reels) configurados

Historial de Ventas

Registro de todas las transacciones POS y Web

Folio Fecha Cliente Canal Método Total Estado Acción

Cargando detalles del pedido...

Orden #{{ orders.selectedOrder.value._id.slice(-6).toUpperCase() }} {{ orders.selectedOrder.value.status }}

{{ new Date(orders.selectedOrder.value.createdAt).toLocaleString() }}

Productos Adquiridos

Producto Cant. Precio U. Total

{{ item.name }}

+ {{ opt.name }} (${{ opt.price }})

{{ item.note }}

{{ item.quantity }} ${{ item.price.toFixed(2) }} ${{ ((item.price + (item.selectedOptions ? item.selectedOptions.reduce((a,b)=>a+(b.price||0),0) : 0)) * item.quantity).toFixed(2) }}

Información de Venta

Cliente

{{ orders.selectedOrder.value.customerName ? orders.selectedOrder.value.customerName : 'Venta Mostrador' }}

Telefono

{{ orders.selectedOrder.value.customerPhone ? orders.selectedOrder.value.customerPhone : 'S/N' }}

Calle y Numero

{{ orders.selectedOrder.value.customerStreet ? orders.selectedOrder.value.customerStreet : 'S/N' }} {{ orders.selectedOrder.value.customerNumber ? orders.selectedOrder.value.customerNumber : '' }}

Referencia

{{ orders.selectedOrder.value.customerReference ? orders.selectedOrder.value.customerReference : 'S/N' }}

Paga Con:

{{ orders.selectedOrder.value.customerHowToPay ? orders.selectedOrder.value.customerHowToPay : 'S/N' }}

Atendido por

{{ orders.selectedOrder.value.createdBy ? orders.selectedOrder.value.createdBy.username : 'Sistema' }}

Canal

{{ orders.selectedOrder.value.source }}

Pago

{{ orders.selectedOrder.value.paymentMethod }}

Resumen Financiero

Subtotal ${{ orders.selectedOrder.value.subtotal?.toFixed(2) || '0.00' }}
Descuentos -${{ orders.selectedOrder.value.discount?.toFixed(2) }}
Comisión ({{ orders.selectedOrder.value.commission.type === 'percent' ? '%' : '$' }}) ${{ orders.selectedOrder.value.commission.type === 'percent' ? orders.selectedOrder.value.subtotal?.toFixed(2) * orders.selectedOrder.value.commission.amount / 100 : orders.selectedOrder.value.commission.amount?.toFixed(2) }}
Costo de Envío {{ orders.selectedOrder.value.deliveryZone }} +${{ orders.selectedOrder.value.deliveryCost?.toFixed(2) }}
Comisión Tarjeta +${{ orders.selectedOrder.value.paymentFee?.toFixed(2) }}
IVA (16%) ${{ orders.selectedOrder.value.tax?.toFixed(2) || '0.00' }}
Total ${{ orders.selectedOrder.value.total.toFixed(2) }}

Cotizaciones

Folio Cliente Validez Total Status Acciones

{{ quotes.isEditing.value ? 'Editar' : 'Nueva' }} Cotización

{{ prod.name }}

${{ prod.price.toFixed(2) }}

No se encontraron productos
  • {{ user.name }}

    {{ user.phone }}

Producto Cant. Precio Total
{{ item.name }}
{{ item.qty }}
${{ item.price.toFixed(2) }} ${{ (item.price * item.qty).toFixed(2) }}
La cotización está vacía
Subtotal ${{ quotes.totals.value.subtotal.toFixed(2) }}
IVA ({{ settings.iva }}%) ${{ quotes.totals.value.tax.toFixed(2) }}
Desc. {{ quotes.form.discount.title ? `(${quotes.form.discount.title})` : '' }} -${{ quotes.totals.value.discount.toFixed(2) }}
Total ${{ quotes.totals.value.total.toFixed(2) }}

Control de Caja

Gestión de flujo de efectivo y cortes

La caja está cerrada

Debes realizar la apertura de caja para comenzar a registrar ventas y movimientos.

Efectivo en Caja

${{ finance.currentData.value.currentCashInDrawer.toFixed(2) }}

Incluye fondo inicial y movimientos

Tarjetas Crédito

${{ finance.currentData.value.salesSummary.credit_card.toFixed(2) }}

Tarjetas Dédito

${{ finance.currentData.value.salesSummary.debit_card.toFixed(2) }}

Ventas Totales

${{ finance.currentData.value.salesSummary.total.toFixed(2) }}

Movimientos de Caja

Info del Turno

  • Apertura: {{ new Date(finance.currentData.value.shift.startTime).toLocaleString() }}
  • Fondo Inicial: ${{ finance.currentData.value.shift.initialCash.toFixed(2) }}
  • Responsable: Admin

Bitácora de Movimientos

Tipo Monto Motivo Hora
Sin movimientos manuales registrados
{{ mov.type === 'in' ? 'Ingreso' : 'Retiro' }} ${{ mov.amount.toFixed(2) }} {{ mov.reason }} {{ new Date(mov.date).toLocaleTimeString() }}

Historial de Cortes

Fecha Cierre Responsable Ventas Totales Efectivo Esperado Efectivo Real Diferencia Acción
{{ new Date(h.endTime).toLocaleString() }} {{ h.closedBy ? h.closedBy.username : 'Admin' }} - ${{ h.finalCashExpected.toFixed(2) }} ${{ h.finalCashActual.toFixed(2) }} {{ h.difference >= 0 ? '+' : '' }}{{ h.difference.toFixed(2) }}

Mi Billetera

Consulta el historial de tus ventas, comisiones y pagos realizados por la plataforma.

Saldo disponible

$0.00

Listo para ser transferido

Saldo pendiente

${{ (saas.walletStats.value?.saldoPendiente || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Corte actual: {{ new Date().toLocaleDateString('es-MX', {day: '2-digit', month: 'short', year: 'numeric'}) }}

Pago estimado: {{ saas.walletStats.value?.nextPaymentDate ? saas.walletStats.value.nextPaymentDate.toLocaleDateString('es-MX', {day: '2-digit', month: 'short', year: 'numeric'}) : 'Pronto' }}

Ventas totales

${{ (saas.walletStats.value?.ventasTotales || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

{{ saas.walletStats.value?.pedidos || 0 }} pedidos

+18% vs. periodo anterior

Comisión plataforma

${{ (saas.walletStats.value?.comisionPlataforma || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Comisiones cobradas

Sin comisión

Resumen del periodo

Ventas totales

${{ (saas.walletStats.value?.ventasTotales || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Pedidos

{{ saas.walletStats.value?.pedidos || 0 }}

Comisión plataforma

${{ (saas.walletStats.value?.comisionPlataforma || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Pagos ya entregados

${{ (saas.walletStats.value?.pagosEntregados || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Monto a recibir

${{ (saas.walletStats.value?.montoARecibir || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Pago pendiente

Tu próximo pago se realizará el {{ saas.walletStats.value?.nextPaymentDate ? saas.walletStats.value.nextPaymentDate.toLocaleDateString('es-MX', {day: 'numeric', month: 'long', year: 'numeric'}) : 'Pronto' }}.

Monto:

${{ (saas.walletStats.value?.montoARecibir || 0).toLocaleString('en-US', {minimumFractionDigits:2}) }}

Movimientos

ID / Fecha de Corte Periodo Ventas Totales Comisión Plataforma Monto a Recibir Estatus
Cargando movimientos...
No se encontraron movimientos para los filtros seleccionados.
{{ disp._id.slice(-6).toUpperCase() }}
{{ new Date(disp.createdAt).toLocaleDateString() }}
{{ new Date(disp.periodStart).toLocaleDateString() }} - {{ new Date(disp.periodEnd).toLocaleDateString() }} ${{ disp.totalSales.toLocaleString('en-US', {minimumFractionDigits:2}) }} -${{ disp.commissionTotal.toLocaleString('en-US', {minimumFractionDigits:2}) }} ${{ disp.netToPay.toLocaleString('en-US', {minimumFractionDigits:2}) }} PAGADO PENDIENTE

Base de Usuarios

Clientes registrados en lealtad

Cliente Teléfono Puntos Visitas Última Visita Acciones

{{ users.selectedUser.value?.name }} Activo

ID: {{ users.selectedUser.value?._id }}

Compras

{{ users.selectedUserStats.value?.totalOrders || 0 }}

Visitas App

{{ users.selectedUserStats.value?.totalVisits || 0 }}

Gasto Total

${{ (users.selectedUserStats.value?.totalSpent || 0).toFixed(2) }}

Últimas Compras

Este usuario aún no ha realizado compras.

Orden #{{ order._id.slice(-6).toUpperCase() }}

{{ new Date(order.createdAt).toLocaleDateString() }} • {{ new Date(order.createdAt).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}) }}

${{ order.total.toFixed(2) }}

{{ order.status }}

Datos Básicos

{{ users.selectedUser.value?.name[0] }}

{{ users.selectedUser.value?.name }}

Cliente Lealtad

{{ users.selectedUser.value?.phone }}

{{ users.selectedUser.value?.points }} pts

Facturación

PRÓXIMAMENTE

Aquí podrás gestionar los datos fiscales del cliente para facturación automática.

Notas Internas

Configuración del Negocio

Administra tu perfil, categorías y zonas de entrega.

Información

GPS fijado

Escribe y selecciona una sugerencia para fijar las coordenadas.

Tipos de Servicio

Puedes activar ambas opciones. Los cambios se guardan al presionar "Guardar Cambios".

Métodos de Pago

Debes mantener al menos un método de pago habilitado.

Requiere tener la app QZ Tray abierta en tu computadora.

Impresora de Tickets

Si utilizas el Punto de Venta desde una PC (Windows/Mac), necesitas descargar e instalar QZ Tray. Esta aplicación permite al navegador comunicarse con tu impresora térmica local.

Descargar QZ Tray (Gratis)

Asegúrate de tener la app abierta en tu PC antes de imprimir. Las tablets Android con cable OTG no requieren esta app.

Tiempos y Entrega

Configura los Tiempos y costos de entrega.

Ej: 30-45 min

Horarios de Atención

Gestiona tu hora de apertura y cierre por día de la semana.

{{ day.day }}
-

Cobertura (Municipio)

{{settings.municipioId ? '1 Municipio' : 'Sin cobertura'}}

Selecciona tu Municipio para configurar las colonias de entrega.

{{ municipio.name }}

CP: {{ municipio.zipCode }}

No se encontraron Municipios

Categorías

{{settings.categories.length}} seleccionadas

Selecciona todas las categorías que describan tu menú. Esto ayuda a que te encuentren en el buscador.

{{ avilcts.emoji }} {{ avilcts.name }}

Debes seleccionar al menos una.

Logo / Portada

Subir Logo
Subir Portada 800x400 px

Acceso

Cocina (KDS)

Pendientes: {{ kds.pendingOrders.value.length }} Prep: {{ kds.preparingOrders.value.length }}
Pendientes
#{{ order._id.slice(-6).toUpperCase()}} {{ kds.getTimeElapsed(order.createdAt) }}
{{ order.customerId ? order.customerId.name : 'Mostrador' }}
{{ item.quantity }} {{ item.name }}
{{ opt.name }}
Nota: {{ item.note }}

Sin pedidos

En Preparación
#{{ order._id.slice(-4) }} Preparando...
{{ item.quantity }} {{ item.name }}
{{ opt.name }}
Nota: {{ item.note }}
Nota: {{ item.notes }}
Listos para Entrega
#{{ order._id.slice(-4) }} LISTO
{{ order.customerId ? order.customerId.name : 'Mostrador' }}

Información de Venta

Cliente

{{ kds.selectedOrder.value.customerId ? kds.selectedOrder.value.customerId.name : (kds.selectedOrder.value.customerName || 'Mostrador') }}

Teléfono

{{ kds.selectedOrder.value.customerId?.phone || kds.selectedOrder.value.customerPhone }}

Calle y Número

{{ kds.selectedOrder.value.customerStreet }} {{ kds.selectedOrder.value.customerNumber || '' }}

Colonia de entrega

{{ kds.selectedOrder.value.customerColony }}

Referencia

{{ kds.selectedOrder.value.customerReference }}

Paga Con:

${{ kds.selectedOrder.value.customerHowToPay }} (Cambio: ${{ (kds.selectedOrder.value.customerHowToPay - kds.selectedOrder.value.total).toFixed(2) }})

Asignar a Repartidor

Enviará nombre, dirección, mapa de Google, total a cobrar y método de pago al repartidor.

Canal {{ kds.selectedOrder.value.source === 'pos' ? 'POS' : 'WHATSAPP' }}
Pago {{ kds.selectedOrder.value.paymentMethod || 'CASH' }}

Resumen Financiero

Subtotal ${{ (kds.selectedOrder.value.subtotal || ((kds.selectedOrder.value.total || 0) - (kds.selectedOrder.value.deliveryCost || 0) - (kds.selectedOrder.value.commission || 0))).toFixed(2) }}
Comisión (%) ${{ kds.selectedOrder.value.commission.toFixed(2) }}
Costo de Envío {{ kds.selectedOrder.value.deliveryZone }} +${{ kds.selectedOrder.value.deliveryCost.toFixed(2) }}
IVA (16%) $0.00
Total ${{ (kds.selectedOrder.value.total || 0).toFixed(2) }}

Cupones Globales

Listado de Cupones

Código Descuento Usos Estado Acciones
{{ coupon.code }} {{ coupon.discountType === 'percentage' ? coupon.discountValue + '%' : '$' + coupon.discountValue.toFixed(2) }} {{ coupon.currentUses }} / {{ coupon.maxUses > 0 ? coupon.maxUses : '∞' }} {{ coupon.isActive ? 'Activo' : 'Inactivo' }}
No hay cupones registrados.

Blog de Noticias

Gestiona los artículos de tu blog.

Aún no tienes artículos

Crea tu primera publicación en el blog. Comparte noticias, promociones o información sobre tu negocio.

{{ post.active ? 'Activo' : 'Oculto' }}

{{ post.title }}

{{ post.content }}

{{ new Date(post.createdAt).toLocaleDateString() }}

{{ couponsModule.couponForm._id ? 'Editar Cupón' : 'Nuevo Cupón' }}

Generar Corte de Dispersión

Calcula las ventas y comisiones para liquidar a un negocio.

Resumen del Corte

  • Total Ingresos: ${{ saas.dispersionPreview.value.totalSales.toFixed(2) }}
  • Pedidos Procesados: {{ saas.dispersionPreview.value.totalOrders }}
  • Comisión Plataforma: -${{ saas.dispersionPreview.value.commissionTotal.toFixed(2) }}
  • Mantenimiento Mensual: -${{ (saas.dispersionPreview.value.maintenanceFee || 70).toFixed(2) }}
  • Comisiones de Tarjeta (Stripe): -${{ saas.dispersionPreview.value.stripeFees.toFixed(2) }}
  • Monto Neto a Pagar al Negocio: ${{ saas.dispersionPreview.value.netToPay.toFixed(2) }}

Historial de Ventas — SuperAdmin

{{ saas.bizOrdersBusiness.value?.name }} /{{ saas.bizOrdersBusiness.value?.slug }}

Mostrando: {{ saas.bizOrdersDateFrom.value }} → {{ saas.bizOrdersDateTo.value }}

Total Pedidos

{{ saas.bizOrdersKpis.value.totalOrders }}

Ingresos Totales

${{ saas.bizOrdersKpis.value.totalRevenue?.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) }}

Pedidos Delivery

{{ saas.bizOrdersKpis.value.totalDelivery }}

Generado por Stripe

${{ saas.bizOrdersKpis.value.totalStripe?.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) || '0.00' }}

Deuda Total Pendiente Deuda Generada

${{ saas.bizOrdersKpis.value.totalDebt?.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) || '0.00' }}

Cargando ventas...

Este negocio no tiene ventas registradas

Folio Fecha Cliente Canal Método Pago Total Estado
#{{ ord._id.slice(-6).toUpperCase() }}
{{ new Date(ord.createdAt).toLocaleDateString() }}
{{ new Date(ord.createdAt).toLocaleTimeString([], {hour:'2-digit',minute:'2-digit'}) }}
{{ ord.customerId ? ord.customerId.name : (ord.customerName || 'Mostrador') }}
{{ ord.customerPhone }}
{{ ord.source === 'pos' ? 'POS' : 'Web' }} 🏍 {{ ord.paymentMethod }} ${{ ord.total.toFixed(2) }}
+${{ ord.deliveryCost.toFixed(2) }} envío
{{ ord.status }}
Mostrando página {{ saas.bizOrdersPagination.value.page }} de {{ saas.bizOrdersPagination.value.pages }} ({{ saas.bizOrdersPagination.value.total }} ventas totales)

Gestión de Comisiones

{{ selectedBizStats?.businessName }}

Total Ganado

${{ selectedBizStats?.totalEarned?.toFixed(2) }}

WebApp

${{ selectedBizStats?.totalWebEarned?.toFixed(2) }}

POS

${{ selectedBizStats?.totalPosEarned?.toFixed(2) }}

Ya Pagado

${{ selectedBizStats?.totalPaid?.toFixed(2) }}

Deuda Pendiente

${{ selectedBizStats?.currentDebt?.toFixed(2) }}

✓ Sin deuda pendiente

Registrar Abono

Historial de Pagos {{ selectedBizStats?.totalOrders }} ventas registradas

Sin pagos registrados aún

{{ pay.type }}

{{ pay.note || '—' }}

${{ pay.amount.toFixed(2) }}

{{ new Date(pay.createdAt).toLocaleDateString() }}

Historial de Recompra

{{ saas.selectedCustomerName.value }}

Teléfono: {{ saas.selectedCustomerPhone.value }}

Cargando historial de pedidos...

No se encontraron pedidos para este cliente.

Pedido / ID Fecha Negocio Estado Total
#{{ order._id.substring(order._id.length - 6).toUpperCase() }}
{{ order._id }}
{{ new Date(order.createdAt).toLocaleString('es-ES') }}
logo {{ order.businessId?.name || 'Negocio' }}
{{ order.status === 'pending' ? 'Pendiente' : order.status === 'preparing' ? 'Preparando' : order.status === 'ready' ? 'Listo' : order.status === 'completed' ? 'Completado' : 'Cancelado' }} ${{ (order.total || 0).toFixed(2) }}

{{ blog.blogForm.value._id ? 'Editar Artículo' : 'Nuevo Artículo' }}

Completa los datos de tu publicación

Haz clic para subir imagen

Recomendado: 1200x630px

Subiendo imagen...
Cambiar Imagen

Estado de la Publicación

Si está inactivo, no será visible en el menú público.

{{ currentMunicipio ? currentMunicipio.name : 'Colonias' }}

Selecciona zonas y asigna su costo de envío

{{ colonia.name }}
{{ colonia.zone }}
$
Gratis

No hay colonias registradas en este municipio.

{{ settings.deliveryZones.length }} zonas seleccionadas

{{ categoriesStore.editingCategory.value ? 'Editar Categoría' : 'Nueva Categoría Global' }}

Pega un emoji o usa (Win + .) / (Cmd + Ctrl + Espacio)

Puedes buscar ejemplos en: https://emojidb.org/trend-emojis

Apunta al código QR del cliente

Escanear Producto

{{ editingBusiness ? saasForm.businessName : 'Nuevo Cliente SaaS' }}

{{ saasForm.plan === 'pro' ? 'Plan PRO' : 'Plan FREE' }} {{ saasForm.active ? 'Activo' : 'Bloqueado' }} 🔥 Trending

{{ saasForm._stats.deliveryZonesCount }}

Zonas

{{ saasForm._stats.categoriesCount }}

Categorías

${{ saasForm._stats.deliveryCost }}

Delivery

{{ saasForm._stats.time || '—' }}

Tiempo (min)

Información del Negocio

/
Ubicación fijada

Escribe para buscar y selecciona una sugerencia para fijar las coordenadas GPS.

Tipos de Servicio

Métodos de Pago

Plan y Estado

Tengo Hambre Awards

Comisiones

Comisión WebApp

Ventas realizadas desde el marketplace

{{ saasForm.commissionWebType === 'percent' ? '%' : '$' }}
Se cobra {{ saasForm.commissionWebType === 'percent' ? saasForm.commissionWebAmount + '%' : '$' + saasForm.commissionWebAmount }} por venta Sin comisión configurada

Comisión POS Interno

Ventas desde el punto de venta. 0 = Inactivo

{{ saasForm.commissionPosType === 'percent' ? '%' : '$' }}
Se cobra {{ saasForm.commissionPosType === 'percent' ? saasForm.commissionPosAmount + '%' : '$' + saasForm.commissionPosAmount }} por venta POS Comisión POS inactiva (valor = 0)

Comisión Interna (Nueva)

Se descuenta al negocio en el corte de dispersión. No se cobra al cliente.

{{ saasForm.commissionInternalType === 'percent' ? '%' : '$' }}
Se descuenta {{ saasForm.commissionInternalType === 'percent' ? saasForm.commissionInternalAmount + '%' : '$' + saasForm.commissionInternalAmount }} al negocio en el corte (invisible para el cliente) Comisión interna inactiva (valor = 0)

Visibilidad en Marketplace

Credenciales de Acceso

Las credenciales son únicamente para el primer acceso. El dueño podrá cambiarlas desde su panel.

Nota de Seguridad

Las credenciales de acceso (usuario y contraseña) no se modifican desde aquí por seguridad. Para resetear contraseñas usa el módulo de Usuarios dentro del panel del negocio.

Ver menú público

{{ isEditing ? 'Editar Municipio' : 'Registrar Nuevo Municipio' }}

Colonias / Zonas ({{ municipioForm.colonias?.length || 0 }})

#{{ index + 1 }}

No hay colonias registradas

Método de Pago

${{ pos.currentTotals.value.total.toFixed(2) }}

Total a Pagar

Cambio ${{ pos.paymentForm.change.toFixed(2) }}

Procesar cobro externo

Confirma que la transacción fue exitosa en la terminal.

Separar Cuentas

Distribuye los productos de la mesa en cuentas individuales.

Mesa / Original {{ pos.splitState.originalItems.length }} ítems

Todo asignado

{{ item.qty }}
{{ item.name }}
{{ item.selectedAddons.map(a => a.name).join(', ') }}
${{ (item.price * item.qty).toFixed(2) }}
Restante en mesa: ${{ pos.getCheckTotal(pos.splitState.originalItems).toFixed(2) }}
#{{ check.id }}
${{ pos.getCheckTotal(check.items).toFixed(2) }}

Asigna productos aquí

{{ item.qty }} {{ item.name }}
${{ (item.price * item.qty).toFixed(2) }}

Seleccionar Cliente

No se encontraron clientes

{{ cust.name[0] }}

{{ cust.name }}

{{ cust.phone }}

{{ cust.points }} pts Visitas: {{ cust.visits }}

¿Cliente nuevo? Regístralo en la App de Lealtad

Aplicar Descuento

Total Original ${{ pos.discountPreview.value.original.toFixed(2) }}
Descuento -${{ pos.discountPreview.value.saving.toFixed(2) }}
Nuevo Total ${{ pos.discountPreview.value.newTotal.toFixed(2) }}

Aplicar Descuento

Configura el tipo y monto del descuento.

{{ editingProduct ? 'Editar' : 'Nuevo' }} Producto

Mantén presionado Ctrl (Windows) o Cmd (Mac) para seleccionar varias.

{{ selectedCartItem.name }}

{{ selectedCartItem.barcode || 'Sin código' }}

Precio Final Unitario

${{ selectedItemUnitPrice.toFixed(2) }}

Subtotal Línea

${{ (selectedItemUnitPrice * selectedCartItem.qty).toFixed(2) }}

{{ group.name }}

{{ group.maxOptions > 1 ? `Elige hasta ${group.maxOptions}` : 'Elige 1' }}
{{ opt.name }}
+${{ opt.priceExtra }}
Sin complementos disponibles para este producto.
{{ selectedCartItem.qty }}

{{ editingCategory ? 'Editar' : 'Nueva' }} Categoría

{{ editingAddon ? 'Editar' : 'Nuevo' }} Grupo de Opciones

$
Agrega opciones para que el cliente elija.

{{ editingBanner ? 'Editar' : 'Nuevo' }} Banner

Sin imagen

{{ froodForm._id ? 'Editar' : 'Nuevo' }} Frood

Subir imagen
Subiendo...
Subir video (MP4)
Subiendo video...

Apertura de Caja

Ingresa el monto de efectivo con el que inicias el turno (Fondo).

$

{{ finance.movementForm.type === 'in' ? 'Ingreso de Efectivo' : 'Retiro de Efectivo' }}

$

Corte de Caja

Registra los recuentos de cada método de pago e ingresa el total real contado.

Efectivo en Sistema: ${{ finance.currentData.value.currentCashInDrawer.toFixed(2) }}
Ventas Totales del Turno: ${{ finance.currentData.value.salesSummary.total.toFixed(2) }}

Recuento Manual por Método de Pago

Efectivo

Dinero físico contado

$
${{ finance.currentData.value.currentCashInDrawer.toFixed(2) }}
- Sobrante: ${{ ((finance.closeAmount.value || 0) - finance.currentData.value.currentCashInDrawer).toFixed(2) }} Faltante: ${{ (finance.currentData.value.currentCashInDrawer - (finance.closeAmount.value || 0)).toFixed(2) }}

Tarjeta Débito

Débito contado

$
${{ (finance.currentData.value.salesSummary?.debit_card || 0).toFixed(2) }}
- Sobrante: ${{ ((finance.closeRecounts.debit || 0) - (finance.currentData.value.salesSummary?.debit_card || 0)).toFixed(2) }} Faltante: ${{ ((finance.currentData.value.salesSummary?.debit_card || 0) - (finance.closeRecounts.debit || 0)).toFixed(2) }}

Tarjeta Crédito

Crédito contado

$
${{ (finance.currentData.value.salesSummary?.credit_card || 0).toFixed(2) }}
- Sobrante: ${{ ((finance.closeRecounts.credit || 0) - (finance.currentData.value.salesSummary?.credit_card || 0)).toFixed(2) }} Faltante: ${{ ((finance.currentData.value.salesSummary?.credit_card || 0) - (finance.closeRecounts.credit || 0)).toFixed(2) }}

Monto Total Real (Sumado)

$ {{ ( (finance.closeAmount.value || 0) + (finance.closeRecounts.debit || 0) + (finance.closeRecounts.credit || 0) + (finance.closeRecounts.transfer || 0) ).toFixed(2) }}

Enviar {{ shareContext === 'quote' ? 'Cotización' : 'Ticket' }}

Selecciona el país e ingresa el WhatsApp.

Vista Previa Ticket

{{ settings.appName }}

{{ settings.address }}

Tel: {{ settings.phone }}

{{ new Date().toLocaleString() }}

Folio: #{{ ticketData?.folio }}
Cliente: {{ ticketData?.customer }}
Tel: {{ ticketData.customerPhone }}
Cant. Prod. Total
{{ item.qty }} x {{ item.name }} ${{ (item.price * item.qty).toFixed(2) }}
+ {{ opt.name }}
SubTotal ${{ (ticketData?.subtotal || 0).toFixed(2) }}
Envío ({{ ticketData.deliveryZone }}) +${{ (ticketData.deliveryCost || 0).toFixed(2) }}
Descuento -${{ (ticketData.discount.amount || 0).toFixed(2) }}
TOTAL ${{ (ticketData?.total || 0).toFixed(2) }}

Método: {{ ticketData?.method }}

Paga con: ${{ ticketData.customerHowToPay }}

¡Gracias por su compra!

Software: Tengo Hambre