---
name: wallet-multi-entites
description: Agréger les balances wallet de toutes les entités juridiques avec list_companies + get_wallet_summary
tags: [list_companies, get_wallet_summary, multi-entity, org-level, trésorerie]
when_to_use: Quand on veut une vue consolidée de la trésorerie Spendesk sur toutes les entités du groupe (token org-level requis)
---

# Wallet balance agrégée multi-entités

## Prérequis : token org-level

Ce workflow nécessite un **token org-level** (pas company-scoped). Avec un token company-scoped, `list_companies` retourne uniquement l'entité courante avec `name: null`.

## Workflow en 2 étapes

### Étape 1 — Lister toutes les entités

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

Retourne la liste des entités accessibles : `{ id, name }` par entité.

Exemple (11 entités sur ce compte) :
```json
[
  { "id": "B1stUp83",      "name": "SPENDESK" },
  { "id": "Hx1N5m87M",    "name": "Spendesk Limited" },
  { "id": "RRbRgeIB7X",   "name": "Spendesk GmbH" },
  { "id": "pD0gYhOK75T",  "name": "Spendesk Inc." },
  ...
]
```

### Étape 2 — Obtenir le wallet de chaque entité

Pour chaque `companyId` retourné :
```json
{
  "tool": "get_wallet_summary",
  "params": {
    "companyId": "<id de l'entité>"
  }
}
```

## Piège : list_companies ne garantit pas l'accès à toutes les entités

`list_companies` liste toutes les entités **connues** du token, mais `get_wallet_summary` peut retourner `"Failed to verify user company membership"` pour certaines d'entre elles si le token n'a pas les droits d'accès complets.

→ Toujours gérer l'erreur pour chaque appel individuel. Continuer avec les entités accessibles, signaler les inaccessibles.

Exemple observé sur ce compte : `pD0gYhOK75T` (Spendesk Inc.) → erreur, malgré son apparition dans `list_companies`.

## Données observées

### SPENDESK (EUR, B1stUp83)
- `totalAmount` : **-511 590 EUR** (balance négative — allocations > solde)
- `currency` : EUR

### Spendesk Limited (GBP, Hx1N5m87M)
- `totalAmount` : 75 662 GBP
- `totalAvailableAmount` : 49 941 GBP
- `totalAllocatedAmount` : 25 720 GBP
  - subscription: 4 983 GBP
  - physical: 7 238 GBP
  - singlePurchase: 1 395 GBP

## Devises différentes — NE PAS sommer sans conversion

Chaque entité a sa propre devise fonctionnelle. Pour agréger en une seule devise (ex: EUR), il faut appliquer les taux de change — **non fournis par le MCP Spendesk**. La conversion est à gérer côté client.

→ Pour une vue consolidée en EUR : présenter chaque entité dans sa propre devise, ou injecter les taux de change depuis une source externe.

## Structure de get_wallet_summary

```json
{
  "id": "companyId",
  "name": "Nom de l'entité",
  "status": "active",
  "currency": "EUR",
  "totalAmount": { "amount": -51159000, "currency": "EUR", "precision": 2 },
  "totalAvailableAmount": { "amount": ..., "currency": "EUR", "precision": 2 },
  "totalAllocatedAmount": { "amount": ..., "currency": "EUR", "precision": 2 },
  "allocatedOnCards": {
    "subscriptionAmount": { ... },
    "physicalAmount": { ... },
    "singlePurchaseAmount": { ... },
    "totalAllocatedAmount": { ... }
  },
  "scheduledTransfersAmount": {
    "scheduledExpenseClaimsAmount": { ... },
    "scheduledInvoicesAmount": { ... },
    "totalScheduledTransferAmount": { ... }
  }
}
```

`totalAmount` peut être **négatif** — c'est un état valide quand les allocations cartes dépassent le solde actuel (découvert temporaire en attente d'approvisionnement).

## Exemples de prompts utilisateur

- "Quel est le solde wallet disponible pour chaque entité du groupe ?"
- "Donne-moi une vue consolidée de la trésorerie Spendesk sur toutes les entités"
- "Quelles entités ont un wallet en négatif ?"
