Cada reposição marca quem entrou, quando entrou e quando saiu — sempre com a hora do servidor, nunca a do celular. As caixas da requisição são divididas entre as pessoas na proporção do tempo de cada uma (hora-homem). Dois que trabalharam juntos do início ao fim marcam a MESMA pontuação — o app não adivinha quem carregou mais.
Nasce do histórico do próprio corredor: caixas por pessoa-hora medidas nas reposições anteriores. Um corredor só ganha régua própria com 5 medições; antes disso vale a média geral, marcada como tal.
O que falta é dividido pela equipe em pessoas equivalentes: a nota de cada um sobre a média geral. Incluir alguém 20% mais rápido adianta 20% a mais; alguém sem medida vale 1. Por isso o "faltam" muda na hora quando entra ou sai gente.
A barra de tempo enche contra essa previsão: verde com folga, âmbar de 70% em diante, vermelha quando passou.
Nasce do tamanho do pedido dividido pelo ritmo do próprio separador (cx/h dele nos últimos 90 dias de WMS, separações de salão entre 1 min e 4 h). Quando não há volume-alvo (BIPADA ainda em andamento), cai na média de minutos dele. Com menos de 5 medições do separador o app mostra só o decorrido — não inventa previsão.
O aviso acende quando algum item da requisição tem validade a menos
de 2 meses nos 2 últimos recebimentos (mesma fonte da
cotação). Abrindo o olho 👁 aparecem o produto, as duas validades e o
dia e a quantidade de cada recebimento, já em caixa-mãe
(ex.: 93 cx/30un).
Palete que subiu sem passar pelo app (outra equipe, outro horário): o botão manda direto para Feitas depois de um popup com os itens e a confirmação. O registro entra no histórico marcado SEM MEDIÇÃO — e não conta em nenhuma média (ritmo, taxa de corredor, pessoa) porque ninguém mediu aquele trabalho. Desfazer de 10 s vale como sempre.
Itens PALETIZADOS (🚚 — Fofura ≥10 somando sabores, Guarani
e União ≥50 fd, Arroz Granjeiro sempre) descem como palete inteiro
direto para a área de venda: o cartão ganha o selo e este botão é o
caminho certo. A lista mora no botão de palete do topo (adicionar =
digitar + 1 toque; remover = 1 toque com desfazer) e no
paletizados.csv, que você também pode editar à mão.
Reposição não para no meio: quando não termina, escolhe-se quanto foi abastecido (caixas aproximadas) e o cartão vai para as Feitas como PARCIAL, com o "faltaram ~N cx" registrado. A pontuação conta só o que foi reposto de verdade — sem isso o cx/min sairia inflado. "Não abasteceu nada" é diferente: nada subiu, então o cartão volta limpo para Prontas, sem selo e fora das médias.
Nem toda caixa custa o mesmo, e o α corrige isso por caixa:
caixa equivalente = caixa física × α do item. Exemplo:
fubá tem exposição MIN alta — a maior parte desce fechada e só
encosta na base da gôndola, que é rápido. Com α = 0,75, um palete de
100 cx de fubá pontua 75. Já um item que abre e abastece unidade
a unidade pode valer 1,3 por caixa. A régua: a caixa média da casa
vale 1. Não é castigo em ninguém — é para o cx/min medir esforço, e
não a sorte no sorteio do palete.
A direção é decisão do dono: MIN menor = bônus (dá mais trabalho por caixa), MIN maior = penaliza (desce fechada) — para equilibrar. O ganho de escala conta por caixa fechada, não por unidade: o eixo da curva é o MIN em CAIXAS. Ela desce sem degrau do topo (MIN perto de 0) até o piso, e a partir de ~70 caixas de exposição mínima (± um palete inteiro) a reposição muito provavelmente é palete fechado na área de venda: ali a caixa vale o piso. O alcance (topo/piso) e a velocidade da queda são botões de configuração — hoje neutros (tudo vale 1) até serem definidos ou medidos.
Além do peso por caixa existe o bônus de arranque: toda requisição paga um custo fixo antes da primeira caixa (deslocar, pegar o palete, abrir o corredor). Por caixa isso é uma curva — bônus máximo na requisição de 1 cx, caindo rápido e normalizando no palete grande, que não ganha quase nada de escala dali em diante (exatamente o que as duas medições reais mostraram). Requisição cancelada não ganha bônus: começar sem repor não pontua.
De onde saem os números (em fases, conforme o dado chega): com ~5 pedidos por setor, α do setor estimado pelo estoque MIN médio (MIN alto → mais caixa fechada → α menor); com ~10 pedidos de um mesmo item, a regressão mede quanto o item desloca o tempo total do pedido — o α real dele — e o intercepto da mesma regressão mede o bônus de arranque. A mistura começa 90% setor + 10% regressão e o peso da regressão cresce conforme a confiança dela (R/erro-padrão) sobe. O MIN é proxy, não causa: se a regressão mostrar que fubá na verdade é lento, ela vence.
Hoje α = 1 (desligado) — e por medida, não por preguiça: as duas únicas reposições cronometradas até agora (30/07) deram 18,8 e 24,8 s/cx num salto de 3,2× no tamanho — a economia de escala não apareceu. Curvar sem dado puniria quem pega palete grande de caixa pesada.
História completa e protocolo de medição: docs/alpha-da-reposicao.md no repositório.
Emoji aqui é código, não enfeite — cada um significa uma coisa só, sempre a mesma, e a legenda fica visível sob as abas:
Na escala · fora da escala · inativo. Não existe excluir: inativar é a saída, e 45 dias sem ser escalado o nome some da tela — fica gravado no arquivo e no histórico. Cadastro novo só pelo campo no topo da tela de Equipe (2+ letras puxam os nomes do WMS como sugestão).
Toda ação tem DESFAZER de 10 s; correção vira estorno no log — nada é apagado.
Hoje/Ontem/Personalizado recortam o log congelado; a média mostrada é a média das pontuações (cx/min) das reposições do recorte — reposição CANCELADA fica de fora, senão um toque errado de 3 minutos viraria um ritmo de foguete e puxaria a média.