{"name":"Hazardous Waste Disposal Scheduler","nodes":[{"id":"schedule","type":"n8n-nodes-base.scheduleTrigger","name":"Daily Waste Compliance Check","position":[250,300],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 7 * * *"}]}}},{"id":"fetchContainers","type":"n8n-nodes-base.httpRequest","name":"Get Active Waste Containers","position":[450,300],"parameters":{"url":"={{$env.WASTE_MGMT_API}}/containers/active","method":"GET"}},{"id":"checkDeadlines","type":"n8n-nodes-base.code","name":"Calculate Deadlines","position":[650,300],"parameters":{"language":"javascript","code":"const containers = $json.containers;\nconst now = new Date();\nreturn containers.map(c => {\n  const accStart = new Date(c.accumulation_start);\n  const maxDays = c.generator_status === \"LQG\" ? 90 : 270;\n  const deadline = new Date(accStart.getTime() + maxDays * 86400000);\n  const daysLeft = Math.ceil((deadline - now) / 86400000);\n  return { json: { ...c, deadline: deadline.toISOString(), days_remaining: daysLeft, urgency: daysLeft <= 7 ? \"critical\" : daysLeft <= 14 ? \"warning\" : daysLeft <= 30 ? \"upcoming\" : \"ok\" } };\n});"}},{"id":"filterUrgent","type":"n8n-nodes-base.filter","name":"Filter Approaching Deadlines","position":[850,300],"parameters":{"conditions":{"string":[{"value1":"={{$json.urgency}}","operation":"notEqual","value2":"ok"}]}}},{"id":"queryHaulers","type":"n8n-nodes-base.httpRequest","name":"Query Licensed Haulers","position":[1050,200],"parameters":{"url":"={{$env.WASTE_MGMT_API}}/haulers/availability","method":"POST","body":{"waste_codes":"={{$json.rcra_codes}}","quantity":"={{$json.quantity}}","location":"={{$json.facility_zip}}"}}},{"id":"aiManifest","type":"n8n-nodes-base.openAi","name":"AI Generate Manifest","position":[1050,400],"parameters":{"model":"gpt-4o","prompt":"Generate a compliant EPA Uniform Hazardous Waste Manifest (Form 8700-22) data for this shipment.\n\nGenerator: {{$json.generator_name}} (EPA ID: {{$json.epa_id}})\nWaste: {{$json.waste_description}}\nRCRA codes: {{$json.rcra_codes}}\nQuantity: {{$json.quantity}} {{$json.unit}}\nContainer type: {{$json.container_type}}\nDOT hazard class: {{$json.dot_class}}\n\nReturn JSON: {\n  manifest_number: string,\n  generator_info: object,\n  transporter_info: object,\n  waste_description: string,\n  dot_shipping_name: string,\n  dot_id_number: string,\n  container_count: number,\n  quantity: object,\n  special_handling: string,\n  ldr_notification_required: boolean\n}"}},{"id":"schedulePickup","type":"n8n-nodes-base.httpRequest","name":"Schedule Hauler Pickup","position":[1250,200],"parameters":{"url":"={{$env.WASTE_MGMT_API}}/pickups/schedule","method":"POST","body":{"hauler_id":"={{$json.selected_hauler}}","pickup_date":"={{$json.scheduled_date}}","manifest_data":"={{$json.manifest}}"}}},{"id":"alertSafety","type":"n8n-nodes-base.slack","name":"Alert Safety Team","position":[1250,400],"parameters":{"channel":"#waste-management","text":"Waste Disposal Alert:\n{{$json.urgency === \"critical\" ? \"CRITICAL\" : \"UPCOMING\"}}: {{$json.waste_description}} — {{$json.days_remaining}} days until deadline.\nContainer: {{$json.container_id}} | Location: {{$json.storage_location}}\nPickup scheduled: {{$json.scheduled_date || \"PENDING\"}}"}},{"id":"archiveDoc","type":"n8n-nodes-base.httpRequest","name":"Archive Documentation","position":[1450,300],"parameters":{"url":"={{$env.WASTE_MGMT_API}}/documents/archive","method":"POST","body":{"manifest":"={{$json.manifest}}","container_id":"={{$json.container_id}}","timestamp":"={{$now.toISO()}}"}}}],"connections":{"Daily Waste Compliance Check":{"main":[[{"node":"Get Active Waste Containers","type":"main","index":0}]]},"Get Active Waste Containers":{"main":[[{"node":"Calculate Deadlines","type":"main","index":0}]]},"Calculate Deadlines":{"main":[[{"node":"Filter Approaching Deadlines","type":"main","index":0}]]},"Filter Approaching Deadlines":{"main":[[{"node":"Query Licensed Haulers","type":"main","index":0},{"node":"AI Generate Manifest","type":"main","index":0}]]},"Query Licensed Haulers":{"main":[[{"node":"Schedule Hauler Pickup","type":"main","index":0}]]},"AI Generate Manifest":{"main":[[{"node":"Alert Safety Team","type":"main","index":0}]]},"Schedule Hauler Pickup":{"main":[[{"node":"Archive Documentation","type":"main","index":0}]]},"Alert Safety Team":{"main":[[{"node":"Archive Documentation","type":"main","index":0}]]}}}