{
  "name": "DiGiFlowAI — Qualifier une demande de devis — démonstration",
  "nodes": [
    {
      "id": "qualification-devis-start",
      "name": "Démarrer manuellement",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ],
      "parameters": {}
    },
    {
      "id": "qualification-devis-data",
      "name": "Données fictives à modifier",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        0
      ],
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "return [\n  {\n    \"requestId\": \"DEMO-001\",\n    \"email\": \" client@example.com \",\n    \"besoin\": \"Créer un site vitrine\",\n    \"langue\": \"fr\"\n  },\n  {\n    \"requestId\": \"DEMO-002\",\n    \"email\": \"invalide\",\n    \"besoin\": \"\",\n    \"langue\": \"fr\"\n  }\n].map(json => ({ json }));"
      }
    },
    {
      "id": "qualification-devis-logic",
      "name": "Contrôler les données",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        480,
        0
      ],
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "return $input.all().map(({ json }) => {\n  const email = String(json.email ?? '').trim().toLowerCase();\n  const besoin = String(json.besoin ?? '').trim();\n  const requestId = String(json.requestId ?? '').trim();\n  const erreurs = [];\n  if (!requestId) erreurs.push('Identifiant manquant');\n  if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) erreurs.push('Email invalide');\n  if (besoin.length < 10) erreurs.push('Besoin à préciser (10 caractères minimum)');\n  return { json: { requestId, email, besoin, langue: String(json.langue ?? 'fr'), statut: erreurs.length ? 'a_completer' : 'pret_pour_validation', erreurs, validationHumaine: true, devisEnvoye: false } };\n});"
      },
      "notesInFlow": true,
      "notes": "Exercice local. Aucune connexion externe, aucun envoi, aucune suppression. Prévoir authentification, stockage persistant, gestion des doublons et alertes avant une utilisation réelle."
    }
  ],
  "connections": {
    "Démarrer manuellement": {
      "main": [
        [
          {
            "node": "Données fictives à modifier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Données fictives à modifier": {
      "main": [
        [
          {
            "node": "Contrôler les données",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "timezone": "Europe/Brussels"
  },
  "pinData": {},
  "tags": []
}
