Cómo va el negocio, en un sitio, sin que el tablero sea una puerta trasera.
Ventas, pedidos, cotizaciones, gastos, facturación, tickets, agenda, inventario, suscripciones, personal y flota: los números que tus módulos ya publican, sumados por día y por sucursal. Abrir el tablero es un permiso; cada indicador vuelve a pedir el suyo en el módulo que lo produce.
La diferencia con el informe que cada módulo ya tiene: éste los junta. Y juntarlos es exactamente donde un tablero deshace los cortes de permiso de todos los que agrega. Aquí no. Y un día del que no hay dato se dice «no lo sé», no se rellena con un cero.
Ferretería Acme · 3 sucursales
Últimos 14 días
Día cortado en America/Mexico_City
Ventas en caja · pos
parcial
$412,380.00 MXN
Los dos últimos días no valen cero: el cierre nocturno no ha corrido y el total lo dice.
- Tickets cobrados · pos
- 3,912
- 12 de 14 días
- Gasto pagado · gastos
- $96,410.00
- MXN
Kilómetros recorridos · flotillas
No puedes ver este indicador. Hace falta flotillas.report.read allí, no aquí.
Detrás del número
Un hecho por evento, y la reversa con su fecha
- pos.sale.completed15 mar+$118,400.00
- pos.sale.cancelled02 abr−$118,400.00
- Efectivo el15 mar, no hoy
Agregar es fácil. Agregar sin abrir una puerta trasera, no.
El costo por kilómetro es de dirección. El ausentismo no lo ve el personal. El embudo agregado pide un permiso propio. Un tablero que enseñe todo eso a quien tenga la llave del tablero es una puerta trasera a cinco módulos, y la mayoría lo son sin saberlo.
Junta los números sin juntar los permisos
Un tablero que lo enseña todo a quien tiene la llave del tablero deshace, de una sentada, los cortes de permiso de todos los módulos que agrega. Aquí no: abrir el tablero es un permiso, y cada indicador vuelve a preguntar en el módulo que lo produce, con el papel que tengas allí. Quien no tenga acceso al costo por kilómetro abre el tablero y ve ese panel diciendo que no le toca, no una gráfica vacía que se lee como «no hubo rutas».
«No lo sé» no se rellena con un cero
Un día del que no hay agregado no vale cero: vale «no lo sé», y la diferencia es la que separa «vendimos poco» de «el cálculo nocturno no corrió». Un tablero que pinta los dos igual hace tomar decisiones sobre un fallo. Aquí un hueco se ve como un hueco, con su explicación al lado, y un total al que le faltan días lo dice.
No es el sistema de registro de nada
Si el punto de venta dice 118,500 y el tablero dice 118,400, el punto de venta tiene razón. Indicadores no lee la tabla de ningún módulo: se alimenta de lo que cada uno publica, guarda un hecho por cada cosa que pasó y deriva de ahí los totales. Borrarlo entero no pierde un solo dato del negocio.
Lo que no puede contestar, lo dice
Hay números que su módulo de origen todavía no publica, importes que llegan sin moneda y conteos que no distinguen personas porque el dato no viaja. Eso sale escrito en la pantalla, donde se elige el indicador, en vez de salir como una cifra que se puede leer y no se puede interpretar. Y no hay avisos ni pronósticos: enseña lo que pasó.
De lo que pasó en cada módulo al número del tablero
Conectas una fuente
Eliges qué tienda, qué agenda o qué espacio de otro módulo alimenta a este tablero. Sólo puede conectarlo quien es miembro allí: nadie teclea el identificador de la tienda de otro y empieza a copiarse sus números.
Cada evento deja un hecho
Una venta cobrada, una factura timbrada, un ticket resuelto. Cada uno deja un hecho con su fecha y su moneda, y el mismo evento entregado dos veces no cuenta dos veces. Los totales se derivan de los hechos; no hay contadores que se incrementen.
La noche cierra el día
A las cuatro de la mañana se cierra «ayer» en la zona horaria de tu espacio, no en la del servidor. Una cancelación que llega tarde marca el día original como sucio y sólo ese día se recalcula. Si el cierre no corre, el hueco se ve.
Abres el tablero y cada panel pregunta
Dos llaves: la del tablero y la del módulo de origen. Cada panel se pide por separado, con tu rol allí, y suma sólo las sucursales donde lo tienes. Lo que no te toca sale diciendo que no te toca.
Un catálogo con parámetros, no fórmulas libres
Cada indicador dice de qué módulo sale, de qué eventos, en qué unidad y qué permiso de origen pide. Tú compones tableros con ellos: periodo, granularidad, desglose. Y sólo está en el catálogo lo que un evento real alimenta hoy; un indicador sin evento detrás es una promesa que devuelve cero para siempre.
Punto de venta
- Ventas en caja
- Tickets cobrados
- Devoluciones
Tienda en línea
- Pedidos pagados
- Número de pedidos
- Carritos abandonados
Cotizaciones
- Cotizado
- Cotizaciones aceptadas
- Cotizaciones enviadas
- Cotizaciones ganadas
CRM
- Oportunidades ganadas
- Oportunidades perdidas
- Negocios cerrados
Gastos y Proveedores
- Gasto autorizado
- Gasto pagado
- Facturas vencidas
Facturación (CFDI)
- Facturado
- Comprobantes timbrados
Helpdesk
- Tickets abiertos
- Tickets resueltos
- Tickets reabiertos
- Compromisos incumplidos
Citas
- Citas confirmadas
- Citas canceladas
- Inasistencias
Suscripciones
- Ingreso cobrado
- Altas de suscripción
- Bajas de suscripción
- Cobros fallidos
Inventario
- Avisos de mínimo
Lealtad
- Puntos acumulados
- Canjes
Recursos Humanos
- Fichajes fuera de geocerca
- Días de vacaciones aprobados
Flotillas
- Kilómetros recorridos
- Gasto en combustible
- Gasto en mantenimiento
- Servicios vencidos
Notificaciones
- Mensajes enviados
- Mensajes fallidos
Portal de clientes
- Visitas al portal
Todos los indicadores aparecen en la lista aunque no puedas verlos, con el permiso exacto que hace falta. Saber que existe y que no te toca es información correcta; que no aparezca es lo que hace creer que el módulo está roto.
Lo que ya viene resuelto
Tableros que guardan la pregunta, no la respuesta
Un tablero guardado es una lista de indicadores con sus parámetros. No hay un solo número dentro. Quien abre el tablero de otro vuelve a pasar por sus propios permisos, y los paneles que no le tocan salen negados.
Por sucursal, y sólo las tuyas
Los agregados se guardan por espacio de origen: tres tiendas son tres filas por día. El encargado de dos sucursales ve la suma de sus dos, no todo ni nada. Y el desglose por origen contesta cuál vende más.
El pasado se recarga desde el bus
Instalar Indicadores hoy no empieza en cero: el bus de eventos guarda todo lo que pasó desde que cada módulo se instaló, y la recarga lo relee por la misma puerta que el escuchador en vivo. El tablero dice «datos desde» en vez de pintar una caída a cero que nadie tuvo.
El día se corta en tu zona horaria
Una venta a las diez de la noche en Tijuana es del mismo día para ti y del siguiente en UTC. El espacio lleva su zona, con ella se cierra el día y con ella se pinta la gráfica. No hay atributo que un cliente pueda poner mal en la plantilla.
El rastro detrás de cada número
Cada hecho apunta al evento del que salió y al módulo que lo emitió. «Qué decía el tablero el 20 de marzo» tiene respuesta, porque los hechos no se editan. El detalle pide un segundo permiso, además del de origen.
Pesos y dólares, dos filas; nunca una suma
Los importes se guardan en centavos enteros y la moneda viaja con ellos. No hay tipo de cambio: un cubo con dos monedas devuelve dos filas. Un importe que llega sin moneda se guarda aparte y la pantalla lo dice.
Tu tablero, con tus módulos, en cinco minutos
Una cuenta por persona: el mismo correo que usas en los demás productos del sitio sirve aquí. El espacio nace sin ninguna fuente conectada, que es el estado correcto; conectas la primera, la recarga trae el pasado y los paneles se llenan con lo que tu rol allí te deja ver.
El mismo tablero, dentro de tu producto
El token lo emite tu backend con tu llave secreta y dura quince minutos. Cuando caduca, el módulo avisa con un evento; tu página pide otro y el tablero sigue donde estaba. Es el tablero del negocio para el negocio: va detrás de una sesión, no en una página abierta.
<script src="https://nexusnorth.dev/embed/v1/nexus-bi.js" defer></script>
<nexus-bi
tenant-id="tu-tenant"
auth-token="token-efimero-de-tu-backend"
workspace-id="tu-espacio"
brand-name="Ferretería Acme"
style="--nexus-primary: #1d4ed8; --nexus-radius: 0.75rem"
></nexus-bi>
<script>
document.querySelector("nexus-bi")
.addEventListener("token-expired", renovarToken);
</script>- El token no amplía nada: resuelve una sesión con un papel, y cada indicador vuelve a preguntar en su módulo de origen con ese papel.
- Sin atributo de rol ni de zona horaria: los dos salen del espacio, y una segunda fuente para el mismo dato es una que un día dice otra cosa.
- Aislado en Shadow DOM: tus estilos no lo tocan y los suyos no te tocan. Las mismas variables --nexus-* que los demás módulos.
- Cuando un día ya cerrado cambia de valor, el módulo emite un evento que dice «vuelve a preguntar», sin el número dentro.
Lo que suelen preguntar antes de entrar
¿Esto no es lo mismo que el informe que ya tiene cada módulo?
No. El informe del punto de venta responde por el punto de venta; éste junta el punto de venta, la tienda, los gastos, la facturación y lo demás en una sola pantalla, por día y por sucursal. Lo que no hace es saltarse los permisos de ninguno: para ver aquí un número hace falta poder verlo allí.
El punto de venta dice 118,500 y el tablero dice 118,400. ¿Quién tiene razón?
El punto de venta, siempre. Indicadores no es el sistema de registro de nada: se alimenta de lo que cada módulo publica y deriva de ahí los totales. Una discrepancia es un error de Indicadores, nunca al revés, y como cada hecho apunta al evento del que salió, se puede rastrear cuál falta o cuál sobra.
¿Me avisa si bajan las ventas?
No, y es lo primero que va a pedir quien lo use. Un aviso necesita decidir contra qué se compara: la semana anterior, el mismo mes del año pasado, una meta tecleada. Cada respuesta es un producto distinto. Cuando esté, irá por Notificaciones y comprobando el permiso de origen al mandar, porque el aviso lleva el número dentro. Tampoco pronostica: enseña lo que pasó.
¿Puedo ver el margen bruto, el ticket promedio o el ingreso recurrente?
Todavía no, y no están en el catálogo a propósito. El margen necesita el costo, que ningún evento lleva. El ticket promedio es una división cuyas dos mitades pueden tener permisos distintos, y hay que decidir si pide los dos. Un indicador sembrado sin evento que lo alimente devuelve cero para siempre, y nadie distingue eso de un mes malo.
¿Qué pasa con lo que vendí antes de instalar Indicadores?
Se recupera. El bus de eventos guarda todo lo que pasó desde que cada módulo se instaló, y la recarga lo relee y lo mete por la misma puerta que el escuchador en vivo. El tablero dice desde qué fecha hay datos. Lo que no se recupera es lo que nunca estuvo en el sistema: dos años facturados fuera de Nexus siguen vacíos, y ninguna importación de CSV arregla eso sin que los dos números discrepen para siempre.
¿Pesos y dólares?
Dos filas, una por moneda. No hay tabla de tipos de cambio ni la va a haber en esta entrega: un tipo de cambio inventado es una cifra de dirección que nadie puede reproducir, y el día que alguien la audite no habrá de dónde sacarla. Esa decisión la toma un contador, no un tablero.
¿Enseña quiénes fueron los clientes?
No. Sabe contar clientes distintos y no sabe quiénes son: guarda el identificador opaco que el módulo de origen ya usa, nunca un correo, un teléfono ni un nombre, y no puede traducirlo porque no lee la tabla donde vive. Un volcado de los hechos de Indicadores no es la lista de clientes de nadie.
¿Dónde viven los datos?
En nuestra instancia por omisión, con aislamiento por espacio impuesto en la base de datos. Los hechos y los agregados no se leen desde ninguna sesión, con ningún rol: la única puerta son cuatro funciones que comprueban el permiso de origen. Si lo prefieres, pueden vivir en la tuya: el módulo apunta a donde le digas.
¿Sabes hoy cómo va el negocio sin pedirle a cada módulo su informe?
Abre tu espacio y conecta la primera fuente, o cuéntanos qué estás construyendo y te decimos si el módulo encaja dentro de tu producto.