Sistema dependente apenas da resposta síncrona
Esse erro ocorre quando a integração trata a resposta imediata da API como confirmação final da operação.
A resposta síncrona representa apenas o resultado daquela requisição. A operação pode mudar posteriormente e essas alterações precisam ser acompanhadas por eventos ou consultas de reconciliação.
Como identificar
- o status local é definido somente no momento da criação;
- a resposta inicial é tratada como confirmação definitiva;
- o ID retornado pelo Asaas não é armazenado ou relacionado ao registro interno;
- o sistema não acompanha eventos posteriores;
- alterações realizadas no Asaas não aparecem no sistema;
- não existe rotina para identificar e corrigir divergências.
Como corrigir
- Mapeie o ciclo de vida completo da operação.
- Identifique os estados iniciais, intermediários e finais.
- Armazene o ID retornado pelo Asaas.
- Relacione esse ID ao registro interno.
- Registre a resposta síncrona como estado inicial, quando aplicável.
- Acompanhe as mudanças posteriores por webhooks.
- Atualize o estado local conforme novos eventos forem recebidos.
- Implemente uma rotina de reconciliação para corrigir divergências.
- Execute ações críticas somente após a confirmação do estado esperado.
Fluxo recomendado: criar → armazenar o ID → registrar o estado inicial → acompanhar eventos → reconciliar.
Fluxo de diagnóstico
1. Modelagem da operação
%%{init: {"flowchart": {"nodeSpacing": 18,"rankSpacing": 24,"diagramPadding": 4,"padding": 7
}}}%%
flowchart TD
A["A API retornou sucesso na criação"] --> B{"A resposta inicial é tratada como confirmação final?"}
B --> BSim(("Sim"))
B --> BNao(("Não"))
B --> BDuvida(("Não sabe"))
BSim --> C["Mapear o ciclo de vida da operação"]
BDuvida --> C
BNao --> D{"O ID retornado foi armazenado?"}
C --> D
D --> DSim(("Sim"))
D --> DNao(("Não"))
DNao --> E["Salvar o ID e relacioná-lo ao registro interno"]
DSim --> F{"Os estados possíveis estão definidos?"}
E --> F
F --> FSim(("Sim"))
F --> FNao(("Não"))
F --> FDuvida(("Não sabe"))
FNao --> G["Definir estados iniciais, intermediários e finais"]
FDuvida --> H["Consultar a documentação e as regras da operação"]
H --> G
FSim --> I["Registrar o estado inicial sem encerrar o ciclo"]
G --> I
I --> J["Seguir para o acompanhamento da operação"]
classDef inicio fill:#DBEAFE,stroke:#2563EB,color:#1E3A8A,stroke-width:3px
classDef decisao fill:#FEF3C7,stroke:#D97706,color:#78350F,stroke-width:3px
classDef correcao fill:#FFEDD5,stroke:#EA580C,color:#7C2D12,stroke-width:2px
classDef validacao fill:#E0F2FE,stroke:#0284C7,color:#0C4A6E,stroke-width:2px
classDef sucesso fill:#DCFCE7,stroke:#16A34A,color:#14532D,stroke-width:3px
classDef analise fill:#FEE2E2,stroke:#DC2626,color:#7F1D1D,stroke-width:3px
classDef respostaSim fill:#22C55E,stroke:#15803D,color:#FFFFFF,stroke-width:3px
classDef respostaNao fill:#EF4444,stroke:#B91C1C,color:#FFFFFF,stroke-width:3px
classDef respostaDuvida fill:#8B5CF6,stroke:#6D28D9,color:#FFFFFF,stroke-width:3px
class A inicio
class B,D,F decisao
class C,E,G correcao
class I validacao
class J sucesso
class H analise
class BSim,DSim,FSim respostaSim
class BNao,DNao,FNao respostaNao
class BDuvida,FDuvida respostaDuvida
linkStyle default stroke:#94A3B8,stroke-width:2px
linkStyle 1,8,13 stroke:#22C55E,stroke-width:4px
linkStyle 2,9,14 stroke:#EF4444,stroke-width:4px
linkStyle 3,15 stroke:#8B5CF6,stroke-width:4px
2. Acompanhamento e reconciliação
%%{init: {"flowchart": {"nodeSpacing": 18,"rankSpacing": 24,"diagramPadding": 4,"padding": 7
}}}%%
flowchart TD
A["Operação criada e estado inicial registrado"] --> B{"Mudanças posteriores são acompanhadas?"}
B --> BSim(("Sim"))
B --> BNao(("Não"))
BNao --> C["Configurar e processar webhooks"]
BSim --> D{"O estado local é atualizado pelos eventos?"}
C --> D
D --> DSim(("Sim"))
D --> DNao(("Não"))
D --> DDuvida(("Não sabe"))
DNao --> E["Relacionar o evento ao ID da operação"]
DDuvida --> G["Comparar os eventos recebidos com o histórico local"]
G --> E
E --> F["Atualizar o estado local de forma idempotente"]
DSim --> H{"Existe rotina de reconciliação?"}
F --> H
H --> HSim(("Sim"))
H --> HNao(("Não"))
HNao --> I["Implementar consultas periódicas à API"]
HSim --> J{"Existe divergência entre os estados?"}
I --> J
J --> JSim(("Sim"))
J --> JNao(("Não"))
JSim --> K["Corrigir o estado local e registrar a divergência"]
JNao --> L["Manter monitoramento e histórico"]
K --> L
classDef inicio fill:#DBEAFE,stroke:#2563EB,color:#1E3A8A,stroke-width:3px
classDef decisao fill:#FEF3C7,stroke:#D97706,color:#78350F,stroke-width:3px
classDef correcao fill:#FFEDD5,stroke:#EA580C,color:#7C2D12,stroke-width:2px
classDef validacao fill:#E0F2FE,stroke:#0284C7,color:#0C4A6E,stroke-width:2px
classDef sucesso fill:#DCFCE7,stroke:#16A34A,color:#14532D,stroke-width:3px
classDef analise fill:#FEE2E2,stroke:#DC2626,color:#7F1D1D,stroke-width:3px
classDef respostaSim fill:#22C55E,stroke:#15803D,color:#FFFFFF,stroke-width:3px
classDef respostaNao fill:#EF4444,stroke:#B91C1C,color:#FFFFFF,stroke-width:3px
classDef respostaDuvida fill:#8B5CF6,stroke:#6D28D9,color:#FFFFFF,stroke-width:3px
class A inicio
class B,D,H,J decisao
class C,E,F,I,K correcao
class G analise
class L sucesso
class BSim,DSim,HSim,JSim respostaSim
class BNao,DNao,HNao,JNao respostaNao
class DDuvida respostaDuvida
linkStyle default stroke:#94A3B8,stroke-width:2px
linkStyle 1,6,15,20 stroke:#22C55E,stroke-width:4px
linkStyle 2,7,16,21 stroke:#EF4444,stroke-width:4px
linkStyle 8 stroke:#8B5CF6,stroke-width:4px
O primeiro fluxo valida como a operação foi modelada, enquanto o segundo verifica como as mudanças posteriores são acompanhadas e reconciliadas.
Como prevenir
Modele o ciclo de vida das entidades antes da implementação. Defina quais respostas representam apenas o estado inicial e quais confirmam a conclusão da operação. Configure webhooks, mantenha uma rotina de reconciliação e valide o fluxo completo antes do go-live.
A resposta da API confirma a requisição. O estado final da operação pode ser definido depois.
Updated about 12 hours ago
