Skip to content

Conditional Routing

Conditional routing enables intelligent, dynamic workflow paths based on form data, business rules, and complex expressions. This powerful feature allows workflows to automatically adapt to different scenarios without manual intervention.

Conditional split steps (conditional_split) evaluate expressions against form data and route requests to different workflow paths based on the results. This eliminates the need for manual decision-making in predictable scenarios.

The most common conditional routing pattern: different approval paths based on monetary values.

amount_check:
name: "amount_check"
type: "conditional_split"
description: "Route based on request amount"
choices:
- conditions: "amount > 10000"
continue_to: "ceo_approval"
- conditions: "amount > 1000"
continue_to: "manager_approval"
default:
continue_to: "auto_approve"
expense_routing:
name: "expense_routing"
type: "conditional_split"
description: "Expense approval routing"
choices:
# Executive approval for very high amounts
- conditions: "total_amount > 50000"
continue_to: "executive_committee"
# Finance approval for medium-high amounts
- conditions: "total_amount > 5000"
continue_to: "finance_director"
# Manager approval for moderate amounts
- conditions: "total_amount > 500"
continue_to: "manager_approval"
# Auto-approve small amounts
default:
continue_to: "auto_processing"

Route requests based on organizational structure and department-specific requirements.

department_routing:
name: "department_routing"
type: "conditional_split"
description: "Route by department"
choices:
# Engineering requests go to CTO
- conditions: "department == 'engineering'"
continue_to: "cto_approval"
# Finance requests need CFO approval
- conditions: "department in ['finance', 'accounting']"
continue_to: "cfo_approval"
# Legal matters require legal review
- conditions: "department == 'legal'"
continue_to: "legal_review"
# Sales and marketing requests
- conditions: "department in ['sales', 'marketing']"
continue_to: "revenue_team_approval"
default:
continue_to: "department_head_approval"

Combine multiple conditions for sophisticated business rule implementation.

