Varias bodegas, un solo saldo que siempre cuadra.
Una etiqueta HTML y tu aplicación lleva inventario de verdad: ubicaciones con su propio saldo, lotes con caducidad, traspasos que no pierden mercancía en el camino y conteos cíclicos con dos firmas. Todo sobre un libro de movimientos que no se puede reescribir. Con tus colores y en tu dominio.
Es un producto aparte de las existencias que ya llevan el punto de venta, la tienda en línea y el reparto. Aquellas resuelven una ubicación; ésta resuelve varias.
Panadería Molino
Saldos
3 ubicaciones · aviso a 30 días

Harina de trigo 25 kg
Almacén Central · L-0912 · vence 12 oct
Por caducar48
sacos
Uso histórico13 semanas
Mantequilla 1 kg
Tienda Centro · L-2207
Bajo mínimo3
pzas

Azúcar refinada 50 kg
En tránsito
Traspaso #1740
sacos

Levadura seca 500 g
Tienda Norte · L-1140 · vence 3 mar
126
pzas
Niveles de stock
Tasa de rotación
Un saldo que se explica solo. Estas tres cosas lo garantizan.
Una existencia escrita a mano es un número sin historia: cuando falta algo, lo único que se puede hacer es volver a contar. Aquí cada saldo es la suma de un libro que nadie puede reescribir, con reglas que el sistema cumple aunque nadie las recuerde.
Cada movimiento es un asiento, y el saldo va atado a él
El saldo y el asiento se escriben en la misma transacción, y nadie tiene permiso para tocar el saldo por fuera: la única puerta es la función que también escribe el porqué. «¿Por qué quedan 3?» se responde leyendo el libro, no volviendo a contar.
Dos tabletas, la última caja: uno de los dos rebota
La comprobación de que alcanza va dentro de la misma escritura que descuenta. Dos almacenistas dando salida a la última caja al mismo tiempo pasan cualquier validación del código; aquí el saldo nunca queda en menos uno.
Quien cuenta no es quien ajusta
El almacenista captura el conteo y otra persona aprueba la diferencia. Son dos permisos distintos, y el ajuste directo sólo lo tiene el jefe de almacén: un faltante tiene que pasar por los ojos de alguien más antes de tocar el libro.
De la recepción al conteo, sin parar el almacén
Recibe con su lote
Cada entrada lleva artículo, ubicación y, si aplica, número de lote y caducidad. El saldo sube y el asiento queda escrito en el mismo instante.
Traspasa entre bodegas
Lo que sale del origen entra en tránsito. Al recibir, pasa al destino; lo que llegó de menos se declara y queda marcado como merma, no en el limbo.
Da salida por caducidad
Al sacar mercancía, sale primero el lote que vence antes, no el que llegó primero. Lo vencido no se bloquea: se marca en rojo y se retira.
Cuenta y concilia
Un pasillo el lunes, otro el martes, sin parar el almacén. La foto se toma al capturar, y lo que se movió mientras tanto vuelve a contarse.
Lo que ya viene resuelto
Ubicaciones con su propio saldo
Almacenes y tiendas, cada uno con su existencia y su mínimo de reorden. Cien piezas en el almacén y cero en la tienda no es «hay cien»: en la tienda no se puede vender.
Lotes, caducidad y FEFO
Cada lote con su fecha y su costo. Sale primero lo que caduca antes. La ventana de aviso es del negocio: una farmacia avisa a noventa días y una panadería a dos.
Mercancía en tránsito con su pantalla
Lo que va en el camión tiene un sitio. «Hay 40 en tránsito» es una consulta, no un cálculo sobre traspasos abiertos, y la suma de todas las ubicaciones cuadra siempre.
Aviso al cruzar el mínimo
Cuando un saldo baja del mínimo se emite un evento, una vez y no en cada venta. El módulo de notificaciones lo convierte en un WhatsApp al comprador.
Valuación y kárdex
Existencias valuadas a costo de lote, la lista de lo que está por vencer y el kárdex de cada artículo, que un contador puede leer de una sola tabla.
Cinco papeles, permisos en la base
Dueño, jefe de almacén, supervisor, almacenista y sólo lectura. Lo que cada uno no puede hacer lo impide la base de datos, no un botón deshabilitado.
Esto es todo el código que escribes
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 conteo a medio capturar sigue donde estaba.
<script src="https://nexusnorth.dev/embed/v1/nexus-inventario.js" defer></script>
<nexus-inventario
tenant-id="tu-tenant"
auth-token="token-efimero-de-tu-backend"
workspace-id="el-almacen"
near-expiry-days="90"
style="--nexus-primary: #0f766e; --nexus-radius: 0.75rem"
></nexus-inventario>
<script>
document.querySelector("nexus-inventario")
.addEventListener("token-expired", renovarToken);
</script>- Cambiar el token no remonta la app: el traspaso a medio recibir sigue donde estaba.
- Sin cookies de terceros: el token viaja en memoria, no en el navegador.
- Aislado en Shadow DOM: tus estilos no lo tocan y los suyos no te tocan.
- Tus colores, tu tipografía y tus radios desde variables CSS. Sin declarar nada, se ve neutro.
- Un solo archivo, sin dependencias que choquen con las tuyas.
Lo que suelen preguntar antes de integrarlo
Ya tengo el punto de venta o la tienda. ¿No llevan inventario?
Sí, y está bien: resuelven cuánto queda de lo que estás vendiendo ahora mismo, en una ubicación. Este módulo es para quien tiene varias, mueve mercancía entre ellas, maneja lotes con caducidad y cuenta por ciclos. Es un producto aparte, con sus propias tablas, y se pueden llevar los dos a la vez: la cuenta del mostrador y la del almacén.
¿Puedo corregir un saldo a mano?
Sólo el dueño o el jefe de almacén, y queda como un asiento de ajuste con motivo, auditado. Un ajuste es una diferencia de conteo sin el conteo; por eso nadie por debajo lo tiene. Lo que sí puede hacer un supervisor es registrar una merma, que exige motivo y sale en su propio reporte: romper algo y decirlo es distinto de corregir el libro en silencio.
¿Qué pasa si en un traspaso llega menos de lo que salió?
Recibes lo que llegó, y la diferencia no se queda en tránsito: se escribe como merma con el motivo «faltante en traspaso» y el traspaso queda marcado. Recibir de más no se acepta: si llegaron más cajas de las que dice el papel, eso es un conteo, no un traspaso.
¿La salida es FIFO?
No: es FEFO, sale primero lo que caduca antes aunque haya entrado después. Con caducidades, FIFO es la respuesta equivocada y es la que dan los sistemas que confunden «lote» con «recepción». Lo que no caduca va al final. La asignación se prueba sola, sin base de datos.
¿Costeo, órdenes de compra, códigos de barras?
Todavía no. Hay costo por lote y valuación de existencias, pero no PEPS ni promedio ponderado; las órdenes de compra y la recepción contra orden son otra pieza. Nada de eso obliga a cambiar el esquema que ya hay, que es la prueba de que los cimientos están en el sitio correcto.
¿Se puede ver como mi producto?
Sí, y es el default. El módulo no lleva marca propia: colores, tipografía y radios salen de variables CSS que heredas desde tu hoja. Sin declarar nada, se ve neutro.
¿Dónde viven los datos?
En nuestra instancia por omisión, con aislamiento por cliente impuesto en la base de datos. Si lo prefieres, pueden vivir en la tuya: el módulo apunta a donde le digas.
¿Tu producto necesita llevar almacén?
Cuéntanos qué estás construyendo y te decimos si este módulo encaja — o si lo tuyo necesita otra cosa.
Hablemos