ITP - Máquina de Estados - Pagamento ITP

Visão Geral

O Pagamento ITP possui duas máquinas de estados independentes:

  1. Máquina de Estados do Consentimento — ciclo de vida da autorização do usuário
  2. Máquina de Estados do Pagamento — ciclo de vida de cada transação Pix

1. Máquina de Estados do Consentimento

O consentimento representa a autorização única que o usuário concede para um pagamento específico.

Diagrama

stateDiagram-v2
    direction LR

    [*] --> AWAITING_AUTHORISATION : POST /payment-initiation\n(criação)

    AWAITING_AUTHORISATION --> AUTHORISED  : Usuário aprova\n(callback recebido)
    AWAITING_AUTHORISATION --> REJECTED    : Usuário rejeita\nou timeout
    AWAITING_AUTHORISATION --> EXPIRED     : Expiração sem\ninteração

    AUTHORISED --> CONSUMED : Pix executado\n(POST /pix chamado)
    AUTHORISED --> EXPIRED  : Expiração sem\nexecução do Pix

    REJECTED --> [*]
    CONSUMED --> [*]
    EXPIRED  --> [*]

    classDef terminal fill:#f5c6c6,stroke:#c0392b,color:#333
    classDef active   fill:#c6e2f5,stroke:#2980b9,color:#333
    classDef initial  fill:#d5f5d5,stroke:#27ae60,color:#333

    class REJECTED,CONSUMED,EXPIRED terminal
    class AUTHORISED active
    class AWAITING_AUTHORISATION initial

Descrição dos Estados

StatusDescriçãoTerminal?
AWAITING_AUTHORISATIONConsentimento criado. Aguardando autenticação e aprovação do usuário na detentora❌
AUTHORISEDAprovado. O pagamento Pix pode ser executado via POST /pix❌
REJECTEDUsuário negou o consentimento ou ocorreu access_denied na autorização✅
CONSUMEDPagamento executado com sucesso. Consentimento encerrado✅
EXPIREDConsentimento expirou por inatividade ou prazo sem execução✅

Transições Válidas

DeParaGatilho
AWAITING_AUTHORISATIONAUTHORISEDCallback processado com sucesso (code válido)
AWAITING_AUTHORISATIONREJECTEDerror=access_denied no callback
AWAITING_AUTHORISATIONEXPIREDTimeout da sessão de autorização
AUTHORISEDCONSUMEDPOST /pix executado e pagamento submetido
AUTHORISEDEXPIREDExpiração sem chamada ao endpoint de Pix

2. Máquina de Estados do Pagamento

Cada transação Pix gerada via POST /pix possui seu próprio ciclo de vida no SPB (Sistema de Pagamentos Brasileiro).

Diagrama

stateDiagram-v2
    direction LR

    [*] --> PDNG : POST /pix\n(pagamento criado)

    PDNG --> ACSP : Enviado ao SPI\n(validação OK)
    PDNG --> RJCT : Falha na validação\n(consentimento, dados)

    ACSP --> ACSC : Liquidação confirmada\npelo SPI
    ACSP --> RJCT : Falha durante\na liquidação

    ACSC --> [*]
    RJCT --> [*]

    classDef terminal   fill:#f5c6c6,stroke:#c0392b,color:#333
    classDef success    fill:#d5f5d5,stroke:#27ae60,color:#333
    classDef inprogress fill:#fef9c3,stroke:#f39c12,color:#333
    classDef initial    fill:#c6e2f5,stroke:#2980b9,color:#333

    class RJCT terminal
    class ACSC success
    class ACSP inprogress
    class PDNG initial

Descrição dos Estados

StatusSigla OFBDescriçãoTerminal?
PDNGPendingPagamento recebido e aguardando submissão ao SPB❌
ACSPAccepted Settlement In ProcessAceito pelo SPI do Banco Central❌
ACSCAccepted Settlement CompletedLiquidado com sucesso✅
RJCTRejectedRejeitado pelo SPB ou pela detentora✅

Transições Válidas

DeParaGatilho
PDNGACSPPagamento submetido ao SPI com sucesso
PDNGRJCTFalha na validação antes da submissão
ACSPACSCLiquidação confirmada pelo SPI
ACSPRJCTFalha durante liquidação no SPB

Relação entre Consentimento e Pagamento

flowchart TD
    A["🔐 POST /payment-initiation\nConsentimento criado\n[AWAITING_AUTHORISATION]"]
    B["✅ Usuário aprova\n[AUTHORISED]"]
    C["💸 POST /pix\nPagamento submetido\n[PDNG → ACSP → ACSC]"]
    D["🔒 Consentimento\n[CONSUMED]"]
    E["❌ Usuário rejeita\n[REJECTED]"]
    F["⏱️ Timeout\n[EXPIRED]"]

    A --> B
    A --> E
    A --> F
    B --> C
    C --> D

    style A fill:#d5f5d5,stroke:#27ae60,color:#333
    style B fill:#c6e2f5,stroke:#2980b9,color:#333
    style C fill:#fef9c3,stroke:#f39c12,color:#333
    style D fill:#f5c6c6,stroke:#c0392b,color:#333
    style E fill:#f5c6c6,stroke:#c0392b,color:#333
    style F fill:#f5c6c6,stroke:#c0392b,color:#333

Pontos de Atenção

⚠️

Consentimento CONSUMED ≠ pagamento ACSC: O consentimento vai para CONSUMED quando o POST /pix é chamado e o pagamento é submetido, não necessariamente quando liquida. O pagamento ainda pode ser rejeitado (RJCT) mesmo com consentimento CONSUMED.

⚠️

Estados terminais são irreversíveis: Consentimentos REJECTED, CONSUMED ou EXPIRED não podem ser reativados. Um novo POST /payment-initiation e nova autorização são necessários.

⚠️

EXPIRED no consentimento: Se o usuário não completar a jornada de autorização dentro do prazo, ou se o Pix não for submetido dentro do prazo de validade do consentimento AUTHORISED, o estado vai para EXPIRED automaticamente.


Did this page help you?