Creado

Juan Robles

Step Function: states-dev-loan-late-payment

Descripción

Esta máquina de estados está diseñada para calcular penalidades diarias y mensuales por pagos atrasados, ejecutándose de forma recurrente cada 24 horas hasta que se determine que el préstamo ya no está activo (es decir, no requiere más penalidades).

🚦 Estados y flujo:

  1. CalculateStartOfDay (Pass):
    Calcula el inicio del día (timestamp a medianoche) a partir del timestamp de entrada, para usarlo como referencia.

  2. Wait Date (Wait):
    Espera hasta el momento exacto del timestamp de entrada para continuar.

  3. SetTransactionId (Pass):
    Extrae y asigna el transaction_id desde la entrada original del execution context.

  4. Daily Rate Calculation (Task):
    Invoca una función Lambda para calcular la penalidad diaria. El resultado se combina con la entrada y se pasa al siguiente estado.

    • Incluye retry automático ante errores de Lambda con backoff exponencial.

  5. Pass (Pass):
    Evalúa si el día actual es el último del mes (end_of_the_month = true).

    • Esto se hace comparando si el mes del día actual es diferente al mes del día siguiente.

  6. Choice (Choice):
    Verifica si es fin de mes:

    • Si , invoca el cálculo mensual.

    • Si no, continúa con la validación de actividad.

  7. Monthly Rate Calculation (Task):
    Ejecuta una función Lambda para calcular la penalidad mensual.

    • También tiene políticas de reintento configuradas.

    • Una vez terminada, continúa a Active?.

  8. Active? (Choice):
    Verifica si el resultado indica que el préstamo está activo (result = 0).

    • Si no está activo, pasa al estado Success.

    • Si sigue activo, repite el flujo.

  9. Success (Succeed):
    Finaliza exitosamente la ejecución cuando ya no se requieren penalidades.

  10. Wait 24h (Wait):
    Si el préstamo sigue activo, espera 24 horas antes de repetir el ciclo desde SetTransactionId.

Diagrama

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

Código para Mermaid

stateDiagram-v2
    [*] --> Wait_Date
    Wait_Date --> Daily_Rate_Calculation
    Daily_Rate_Calculation --> Choice_EndOfMonth

    Choice_EndOfMonth --> Monthly_Rate_Calculation : "end_of_the_month = true"
    Choice_EndOfMonth --> Active_Check : "default"

    Monthly_Rate_Calculation --> Active_Check

    Active_Check --> Success : "result = 0"
    Active_Check --> Wait_24h : "default"
    Wait_24h --> Daily_Rate_Calculation

    Success --> [*]