Escáner
Tipos de escaneo soportados
Sección titulada «Tipos de escaneo soportados»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 |
Modo HID (lector de barras USB/Bluetooth)
Sección titulada «Modo HID (lector de barras USB/Bluetooth)»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:
- Detectar que se ha escaneado (caracteres rápidos + Enter)
- Buscar el artículo por código de barras
- Mostrar el resultado
Configuración
Sección titulada «Configuración»GET /api/config/scannerPATCH /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) |
Modo cámara (ZXing)
Sección titulada «Modo cámara (ZXing)»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.
Códigos soportados
Sección titulada «Códigos soportados»| 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 |
Abrir modal de escaneo
Sección titulada «Abrir modal de escaneo»POST /api/scanner/scanEn la interfaz web:
<BarcodeCameraModal onScan={(barcode) => handleBarcodeScanned(barcode)} onClose={() => setScanning(false)} formats={['EAN_13', 'CODE_128', 'QR_CODE']}/>Escaneo en artículos (Items)
Sección titulada «Escaneo en artículos (Items)»Desde el listado de artículos o el detalle de un documento, al escanear un código de barras:
- Se busca un artículo con
barcode == scanned_code - Si se encuentra, se anade una línea al documento (o se incrementa qty si ya existe)
- Si no se encuentra, se ofrece crear un nuevo artículo con ese código
Flujo en documento
Sección titulada «Flujo en documento»Escanear codigo barras ↓Buscar articulo por barcode ↓ ├─ Encontrado: anadir linea (qty = 1 o qty++) └─ No encontrado: Dialog "¿Crear articulo?"Duplicado rápido
Sección titulada «Duplicado rápido»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
Escaneo en documentos
Sección titulada «Escaneo en documentos»En pedidos y albaranes
Sección titulada «En pedidos y albaranes»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
En facturas (con duplicado)
Sección titulada «En facturas (con duplicado)»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 articulosEn inventario (stock)
Sección titulada «En inventario (stock)»Desde el modulo de inventario, escanear un artículo muestra:
- Stock actual por almacén
- Último movimiento
- Ubicación (si esta configurado)
API de escaneo
Sección titulada «API de escaneo»Buscar por código de barras
Sección titulada «Buscar por código de barras»GET /api/scanner/lookup?barcode=841234567890Authorization: Bearer <token>{ "found": true, "item": { "id": "item_001", "name": "Producto A", "sku": "PROD-A", "barcode": "841234567890", "price": 29.90, "stock": { "total": 150, "by_warehouse": [] } }}Crear artículo desde código escaneado
Sección titulada «Crear artículo desde código escaneado»POST /api/itemsAuthorization: Bearer <token>Content-Type: application/json
{ "name": "Articulo nuevo (843456789012)", "sku": "AUTO-843456789012", "barcode": "843456789012", "price": 0, "type": "goods"}Escaneo en la Driver App
Sección titulada «Escaneo en la Driver App»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-packageAuthorization: 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.
Resumen de endpoints
Sección titulada «Resumen de endpoints»| 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 |