Creado | ||
Revisado | ||
Revisado | ||
Actualizado |
|
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
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 --> [*]
