Escáner
Tipos de escaneo soportados
Keirost integra escaneo de codigos de barras en dos modalidades:
| Tipo | Descripcion | Dispositivos |
|---|---|---|
HID | lector USB/Bluetooth que actua como teclado | Zxing, Symbol, Honeywell |
CAMERA | camara del dispositivo usando ZXing | Smartphone, tablet, portatil |
Modo HID (lector de barras USB/Bluetooth)
Los lectores HID actuan como un teclado: al leer un codigo,打字 lo que el escaner lee y presionan Enter.
Keirost intercepta el evento de teclado rapido en los campos de busqueda para:
- Detectar que se ha escaneado (caracteres rapidos + Enter)
- Buscar el articulo por codigo de barras
- Mostrar el resultado
Configuracion
GET /api/config/scannerPATCH /api/config/scanner{ "hid_enabled": true, "hid_min_chars": 6, "hid_max_gap_ms": 50, "hid_suffix": "Enter"}| Campo | Descripcion |
|---|---|
hid_enabled | Habilitar modo HID |
hid_min_chars | Minimo de caracteres para considerar escaneo (evitar falso positivo en escritura manual) |
hid_max_gap_ms | Intervalo maximo entre teclas para considerar escaneo rapido |
hid_suffix | Tecla final (normalmente Enter, puede ser Tab) |
Modo camara (ZXing)
Para dispositivos moviles o portatiles con camara, Keirost abre un modal con la camara para decodificar codigos de barras en tiempo real.
Codigos soportados
| Tipo | Descripcion |
|---|---|
EAN-13 | Articulos de comercio estandar |
EAN-8 | Articulos pequenos |
UPC-A | Sistema estadounidense |
Code 128 | Codificacion densa, usado en logistica |
Code 39 | Industrial, catalogo |
QR | Códigos bidimensionales |
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 articulos (Items)
Desde el listado de articulos o el detalle de un documento, al escanear un codigo de barras:
- Se busca un articulo con
barcode == scanned_code - Si se encuentra, se anade una linea al documento (o se incrementa qty si ya existe)
- Si no se encuentra, se ofrece crear un nuevo articulo con ese codigo
Flujo en documento
Escanear codigo barras ↓Buscar articulo por barcode ↓ ├─ Encontrado: anadir linea (qty = 1 o qty++) └─ No encontrado: Dialog "¿Crear articulo?"Duplicado rapido
Al escanear un codigo ya existente en una linea del documento:
- Si el articulo ya esta en el documento → qty++
- Si es un codigo diferente → nueva linea
Escaneo en documentos
En pedidos y albaranes
Al escanear un codigo en la vista de edicion de documento:
- Se busca el articulo por
barcode - Se anade como nueva linea con cantidad 1
- El cursor vuelve al campo de escaneo para seguir anadiendo
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)
Desde el modulo de inventario, escanear un articulo muestra:
- Stock actual por almacen
- Ultimo movimiento
- Ubicacion (si esta configurado)
API de escaneo
Buscar por codigo 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 articulo desde codigo 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
La driver app permite escanear el codigo de barras de un paquete para verificar que coincide con el envio 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 codigo no corresponde al envio, devuelve error.
Resumen de endpoints
| Metodo | Ruta | Descripcion |
|---|---|---|
| GET | /api/config/scanner | Ver config del escaner |
| PATCH | /api/config/scanner | Guardar config |
| GET | /api/scanner/lookup | Buscar articulo por barcode |
| POST | /api/logistics/driver/verify-package | Verificar paquete en driver app |