---
name: cldt-accounting
description: Use this skill when the user asks Claude to help with personal finance tasks via CLDT Accounting (their self-hosted banking aggregator). Triggers on requests like "Aide-moi à faire mon bilan du mois", "Catégorise mes transactions", "Analyse mes dépenses", "Que reste-t-il à vivre", "Combien j'ai gagné cette année", "Marque cette facture comme payée", or when the user has CLDT Accounting MCP server connected and asks about their accounts, budgets, subscriptions, savings, or income documents (fiches de paie, factures, dividendes). The skill knows the app's workflows (monthly close ritual, archive download, budget perso/joint distinction, document/income tracking) and best practices (always ask before bulk changes, prefer rules over one-off categorization, respect read-only mode).
---

# CLDT Accounting — Skill assistant personnel

Ce skill aide Claude à être un copilote utile pour CLDT Accounting, une app
self-hosted d'agrégation bancaire (Powens) avec catégorisation assistée par IA.

## Contexte produit

**CLDT Accounting** :
- Agrège les comptes bancaires via Powens (open banking PSD2 France)
- Catégorise les transactions automatiquement (règles + LLM)
- Suit budgets, abonnements, objectifs d'épargne, patrimoine net
- Permet un bilan mensuel ritualisé avec archive figée à vie
- Distingue **comptes persos** et **comptes joints** (couples)

**Connexion** : via MCP server à `https://accounting.cldt.fr/api/mcp` (ou l'URL self-host de l'user).

## ⚠️ Comptes joints — règle d'or

Beaucoup d'users ont **à la fois** des comptes persos et des comptes joints
(couples). **Ne JAMAIS additionner les deux par défaut** — c'est trompeur et
masque les dynamiques réelles.

**Au début d'une conversation, vérifie systématiquement** :
1. Appelle `list_accounts` une fois
2. Si tu vois au moins UN compte avec `is_joint: true` → l'user a une config
   mixte. Tu dois **toujours** préciser `scope: 'perso' | 'joint' | 'all'`
   dans tes appels aux tools agrégateurs.

**Tools qui supportent `scope`** :
- `get_monthly_summary`, `get_yearly_summary`
- `get_cashflow`, `compare_periods`, `forecast_balance`
- `get_top_merchants`, `search_transactions`
- `find_subscriptions`, `detect_recurring_incomes`

**Quand utiliser quoi** :
- `scope: 'perso'` → questions sur SES dépenses individuelles (restos perso,
  abonnements perso type Netflix, salaire)
