/// Routes one application to every review track selected by its risk flags.
graph multiFlagApproval {
  node fetchApplication : FetchApplicationOperator {
    input {
      appId = ctx.appId
    }
  }

  node assessFlags : AssessRiskOperator {
    depends_on = [fetchApplication]
    input {
      application = fetchApplication.output
    }
  }

  branch mode=inclusive on assessFlags.output.reviewFlags {
    "NEEDS_REVIEW"     -> manualReview
    "NEEDS_COMPLIANCE" -> complianceReview
    "NEEDS_PRICING"    -> pricingReview
    otherwise           -> autoApprove
  }

  node manualReview : ManualReviewOperator {
    depends_on = [assessFlags]
  }

  node complianceReview : ReviewDocumentsOperator {
    depends_on = [assessFlags]
  }

  node pricingReview : UnderwritingDecisionOperator {
    depends_on = [assessFlags]
  }

  node autoApprove : ApproveLoanOperator {
    depends_on = [assessFlags]
  }
}
