Dépenses par cost center et employé

Analyse les dépenses par centre de coût avec un détail par employé. Résout automatiquement les noms des centres de coût depuis leurs IDs pour un rapport lisible.

↓ Télécharger le skill (.md)
85/100·📆 Mensuel·IntermédiaireFinance AnalystController
Analyse des dépensesRapportsspendesk_analyze_spendget_cost_centers

🎯 But du skill

Analyse les dépenses par centre de coût avec un détail par employé. Résout automatiquement les noms des centres de coût depuis leurs IDs pour un rapport lisible.

📊 Ce que ça produit

Tableau croisé centre de coût × employé avec montants, nombre de transactions et noms résolus.

Bénéfice

Avant

Export manuel puis pivot table dans Excel pour croiser centres de coût et employés.

Après

Breakdown coût center × employé instantané avec noms en clair, sans Excel.



# Instructions — Dépenses par cost center et employé

## ⚠️ Noms cost centers vs employés : comportement différent

Dans `spendesk_analyze_spend` :

| Dimension | `key` retourné | `id` retourné |
|-----------|---------------|--------------|
| `costCenter` | **Nom** du cost center (ex: "Marketing") | UUID du cost center |
| `supplier` | **ID** du fournisseur | ID (identique) |
| `employee` | **Nom** si disponible (ex: "Sabine Juin") | ID de l'employé |
| | **ID** si archivé ou sans nom (ex: "d2uvqq5sbi6oth") | ID (identique) |

→ **Résolution de noms nécessaire seulement pour `employee` quand `key === id`** (utilisateur archivé/sans nom).

## ⚠️ Cost centers "X -old-" : non archivés dans le système

`get_cost_centers` retourne des cost centers dont le nom commence par "X -old-" ou "X- old" mais avec `isArchived=false`. Ces cost centers "déprécié par convention" restent actifs dans le système et peuvent apparaître dans les données historiques.

→ Toujours utiliser `get_cost_centers` pour obtenir la liste des IDs actifs si l'utilisateur veut filtrer sur un sous-ensemble de départements.

## Étape 1 — Récupérer les cost centers actifs (si besoin de filtrer)

```json
{ "companyId": "...", "includeArchived": false }
```

→ Retourne id + name + isArchived pour tous les cost centers.
→ Utiliser les IDs dans `filters.costCenterIds` pour cibler un département.

## Étape 2 — Analyse avec double breakdown

```json
{
  "companyId": "...",
  "fromDate": "YYYY-MM-DD",
  "toDate": "YYYY-MM-DD",
  "groupBy": ["costCenter", "employee"],
  "limit": 10
}
```

→ Retourne : top-10 cost centers (par montant), chaque cost center avec ses top-10 employés.
→ La row "Others" apparaît si > 10 cost centers ou > 10 employés par cost center.

## Étape 3 — Filtrer sur un seul cost center

Pour voir TOUS les employés d'un département (pas seulement les top-10) :
```json
{
  "companyId": "...",
  "fromDate": "YYYY-MM-DD",
  "toDate": "YYYY-MM-DD",
  "groupBy": ["costCenter", "employee"],
  "filters": { "costCenterIds": ["<uuid-cost-center>"] },
  "limit": 50
}
```

→ Avec un seul cost center filtré, le `limit=50` au niveau employé donne les 50 plus gros dépensiers.

## Étape 4 — Interpréter les champs

Chaque row cost center :
- `key` : **nom** du cost center
- `id` : UUID du cost center
- `amount` / `count` / `share` : agrégats du cost center
- `breakdown[]` : top-N employés dans ce cost center

Chaque row employé (dans breakdown) :
- `key` : **nom** si disponible, **ID** si archivé ou sans nom
- `id` : ID de l'employé (toujours)
- `amount` / `count` / `share` : dépenses de l'employé dans CE cost center

## Étape 5 — Gérer les employés sans nom

```
breakdown.forEach(emp => {
  const displayName = (emp.key !== emp.id)
    ? emp.key                // nom résolu
    : `[Utilisateur archivé: ${emp.id.substring(0,8)}...]`  // ID fallback
})
```

## Exemple live (H1 2026, groupBy=["costCenter","employee"])

**Total : 8 174 523,65 EUR — 3 937 payables**

| Rang | Cost Center | Montant | Share | Top dépensier |
|------|-------------|---------|-------|--------------|
| 1 | **People** | 2 078 260,64 EUR | 25,4% | `d2uvqq5sbi6oth` (ID seul) — 691 423,46 EUR (33,3%) |
| 2 | **Marketing** | 1 867 209,46 EUR | 22,8% | Loretta Nguyen — 1 141 489,15 EUR (61,1%) |
| 3 | **Engineering Foundations** | 1 563 799,22 EUR | 19,1% | Hoang-Huy Jean-Pierre Huynh — 529 153,49 EUR (33,8%) |
| 4 | **Product Engineering** | 592 502,11 EUR | 7,2% | Guilhem Bellion — 142 850,34 EUR (24,1%) |
| 5 | **Revenue Operations** | 591 595,97 EUR | 7,2% | Sébastien van Hoof — 471 241,01 EUR (79,7%) |
| 6 | **Strat Ops** | 253 422,42 EUR | 3,1% | Vincent Mothes — 104 412,26 EUR (41,2%) |
| 7 | **Revenue** | 200 824,70 EUR | 2,5% | Maria Eugenia Montes Pita — 166 139,29 EUR (82,7%) |
| 8 | **Security Engineering** | 178 840,45 EUR | 2,2% | Jonathan Fedida — 118 558,80 EUR (66,3%) |
| 9 | **Product** | 164 276,49 EUR | 2,0% | Julien Chriqui — 26 246,65 EUR (16%) |
| 10 | **Finance** | 162 699,94 EUR | 2,0% | Eva Tourki — 53 461,60 EUR (32,9%) |
| — | Others | 521 092,25 EUR | 6,4% | — |

Observations :
- Le top dépensier de "People" est un ID (utilisateur archivé) — 691 K EUR sans nom affiché
- Marketing très concentré : Loretta Nguyen représente 61,1% des dépenses du département
- Revenue Operations : Sébastien van Hoof = 79,7% du cost center (dépendance forte sur un seul employé)
- Revenue Operations "Others" = -13 427,11 EUR (négatif) — credit notes d'employés hors top-10

## Exemple de prompts

- "Quelles équipes dépensent le plus ?" → groupBy=["costCenter"], pas de breakdown employee
- "Qui dépense le plus dans chaque département ?" → groupBy=["costCenter","employee"], limit=5
- "Dépenses de l'équipe Marketing par employé" → groupBy=["costCenter","employee"], costCenterIds=[id_marketing]
- "Quel département concentre ses dépenses sur peu d'employés ?" → lire share du top-1 dans chaque breakdown

Comment installer ce skill

/
  1. 1
    Télécharger le fichier s08-depenses-par-cost-center-employe.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 s08-depenses-par-cost-center-employe.md .claude/s08-depenses-par-cost-center-employe.md
  3. 3
    Utiliser dans Claude Codele 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 spendesk_analyze_spend, get_cost_centers.

Skills similaires

★ Top
95/100·🔍 Ponctuel·Expert

Audit de couverture MCP — Gap analysis automatisée

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