Liste les cartes actives (status=ACT) avec leur solde disponible et résout les noms des propriétaires via list_cards + get_users

Liste les cartes actives avec leur solde disponible en résolvant les noms des propriétaires via get_users. Permet un suivi précis des cartes et des budgets alloués.

↓ Télécharger le skill (.md)
83/100·📅 Hebdo·DébutantCFOController
Carteslist_cards

🎯 But du skill

Liste les cartes actives avec leur solde disponible en résolvant les noms des propriétaires via get_users. Permet un suivi précis des cartes et des budgets alloués.

📊 Ce que ça produit

Inventaire des cartes actives avec nom du propriétaire en clair, solde disponible et plafond.

Bénéfice

Avant

Liste de cartes avec IDs utilisateurs non résolus — impossible à interpréter sans référentiel.

Après

Inventaire cartes complet avec noms, soldes et plafonds en clair, immédiatement exploitable.



# Instructions

## Use case

Lister les cartes actives avec leur solde disponible et identifier le propriétaire pour chaque carte.

## Appel de base

```json
{
  "companyId": "<COMPANY_ID>",
  "status": "ACT",
  "pageSize": 50
}
```

Note : contrairement à `get_purchase_orders.status` qui prend un **tableau**, `list_cards.status` prend une **string simple** (un seul statut à la fois).

## Lifecycle des cartes

```
PRE (pre-active) → ACT (active)
ACT → BLO (blocked)
BLO → REA (reactivated) → ACT
```

États terminaux (ne peuvent pas revenir actifs) : `LOS`, `STO`, `DAM`, `EXP`, `CAN`, `CMD`

Pour lister les cartes actives au sens large, cibler `ACT` et `REA` :
- `status: "ACT"` — actives
- `status: "REA"` — réactivées (après blocage)

## Piège critique — availableBalance.amount est un DÉCIMAL, pas un coefficient

**Toutes les autres réponses Spendesk** retournent `amount` comme un coefficient entier :
`{ amount: 9138, precision: 2 }` → 91.38 EUR

**`list_cards.availableBalance.amount` retourne la valeur DÉCIMALE directement :**
`{ amount: 91.38, currency: "EUR", precision: 2 }` → 91.38 EUR (pas 9138 !)

→ Ne jamais appliquer `amount / 10^precision` sur `availableBalance.amount` de `list_cards` — le résultat serait 100× trop petit.

```javascript
// CORRECT pour list_cards.availableBalance
const balance = card.availableBalance.amount  // 91.38 EUR directement

// CORRECT pour tous les autres tools (get_payables, etc.)
const amount = payable.amount.amount / Math.pow(10, payable.amount.precision)
```

## Structure de réponse

```json
{
  "id": "lfyzcn76rvd200",
  "type": "subscription",          // single_purchase | subscription | physical | multi_use
  "status": "ACT",
  "lastFourDigits": "7071",        // 4 derniers chiffres du PAN — le PAN complet n'est jamais retourné
  "expiryDate": "2030-04-30T23:59:59.000Z",
  "ownerId": "lywtbkp615b21t",     // userId du propriétaire
  "currency": "EUR",
  "availableBalance": { "amount": 91.38, "currency": "EUR", "precision": 2 },
  "spendingLimit": null            // null sur les cartes subscription
}
```

## Piège — spendingLimit null sur les cartes subscription

`spendingLimit` est `null` pour les cartes `subscription` (confirmé S29 et S16). Le solde disponible se lit via `availableBalance` uniquement. Pour les cartes `single_purchase` et `multi_use`, `spendingLimit` contient le plafond.

## Résoudre ownerId → nom de l'employé

`list_cards` retourne `ownerId` (userId) mais pas le nom. Pour afficher le nom :

```json
// get_users avec filtre par ID
{
  "companyId": "<COMPANY_ID>",
  "ids": ["lywtbkp615b21t", "autre_user_id"]
}
```

→ Retourne `{ firstName, lastName, email }` pour chaque userId. Construire un map userId → nom pour enrichir les cartes.

## Filtres disponibles

| Paramètre | Type | Description |
|-----------|------|-------------|
| `status` | string | Un seul statut (PRE/ACT/BLO/REA/EXP/CAN/LOS/STO/DAM/CMD/CBL) |
| `type` | enum | single_purchase / subscription / physical / multi_use |
| `userId` | string | Filtrer par propriétaire |
| `createdAfter` | YYYY-MM-DD | Cartes créées après cette date |
| `createdBefore` | YYYY-MM-DD | Cartes créées avant cette date |

## Exemples de prompts utilisateurs

- "Quelles cartes virtuelles sont actives en ce moment avec leur solde disponible ?"
- "Y a-t-il des cartes avec un solde résiduel non utilisé ?"
- "Montre-moi les cartes actives de l'équipe Marketing"

Comment installer ce skill

/
  1. 1
    Télécharger le fichier s29-cartes-actives-solde.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 s29-cartes-actives-solde.md .claude/s29-cartes-actives-solde.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 list_cards.

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