Aptiwise
Aptiwise
Aptiwise DocumentationForm Layout Feature - Implementation CompleteForm Layout Feature Implementation Guide
Getting Started
User Guide
Workflow Types & Patterns
Conditional RoutingDecision StepsExpense Approval WorkflowForm IntegrationParallel Approval
Workflow Types & Patterns

Conditional Routing

Intelligent workflow routing based on form data and business rules

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

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

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

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

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

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

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

Combine multiple conditions for sophisticated business rule implementation.

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

Comparison Operators

# 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'"

Logical Operators

# 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)"

List Operations

# 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 and Time Conditions

# 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"

🔄 Real-World Scenarios

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

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

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

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

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

Expression Optimization

  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

Best Practices

  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:

  • 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

Workflow Types & Patterns

Comprehensive guide to Aptiwise workflow types with visual diagrams and examples

Decision Steps

Binary and multi-outcome approval scenarios in Aptiwise workflows

On this page

Conditional Routing📋 Overview💰 Amount-Based RoutingBasic Amount RoutingAdvanced Amount Logic🏢 Department-Based RoutingDepartment Routing Implementation🚨 Complex Multi-Criteria LogicMulti-Criteria Implementation📝 Expression Syntax GuideComparison OperatorsLogical OperatorsList OperationsDate and Time Conditions🔄 Real-World ScenariosIT Equipment Request RoutingTravel Expense RoutingPurchase Order Complexity⚙️ Advanced PatternsNested ConditionalsDynamic Approval Limits📊 Performance ConsiderationsExpression OptimizationBest Practices