Conditional Routing
Conditional Routing
Section titled “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.
📋 Overview
Section titled “📋 Overview”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.
💰 Amount-Based Routing
Section titled “💰 Amount-Based Routing”The most common conditional routing pattern: different approval paths based on monetary values.
Basic Amount Routing
Section titled “Basic Amount Routing”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"Advanced Amount Logic
Section titled “Advanced Amount Logic”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"🏢 Department-Based Routing
Section titled “🏢 Department-Based Routing”Route requests based on organizational structure and department-specific requirements.
Department Routing Implementation
Section titled “Department Routing Implementation”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"🚨 Complex Multi-Criteria Logic
Section titled “🚨 Complex Multi-Criteria Logic”Combine multiple conditions for sophisticated business rule implementation.
Multi-Criteria Implementation
Section titled “Multi-Criteria 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"📝 Expression Syntax Guide
Section titled “📝 Expression Syntax Guide”Comparison Operators
Section titled “Comparison Operators”# Numeric comparisonsconditions: "amount > 1000"conditions: "total_cost <= 5000"conditions: "priority >= 3"conditions: "quantity != 0"
# String equalityconditions: "department == 'engineering'"conditions: "status != 'draft'"conditions: "urgency == 'high'"Logical Operators
Section titled “Logical Operators”# AND logicconditions: "amount > 10000 and urgency == 'critical'"
# OR logicconditions: "department == 'legal' or department == 'compliance'"
# NOT logicconditions: "not (status == 'cancelled')"
# Complex combinationsconditions: "(amount > 50000 and urgency == 'high') or (department == 'finance' and amount > 25000)"List Operations
Section titled “List Operations”# Membership testingconditions: "category in ['equipment', 'software', 'hardware']"conditions: "department in ['sales', 'marketing']"
# Tag checkingconditions: "'urgent' in tags"conditions: "'budget_approved' in tags"
# Multiple list operationsconditions: "category in ['consulting', 'training'] and 'approved_vendor' in tags"Date and Time Conditions
Section titled “Date and Time Conditions”# Date comparisons (assuming proper date format)conditions: "expense_date >= '2024-01-01'"conditions: "due_date <= today"
# Time-based logicconditions: "created_at > last_month"conditions: "travel_start_date > today + 7_days"🔄 Real-World Scenarios
Section titled “🔄 Real-World Scenarios”IT Equipment Request Routing
Section titled “IT Equipment Request Routing”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
Section titled “Travel Expense Routing”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 Complexity
Section titled “Purchase Order Complexity”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"⚙️ Advanced Patterns
Section titled “⚙️ Advanced Patterns”Nested Conditionals
Section titled “Nested Conditionals”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 Limits
Section titled “Dynamic Approval Limits”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"📊 Performance Considerations
Section titled “📊 Performance Considerations”Expression Optimization
Section titled “Expression Optimization”- Order Conditions by Frequency: Place most common conditions first
- Use Simple Expressions: Complex expressions take longer to evaluate
- Cache Dynamic Values: Pre-calculate frequently used values
- Minimize Database Lookups: Avoid complex joins in conditions
Best Practices
Section titled “Best Practices”- Clear Condition Logic: Make expressions readable and maintainable
- Document Complex Rules: Add comments explaining business logic
- Test Edge Cases: Verify behavior with boundary values
- Monitor Performance: Track evaluation times for complex expressions
Next Steps:
- Explore Parallel Approval for committee-based decisions
- Learn about Form Integration to capture the right data for routing
- See Complete Examples of conditional routing in action