advanced_routing:
name: "advanced_routing"
type: "conditional_split"
description: "Advanced Expression Routing"
choices:
# CEO approval for critical high-value requests
- conditions: "amount > 100000 and urgency == 'critical'"
continue_to: "ceo_approval"
# CFO approval for budget-impacting expenses
- conditions: "amount > 50000 and ('budget' in tags or category == 'consulting')"
continue_to: "cfo_approval"
# CTO approval for engineering technology purchases
- conditions: "department == 'engineering' and amount > 30000 and category in ['equipment', 'software']"
continue_to: "cto_approval"
# Legal approval for high-value legal matters
- conditions: "department == 'legal' and amount > 25000"
continue_to: "legal_approval"
# Urgent requests get expedited processing
- conditions: "urgency == 'critical' or (urgency == 'high' and priority >= 3)"
continue_to: "expedited_approval"
# Compliance review for flagged requests
- conditions: "'compliance' in tags and amount > 5000"
continue_to: "compliance_review"
default:
continue_to: "standard_approval"
# Numeric comparisons
conditions: "amount > 1000"
conditions: "total_cost <= 5000"
conditions: "priority >= 3"
conditions: "quantity != 0"
# String equality
conditions: "department == 'engineering'"
conditions: "status != 'draft'"
conditions: "urgency == 'high'"
# AND logic
conditions: "amount > 10000 and urgency == 'critical'"
# OR logic
conditions: "department == 'legal' or department == 'compliance'"
# NOT logic
conditions: "not (status == 'cancelled')"
# Complex combinations
conditions: "(amount > 50000 and urgency == 'high') or (department == 'finance' and amount > 25000)"
# Membership testing
conditions: "category in ['equipment', 'software', 'hardware']"
conditions: "department in ['sales', 'marketing']"
# Tag checking
conditions: "'urgent' in tags"
conditions: "'budget_approved' in tags"
# Multiple list operations
conditions: "category in ['consulting', 'training'] and 'approved_vendor' in tags"
# Date comparisons (assuming proper date format)
conditions: "expense_date >= '2024-01-01'"
conditions: "due_date <= today"
# Time-based logic
conditions: "created_at > last_month"
conditions: "travel_start_date > today + 7_days"
it_equipment_routing:
name: "it_equipment_routing"
type: "conditional_split"
description: "IT Equipment Request Routing"
choices:
# High-value equipment needs IT director approval
- conditions: "equipment_cost > 5000"
continue_to: "it_director_approval"
# Security equipment needs additional security review
- conditions: "category == 'security' and equipment_cost > 1000"
continue_to: "security_review"
# Bulk orders need procurement involvement
- conditions: "quantity > 10 or total_cost > 10000"
continue_to: "procurement_review"
# Standard equipment for managers and above
- conditions: "requestor_level in ['manager', 'director', 'vp'] and equipment_cost <= 2000"
continue_to: "auto_approve"
default:
continue_to: "manager_approval"
travel_expense_routing:
name: "travel_expense_routing"
type: "conditional_split"
description: "Travel Expense Approval Routing"
choices:
# International travel needs additional approvals
- conditions: "travel_type == 'international' and total_amount > 3000"
continue_to: "international_travel_approval"
# Conference and training expenses
- conditions: "expense_type == 'conference' and total_amount > 2000"
continue_to: "training_budget_approval"
# Client-related travel
- conditions: "'client_visit' in purpose and total_amount > 1500"
continue_to: "sales_director_approval"
# Regular business travel
- conditions: "travel_type == 'domestic' and total_amount > 1000"
continue_to: "manager_approval"
default:
continue_to: "auto_processing"
purchase_order_routing:
name: "purchase_order_routing"
type: "conditional_split"
description: "Purchase Order Routing Logic"
choices:
# New vendor requires additional vetting
- conditions: "vendor_status == 'new' and total_amount > 5000"
continue_to: "vendor_approval_process"
# Capital expenditure approval
- conditions: "expense_type == 'capex' and total_amount > 25000"
continue_to: "capex_approval_committee"
# Recurring orders from approved vendors
- conditions: "order_type == 'recurring' and vendor_status == 'approved' and total_amount <= previous_order_amount * 1.1"
continue_to: "auto_approve"
# Urgent procurement
- conditions: "urgency == 'critical' and total_amount <= urgent_approval_limit"
continue_to: "emergency_approval"
# Multi-department impact
- conditions: "affected_departments.length > 2 and total_amount > 15000"
continue_to: "multi_department_approval"
default:
continue_to: "standard_procurement_approval"
primary_routing:
name: "primary_routing"
type: "conditional_split"
choices:
- conditions: "amount > 50000"
continue_to: "high_value_routing"
- conditions: "department == 'engineering'"
continue_to: "engineering_routing"
default:
continue_to: "standard_approval"
high_value_routing:
name: "high_value_routing"
type: "conditional_split"
choices:
- conditions: "amount > 100000"
continue_to: "board_approval"
- conditions: "urgency == 'critical'"
continue_to: "ceo_approval"
default:
continue_to: "cfo_approval"
dynamic_approval_routing:
name: "dynamic_approval_routing"
type: "conditional_split"
choices:
# Use dynamic approval limits based on requestor level
- conditions: "amount > requestor.approval_limit"
continue_to: "escalated_approval"
# Department-specific limits
- conditions: "amount > department_budget.monthly_limit * 0.1"
continue_to: "budget_review"
default:
continue_to: "within_authority_approval"
  1. Order Conditions by Frequency: Place most common conditions first
  2. Use Simple Expressions: Complex expressions take longer to evaluate
  3. Cache Dynamic Values: Pre-calculate frequently used values
  4. Minimize Database Lookups: Avoid complex joins in conditions
  1. Clear Condition Logic: Make expressions readable and maintainable
  2. Document Complex Rules: Add comments explaining business logic
  3. Test Edge Cases: Verify behavior with boundary values
  4. Monitor Performance: Track evaluation times for complex expressions

Next Steps: