🧾 Disparador de Notas

Você envia o CSV de comissões da Shopee e um ZIP com os PDFs das notas. O robô casa cada loja com o seu PDF, mostra o resumo e, aprovado, manda um e-mail por loja com a nota anexada.

Painel do Disparador de Notas

Selecione uma das opções abaixo:

Iniciar Envios 🚀

🧾 Disparador Automático de Notas Fiscais

Clique em Iniciar Envios 🚀 antes de anexar as planilhas.

O protótipo só confere o nome e a extensão do arquivo. O conteúdo nunca é lido nem guardado: quem lê o CSV e abre o ZIP é o servidor.

O que o CSV precisa ter
  • Nome da loja: casa com o PDF.
  • E-mail: para onde a nota vai.
  • Comissão Total do Vendedor: o valor citado no e-mail (sem o "R$"; sem a coluna, usa 0,00).
  • Linhas sem nome da loja ou sem e-mail são puladas. O separador do CSV é detectado sozinho.
  • O ZIP traz os PDFs, com nomes no formato RNM <loja>.pdf.

Como o robô casa lojas e PDFs

  1. Nome exato: sem acento, em minúsculas e só com letras e números, o nome do PDF (depois de "RNM") contido no nome da loja, ou o contrário. Ícone 📄.
  2. Semelhança: para as lojas que sobraram, o PDF mais parecido acima de 75%. Você confirma cada par com Sim ✅ ou Não ❌. Ícone 🔍.
  3. Manual: uma loja por vez, e você digita a LETRA do PDF (A, B, C...; depois de Z vêm A1, B1...). Ícone ✍️. Há Pular Loja ⏭️ (vai para o fim da fila), Ver PDF 👁️ e Encerrar e Ir para o Resumo ⏭️.

Filtro Anti-Duplicidade ligado: PDF com nome já ENVIADO ou PENDENTE é ignorado (e apagado do lote), porque os nomes mudam a cada mês. O resumo diz quantos foram ignorados.

Etapas seguintes (demonstração)

Estas telas só existem depois que o servidor cruza o CSV com o ZIP. Aqui você percorre as mesmas telas com lojas e arquivos de exemplo, só para ver o pedido, as validações e as mensagens. Nada é enviado.

Fila de notas (fila_notas)

Estados de cada nota:

  • RASCUNHOlote montado, esperando aprovação. Só existe um lote em aprovação por vez: rascunho de lote abortado é apagado quando o próximo lote é montado.
  • PENDENTEaprovado, na fila para sair.
  • ENVIADOe-mail aceito pelo Brevo (status 200 ou 201); o PDF é apagado do disco.
  • ERROcom o motivo gravado: "PDF não encontrado no disco", "Erro API <status>: ..." ou "Erro Interno: ...".

Colunas: id, nome_loja, email_destino, caminho_pdf, status, motivo_erro, valor.

Sem dados: o painel ligado ao servidor preenche as contagens e a lista.

Regras do envio

  • Ao aprovar, os RASCUNHO viram PENDENTE e o envio roda em segundo plano, um e-mail por segundo, com a mensagem de progresso: "🚀 Disparando notas fiscais... ⏳ Enviando nota (n/total)".
  • Um envio por vez. Lote aprovado durante outro envio espera ("⏳ Há um envio em andamento. Este lote sai assim que ele terminar."). Durante o envio o robô responde: "⚠️ Aguarde o fim do processo!".
  • Limite: 290 e-mails por rodada. Ao chegar nele, pausa de 26 horas e retoma sozinho (o horário fica gravado e sobrevive a reinício). Aviso: "⏸️ PAUSA DE SEGURANÇA: Limite de 290 atingido. Retomada automática programada para dd/mm às hh:mm".
  • Com a pausa ativa, notas aprovadas ficam PENDENTE e saem na retomada: "⏸️ Pausa de segurança ativa até dd/mm às hh:mm. As notas aprovadas ficaram na fila e saem na retomada automática."
  • No fim: "✅ Operação finalizada! ... Sucessos / Erros". O robô também manda ao administrador um e-mail de resumo ("Processo Totalmente Concluído") ou de pausa, listando as falhas.
  • A pasta de extração é apagada ao terminar, mesmo com erros. Pastas de rodadas antigas (mais de 24 h) também, menos as com nota PENDENTE ou RASCUNHO.

E-mail enviado a cada loja

Assunto: Sua Nota Fiscal de Comissão Shopee - nome da loja

Olá, equipe da nome da loja.
Envio em anexo a Nota Fiscal de prestação de serviços referente às comissões geradas através do programa de afiliados da Shopee, no valor de R$ valor. O documento já está processado e pode ser direcionado para o controle contábil e financeiro da empresa.
Fico à disposição caso precisem de algum esclarecimento.
Atenciosamente,
nome da empresa

Enviado pelo Brevo, com o PDF anexado. Se o PDF sumiu do disco, a nota não sai: vira ERRO e aparece no resumo.