← Projetos

Integração fiscal entre Shopify e ERP

Worker em TypeScript que transforma cada pedido pago em documento fiscal no ERP, com idempotência, criação de cliente e produto sob demanda e abate de estoque.

TypeScriptCloudflare WorkersShopify APIRESTWebhooks
Status
Em produção
Ano
2026
Contexto
Varejo de moda · operação em Portugal
0
Lançamentos manuais
Produção
Validado com cliente real
Integração fiscal entre Shopify e ERP

O problema

A loja vendia online e alguém abria o ERP para lançar cada pedido à mão. Além do tempo, era fonte constante de erro: série fiscal trocada, armazém errado, família de produto que não batia com o cadastro. E a mesma razão social também tem operação física, então o documento precisava sair isolado por série, armazém e família — do contrário a contabilidade das duas frentes se misturava.

O que construí

Um Worker na Cloudflare, em TypeScript, entre a loja e o ERP:

  • Escuta o webhook de pedido pago da loja.
  • Traduz o pedido para o formato do documento fiscal, aplicando as regras de série, armazém e família da empresa.
  • Cria cliente e produto sob demanda quando o pedido traz alguém ou algo que ainda não existe no ERP, em vez de falhar e exigir cadastro manual antes.
  • Abate o estoque na mesma operação.
  • Emite o documento e devolve o número gerado.

Decisões técnicas

Idempotência antes de tudo. Webhook não é entregue exatamente uma vez — é entregue pelo menos uma vez. Sem uma chave de idempotência amarrada ao pedido, uma reentrega gera fatura duplicada, que em documento fiscal é problema contábil, não bug de software. Cada pedido é marcado antes da emissão e reprocessamento devolve o documento já criado em vez de emitir outro.

Worker em vez de servidor. O volume é baixo e irregular — picos em campanha, silêncio no resto. Sem servidor, não há máquina ociosa custando dinheiro nem host esquecido sem atualização, que é o tipo de coisa que vira incidente de segurança seis meses depois. Escala sozinho no pico.

Falha explícita. Quando o ERP recusa o documento, o erro é registrado com o pedido que o causou, em vez de ser engolido. Integração silenciosa que falha em silêncio é pior que integração que não existe: ninguém percebe até fechar o mês.

Como verifiquei

Reprocessamento do mesmo pedido para confirmar que a idempotência segura a duplicata; pedidos com cliente novo e produto novo para exercitar os dois caminhos de criação sob demanda; e conferência do documento gerado no ERP contra o pedido original, campo a campo, antes de considerar entregue. Validado em produção com o cliente.