📦 BodegApp
Manual de Usuario
World-Class Warehouse Management

BodegApp — WMS+TMS simple, poderoso y confiable.

Este manual es tu guía completa: desde el primer escaneo de un operario hasta la torre de control del supervisor y la configuración del administrador. Cada módulo incluye su descripción funcional, el paso a paso de uso y su fundamento técnico — porque un sistema de clase mundial se opera con confianza cuando se entiende de verdad.

Bienvenido a BodegApp

BodegApp digitaliza tu bodega de punta a punta: recepción con etiquetas inteligentes, ubicaciones trazadas, picking guiado, despacho con ruteo optimizado y entrega con prueba fotográfica — todo sincronizado en tiempo real con tu ERP y con trazabilidad total de cada unidad.

El sistema está construido sobre tres principios que lo distinguen:

  • La realidad física manda. El inventario del sistema refleja siempre dónde está la mercadería de verdad: lo que se prepara sigue en su bodega de origen, lo que viaja está "en tránsito", y nada aparece en destino antes de ser recepcionado.
  • Trazabilidad inmutable. El Kardex nunca se borra ni se edita. Deshacer una operación genera su movimiento inverso, con usuario, motivo y hora. Cada saldo se puede reconstruir movimiento a movimiento.
  • Doble registro sincronizado. Cada operación se escribe simultáneamente en la base del WMS y en tu sistema on-premise (ERP), con verificaciones de consistencia y un chequeo de integridad automático cada 6 horas.

¿Por qué BodegApp? — Los diferenciadores

Hay muchos sistemas que "controlan inventario". Estos cinco atributos son los que separan a BodegApp de ellos — y los puedes verificar tú mismo operando el sistema.

🏦 Integridad transaccional dual verificada

Cada operación sensible se escribe primero en el sistema on-premise y se verifica; si algo no calza, se aborta completa — nunca a medias. El Kardex es inmutable (deshacer = movimiento inverso), las reversas son idempotentes (reintentar jamás duplica) y un auditor automático revisa la salud de los datos cada 6 horas.

Disciplina de sistema financiero aplicada a inventario — los ERP PyME no la tienen.
📍 Modelo físico honesto

El inventario del sistema refleja siempre la realidad: lo que se prepara sigue siendo del origen (EN_PREPARACION), lo que viaja está EN_TRÁNSITO con su destino documentado, lo auto-recepcionado en sucursal queda POR_VERIFICAR hasta el conteo. La bodega de un bulto cambia solo cuando se recepciona físicamente.

La mayoría de los WMS PyME muestran stock fantasma en destino apenas se despacha. Aquí, cero fantasmas.
📵 Chofer offline-first

La consola del conductor funciona sin señal: cada entrega, foto y firma se encola localmente con su hora real y se sincroniza sola al volver la cobertura. La operación de reparto no depende de la cobertura rural.

Estándar de las plataformas de última milla dedicadas — inexistente en los WMS del segmento.
📐 KPIs con rigor de auditoría

Una sola taxonomía de movimientos gobierna todos los indicadores; se excluye el ruido (cargas del sistema, correcciones, datos de prueba, productos eliminados) y cada tarjeta muestra su fórmula con el badge ⓘ. Los números del dashboard reconcilian entre sí — y contra la bodega.

Transparencia de cálculo rara incluso en sistemas enterprise.
🚀 Onboarding productizado

Lo que mata a los WMS en la PyME es el costo de implementarlos. BodegApp lo resolvió como producto: import masivo de catálogo y stock, asistente de puesta en marcha con checklist en vivo, inventario negativo por bodega (opera desde el día uno mientras cargas), y activación de sucursales con verificación ítem a ítem.

De cero a operando en días, no en meses de consultoría.
🔗 Un solo sistema, toda la cadena

WMS + ruteo optimizado + prueba de entrega + tracking del cliente + WhatsApp + sincronización ERP, integrados de fábrica. La alternativa del mercado es contratar dos o tres productos distintos y pagarle a alguien para pegarlos.

El bundle completo que el segmento no ofrece integrado.

Arquitectura y seguridad

Cómo está construido

  • Aplicación web responsiva — funciona en computador, tablet y teléfono, sin instalar nada. Los escáneres usan la cámara del dispositivo o pistolas lectoras.
  • Doble base de datos: PostgreSQL como motor del WMS (ubicaciones, manifiestos, rutas, kardex) y escritura dual al MySQL on-premise (APP_STOCK), que sigue siendo la base compartida con los sistemas históricos de la empresa. Sincronización automática cada 30 segundos en ambos sentidos.
  • Multi-empresa y multi-bodega: varias razones sociales operan las mismas bodegas físicas con inventarios lógicamente separados y KPIs consolidables.

Seguridad

  • Sesiones con token firmado (JWT) de 8 horas. Al expirar, la app muestra el aviso de desconexión y vuelve sola a la pantalla de login.
  • Permisos en tres dimensiones: empresa, bodega y módulo — un usuario solo ve y opera lo que le corresponde.
  • Cambio de empresa con documento abierto: si tienes un picking, un packing, una recepción o un bulto sin cerrar, la app no te deja cambiar de empresa activa (evita que los escaneos siguientes caigan sobre datos de otra razón social). El aviso indica cuál es el documento y ofrece llevarte a la pantalla donde se cierra.
  • Las credenciales de integraciones (API keys, WooCommerce, WhatsApp) se guardan cifradas u ocultas tras escritura ("write-only": se ingresan una vez y no vuelven a mostrarse).
  • Respaldo automático diario (03:00) de base de datos y código, con retención de 7 días.
Pantalla de acceso: sesión segura con selección de empresa activa y opción de ver la contraseña.
Pantalla de acceso: sesión segura con selección de empresa activa y opción de ver la contraseña.

Roles y permisos

Niveles de acceso diseñados para que cada persona tenga exactamente las herramientas de su responsabilidad — ni más, ni menos. Y cuando los roles estándar no calzan con tu organización, creas tus propios perfiles a medida.

RolPara quiénQué puede hacer
ADMINGerente / jefe de operacionesTodo lo de su(s) empresa(s): usuarios, configuración, corrección de inventario, reversas, todos los módulos.
SUPERVISORJefe de turnoToda la operación (incluye Mi Ruta y el Catálogo en modo lectura) + las reversas operativas. Sin acceso a Configuración.
OPERATOROperario de bodegaOperación diaria: recepción, picking, packing, putaway, consultas y Catálogo Maestro en modo lectura.
CHOFERConductorSolo su consola "Mi Ruta": entregas, evidencias, navegación. No puede re-optimizar rutas (facultad exclusiva del despachador).

Privilegio especial del Maestro SKU: todos los perfiles ven el catálogo en modo buscar y visualizar; crear y modificar productos es un privilegio separado ("Maestro SKU: crear y modificar") que por defecto solo tienen los administradores y que se puede otorgar a perfiles personalizados según las políticas de cada empresa.

⭐ Perfiles personalizados: el acceso a la medida de tu organización

Además de los roles estándar, cada empresa puede crear perfiles propios con distintos niveles de acceso según su requerimiento (Configuración → Perfiles). Un perfil define exactamente qué módulos del menú ve y opera cada usuario — nada más, nada menos:

  • Ejemplos reales: "Recepcionista" (solo Recepción + Consulta de Stock), "Jefe de Despacho" (Picking, Packing, Despacho y Monitor), "Analista" (solo Dashboard y Kardex, sin operación), "Encargado de Sucursal" (Recepción de Traslado + Putaway + Consultas).
  • Los perfiles se asignan por usuario y por empresa — la misma persona puede tener perfiles distintos en empresas distintas.
  • Se combinan con el alcance de bodegas de cada usuario: los KPIs, las colas de trabajo y las búsquedas respetan automáticamente ambas dimensiones.
  • Los cambios de perfil aplican al instante en el menú del usuario, sin reinstalar ni reiniciar sesión.

Conceptos clave: B-, PL- y MN-

