{
 "id": "r2weeklyreportdi",
 "name": "AutomateRecipes \u2013 weekly-report-digest",
 "nodes": [
  {
   "parameters": {
    "rule": {
     "interval": [
      {
       "field": "weeks",
       "triggerAtDay": [
        1
       ],
       "triggerAtHour": 8
      }
     ]
    }
   },
   "name": "Schedule Trigger",
   "type": "n8n-nodes-base.scheduleTrigger",
   "typeVersion": 1.2,
   "position": [
    0,
    0
   ],
   "id": "af355641-746e-49ea-92f7-be5d08079e9b"
  },
  {
   "parameters": {
    "jsCode": "// EDIT THESE SETTINGS\nreturn [{json:{\n \"ntfyTopic\": \"CHANGE-ME-to-a-long-random-topic\",\n \"csvUrl\": \"https://automaterecipes.pages.dev/samples/sample-sales.csv\",\n \"dateColumn\": \"date\",\n \"valueColumn\": \"revenue\",\n \"groupColumn\": \"product\",\n \"currency\": \"SAR\",\n \"endDate\": \"\"\n}}];"
   },
   "name": "Config",
   "type": "n8n-nodes-base.code",
   "typeVersion": 2,
   "position": [
    240,
    0
   ],
   "id": "696ca790-80ed-4a19-8664-534e4af9d295"
  },
  {
   "parameters": {
    "url": "={{ $json.csvUrl }}",
    "options": {
     "response": {
      "response": {
       "responseFormat": "text",
       "outputPropertyName": "csv"
      }
     }
    }
   },
   "name": "Download CSV",
   "type": "n8n-nodes-base.httpRequest",
   "typeVersion": 4.2,
   "position": [
    480,
    0
   ],
   "id": "428b7656-8e86-4589-b8e6-e28a8a437bca"
  },
  {
   "parameters": {
    "jsCode": "const c=$('Config').first().json,lines=String($input.first().json.csv).trim().split(/\\r?\\n/);\nconst h=lines[0].split(',').map(s=>s.trim().replace(/^\"|\"$/g,''));const rows=lines.slice(1).map(l=>{const v=l.split(',');return Object.fromEntries(h.map((k,i)=>[k,(v[i]||'').replace(/^\"|\"$/g,'')]))});\nconst end=c.endDate?new Date(c.endDate+'T00:00:00'):new Date(new Date().toDateString());\nconst d=r=>Math.floor((end-new Date(r[c.dateColumn]+'T00:00:00'))/864e5);\nconst cur=rows.filter(r=>d(r)>=1&&d(r)<=7),prev=rows.filter(r=>d(r)>=8&&d(r)<=14);\nconst sum=a=>a.reduce((s,r)=>s+(parseFloat(r[c.valueColumn])||0),0);const A=sum(cur),B=sum(prev);\nif(!cur.length)return [{json:{title:'Weekly report: no data in the last 7 days',tags:'warning',message:`Checked ${rows.length} rows from ${c.csvUrl}`}}];\nconst by={};cur.forEach(r=>by[r[c.groupColumn]]=(by[r[c.groupColumn]]||0)+(parseFloat(r[c.valueColumn])||0));\nconst top=Object.entries(by).sort((a,b)=>b[1]-a[1]).slice(0,3).map(([k,v])=>`${k} ${v.toFixed(0)}`).join(', ');\nconst ch=B?((A-B)/B*100).toFixed(1):'n/a';const f=x=>x.toFixed(2);\nreturn [{json:{title:`Weekly report: ${f(A)} ${c.currency} (${ch}% vs prior week)`,tags:'bar_chart',message:`Last 7 days: ${f(A)} ${c.currency} from ${cur.length} rows\\nPrior 7 days: ${f(B)} ${c.currency}\\nTop: ${top}`,total:A,prior:B}}];"
   },
   "name": "Build weekly report",
   "type": "n8n-nodes-base.code",
   "typeVersion": 2,
   "position": [
    720,
    0
   ],
   "id": "0469c339-ad66-46c0-9b6a-bc9b018d9324"
  },
  {
   "parameters": {
    "method": "POST",
    "url": "=https://ntfy.sh/{{ $('Config').first().json.ntfyTopic }}",
    "sendHeaders": true,
    "headerParameters": {
     "parameters": [
      {
       "name": "Title",
       "value": "={{ $json.title }}"
      },
      {
       "name": "Tags",
       "value": "={{ $json.tags || 'bell' }}"
      }
     ]
    },
    "sendBody": true,
    "contentType": "raw",
    "rawContentType": "text/plain",
    "body": "={{ $json.message }}",
    "options": {}
   },
   "name": "Send ntfy alert",
   "type": "n8n-nodes-base.httpRequest",
   "typeVersion": 4.2,
   "position": [
    960,
    0
   ],
   "id": "29a15741-6f15-4fbb-a6a4-ca936c8f4fc4"
  },
  {
   "parameters": {},
   "name": "Run manually (test)",
   "type": "n8n-nodes-base.manualTrigger",
   "typeVersion": 1,
   "position": [
    0,
    200
   ],
   "id": "8c65c1e3-c107-49f0-87ab-bed8f258a622"
  }
 ],
 "connections": {
  "Schedule Trigger": {
   "main": [
    [
     {
      "node": "Config",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Config": {
   "main": [
    [
     {
      "node": "Download CSV",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Download CSV": {
   "main": [
    [
     {
      "node": "Build weekly report",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Build weekly report": {
   "main": [
    [
     {
      "node": "Send ntfy alert",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Run manually (test)": {
   "main": [
    [
     {
      "node": "Config",
      "type": "main",
      "index": 0
     }
    ]
   ]
  }
 },
 "settings": {
  "executionOrder": "v1"
 },
 "active": false,
 "pinData": {}
}