{
  "name": "Factures reçues par e-mail : extraction automatique vers un tableur",
  "nodes": [
    {
      "id": "039fec1e-b7cb-4e78-a297-d07ed0676bef",
      "name": "Nouvel e-mail avec facture",
      "type": "n8n-nodes-base.emailReadImap",
      "typeVersion": 2.2,
      "position": [
        100,
        300
      ],
      "parameters": {
        "mailbox": "INBOX",
        "postProcessAction": "read",
        "format": "simple",
        "downloadAttachments": true,
        "options": {}
      },
      "credentials": {}
    },
    {
      "id": "b5ac723e-6533-4f6f-af21-be78a1f5086e",
      "name": "Garder les e-mails avec un PDF",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.3,
      "position": [
        300,
        300
      ],
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "leftValue": "={{ $binary.attachment_0?.mimeType ?? \"\" }}",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "rightValue": "application/pdf"
            }
          ],
          "combinator": "and"
        },
        "options": {}
      }
    },
    {
      "id": "4840a4d3-13ca-43f4-ba8b-a0ed47c5f42f",
      "name": "Lire le texte du PDF",
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        500,
        300
      ],
      "parameters": {
        "operation": "pdf",
        "binaryPropertyName": "attachment_0",
        "options": {
          "joinPages": true,
          "maxPages": 5
        }
      }
    },
    {
      "id": "e7161b65-dd9b-491c-a9a6-47b2534b57d7",
      "name": "Extraire les données de la facture",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "typeVersion": 1.2,
      "position": [
        300,
        450
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "schemaType": "fromAttributes",
        "attributes": {
          "attributes": [
            {
              "name": "fournisseur",
              "type": "string",
              "description": "Nom de l'entreprise qui émet la facture",
              "required": true
            },
            {
              "name": "numero",
              "type": "string",
              "description": "Numéro de la facture",
              "required": true
            },
            {
              "name": "date",
              "type": "string",
              "description": "Date de la facture au format AAAA-MM-JJ",
              "required": true
            },
            {
              "name": "montant_ht",
              "type": "number",
              "description": "Montant total hors taxes en euros, nombre décimal sans symbole",
              "required": true
            },
            {
              "name": "tva",
              "type": "number",
              "description": "Montant total de la TVA en euros, nombre décimal sans symbole",
              "required": true
            },
            {
              "name": "montant_ttc",
              "type": "number",
              "description": "Montant total toutes taxes comprises en euros, nombre décimal sans symbole",
              "required": true
            }
          ]
        },
        "options": {
          "systemPromptTemplate": "Tu lis des factures françaises. Extrais uniquement les informations demandées. Les montants utilisent la virgule comme séparateur décimal dans le document : convertis-les en nombres. Si une information est absente, laisse le champ vide."
        }
      }
    },
    {
      "id": "340836c8-636a-49aa-b85b-c0995c7c1740",
      "name": "Claude",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.5,
      "position": [
        100,
        450
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-6",
          "cachedResultName": "Claude Sonnet 4.6"
        },
        "options": {
          "temperature": 0
        }
      },
      "credentials": {}
    },
    {
      "id": "67e80fde-8dfe-4033-b90b-2ae6ae78cacd",
      "name": "Ajouter au tableur des factures",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        500,
        450
      ],
      "parameters": {
        "resource": "sheet",
        "operation": "append",
        "authentication": "oAuth2",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Factures fournisseurs (à choisir)"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Factures"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Reçue le": "={{ $now.toFormat(\"yyyy-MM-dd\") }}",
            "Expéditeur": "={{ $(\"Nouvel e-mail avec facture\").item.json.from }}",
            "Fournisseur": "={{ $json.output.fournisseur }}",
            "Numéro": "={{ $json.output.numero }}",
            "Date facture": "={{ $json.output.date }}",
            "Montant HT": "={{ $json.output.montant_ht }}",
            "TVA": "={{ $json.output.tva }}",
            "Montant TTC": "={{ $json.output.montant_ttc }}"
          },
          "schema": [
            {
              "id": "Reçue le",
              "displayName": "Reçue le",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Expéditeur",
              "displayName": "Expéditeur",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Fournisseur",
              "displayName": "Fournisseur",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Numéro",
              "displayName": "Numéro",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Date facture",
              "displayName": "Date facture",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Montant HT",
              "displayName": "Montant HT",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true
            },
            {
              "id": "TVA",
              "displayName": "TVA",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true
            },
            {
              "id": "Montant TTC",
              "displayName": "Montant TTC",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "credentials": {}
    },
    {
      "id": "95cf28a2-e0a5-4756-9893-4bea5ddb9d3f",
      "name": "Notifier sur Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.6,
      "position": [
        700,
        450
      ],
      "parameters": {
        "resource": "message",
        "operation": "post",
        "authentication": "accessToken",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "Canal compta (à choisir)"
        },
        "messageType": "text",
        "text": "=:receipt: Facture enregistrée : {{ $(\"Extraire les données de la facture\").item.json.output.fournisseur }}, n° {{ $(\"Extraire les données de la facture\").item.json.output.numero }}, {{ $(\"Extraire les données de la facture\").item.json.output.montant_ttc }} € TTC",
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {},
      "onError": "continueRegularOutput"
    },
    {
      "id": "e5dc242b-1f25-4259-8ca2-49c525430360",
      "name": "À configurer",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        64,
        208
      ],
      "parameters": {
        "content": "## À configurer\n- **IMAP** : connectez la boîte qui reçoit vos factures (idéalement une adresse dédiée).\n- **Anthropic** : ajoutez votre clé API dans le nœud Claude.\n- **Google Sheets** : choisissez votre tableur. L'onglet « Factures » doit contenir les colonnes Reçue le, Expéditeur, Fournisseur, Numéro, Date facture, Montant HT, TVA, Montant TTC.\n- **Slack** : choisissez le canal de la compta.\n- Seule la première pièce jointe est lue, elle doit être un PDF texte (pas un scan).",
        "color": 4,
        "width": 560,
        "height": 224
      }
    },
    {
      "id": "b407f2ff-07de-4972-b048-8c892480dba3",
      "name": "L'idée",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        272,
        352
      ],
      "parameters": {
        "content": "## L'idée\nChaque facture PDF reçue par e-mail est lue par Claude : fournisseur, numéro, date et montants arrivent directement dans votre tableur, et la compta est prévenue sur Slack.",
        "color": 7,
        "width": 560,
        "height": 224
      }
    }
  ],
  "connections": {
    "Nouvel e-mail avec facture": {
      "main": [
        [
          {
            "node": "Garder les e-mails avec un PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Garder les e-mails avec un PDF": {
      "main": [
        [
          {
            "node": "Lire le texte du PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lire le texte du PDF": {
      "main": [
        [
          {
            "node": "Extraire les données de la facture",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extraire les données de la facture": {
      "main": [
        [
          {
            "node": "Ajouter au tableur des factures",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude": {
      "ai_languageModel": [
        [
          {
            "node": "Extraire les données de la facture",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Ajouter au tableur des factures": {
      "main": [
        [
          {
            "node": "Notifier sur Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}