Tres códigos gobiernan toda la trazabilidad:

  • B-00000000 — Etiqueta de SKU (bulto unitario). Identifica una cantidad concreta de un producto. Nace en la recepción con su etiqueta QR imprimible y acompaña al stock toda su vida: putaway, picking, fraccionamiento, traslado. Es la unidad mínima de trazabilidad.
  • PL-00000000 — Pallet / bulto de salida. Agrupa etiquetas B- en la estación de packing para viajar juntas. Es lo que se escanea al recibir un traslado.
  • MN-000000 — Manifiesto. El documento que ordena el trabajo: qué se mueve, de dónde a dónde, en qué estado del flujo va (picking → packing → despacho → entrega/recepción).

Regla de oro: escanea, no digites. Cada etiqueta tiene QR; el escáner integrado identifica automáticamente si leíste un B-, un PL-, un SKU o una ubicación, y actúa en consecuencia.

Escaneo y Lectura QR

El escáner es el teclado de la bodega: cada pantalla operativa lee QRs con la cámara del dispositivo o con pistola lectora, identifica solo qué le mostraste — etiqueta, pallet, SKU, serial o ubicación — y actúa sin que tengas que elegir nada.

Dos formas de escanear, cero configuración

  • 📷 Cámara del dispositivo (teléfono, tablet o notebook): el botón de escaneo abre el visor con enfoque automático. Funciona en Chrome, Edge y Safari; el navegador pedirá permiso de cámara la primera vez.
  • 🔫 Pistola lectora (hardware): cualquier lector USB o Bluetooth en modo teclado ("keyboard wedge") funciona de inmediato — dispara la lectura en el campo activo, sin drivers ni configuración. Es la opción recomendada para estaciones fijas de alta frecuencia.

Despacho inteligente de códigos

El lector es contextual: la misma acción de escanear hace lo correcto según la pantalla y el patrón del código leído:

Código leídoPatrónQué hace el sistema
Etiqueta de SKUB-00000000 o ID numéricoCarga el bulto: picking, putaway, consulta, reversa.
PalletPL-00000000Opera el bulto completo: recepción de traslado, putaway de pallet, consulta.
SKU / código de barrasCódigo del maestro o EANIdentifica el producto en recepción y búsquedas.
N° de serie genéricoDefinido por productoResuelve el SKU automáticamente (recepción y maestro).
Serial del fabricanteLibre (captura de datos)Registra el serial único de la unidad para garantía y trazabilidad.
UbicaciónEtiqueta de rackConfirma el destino en putaway.
Nota técnicaLectura por cámara con html5-qrcode (getUserMedia) y contextos de escaneo por pantalla (inbound_sku, master_serial, pm_serial, etc.). Los QRs de las etiquetas codifican el identificador puro (B-/PL-), lo que hace la lectura robusta incluso con etiquetas parcialmente dañadas.

Impresión y Etiquetas

Etiquetas térmicas impresas directo desde el navegador a tu impresora Bluetooth — sin drivers, sin software intermedio, sin cables al servidor. Cada empresa define su formato una vez y toda la operación imprime igual.

Conectar y sincronizar la impresora (cada dispositivo)

  1. Toca el ícono de impresora 🖨️ en la barra superior (junto al selector de empresa): se abre el selector de impresoras.
  2. Presiona "📡 Escanear Dispositivos Bluetooth": el navegador muestra las impresoras al alcance; elige la tuya y empareja (una sola vez por dispositivo).
  3. El punto de estado del ícono pasa a activo. La impresora queda recordada en ese dispositivo — cada estación o teléfono se vincula con la suya, y varias estaciones imprimen en paralelo sin interferirse.

Requisito: Google Chrome (Android o escritorio) con Bluetooth activo — usa Web Bluetooth (BLE). También se soporta conexión USB/red según el modelo configurado.

¿La impresora aparece pero no imprime? BodegApp homologa las familias de chips BLE más usadas en térmicas portátiles (incluidas las generaciones nuevas). Si un modelo conecta pero no expone un canal compatible, la app lo avisa con el nombre del dispositivo en vez de fallar en silencio: anota el modelo exacto para homologarlo.

Selector de impresora
Selector de impresora: emparejamiento Bluetooth directo desde el navegador, recordado por dispositivo.

Configuración de etiquetas por empresa

En Configuración → Empresas, cada razón social define su perfil de impresión — y toda la operación lo hereda automáticamente:

ParámetroOpcionesCuándo usar
Tipo de impresoraESC/POS (térmica)El estándar de las térmicas portátiles y de mesón.
ConexiónBluetooth BLE · USB/RedBluetooth para operación móvil; USB para estaciones fijas.
Tamaño de etiqueta54×84 mm (configurable)Debe calzar con el rollo instalado.
Fin de etiquetacorte · gap · avance (feed)Corte para impresoras con guillotina; gap para rollos pre-troquelados; avance con N líneas configurables para modelos sin corte.
Modo rasteractivado / desactivadoEl modo "a prueba de impresoras": envía la etiqueta como imagen fija (ancho configurable en puntos, 384 = 203 dpi) en lugar de comandos de texto. Actívalo si tu modelo imprime caracteres corridos, tildes mal o QRs deformes.

Anatomía de las etiquetas

  • Etiqueta B- (SKU): QR grande del código B-, razón social y RUT, SKU y descripción, cantidad y unidad, bodega, fecha de emisión y — si el producto exige captura de datos — la fila S/N con el serial del fabricante. Color de acento y subtítulo personalizables al fraccionar.
  • Etiqueta PL- (pallet): QR del código PL-, tipo de documento y folio, tipo de movimiento, bodega destino, operador, fecha, total de ítems y unidades — la "carátula" que viaja pegada al bulto y que se escanea en la recepción del destino.
Nota técnicaLas etiquetas se generan como SVG (pantalla/reimpresión) y como bytes ESC/POS nativos para la térmica. El perfil de impresión vive en la ficha de la empresa (printerType, printerConnection, printerSize, labelFinish, escposRaster, rasterWidthDots, labelFeedLines). El diseño térmico está calibrado para las impresoras portátiles en uso (QR + texto, sin comandos de corte ni espaciado no soportados) y el modo raster garantiza fidelidad de impresión en cualquier firmware. La reimpresión de cualquier etiqueta está disponible desde el detalle del bulto.

Recepción (Inbound) e Inventario Inicial

Del camión al sistema en segundos: cada ingreso genera su etiqueta B- con QR, queda registrado en el Kardex y disponible para ubicar — con impresión térmica directa desde el navegador.

Cómo se usa

  1. Menú → Recepción. Selecciona bodega y tipo de ingreso.
  2. Escanea o busca el SKU (también puedes escanear su N° de serie genérico si el producto lo tiene configurado en el maestro).
  3. Indica cantidad. Si el producto exige captura de datos, escanea el serial único del fabricante de cada unidad (garantía y trazabilidad unitaria).
  4. Confirma: se crea la etiqueta B- y se imprime en la térmica (ESC/POS por Bluetooth/USB, formato configurable por empresa).
  5. El stock queda en la ubicación genérica 00-00-00 de la bodega, listo para putaway.
OPERATOR+

Recepciones en curso (retomar un manifiesto inbound)

Un manifiesto de recepción que quedó a medias ya no depende del equipo donde se inició: retómalo desde cualquier dispositivo y termina el trabajo.

  1. Al entrar a Recepción, si existen manifiestos inbound iniciados y sin finalizar en tu empresa, aparece la tarjeta "⏳ Recepciones en curso" con cada MN: folio, orden de referencia, bodega, bultos, ítems y unidades ya recibidas.
  2. Presiona ▶ Retomar: la sesión se reconstruye desde el servidor — manifiesto activo, bodega fijada, orden de referencia y los bultos ya recibidos con sus totales.
  3. Continúa recibiendo bultos con normalidad (todo se ancla al mismo MN) y usa Finalizar Manifiesto cuando termines.
  4. Si el manifiesto ya está activo en tu equipo, la tarjeta lo marca "✓ Activo aquí". Si tienes un bulto abierto, ciérralo o cancélalo antes de retomar otro manifiesto.
OPERATOR+

Inventario Inicial (carga base de una bodega)

