---
name: cost-centers-actifs-archives
description: Distinguer les cost centers actifs des archivés avec get_cost_centers — piège convention X-old vs isArchived
tags: [get_cost_centers, includeArchived, isArchived, naming-convention]
when_to_use: Quand on veut lister uniquement les cost centers opérationnels, ou inclure les archivés pour l'analyse historique
---

# Cost centers actifs vs archivés

## Piège critique : convention X-old ≠ isArchived

`get_cost_centers` sans paramètre retourne tous les CCs dont `isArchived: false`. Mais **beaucoup de CCs obsolètes restent avec `isArchived: false`** — ils sont simplement renommés avec un préfixe "X -old-", "X- old", "X-old" dans le nom (convention UI Spendesk pour les pousser en bas des listes).

Sur ce compte : 97 CCs avec `isArchived: false`, dont ~74 préfixés "X -old-" ou "X- old" → **convention de nommage ≠ archivage API**.

## Les deux niveaux de décommissionnement

| Type | Exemple | isArchived | Visible par défaut | Apparaît sur payables |
|------|---------|-----------|-------------------|----------------------|
| CC actif opérationnel | "Marketing" | false | ✅ | ✅ |
| CC préfixé X-old (décommissionné UI) | "X- old Marketing" | false | ✅ | ✅ |
| CC vraiment archivé (API) | "Sales US", "Finance" | **true** | ❌ | ✅ (historique) |

## Appel par défaut — tous les non-archivés

```json
{
  "tool": "get_cost_centers",
  "params": {
    "companyId": "<companyId>"
  }
}
```

Retourne : tous les CCs avec `isArchived: false`, y compris les CCs "X-old" décommissionnés par convention.

## Appel avec archives — pour les payables historiques

```json
{
  "tool": "get_cost_centers",
  "params": {
    "companyId": "<companyId>",
    "includeArchived": true
  }
}
```

Retourne : les mêmes + les CCs avec `isArchived: true`. Important quand on traite des payables anciens qui référencent des CCs aujourd'hui archivés.

## Données observées

Sur ce compte (appel `includeArchived: true`) :
- **97 CCs** avec `isArchived: false` (dont ~74 "X-old" par convention)
- **10 CCs** avec `isArchived: true` :
  - "Banking (only audit)"
  - "Finance" ← doublon potentiel avec le CC actif "Finance"
  - "Formation"
  - "IT" ← doublon potentiel avec le CC actif "IT"
  - "Sales Partnerships"
  - "Sales UK"
  - "Sales US" ← **apparaît DEUX FOIS** avec le même owner (problème de données)
  - "Test"
  - "X -old- Charity"

**Note :** deux CCs archivés ont le même nom qu'un CC actif ("Finance", "IT") — ne pas confondre les IDs lors de l'analyse.

## Filtrer les CCs vraiment opérationnels

Pour obtenir uniquement les CCs opérationnels (sans les X-old décommissionnés), filtrer côté client par convention de nommage :

```javascript
const activeCCs = costCenters.data.filter(cc => 
  !cc.name.toLowerCase().startsWith('x ') &&
  !cc.name.toLowerCase().startsWith('x-')
)
```

Sur ce compte, cela réduit de 97 → ~23 CCs vraiment actifs.

## Comportement sans pagination

`get_cost_centers` retourne TOUS les CCs en une seule réponse (pas de pagination) — aucune gestion de curseur ou de page nécessaire. Le résultat peut être très volumineux sur les grands comptes (~97+ entrées).

## Champs retournés

```json
{
  "id": "98f5436e-f4e0-4835-9a76-0e3fb39a35bc",
  "name": "Finance",
  "owner": "0f3gfvi_ng7pzu",
  "coOwnerIds": ["jfz-8y136mvo05", "ji80mmv4whajgz"],
  "isArchived": false
}
```

Champs : `id`, `name`, `owner` (userId), `coOwnerIds` (array de userIds), `isArchived` (boolean).

Pas d'informations de budget, de dépenses, ou de membres équipe directement dans `get_cost_centers` — pour ces données, utiliser `get_payables(filters.costCenterIds=[...])`.

## Exemples de prompts utilisateur

- "Liste tous les cost centers actifs de l'entreprise"
- "Quels cost centers ont été archivés ?"
- "Donne-moi tous les cost centers, y compris les archivés, pour l'export comptable"
