Máquina de Estados - Pix Automático

Visão Geral

O Pix Automático possui duas máquinas de estados independentes que operam em conjunto:

  1. Máquina de Estados do Consentimento Recorrente — controla o ciclo de vida da autorização recorrente
  2. Máquina de Estados do Pagamento Pix — controla o ciclo de vida de cada transação individual

1. Máquina de Estados do Consentimento Recorrente

O consentimento recorrente representa a autorização do usuário para a série completa de pagamentos futuros.

Diagrama

stateDiagram-v2
    direction LR

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

    AWAITING_AUTHORISATION --> PARTIALLY_ACCEPTED : Aprovação parcial\n(alçada dupla)
    AWAITING_AUTHORISATION --> AUTHORISED         : Aprovação direta\n(único titular)
    AWAITING_AUTHORISATION --> REJECTED           : Expiração (>60 min)\nou recusa do usuário

    PARTIALLY_ACCEPTED --> AUTHORISED : Todos os titulares\naprovaram
    PARTIALLY_ACCEPTED --> REJECTED   : Expiração do prazo\nou recusa de titular

    AUTHORISED --> REVOKED   : Revogação explícita\n(usuário, ITP ou detentora)
    AUTHORISED --> CONSUMED  : Expiração da vigência\nou limite total atingido

    REJECTED  --> [*]
    REVOKED   --> [*]
    CONSUMED  --> [*]

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

    class REJECTED,REVOKED,CONSUMED terminal
    class AUTHORISED active
    class PARTIALLY_ACCEPTED partial
    class AWAITING_AUTHORISATION initial

Descrição dos Estados

StatusDescriçãoTerminal?
AWAITING_AUTHORISATIONEstado inicial. Consentimento criado aguardando aprovação. Prazo: até 60 minutos
PARTIALLY_ACCEPTEDAprovado por parte dos titulares em fluxo de alçada dupla. Aguarda demais aprovações
AUTHORISEDTotalmente autorizado. Pagamentos podem ser executados dentro da vigência
REJECTEDRejeitado por expiração, recusa do usuário/recebedor ou regra da detentora
REVOKEDRevogado explicitamente após AUTHORISED por usuário, ITP ou detentora
CONSUMEDEncerrado naturalmente: vigência expirada ou limite total de valor atingido (Sweeping Accounts)

Transições Válidas

DeParaGatilho
AWAITING_AUTHORISATIONAUTHORISEDAprovação em fluxo sem múltiplos titulares
AWAITING_AUTHORISATIONPARTIALLY_ACCEPTEDPrimeiro titular aprova em alçada dupla
AWAITING_AUTHORISATIONREJECTEDExpiração (>60 min) ou recusa
PARTIALLY_ACCEPTEDAUTHORISEDTodos os titulares aprovam dentro do prazo
PARTIALLY_ACCEPTEDREJECTEDExpiração do prazo ou recusa de um titular
AUTHORISEDREVOKEDRevogação via PATCH /payment-initiation/:id
AUTHORISEDCONSUMEDexpirationDateTime atingido ou totalAllowedAmount esgotado (Sweeping)

Prazo do PARTIALLY_ACCEPTED

CondiçãoPrazo máximo
expirationDateTime definido < 30 diasAté a data de expiração
expirationDateTime definido > 30 diasAté 30 dias da criação
Sem expirationDateTimeAté 30 dias da criação
approvalDueDate definido pelo pagadorAté a data estipulada (máx. 30 dias)

2. Máquina de Estados do Pagamento Pix

Cada transação Pix enviada dentro de um consentimento AUTHORISED tem seu próprio ciclo de vida no SPB.

Diagrama

stateDiagram-v2
    direction LR

    [*] --> RCVD : POST /payments\n(pagamento criado)

    RCVD --> ACCP : Validações concluídas\npronto para SPI
    RCVD --> PDNG : Retido temporariamente\npara análise
    RCVD --> RJCT : Falha na validação\n(consentimento, dados)
    RCVD --> CANC : Cancelado pelo\nusuário

    ACCP --> ACPD : Submetido ao SPI
    ACCP --> SCHD : Agendado para\ndata futura
    ACCP --> RJCT : Falha pré-SPI

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

    SCHD --> ACPD : Data de liquidação\natingida
    SCHD --> RJCT : Falha no agendamento
    SCHD --> CANC : Cancelamento antes\nda liquidação

    PDNG --> ACCP : Análise concluída\npositivamente
    PDNG --> RJCT : Análise resulta\nem rejeição

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

    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,CANC terminal
    class ACSC success
    class RCVD,ACCP,ACPD,SCHD,PDNG inprogress