La puerta de entrada de una bodega nueva a BodegApp: carga el inventario existente etiquetándolo pieza a pieza — sin detener la operación y sin depender de que los saldos históricos estén perfectos.

  1. En la misma pantalla de Recepción, cambia el tipo de ingreso a "Inventario inicial (carga base)" — la opción solo aparece en bodegas habilitadas para carga inicial.
  2. Presiona "▶ Iniciar carga de inventario inicial" y trabaja en modo sesión: escanea SKU, ingresa la cantidad contada, imprime la etiqueta B- y pégala — repite producto por producto o zona por zona.
  3. Cada carga es aditiva: crea una etiqueta B- nueva con las unidades ingresadas y las suma al saldo (nunca pisa lo anterior) — puedes cargar el mismo SKU en varias pasadas o desde varios dispositivos a la vez.
  4. La carga masiva alternativa: sube un CSV/Excel con SKU y cantidades por bodega (Configuración, con plantilla descargable) — ideal para el arranque cuando ya existe un conteo digitado.
  5. Mientras la carga avanza, la bodega puede operar con inventario negativo: si se pickea algo aún no cargado, el saldo queda negativo y visible en el reporte de Inventarios Negativos; el ajuste posterior (fijar el saldo al conteo real) lo regulariza con auditoría.

Requisito: la bodega debe tener habilitado "Permitir picking con inventario negativo" (Configuración → Bodegas) — es el flag que marca a una bodega como "en proceso de carga inicial".

OPERATOR+ carga · ADMIN+ carga masiva y ajustes
Nota técnicaEscritura dual inmediata: la fila nace en APP_STOCK (on-premise) y su espejo en PostgreSQL con el mismo correlativo B-. El inventario inicial usa el movimiento INVENTARIO_INICIAL en el Kardex, deja el stock en la genérica 00-00-00 (para putaway posterior) y muestra el saldo previo y nuevo en cada carga. La regularización de negativos usa reconcileSkuToCount, que fija el saldo exactamente al conteo con su movimiento de ajuste. También existe recepción contra orden de compra (RECEPCION_INBOUND) que genera manifiesto con cierre. Distinción clave: inventario inicial = aditivo (suma lo contado) · ajuste = absoluto (fija el saldo al conteo).
Recepción: escaneo de SKU, cantidad y generación de la etiqueta B- con impresión térmica.
Recepción: escaneo de SKU, cantidad y generación de la etiqueta B- con impresión térmica.

Almacenamiento (Putaway)

Cada bulto a su ubicación exacta — pasillo, columna y nivel — para que después el picking sea un paseo y no una búsqueda del tesoro.

  1. Menú → Almacenamiento. Escanea la etiqueta del bulto (B- o PL-) o usa la búsqueda inteligente: al tipear 2+ caracteres aparecen sugerencias de bultos, pallets y SKUs con stock — cada una muestra en qué bodega está, para confirmar de un vistazo antes de elegir.
  2. Escanea la etiqueta de la ubicación física destino (ej: A-01-02).
  3. Confirmado: el bulto sale de la genérica y el KPI de "stock sin ubicar" baja en tiempo real.

Reglas de seguridad: el sistema valida que el bulto esté en la misma bodega que la ubicación destino (cambiar de bodega siempre es un traslado, nunca un putaway) y que el usuario tenga permisos sobre la empresa del bulto y la bodega destino.

Direccionamiento 3D con drill-down: en el mapa de ubicaciones, al tocar una celda se ve su etiqueta QR, el slotting (ABC/distancia) y el resumen de ocupación por empresa; tocando una empresa se abre el detalle de sus SKUs en esa ubicación — código, nombre, cantidad y los números de cada etiqueta B- con su bulto PL- cuando viaja empacada —, todo sin salir de la pantalla. El inventario de la ubicación muestra el estado de cada bulto y considera solo stock vigente: lo entregado o cerrado no ocupa ubicación.

Eliminar ubicaciones (ADMIN y SUPERADMIN): el detalle de cada ubicación ofrece eliminarla, con resguardos: nunca la genérica 00-00-00 (buffer del sistema), nunca con stock vigente (indica cuántos bultos y unidades trasladar primero) y solo en bodegas a las que tienes acceso. La eliminación es lógica: la ubicación desaparece de la grilla y de los conteos, pero el Kardex histórico sigue resolviendo su nombre. Para recuperarla basta regenerar esa coordenada en el generador — o que un operador la use en putaway —: revive con su mismo historial.

OPERATOR+
Nota técnicaLas ubicaciones se modelan en 3D (pasillo/columna/nivel) con generación masiva desde Configuración → Bodegas; un índice único por bodega+coordenada impide duplicados. Cada movimiento queda como PUTAWAY_PALLET en el Kardex con origen y destino. La clasificación ABC por rotación está disponible por ubicación. Las sugerencias de búsqueda se acotan en servidor al alcance (empresas y bodegas) del usuario.

Picking Manual

Extrae exactamente lo que el documento pide, con validación de saldo, seriales y bodega — por partes y entre varios operadores si hace falta, con la libertad de deshacer al instante si algo se escaneó de más.

  1. Menú → Picking Manual. Define el documento (tipo de movimiento, folio, bodega, destino si es traslado).
  2. Escanea el bulto origen (B- o ID) y la cantidad a extraer hacia el pallet de salida.
  3. Extracción parcial: se genera un B- hijo con la cantidad extraída (el padre conserva el saldo). Extracción total: viaja la misma etiqueta.
  4. Cada ítem pickeado ofrece dos etiquetas a demanda: 🏷️ Hija (la etiqueta del ítem extraído) y 📦 Padre (reimprime el bulto de origen con su saldo actualizado; si quedó en cero, el sistema avisa en vez de imprimir una etiqueta falsa). La opción Padre solo aparece cuando hubo extracción parcial.
  5. ¿Te equivocaste? El botón deshacer de la sesión revierte la extracción completa: el stock vuelve a su ubicación y bodega originales, con su reversa registrada en Kardex.
  6. Al finalizar, el picking se convierte en manifiesto y avanza a packing. ¿Cancelaste sin pickear nada? El manifiesto vacío queda ANULADO como evidencia (nunca se borra ni se reutiliza el folio).

Picking parcial y colaborativo (relevos)

Un picking no tiene que hacerse de una sola vez ni por una sola persona. El manifiesto es la sesión: se puede pausar, retomar en otro equipo y repartir entre turnos, sin perder nada de lo ya pickeado.

La pantalla se divide en dos pestañas: 🛒 Picking Manual (iniciar uno nuevo) y ⏳ Picking en proceso, que muestra en su propio rótulo cuántas sesiones hay abiertas. Es también el lugar donde aparecerán, más adelante, las órdenes que se inyecten desde integraciones.

  • ⏳ Picking en proceso — los pickings abiertos de tus bodegas, con su avance (ítems, unidades, hace cuánto se trabajó), quién lo tiene y quiénes han participado. El botón ▶ Retomar reconstruye la lista desde el servidor: cada ítem muestra el operador que lo pickeó. Si no hay ninguno, la pestaña lo dice explícitamente.
  • Un pickeador activo a la vez (la "posta") — quien retoma queda como responsable; los demás ven el avance pero no pueden extraer. Esto evita el error clásico de dos personas pickeando el mismo SKU sin saberlo.
  • La posta se suelta sola a los 10 minutos sin actividad (colación, teléfono sin batería) y también con el botón ⏸ Pausar. Si alguien necesita asumir un picking ocupado, puede hacerlo con una confirmación que muestra quién lo tiene y desde cuándo.
  • Quién cierra el picking — el portador de la posta, que es quien está viendo físicamente que no falte nada. La confirmación resume ítems, unidades y todos los participantes. Un SUPERVISOR o superior puede finalizar o liberar la posta en cualquier momento (el caso "el operador se fue y el camión espera").
  • Revertir ítems ajenos requiere rol SUPERVISOR o superior; cada operador siempre puede revertir lo propio.
OPERATOR+ SUPERVISOR+ para finalizar por otro / revertir ajeno
Nota técnicaDesde julio 2026 rige el Diseño B: el picking deja los bultos en estado EN_PREPARACION en la bodega de origen — el estado final (EN_TRANSITO / DESPACHADO) lo asigna el despacho, y la bodega cambia recién en la recepción del destino. Bodegas con inventario negativo habilitado permiten pickear sin stock registrado (carga inicial gradual), acumulando saldo negativo visible en su reporte. La reversa es autoritativa e idempotente: deriva cantidades y ubicaciones de la genealogía y el Kardex, nunca de lo que envía la pantalla. El picking colaborativo persiste cada ítem al momento de extraerlo (con operador y hora), de modo que la lista del servidor —no el navegador— es la fuente de verdad al retomar desde otro equipo; la posta vive en el manifiesto con un latido de 10 minutos que la libera automáticamente.
Picking Manual: definición del documento y extracción guiada bulto a bulto.
Picking Manual: definición del documento y extracción guiada bulto a bulto.

