A request router can map an integer kind to a route label and adjusted cost.

Program

Play the program to choose a request kind and see the selected branch update the workflow state.

route_request_workflow.f90
program route_request_workflow_demo
    implicit none
    integer :: request_kind
    integer :: base_cost
    integer :: adjusted_cost
    character(len=8) :: route

    request_kind = 
    base_cost = 40
    select case (request_kind)
    case (1)
        route = 'fast'
        adjusted_cost = base_cost - 5
    case (2)
        route = 'normal'
        adjusted_cost = base_cost
    case default
        route = 'review'
        adjusted_cost = base_cost + 20
    end select
    print '(A, 1X, I0)', trim(route), adjusted_cost
end program route_request_workflow_demo
program route_request_workflow_demo
    implicit none
    integer :: request_kind
    integer :: base_cost
    integer :: adjusted_cost
    character(len=8) :: route

    request_kind = 
    base_cost = 40
    select case (request_kind)
    case (1)
        route = 'fast'
        adjusted_cost = base_cost - 5
    case (2)
        route = 'normal'
        adjusted_cost = base_cost
    case default
        route = 'review'
        adjusted_cost = base_cost + 20
    end select
    print '(A, 1X, I0)', trim(route), adjusted_cost
end program route_request_workflow_demo
program route_request_workflow_demo
    implicit none
    integer :: request_kind
    integer :: base_cost
    integer :: adjusted_cost
    character(len=8) :: route

    request_kind = 
    base_cost = 40
    select case (request_kind)
    case (1)
        route = 'fast'
        adjusted_cost = base_cost - 5
    case (2)
        route = 'normal'
        adjusted_cost = base_cost
    case default
        route = 'review'
        adjusted_cost = base_cost + 20
    end select
    print '(A, 1X, I0)', trim(route), adjusted_cost
end program route_request_workflow_demo
select case `select case` chooses one route from several explicit cases.
case default The default case handles request kinds not matched earlier.
workflow state Both the label and the cost are updated by the selected branch.