Creado

Elvis Bonilla

Revisado

Juan Robles

Actualizado

Juan Robles

Step Function states-dev-invoice

Descripción

Este flujo modela el ciclo de vida de una factura en el sistema, desde su creación hasta su pago, rechazo o expiración.

  1. Inicio en Pending

    • Se espera la ejecución de la Lambda encargada de procesar la factura.

    • Dependiendo del resultado, la factura puede ser aprobada con financiamiento (Approved Financed), aprobada sin financiamiento (Approved Unfinanced), rechazada (Rejected), declinada (Declined), o expirada (Expired).

  2. Estados posteriores a la aprobación (Approved Financed / Approved Unfinanced)

    • La factura puede evolucionar a diferentes estados:

      • PaymentConfirmed → Se confirma el pago.

      • PaymentUnconfirmed → Hay problemas con el pago.

      • Expired → La factura expira sin ser pagada.

  3. Manejo de pagos (PaymentUnconfirmed / PaymentReported)

    • Si un pago no se confirma, puede pasar a PaymentReported si se verifica el pago manualmente.

    • Si no se verifica, la factura puede expirar (Expired).

  4. Estados finales

    • Si la factura es pagada correctamente (PaymentConfirmed o PaymentReported), el proceso finaliza.

    • Si la factura expira (Expired), se da por terminada sin pago.

Diagrama de estados

mermaid-diagram-2025-04-14-210329.png

Fragmento de código

stateDiagram-v2
    [*] --> Pending

    Pending --> ApprovedFinanced : "invoice-approve"
    Pending --> ApprovedUnfinanced : "invoice-approve-unfinanced"
    Pending --> Expired : "invoice-expires"
    Pending --> Declined : "invoice-declined"
    Pending --> Rejected : "invoice-reject"

    ApprovedFinanced --> PaymentConfirmed : "payment-confirmed"
    ApprovedFinanced --> PaymentUnconfirmed : "payment-unconfirmed"
    ApprovedFinanced --> Expired : "invoice-expires"

    ApprovedFinanced --> ApprovedUnfinanced : "invoice-accelerate"

    ApprovedUnfinanced --> PaymentConfirmed : "invoice-paid-unfinanced"
    ApprovedUnfinanced --> Expired : "invoice-expires"

    PaymentUnconfirmed --> PaymentReported : "invoice-payment-verified"
    PaymentUnconfirmed --> Expired : "invoice-expires"

    PaymentReported --> PaymentConfirmed : "payment-confirmed"

    Declined --> [*]
    Rejected --> [*]
    PaymentConfirmed --> [*]
    Expired --> [*]