Ir al contenido

Escáner

Keirost integra escaneo de códigos de barras en dos modalidades:

Tipo Descripción Dispositivos
HID lector USB/Bluetooth que actúa como teclado Zxing, Symbol, Honeywell
CAMERA cámara del dispositivo usando ZXing Smartphone, tablet, portatil

Los lectores HID actúan como un teclado: al leer un código, teclean lo que el escáner lee y pulsan Enter.

Keirost intercepta el evento de teclado rápido en los campos de búsqueda para:

  1. Detectar que se ha escaneado (caracteres rápidos + Enter)
  2. Buscar el artículo por código de barras
  3. Mostrar el resultado
GET /api/config/scanner
PATCH /api/config/scanner
{
"hid_enabled": true,
"hid_min_chars": 6,
"hid_max_gap_ms": 50,
"hid_suffix": "Enter"
}
Campo Descripción
hid_enabled Habilitar modo HID
hid_min_chars Mínimo de caracteres para considerar escaneo (evitar falso positivo en escritura manual)
hid_max_gap_ms Intervalo máximo entre teclas para considerar escaneo rápido
hid_suffix Tecla final (normalmente Enter, puede ser Tab)

Para dispositivos móviles o portatiles con cámara, Keirost abre un modal con la cámara para decodificar códigos de barras en tiempo real.

Tipo Descripción
EAN-13 Artículos de comercio estandar
EAN-8 Artículos pequenos
UPC-A Sistema estadounidense
Code 128 Codificación densa, usado en logística
Code 39 Industrial, catalogo
QR Códigos bidimensionales
POST /api/scanner/scan

En la interfaz web:

<BarcodeCameraModal
onScan={(barcode) => handleBarcodeScanned(barcode)}
onClose={() => setScanning(false)}
formats={['EAN_13', 'CODE_128', 'QR_CODE']}
/>

Desde el listado de artículos o el detalle de un documento, al escanear un código de barras:

  1. Se busca un artículo con barcode == scanned_code
  2. Si se encuentra, se anade una línea al documento (o se incrementa qty si ya existe)
  3. Si no se encuentra, se ofrece crear un nuevo artículo con ese código
Escanear codigo barras
Buscar articulo por barcode
├─ Encontrado: anadir linea (qty = 1 o qty++)
└─ No encontrado: Dialog "¿Crear articulo?"

Al escanear un código ya existente en una línea del documento:

  • Si el artículo ya esta en el documento → qty++
  • Si es un código diferente → nueva línea

Al escanear un código en la vista de edición de documento:

  • Se busca el artículo por barcode
  • Se anade como nueva línea con cantidad 1
  • El cursor vuelve al campo de escaneo para seguir anadiendo

Si duplicated_from_id esta configurado:

Escanear codigo barras
Buscar en documento origen
├─ Encontrado en origen: anadir linea con qty++
└─ No encontrado: buscar en catalogo de articulos

Desde el modulo de inventario, escanear un artículo muestra:

  • Stock actual por almacén
  • Último movimiento
  • Ubicación (si esta configurado)

GET /api/scanner/lookup?barcode=841234567890
Authorization: Bearer <token>
{
"found": true,
"item": {
"id": "item_001",
"name": "Producto A",
"sku": "PROD-A",
"barcode": "841234567890",
"price": 29.90,
"stock": { "total": 150, "by_warehouse": [] }
}
}
POST /api/items
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Articulo nuevo (843456789012)",
"sku": "AUTO-843456789012",
"barcode": "843456789012",
"price": 0,
"type": "goods"
}

La driver app permite escanear el código de barras de un paquete para verificar que coincide con el envío esperado:

POST /api/logistics/driver/verify-package
Authorization: Bearer <token>
Content-Type: application/json
{
"shipment_id": "ship_001",
"barcode": "PKG-001"
}

Respuesta:

{
"verified": true,
"package": { "barcode": "PKG-001", "description": "Pedido 1234" }
}

Si el código no corresponde al envío, devuelve error.


Método Ruta Descripción
GET /api/config/scanner Ver config del escáner
PATCH /api/config/scanner Guardar config
GET /api/scanner/lookup Buscar artículo por barcode
POST /api/logistics/driver/verify-package Verificar paquete en driver app