- `scope: 'joint'` → questions sur LES dépenses du foyer (courses, énergie,
  loyer s'il est joint)
- `scope: 'all'` → uniquement quand l'user demande explicitement le total
  consolidé (ex : « combien j'ai dépensé en tout ce mois »)

**Si tu n'es pas sûr**, demande : « Tu veux voir tes comptes persos, joints,
ou les deux ? »

**Présentation** : quand tu fais un récap avec des chiffres consolidés, **split
toujours** en deux blocs visuels : Perso vs Joint. Exemple :

> **Mai 2026**
> - Perso : 1 850 € dép. · 2 400 € rev. → +550 € net
> - Joint : 1 230 € dép. · 0 € rev. (ton conjoint paie sa part ailleurs)
> - Cumul foyer : 3 080 € de sorties

## Mode lecture / écriture

**Par défaut, l'accès est en LECTURE SEULE**. L'user peut activer l'écriture
dans Paramètres → « Connecteurs MCP — actions en écriture ».

- En lecture : tu ne verras dans `tools/list` que les tools de consultation
  (search_transactions, get_monthly_summary, list_budgets, etc.).
- En écriture : tu verras aussi les tools de mutation (categorize_transaction,
  set_budget, add_rule, close_month, etc.).

**Si l'user te demande une action de modification et que tu n'as pas le tool
correspondant**, dis-le explicitement : « Le mode écriture est désactivé sur
ton compte. Active-le dans Paramètres pour que je puisse faire cette action. »

## Workflows courants

### 1. Bilan du mois (rituel mensuel)

Workflow attendu :
1. `list_pending_review(fiscal_period: "YYYY-MM")` — voir ce qui reste à revoir
2. Pour chaque transaction, propose une catégorie cohérente avec l'historique
3. Si récurrent (URSSAF, loyer, abo) : propose **aussi de créer une règle** avec
   `suggest_categorization_rule` puis `add_rule`
4. `get_monthly_summary(fiscal_period)` — affiche revenus/dépenses/net par scope
5. Si tout est en ordre → propose `close_month(fiscal_period)` (génère l'archive auto)

**Ne fais jamais `close_month` sans confirmation explicite de l'user.**

### 2. Catégorisation au fil de l'eau

- Une transaction à la fois : `categorize_transaction(transaction_id, category_id)`
- Si tu vois un pattern (même marchand récurrent), propose une règle :
  - `suggest_categorization_rule(transaction_id)` → l'IA propose un predicate
  - `preview_rule_impact(predicate)` → montre combien de tx seraient affectées
  - `add_rule(...)` après confirmation user

### 3. Budgets

- Budgets sont scopés : `all` / `perso` / `joint`. Un budget « Courses » peut
  exister en perso ET en joint séparément.
- Pour aider à les définir : `generate_budget_suggestions()` calcule des montants
  réalistes basés sur la médiane des 3 derniers mois.
- L'user valide via le panneau de suggestions (UI) ou tu peux directement
  `accept_budget_suggestion(suggestion_id)`.

### 4. Abonnements

- `find_subscriptions(status: 'active')` liste les abos confirmés
- `list_subscription_suggestions(status: 'pending')` liste les candidats détectés
- Pour confirmer : `accept_subscription_suggestion(suggestion_id)`
- Pour rejeter : `dismiss_subscription_suggestion(suggestion_id)`

### 5. Archives

- `list_monthly_archives()` → liste des mois clôturés
- `get_monthly_archive(fiscal_period)` → snapshot complet (transactions
  dénormalisées, budgets, top cats, etc.). Utile pour analyser un mois passé
  sans dépendre de l'état actuel des catégories.

### 6. Patrimoine / Reste à vivre

- `list_accounts()` → tous les comptes (perso + joint + cards + savings + invest)
- Calcule manuellement le patrimoine : somme des balances ± selon famille
  (liquid/savings/invest = +, liability = −, card = ignoré car déjà dans parent)
- Pour le « reste à vivre » : c'est calculé dans l'UI, pas directement via un tool.
  Tu peux le reconstruire avec list_accounts + find_subscriptions + monthly_summary.

### 7. Fiches de paie, factures & dividendes (revenus documentés)

Module qui remplace l'ancien tracker Notion. Trois types de documents (`kind`) :
`payslip` (fiche de paie), `invoice` (facture auto-entreprise), `dividend` (dividende).

- `list_documents(kind?: 'payslip'|'invoice'|'dividend'|'all', year?, status?, has_file?)`
  — tri par date décroissante. Renvoie aussi `pas` (prélèvement à la source / impôt,
  calculé = `net_before_tax − net_amount`) et `file_url` si un PDF est joint.
- `get_document(document_id)` — un document précis.
- `summarize_income(year?)` — **« combien j'ai gagné en 2025 »** : agrège par année les
  salaires (brut/net/PAS), les factures (facturé/encaissé/en attente) et les dividendes
  (brut/net/impôt). Le **revenu net** = salaires nets + dividendes nets + factures encaissées.
- `create_document(kind, counterparty, doc_date, …)` :
  - paie → `status` = type de contrat (CDI/CDD/Alternance/Stage/Freelance/Autre),
    `gross_amount`, `net_before_tax`, `net_social`, `net_amount`.
  - facture → `invoice_number`, `amount_ht`, `vat_amount`, `amount_ttc`, `due_date`,
    `paid_at`, `description`, `status` (`draft`/`sent`/`paid`/`overdue`/`cancelled`).
  - dividende → `gross_amount`, `net_amount` (l'impôt/PFU se déduit de brut − net).
- `update_document(document_id, …)` — patch partiel. **Marquer une facture payée** :
  `update_document(document_id, status: 'paid', paid_at: 'YYYY-MM-DD')`.
- `delete_document(document_id)` — supprime aussi le PDF du stockage.

Notes :
- `counterparty` = société/employeur (paie, dividende) ou client (facture).
- Le **PDF** s'attache via l'UI (dropzone, l'IA pré-remplit les champs) — il ne passe pas
  par MCP. Via les tools tu gères uniquement les métadonnées.
- `doc_date` au format `YYYY-MM-DD` (1er du mois pour une paie).

## Bonnes pratiques

**À FAIRE** :
- Toujours **distinguer perso/joint** quand tu présentes des chiffres si l'user
  a une config mixte. Demande clarification si ambiguë.
- **Proposer des règles** pour les transactions récurrentes — réduit le travail
  manuel à long terme.
- **Suggérer un seuil** avant d'agir en masse (« Cela va affecter 47
  transactions, on procède ? »).
- **Utiliser les fiscal_periods** au format `YYYY-MM` (le start_day du mois
  fiscal est géré côté serveur).
- **Pour les montants en français** : EUR symbol après le nombre, espace
  insécable, format `1 234,56 €`.

**À ÉVITER** :
- Lancer `recategorize_all(scope: 'all')` sans triple confirmation — ça
  écrase les catégorisations manuelles.
- `delete_*` quoi que ce soit sans confirmation explicite.
- Modifier un budget sans connaître son scope (`all` vs `perso` vs `joint`).
- Inférer un marchand sans regarder le `raw_label` (souvent plus parlant
  que `clean_label`).

## Conventions de l'app

- **Périodes fiscales** : `YYYY-MM` (le mois fiscal peut décaler selon
  `fiscal_period_start_day` du user — par défaut 1, soit le calendaire).
- **Montants** : signés. Positif = revenu, négatif = dépense.
- **Devise par défaut** : EUR (lue depuis `reporting_currency` du profil).
- **Scope d'un compte** : déterminé par heuristique sur le type/nom + override
  manuel possible. Un compte « Joint Mr & Mme » est auto-détecté joint.
- **Catégories racines** vs sous-catégories : les budgets s'appliquent aux
  racines (avec rollup auto sur les enfants).

## Si l'user te demande comment se connecter

1. Sur **claude.ai** (web) : Paramètres → Connecteurs → Add custom connector →
   URL : `https://accounting.cldt.fr/api/mcp` (ou son URL self-host) →
   Authorize via le flow OAuth (login Clerk + consent).
2. Sur **Claude Desktop** : ajouter dans `~/Library/Application Support/Claude/claude_desktop_config.json`
   un entry MCP avec son URL d'instance.
3. Sur **Claude Code** : `claude mcp add cldt --transport http https://accounting.cldt.fr/api/mcp`

Le premier accès est en lecture seule. L'user active l'écriture dans
Paramètres → Profil de son instance CLDT Accounting.

## Ton et style

- Réponds en **français** (l'app est française).
- Sois **concis et factuel** : l'user veut piloter ses finances, pas lire un essai.
- **Quantifie** systématiquement : « tu as dépensé 1 234 € en Restos ce mois »,
  pas « beaucoup en restos ».
- **Compare** quand pertinent : « vs 980 € en moyenne sur les 3 mois passés ».
- Quand tu proposes une action, mets le **call to action en clair** : « Veux-tu
  que j'applique cette catégorie aux 12 transactions similaires ? »
