Abonnements SaaS — payableType=subscription

Liste et analyse tous les abonnements SaaS de l'entreprise via le filtre payableType=subscription. Permet d'identifier les abonnements actifs, leur coût total et leur récurrence.

↓ Télécharger le skill (.md)
83/100·📆 Mensuel·IntermédiaireCFOFinance AnalystProcurement
CartesAnalyse des dépensesget_payableslist_cards

🎯 But du skill

Liste et analyse tous les abonnements SaaS de l'entreprise via le filtre payableType=subscription. Permet d'identifier les abonnements actifs, leur coût total et leur récurrence.

📊 Ce que ça produit

Inventaire des abonnements SaaS avec fournisseur, montant mensuel ou annuel et statut.

Bénéfice

Avant

Pas de vue consolidée des abonnements — découverts seulement au moment des renouvellements.

Après

Inventaire complet des abonnements SaaS en quelques secondes, pour optimiser les coûts.



# Abonnements SaaS — payableType=subscription

## Requête de base

```json
{
  "companyId": "<companyId>",
  "filters": {
    "field": "payableType",
    "operator": "=",
    "value": ["subscription"]
  },
  "pageSize": 20
}
```

→ `hasNextPage: true` si plus de 20 résultats — paginer avec le curseur pour tout récupérer.

## ⚠️ spendingAmount ≠ montant de l'abonnement

C'est le piège principal sur les subscriptions. `spendingAmount` est le **plafond de la carte dédiée**, pas le montant facturé :

| Description | amount (réel) | spendingAmount (plafond carte) |
|-------------|---------------|---------------------------------|
| Google Apps subscription | 32,26 EUR | 4 500 EUR |
| Auto-recharge on Twilio | 14,65 EUR | 50 EUR |
| MessageBird | 27,36 EUR | 5 000 EUR |
| CRM 5 utilisateurs | 276,25 USD → 257 EUR | 400 USD |

→ **Ne JAMAIS sommer `spendingAmount`** pour calculer le coût total des abonnements — le résultat serait 10 à 200× supérieur à la réalité.
→ Toujours utiliser `amount` (devise locale) ou `functionalAmount` (EUR) pour les montants réels.

```json
// Bonne pratique
const totalEUR = payables.reduce((sum, p) => sum + p.functionalAmount.amount / Math.pow(10, p.functionalAmount.precision), 0)

// À ne pas faire
const totalFaux = payables.reduce((sum, p) => sum + p.spendingAmount.amount / ..., 0)  // peut être 100× trop élevé
```

## Devises : majorité en USD (SaaS internationaux)

Les abonnements SaaS sont majoritairement facturés en USD. Utiliser `functionalAmount` pour le total EUR :

```json
{
  "currency": "USD",
  "functionalCurrency": "EUR",
  "functionalExchangeRate": 0.9315,
  "amount": { "amount": 27625, "currency": "USD", "precision": 2 },
  "functionalAmount": { "amount": 25722, "currency": "EUR", "precision": 2 }
}
```

→ Sommer `functionalAmount` pour obtenir le total EUR consolidé toutes devises.

## Filtrer par période

Pour les abonnements d'une période donnée :

```json
{
  "companyId": "<companyId>",
  "filters": { "field": "payableType", "operator": "=", "value": ["subscription"] },
  "fromDate": "2026-01-01",
  "toDate": "2026-06-30",
  "pageSize": 20
}
```

## Lier abonnement → fournisseur

Chaque payable expose `counterparty.supplierId` (pas de nom) :

```json
{ "counterparty": { "type": "supplier", "supplierId": "S1mrHIIp" } }
```

→ `get_supplier_by_id("S1mrHIIp")` pour obtenir le nom (`legalName`), l'IBAN, le numéro de TVA.

## Analyse agrégée avec spendesk_analyze_spend

Pour un total rapidement groupé par fournisseur :

```json
{
  "companyId": "<companyId>",
  "fromDate": "2026-01-01",
  "toDate": "2026-06-30",
  "groupBy": ["supplier"],
  "filters": { "field": "payableType", "operator": "=", "value": ["subscription"] }
}
```

⚠️ `groupBy=supplier` retourne des IDs (pas des noms) — un appel `get_suppliers(ids=[...])` est nécessaire pour l'affichage (voir skill S05).

## Champs utiles

| Champ | Description |
|-------|-------------|
| `description` | Libellé de l'abonnement |
| `amount` / `functionalAmount` | Montant réel en devise locale / EUR (coefficient entier / 10^precision) |
| `spendingAmount` | Plafond de la carte — ne pas utiliser pour les totaux |
| `counterparty.supplierId` | ID du fournisseur SaaS |
| `currency` | Devise de facturation (souvent USD) |
| `functionalExchangeRate` | Taux de change appliqué |
| `creationDate` | Date du payable |
| `state` | Statut comptable (`exported`, `toExport`, `toPrepare`) |

## Exemples de prompts

- "Quels sont nos abonnements SaaS et leur coût mensuel ?"
- "Montre-moi le total dépensé en abonnements au premier trimestre"
- "Quels abonnements sont encore actifs ?" (filtrer par `fromDate` récente)
- "Liste tous les abonnements facturés en USD"
- "Quel est le coût mensuel moyen de notre abonnement Google Apps ?"

Comment installer ce skill

/
  1. 1
    Télécharger le fichier s16-abonnements-subscriptions.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 s16-abonnements-subscriptions.md .claude/s16-abonnements-subscriptions.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 get_payables, 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