Packing

La estación donde el pedido toma forma física: etiquetas B- agrupadas en pallets PL- con su propia etiqueta madre, listas para subir al camión.

  1. Menú → Packing: la cola muestra los manifiestos listos para packing y los que quedaron en proceso, cada uno con su distintivo.
  2. Escanea cada etiqueta B- del manifiesto y asígnala a un pallet PL- (se genera e imprime su etiqueta madre con resumen).
  3. ¿Un bulto es muy grande? Fracciona en packing: divide un B- en dos sin salir de la estación (con reversa disponible).
  4. Cierra el packing: el manifiesto avanza a DESPACHO. Cancelar un manifiesto vacío (sin bultos) lo deja ANULADO como evidencia.

La cola es de la estación, no de quien pickeó

Packing lo hace quien esté en la estación, casi nunca la misma persona que pickeó (y con picking colaborativo pueden haber sido varias). Por eso la cola lista los manifiestos de la empresa activa filtrados por tus bodegas asignadas, no por quién los originó. Si un manifiesto no aparece, revisa que su bodega de origen esté entre las asignadas a tu usuario.

Dejar un packing en proceso

No hace falta terminar de una sentada. Al abrir un manifiesto pasa a estado PACKING y, si sales con ⏸ Dejar en proceso, sigue en la cola marcado ⏳ En proceso para que cualquiera lo retome.

✕ Cancelar bulto: el bulto en construcción se puede descartar desde su propia tarjeta: las cantidades ya asignadas vuelven a la lista del manifiesto (nada de lo pickeado se pierde) y el código PL- se libera — si era el último emitido, el folio se recicla. Para salir del manifiesto solo se exige cerrar o cancelar el bulto en construcción; con bultos ya cerrados se puede salir, con la advertencia de que ese armado aún no está persistido (se guarda al terminar el packing) y deberá rehacerse.

↩️ Volver a picking: si al empacar descubres que faltan o sobran ítems, cada tarjeta de la cola ofrece devolver el manifiesto a picking (reversa supervisada, con motivo obligatorio). Queda en EN_PICKING y se retoma desde Picking Manual → Picking en proceso para corregirlo. Requiere SUPERVISOR+.

OPERATOR+ · desarmar un PL- cerrado o volver a picking requiere SUPERVISOR+
Nota técnicaEl vínculo B-→PL- se escribe en ambas bases (columna PALLET on-premise y bultoCode en los ítems del manifiesto). "Desarmar PL-" (Monitor, supervisores) es la inversa exacta: libera etiquetas sin tocar su estado ni ubicación, con Kardex REVERSA_PACKING.

Despacho

El momento de la verdad, documentado: patente, conductor y transportista quedan grabados, el cliente recibe su link de seguimiento y el inventario pasa a "en tránsito" o "despachado" en ambas bases a la vez.

  1. Menú → Despacho: manifiestos en estado DESPACHO listos para salir. Cada tarjeta muestra su documento de referencia (nota de venta, cotización, factura…) y la cantidad de bultos físicos (los PL- armados en packing) — que es también cuántas carátulas se imprimen.
  2. Ingresa los datos de transporte (patente, conductor, RUT, transportista — se recuerdan para reutilizar). La fecha y hora de despacho se interpreta y se imprime en la zona horaria de la empresa.
  3. Confirma: los bultos pasan de EN_PREPARACION a su estado de stock — EN_TRANSITO (traslados) o DESPACHADO (despachos y retiros) — y se disparan las notificaciones al cliente.

Manifiesto impreso con emisor automático: el documento del manifiesto llena solo el bloque EMISIÓN de las firmas de conformidad con el nombre y RUT del usuario activo (el RUT se configura como dato opcional del usuario) y la fecha/hora de emisión en la zona horaria de la empresa.

📄 Carátulas de despacho (media carta, impresora de red)

Complemento opcional a las etiquetas térmicas: la portada courier que viaja pegada por fuera de cada bulto. El botón 📄 Carátulas de cada tarjeta abre un diálogo pre-poblado con lo que el manifiesto sabe (cliente, dirección, N° de documento, cantidad de bultos) y deja completar ciudad y fono. Imprime una página media carta (21,6 × 14 cm) por bulto con numeración 1/N … N/N, mediante el diálogo del navegador — ahí se elige la impresora láser o de red.

  • Formato courier: cabecera con la empresa, RUT, bodega de origen y folio MN; destinatario, dirección, ciudad y fono en tipografía grande legible a distancia; QR del manifiesto (escaneable con la propia app, lleva a su trazabilidad) y caja BULTO i/N destacada.
  • Si el marco oscuro sale claro en papel, activa "Gráficos en segundo plano" en el diálogo de impresión de Chrome.

Prueba de entrega (retiro en tienda y entrega de despacho): el formulario "Recibido Conforme" permite verificar los bultos escaneando con la cámara (escaneo continuo hasta completar el manifiesto) además de digitarlos. La captura de firma del receptor y de fotografías de respaldo se activa o desactiva por separado en la configuración de cada empresa.

OPERATOR+
Nota técnicadispatch-complete propaga el estado a los bultos en PostgreSQL y APP_STOCK simultáneamente, registra el Kardex por SKU y activa el hook de WhatsApp "pedido en ruta" con el link de tracking. La bodega física NO cambia en este paso (Diseño B).

Traslados entre Bodegas

Mercadería que viaja con pasaporte: sale del origen como "en preparación", cruza como "en tránsito" con su destino documentado en el manifiesto, y solo al escanearse en destino pasa a ser inventario de la nueva bodega. Cero stock fantasma.

Ciclo de vida completo

EtapaEstado del bultoBodega
Picking del trasladoEN_PREPARACIONOrigen
Despacho (datos transporte)EN_TRANSITOOrigen
Recepción escaneada en destinoSTOCKDestino (recién aquí cambia)

Recepción Verificada de Traslado

  1. Menú → Recepción de Traslado en la bodega destino. Escanea el QR del bulto (PL-).
  2. Se abre el formulario de verificación: la lista de productos declarados del pallet con un campo de cantidad recibida por SKU (precargada con lo declarado; las diferencias se resaltan al instante).
  3. Declara el resultado: ✅ Recibido conforme, ⚠️ Con observaciones o ❌ No recibido conforme. Si hay diferencias de cantidad, el sistema no permite declarar "conforme"; si no es conforme, las observaciones son obligatorias. Puedes adjuntar hasta 4 fotografías de evidencia con la cámara.
  4. Al confirmar, el stock queda disponible en la genérica y el acta de recepción (declarado vs recibido, conformidad, observaciones, fotos, quién y cuándo) se guarda en el historial del PL. Una barra de progreso muestra cuántos bultos del manifiesto van recibidos.
  5. Al recibir el último bulto, el manifiesto pasa a RECIBIDO y se envía automáticamente un resumen por correo al emisor y al receptor con el detalle por bulto y un enlace que abre el acta completa en la app.
  6. Luego ubica con putaway normal. ¿Escaneaste por error? Un supervisor puede anular la recepción (mientras no haya putaway) y el bulto vuelve a tránsito.

Las diferencias de cantidad no ajustan stock automáticamente: quedan documentadas en el acta para gestión posterior (ajuste o reversa según corresponda).

Bodegas "solo destino" (sucursales sin BodegApp)

Las bodegas que aún operan con el sistema antiguo se marcan como no operativas en Configuración → Bodegas. Los traslados hacia ellas se auto-recepcionan al confirmar la entrega en ruteo (o por barrido tras 24 h) al estado POR_VERIFICAR: aislado, visible, pero no disponible. Cuando la sucursal se implemente, el asistente de puesta en marcha exige resolver cada ítem uno a uno (✅ a stock / ➗ parcial / ❌ cerrar con motivo) antes de activarla — el día uno parte con inventario real, no heredado.

