Volver al blog
4 de octubre de 2026 · 8 min de lectura · Inventario, PWA

Cómo digitalizar un almacén con códigos QR y de barras: guía por etapas

Muchos almacenes siguen llevando el inventario en hojas de cálculo, libretas o en la memoria de quien lleva años ahí. Funciona, hasta que crece el número de productos, entra más gente a operar o alguien necesita saber a las 5 de la tarde cuánto hay realmente de un artículo que caduca el mes que viene. Digitalizar con escaneo no es solo «poner códigos QR»: es decidir cómo se identifica cada producto, qué se registra en cada movimiento y quién puede cambiar qué.

Esta guía resume las decisiones que tomé al construir un sistema de almacén para insumos médicos, una PWA con FastAPI y PostgreSQL, y que aplican a cualquier almacén que quiera pasar del papel al escaneo.

1. Empieza por el catálogo, no por el escáner

El error más frecuente es empezar a escanear sin tener un catálogo limpio. Si el mismo producto existe con tres nombres distintos, escanear solo automatiza el desorden. Antes de comprar lectores o imprimir etiquetas, define:

2. Qué código usar: el del fabricante o uno propio

Hay dos caminos y suelen convivir:

3. Modela los movimientos, no solo el stock

Un inventario digital confiable no guarda únicamente «cuántos hay». Guarda cada movimiento que explica por qué hay esa cantidad. Con cuatro tipos se cubre casi todo:

Cada movimiento guarda quién lo hizo, cuándo, en qué almacén y, si aplica, lote y fecha de caducidad. Ese historial es lo que permite auditar y rastrear cualquier diferencia.

Stock materializado y concurrencia

Para que la consulta de existencias sea instantánea, mantén una tabla de stock actual por producto y almacén, además del historial de movimientos. La contrapartida es que dos personas pueden registrar una salida del mismo producto al mismo tiempo. Si ambas leen la misma cantidad y luego escriben, una de las dos actualizaciones se pierde. La solución en PostgreSQL es bloquear la fila de stock mientras se registra el movimiento:

from sqlalchemy import select

stock = db.execute(
    select(StockAlmacen)
    .where(StockAlmacen.item_id == item_id,
           StockAlmacen.almacen_id == almacen_id)
    .with_for_update()          # SELECT ... FOR UPDATE
).scalar_one_or_none()

if stock is None or stock.cantidad < cantidad:
    raise HTTPException(400, "Stock insuficiente")

stock.cantidad -= cantidad
db.add(Movimiento(tipo="salida", item_id=item_id, ...))
db.commit()

Una restricción única sobre (item_id, almacen_id) garantiza que nunca existan dos filas de stock para el mismo producto en el mismo almacén.

4. Lote y caducidad: lo que más duele cuando falta

En insumos médicos, alimentos o cualquier producto perecedero, saber el lote y la caducidad no es opcional. Registrarlos en cada movimiento permite surtir primero lo que caduca primero (PEPS/FEFO), detectar producto próximo a vencer y rastrear un lote específico si hay un retiro. Si el código escaneado ya los trae, el formulario se autocompleta; si no, se capturan una sola vez en la recepción.

5. Stock mínimo y reabastecimiento

Con movimientos y stock confiables, el siguiente paso es dejar de reaccionar. Define un stock mínimo por producto y almacén, y resalta en el inventario lo que está por debajo. A partir de ahí, el sistema puede sugerir una orden de compra por el déficit de cada producto.

Un flujo de órdenes de compra sencillo y suficiente tiene estos estados: borrador → enviada → aprobada → recibida parcial → recibida. La recepción parcial por línea es la que más se subestima: casi nunca llega todo de una vez, y poder recibir 40 de 100 piezas y dejar el resto pendiente evita tener que editar la orden a mano.

6. Roles: quién captura y quién corrige

Un almacén digital falla cuando cualquiera puede cambiar cualquier cosa. Separa al menos dos niveles:

Los ajustes son especialmente sensibles porque modifican el stock sin un movimiento físico detrás; conviene que queden reservados a quien supervisa. Cómo estructurar esto técnicamente (tokens y permisos por rol) lo explico en JWT + RBAC en FastAPI.

7. Dispositivos: el celular que ya tienen

No hace falta comprar terminales dedicadas para empezar. Una PWA abre la cámara del celular y escanea sin instalar una app nativa. Hay dos detalles prácticos:

8. Implementarlo por etapas

Intentar cambiar todo el almacén de golpe suele terminar en rechazo del equipo. Un orden que funciona:

  1. Catálogo: limpiar y cargar productos con su SKU y alias.
  2. Inventario inicial: un conteo físico completo que sirva como punto de partida, registrado como ajuste inicial.
  3. Entradas y salidas con escaneo en un solo almacén como piloto.
  4. Mínimos y alertas una vez que los datos de stock sean confiables.
  5. Órdenes de compra y recepción.
  6. Reportes para dirección (movimientos por periodo, existencias por almacén) y, después, dashboards.
  7. Resto de almacenes, con lo aprendido en el piloto.

Errores comunes

¿Sistema a la medida o solución comercial?

Un ERP o WMS comercial tiene sentido si tu operación es grande, estándar y necesitas integraciones listas. Un sistema a la medida compensa cuando tu proceso tiene particularidades (trazabilidad por lote, reglas sanitarias, flujos de aprobación propios), cuando quieres ser dueño de tus datos o cuando el costo por usuario de una licencia comercial no se justifica. Lo importante es decidirlo con claridad antes de empezar, no después de haber capturado seis meses de datos.

¿Quieres digitalizar tu almacén o inventario?

Desarrollo sistemas de inventario con escaneo QR y de barras, roles, órdenes de compra y reportes, adaptados a la operación de tu negocio.

Solicitar una propuesta