{{ z.name }}
{{ z.bin_count }} bins
Cargando zonas...
{{ b.code }}
{{ b.zone_name }}
{{ b.zone_code }}
Sin resultados
{{ currentBin.code }}
{{ currentBin.zone_name }}
Contenido
Bin vacio
{{ inv.item_name }}
{{ inv.sku }}
{{ fmtQty(inv.quantity) }}
{{ it.name }}
⚠ Unidad: {{ it.display_unit }} (1 {{ it.display_unit }} = {{ fmtQty(it.conversion_factor) }} {{ it.zoho_unit }} en Zoho)
{{ it.sku }}
UC: {{ fmtQty(it.stock_ubic) }} {{ it.has_conversion ? it.display_unit : '' }}
VH: {{ fmtQty(it.stock_virtual) }}
Sin stock
Busca un producto por nombre, SKU o barcode
{{ currentItem.name }}
SKU: {{ currentItem.sku }}
Unidad: {{ currentItem.display_unit || currentItem.unit }}
CB: {{ currentItem.barcode || '-' }}
Conversion: 1 {{ currentItem.display_unit }} = {{ fmtQty(currentItem.conversion_factor) }} {{ currentItem.zoho_unit }} en Zoho
{{ fmtQty(total) }}
{{ wh.replace('_',' ') }}
Stock por ubicación
Sin stock en bins
{{ bin.bin_code }}
{{ bin.zone_name }}
{{ bin.warehouse.replace('_',' ') }}
{{ fmtQty(bin.quantity) }}
{{ soStats.total_pending || 0 }}
Pendientes
{{ soStats.total_picking || 0 }}
Picking
{{ soStats.total_packed || 0 }}
Empacados
{{ soStats.total_shipped || 0 }}
Enviados
{{ o.so_number }}
{{ o.customer_name }}
{{ soStatusLabel(o.wms_status) }}
{{ o.total_items }} items
{{ o.order_date }}
Envio: {{ o.expected_shipment_date }}
{{ o.delivery_method }}
No hay pedidos {{ soFilter ? 'con este status' : '' }}
{{ currentSO.so_number }}
{{ currentSO.customer_name }}
{{ soStatusLabel(currentSO.wms_status) }}
Fecha: {{ currentSO.order_date }}
Envio: {{ currentSO.expected_shipment_date }}
{{ currentSO.delivery_method }}
{{ currentSO.notes }}
En picking...
Empacado ✓
| SKU |
Producto |
Pedido |
Picked |
Packed |
| {{ item.sku }} |
{{ item.item_name }} |
{{ fmtQty(item.quantity_ordered) }} {{ item.unit }} |
{{ fmtQty(item.quantity_picked) }}
|
{{ fmtQty(item.quantity_packed) }}
|
Tareas de picking
({{ pickTasks.filter(t=>t.status==='completed').length }}/{{ pickTasks.length }})
| # |
Bin |
SKU |
Producto |
Cant |
Status |
| {{ t.bin_order }} |
{{ t.bin_code }} |
{{ t.sku }} |
{{ t.item_name }} |
{{ fmtQty(t.quantity_requested) }} |
✓ {{ fmtQty(t.quantity_picked) }}
Picking...
Pendiente
|
Cargando dashboard...
{{ countDash.kpis.inventory_accuracy }}%
Accuracy
{{ countDash.kpis.discrepancy_rate }}%
Discrepancia
{{ fmtQty(countDash.kpis.total_units_adjusted) }}
Uds ajustadas
{{ countDash.avg_completion_hours || '-' }}h
Tiempo prom
{{ countDash.summary.in_progress || 0 }}
En progreso
{{ countDash.summary.pending_approval || 0 }}
Por aprobar
{{ countDash.kpis.triggered_counts }}
Triggered
{{ countDash.kpis.lines_per_hour.length > 0 ? countDash.kpis.lines_per_hour[0].lines_per_hour : '-' }}
Líneas/hora
Precisión por zona
{{ z.zone_name }}
{{ z.accuracy }}% ({{ z.with_variance }} var)
Items problemáticos
Sin items con varianza recurrente
{{ it.sku }}
{{ it.item_name?.substring(0,30) }}
{{ it.variance_times }}x
Bins problemáticos
Sin bins con varianza recurrente
{{ b.bin_code }}
{{ b.zone_name }}
{{ b.variance_times }}x
Productividad contadores
{{ c.full_name }}
{{ c.lines_counted }} lineas ·
{{ c.accuracy }}%
Sesiones recientes
{{ cs.name }}
{{ cs.zone_name || 'Todas' }}
{{ cs.status }}
{{ cs.counted_lines }}/{{ cs.total_lines }}
{{ cs.variance_lines }} var
Histórico de KPIs
{{ kpisHistory.totals.sessions }}
Sesiones
{{ fmtQty(kpisHistory.totals.total_lines) }}
Lineas
{{ kpisHistory.totals.avg_accuracy }}%
Precisión prom
{{ kpisHistory.totals.avg_lines_per_hour || '-' }}
Líneas/hora prom
Contador
Ses
Bins
Lineas
+
-
Dif
Prec
P/bin
{{ c.name }}
{{ c.sessions }}
{{ c.bins }}
{{ c.total_lines }}
{{ c.unexpected }}
{{ c.not_found }}
{{ c.qty_mismatch }}
{{ c.accuracy }}%
{{ c.avg_time_per_bin ? fmtTime(c.avg_time_per_bin) : '-' }}
Detalle sesiones ({{ kpisHistory.sessions.length }})
{{ s.name }}
{{ s.zone }}
{{ s.team }}
{{ s.total_lines }}
{{ s.accuracy }}%
{{ s.lines_per_hour || '-' }}
{{ fmtTime(s.duration_sec) }}
🛡️ Vigilancia de SKUs limpios ({{ vigilancia.skus.length }})
Ningún SKU con "Fecha limpio" en Zoho todavía. Se marca desde el Sheet de Ubicaciones (menú Ubic).
| SKU | Estado | Motivo / avisos |
Bins hoy | Cada | Próximo |
| {{ s.sku }} |
{{ s.estado }}
|
{{ s.motivo }} · {{ s.avisos }} |
{{ s.bins_hoy || '—' }} |
{{ s.cadencia_dias ? s.cadencia_dias + ' d' : '—' }} |
{{ s.next_count_at || '—' }} |
Últimas rutas: {{ r.name }} ({{ r.status }})
Sin conteos
{{ cs.name }}
{{ cs.zone_name || 'Todas las zonas' }} · {{ cs.team_names || cs.assigned_to_name || 'Sin asignar' }}
{{ cs.status }}
{{ cs.counted_lines }}/{{ cs.total_lines }} ({{ Math.round((cs.counted_lines/Math.max(cs.total_lines,1))*100) }}%)
{{ cs.variance_lines }} varianzas
Creado: {{ formatDate(cs.created_at) }}
· Inicio: {{ formatDate(cs.started_at) }}
· Fin: {{ formatDate(cs.completed_at) }}
· Dur: {{ fmtDuration(cs.started_at, cs.completed_at) }}
· En curso
{{ child.name }}
{{ child.assigned_to_name }}
{{ child.status }}
{{ child.variance_lines }} var
Bin {{ countProgress?.bins_done + 1 }} de {{ countProgress?.bins_total }}
Ve a la ubicación:
{{ countBin.bin_code }}
{{ countBin.zone_name }}
Bin {{ countProgress?.bins_done + 1 }} de {{ countProgress?.bins_total }}
{{ countBin.bin_code }} ✔
{{ countMode === 'scan' ? 'Modo: Escaneo 1x1' : 'Modo: Cantidad' }}
{{ countCurrentItem.name }}
{{ countCurrentItem.sku }}
Cantidad:
{{ countScanError }}
Reportar: {{ alertReportBarcode }}
Toma foto del producto/código de barras:
{{ ci.name }}
{{ ci.sku }}
{{ ci.quantity }}
Total cajas:
{{ countItems.reduce((s, i) => s + (parseInt(i.quantity) || 0), 0) }}
({{ countItems.length }} productos)
Escanea el primer producto
{{ currentCount.name }}
{{ currentCount.status }}
Resuelve {{ countComparison.summary.conflict }} conflicto{{ countComparison.summary.conflict > 1 ? 's' : '' }} primero
Enviado a Zoho ↗
Equipo:
{{ name }}
×
{{ countKpis.lines_per_hour }}
Lineas/hora
{{ countKpis.bins_per_hour }}
Bins/hora
{{ fmtTime(countKpis.avg_time_per_bin_sec) }}
Prom/bin
{{ countKpis.avg_time_per_line_sec }}s
Prom/linea
{{ countKpis.active_percent }}%
Tiempo activo
{{ fmtTime(countKpis.avg_travel_time_sec) }}
Prom desplazamiento
{{ fmtTime(countKpis.total_duration_sec) }}
Duracion total
Contador
Bins
Lin/h
Prom/bin
%
{{ c.name }}
{{ c.bins }}
{{ c.lines_per_hour }}
{{ fmtTime(c.avg_time_per_bin) }}
{{ c.accuracy }}%
Detalle por bin ({{ countKpis.bin_details.length }})
{{ b.bin_code }}
{{ b.counted_by }}
{{ b.line_count }} lin
{{ fmtTime(b.count_time_sec) }}
+{{ fmtTime(b.travel_time_sec) }}
{{ b.var_count > 0 ? b.var_count + '!' : 'ok' }}
En vivo
{{ liveProgress.current_bin ? 'Contando: ' + liveProgress.current_bin.bin_code : 'Esperando...' }}
{{ liveProgress.bins_done }}/{{ liveProgress.bins_total }} bins ({{ liveProgress.percent }}%)
{{ liveProgress.lines_skipped }} saltadas
{{ liveProgress.variances }} varianzas
Recientes: {{ liveProgress.recent_bins.map(b => b.bin_code + (b.variances > 0 ? ' !' : ' ok')).join(', ') }}
{{ countLines.length }}
Todos
{{ countLines.filter(l => l.counted_qty !== null && l.variance == 0).length }}
OK
{{ countLines.filter(l => l.variance && l.variance != 0).length }}
Varianza
{{ countLines.filter(l => l.status === 'pending').length }}
Pendiente
{{ countMetrics.variance_breakdown.found_unexpected || 0 }}
No esperado
{{ countMetrics.variance_breakdown.not_found || 0 }}
No encontrado
{{ countMetrics.variance_breakdown.qty_mismatch || 0 }}
Dif. cantidad
Contador
Lineas
OK
+
-
Dif
Prec
Lin/h
P/bin
{{ c.full_name || 'Sistema' }}
{{ c.total_lines }}
{{ c.ok_lines }}
{{ c.found_unexpected }}
{{ c.not_found }}
{{ c.qty_mismatch }}
{{ c.accuracy }}%
{{ counterKpi(c.counted_by)?.lines_per_hour || '-' }}
{{ counterKpi(c.counted_by)?.avg_time_per_bin ? fmtTime(counterKpi(c.counted_by).avg_time_per_bin) : '-' }}
{{ countComparison.summary.total }}
Todos
{{ countComparison.summary.ok }}
OK
{{ countComparison.summary.adjust }}
Ajustar
{{ countComparison.summary.conflict }}
Conflicto
{{ countComparison.summary.pending }}
Pendiente
A: {{ countComparison.session_a.assigned_to_name }}
B: {{ countComparison.session_b.assigned_to_name }}
C: {{ countComparison.session_c.assigned_to_name }}
Bin
SKU
Descripción
Esp
A
B
C
Result
{{ c.bin_code }}
{{ c.sku || '-' }}
{{ c.item_name || 'Bin vacio' }}
{{ fmtQty(c.expected) }}
{{ c.count_a !== null ? fmtQty(c.count_a) : '-' }}
{{ c.count_b !== null ? fmtQty(c.count_b) : '-' }}
{{ c.count_c !== null ? fmtQty(c.count_c) : '-' }}
{{ fmtQty(c.resolved) }} ✔
{{ fmtQty(c.resolved) }}
({{ c.variance > 0 ? '+' : '' }}{{ fmtQty(c.variance) }})
📷
⚠ ???
-
{{ countComparison.summary.conflict }} linea{{ countComparison.summary.conflict > 1 ? 's' : '' }} sin resolver
A y B no coinciden en estas lineas. Opciones:
para desempatar, o haz click en ⚠ ??? para elegir manualmente
Haz click en ⚠ ??? para elegir manualmente el valor correcto
Todas las lineas resueltas. Puedes aprobar los ajustes.
Posición
SKU
Descripción
Esp
Cont
Var
{{ cl.bin_code }}
{{ cl.sku || '-' }}
{{ cl.item_name || 'Bin vacio' }}
⚠
❓
{{ fmtQty(cl.expected_qty) }}
-
-
{{ fmtQty(cl.counted_qty) }}
pend
✔
{{ cl.variance > 0 ? '+' : '' }}{{ fmtQty(cl.variance) }}
{{ filteredTasks.length }}
Total
{{ filteredTasks.filter(t => t.status === 'planned').length }}
Pendiente
{{ filteredTasks.filter(t => t.status === 'in_progress').length }}
En curso
{{ filteredTasks.filter(t => t.status === 'completed').length }}
Completo
{{ cs.name }}
{{ cs.team_names || cs.assigned_to_name || 'Sin asignar' }}
{{ cs.zone_name || 'Todas las zonas' }} · {{ cs.total_lines }} ubicaciones
· {{ cs.counted_lines }}/{{ cs.total_lines }} contadas
Equipo:
{{ name }}
×
{{ myPickfaceSession.name }}
Pickface
Levantamiento pickface Infoplus
· {{ myPickfaceProgress.done + myPickfaceProgress.empty }}/{{ myPickfaceProgress.total }} ubicaciones
Picking: {{ myPickTask.so_number }}
{{ myPickTask.customer_name }}
Ve a {{ myPickTask.bin_code }}
{{ myPickTask.sku }} — {{ myPickTask.item_name }}
{{ fmtQty(myPickTask.quantity_requested) }} {{ myPickTask.unit || 'CAJA' }}
Progreso: {{ myPickProgress.done }}/{{ myPickProgress.total }}
Pedidos para picking
{{ pl.zoho_so_number }}
{{ pl.customer_name }}
{{ pl.status === 'pending' ? 'Pendiente' : pl.status === 'completed' ? 'Completo' : pl.status }}
{{ line.sku }} {{ line.item_name }}
{{ line.quantity }} → {{ line.bin_code || '?' }}
Asignado: {{ pl.assigned_name }}
Sin asignar
{{ cleanupBin.code }}
Escanea todo lo que encuentres
| SKU |
Producto |
Cant |
|
| {{ c.sku }} |
{{ c.name }} |
{{ c.counted_qty }} |
×
|
Escanea el primer producto
{{ currentPickTask.so_number }} — {{ currentPickTask.customer_name }}
Tarea {{ myPickProgress.done + 1 }}/{{ myPickProgress.total }}
Ve a la ubicacion:
{{ currentPickTask.bin_code }}
Apunta y escanea el bin:
{{ currentPickTask.bin_code }} ✓
{{ currentPickTask.item_name }}
{{ currentPickTask.sku }}
{{ fmtQty(currentPickTask.quantity_requested) }}
cajas a tomar
Escanea el producto para confirmar:
{{ currentPickTask.bin_code }} ✓ · {{ currentPickTask.sku }} ✓
{{ currentPickTask.item_name }}
Cantidad a tomar:
Codigo invalido
{{ bcEstado.mensaje }}
Este codigo ya esta registrado
{{ bcEstado.barcode }}
pertenece a {{ bcEstado.item.sku }}
— {{ bcEstado.item.name }}
(ranura {{ bcEstado.slot || 'sin espejo' }})
No se puede asignar a otro SKU.
Si esta mal, se corrige en Zoho.
Codigo libre:
{{ bcEstado.barcode }}
Ojo: es muy corto para ser un codigo de barras. Solo se acepta si es
el SKU del propio producto.
A que SKU se lo asigno?
{{ it.sku }} {{ it.name }}
Ningun producto casa con «{{ bcBusqueda }}».
Confirma el producto
sin foto
{{ bcConfirma.item.sku }}
{{ bcConfirma.item.name }}
Stock {{ bcConfirma.item.stock_ubic }}
{{ bcConfirma.item.display_unit }}
Le vas a poner {{ bcEstado.barcode }}
…
en la ranura {{ bcConfirma.slot_libre }} de {{ bcConfirma.total_slots }}.
Ojo: este SKU ya tiene sus {{ bcConfirma.total_slots }} ranuras. Se guarda en el
WMS pero NO se va a poder escanear en piso.
Ya trae:
{{ c.barcode }},
Sera su primer codigo.
Ultimos guardados
{{ r.sku }}
← {{ r.barcode }}
(ranura {{ r.slot || 'no cabe' }})