OPERATOR+ recepción · SUPERVISOR+ anulaciones · ADMIN+ puesta en marcha
Nota técnicaEl destino del tránsito se lee de manifests.dest_warehouse vía el PALLET (con fallback al modo anterior para traslados en vuelo). La auto-recepción respeta el flag wmsOperated por bodega y solo procesa filas creadas por BodegApp.

Fraccionamiento

Divide un bulto padre en hijos con genealogía completa: cada fracción sabe de dónde viene, y el árbol de trazabilidad se puede recorrer entero desde cualquier etiqueta.

  1. Menú → Fraccionamiento. Escanea el bulto padre (el producto debe estar marcado fraccionable en el maestro).
  2. Indica la cantidad a separar y la ubicación destino; personaliza la etiqueta (color, subtítulo, QR).
  3. Se genera el B- hijo vinculado al padre. La reversa devuelve la cantidad al padre y anula el hijo conservando su historial.
  4. Las cantidades aceptan hasta 3 decimales en toda la app (recepción, inventario inicial, picking, fraccionamiento y conteo cíclico) — pensado para metros y kilos de productos fraccionables. La precisión calza exacta con el ERP on-premise (decimal(11,3)); un cuarto decimal se redondea.
OPERATOR+ (módulo asignable por perfil)
Nota técnicaGenealogía por parentBatchId; productos de unidad discreta exigen fracciones enteras. La conversión de unidades (transformables) usa el mismo motor con Kardex CONVERSIÓN.

Inventario Cíclico

Exactitud de inventario de clase mundial sin detener la operación: conteos por ubicación o SKU, diferencias al instante y ajustes auditados.

  1. Menú → Inventario Cíclico: crea una sesión de conteo (por bodega, ubicación o SKU).
  2. Cuenta físico vs. sistema; las diferencias se muestran al cerrar.
  3. El ajuste fija el saldo al conteo real, con movimiento de Kardex y auditoría. La exactitud alimenta el KPI del dashboard (meta world-class: ≥98%).
OPERATOR+

Consulta de Stock

Una sola búsqueda, toda la verdad: dónde está cada unidad, en qué estado y en qué bulto — unificando el WMS y el sistema on-premise en una vista.

  1. Menú → Consulta de Stock. Busca por SKU, nombre, etiqueta B- o bulto PL-. El autocompletado usa un catálogo liviano que carga en segundos incluso en móvil con señal débil.
  2. El resumen agrupa por bodega; toca una tarjeta para el detalle de bultos y ubicaciones. En el detalle, el encabezado de cada SKU queda fijo mientras recorres sus bultos — con SKUs de códigos parecidos siempre sabes cuál estás mirando.
  3. Cada bulto del detalle tiene un botón 🖨️ de reimpresión: genera la misma etiqueta que Trazabilidad de Manifiesto (resuelve unidad de medida del maestro y número de serie si el bulto es serializado).

Solo stock vigente: las consultas de stock muestran lo que realmente está en bodega — disponible, en pallet, en picking, en preparación, listo para retiro, en tránsito o por verificar — cada uno con su estado a la vista. Lo ya cerrado o entregado no aparece como stock: vive en el Kardex y en los manifiestos, que es donde corresponde consultarlo. Este mismo criterio rige en el Direccionamiento 3D, en la ocupación por bodega y en el Avance ERP, de modo que los cuatro indicadores siempre cuadran entre sí.

El stock no disponible se muestra en grupos propios, nunca mezclado con el disponible:

  • 📦 En preparación — pickeado en un pallet, aún no despachado (cuenta en su bodega de origen).
  • 🚚 En tránsito — viajando, con su destino ("→ Temuco") tomado del manifiesto.
  • 📋 Por verificar — auto-recepcionado en sucursal, pendiente de conteo físico.
OPERATOR+
Consulta de Stock: búsqueda con autocompletado y resumen por bodega — con los grupos
Consulta de Stock: búsqueda con autocompletado y resumen por bodega — con los grupos "por verificar" y "en tránsito" claramente aislados del disponible.

Kardex (Trazabilidad)

La caja negra de tu inventario: cada movimiento de cada unidad, con quién, cuándo, desde dónde y hacia dónde. Inmutable por diseño — las correcciones suman movimientos, jamás borran historia.

  1. Menú → Kardex. Busca por SKU, nombre, etiqueta B-, bulto PL-, tipo de movimiento o documento.
  2. Cada fila muestra tipo, cantidad, bodega/ubicación origen y destino, usuario, fecha y notas.
Nota técnicaLos movimientos de bultos eliminados por corrección se conservan "desanclados" (el historial del SKU sigue cuadrando) y las reversas referencian su operación original. La genealogía de fraccionamientos es navegable como árbol.
Kardex: historial completo de movimientos de un SKU con origen, destino, usuario y documento.
Kardex: historial completo de movimientos de un SKU con origen, destino, usuario y documento.

Monitor de Manifiestos

El pulso de la operación en un tablero Kanban vivo: cada manifiesto en su columna de estado, con filtros por bodega, alertas y las herramientas de supervisión a un clic.

  • Vista Kanban o lista, con filtros por bodega y estado, y refresco automático.
  • Acciones por manifiesto: PDF, envío por correo, y para supervisores la reversa ↩️ (retroceder un paso del flujo con motivo).
  • Herramientas de supervisión en el encabezado: Desarmar PL-, Anular ingreso, Anular recepción.
  • Los flujos de estados son configurables por empresa y tipo de movimiento (Configuración → Flujos).
  • Display Público opcional: pantalla para TV de bodega con los manifiestos activos.
OPERATOR+ visualización · SUPERVISOR+ reversas
Monitor de Manifiestos: tablero Kanban en vivo con filtros y herramientas de supervisión.
Monitor de Manifiestos: tablero Kanban en vivo con filtros y herramientas de supervisión.

Dashboard de KPIs

Métricas de operación calculadas con rigor de auditoría: solo trabajo físico real, consolidadas por bodega entre todas tus empresas, y con la fórmula de cada indicador a la vista.

  • Resumen: movimientos, ocupación, manifiestos, SKUs activos, tipos de movimiento (Entradas/Salidas/Internos por SKUs con movimiento) y estado de manifiestos.
  • Productividad: operaciones físicas por operador (recepciones, pickings, posicionamientos, transformaciones) con ranking. Excluye estados, correcciones y cargas del sistema.
  • Inventario: unidades por bodega, top SKUs, ocupación de ubicaciones.
  • Nivel de Servicio: completitud por tipo de documento.
  • KPIs Avanzados: OTIF, tiempo de ciclo recepción→putaway, rotación, stock sin ubicar, edad del stock, líneas/día, exactitud de inventario — con semáforos world-class.
  1. Filtros globales: período (por defecto 7 días), bodega y empresa — el consolidado multi-empresa es el default si tienes acceso a varias. Al cambiar cualquier filtro (o la empresa activa de la sesión) todas las pestañas de KPIs, incluida Avance ERP, se refrescan automáticamente con el nuevo alcance.
  2. Pasa el mouse por el badge de cualquier tarjeta o gráfico para ver qué mide y su fórmula exacta.
Nota técnicaTaxonomía canónica de movimientos única para todos los KPIs; se excluyen productos en papelera, registros desanclados, importaciones del sistema (SYNC_LEGACY) y pedidos de prueba de integraciones. Las bodegas compartidas consolidan físicamente (la ocupación reconcilia con las unidades).
Dashboard de KPIs: tarjetas con fórmula explicativa (ⓘ), consolidación multi-empresa y gráficos de operación.
Dashboard de KPIs: tarjetas con fórmula explicativa (ⓘ), consolidación multi-empresa y gráficos de operación.

Avance ERP

El termómetro de tu implementación: cuánto del inventario del ERP ya vive gobernado por BodegApp, bodega por bodega, familia por familia, valorizado a precio de lista.

  1. Dashboard → 🎯 Avance ERP. Filtra por empresa (si accedes a más de una; por defecto consolida todas), bodega, familia o SKU.
  2. Tiles: avance global SKU×bodega, SKUs 100% cuadrados, unidades y valorización BodegApp vs ERP (valores resumidos en K/M).
  3. Barras duales por bodega, % cuadrado por familia (peor primero) y tabla de mayores diferencias valorizadas.
  4. Exporta el detalle a Excel (columnas separadas de stock BodegApp y ERP), con opción de incluir SKUs sin diferencias.

