{
  "name": "Data Validation & ETL Pipeline",
  "version": "1.0.0",
  "description": "Demonstrates schema validation, data transformation, and filtering - common ETL patterns",
  "input_schema": {
    "type": "object",
    "properties": {
      "records": {
        "type": "array",
        "description": "Array of user records to process",
        "items": {
          "type": "object",
          "properties": {
            "id": { "type": "string" },
            "name": { "type": "string" },
            "email": { "type": "string" },
            "age": { "type": "integer" },
            "status": { "type": "string" },
            "score": { "type": "number" }
          }
        }
      }
    },
    "required": ["records"]
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "valid_records": { "type": "array" },
      "invalid_records": { "type": "array" },
      "high_value_users": { "type": "array" },
      "summary": { "type": "object" }
    }
  },
  "stages": [
    {
      "id": "log-start",
      "name": "Log ETL Start",
      "component_type": "logger",
      "config": {
        "message": "Starting ETL pipeline",
        "level": "info",
        "data": {
          "record_count": "{{input.records}}"
        }
      },
      "depends_on": [],
      "position": { "x": 100, "y": 200 }
    },
    {
      "id": "validate-schema",
      "name": "Validate Record Schema",
      "component_type": "schema_validate",
      "config": {
        "data": "{{input.records}}",
        "json_schema": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["id", "name", "email"],
            "properties": {
              "id": { "type": "string", "minLength": 1 },
              "name": { "type": "string", "minLength": 1 },
              "email": { "type": "string", "format": "email" },
              "age": { "type": "integer", "minimum": 0, "maximum": 150 },
              "status": { "type": "string", "enum": ["active", "inactive", "pending"] },
              "score": { "type": "number", "minimum": 0, "maximum": 100 }
            }
          }
        },
        "strict": false,
        "collect_all_errors": true
      },
      "depends_on": ["log-start"],
      "position": { "x": 300, "y": 200 }
    },
    {
      "id": "transform-records",
      "name": "Transform & Normalize",
      "component_type": "json_transform",
      "config": {
        "data": "{{upstream.validate-schema.data}}",
        "jmespath_expression": "[*].{ id: id, name: name, email: email, age: age || `0`, status: status || 'pending', score: score || `0`, is_adult: age >= `18` }"
      },
      "depends_on": ["validate-schema"],
      "position": { "x": 500, "y": 200 }
    },
    {
      "id": "filter-active",
      "name": "Filter Active Users",
      "component_type": "filter",
      "config": {
        "data": "{{upstream.transform-records.result}}",
        "condition": "item.get('status') == 'active'",
        "filter_mode": "filter_array"
      },
      "depends_on": ["transform-records"],
      "position": { "x": 700, "y": 100 }
    },
    {
      "id": "filter-high-score",
      "name": "Filter High Value Users",
      "component_type": "filter",
      "config": {
        "data": "{{upstream.transform-records.result}}",
        "condition": "item.get('score', 0) >= 80",
        "filter_mode": "filter_array"
      },
      "depends_on": ["transform-records"],
      "position": { "x": 700, "y": 300 }
    },
    {
      "id": "set-active-count",
      "name": "Store Active Count",
      "component_type": "variable_set",
      "config": {
        "name": "active_user_count",
        "value": "{{upstream.filter-active.data}}",
        "scope": "pipeline"
      },
      "depends_on": ["filter-active"],
      "position": { "x": 900, "y": 100 }
    },
    {
      "id": "create-summary",
      "name": "Create Summary",
      "component_type": "json_transform",
      "config": {
        "data": {
          "all_records": "{{upstream.transform-records.result}}",
          "active_users": "{{upstream.filter-active.data}}",
          "high_value_users": "{{upstream.filter-high-score.data}}",
          "validation": "{{upstream.validate-schema}}"
        },
        "jmespath_expression": "{ total_records: length(all_records), active_count: length(active_users), high_value_count: length(high_value_users), validation_passed: validation.valid, validation_errors: validation.errors, active_users: active_users, high_value_users: high_value_users }"
      },
      "depends_on": ["set-active-count", "filter-high-score"],
      "position": { "x": 1100, "y": 200 }
    },
    {
      "id": "log-complete",
      "name": "Log ETL Complete",
      "component_type": "logger",
      "config": {
        "message": "ETL pipeline complete",
        "level": "info",
        "data": "{{upstream.create-summary.result}}"
      },
      "depends_on": ["create-summary"],
      "position": { "x": 1300, "y": 200 }
    }
  ],
  "output_stage_id": "create-summary"
}
