{
  "name": "Agent Générateur de Devis TPE",
  "flow": [
    {
      "id": 1,
      "module": "gateway:CustomWebHook",
      "version": 1,
      "parameters": {
        "hook": 0,
        "maxResults": 1
      },
      "mapper": {},
      "metadata": {
        "designer": { "x": 0, "y": 0 },
        "restore": {
          "parameters": {
            "hook": { "label": "Webhook — Demande de devis" }
          }
        }
      }
    },
    {
      "id": 2,
      "module": "airtable:searchRecords",
      "version": 3,
      "parameters": {
        "__IMTCONN__": 0
      },
      "mapper": {
        "baseId": "VOTRE_BASE_ID",
        "tableId": "VOTRE_TABLE_CLIENTS_ID",
        "filterByFormula": "SEARCH(LOWER(\"{{1.client_nom}}\"), LOWER({Nom}))",
        "maxRecords": 1,
        "fields": ["Nom", "Adresse", "Email", "Conditions tarifaires"]
      },
      "metadata": {
        "designer": { "x": 300, "y": 0 },
        "restore": {
          "parameters": {
            "__IMTCONN__": { "label": "Airtable — CRM clients (à connecter)" }
          }
        }
      }
    },
    {
      "id": 3,
      "module": "google-sheets:getRange",
      "version": 4,
      "parameters": {
        "__IMTCONN__": 0
      },
      "mapper": {
        "spreadsheetId": "VOTRE_SPREADSHEET_ID",
        "sheetId": "VOTRE_SHEET_ID",
        "includesHeaders": "YES",
        "valueRenderOption": "FORMATTED_VALUE",
        "from": "A1",
        "to": "Z200"
      },
      "metadata": {
        "designer": { "x": 600, "y": 0 },
        "restore": {
          "parameters": {
            "__IMTCONN__": { "label": "Google Sheets — Base de prix (à connecter)" }
          }
        }
      }
    },
    {
      "id": 4,
      "module": "openai:CreateChatCompletion",
      "version": 1,
      "parameters": {
        "__IMTCONN__": 0
      },
      "mapper": {
        "model": "gpt-4o",
        "temperature": 0.2,
        "response_format": "json_object",
        "messages": [
          {
            "role": "system",
            "content": "Tu es un agent de génération de devis pour une TPE de services. Ton rôle est d'assembler des devis précis et professionnels à partir des informations client et de la grille tarifaire fournie.\n\nRÈGLES :\n- Utilise uniquement les tarifs présents dans la grille fournie.\n- Applique les conditions tarifaires spécifiques du client si elles existent (remise, forfait négocié).\n- Si une prestation demandée n'est pas dans la grille, signale-le dans le champ 'remarques'.\n- Calcule les montants HT, applique une TVA à 20% par défaut sauf indication contraire.\n- Génère un numéro de devis au format DEV-YYYYMMDD-XXX (ex: DEV-20250515-001).\n- Formate ta réponse UNIQUEMENT en JSON valide, sans texte avant ou après."
          },
          {
            "role": "user",
            "content": "DEMANDE : {{1.demande}}\n\nINFOS CLIENT (CRM) :\nNom : {{2.records[].fields.Nom}}\nAdresse : {{2.records[].fields.Adresse}}\nEmail : {{2.records[].fields.Email}}\nConditions tarifaires spécifiques : {{2.records[].fields.Conditions tarifaires}}\n\nGRILLE TARIFAIRE :\n{{3.values}}\n\nRéponds avec ce schéma JSON :\n{\n  \"numero_devis\": \"\",\n  \"date\": \"\",\n  \"client\": {\n    \"nom\": \"\",\n    \"adresse\": \"\",\n    \"email\": \"\"\n  },\n  \"lignes\": [\n    {\n      \"description\": \"\",\n      \"quantite\": 0,\n      \"unite\": \"\",\n      \"prix_unitaire_ht\": 0,\n      \"total_ht\": 0\n    }\n  ],\n  \"total_ht\": 0,\n  \"taux_tva\": 20,\n  \"tva\": 0,\n  \"total_ttc\": 0,\n  \"validite\": \"30 jours\",\n  \"remarques\": \"\"\n}"
          }
        ]
      },
      "metadata": {
        "designer": { "x": 900, "y": 0 },
        "restore": {
          "parameters": {
            "__IMTCONN__": { "label": "OpenAI — GPT-4o (à connecter)" }
          }
        }
      }
    },
    {
      "id": 5,
      "module": "json:ParseJSON",
      "version": 1,
      "parameters": {
        "type": 0
      },
      "mapper": {
        "string": "{{4.choices[].message.content}}"
      },
      "metadata": {
        "designer": { "x": 1200, "y": 0 },
        "restore": {}
      }
    },
    {
      "id": 6,
      "module": "google-docs:createDocumentFromTemplate",
      "version": 1,
      "parameters": {
        "__IMTCONN__": 0
      },
      "mapper": {
        "templateId": "VOTRE_TEMPLATE_GOOGLE_DOCS_ID",
        "title": "Devis {{5.numero_devis}} — {{5.client.nom}}",
        "newDriveFileLocation": {
          "folderId": "VOTRE_DOSSIER_DRIVE_DEVIS_ID"
        },
        "values": {
          "{{NUMERO_DEVIS}}": "{{5.numero_devis}}",
          "{{DATE}}": "{{5.date}}",
          "{{CLIENT_NOM}}": "{{5.client.nom}}",
          "{{CLIENT_ADRESSE}}": "{{5.client.adresse}}",
          "{{CLIENT_EMAIL}}": "{{5.client.email}}",
          "{{TOTAL_HT}}": "{{5.total_ht}} €",
          "{{TVA}}": "{{5.tva}} €",
          "{{TOTAL_TTC}}": "{{5.total_ttc}} €",
          "{{VALIDITE}}": "{{5.validite}}",
          "{{REMARQUES}}": "{{5.remarques}}"
        }
      },
      "metadata": {
        "designer": { "x": 1500, "y": 0 },
        "restore": {
          "parameters": {
            "__IMTCONN__": { "label": "Google Docs — votre compte (à connecter)" }
          }
        }
      }
    },
    {
      "id": 7,
      "module": "slack:createMessage",
      "version": 1,
      "parameters": {
        "__IMTCONN__": 0
      },
      "mapper": {
        "channelId": "VOTRE_CHANNEL_SLACK_ID",
        "text": ":page_facing_up: *Nouveau devis généré — à relire avant envoi*\n\n*Client :* {{5.client.nom}}\n*Référence :* {{5.numero_devis}}\n*Montant HT :* {{5.total_ht}} €\n*Total TTC :* {{5.total_ttc}} €\n\n*Lien Google Docs :* {{6.webViewLink}}\n\n_Vérifiez les lignes et validez avant d'envoyer au client._"
      },
      "metadata": {
        "designer": { "x": 1800, "y": 0 },
        "restore": {
          "parameters": {
            "__IMTCONN__": { "label": "Slack — votre workspace (à connecter)" }
          }
        }
      }
    }
  ],
  "metadata": {
    "instant": true,
    "version": 1,
    "scenario": {
      "roundtrips": 1,
      "maxErrors": 3,
      "autoCommit": true,
      "autoCommitTriggerLast": true,
      "sequential": false,
      "confidential": false,
      "dataloss": false,
      "dlq": false,
      "freshVariables": false
    },
    "designer": {
      "orphans": []
    },
    "zone": "eu1.make.com"
  }
}