Qué se compara: el lado BodegApp considera el stock vigente (disponible, en pallet, en picking o preparación, por verificar). Lo cerrado o entregado no participa, y el stock en tránsito queda fuera de la cuadratura: mientras viaja no pertenece a ninguna bodega (su ubicación apunta al origen pero el ERP ya lo movió al destino, así que contarlo generaba diferencias falsas en ambas). El tránsito sigue visible en la Consulta de Stock bajo su grupo 🚚.

Nota técnicaEl lado BodegApp se lee directo del APP_STOCK on-premise (cache 60 s, fallback al espejo); el lado ERP desde las vistas homologadas por empresa. Solo cuentan bodegas creadas en BodegApp. En modo consolidado, cada empresa compara contra su propio ERP por RUT y los agregados suman.
Avance ERP: avance global, valorización K/M, barras duales BodegApp vs ERP y export a Excel.
Avance ERP: avance global, valorización K/M, barras duales BodegApp vs ERP y export a Excel.

Transporte y Ruteo

Optimización de rutas al nivel de los grandes: ventanas horarias, prioridades, tráfico real por carretera, torre de control con alertas en vivo y reprogramación de fallidos en dos clics.

Planificación

  1. Menú → Transporte y Ruteo. Toma manifiestos despachables de la cola y créales un documento de transporte con chofer y vehículo.
  2. Define por parada: ventana horaria y prioridad (normal/alta/urgente).
  3. Optimizar: el motor ordena las paradas minimizando el costo real del recorrido, respetando ventanas y priorizando urgentes. Reordenamiento manual por arrastre disponible (con recálculo de ETAs).

Restricciones del vehículo

Cada vehículo de la flota puede definir, todas opcionales: capacidad (unidades), peso máximo (kg), volumen máximo (m³) y turno (desde/hasta). En la planificación son restricciones duras: ninguna ruta se genera excediendo el vehículo ni su jornada, y lo que no cabe se reporta como "no asignado" con el motivo específico (peso, volumen, capacidad o turno). El peso y volumen de cada manifiesto se calculan automáticamente desde la ficha de los productos (peso/volumen unitario × cantidad). Un campo vacío o en 0 significa sin restricción.

Re-optimizar en ruta es facultad exclusiva del despachador (Torre de Control) — el chofer no puede alterar su recorrido.

Torre de control

  • Mapa en vivo con cada camión (posición GPS del chofer) y cada parada con su ETA.
  • Alertas automáticas: sin señal >10 min, ruta atrasada, ritmo lento, ventana en riesgo/perdida, cliente respondió por WhatsApp.
  • Paradas fallidas: reprogramar a la cola de despacho o directamente a otra ruta.
  • Posición de todos los choferes activos visible según tu alcance de empresa/bodega, tengan o no ruta asignada.
OPERATOR+ con módulo transporte · alertas y edición para despachadores
Nota técnicaRuteo por carretera con OSRM + heurística de inserción y 2-opt sobre una simulación de reloj (esperas y penalización por atraso, en hora de Chile). Tracking a nivel usuario (lastLat/lastLng) con actualización continua. Proveedor de optimización externo conectable por API key.
Transporte y Ruteo: mapa vivo con rutas, paradas y torre de control con alertas.
Transporte y Ruteo: mapa vivo con rutas, paradas y torre de control con alertas.

Mi Ruta (Consola del Chofer)

Una consola de reparto que funciona hasta donde no llega la señal: offline-first, con navegación a Waze en un toque, prueba de entrega con foto y firma, y un mapa que gira contigo.

  1. El chofer entra con su usuario (rol CHOFER aterriza directo en Mi Ruta) y activa el GPS.
  2. Cada parada trae: dirección, contacto (botón llamar), Waze y WhatsApp con iconos oficiales, y el botón "Llegué" (check-in con hora).
  3. Entregar: nombre de quien recibe + foto de evidencia + firma (cada evidencia se activa o desactiva por empresa en Configuración). Los bultos del manifiesto se verifican escaneando con la cámara en modo continuo o digitando. No entregar: motivo tipificado (cliente ausente, dirección incorrecta, rechazado, sin acceso, fuera de horario) + foto.
  4. ¿Sin señal? La app encola todo localmente y sincroniza sola al volver la cobertura, con la hora real de cada evento. Banner 📵 y marcadores ⏳ indican lo pendiente.

El chofer no puede re-optimizar su ruta: el recorrido lo gobierna el despachador desde Torre de Control.

El mapa que acompaña

  • Rotación heading-up: el mapa gira para que el camión siempre apunte hacia arriba, con movimiento continuo (sin saltos).
  • Seguimiento inteligente: encuadre automático mientras te mueves; al detenerte más de 10 s, el mapa se libera. Tocar una parada la centra 30 s.
  • La pantalla no se bloquea mientras Mi Ruta está activa (Wake Lock).
CHOFER · también visible para SUPERVISOR+
Nota técnicaCola offline en IndexedDB con endpoints idempotentes (reintentar jamás duplica) y timestamp real del evento. Ruta cacheada localmente para operar sin red. Fotos comprimidas en el dispositivo antes de enviar.

Tracking del Cliente

Tu cliente sigue su pedido como si fuera un delivery premium: página blanca con tu marca, línea de tiempo, hora estimada, cuántas paradas faltan y el camión moviéndose en el mapa en vivo.

  • Cada parada genera un link único /t/… que se envía por WhatsApp al salir la ruta.
  • Muestra: estado (preparando / en ruta / entregado / no entregado), ETA, paradas restantes, quién recibió, y botón "Escríbenos" al WhatsApp de la empresa.
  • Mapa en vivo con la posición del vehículo (actualización cada 25 s). El link expira 48 h después de terminado el pedido.
Nota técnicaPágina pública sin datos sensibles (solo primer nombre del receptor), con rate-limiting y posición cacheada 15 s en servidor. White-label por empresa.

Notificaciones WhatsApp

Comunicación proactiva con plantillas aprobadas de WhatsApp Business: "va en camino", "entregado", "no pudimos entregar" — y las respuestas del cliente llegan directo a la torre de control.

  1. Configuración → 💬 WhatsApp (por empresa): URL del conector, API key, canal, número de contacto y las 3 plantillas.
  2. Los envíos se disparan solos: al iniciar ruta, al entregar y al fallar — siempre "best-effort" (jamás bloquean la operación).
  3. Si el cliente responde, su mensaje queda anotado en la parada y genera la alerta 💬 en la torre de control.
ADMIN+ configuración
Nota técnicaIntegración con oomnichat vía tokens de conector, webhook de vuelta firmado con HMAC-SHA256 y referencia por folio de manifiesto.

Catálogo Maestro SKU

Un maestro de productos que es fuente de verdad: fotos importadas de tu tienda WooCommerce, precio y stock ERP sincronizados, seriales, fraccionabilidad y papelera reversible — todo gobernado desde una pantalla.

  • Ficha completa: SKU, nombre, unidad, múltiplo de venta (unidades por las que se vende, ej. de 5 en 5 — lo consume el POS para validar cantidades), proveedor, familia, código de barras, serial genérico, fraccionable, captura de datos, stock mín/máx, peso y volumen (usados por el ruteo), foto y PDFs adjuntos.
  • Acceso en dos niveles: todos los usuarios pueden buscar y visualizar la ficha completa (modo solo lectura, con historial y PDFs descargables); crear y modificar requiere el privilegio "Maestro SKU: crear y modificar", que se otorga por perfil según las políticas de la empresa.
  • Sincronizado con el ERP: precio de lista y stock ERP por bodega se refrescan cada 5 minutos y se muestran en la grilla.
  • Fotos desde WooCommerce: Configuración → 🛒 importa las imágenes publicadas en tu tienda cruzando por SKU (normalizadas y livianas). La foto manual siempre puede reemplazarlas.
  • Papelera (borrado lógico): eliminar exige stock cero en ambas bases; lo borrado no cuenta en ninguna estadística y es restaurable con su historial íntegro.
  • Protecciones: la unidad de medida no se puede cambiar con stock vigente; renombrar un SKU (operación restringida de administración) propaga el cambio al on-premise con auditoría.
  • Carga masiva por CSV/Excel con plantilla descargable.
