{
  "name": "Monthly DLD CSV Refresh",
  "nodes": [
    {
      "parameters": {},
      "id": "node_manual_trigger",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        100,
        100
      ]
    },
    {
      "parameters": {
        "functionCode": "// Validate CSV metadata\nconst payload = $input.first().body || {};\n\nconst validation = {\n  has_filename: !!payload.filename,\n  has_upload_date: !!payload.upload_date,\n  has_row_count: payload.row_count && payload.row_count > 0,\n  expected_columns: ['transaction_reference', 'transaction_date', 'property_address', 'price_aed', 'size_sqm'].every(col => \n    payload.columns && payload.columns.includes(col)\n  ),\n  is_valid: true\n};\n\n// Mark invalid if any check fails\nif (!validation.has_filename || !validation.has_upload_date || !validation.has_row_count) {\n  validation.is_valid = false;\n}\n\nreturn [{\n  ...payload,\n  validation_status: validation.is_valid ? 'VALID' : 'INVALID',\n  validation_results: validation,\n  checked_at: new Date().toISOString()\n}];"
      },
      "id": "node_validate_csv",
      "name": "Validate CSV Metadata",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        300,
        100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://maqqjchekovcgtbzrbrv.supabase.co/rest/v1/workflow_runs",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SUPABASE_SERVICE_ROLE_KEY }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "requestFormat": "json",
        "jsonParameters": {
          "parameters": [
            {
              "name": "workflow_name",
              "value": "Monthly DLD CSV Refresh"
            },
            {
              "name": "csv_filename",
              "value": "{{ $input.first().filename }}"
            },
            {
              "name": "upload_month",
              "value": "{{ $input.first().upload_date }}"
            },
            {
              "name": "total_rows",
              "value": "{{ $input.first().row_count || 0 }}"
            },
            {
              "name": "validation_status",
              "value": "{{ $input.first().validation_status }}"
            },
            {
              "name": "status",
              "value": "INITIATED"
            },
            {
              "name": "initiated_at",
              "value": "={{ new Date().toISOString() }}"
            }
          ]
        }
      },
      "id": "node_log_workflow_run",
      "name": "Log Workflow Run",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        500,
        100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://maqqjchekovcgtbzrbrv.supabase.co/rest/v1/task_queue",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SUPABASE_SERVICE_ROLE_KEY }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "requestFormat": "json",
        "jsonParameters": {
          "parameters": [
            {
              "name": "task_type",
              "value": "OREIL_MONTHLY_UPDATE"
            },
            {
              "name": "assigned_to",
              "value": "DATA_TEAM"
            },
            {
              "name": "status",
              "value": "PENDING"
            },
            {
              "name": "priority",
              "value": "HIGH"
            },
            {
              "name": "description",
              "value": "Monthly OREIL scoring update required for DLD CSV upload - File: {{ $input.first().filename }}, Rows: {{ $input.first().row_count }}"
            }
          ]
        }
      },
      "id": "node_create_oreil_task",
      "name": "Create OREIL Update Task",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        700,
        100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://maqqjchekovcgtbzrbrv.supabase.co/rest/v1/execution_logs",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ $env.SUPABASE_SERVICE_ROLE_KEY }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "requestFormat": "json",
        "jsonParameters": {
          "parameters": [
            {
              "name": "workflow_name",
              "value": "Monthly DLD CSV Refresh"
            },
            {
              "name": "workflow_run_id",
              "value": "={{ $execution.id }}"
            },
            {
              "name": "status",
              "value": "COMPLETED"
            },
            {
              "name": "csv_filename",
              "value": "{{ $input.first().filename }}"
            },
            {
              "name": "action_log",
              "value": "CSV validation={{ $input.first().validation_status }}, rows={{ $input.first().row_count }}, OREIL task created for data team"
            },
            {
              "name": "execution_timestamp",
              "value": "={{ new Date().toISOString() }}"
            }
          ]
        }
      },
      "id": "node_audit_log",
      "name": "Write Audit Log",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        900,
        100
      ]
    },
    {
      "parameters": {
        "responseData": "={{ { success: true, filename: $input.first().filename, validation: $input.first().validation_status, rows_received: $input.first().row_count, message: 'CSV received and queued for OREIL update' } }}"
      },
      "id": "node_respond_success",
      "name": "Respond - Success",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [
        1100,
        100
      ]
    }
  ],
  "connections": {
    "node_manual_trigger": {
      "main": [
        [
          {
            "node": "node_validate_csv",
            "branch": 0
          }
        ]
      ]
    },
    "node_validate_csv": {
      "main": [
        [
          {
            "node": "node_log_workflow_run",
            "branch": 0
          }
        ]
      ]
    },
    "node_log_workflow_run": {
      "main": [
        [
          {
            "node": "node_create_oreil_task",
            "branch": 0
          }
        ]
      ]
    },
    "node_create_oreil_task": {
      "main": [
        [
          {
            "node": "node_audit_log",
            "branch": 0
          }
        ]
      ]
    },
    "node_audit_log": {
      "main": [
        [
          {
            "node": "node_respond_success",
            "branch": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}