Descrição dos Estados

StatusSiglaDescriçãoTerminal?
RCVDReceivedRequisição recebida pela detentora. Validações em andamento
ACCPAccepted Customer ProfileTodas as verificações concluídas. Pronto para envio ao SPI
ACPDAccepted Clearing ProcessedSubmetido ao SPI. Aguardando confirmação de liquidação
SCHDScheduledAgendado na detentora para liquidação em data futura
PDNGPendingRetido temporariamente para análise antifraude. Não se aplica a Sweeping Accounts
ACSCAccepted Settlement CompletedLiquidado com sucesso pela detentora ou pelo SPI
RJCTRejectedRejeitado pela detentora ou pelo SPI. Ver campo rejectionReason
CANCCancelledCancelado pelo usuário antes da confirmação ou liquidação

Transições Válidas

DeParaGatilho
RCVDACCPValidações concluídas com sucesso
RCVDPDNGRetido para análise antifraude
RCVDRJCTFalha de validação (consentimento inválido, dados incorretos)
RCVDCANCUsuário cancela antes da validação
ACCPACPDEnviado ao SPI (Pix imediato)
ACCPSCHDAgendado para data futura
ACCPRJCTFalha antes da submissão ao SPI
ACPDACSCLiquidação confirmada pelo SPI
ACPDRJCTFalha durante liquidação no SPI
SCHDACPDData de liquidação atingida, submetido ao SPI
SCHDRJCTFalha na data de liquidação (saldo, limite etc.)
SCHDCANCUsuário cancela antes da liquidação
PDNGACCPAnálise antifraude positiva
PDNGRJCTAnálise antifraude negativa

Relação entre Consentimento e Pagamentos

flowchart TD
    C["🔓 Consentimento Recorrente\n[AUTHORISED]\nIntervalo: SEMANAL"]

    C --> P1["✅ Ciclo 1 — 22/05\nACSC"]
    C --> P2["✅ Ciclo 2 — 29/05\nACSC"]
    C --> P3["❌ Ciclo 3 — 05/06\nRJCT → retry → ACSC ✅"]
    C --> P4["⏳ Ciclo 4 — 12/06\nRCVD"]
    C --> PN["... ciclos futuros"]

    P3 --> R3["🔄 Retentativa\n[ACSC]"]

    C -->|"expirationDateTime\nou revogação"| ENC["🔒 REVOKED / CONSUMED"]

    style C fill:#c6e2f5,stroke:#2980b9,color:#333
    style ENC fill:#f5c6c6,stroke:#c0392b,color:#333
    style P1 fill:#d5f5d5,stroke:#27ae60,color:#333
    style P2 fill:#d5f5d5,stroke:#27ae60,color:#333
    style P3 fill:#f5c6c6,stroke:#c0392b,color:#333
    style R3 fill:#d5f5d5,stroke:#27ae60,color:#333
    style P4 fill:#fef9c3,stroke:#f39c12,color:#333
    style PN fill:#f0f0f0,stroke:#888,color:#333

Pontos de Atenção

⚠️

SCHD com consentimento revogado: Pagamentos em SCHD para o mesmo dia da revogação devem ser liquidados normalmente. Apenas pagamentos de dias futuros são rejeitados com reason: CONSENTIMENTO_REVOGADO.

⚠️

PDNG não ocorre em Sweeping Accounts: O estado PDNG é exclusivo do produto Pix Automático com terceiros. Transferências Inteligentes (mesma titularidade) não passam por este estado.

⚠️

RJCT não encerra o consentimento: Um pagamento rejeitado não afeta o consentimento. O consentimento permanece AUTHORISED e novos pagamentos podem ser enviados (dentro das regras de retentativa).

⚠️

CONSUMED vs REVOKED: CONSUMED é encerramento natural por vigência ou limite; REVOKED é cancelamento explícito. Comunique de forma diferente ao usuário final.

⚠️

Estados terminais são irreversíveis: Uma vez em ACSC, RJCT, CANC, REVOKED, CONSUMED ou REJECTED, não há volta. Para retomar pagamentos após REVOKED, um novo consentimento completo (com nova autorização do usuário) é necessário.