Todos buscar y visualizar · ADMIN+ (o perfil con privilegio) crear/editar, papelera y carga masiva

Reversas Operativas

Equivocarse es humano; deshacer con trazabilidad es world-class. Cada proceso tiene su reversa guiada: el sistema solo ofrece el paso atrás válido para el estado actual, exige motivo y lo graba todo en el Kardex.

ReversaQué haceDónde
Deshacer pickingDevuelve la extracción a su ubicación y bodega originales (parcial o total).Picking Manual (misma sesión)
Reabrir manifiesto ↩️Retrocede UN paso del flujo (ej: DESPACHO→PACKING), con motivo. Bloqueado si ya salió a transporte o está en estado final.Monitor
Desarmar PL-Libera las etiquetas B- de un pallet armado (pre-despacho).Monitor
Anular ingresoEtiqueta ingresada por error, disponible y sin historia → queda ANULADA (nunca se borra).Monitor
Anular recepción de trasladoBulto escaneado por error (sin putaway) → vuelve a EN_TRÁNSITO junto con su manifiesto.Monitor
SUPERVISOR+ todas (el deshacer de sesión de picking es del propio operador)
Nota técnicaPrincipio rector: Kardex append-only — deshacer = registrar el movimiento inverso (REVERSA_*), sumando cero contra el original. Orden on-premise-primero con guardas de idempotencia: reintentar una reversa jamás duplica stock.

Corrección de Inventario (Registros Erróneos)

El bisturí del administrador para alinear el inventario cuando algo quedó mal — con doble confirmación en estados sensibles, consistencia garantizada entre ambas bases y huella completa en Kardex y auditoría.

  1. Configuración → 🧹 Registros Erróneos. Busca por B-, PL-, SKU o descripción y combina con el filtro por bodega (la grilla muestra la bodega de cada registro). Al filtrar por bodega la búsqueda amplía su ventana antes de filtrar, de modo que también encuentra bultos antiguos de esa bodega.
  2. Revisa el detalle (stock, movimientos, manifiestos, genealogía) y elimina de raíz.
  3. Si el registro está en estado sensible (en tránsito, despachado) el sistema lo advierte y sugiere la reversa como vía correcta antes de permitir continuar.
  4. El historial de eliminaciones se consulta bajo demanda con filtros (código/SKU/usuario/fechas) y exporta a CSV.

Qué protege el sistema al eliminar

Un bulto casi nunca vive solo: suele estar citado en documentos. La app distingue dos situaciones y actúa distinto en cada una.

Situación del registroQué hace la app
Está en un documento EN CURSO
picking, packing, despacho, tránsito…
Bloquea la eliminación e indica qué documento lo retiene. No admite forzar: purgarlo dejaría el manifiesto sin contenido y el stock movido sin respaldo. La vía correcta es la reversa del pick, que saca el ítem del manifiesto y devuelve el stock a su ubicación. Luego sí se puede eliminar.
Está en un documento CERRADO
entregado, recibido, cerrado
Permite eliminar el bulto, pero conserva la línea del documento como evidencia histórica — mismo criterio que el Kardex, que queda desanclado y nunca se borra. Una entrega firmada sigue mostrando qué se entregó aunque el registro de stock ya no exista.

Manifiestos sin ítems: si un manifiesto queda sin contenido (todos sus bultos revertidos o eliminados) no puede avanzar, despacharse ni entregarse — evita generar una prueba de entrega sobre cero unidades. La salida es anularlo o rehacer el picking.

ADMIN+
Nota técnicaEl borrado ejecuta on-premise primero y aborta si no calza lo esperado (imposible la "resurrección" por sincronización). El Kardex se conserva desanclado y se registra CORRECCION_INVENTARIO con la cantidad negativa — el saldo del SKU siempre reconcilia. Las líneas de manifiesto no referencian al bulto (legacy_id/bulto_code son texto), por eso conservarlas no deja registros viudos.

Integridad de Datos

Un auditor incansable trabaja para ti cada 6 horas: busca registros viudos, tránsitos olvidados, preparaciones colgadas y negativos anómalos — y te lo muestra en un panel de salud con ejemplos concretos.

  • Panel 🩺 Integridad de datos en Configuración → Registros Erróneos, con ejecución bajo demanda.
  • Chequeos: ítems de manifiesto sin etiqueta, paradas sin manifiesto, transitorios >7 días, stock de productos en papelera, tránsitos >7 días sin recepción, negativos en bodegas sin inventario negativo habilitado.
  • Guardas estructurales activas: no se puede desactivar/eliminar una bodega con stock; los cambios manuales de estado de manifiesto solo aceptan transiciones válidas del flujo.
ADMIN+
Integridad de Datos: panel de salud con los chequeos automáticos y sus hallazgos.
Integridad de Datos: panel de salud con los chequeos automáticos y sus hallazgos.

Configuración

SecciónQué gobiernas
EmpresasRazones sociales, planes y límites, datos de facturación, impresoras y formato de etiquetas, zona horaria (gobierna todas las fechas y horas de la app, con cambio de hora automático) y prueba de entrega (firma y fotografías activables por separado) por empresa.
BodegasCreación, geolocalización (origen de rutas), generación masiva de ubicaciones, empresas asociadas, inventario negativo y "Opera BodegApp" (recepción escaneada vs solo-destino).
Usuarios y PerfilesAltas, roles, acceso por empresa y bodega, RUT del usuario (opcional, se imprime como emisor en manifiestos), perfiles de menú personalizados por empresa (incluido el privilegio de edición del Maestro SKU).
Flujos de ManifiestoSecuencia de estados por tipo de movimiento, configurable por empresa.
💬 WhatsAppConector, plantillas y número de contacto por empresa.
🔌 IntegracionesTodas las conexiones externas en un solo lugar, con sub-pestañas: Bsale (ERP/POS: catálogo, stock por sucursal para el Avance ERP y ventas como manifiestos, con webhook en tiempo real), Fotos WooCommerce y API para sistemas de venta (API keys de lectura: productos, stock dual, bodegas, usuarios).
✉️ CorreoProveedor de envío (Resend/SMTP) para manifiestos y notificaciones.
🧹 Registros ErróneosCorrección de inventario, historial de eliminaciones e integridad de datos.
Display PúblicoPantalla de TV con manifiestos activos, por token.
ADMIN+ (algunas secciones reservadas a la administración de la plataforma)
Configuración → Bodegas: estado operativo, inventario negativo y empresas asociadas por bodega.
Configuración → Bodegas: estado operativo, inventario negativo y empresas asociadas por bodega.

Integraciones y API

BodegApp no vive aislado: conversa con tu ERP on-premise cada 30 segundos, alimenta a tu sistema de ventas por API y recibe pedidos del POS — un ecosistema, no una isla.

  • ERP on-premise (dual-write): toda operación se escribe también en APP_STOCK; la sincronización bidireccional corre cada 30 s y los precios/stock ERP cada 5 min desde vistas homologadas por empresa.
  • API externa de solo lectura (/api/ext/v1): productos (con precio, stock ERP y múltiplo de venta para validar cantidades en el POS), stock dual BodegApp+ERP por bodega, bodegas y usuarios. Autenticación por API key con hash, scopes y rate-limit; gestión y rotación desde Configuración.
  • Pedidos desde el POS (oomnisale): ingresan como manifiestos. Mientras la integración esté en modo prueba, sus pedidos quedan aislados de KPIs y colas operativas (interruptor OOMNISALE_TEST_MODE).
  • WooCommerce: importación de fotos del catálogo por SKU.
  • oomnichat: WhatsApp Business API con plantillas y webhook de respuestas.

Arquitectura Técnica Detallada

Para el equipo de TI y los evaluadores técnicos: cómo está construido BodegApp por dentro, por qué se tomaron esas decisiones y qué garantías entrega cada capa.

Las cuatro capas

