docs(n8n): rapports portefeuille (hebdo+quotidien) auth durable + news + recommandations

Auth via jeton de securite (auto-renouvelle, plus d'expiration JWT). News par
action via Yahoo RSS dans le noeud Code. Analyse approfondie + recommandations.
Caveat: Qwen 8B peut se tromper sur les chiffres -> se fier au tableau exact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Alkatrazz 2026-06-15 23:44:27 +02:00
parent 69818c29a8
commit 047785be1a

View file

@ -289,14 +289,18 @@ curl -s "http://n8n.lab.local/api/v1/executions?limit=5" \
---
## Workflow « Rapport Portefeuille Hebdo — Ghostfolio »
## Workflows « Rapport Portefeuille » — Ghostfolio + Qwen
Rapport hebdomadaire commenté du portefeuille (idée : données exactes via API, narration par le LLM local).
Deux workflows (rapport commenté du portefeuille : données exactes via API, narration + actus par le LLM local) :
- **Hebdo** (`Rapport Portefeuille Hebdo — Ghostfolio`) : cron `0 18 * * 0` (dimanche 18h), `range=1w`, analyse approfondie (max_tokens 1500).
- **Quotidien** (`Rapport Portefeuille Quotidien — Ghostfolio`) : cron `0 8 * * *` (tous les jours 8h), `range=1d`, format digest concis (max_tokens 900).
- **Déclencheur** : Schedule, cron `0 18 * * 0` (dimanche 18h, TZ Europe/Paris).
- **Pipeline** : `Get Performance` (GET `http://ghostfolio.ai.svc.cluster.local:3333/api/v2/portfolio/performance?range=1w`) → `Get Holdings` (`/api/v1/portfolio/holdings`) → `Préparer Données` (Code : exclut `assetClass=LIQUIDITY` = cash/Livret A, calcule valeur, perf 7j, top/flop, concentration ; poids **relatifs au portefeuille actions**) → `Analyse LLM` (LiteLLM `:4000`, modèle `hermes-default`/Qwen) → `Mise en forme` (HTML) → email (credential SMTP « Postfix local »).
- **Règle LLM** : le modèle **commente uniquement** les chiffres fournis — interdiction d'inventer des nombres, de conseiller achat/vente ou de prédire le marché (les chiffres sont calculés en amont dans le nœud Code).
- ⚠️ **Auth Ghostfolio** : compte anonyme → header `Authorization: Bearer <JWT>` codé en dur dans les 2 nœuds GET. Le JWT **expire** (celui en place : **2026-12-12**). À renouveler avant, ou passer à l'échange du *jeton de sécurité* (`POST /api/v1/auth/anonymous`) pour auto-renouvellement.
**Pipeline** (identique, paramétré) : `Trigger``Auth Ghostfolio``Get Performance``Get Holdings``Préparer Données``Analyse LLM``Mise en forme``Envoyer`.
- **Auth durable** : nœud `Auth Ghostfolio` = `POST /api/v1/auth/anonymous` avec le **jeton de sécurité** (compte anonyme) → renvoie un JWT frais à chaque run (les nœuds GET utilisent `=Bearer {{ $('Auth Ghostfolio').first().json.authToken }}`). **Plus d'expiration à gérer.** Le jeton de sécurité est stocké dans le body du nœud Auth (base n8n, non versionné).
- **Préparer Données** (Code) : exclut `assetClass=LIQUIDITY` (cash/Livret A) ; calcule valeur, perf, top/flop, concentration (poids **relatifs au portefeuille actions**) ; **récupère les actus par action** (top 6 par poids) via Yahoo RSS `feeds.finance.yahoo.com/rss/2.0/headline?s=<sym>` avec `this.helpers.httpRequest` (wrap try/catch → si échec, le rapport part sans news).
- **Analyse LLM** : LiteLLM `:4000`, modèle `hermes-default` (Qwen). Le prompt autorise des **recommandations/pistes** + signale bonne/mauvaise nouvelle par action, en s'appuyant UNIQUEMENT sur données + news fournies.
- ⚠️ **Caveat précision** : Qwen 8B **peut se tromper sur les chiffres** dans sa prose. L'email inclut donc TOUJOURS le **tableau de positions exact** (calculé par n8n) : se fier au tableau pour les nombres, à la prose pour le contexte. Le LLM ne navigue pas — c'est n8n qui apporte les news.
---