Creado

Juan Robles

Revisado

Juan Robles

Revisado

Juan Robles

Actualizado

Juan Robles

Step Function states-dev-payment

Descripción

Este flujo maneja los estados de un pago dentro del sistema, asegurando su procesamiento, validación y resolución. Se compone de varias fases clave:

Determinación del Estado Inicial

  • Evalúa el estado inicial del pago y lo redirige a la fase correspondiente: programado, pendiente, confirmado, cancelado, rechazado o reportado.

  • Si el pago es manual, se asigna directamente como pendiente.

Procesamiento del Pago

  • Si el pago está programado, se ejecuta hasta su confirmación, cancelación o expiración.

  • En el caso de un pago pendiente, espera una acción que lo confirme o lo reporte como recibido.

Verificación y Reporte de Pagos

  • Si un pago es reportado, se valida su confirmación o se marca como no confirmado.

  • Los pagos no confirmados pueden volver a ser reportados, confirmados o marcados como manuales.

Ejecución del Pago en Plataforma Bancaria

  • Una vez en proceso, el pago pasa por un intento en la plataforma bancaria.

  • Dependiendo de la respuesta de la plataforma, el pago puede confirmarse, rechazarse por falta de fondos o por errores técnicos.

Manejo de Errores y Reintentos

  • En caso de error por falta de fondos, el sistema realiza reintentos hasta alcanzar el límite permitido.

  • Para fallas técnicas, también se programan reintentos antes de marcar el pago como rechazado.

  • Los rechazos definitivos generan notificaciones y pueden requerir intervención manual.

Estados Finales

  • Un pago puede finalizar como confirmado, cancelado o rechazado según su trayectoria en el flujo.

Diagrama de estados

mermaid-diagram-2025-03-20-124836.png

Fragmento de código

stateDiagram-v2
    [*] --> Choice
    Choice --> PaymentScheduled : "payment-scheduled"
    Choice --> PaymentInProcess : "payment-in-process"
    Choice --> PaymentCancelled : "payment-canceled"
    Choice --> PaymentConfirmed : "payment-confirmed"
    Choice --> PaymentRejected : "payment-rejected"
    Choice --> PaymentPending : "payment-pending"
    Choice --> PaymentReported : "payment-reported"
    Choice --> PaymentUnconfirmed : "payment-unconfirmed"

    PaymentScheduled --> PaymentInProcess : "transaction-expires"
    PaymentScheduled --> PaymentCancelled : "bank-account-changed / payment-cancelled"

    PaymentPending --> PaymentConfirmed : "payment-confirmed"
    PaymentPending --> PaymentReported : "payment-reported"

    PaymentReported --> PaymentConfirmed : "payment-confirmed"
    PaymentReported --> PaymentUnconfirmed : "payment-unconfirmed"

    PaymentUnconfirmed --> PaymentReported : "payment-reported"
    PaymentUnconfirmed --> PaymentConfirmed : "payment-confirmed"

    PaymentInProcess --> RailProcess : "invoke rail payout"
    RailProcess --> PaymentConfirmed : "payment-confirmed"
    RailProcess --> PaymentRejected : "payment-rejected"

    PaymentRejected --> CounterFunds : "substatus = 3"
    PaymentRejected --> CounterTech : "substatus = 4"

    CounterFunds --> PaymentRejected : "max retry funds reached"
    CounterFunds --> WaitNotFunds : "retry funds"
    WaitNotFunds --> RailProcess

    CounterTech --> PaymentRejected : "max retry tech reached"
    CounterTech --> WaitTechFailure : "retry tech"
    WaitTechFailure --> RailProcess

    PaymentConfirmed --> [*]
    PaymentCancelled --> [*]
    PaymentRejected --> [*]