Conclusão logo de cara: o último dígito de cada código de localização deveria ser um dígito verificador. Já vi exatamente essa falha três vezes, e as três terminaram do mesmo jeito: nada foi roubado, mas o sistema não conseguia encontrar. Um dígito extra custa quase nada e detecta a grande maioria desses casos de estoque "desaparecido".

O caso mais recente foi concluído há alguns meses. Um cliente de autopeças no leste da China, um DC novo de cerca de 20,000 metros quadrados, três meses após o go-live. Primeira contagem completa de parede a parede: mais de 2 milhões de yuans em estoque que não batiam. Nada roubado, nada enviado errado — mais de 40 paletes haviam sido colocados nas localizações erradas. A localização B-12-03-4 foi lida como B-12-08-4: a leitura do operador da empilhadeira falhou por causa de uma etiqueta suja, ele digitou à mão, e o 3 virou 8. No WMS, aqueles 40 paletes estavam "em" B-12-03-4; na realidade, estavam em B-12-08-4. Por duas semanas inteiras, vendas via estoque na tela, os separadores não o encontravam no chão, o atendimento aguentava as reclamações dos clientes, e o armazém aguentava as de vendas. No fim, foram necessárias duas pessoas e cinco dias abrindo cada localização para encontrá-los. Dois milhões de yuans "desaparecidos" por duas semanas — por causa de um único dígito mal lido.

O segundo projeto doeu ainda mais. No início de 2024, um armazém 3PL no sul da China trocou para um fornecedor de etiquetas mais barato. As margens do novo modelo estavam erradas, e a impressão foi cortada 2 milímetros à direita — exatamente onde ficava o dígito verificador. Metade das etiquetas era lida como códigos truncados, o chão voltou à digitação manual sem dígito verificador para pegar os erros, e as taxas de colocação errada dispararam. O que economizaram nas etiquetas não cobriu a mão de obra de caçar um único palete perdido. Dois projetos, um mal lido por um humano, outro mal impresso por um fornecedor — mesma causa raiz: o desenho do código não dava aos erros nenhuma chance de serem detectados.

Como um dígito verificador evita isso

A ideia toda em uma frase: acrescentar um dígito que carrega a própria resposta, para que o sistema possa verificar cada entrada.

Pegue a localização B12034 (só dígitos, separadores removidos). No WMS, calculamos um dígito verificador usando o algoritmo de Luhn — o mesmo por trás dos números de cartão de crédito — e a localização vira B12034-7. Daí em diante, cada leitura ou entrada digitada é verificada primeiro: o sistema consegue recalcular aquele 7 final a partir dos dígitos anteriores? Se não, parada total, erro em vermelho, o palete nunca vai para o slot errado.

Não é mágica. Deixa eu mostrar a conta, cada passo reproduzível. Digamos que os dígitos da localização sejam 417203:

  1. Acrescente um zero no fim como marcador de posição: 4172030.
  2. Da direita para a esquerda, dobre cada 2.º, 4.º e 6.º dígito: o 3 vira 6, o 2 vira 4, o 1 vira 2. (Se dobrar der 10 ou mais, some os dois dígitos — 8 vezes 2 é 16, então some 1 mais 6 para obter 7.)
  3. Some tudo: 0 mais 6 mais 0 mais 4 mais 7 mais 2 mais 4 é igual a 23.
  4. O dígito verificador é 10 menos o resto de 23 dividido por 10 — 10 menos 3, que é 7.

Código de localização completo: 4172037. Agora o operador digita 417208 em vez de 417203. O sistema verifica 4172087, a conta não fecha em 7, e a tela mostra um erro antes de o palete sair do dock. Esse é todo o truque: um dígito que torna o "errado" detectável.

Funcionário de armazém segurando um scanner PDA diante de racks de paletes

Qual algoritmo? Não invente o seu — aqui vai a comparação:

| Algoritmo | Como funciona | Detecta | Fraqueza | | Luhn | Dobra dígitos alternados, soma, mod 10 | Erros de um dígito, a maioria das transposições adjacentes | Precisa de suporte do WMS para a lógica de verificação | | Soma ponderada | Multiplica cada dígito por um peso fixo, mod 10 | Erros de um dígito | Pesos errados significam proteção zero | | Dígito verificador GS1 | Posições ímpares/pares vezes 3 e 1 | Erros de um dígito | Feito para códigos de barras de produtos; emprestá-lo para localizações exige consistência em todo o site |

