Manual de Usuario
BodegApp — El WMS chileno 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.
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.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.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.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.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.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.
- 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.

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.
| Rol | Para quién | Qué puede hacer |
|---|---|---|
| ADMIN | Gerente / jefe de operaciones | Todo lo de su(s) empresa(s): usuarios, configuración, corrección de inventario, reversas, todos los módulos. |
| SUPERVISOR | Jefe de turno | Toda la operación (incluye Catálogo y Mi Ruta) + las reversas operativas. Sin acceso a Configuración. |
| OPERATOR | Operario de bodega | Operación diaria: recepción, picking, packing, putaway, consultas. |
| CHOFER | Conductor | Solo su consola "Mi Ruta": entregas, evidencias, navegación. |
⭐ 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ído | Patrón | Qué hace el sistema |
|---|---|---|
| Etiqueta de SKU | B-00000000 o ID numérico | Carga el bulto: picking, putaway, consulta, reversa. |
| Pallet | PL-00000000 | Opera el bulto completo: recepción de traslado, putaway de pallet, consulta. |
| SKU / código de barras | Código del maestro o EAN | Identifica el producto en recepción y búsquedas. |
| N° de serie genérico | Definido por producto | Resuelve el SKU automáticamente (recepción y maestro). |
| Serial del fabricante | Libre (captura de datos) | Registra el serial único de la unidad para garantía y trazabilidad. |
| Ubicación | Etiqueta de rack | Confirma el destino en putaway. |
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)
- Toca el ícono de impresora 🖨️ en la barra superior (junto al selector de empresa): se abre el selector de impresoras.
- Presiona "📡 Escanear Dispositivos Bluetooth": el navegador muestra las impresoras al alcance; elige la tuya y empareja (una sola vez por dispositivo).
- 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.

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ámetro | Opciones | Cuándo usar |
|---|---|---|
| Tipo de impresora | ESC/POS (térmica) | El estándar de las térmicas portátiles y de mesón. |
| Conexión | Bluetooth BLE · USB/Red | Bluetooth para operación móvil; USB para estaciones fijas. |
| Tamaño de etiqueta | 54×84 mm (configurable) | Debe calzar con el rollo instalado. |
| Fin de etiqueta | corte · gap · avance (feed) | Corte para impresoras con guillotina; gap para rollos pre-troquelados; avance con N líneas configurables para modelos sin corte. |
| Modo raster | activado / desactivado | El 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.
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
- Menú → Recepción. Selecciona bodega y tipo de ingreso.
- Escanea o busca el SKU (también puedes escanear su N° de serie genérico si el producto lo tiene configurado en el maestro).
- Indica cantidad. Si el producto exige captura de datos, escanea el serial único del fabricante de cada unidad (garantía y trazabilidad unitaria).
- Confirma: se crea la etiqueta
B-y se imprime en la térmica (ESC/POS por Bluetooth/USB, formato configurable por empresa). - El stock queda en la ubicación genérica
00-00-00de la bodega, listo para putaway.
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.
- 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.
- 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.
- 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.
- 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.
- 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".
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).
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.
- Menú → Almacenamiento. Escanea la etiqueta del bulto (B- o PL-).
- Escanea la etiqueta de la ubicación física destino (ej:
A-01-02). - Confirmado: el bulto sale de la genérica y el KPI de "stock sin ubicar" baja en tiempo real.
PUTAWAY_PALLET en el Kardex con origen y destino. La clasificación ABC por rotación está disponible por ubicación.Picking Manual
Extrae exactamente lo que el documento pide, con validación de saldo, seriales y bodega — y con la libertad de deshacer al instante si algo se escaneó de más.
- Menú → Picking Manual. Define el documento (tipo de movimiento, folio, bodega, destino si es traslado).
- Escanea el bulto origen (B- o ID) y la cantidad a extraer hacia el pallet de salida.
- 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.
- ¿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.
- Al finalizar, el picking se convierte en manifiesto y avanza a packing.
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.
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.
- Menú → Packing: la cola muestra los manifiestos LISTO_PARA_PACKING.
- Escanea cada etiqueta B- del manifiesto y asígnala a un pallet PL- (se genera e imprime su etiqueta madre con resumen).
- ¿Un bulto es muy grande? Fracciona en packing: divide un B- en dos sin salir de la estación (con reversa disponible).
- Cierra el packing: el manifiesto avanza a DESPACHO.
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.
- Menú → Despacho: manifiestos en estado DESPACHO listos para salir.
- Ingresa los datos de transporte (patente, conductor, RUT, transportista — se recuerdan para reutilizar).
- Confirma: los bultos pasan de EN_PREPARACION a su estado final — EN_TRANSITO (traslados) o DESPACHADO (despachos y retiros) — y se disparan las notificaciones al cliente.
dispatch-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
| Etapa | Estado del bulto | Bodega |
|---|---|---|
| Picking del traslado | EN_PREPARACION | Origen |
| Despacho (datos transporte) | EN_TRANSITO | Origen |
| Recepción escaneada en destino | STOCK | Destino (recién aquí cambia) |
Recepción de Traslado
- Menú → Recepción de Traslado en la bodega destino.
- Escanea el QR del bulto (PL-): el sistema resuelve el destino desde el manifiesto, deja el stock disponible en la genérica y cierra el manifiesto como RECIBIDO cuando llega el último bulto.
- 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.
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.
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.
- Menú → Fraccionamiento. Escanea el bulto padre (el producto debe estar marcado fraccionable en el maestro).
- Indica la cantidad a separar y la ubicación destino; personaliza la etiqueta (color, subtítulo, QR).
- Se genera el B- hijo vinculado al padre. La reversa devuelve la cantidad al padre y anula el hijo conservando su historial.
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.
- Menú → Inventario Cíclico: crea una sesión de conteo (por bodega, ubicación o SKU).
- Cuenta físico vs. sistema; las diferencias se muestran al cerrar.
- 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%).
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.
- Menú → Consulta de Stock. Busca por SKU, nombre, etiqueta B- o bulto PL-.
- El resumen agrupa por bodega; toca una tarjeta para el detalle de bultos y ubicaciones.
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.

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.
- Menú → Kardex. Busca por SKU, nombre, etiqueta B-, bulto PL-, tipo de movimiento o documento.
- Cada fila muestra tipo, cantidad, bodega/ubicación origen y destino, usuario, fecha y notas.

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.

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.
- Filtros globales: período (por defecto 7 días), bodega y empresa — el consolidado multi-empresa es el default si tienes acceso a varias.
- Pasa el mouse por el badge ⓘ de cualquier tarjeta o gráfico para ver qué mide y su fórmula exacta.

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.
- Dashboard → 🎯 Avance ERP. Filtra por bodega, familia o SKU.
- Tiles: avance global SKU×bodega, SKUs 100% cuadrados, unidades y valorización BodegApp vs ERP (valores resumidos en K/M).
- Barras duales por bodega, % cuadrado por familia (peor primero) y tabla de mayores diferencias valorizadas.
- Exporta el detalle a Excel (columnas separadas de stock BodegApp y ERP), con opción de incluir SKUs sin diferencias.
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.
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
- Menú → Transporte y Ruteo. Toma manifiestos despachables de la cola y créales un documento de transporte con chofer y vehículo.
- Define por parada: ventana horaria y prioridad (normal/alta/urgente).
- 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).
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.
lastLat/lastLng) con actualización continua. Proveedor de optimización externo conectable por API key.
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.
- El chofer entra con su usuario (rol CHOFER aterriza directo en Mi Ruta) y activa el GPS.
- Cada parada trae: dirección, contacto (botón llamar), Waze y WhatsApp con iconos oficiales, y el botón "Llegué" (check-in con hora).
- Entregar: nombre de quien recibe + foto de evidencia + firma. No entregar: motivo tipificado (cliente ausente, dirección incorrecta, rechazado, sin acceso, fuera de horario) + foto.
- ¿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 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).
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.
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.
- Configuración → 💬 WhatsApp (por empresa): URL del conector, API key, canal, número de contacto y las 3 plantillas.
- Los envíos se disparan solos: al iniciar ruta, al entregar y al fallar — siempre "best-effort" (jamás bloquean la operación).
- Si el cliente responde, su mensaje queda anotado en la parada y genera la alerta 💬 en la torre de control.
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, proveedor, familia, código de barras, serial genérico, fraccionable, captura de datos, stock mín/máx, foto y PDFs adjuntos.
- 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.
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.
| Reversa | Qué hace | Dónde |
|---|---|---|
| Deshacer picking | Devuelve 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 ingreso | Etiqueta ingresada por error, disponible y sin historia → queda ANULADA (nunca se borra). | Monitor |
| Anular recepción de traslado | Bulto escaneado por error (sin putaway) → vuelve a EN_TRÁNSITO junto con su manifiesto. | Monitor |
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.
- Configuración → 🧹 Registros Erróneos. Busca por B-, PL-, SKU o descripción (la grilla muestra la bodega de cada registro).
- Revisa el detalle (stock, movimientos, manifiestos, genealogía) y elimina de raíz.
- Si el registro está en estado sensible (en tránsito, despachado, en manifiesto abierto) el sistema lo advierte y sugiere la reversa como vía correcta antes de permitir continuar.
- El historial de eliminaciones se consulta bajo demanda con filtros (código/SKU/usuario/fechas) y exporta a CSV.
CORRECCION_INVENTARIO con la cantidad negativa — el saldo del SKU siempre reconcilia.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.