CapaTecnologíaResponsabilidad
PresentaciónAplicación web SPA (HTML5/JS), responsiva, sin instalaciónTodas las pantallas, escaneo QR por cámara, impresión Web Bluetooth, mapas (Leaflet/OSM), gráficos (Chart.js), operación offline del chofer (IndexedDB).
APINode.js + Express, ~180 endpoints RESTReglas de negocio, máquina de estados, validaciones, autenticación JWT, permisos por empresa/bodega/módulo, rate-limiting en endpoints públicos.
DatosPostgreSQL (Prisma ORM) + MySQL on-premisePostgreSQL: modelo relacional completo del WMS. MySQL APP_STOCK: base histórica compartida con los sistemas legados — escritura dual en cada operación.
InfraestructuraDocker Compose · HTTPS (Let's Encrypt) · nginxContenedores de app y base de datos, puertos internos solo en localhost, certificados automáticos, respaldos diarios con retención.

Flujo de una operación (ejemplo: picking de traslado)

  1. Escaneo → la SPA envía la operación al API con el token del usuario.
  2. Validación → el API verifica permisos (empresa + bodega + módulo), estado del bulto y saldo.
  3. Escritura dual → primero el on-premise (APP_STOCK), luego PostgreSQL en transacción; si el on-premise no calza con lo esperado, la operación aborta sin efectos parciales.
  4. Kardex → se registra el movimiento con usuario, origen, destino y documento (append-only).
  5. Convergencia → los ciclos de sincronización reconcilian cualquier desfase residual entre bases.

Ciclos automáticos del sistema

ProcesoFrecuenciaQué hace
Sincronización de stock30 segundosBidireccional con APP_STOCK: altas, bajas, cantidades y democión de disponibilidad. Preserva los estados internos en curso (EN_PICKING/EN_PACKING/EN_PREPARACION).
Precios y stock ERP5 minutosImporta precio de lista y stock ERP por bodega desde las vistas homologadas por empresa (alimenta Maestro y Avance ERP).
Auto-recepción de trasladosal confirmar entrega + barrido cada 30 minTraslados a bodegas "solo destino" > 24 h en tránsito pasan a POR_VERIFICAR.
Chequeo de integridadal arranque + cada 6 horasBusca huérfanos, transitorios colgados, tránsitos vencidos y negativos anómalos; publica el reporte en Configuración.
Respaldodiario 03:00Dump completo de PostgreSQL + código, retención de 7 días.

Modelo de datos principal

EntidadRol en el modelo
CompanyTenant: razón social, plan, perfil de impresión/etiquetas, configuración de integraciones.
Warehouse → Zone → LocationBodega física en 3 niveles; ubicaciones con código escaneable, clase ABC y bloqueo. Flags por bodega: inventario negativo, "Opera BodegApp".
ProductMaestro por empresa: unidad, seriales, fraccionable, captura de datos, foto, precio y stock ERP sincronizados, papelera (soft-delete).
InventoryBatch (B-)La etiqueta: lote con genealogía (padre/hijos de fraccionamiento) y serial opcional.
StockItemEl saldo: cantidad + estado + ubicación de cada etiqueta.
StockMovementEl Kardex: movimiento inmutable con tipo, cantidad, origen/destino, usuario y documento. Sobrevive a la eliminación de su etiqueta.
Manifest + ItemsEl documento de trabajo con su flujo de estados configurable y el vínculo etiqueta↔pallet.
TransportDocument + StopsLa ruta: chofer, vehículo, paradas con ventana/prioridad/ETA, evidencias de entrega y token público de tracking.
ApiKey · AppSetting · AuditsIntegraciones con hash y scopes; configuración por empresa; auditorías de productos y eliminaciones.

Decisiones de diseño (el porqué)

  • On-premise primero, con verificación: en operaciones sensibles (correcciones, reversas, recepciones) se escribe primero la base compartida y se verifica el resultado esperado; si no calza, nada se modifica. Elimina de raíz las divergencias silenciosas.
  • Kardex append-only: deshacer = movimiento inverso. El historial de cualquier SKU siempre suma cero contra la realidad — auditable por construcción.
  • Idempotencia: las operaciones del chofer offline y las reversas usan guardas de estado — reintentar una operación jamás la duplica.
  • Diseño B de traslados: la mercadería pertenece a su bodega de origen hasta la recepción física en destino; el destino viaja en el manifiesto, no en el stock.
  • Taxonomía canónica de KPIs: una sola clasificación de movimientos para todos los indicadores, que excluye ruido (estados, correcciones, cargas del sistema, datos de prueba).
  • Estados desconocidos = no disponibles: cualquier estado fuera de STOCK/EN_PALLET queda automáticamente fuera del stock vendible — el sistema falla hacia el lado seguro.

Mapa funcional (módulo → capa de datos)

Recepción e Inventario Inicial crean etiquetas · Putaway y Fraccionamiento las reorganizan · Picking/Packing/Despacho las comprometen a un manifiesto · Traslados y Ruteo las mueven entre bodegas y hacia clientes · Recepción de Traslado y las Reversas las devuelven a disponibilidad · Kardex, Consulta de Stock y KPIs las observan sin tocarlas · Corrección e Integridad las gobiernan.

Referencia de Estados

Estados del stock (bultos B-)

Criterio único de "stock vigente": todos los estados de esta tabla salvo CERRADO, DESPACHADO y ANULADO se consideran stock vigente y se muestran —con su estado a la vista— en Consulta de Stock, Direccionamiento 3D, ocupación por bodega y Avance ERP. Los tres excluidos ya no son inventario: se consultan en el Kardex y en los manifiestos.

EstadoSignificado¿Disponible?
STOCKDisponible en su ubicación.
EN_PALLETDisponible, agrupado en un pallet.
EN_PREPARACIONPickeado hacia un pallet de salida; aún en bodega de origen.No
EN_PICKING / EN_PACKINGEn proceso dentro de la estación.No
EN_TRANSITOViajando entre bodegas (destino en el manifiesto).No
POR_VERIFICARAuto-recepcionado en sucursal; pendiente de conteo físico.No
DESPACHADO / ENTREGADOSalió hacia el cliente / entregado con evidencia.No
CERRADO / ANULADOCiclo terminado / anulado por reversa (evidencia histórica).No

Estados del manifiesto (MN-)

Intermedios (la tubería): LISTO_PARA_PICKING → EN_PICKING → LISTO_PARA_PACKING → PACKING → DESPACHO → EN_TRANSITO / LISTO_PARA_RETIRO — configurable por empresa y tipo de movimiento. Retroceder es siempre vía reversa supervisada (↩️), un paso a la vez.

Finales (cierran el ciclo y son la base de medición):

Estado finalCierra el flujo de
ENTREGADODespacho y Retiro en Tienda (con prueba de entrega).
RECIBIDOTraslado entre Bodegas (recepción verificada en destino).
CERRADORecepción Inbound y movimientos "Otro".
ANULADOCancelación (ej. manifiesto vacío cancelado en picking o packing). Se excluye de los KPIs de servicio.

Importante: DESPACHADO es un estado del stock (así quedan los bultos que salieron), nunca de un manifiesto — el intermedio del manifiesto es DESPACHO. Cancelar un manifiesto sin bultos ni SKUs lo deja ANULADO como evidencia (el folio no se reutiliza).

Un documento final es evidencia: no se modifica

Alcanzado un estado final (ENTREGADO, RECIBIDO, CERRADO, ANULADO) el manifiesto queda inmutable por todas las vías: no admite avanzar ni retroceder de estado, no se le agregan ni quitan ítems, no recibe datos de transporte, no se re-despacha, no se re-entrega y no se elimina — ni aunque haya quedado sin ítems. Corregir algo de un documento cerrado se hace emitiendo un documento nuevo, nunca reescribiendo el anterior.

La única excepción es un rompe-vidrio de SUPERADMIN para corregir datos en una emergencia, y no es silencioso: queda registrado en el log del servidor y en el historial del propio manifiesto. La eliminación no admite excepción alguna.

¿Quieres ver todo esto operando en tu bodega?
Agenda una demostración en vivo y te mostramos BodegApp funcionando con un caso como el tuyo — sin compromiso.
📅 Agenda una demo
o escríbenos a hablemos@bodegapp.cl