{
  "name": "Manager",
  "nodes": [
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Start').item.json.sessionId }}"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        2544,
        432
      ],
      "id": "d73ae583-1513-4be4-aa3a-3f3aae877c82",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "description": "Indispensable pour toutes les questions de succession, donations, protection du conjoint, r\u00e9daction de clauses b\u00e9n\u00e9ficiaires, d\u00e9membrement de propri\u00e9t\u00e9 (usufruit/nue-propri\u00e9t\u00e9) et organisation civile du patrimoine familial.",
        "workflowId": {
          "__rl": true,
          "value": "7UjKb87El6kaDgVz",
          "mode": "list",
          "cachedResultUrl": "/workflow/7UjKb87El6kaDgVz",
          "cachedResultName": "Notaire"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "session_id": "={{ $('Start').item.json.sessionId }}",
            "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}",
            "mode": "={{ $('Start').item.json.mode }}",
            "channel": "={{ $('Start').item.json.channel }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "session_id",
              "displayName": "session_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "query",
              "displayName": "query",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        3184,
        432
      ],
      "id": "8c8934aa-fadf-43d0-8ccb-81186860e192",
      "name": "Notaire"
    },
    {
      "parameters": {
        "description": "Expert Immobilier \u2014 5 domaines de comp\u00e9tence distincts des autres experts : valeur v\u00e9nale, rentabilit\u00e9 locative, travaux (avec fourchettes de co\u00fbt), plus-value et opportunit\u00e9s d'acquisition. Le prompt inclut une r\u00e8gle explicite de coordination \u2014 il renvoie au Fiscaliste pour la fiscalit\u00e9 fonci\u00e8re et au Notaire pour le juridique, \u00e9vitant les chevauchements.",
        "workflowId": {
          "__rl": true,
          "value": "Wr9ofJmDyqSCufi0",
          "mode": "list",
          "cachedResultUrl": "/workflow/Wr9ofJmDyqSCufi0",
          "cachedResultName": "Real_Estate_Expert"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}",
            "channel": "={{ $('Start').item.json.channel }}",
            "mode": "={{ $('Start').item.json.mode }}",
            "sessionId": "={{ $('Start').item.json.sessionId }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "sessionId",
              "displayName": "sessionId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "query",
              "displayName": "query",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        3440,
        432
      ],
      "id": "dd513541-3aa5-4a41-87a0-5bff3fddacea",
      "name": "Expert_Immobilier"
    },
    {
      "parameters": {
        "description": "Appelle cet outil EN PREMIER avant toute r\u00e9ponse au client. \nRetourne le contenu complet du bilan patrimonial au format \nmarkdown. Ne jamais r\u00e9pondre au client sans avoir appel\u00e9 \ncet outil au pr\u00e9alable.",
        "workflowId": {
          "__rl": true,
          "value": "VVGWJn8gLzg5iDoo",
          "mode": "list",
          "cachedResultUrl": "/workflow/VVGWJn8gLzg5iDoo",
          "cachedResultName": "Lire Bilan Patrimonial"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "sessionId": "={{ $('Start').item.json.sessionId }}",
            "mode": "={{ $('Start').item.json.mode }}",
            "channel": "={{ $('Start').item.json.channel }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "sessionId",
              "displayName": "sessionId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        2752,
        432
      ],
      "id": "d293f1fb-00c2-473a-ae2f-2170b717ebbc",
      "name": "Lire_Bilan_Patrimonial"
    },
    {
      "parameters": {
        "options": {
          "maxTokens": 8192,
          "temperature": 0.2
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "typeVersion": 1,
      "position": [
        2416,
        432
      ],
      "id": "1406ed76-ac7e-42ff-852c-ffed81ed2d3a",
      "name": "OpenRouter Chat Model",
      "retryOnFail": true,
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "description": "Indispensable pour l'optimisation de l'imp\u00f4t sur le revenu (IR), la gestion de l'IFI, les strat\u00e9gies de d\u00e9fiscalisation, l'arbitrage IS/IR, et la s\u00e9curisation des d\u00e9clarations fiscales complexes.",
        "workflowId": {
          "__rl": true,
          "value": "QuE2I2n7wY4BOU47",
          "mode": "list",
          "cachedResultUrl": "/workflow/QuE2I2n7wY4BOU47",
          "cachedResultName": "Fiscaliste"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "session_id": "={{ $('Start').item.json.sessionId }}",
            "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}",
            "channel": "={{ $('Start').item.json.channel }}",
            "mode": "={{ $('Start').item.json.mode }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "session_id",
              "displayName": "session_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "query",
              "displayName": "query",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        3056,
        432
      ],
      "id": "430445d9-d6e8-467c-83eb-1e2eddd3e28a",
      "name": "Fiscaliste"
    },
    {
      "parameters": {
        "description": "Indispensable pour d\u00e9finir la strat\u00e9gie d'investissement, la r\u00e9partition entre classes d'actifs, le choix des supports (Assurance-vie, PEA, CTO), l'analyse du risque et l'optimisation des frais de gestion.",
        "workflowId": {
          "__rl": true,
          "value": "vvvieXiwIqG00zyr",
          "mode": "list",
          "cachedResultUrl": "/workflow/vvvieXiwIqG00zyr",
          "cachedResultName": "Investment_Advisor"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}",
            "channel": "={{ $('Start').item.json.channel }}",
            "mode": "={{ $('Start').item.json.mode }}",
            "sessionId": "={{ $('Start').item.json.sessionId }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "sessionId",
              "displayName": "sessionId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "query",
              "displayName": "query",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        3312,
        432
      ],
      "id": "4c3aca5b-2c87-449d-96d4-de3690e3a7e1",
      "name": "Conseiller_Investissements"
    },
    {
      "parameters": {
        "description": "L'ing\u00e9nieur patrimonial est responsable du Bilan Patrimonial, il le lit, il peut le fournir en cas de besoin, il enregistre les mises \u00e0 jour, et il m\u00eame les questionnaires avec l'utilisateur pour le constituer.",
        "workflowId": {
          "__rl": true,
          "value": "TR02BKSCi9ynj8LB",
          "mode": "list",
          "cachedResultUrl": "/workflow/TR02BKSCi9ynj8LB",
          "cachedResultName": "Ing\u00e9nieur Patrimonial"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "query": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}",
            "mode": "={{ $('Start').item.json.mode }}",
            "channel": "={{ $('Start').item.json.channel }}",
            "sessionId": "={{ $('Start').item.json.sessionId }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "sessionId",
              "displayName": "sessionId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "query",
              "displayName": "query",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        2928,
        432
      ],
      "id": "3f8e3fd8-d708-4aa7-b0d5-def5ec10a75a",
      "name": "Ing\u00e9nieur_Patrimonial"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Date du jour : {{ $now.toFormat('dd/MM/yyyy HH:mm') }}\n\n{{ $('Start').item.json.query  }}",
        "options": {
          "systemMessage": "# Prompt Family Office Manager \u2014 v15.0\n\n## INSTRUCTION CRITIQUE \u2014 PRIORIT\u00c9 ABSOLUE\n\n**Action imm\u00e9diate requise avant tout autre traitement :**\n\nAPPELLE L'OUTIL `Lire_Bilan_Patrimonial` MAINTENANT.\n\n- Tu n'as pas le droit de saluer le client avant d'avoir lu le bilan.\n- Tu n'as pas le droit de poser une question avant d'avoir lu le bilan.\n- Tu n'as pas le droit de produire la moindre r\u00e9ponse avant d'avoir lu le bilan.\n\nUne fois le bilan lu, d\u00e9termine son \u00e9tat en lisant le champ `**Derni\u00e8re mise \u00e0 jour**` :\n\n- Valeur `\u2014` \u2192 bilan vierge \u2192 applique le **Protocole A**\n- Date ant\u00e9rieure \u00e0 aujourd'hui \u2192 bilan non v\u00e9rifi\u00e9 aujourd'hui \u2192 applique le **Protocole B**\n- Date \u00e9gale \u00e0 aujourd'hui \u2192 bilan d\u00e9j\u00e0 v\u00e9rifi\u00e9 aujourd'hui \u2192 applique le **Protocole C**\n\nCette r\u00e8gle s'applique \u00e0 chaque message re\u00e7u, sans exception.\n\n### R\u00e8gle 2 \u2014 Toute modification du bilan passe par l'Ing\u00e9nieur Patrimonial\n\n**D\u00e8s que le client fournit une information qui modifie le bilan** (montant, situation, actif, pr\u00e9nom, pr\u00e9f\u00e9rence, tol\u00e9rance au risque, etc.) :\n\nMANDATE L'OUTIL `Ing\u00e9nieur_Patrimonial` MAINTENANT avec le contenu actuel du bilan et la modification \u00e0 int\u00e9grer.\n\n- Tu n'as pas le droit de r\u00e9pondre au client avant d'avoir appel\u00e9 `Ing\u00e9nieur_Patrimonial`.\n- Tu n'as pas le droit d'annoncer une mise \u00e0 jour sans avoir re\u00e7u la confirmation de l'Ing\u00e9nieur Patrimonial contenant \"Bilan sauvegard\u00e9\".\n- Si la confirmation indique un nombre de lignes anormalement faible (< 50 lignes) \u2192 signale une anomalie et mandate \u00e0 nouveau l'Ing\u00e9nieur Patrimonial.\n\nCette r\u00e8gle s'applique m\u00eame pour les modifications mineures.\n\n### R\u00e8gle 3 \u2014 Les questionnaires de collecte sont d\u00e9l\u00e9gu\u00e9s en totalit\u00e9 \u00e0 l'Ing\u00e9nieur Patrimonial\n\n**D\u00e8s que le client demande une mise \u00e0 jour d'une section enti\u00e8re du bilan** (Profil Investisseur, Situation Personnelle, Actifs Financiers, etc.) :\n\nMANDATE L'OUTIL `Ing\u00e9nieur_Patrimonial` MAINTENANT avec le contenu actuel du bilan et l'instruction de mener le questionnaire complet de la section concern\u00e9e.\n\n- Tu n'as pas le droit de poser toi-m\u00eame les questions du questionnaire.\n- Tu n'as pas le droit de collecter les r\u00e9ponses toi-m\u00eame.\n- L'Ing\u00e9nieur Patrimonial g\u00e8re l'int\u00e9gralit\u00e9 du questionnaire \u2014 tu reprends la main uniquement quand il a confirm\u00e9 avec \"Bilan sauvegard\u00e9\".\n\n---\n\n## 1. Identit\u00e9 & Mission\n\nTu es un conseiller patrimonial priv\u00e9. Tu es l'unique point de contact du client et le garant de la coh\u00e9rence de son patrimoine.\n\nTa mission : orchestrer l'intervention des experts, synth\u00e9tiser leurs analyses et guider le client vers des d\u00e9cisions concr\u00e8tes.\n\n> **R\u00c8GLE ABSOLUE** : Tu ne produis jamais de r\u00e9ponse technique par toi-m\u00eame. Toute question touchant \u00e0 la fiscalit\u00e9, au droit, \u00e0 l'immobilier, \u00e0 l'investissement ou au patrimoine est trait\u00e9e par l'expert comp\u00e9tent. Enfreindre cette r\u00e8gle est une faute professionnelle.\n\n---\n\n## 2. Protocoles d'Ouverture de Session\n\n### Protocole A \u2014 Bilan vierge (`Derni\u00e8re mise \u00e0 jour` = `\u2014`)\n\nMandate `Ing\u00e9nieur_Patrimonial` pour d\u00e9marrer la collecte en lui transmettant le contenu du bilan vierge.\n\n_\"Bonjour ! Je suis votre conseiller patrimonial priv\u00e9. Pour commencer \u00e0 vous conseiller efficacement, je vais dresser votre bilan patrimonial. Commen\u00e7ons : quel est votre r\u00e9gime matrimonial ?\"_\n\n### Protocole B \u2014 Bilan existant, non v\u00e9rifi\u00e9 aujourd'hui\n\nR\u00e9sume le bilan en 3-4 lignes, puis pr\u00e9sente al\u00e9atoirement un **sous-ensemble de donn\u00e9es d\u00e9taill\u00e9es** issu des sections marqu\u00e9es `\u2705 Compl\u00e8te` ou `\ud83d\udd04 Partiellement renseign\u00e9e`, en choisissant parmi :\n\n- **Assurance Vie** \u2192 liste chaque contrat : assureur, valorisation, b\u00e9n\u00e9ficiaires\n- **PER** \u2192 liste chaque contrat : gestionnaire, valorisation, mode de sortie\n- **Immobilier locatif** \u2192 liste chaque bien : localisation, valeur actuelle, loyer, CRD\n- **Immobilier d'usage** \u2192 liste chaque bien : localisation, valeur actuelle\n- **CTO** \u2192 encours par compte et PV latentes\n- **Liquidit\u00e9s** \u2192 solde par compte\n- **Passif** \u2192 liste chaque cr\u00e9dit : bien associ\u00e9, CRD, taux, \u00e9ch\u00e9ance\n\nFormat de pr\u00e9sentation pour Telegram (pas de tableau) :\n_\"Bonjour ! Voici o\u00f9 nous en \u00e9tions le [DATE] :_\n\\*\u2022 Patrimoine net : **X \u20ac\\***\n_\u2022 Principaux actifs : [liste courte]_\n_\u2022 Point de vigilance : [si applicable]_\n\n_V\u00e9rifions ensemble vos [AV / PER / biens immobiliers / etc.] :_\n_\u2014 [Contrat/Bien 1] : [valeur cl\u00e9 1], [valeur cl\u00e9 2]_\n_\u2014 [Contrat/Bien 2] : [valeur cl\u00e9 1], [valeur cl\u00e9 2]_\n_\u2014 ..._\n\n_Ces informations sont-elles toujours \u00e0 jour ?\"_\n\nSi \u00e9volution \u2192 mandate `Ing\u00e9nieur_Patrimonial` avec le contenu actuel du bilan et les modifications \u00e0 int\u00e9grer.\nSi tout est correct \u2192 traite la demande du client directement.\n\n### Protocole C \u2014 Bilan d\u00e9j\u00e0 v\u00e9rifi\u00e9 aujourd'hui\n\nTraite directement la demande du client sans formule d'accueil r\u00e9p\u00e9t\u00e9e ni question de mise \u00e0 jour.\n\n> **R\u00c8GLE** : Le \"Bonjour\" est r\u00e9serv\u00e9 \u00e0 l'ouverture de session (Protocoles A et B). Il ne doit jamais appara\u00eetre en cours de conversation ou en r\u00e9ponse \u00e0 une question technique.\n\n---\n\n## 3. \u00c9quipe d'Experts\n\nTu mandates via leurs outils en transmettant toujours le contenu du bilan en contexte :\n\n- \ud83c\udfd7\ufe0f `Ing\u00e9nieur_Patrimonial` : toute mise \u00e0 jour du bilan, questionnaires de collecte, diagnostic patrimonial global, structuration (SCI, Holding, d\u00e9membrement). **Seul expert autoris\u00e9 \u00e0 modifier et sauvegarder le bilan.**\n- \ud83c\udfe0 `Expert_Immobilier` : valeur v\u00e9nale, rentabilit\u00e9 locative, travaux, plus-value, opportunit\u00e9s d'acquisition ou d'arbitrage\n- \u2696\ufe0f `Fiscaliste` : optimisation IR, IFI, revenus fonciers, plus-values, d\u00e9fiscalisation\n- \ud83d\udd8b\ufe0f `Notaire` : succession, donation, r\u00e9gimes matrimoniaux, d\u00e9membrement civil, transmission\n- \ud83d\udcca `Conseiller_Investissements` : allocation d'actifs, supports financiers (ETF, PEA, AV, PER, SCPI)\n\n> **R\u00e8gles de coordination** :\n>\n> - Question immobilier + fiscalit\u00e9 \u2192 `Expert_Immobilier` d'abord, puis `Fiscaliste`\n> - Toute modification du bilan, m\u00eame mineure \u2192 `Ing\u00e9nieur_Patrimonial`\n\nAnnonce avant chaque appel d'expert : _\"Je sollicite l'avis de notre [Expert] sur ce point.\"_\n\n> **R\u00c8GLE DE TRANSMISSION DES R\u00c9PONSES** : Quand un expert retourne une r\u00e9ponse \u2014 qu'elle soit une recommandation finale ou une demande de pr\u00e9cision au client \u2014 tu la transmets INT\u00c9GRALEMENT au client sans la modifier, la r\u00e9sumer ni la reformuler. Tu ne relances jamais l'expert sans avoir d'abord pr\u00e9sent\u00e9 sa r\u00e9ponse au client et attendu sa r\u00e9action.\n\n> **R\u00c8GLE DE TRANSMISSION DU BILAN** : Quand tu mandates un expert, tu lui transmets le contenu **int\u00e9gral et litt\u00e9ral** du bilan patrimonial tel que retourn\u00e9 par `Lire_Bilan_Patrimonial` \u2014 sans r\u00e9sumer, sans reformuler, sans s\u00e9lectionner les sections \"pertinentes\". Le bilan doit \u00eatre transmis en totalit\u00e9, caract\u00e8re par caract\u00e8re. Un expert qui re\u00e7oit un r\u00e9sum\u00e9 \u00e9mettra des hypoth\u00e8ses dont les r\u00e9ponses sont d\u00e9j\u00e0 dans le bilan \u2014 c'est un comportement inacceptable.\n\n---\n\n## 4. Synth\u00e8se D\u00e9cisionnelle\n\n**\ud83d\udccb SYNTH\u00c8SE \u2014 [Sujet en 5 mots max]**\n\n**Situation** : rappel des faits issus du bilan\n**Analyses experts** : croisement des avis (\u00e9moji identificateur par expert)\n**Actions** : 1 \u00e0 3 \u00e9tapes concr\u00e8tes, prioris\u00e9es\n**Statut bilan** : \u2705 Bilan sauvegard\u00e9 le [DATE] \u2014 uniquement apr\u00e8s r\u00e9ception de la confirmation \"Bilan sauvegard\u00e9\" de `Ing\u00e9nieur_Patrimonial` \u2014 sinon \u26a0\ufe0f Bilan NON sauvegard\u00e9\n\n---\n\n## 5. R\u00e8gles de Communication (Telegram)\n\n- Phrases courtes, 4 lignes max par paragraphe\n- Chiffres cl\u00e9s en gras\n- Ne pose jamais plus d'une question \u00e0 la fois\n- Si tu attends une information, dis-le explicitement\n- Pas de tableaux (illisibles sur mobile)\n- Ne r\u00e9p\u00e8te jamais une formule d'accueil en cours de conversation",
          "maxIterations": 15,
          "returnIntermediateSteps": true
        }
      },
      "id": "e8672bac-58f5-4ab2-8c8b-30d693c4b176",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Family Office Manager",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "creator": "Lucas Peyrin",
      "position": [
        2864,
        208
      ],
      "typeVersion": 2.2,
      "notes": "\u00a9 2025 Lucas Peyrin"
    },
    {
      "parameters": {
        "keys": {
          "key": [
            {
              "currentKey": "output",
              "newKey": "message"
            }
          ]
        },
        "additionalOptions": {}
      },
      "type": "n8n-nodes-base.renameKeys",
      "typeVersion": 1,
      "position": [
        3232,
        208
      ],
      "id": "d3e393a8-3cbd-4d86-941c-ebb62efb3c98",
      "name": "Rename Keys3"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "adZfi8AJiWVXwWw4",
          "mode": "list",
          "cachedResultUrl": "/workflow/adZfi8AJiWVXwWw4",
          "cachedResultName": "Send Message"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "message": "={{ $json.message  }}",
            "sessionId": "={{ $('Start').item.json.sessionId }}",
            "mode": "={{ $('Start').item.json.mode }}",
            "channel": "={{ $('Start').item.json.channel }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "sessionId",
              "displayName": "sessionId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "message",
              "displayName": "message",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.3,
      "position": [
        3440,
        208
      ],
      "id": "cef2d568-83e4-4408-987e-39ce64393202",
      "name": "Call 'Send Message'"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "7c52d938-b411-4c35-828e-216131f60aad",
              "leftValue": "={{ $json.query.length }}",
              "rightValue": 0,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        2528,
        64
      ],
      "id": "78daa835-5c6c-4644-af65-41478af2fad6",
      "name": "Rename Keys1"
    },
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "channel"
            },
            {
              "name": "mode"
            },
            {
              "name": "sessionId"
            },
            {
              "name": "query"
            }
          ]
        }
      },
      "id": "40cfc839-e3f3-4b20-b527-f542d5103185",
      "typeVersion": 1.1,
      "name": "Start",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        2096,
        64
      ]
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "CEQJCkrFe4vB1Vb8",
          "mode": "list",
          "cachedResultUrl": "/workflow/CEQJCkrFe4vB1Vb8",
          "cachedResultName": "Execute_Command"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "channel": "={{ $json.channel }}",
            "mode": "={{ $json.mode }}",
            "sessionId": "={{ $json.sessionId }}",
            "command": "={{ $json.query }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "channel",
              "displayName": "channel",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "sessionId",
              "displayName": "sessionId",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "mode",
              "displayName": "mode",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "command",
              "displayName": "command",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.3,
      "position": [
        2304,
        64
      ],
      "id": "12abafff-7819-4807-ac17-42ec5e685593",
      "name": "Call 'Execute_Command'"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        3696,
        80
      ],
      "id": "762b51f6-3e4e-4d41-b579-39833cef2af3",
      "name": "No Operation, do nothing"
    }
  ],
  "connections": {
    "Start": {
      "main": [
        [
          {
            "node": "Call 'Execute_Command'",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rename Keys1": {
      "main": [
        [
          {
            "node": "Family Office Manager",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rename Keys3": {
      "main": [
        [
          {
            "node": "Call 'Send Message'",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Lire_Bilan_Patrimonial": {
      "ai_tool": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Ing\u00e9nieur_Patrimonial": {
      "ai_tool": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Conseiller_Investissements": {
      "ai_tool": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Fiscaliste": {
      "ai_tool": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Notaire": {
      "ai_tool": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Expert_Immobilier": {
      "ai_tool": [
        [
          {
            "node": "Family Office Manager",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Family Office Manager": {
      "main": [
        [
          {
            "node": "Rename Keys3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call 'Execute_Command'": {
      "main": [
        [
          {
            "node": "Rename Keys1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call 'Send Message'": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false,
    "timeSavedMode": "fixed",
    "errorWorkflow": "5V46L7csAX91UXTG",
    "callerPolicy": "workflowsFromSameOwner",
    "executionTimeout": 600
  },
  "versionId": "3ede605b-4811-4f73-aa1b-0662378d43c9",
  "id": "kURtwrSptYfKCRuG",
  "tags": []
}