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

  1. Mapeie o ciclo de vida completo da operação.
  2. Identifique os estados iniciais, intermediários e finais.
  3. Armazene o ID retornado pelo Asaas.
  4. Relacione esse ID ao registro interno.
  5. Registre a resposta síncrona como estado inicial, quando aplicável.
  6. Acompanhe as mudanças posteriores por webhooks.
  7. Atualize o estado local conforme novos eventos forem recebidos.
  8. Implemente uma rotina de reconciliação para corrigir divergências.
  9. 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.



Did this page help you?