---
name: s03-wallet-summary-vs-cards
scenario: S03
description: Analyser le solde wallet et les allocations cartes — réconciliation partielle, format décimal incohérent sur list_cards, wallet négatif possible
tags: [wallet, cards, allocation, balance, format]
when_to_use: Quand on veut un snapshot de la santé financière du wallet (solde disponible, allocations par type de carte, virements programmés)
risk: P2 — list_cards retourne availableBalance.amount en valeur décimale (ex: 91.38) alors que tous les autres tools retournent un coefficient entier. Ne pas appliquer la formule amount/10^precision sur les balances de cartes.
---

# Instructions — Solde wallet et allocations cartes

## ⚠️ Format incohérent : list_cards.availableBalance.amount

Tous les tools MCP utilisent la convention `{ amount: int, precision }` où la valeur = `amount / 10^precision`.

**Exception : `list_cards`** — le champ `availableBalance.amount` retourne directement la valeur décimale :
```json
// list_cards — valeur DÉJÀ en EUR :
"availableBalance": { "amount": 91.38, "currency": "EUR", "precision": 2 }
→ balance = 91,38 EUR (NE PAS diviser par 100)

// get_wallet_summary — coefficient entier standard :
"totalAmount": { "amount": 33224769, "currency": "EUR", "precision": 2 }
→ balance = 33 224 769 / 100 = 332 247,69 EUR
```

→ Pour les balances de cartes, utiliser `availableBalance.amount` directement (pas de division).

## ⚠️ Wallet disponible peut être négatif

`totalAvailableAmount` peut être **négatif** sur les comptes démo ou en cas de dépassement de virements programmés. C'est un état valide — interpréter comme "les allocations dépassent le solde actuel".

## ⚠️ allocatedOnCards ≠ somme des availableBalance des cartes actives

Ces deux métriques mesurent des choses différentes :
- `allocatedOnCards.totalAllocatedAmount` = montant réservé dans le wallet pour les cartes (limites de dépense réservées)
- `sum(card.availableBalance)` = montant résiduel que les titulaires peuvent encore dépenser

La différence = montant déjà consommé sur les cartes. Ce n'est **pas** une incohérence — c'est attendu.

## Étape 1 — Wallet snapshot (get_wallet_summary)

```json
{ "companyId": "..." }
```

Champs clés (tous en devise fonctionnelle) :
- `totalAmount` → solde brut du wallet (coefficient entier)
- `totalAvailableAmount` → disponible après toutes allocations (peut être négatif)
- `totalAllocatedAmount` = `allocatedOnCards.totalAllocatedAmount` + `scheduledTransfersAmount.totalScheduledTransferAmount`
- `allocatedOnCards.subscriptionAmount` → réservé sur cartes subscription
- `allocatedOnCards.physicalAmount` → réservé sur cartes physiques
- `allocatedOnCards.singlePurchaseAmount` → réservé sur cartes single-purchase
- `scheduledTransfersAmount.scheduledInvoicesAmount` → virements fournisseurs programmés

## Étape 2 — Cartes actives (list_cards)

```json
{ "companyId": "...", "status": "ACT", "pageSize": 100 }
```

Pour chaque carte active :
- `availableBalance.amount` → solde disponible EN EUROS DIRECTEMENT (pas de formule)
- `spendingLimit` → limite de dépense (peut être null pour les subscriptions sans limite fixe)
- `type` : subscription | physical | single_purchase | multi_use
- `currency` → devise de la carte (peut différer de la devise fonctionnelle)

⚠️ Ne pas sommer des cartes en devises différentes.

## Étape 3 — Interpréter les résultats

Présenter comme suit :

```
Wallet SPENDESK (EUR) au 2026-07-06 :
  Solde total      : 332 247,69 EUR
  Disponible       : -511 590,51 EUR  ⚠️ (allocations > solde)
  Alloué cartes    : 491 808,95 EUR
    dont subscription : 402 288,42 EUR
    dont physiques    :  28 872,30 EUR
    dont single-use   :   4 601,63 EUR
  Virements programmés : 352 029,25 EUR

Cartes actives (ACT) : 2 cartes
  Subscription #7071 : 91,38 EUR disponible
  Subscription #5947 :  9,49 EUR disponible
```

## Exemple live (données réelles)

| Métrique | Valeur |
|----------|--------|
| Solde total | 332 247,69 EUR |
| Disponible | **-511 590,51 EUR** (négatif — test) |
| Alloué cartes | 491 808,95 EUR |
| Virements programmés | 352 029,25 EUR |
| Cartes ACT | 2 (subscriptions uniquement, ~101 EUR disponible) |

## Exemple de prompt

- "Quel est l'état du wallet ?" → get_wallet_summary uniquement
- "Combien reste-t-il sur les cartes actives ?" → list_cards status=ACT + sum availableBalance
- "Y a-t-il des virements programmés en attente ?" → wallet_summary.scheduledTransfersAmount
