Acesso rápido
Painel operacional
—
Últimas conferências
| Data | Operação | Documento | OK | Falta | Diverg. | Resultado |
|---|
Notas fiscais de entrada
Nova nota
Itens da nota
Importar notas
Notas no Supabase
Usa a conexão configurada na aba Pedidos (URL e chave anon).
Não configurado.
| NF | Fornecedor | Emissão | Itens | Un. | Status |
|---|
Armazenar produto
Três passos: 1) bipe o QR do produto · 2) informe a quantidade · 3) bipe o QR da localização e conclua. A câmera aceita os dois QRs — o app identifica sozinho se é produto ou endereço.
Entrada manual / leitor pistola
A armazenar
Alimentado pelas conferências de recebimento finalizadas. Clique em usar para preencher os três passos de uma vez.
| Código | Descrição | Lote | Val. | Origem | Documento | Pendente |
|---|
Armazenagens de hoje
| Hora | Código | Lote | Qtd | De | Para |
|---|
Fila de pedidos
Novo pedido
Itens do pedido
Importar do ERP
A coluna local é opcional: em branco, o app busca o endereço no inventário pela regra FEFO.
Sincronizar com Supabase
Opcional. Com isso a fila de pedidos passa a ser compartilhada entre todos os aparelhos do almoxarifado. Sem configurar, o app funciona 100% local.
Não configurado.
| Pedido | Cliente | Operação | Itens | Un. | Endereços | Prazo | Status |
|---|
Fila de separação
Pedidos aguardando separação. O roteiro é montado na ordem do percurso do armazém (rua → módulo → nível), com o endereço de cada produto vindo do inventário e o lote escolhido por FEFO — vence antes, sai antes.
| Pedido | Cliente | Itens | Un. | Prazo | Endereços |
|---|
Fila de etiquetas
Dados da conferência
Lista esperada
| Código | Descrição | Lote | Validade | Esperado | Lido | Status |
|---|
Leitura
Entrada manual / leitor pistola
| Hora | Código | Lote | Qtd | Validade | Local | Status | Observação |
|---|
Encerrar
Tudo é salvo automaticamente neste navegador/dispositivo. Nada é enviado para a internet.
Cadastrar localização
Endereço no formato Rua | Módulo | Nível. Cada local recebe um QR próprio — bipe o local antes dos produtos para registrar onde a mercadoria foi guardada ou de onde foi retirada.
Geração em lote
Os três campos aceitam letra (A → D, ou até AA, AB…) e número (01 → 12). Se você usar letra na rua e número no módulo, tudo bem — cada campo é independente.
Locais cadastrados
| Código | Rua | Módulo | Nível | Setor / observação | Ocupação registrada |
|---|
Etiqueta do local
Posição de estoque
| Código | Descrição | Lote | Validade | Situação | Qtd | Local |
|---|
Etiquetas com QR Code
Saldo dos itens
O saldo parte do que foi lançado no inventário e é movimentado pelas conferências finalizadas: recebimento soma, expedição subtrai. Conferência de inventário não movimenta.
| Código | Descrição | Lote | Val. | Endereços | Entradas | Saídas | Saldo | Último mov. |
|---|
Extrato de movimentação
| Data | Hora | Tipo | Documento | Código | Lote | Val. | Endereço | Qtd |
|---|
Cada linha nasce de uma conferência finalizada. Somente leituras validadas movimentam saldo — divergências (lote errado, não previsto, vencido) ficam de fora.
Conferências finalizadas
| Data | Operação | Documento | Responsável | OK | Falta | Diverg. | Resultado |
|---|
Como usar
- Início: painel com os números da operação (atualiza a cada 60 s ou no botão Atualizar) e atalhos em ícones. Cada indicador é clicável e leva direto à tela correspondente. O menu lateral (☰, canto superior esquerdo) abre em qualquer tela e mostra pendências nos módulos.
- Pedidos: a fila de trabalho. Um pedido nasce A separar, vai para A conferir quando o separador termina e fecha em Concluído automaticamente quando você finaliza a conferência dele. Entradas possíveis: cadastro manual, importação CSV do ERP (uma linha por item) ou Supabase, que compartilha a fila entre todos os aparelhos. O botão conferir carrega os itens do pedido na lista esperada e já abre a aba de conferência.
Para o Supabase: preencha URL do projeto + chave anon + nome da tabela, use Testar conexão e Baixar SQL da tabela para criar a estrutura no banco. Sem configurar nada, o app funciona 100% local. - Gerar QR (unidade): informe código, descrição, lote e validade → Gerar QR Code. Use Adicionar à fila para montar uma folha de etiquetas e imprimir todas de uma vez.
- Gerar QR de caixa fechada: no card Caixa fechada / master, dê um identificador ao volume (ex.: CX-0001) e adicione uma linha por lote com a quantidade de unidades — 10, 12, 20, quantas houver. Uma caixa pode conter vários lotes e até vários códigos. O total é somado automaticamente e um único QR representa o volume inteiro. A etiqueta impressa já sai com a lista de lotes ao lado do QR.
Ao bipar esse QR na conferência, o app dá baixa em todas as unidades de todos os lotes de uma vez e mostra uma linha de status por lote. Limite prático: ~15 lotes por QR. - Recebimento: as notas entram por Nova NF, CSV (
nf;fornecedor;emissao;codigo;descricao;lote;validade;quantidade, uma linha por item) ou Supabase (tabelanotas_fiscais, com SQL para baixar). Abrindo a nota você tem os itens com lote, validade e situação de vencimento, e três caminhos:- Gerar e imprimir todas as etiquetas — QR no padrão do app para todos os itens da nota.
- Imprimir etiquetas selecionadas — marque só os itens que precisa reetiquetar.
- Conferir esta nota — leva os itens da NF para a lista esperada e abre a conferência, validando código, lote, validade e quantidade contra a nota. Ao finalizar, a NF é marcada como Conferida com o resultado, o saldo recebe a entrada e o status sobe para o Supabase.
- Armazenagem: o passo seguinte ao recebimento. A fila A armazenar é alimentada pelas conferências de recebimento finalizadas, mostrando o que está na doca, de qual NF e quanto falta guardar. O processo tem três passos: 1) bipe o QR do produto — o app já sugere a quantidade pendente e mostra onde esse lote está hoje; 2) ajuste a quantidade; 3) bipe o QR do endereço e clique em Concluir armazenamento. A mesma câmera lê os dois QRs, identificando sozinha se é produto ou endereço.
Armazenar é uma transferência de endereço: sai da doca (ou do endereço com mais saldo) e entra na posição bipada — o saldo total não muda, e o movimento aparece no extrato como ARMAZENAGEM com o percurso origem → destino. Se o lote não tiver saldo em nenhum endereço, o app pergunta antes de lançar como entrada direta. O endereço bipado permanece selecionado depois de concluir, para você guardar vários itens na mesma posição em sequência. Bipar o QR de uma caixa fechada preenche produto e quantidade de uma vez. - Separação: a fila mostra os pedidos A separar. Ao abrir um, o app monta o roteiro: uma linha por item, ordenada pelo percurso do armazém (rua → módulo → nível), com o endereço vindo do inventário e o lote escolhido por FEFO — vence antes, sai antes. Endereços alternativos aparecem como "tb:" abaixo do principal.
Bipe o QR do endereço e o app lista o que retirar ali; bipe o produto e a linha avança. Se o produto for bipado num endereço diferente do que o inventário aponta, ele conta mas avisa LOCAL DIFERENTE — sinal de endereçamento desatualizado. Sem saldo na posição, use ruptura: a conferência passa a esperar só o que realmente saiu. Concluir a separação é o que libera o pedido para a conferência — antes disso ele não aparece lá. - Guia do próximo item: quando a quantidade lida bate com a solicitada, o app fecha a câmera e mostra um painel com o item concluído e o próximo a ler — código, lote, validade, quantas unidades faltam e o endereço. Clique em Continuar lendo para reabrir a câmera já apontada para o próximo, ou Dispensar para seguir manualmente. Ao fechar a última linha, o painel avisa que a conferência (ou a separação) está completa. Vale para a conferência e para a separação, e pode ser desligado na chave Pausar a câmera ao concluir cada item.
- Conferência: preencha operação e documento, monte a lista esperada (manual, importando CSV ou puxando um pedido já separado) e comece a bipar.
- Locais (Rua | Módulo | Nível): cadastre os endereços um a um ou gere faixas inteiras de uma vez (ex.: ruas 1–4, módulos 1–10, níveis 1–4 = 160 endereços). O código sai no padrão
RUA-00-00(ex.:A-01-01) e cada local tem etiqueta própria com o endereço em letra grande + QR.
Na conferência, bipe primeiro o QR do local: aparece a faixa “📍 Registrando em A-01-01” e todas as leituras seguintes ficam gravadas nesse endereço, até você bipar outro local ou clicar em limpar. A coluna Local do log e o bloco ENDEREÇAMENTO do CSV mostram o que foi guardado onde; a lista de locais mostra a ocupação registrada de cada posição. - Resultado por leitura:
- OK código e lote conferem com a lista.
- LOTE DIVERGENTE o código existe na lista, mas o lote é outro.
- NÃO PREVISTO item que não consta na lista.
- EXCEDENTE quantidade lida acima do esperado.
- DUPLICADO / VALIDADE mesma etiqueta bipada de novo, ou validade vencida/próxima (90 dias).
- FALTANTE item esperado que não foi bipado até o fim.
- Inventário: lance código, lote, validade, quantidade e localização (obrigatória) — sem endereço o produto não entra no roteiro de separação. Endereço novo no padrão
RUA-00-00(ex.:A-01-01) é cadastrado em Locais na hora, com sua confirmação. O campo Local continua preenchido depois de lançar, para você cadastrar vários lotes da mesma posição em sequência. Na importação, a 6ª coluna do CSV é o local e linhas sem endereço são recusadas e listadas; no Supabase (botão na própria aba, usando a conexão da aba Pedidos) o envio é upsert porcodigo,lote,local. A tabela mostra a posição de estoque com KPIs de unidades, vencidos e a vencer em 90 dias, e filtros rápidos. O botão Gerar e imprimir etiquetas monta a folha de QR dos itens marcados (ou dos filtrados, se nada estiver marcado) e abre a impressão direto — com a opção de 1 etiqueta por unidade para reetiquetar caixa por caixa. Enviar seleção p/ conferência transforma o inventário na lista esperada para você contar bipando as prateleiras. - Saldo: consulta por código + lote com entradas, saídas, endereços, situação de validade e último movimento. O saldo parte do que foi lançado no inventário e é movimentado pelas conferências finalizadas — recebimento soma, expedição subtrai, conferência de inventário não movimenta. Só leituras validadas movimentam: divergências (lote errado, não previsto, vencido, excedente) ficam fora. O botão extrato de cada linha filtra o kardex daquele item.
Na expedição, se o endereço bipado não tem a linha do lote, a baixa sai do endereço cadastrado por FEFO. Vender item sem cadastro deixa saldo negativo — é proposital, aparece em vermelho no painel e na aba para você corrigir o inventário em vez de esconder o erro. No recebimento sem endereço bipado, o app pergunta a posição de destino antes de dar entrada. - Encerrar: Finalizar e salvar grava no histórico. Exporte o CSV para anexar ao processo.
Impressão — Zebra TLP 2844 · etiqueta 50 × 30 mm
Todas as etiquetas do app já saem no tamanho exato 50 × 30 mm, uma por etiqueta do rolo (uma carreira na horizontal). A página de impressão é configurada automaticamente para 50×30 mm sem margens quando você clica em qualquer botão de imprimir etiquetas.
Tamanhos disponíveis (o de local é escolhido na aba Locais):
- 50 × 30 mm — produto, caixa fechada e local de prateleira. Stock 50,8 × 30 mm, uma carreira.
- 50 × 30 mm em rolo de 2 carreiras — duas etiquetas de produto por avanço. Escolha o rolo no seletor da fila de etiquetas (aba Gerar QR) ou no inventário.
- Deitadas: as duas lado a lado, página de 100 × 30 mm — no driver, stock 101,6 × 30 mm.
- Na vertical: cada etiqueta gira 90° e ocupa 30 × 50 mm, página de 60 × 50 mm — no driver, stock 60 × 50,8 mm, orientação retrato.
- Se o número de etiquetas for ímpar, a última página sai com a segunda posição em branco.
- 100 × 50 mm deitada — local de porta-palete. Endereço em 13 mm de altura, QR de 23 mm. Stock 101,6 × 50,8 mm.
- 100 × 35 mm deitada — local de porta-palete em rolo mais estreito. Endereço em 10 mm, QR de 15 mm. Stock 101,6 × 35 mm.
- Versões "na vertical" — a mesma etiqueta girada 90°, para colar na coluna do porta-palete. A página troca de lado: 100 × 50 vira 50,8 × 101,6 mm e 100 × 35 vira 35 × 101,6 mm no driver. Mantenha a orientação retrato — a rotação já vem no desenho, não marque "paisagem".
Como o tamanho de página é único por impressão, quando a fila tiver etiquetas de tamanhos diferentes o app mostra um botão para cada tamanho — imprima uma rodada por rolo.
No driver da impressora (uma vez só):
- Painel de Controle → Dispositivos e Impressoras → botão direito na ZDesigner TLP 2844 → Preferências de impressão.
- Tamanho do papel / Stock: personalizado 50,8 mm × 30 mm (2,00" × 1,18"). Margens: 0 em todos os lados.
- Media type: térmica direta (etiqueta térmica) — ou transferência térmica se usar ribbon. Tracking: Web sensing (gap entre etiquetas).
- Velocidade 2–3 ips e escurecimento (darkness) 8–12: QR muito claro não lê, muito escuro borra os módulos.
- Rode a calibração do rolo antes do primeiro lote (botão de feed pressionado até piscar, ou pelo utilitário Zebra).
Na janela de impressão do navegador: destino = ZDesigner TLP 2844 · escala 100% (nunca "ajustar à página") · margens nenhuma · desmarque cabeçalhos e rodapés e gráficos de fundo não é necessário marcar.
Densidade do QR: o app usa nível de correção M para conteúdos curtos e L para longos, para manter os módulos grandes o suficiente a 203 dpi. Etiquetas de caixa com muitos lotes geram QR denso — o app avisa acima de ~320 caracteres (cerca de 6 lotes).
Formato do QR Code
Unidade: MD|codigo|lote|validade|descricao
Caixa fechada: MDX|id|embalagem|total|cod*lote*validade*qtd*desc~cod*lote*validade*qtd*desc (lotes separados por ~).
Local: MDL|A-01-01|A|01|01|setor
Na leitura ele também entende:
JSON ({"codigo":"...","lote":"..."}), pares chave=valor separados por | ou ;,
GS1 com AIs (01)(10)(17) e, como último recurso, CODIGO|LOTE ou só o código.
Celular, tablet e computador
O app se adapta ao tamanho da tela: no celular as tabelas viram cartões (um item por bloco, sem rolagem lateral), os botões ganham área de toque de 44 px para uso com luva, os campos usam fonte 16 px para o iPhone não dar zoom ao focar e o resultado da leitura fica fixo no rodapé enquanto você bipa. No tablet os formulários se reorganizam em 2–3 colunas e no computador em 4. Vale adicionar à tela inicial (Chrome: menu → Adicionar à tela inicial; Safari: Compartilhar → Adicionar à Tela de Início) para abrir em tela cheia como um aplicativo.
Requisitos da câmera
Para a câmera funcionar, a página precisa ser aberta em https:// ou em localhost (exigência dos navegadores). Em celular Android/Chrome a leitura usa o detector nativo, sem depender de internet. No iPhone use o Safari.
Publicar online
É um arquivo único: suba em qualquer hospedagem estática (GitHub Pages, Netlify, IIS/Apache interno) e acesse pelo celular. Também funciona salvo na rede e aberto direto do arquivo, mas nesse caso a câmera pode ser bloqueada — use a entrada manual/leitor pistola.