{
"Comment": "Full freight booking pipeline: validate, check capacity, verify hazmat, calculate rates, confirm, and schedule pickup",
"StartAt": "ValidateBooking",
"States": {
"ValidateBooking": {
"Type": "Task",
"Resource": "${ValidateBookingFunctionArn}",
"ResultPath": "$.validation",
"Next": "IsBookingValid"
},
"IsBookingValid": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.validation.Payload.isValid",
"BooleanEquals": true,
"Next": "CheckCarrierCapacity"
}
],
"Default": "CancelInvalidBooking"
},
"CancelInvalidBooking": {
"Type": "Task",
"Resource": "${CancelBookingFunctionArn}",
"Parameters": {
"cancelReason": "Booking validation failed",
"cancelReasonCode": "INVALID_BOOKING",
"booking.$": "$"
},
"ResultPath": "$.cancellation",
"Next": "BookingFailed"
},
"CheckCarrierCapacity": {
"Type": "Task",
"Resource": "${CheckCarrierCapacityFunctionArn}",
"ResultPath": "$.capacity",
"Next": "IsCapacityAvailable"
},
"IsCapacityAvailable": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.capacity.Payload.isCapacityAvailable",
"BooleanEquals": true,
"Next": "VerifyHazmat"
}
],
"Default": "CancelNoCapacity"
},
"CancelNoCapacity": {
"Type": "Task",
"Resource": "${CancelBookingFunctionArn}",
"Parameters": {
"cancelReason": "No carrier capacity available",
"cancelReasonCode": "NO_CAPACITY",
"booking.$": "$"
},
"ResultPath": "$.cancellation",
"Next": "BookingFailed"
},
"VerifyHazmat": {
"Type": "Task",
"Resource": "${VerifyHazmatFunctionArn}",
"ResultPath": "$.hazmat",
"Next": "IsHazmatCompliant"
},
"IsHazmatCompliant": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.hazmat.Payload.isHazmatCompliant",
"BooleanEquals": true,
"Next": "CalculateFreightRates"
}
],
"Default": "CancelHazmatViolation"
},
"CancelHazmatViolation": {
"Type": "Task",
"Resource": "${CancelBookingFunctionArn}",
"Parameters": {
"cancelReason": "Hazardous materials compliance failure",
"cancelReasonCode": "HAZMAT_VIOLATION",
"booking.$": "$"
},
"ResultPath": "$.cancellation",
"Next": "BookingFailed"
},
"CalculateFreightRates": {
"Type": "Task",
"Resource": "${CalculateFreightRatesFunctionArn}",
"ResultPath": "$.rates",
"Next": "ConfirmBooking"
},
"ConfirmBooking": {
"Type": "Task",
"Resource": "${ConfirmBookingFunctionArn}",
"ResultPath": "$.confirmation",
"Next": "SchedulePickup"
},
"SchedulePickup": {
"Type": "Task",
"Resource": "${SchedulePickupFunctionArn}",
"ResultPath": "$.pickup",
"Next": "BookingComplete"
},
"BookingComplete": {
"Type": "Succeed"
},
"BookingFailed": {
"Type": "Succeed"
}
}
}JSONLogistics teams can use patterns like this to build reliable, compliant, and scalable automation for payment systems and can test and refine these flows locally with Thrubit to reduce cloud cost and speed up iteration.