{
  "name": "Brasserie — Recipe Costing",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "calcul-recette-brasserie",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "a1b2c3d4-cccc-dddd-eeee-222222222222",
      "name": "Webhook — Calculer recette",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [250, 300]
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body;\n\nconst ingredientsTotal = body.ingredients.reduce((sum, ing) => {\n  return sum + (Number(ing.quantite_kg) * Number(ing.prix_kg));\n}, 0);\n\nconst energieCout = Number(body.energie_kwh || 0) * Number(body.prix_kwh || 0.18);\nconst mainOeuvre = Number(body.heures || 0) * Number(body.taux_horaire || 25);\nconst emballage = Number(body.volume_litres) * Number(body.cout_emballage_litre || 0.08);\nconst autres = Number(body.autres_couts || 0);\n\nconst coutTotal = ingredientsTotal + energieCout + mainOeuvre + emballage + autres;\nconst coutLitre = (coutTotal / Number(body.volume_litres)).toFixed(3);\nconst prixVente = Number(body.prix_vente_litre || 0);\nconst marge = prixVente > 0 ? (((prixVente - Number(coutLitre)) / prixVente) * 100).toFixed(1) : 'N/A';\nconst margeAlerte = prixVente > 0 && Number(marge) < 35;\n\nreturn [{ json: {\n  recette: body.recette,\n  volume: body.volume_litres,\n  coutIngredients: ingredientsTotal.toFixed(2),\n  coutEnergie: energieCout.toFixed(2),\n  coutMainOeuvre: mainOeuvre.toFixed(2),\n  coutEmballage: emballage.toFixed(2),\n  coutTotal: coutTotal.toFixed(2),\n  coutLitre,\n  prixVente,\n  marge,\n  margeAlerte\n} }];"
      },
      "id": "b2c3d4e5-cccc-dddd-eeee-222222222223",
      "name": "Calculer coût de revient",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [450, 300]
    },
    {
      "parameters": {
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.margeAlerte }}",
              "rightValue": true,
              "operator": { "type": "boolean", "operation": "equals" }
            }
          ]
        }
      },
      "id": "c3d4e5f6-cccc-dddd-eeee-222222222224",
      "name": "Marge insuffisante ?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [650, 300]
    },
    {
      "parameters": {
        "sendTo": "direction@votre-brasserie.fr",
        "subject": "⚠️ Alerte marge — {{ $json.recette }}",
        "message": "Attention : marge insuffisante sur la recette {{ $json.recette }}.\n\nCoût de revient : {{ $json.coutLitre }} €/L\nPrix de vente : {{ $json.prixVente }} €/L\nMarge : {{ $json.marge }}%\n\nDétail des coûts :\n• Ingrédients : {{ $json.coutIngredients }} €\n• Énergie : {{ $json.coutEnergie }} €\n• Main d'œuvre : {{ $json.coutMainOeuvre }} €\n• Emballage : {{ $json.coutEmballage }} €\n• Coût total : {{ $json.coutTotal }} €\n\nAction recommandée : réviser la recette ou ajuster le prix de vente.",
        "options": {}
      },
      "id": "d4e5f6a7-cccc-dddd-eeee-222222222225",
      "name": "Alerte marge",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2,
      "position": [850, 200]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ recette: $json.recette, coutLitre: $json.coutLitre, marge: $json.marge, alerte: $json.margeAlerte }) }}",
        "options": {}
      },
      "id": "e5f6a7b8-cccc-dddd-eeee-222222222226",
      "name": "Réponse avec résultat",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [850, 400]
    }
  ],
  "connections": {
    "Webhook — Calculer recette": { "main": [[{ "node": "Calculer coût de revient", "type": "main", "index": 0 }]] },
    "Calculer coût de revient": { "main": [[{ "node": "Marge insuffisante ?", "type": "main", "index": 0 }]] },
    "Marge insuffisante ?": {
      "main": [
        [{ "node": "Alerte marge", "type": "main", "index": 0 }],
        [{ "node": "Réponse avec résultat", "type": "main", "index": 0 }]
      ]
    }
  },
  "active": false,
  "settings": { "executionOrder": "v1" },
  "tags": [{ "name": "brasserie" }, { "name": "coût de revient" }],
  "meta": {
    "templateId": "likyly-brasserie-recipe-costing",
    "templateVersion": "1.0",
    "description": "Calcule le coût de revient d'une recette (ingrédients, énergie, main d'œuvre, emballage) et alerte si la marge est insuffisante.",
    "instructions": "Envoyez un POST au webhook avec : { recette, volume_litres, ingredients: [{nom, quantite_kg, prix_kg}], energie_kwh, heures, autres_couts, prix_vente_litre }\nLa réponse renvoie le coût/litre, la marge et une alerte si marge < 35%."
  }
}