Configuración
| Sección | Qué gobiernas |
|---|---|
| Empresas | Razones sociales, planes y límites, datos de facturación, impresoras y formato de etiquetas por empresa. |
| Bodegas | Creació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 Perfiles | Altas, roles, acceso por empresa y bodega, perfiles de menú personalizados por empresa. |
| Flujos de Manifiesto | Secuencia de estados por tipo de movimiento, configurable por empresa. |
| Conector, plantillas y número de contacto por empresa. | |
| 🛒 Fotos WooCommerce | Credenciales de la tienda e importación de imágenes al maestro. |
| 🔌 API Integraciones | API keys externas (lectura) para sistemas de venta: productos, stock dual, bodegas, usuarios. |
| ✉️ Correo | Proveedor de envío (Resend/SMTP) para manifiestos y notificaciones. |
| 🧹 Registros Erróneos | Corrección de inventario, historial de eliminaciones e integridad de datos. |
| Display Público | Pantalla de TV con manifiestos activos, por token. |

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 y stock ERP), 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
| Capa | Tecnología | Responsabilidad |
|---|---|---|
| Presentación | Aplicación web SPA (HTML5/JS), responsiva, sin instalación | Todas las pantallas, escaneo QR por cámara, impresión Web Bluetooth, mapas (Leaflet/OSM), gráficos (Chart.js), operación offline del chofer (IndexedDB). |
| API | Node.js + Express, ~180 endpoints REST | Reglas de negocio, máquina de estados, validaciones, autenticación JWT, permisos por empresa/bodega/módulo, rate-limiting en endpoints públicos. |
| Datos | PostgreSQL (Prisma ORM) + MySQL on-premise | PostgreSQL: modelo relacional completo del WMS. MySQL APP_STOCK: base histórica compartida con los sistemas legados — escritura dual en cada operación. |
| Infraestructura | Docker Compose · HTTPS (Let's Encrypt) · nginx | Contenedores 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)
- Escaneo → la SPA envía la operación al API con el token del usuario.
- Validación → el API verifica permisos (empresa + bodega + módulo), estado del bulto y saldo.
- 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. - Kardex → se registra el movimiento con usuario, origen, destino y documento (append-only).
- Convergencia → los ciclos de sincronización reconcilian cualquier desfase residual entre bases.
Ciclos automáticos del sistema
| Proceso | Frecuencia | Qué hace |
|---|---|---|
| Sincronización de stock | 30 segundos | Bidireccional 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 ERP | 5 minutos | Importa precio de lista y stock ERP por bodega desde las vistas homologadas por empresa (alimenta Maestro y Avance ERP). |
| Auto-recepción de traslados | al confirmar entrega + barrido cada 30 min | Traslados a bodegas "solo destino" > 24 h en tránsito pasan a POR_VERIFICAR. |
| Chequeo de integridad | al arranque + cada 6 horas | Busca huérfanos, transitorios colgados, tránsitos vencidos y negativos anómalos; publica el reporte en Configuración. |
| Respaldo | diario 03:00 | Dump completo de PostgreSQL + código, retención de 7 días. |
Modelo de datos principal
| Entidad | Rol en el modelo |
|---|---|
Company | Tenant: razón social, plan, perfil de impresión/etiquetas, configuración de integraciones. |
Warehouse → Zone → Location | Bodega física en 3 niveles; ubicaciones con código escaneable, clase ABC y bloqueo. Flags por bodega: inventario negativo, "Opera BodegApp". |
Product | Maestro 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. |
StockItem | El saldo: cantidad + estado + ubicación de cada etiqueta. |
StockMovement | El Kardex: movimiento inmutable con tipo, cantidad, origen/destino, usuario y documento. Sobrevive a la eliminación de su etiqueta. |
Manifest + Items | El documento de trabajo con su flujo de estados configurable y el vínculo etiqueta↔pallet. |
TransportDocument + Stops | La ruta: chofer, vehículo, paradas con ventana/prioridad/ETA, evidencias de entrega y token público de tracking. |
ApiKey · AppSetting · Audits | Integraciones 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-)
| Estado | Significado | ¿Disponible? |
|---|---|---|
| STOCK | Disponible en su ubicación. | Sí |
| EN_PALLET | Disponible, agrupado en un pallet. | Sí |
| EN_PREPARACION | Pickeado hacia un pallet de salida; aún en bodega de origen. | No |
| EN_PICKING / EN_PACKING | En proceso dentro de la estación. | No |
| EN_TRANSITO | Viajando entre bodegas (destino en el manifiesto). | No |
| POR_VERIFICAR | Auto-recepcionado en sucursal; pendiente de conteo físico. | No |
| DESPACHADO / ENTREGADO | Salió hacia el cliente / entregado con evidencia. | No |
| CERRADO / ANULADO | Ciclo terminado / anulado por reversa (evidencia histórica). | No |
Estados del manifiesto (MN-)
LISTO_PARA_PICKING → EN_PICKING → LISTO_PARA_PACKING → PACKING → DESPACHO → EN_TRANSITO / LISTO_PARA_RETIRO → ENTREGADO / RECIBIDO → CERRADO — configurable por empresa y tipo de movimiento. Retroceder es siempre vía reversa supervisada (↩️), un paso a la vez.