Reposiçãocarregando…

Como a pontuação é medida (cx/min)

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.

Tempo previsto ("faltam …")

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.

Previsão da separação ("deve terminar ~…")

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.

Os três relógios que nunca se misturam

⚠️ validade

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).

"✔ Já reposta" (pular direto)

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.

Finalização parcial

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.

α — a caixa equivalente (hoje desligado)

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.

A linguagem de emoji

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:

Escala

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.

Média do período (Feitas)

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.