Liste les POs ouverts et suit l'avancement de leur facturation (les dépassements de budget ne sont pas détectables) via get_purchase_orders
Analyse les bons de commande ouverts et l'avancement de leur facturation. Les dépassements de budget ne sont pas détectables : le montant approuvé à l'origine n'est pas exposé.
83/100·📅 Hebdo·IntermédiaireProcurementCFO
Budget & POsget_purchase_orders
🎯 But du skill
Analyse les bons de commande ouverts et l'avancement de leur facturation. Les dépassements de budget ne sont pas détectables : le montant approuvé à l'origine n'est pas exposé.
📊 Ce que ça produit
POs ouverts avec budget, montant facturé, pourcentage consommé et alerte de dépassement.
⚡ Bénéfice
Avant
Suivi manuel des POs dans Excel — dépassements budgétaires détectés trop tard.
Après
Monitoring des POs en temps réel avec alerte automatique de dépassement budgétaire.
# Instructions
## Use case
Récupérer les POs actifs et comparer le montant engagé actuel (`amount`) avec le montant déjà facturé (`billedAmount`) pour suivre l'avancement de la facturation et repérer les POs sans facturation. Les dépassements de budget ne peuvent pas être identifiés : le budget approuvé d'origine n'est pas exposé, le dire à l'utilisateur plutôt que d'annoncer « aucun dépassement ».
## Appel de base
```json
{
"companyId": "<COMPANY_ID>",
"status": ["open"],
"pageSize": 100
}
```
Note : `status` est un **tableau** de strings (contrairement à `list_cards.status` qui est une string simple).
## Champs financiers d'un PO
```json
{
"amount": { "amount": 2126789, "currency": "USD", "precision": 2 }, // montant engagé actuel : 21 267.89 USD
"billedAmount": { "amount": 1063384, "currency": "USD", "precision": 2 }, // total facturé : 10 633.84 USD
"deliveredAmount": { "amount": 0, "currency": "USD", "precision": 2 } // montant livré confirmé
}
```
- `amount` = montant engagé ACTUEL du PO, pas le budget approuvé à l'origine : Spendesk le réécrit à `billedAmount` à la clôture du PO et, selon la configuration de l'entité, quand une facture qui le dépasse est approuvée
- `billedAmount` = somme des factures rattachées (toutes, y compris les avoirs)
- `deliveredAmount` = montant dont la réception a été confirmée (souvent 0 si le suivi livraison n'est pas utilisé)
- `netAmount` = équivalent hors TVA de `amount` ; présent seulement sur les POs qui ont un montant net déclaré (vérifier sa présence avant de calculer une TVA ou de sommer, ne jamais le traiter comme 0)
## Calculer la consommation du budget
```
consommation (%) = billedAmount / amount × 100
dépassement = non détectable (amount est réaligné sur billedAmount ; le budget approuvé d'origine n'est pas exposé)
reste à facturer = amount - billedAmount (sur le montant engagé actuel, pas sur le budget approuvé d'origine)
```
## billingStatus — état de la facturation
| Valeur | Signification |
|--------|---------------|
| `lateInvoice` | PO ouvert mais aucune facture reçue (ou PO en retard de facturation) |
| `partiallyBilled` | Facturation partielle — des factures existent mais < budget total |
| `billed` (valeur citée par la description du tool ; `fullyBilled` n'y figure pas) | PO entièrement facturé |
## Piège 1 — Les POs "open" peuvent avoir une endDate dépassée
Un PO reste en `status: "open"` même après la date de fin. Le MCP ne ferme pas automatiquement les POs expirés. Sur le compte démo, tous les POs ouverts ont une `endDate` en 2022 ou 2023 — ils sont ouverts depuis 2-3 ans.
```
PO-14 (Abonnement Oracle) : endDate 2022-07-31 → encore open en 2026
PO-22 (Coworking Lyon) : endDate 2022-12-31 → encore open en 2026
PO-82 (Banking offsite) : endDate 2022-11-18 → encore open en 2026
```
→ Toujours filtrer sur `endDate` si on veut uniquement les POs en cours de validité :
```json
{
"status": ["open"],
"endDateFrom": "2026-07-01"
}
```
## Piège 2 — netAmount absent de la réponse
`netAmount` est l'équivalent hors TVA de `amount`. Il est renvoyé seulement sur les POs qui ont un montant net déclaré, et n'est réaligné avec `amount` que si le PO porte un taux de TVA initial (sinon il peut ne plus correspondre à `amount`). Si des avoirs ont été émis, `billedAmount` les intègre déjà. Pas de champ séparé pour distinguer montant brut et montant net.
## Piège 3 — Multi-devises entre POs
Les POs peuvent être en EUR ou USD (ou toute autre devise). Ne pas sommer les `amount` cross-devises pour obtenir un budget total consolidé. Les champs `amount`, `billedAmount`, `deliveredAmount` sont toujours dans la devise du PO.
## billingOverDeliveryStatus
Champ présent sur chaque PO : `"none"` / `"overBilled"` / `"underBilled"` — permet de détecter d'un coup d'œil les POs dont la facturation dépasse la livraison. Sur le compte démo : tous à `"none"`.
## deliveryStatus
| Valeur | Signification |
|--------|---------------|
| `noDeliveryExpected` | La réception de livraison n'est pas suivie pour ce PO |
| `partiallyDelivered` | Livraison partiellement confirmée |
| `fullyDelivered` | Livraison entièrement confirmée |
## invoices[] — factures liées
Chaque PO expose un tableau `invoices[]` avec chaque facture associée :
```json
{
"invoiceRequestId": "...",
"invoiceNumber": "INV6342",
"amount": { "amount": 533578, "currency": "USD", "precision": 2 },
"status": "paid",
"payableId": "697e453d-..." // peut être null si le mapping requestId→payableId a échoué
}
```
Pour obtenir le détail comptable d'une facture : `get_payable_by_id(payableId)` — voir [[s20-detail-complet-facture]].
## Exemples de prompts utilisateurs
- "Quels sont les POs ouverts avec des factures en retard (billingStatus = lateInvoice) ?"
- "Quel est le taux de consommation des POs actifs de Q3 2026 ?"
Comment installer ce skill
/
- 1Télécharger le fichier
s27-purchase-orders-budget.mdvia le bouton ci-dessus. - 2Placer le fichier dans le répertoire
.claude/de votre projet (ou~/.claude/pour une installation globale).cp s27-purchase-orders-budget.md .claude/s27-purchase-orders-budget.md - 3Utiliser dans Claude Code — le 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_purchase_orders.Skills similaires
★ Top
★ Top