Follow-up das reviews de 13/08 e 19/08 na #802 (aceito como follow-up nas duas).
Dois pontos estruturais do app Bling ERP:
-
Sem camada de reconciliação — o único cron é o refresh de token (bling-erp.ts). Evento automático que falha (fora do retry do failurePolicy) se perde: nenhuma varredura periódica compara loja × Bling para reprocessar pendências.
-
Sem dedupe de redelivery do PubSub — a janela de duplo processamento é o handler inteiro (event-to-bling.ts), com POST /pedidos/vendas não idempotente dentro dela: redelivery pode duplicar pedido no Bling. Falta um marcador por eventId/messageId (Firestore) para descartar reentrega já processada.
Follow-up das reviews de 13/08 e 19/08 na #802 (aceito como follow-up nas duas).
Dois pontos estruturais do app Bling ERP:
Sem camada de reconciliação — o único cron é o refresh de token (
bling-erp.ts). Evento automático que falha (fora do retry dofailurePolicy) se perde: nenhuma varredura periódica compara loja × Bling para reprocessar pendências.Sem dedupe de redelivery do PubSub — a janela de duplo processamento é o handler inteiro (
event-to-bling.ts), comPOST /pedidos/vendasnão idempotente dentro dela: redelivery pode duplicar pedido no Bling. Falta um marcador poreventId/messageId(Firestore) para descartar reentrega já processada.