Creado |
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:
CalculateStartOfDay(Pass):
Calcula el inicio del día (timestamp a medianoche) a partir deltimestampde entrada, para usarlo como referencia.Wait Date(Wait):
Espera hasta el momento exacto deltimestampde entrada para continuar.SetTransactionId(Pass):
Extrae y asigna eltransaction_iddesde la entrada original del execution context.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.
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.
Choice(Choice):
Verifica si es fin de mes:Si sí, invoca el cálculo mensual.
Si no, continúa con la validación de actividad.
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?.
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.
Success(Succeed):
Finaliza exitosamente la ejecución cuando ya no se requieren penalidades.Wait 24h(Wait):
Si el préstamo sigue activo, espera 24 horas antes de repetir el ciclo desdeSetTransactionId.
Diagrama
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 --> [*]
