{
  "name": "PLUMA - Envio semanal de relatórios para clientes",
  "nodes": [
    {
      "parameters": {},
      "id": "9fb2f0e7-c73a-4b91-a072-e66f72db7d77",
      "name": "Rodar manualmente para teste",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -900,
        -180
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 9,
              "triggerAtMinute": 0
            }
          ]
        }
      },
      "id": "a4ac871b-299b-4f79-a794-bbe44b3064c2",
      "name": "Disparo semanal segunda 09h",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -900,
        40
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "cfg-01",
              "name": "email_remetente",
              "value": "relatorios@suaempresa.com",
              "type": "string"
            },
            {
              "id": "cfg-02",
              "name": "nome_empresa",
              "value": "Pluma",
              "type": "string"
            },
            {
              "id": "cfg-03",
              "name": "tom",
              "value": "claro, acolhedor, objetivo e consultivo",
              "type": "string"
            },
            {
              "id": "cfg-04",
              "name": "periodo",
              "value": "semana anterior",
              "type": "string"
            },
            {
              "id": "cfg-05",
              "name": "modo_teste",
              "value": true,
              "type": "boolean"
            }
          ]
        },
        "options": {}
      },
      "id": "1e262bf0-465e-481a-8e3a-14b2068e1174",
      "name": "Configuração do fluxo",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -640,
        -70
      ]
    },
    {
      "parameters": {
        "jsCode": "// Substitua este nó por Google Sheets, Airtable, Notion ou banco de dados quando for usar em produção.\n// Cada item representa um cliente ativo que receberá relatório.\nreturn [\n  {\n    json: {\n      cliente: 'Cliente Exemplo 01',\n      email_cliente: 'cliente01@exemplo.com',\n      responsavel_interno: 'Rafa',\n      canal: 'Meta Ads',\n      objetivo: 'geração de leads',\n      investimento: 1250.50,\n      impressoes: 48200,\n      cliques: 1630,\n      leads: 84,\n      cpa: 14.89,\n      variacao_leads: '+18%',\n      variacao_cpa: '-9%',\n      observacoes: 'Campanhas de remarketing tiveram melhor desempenho. Criativos com prova social geraram maior taxa de clique.'\n    }\n  },\n  {\n    json: {\n      cliente: 'Cliente Exemplo 02',\n      email_cliente: 'cliente02@exemplo.com',\n      responsavel_interno: 'Rafa',\n      canal: 'Google Ads',\n      objetivo: 'captação de demanda',\n      investimento: 980.00,\n      impressoes: 22100,\n      cliques: 910,\n      leads: 37,\n      cpa: 26.48,\n      variacao_leads: '-6%',\n      variacao_cpa: '+12%',\n      observacoes: 'Termos amplos consumiram verba. Recomenda-se revisar palavras-chave negativas.'\n    }\n  }\n];"
      },
      "id": "74f01cbb-ce11-458e-865a-48ac9e8f6343",
      "name": "Buscar clientes e métricas",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -380,
        -70
      ]
    },
    {
      "parameters": {
        "jsCode": "function formatBRL(value) {\n  return Number(value || 0).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' });\n}\n\nreturn items.map((item) => {\n  const d = item.json;\n  const ctr = d.impressoes ? ((d.cliques / d.impressoes) * 100).toFixed(2) + '%' : 'n/d';\n  const taxaConversao = d.cliques ? ((d.leads / d.cliques) * 100).toFixed(2) + '%' : 'n/d';\n\n  const resumo = `\nOlá, ${d.cliente}.\n\nSegue o relatório da ${d.periodo || 'semana anterior'} com os principais pontos da operação.\n\nPrincipais números:\n- Canal analisado: ${d.canal}\n- Objetivo: ${d.objetivo}\n- Investimento: ${formatBRL(d.investimento)}\n- Impressões: ${Number(d.impressoes || 0).toLocaleString('pt-BR')}\n- Cliques: ${Number(d.cliques || 0).toLocaleString('pt-BR')}\n- CTR: ${ctr}\n- Leads: ${Number(d.leads || 0).toLocaleString('pt-BR')}\n- Taxa de conversão: ${taxaConversao}\n- CPA: ${formatBRL(d.cpa)}\n- Variação de leads: ${d.variacao_leads}\n- Variação de CPA: ${d.variacao_cpa}\n\nLeitura estratégica:\n${d.observacoes}\n\nPróximos passos sugeridos:\n1. Manter o que performou melhor na semana.\n2. Revisar os pontos de desperdício de verba.\n3. Priorizar ajustes com maior impacto em conversão e custo por lead.\n\nQualquer dúvida, seguimos por aqui.\n`;\n\n  return {\n    json: {\n      ...d,\n      assunto: `Relatório semanal | ${d.cliente}`,\n      corpo_email: resumo.trim()\n    }\n  };\n});"
      },
      "id": "3854278a-b6b0-44a1-8324-1671525b9e68",
      "name": "Gerar relatório textual",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -120,
        -70
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "has-email",
              "leftValue": "={{ $json.email_cliente }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "f1b9cf8a-cd18-4369-b567-5316db8b0b07",
      "name": "Cliente tem e-mail?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        140,
        -70
      ]
    },
    {
      "parameters": {
        "sendTo": "={{ $json.email_cliente }}",
        "subject": "={{ $json.assunto }}",
        "message": "={{ $json.corpo_email }}",
        "options": {}
      },
      "id": "9a06f57c-6a8e-4d0c-bf97-5674c7516902",
      "name": "Enviar relatório por Gmail",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        420,
        -160
      ],
      "webhookId": "pluma-weekly-report-gmail"
    },
    {
      "parameters": {
        "jsCode": "// Registro simples para auditoria.\n// Em produção, substitua este nó por Google Sheets, Airtable, Notion ou banco de dados.\nreturn items.map((item) => ({\n  json: {\n    cliente: item.json.cliente,\n    email_cliente: item.json.email_cliente,\n    status: 'relatorio_processado',\n    processado_em: new Date().toISOString()\n  }\n}));"
      },
      "id": "b3142c79-a2ee-40f8-84f1-ed9d23533973",
      "name": "Registrar envio",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        700,
        -160
      ]
    },
    {
      "parameters": {
        "jsCode": "return items.map((item) => ({\n  json: {\n    ...item.json,\n    erro: 'Cliente sem e-mail cadastrado. Revise a base antes do próximo disparo.'\n  }\n}));"
      },
      "id": "ff11d8a9-8472-4db6-8d79-cba2414b1f83",
      "name": "Marcar pendência",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        420,
        40
      ]
    }
  ],
  "connections": {
    "Rodar manualmente para teste": {
      "main": [
        [
          {
            "node": "Configuração do fluxo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Disparo semanal segunda 09h": {
      "main": [
        [
          {
            "node": "Configuração do fluxo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configuração do fluxo": {
      "main": [
        [
          {
            "node": "Buscar clientes e métricas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Buscar clientes e métricas": {
      "main": [
        [
          {
            "node": "Gerar relatório textual",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gerar relatório textual": {
      "main": [
        [
          {
            "node": "Cliente tem e-mail?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cliente tem e-mail?": {
      "main": [
        [
          {
            "node": "Enviar relatório por Gmail",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Marcar pendência",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar relatório por Gmail": {
      "main": [
        [
          {
            "node": "Registrar envio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1",
    "timezone": "America/Sao_Paulo"
  },
  "staticData": null,
  "tags": [
    {
      "name": "Pluma"
    },
    {
      "name": "Relatórios"
    }
  ],
  "meta": {
    "templateCredsSetupCompleted": false,
    "description": "Workflow funcional para teste com dados exemplo. Para produção, conectar fontes reais de dados e credencial Gmail."
  }
}