Meu veredito: use Luhn para códigos de localização, ponto final. "Regras de verificação caseiras" é uma falha que já vi três vezes — toda vez, o consultor seguinte não conseguiu fazer engenharia reversa da regra antiga, e o site acabou reetiquetando o armazém inteiro.

Configurando no seu WMS: quatro etapas, nenhuma opcional

  1. Trave a regra do código antes de imprimir uma única etiqueta. Três frases: código de localização é igual a zona-corredor-nível-baia mais um dígito verificador; separadores são só de exibição e ficam fora da conta; o dígito verificador é sempre o último. Imprima as etiquetas primeiro e defina a regra depois, e você vai reimprimir — já vi isso três vezes.
  2. Adicione dois campos aos dados mestres de localização no WMS: dígito verificador e nome do algoritmo. Não deixe o dígito verificador só na etiqueta impressa; o sistema precisa de um lugar para guardá-lo e configurá-lo, ou o dia em que você trocar de fornecedor de etiquetas será o dia do desastre.
  3. Imponha a verificação em três pontos de contato: colocação, movimentações e ajustes de inventário cíclico. Cada leitura ou localização digitada é verificada; falhas são bloqueadas e registradas. Impor só na colocação é o mesmo que não impor — nos meus projetos, a maioria das colocações erradas aconteceu durante movimentações e ajustes de contagem.
  4. Preencha o histórico com um script: calcule os dígitos verificadores de todas as localizações existentes de uma vez e reimprima em um único lote. Não faça o chão calcular à mão. Para um site greenfield de 30,000 localizações, rodo o job em lote na noite anterior ao go-live.

Um trade-off para pensar: bloqueio total versus só aviso. Bloqueio total atrasa a operação — cada erro para um operador para uma confirmação. Só aviso é ignorado, o que é o mesmo que não ter nada. Minha divisão: bloqueio total na colocação e nas movimentações (um erro ali significa um palete inteiro sumido), aviso mais revisão no mesmo dia nos ajustes de contagem (contar é sensível ao tempo, e os erros aparecem no mesmo dia). Qualquer um dos dois extremos está errado.

Checklist da noite do go-live: falhe em qualquer um destes cinco, não entre em produção

  1. As etiquetas estão sendo cortadas? O dígito verificador fica bem no fim — material estreito ou margem de modelo mal configurada corta metade dele e ele não é lido. Leia 10 etiquetas uma por uma; não amostre.
  2. A entrada do PDA está travada? Alguns PDAs Android usam por padrão um método de entrada em chinês, e dígitos de largura total versus meia largura são caracteres diferentes para o sistema — toda verificação falha. Trave cada dispositivo em entrada inglesa de meia largura antes do go-live, e confira um por um.
  3. Você projetou contra leituras erradas? 0 versus O, 1 versus I, 5 versus S — no alto, sob luz ruim, o olho humano confunde esses o tempo todo. Minha regra: só dígitos nos códigos de localização, uma fonte monoespaçada com zero cortado, e 0 e O nunca aparecem na mesma etiqueta.
  4. Alguém está lendo o log de bloqueios? Bloquear erros que ninguém revisa é teatro. Exporte o log de bloqueios diariamente na primeira semana — descubra se são erros reais ou uma regra mal configurada — e relaxe na segunda semana.
  5. As localizações legadas foram preenchidas? Códigos antigos e novos misturados são um desastre. Preencha tudo ou substitua tudo; sem portas dos fundos de "códigos antigos".

A conclusão contraintuitiva: nunca é culpa do operador

Em mais de 30 go-lives, toda vez que isso aconteceu, o primeiro instinto da gerência foi "mais treinamento" e "punir erros". Mas ler errado uma longa sequência de dígitos é simplesmente humano — nenhuma dose de "tenha cuidado" conserta isso, e multas consertam ainda menos. Você tem duas opções: aceitar que humanos vão errar e deixar o sistema pegar, ou apostar que humanos nunca erram e passar dias todo mês caçando frete "desaparecido". A primeira custa um dígito; a segunda custou a um cliente 2 milhões de yuans nos livros. Essa conta você mesmo pode fazer.

Uma coisa que você pode fazer amanhã: abra os dados mestres de localização do seu WMS hoje à noite e confira se há um campo de dígito verificador. Se não houver, imprima o checklist de cinco itens acima, cole na parede e percorra-o antes do seu próximo go-live.

Por Lin Xiao, Consultor de Implementação de WMS

Traduzido do inglês. Em caso de divergência, prevalece a versão em inglês.