Analyser les dépenses par projet ou région

Ventile les dépenses selon un champ analytique personnalisé (projet, région…), mois par mois, sans mélanger les champs entre eux.

Finance Analyst📆 MensuelIntermédiaireLecture seule

Demandez-le comme ça

Quelle est la dépense par région sur les 12 derniers mois, mois par mois ?

Quand l'utiliser

Quand vous voulez la dépense par projet, par région ou par tout autre axe analytique propre à l'entreprise.

Ce que ça produit

Total société, part affectée et part non affectée sur le champ, puis tableau par valeur avec montant, part, reste à payer et mois le plus élevé.

Comment ça se déroule

  1. 1Liste vos axes analytiques et vous laisse choisir
  2. 2Récupère les valeurs de l'axe choisi
  3. 3Ventile les dépenses par valeur, mois par mois
  4. 4Écarte les valeurs des autres axes pour ne rien mélanger
  5. 5Calcule la part de dépenses non affectée à cet axe

Ce qui vous protège

  • Ce skill ne fait que lire : il ne modifie rien dans Spendesk
  • Il agit avec vos permissions et votre rôle, jamais au-delà
  • L'assistant ne peut ni approuver ni payer
▸Détail technique85/100 · 3 outils
Analyse des dépensesRapportsget_analytical_fieldsget_analytical_field_valuesspendesk_analyze_spend

# Analyse des dépenses par champ analytique

## Le piège central : `analyticalCode` mélange tous les champs

`spendesk_analyze_spend` avec `groupBy: ["analyticalCode"]` renvoie **les valeurs de tous les champs analytiques dans une seule liste** — valeurs de vos champs personnalisés, mais aussi catégories de dépenses. Une ligne ne dit pas à quel champ sa valeur appartient.

Vérifié en direct : sur 12 mois, la liste mêlait « France » (champ Region), « IT & Technical fees » (catégorie de dépense) et « GM Budget » (champ Supplier Budget). La somme des lignes dépassait largement le total réel (EUR 113 720,26), parce qu'un même payable porte une valeur par champ et est donc compté une fois par champ. Les pourcentages `share` sont calculés sur cette somme gonflée.

**Règle : ne jamais additionner ni comparer des lignes `analyticalCode` sans les avoir d'abord restreintes à un seul champ.**

## Étape 1 — Choisir le champ

```json
{ "tool": "get_analytical_fields", "params": {} }
```

Renvoie les champs avec `id`, `name`, `type`. Les champs archivés sont inclus : ne garder que ceux dont `archivedAt` est `null`. Le champ des catégories de dépenses n'est pas dans cette liste (il se lit avec `get_expense_categories`).

Si l'utilisateur n'a pas nommé le champ, lister les champs actifs et demander lequel analyser.

## Étape 2 — Récupérer les valeurs de ce champ

```json
{ "tool": "get_analytical_field_values", "params": { "fieldId": "<id du champ>" } }
```

Garder la liste des `id` de valeurs : c'est elle qui sert à isoler le champ. Les valeurs archivées sont incluses (`archivedAt` non nul) — les conserver pour l'historique, mais les signaler.

## Étape 3 — Analyser, puis ne garder que les lignes du champ

```json
{
  "tool": "spendesk_analyze_spend",
  "params": {
    "fromDate": "YYYY-MM-DD",
    "toDate": "YYYY-MM-DD",
    "groupBy": ["analyticalCode", "month"],
    "limit": 50
  }
}
```

- Mettre `analyticalCode` **en premier** dans `groupBy` : c'est la seule position où les lignes ne portent que les montants de la valeur concernée.
- Monter `limit` à 50 : avec la valeur par défaut (10), les valeurs du champ voulu peuvent se retrouver noyées dans la ligne « Others ».
- Dans la réponse, **ne garder que les lignes dont `id` figure dans la liste de l'étape 2**. Ignorer les autres.
- Période maximale : 366 jours. Au-delà, découper et ne combiner qu'une fois tous les appels réussis.

## Étape 4 — Calculer la part non affectée

Le total du champ (somme des lignes gardées) est inférieur ou égal à `summary.totalAmount`. L'écart correspond aux dépenses **sans valeur sur ce champ** : le présenter explicitement comme « non affecté », c'est souvent l'information la plus utile pour le FP&A.

Recalculer les pourcentages soi-même, sur le total du champ ou sur `summary.totalAmount` — ne pas reprendre `share`.

## Variante — filtrer sur une valeur précise

`filters.analyticalCodes: ["<id de valeur>"]` restreint aux payables qui portent cette valeur sur au moins une ligne. Attention : `summary.totalAmount` et toute autre dimension comptent alors ces payables **en entier**, y compris leurs lignes sur d'autres valeurs. Seules les lignes `analyticalCode` (placé en premier) sont exactes.

## Format de sortie recommandé

```
Dépenses par <nom du champ> — du <date> au <date>
Total société : X EUR — dont affecté sur ce champ : Y EUR (Z %) — non affecté : W EUR

| <Champ> | Montant | Part | Dont reste à payer | Mois le plus élevé |
```

Les montants sont en devise fonctionnelle, TTC, sur la date du document (pas la date comptable). Le MCP ne lit pas les budgets : pour un écart au budget par projet, l'utilisateur fournit les chiffres.

## Exemples de prompts utilisateur

- "Quelle est la dépense par région sur les 12 derniers mois, mois par mois ?"
- "Combien avons-nous dépensé sur le projet Tech ce trimestre, et quelle part n'est rattachée à aucun projet ?"
- "Compare les dépenses par projet entre le T2 et le T3"

Comment installer ce skill

/
  1. 1
    Télécharger le fichier s72-analyse-par-champ-analytique.md via le bouton ci-dessus.
  2. 2
    Placer le fichier dans le répertoire .claude/ de votre projet (ou ~/.claude/ pour une installation globale).
    cp s72-analyse-par-champ-analytique.md .claude/s72-analyse-par-champ-analytique.md
  3. 3
    Utiliser dans Claude Code — le skill est automatiquement découvert. Décrivez votre besoin en langage naturel et Claude appliquera les instructions du skill.
💡 Assurez-vous que le MCP Spendesk est configuré dans votre .claude/settings.json avec les outils get_analytical_fields, get_analytical_field_values, spendesk_analyze_spend.

Skills similaires

★ Top
95/100·🔍 Ponctuel·Expert

Auditer la couverture du MCP

Sonde tous les outils MCP disponibles, re-évalue la couverture des 50 cas d'usages persona, détecte les nouveaux champs ou outils, et régénère le rapport d'analyse des gaps.

CFOControllerAP Manager
90/100·📅 Hebdo·Débutant

Demandes de carte via get_requests

Explique comment utiliser get_requests pour les demandes de carte et pourquoi les remboursements de frais n'y apparaissent pas. Évite une source de confusion fréquente entre deux workflows distincts.

ControllerFinance Analyst
90/100·🔍 Ponctuel·Intermédiaire

Cost centers actifs vs archivés

Distingue les centres de coût actifs des archivés via le bon usage de get_cost_centers. Évite le piège de la convention de nommage isArchived vs isActive qui est contre-intuitive.

ControllerFinance Analyst

Interested in AI Agent services or Custom Integrations?