# Business Logic Blocks

Business logic blocks provide decision-making and data transformation capabilities for implementing conditional logic and data processing in your flows.

## Condition Block
[Section titled “Condition Block”](#condition-block)
Evaluates JavaScript expressions based on incoming event data and routes events to one of two outputs (true or false) based on the result.

### Example Usage
[Section titled “Example Usage”](#example-usage)

**

```
// Route based on user roleoutputs.getUserRole.role === 'admin'
// Check numeric thresholdsoutputs.checkBalance.amount > 1000
// Complex conditions with multiple criteriaoutputs.userInfo.active && outputs.userInfo.subscription === 'premium'
```

### Use Cases
[Section titled “Use Cases”](#use-cases)
 - **User access control**: Route different user types to appropriate processing paths
 - **Data validation**: Direct valid vs invalid data to different handling workflows
 - **Business rule enforcement**: Implement conditional logic based on business requirements
 - **Error handling**: Route successful vs failed operations to appropriate response flows

## Transform Block
[Section titled “Transform Block”](#transform-block)
Creates new output events by evaluating JavaScript expressions. Primary block for data transformation, restructuring, and computation within flows.

### Expression Capabilities
[Section titled “Expression Capabilities”](#expression-capabilities)
#### Data Restructuring
[Section titled “Data Restructuring”](#data-restructuring)

**

```
// Flatten nested data{  userId: outputs.userInfo.profile.id,  userName: outputs.userInfo.profile.name,  isActive: outputs.userStatus.active}
```

#### Calculations and Computations
[Section titled “Calculations and Computations”](#calculations-and-computations)

**

```
// Calculate totals and percentages{  originalData: outputs.salesData,  totalSales: outputs.salesData.reduce((sum, item) => sum + item.amount, 0),  averageOrder: outputs.salesData.length > 0 ?    outputs.salesData.reduce((sum, item) => sum + item.amount, 0) / outputs.salesData.length : 0}
```

#### Conditional Data Creation
[Section titled “Conditional Data Creation”](#conditional-data-creation)

**

```
// Create different output structures based on conditionsoutputs.userInfo.role === 'admin' ? {  adminData: outputs.userInfo,  permissions: 'full',  dashboardUrl: '/admin-dashboard'} : {  userData: outputs.userInfo,  permissions: 'limited',  dashboardUrl: '/user-dashboard'}
```

#### String Manipulation and Formatting
[Section titled “String Manipulation and Formatting”](#string-manipulation-and-formatting)

**

```
// Format and combine text data{  welcomeMessage: `Hello ${outputs.userInfo.name}, your account balance is $${outputs.accountInfo.balance}`,  displayName: outputs.userInfo.firstName + ' ' + outputs.userInfo.lastName,  formattedDate: new Date(outputs.eventData.timestamp).toLocaleDateString()}
```

### Advanced Expression Patterns
[Section titled “Advanced Expression Patterns”](#advanced-expression-patterns)
#### Anonymous Functions for Complex Logic
[Section titled “Anonymous Functions for Complex Logic”](#anonymous-functions-for-complex-logic)

**

```
(function() {  const user = outputs.userInfo;  const preferences = outputs.userPreferences;
  // Complex processing logic  let recommendedActions = [];  if (user.lastLoginDays > 30) {    recommendedActions.push('re-engagement');  }  if (preferences.notifications === false) {    recommendedActions.push('enable-notifications');  }
  return {    user: user,    recommendations: recommendedActions,    priority: recommendedActions.length > 0 ? 'high' : 'low'  };})()
```

### Use Cases
[Section titled “Use Cases”](#use-cases-1)
 - **Data formatting**: Convert data between different formats and structures
 - **Message templating**: Create formatted messages for notifications or responses
 - **Calculation workflows**: Perform mathematical operations on incoming data
 - **Data aggregation**: Combine and summarize information from multiple sources