Purchase Orders (POs)
Analyse les purchase orders et leur lien avec les factures via payableId. Explique pourquoi payableId=null ne signifie pas nécessairement l'absence de facture.
79/100·🔍 Ponctuel·ExpertProcurementAP Manager
Budget & POsRéconciliationget_purchase_orders
🎯 But du skill
Analyse les purchase orders et leur lien avec les factures via payableId. Explique pourquoi payableId=null ne signifie pas nécessairement l'absence de facture.
📊 Ce que ça produit
POs avec statut de liaison facture, montant engagé et explication des cas sans payableId.
⚡ Bénéfice
Avant
Interprétation incorrecte de payableId=null causait des faux signalements de factures manquantes.
Après
Compréhension correcte du lien PO-facture, zéro faux manque détecté.
# Instructions — Purchase Orders (POs)
## ⚠️ payableId=null ≠ "pas de facture"
Chaque PO peut avoir un tableau `invoices[]` avec des factures liées.
Chaque invoice a `payableId` qui peut être :
- **UUID** → lien direct vers la payable (utiliser `get_payable_by_id` pour les détails)
- **null** → la facture existe mais ne peut pas être résolue depuis son `requestId`
```json
// Invoice avec payableId null — la facture existe mais n'est pas liée :
{
"invoiceRequestId": "abc123",
"invoiceNumber": "INV-001",
"amount": { "amount": 150000, "currency": "EUR", "precision": 2 },
"status": "paid",
"payableId": null ← NE PAS conclure "pas de facture"
}
```
→ En cas de `payableId=null`, utiliser `invoiceRequestId` ou `invoiceNumber` pour la réconciliation manuelle.
## ⚠️ POs multi-devises : ne pas sommer cross-devises
Les POs peuvent être libellés en EUR, USD, GBP, etc. Les champs `amount`, `billedAmount`, `deliveredAmount` sont dans la devise du PO.
→ Ne jamais additionner des POs en devises différentes sans conversion.
→ Afficher séparément par devise ou convertir explicitement.
Exemple live : PO FullStory en USD ($21,267.89), PO Oracle en EUR (30,000 EUR).
## Étape 1 — POs actifs (status=open)
```json
{ "companyId": "...", "status": ["open"], "pageSize": 100 }
```
→ Retourne les POs en cours qui acceptent encore des factures.
→ `billingStatus: "lateInvoice"` → PO ouvert mais aucune facture reçue récemment.
→ `billingStatus: "partiallyBilled"` → factures reçues mais budget non épuisé.
## Étape 2 — POs expirant bientôt
```json
{
"companyId": "...",
"endDateFrom": "YYYY-MM-DD",
"endDateTo": "YYYY-MM-DD",
"status": ["open"]
}
```
Exemple : POs expirant dans les 30 prochains jours = endDateFrom=aujourd'hui, endDateTo=aujourd'hui+30j.
## Étape 3 — Calcul du budget consommé
Pour chaque PO :
```
budget_approuvé = amount (en devise du PO)
facturé = billedAmount
livré = deliveredAmount
net = billedAmount - creditNotes (= netAmount field)
taux_consommation = billedAmount / amount × 100
reste_budget = amount - billedAmount
```
⚠️ Un PO avec `billedAmount > amount` est en dépassement de budget.
## Étape 4 — Accéder au détail des factures
Pour chaque PO avec `invoices[]` :
1. Si `payableId != null` → appeler `get_payable_by_id(payableId)` pour les détails complets
2. Si `payableId == null` → noter `invoiceNumber` + `invoiceRequestId` pour réconciliation manuelle
## Exemple live (données réelles)
| PO | Description | Status | Amount | Facturé |
|----|-------------|--------|--------|---------|
| Coworking Lyon | Espace coworking | open | 26 026 EUR | 20 185 EUR (78%) |
| FullStory | Subscription SaaS | open | $21 267 USD | $10 633 USD (50%) |
| Oracle | Abonnement annuel | open | 30 000 EUR | 0 EUR (0%) — lateInvoice |
| Coworking Lyon 2 | Extension | open | 35 424 EUR | 5 904 EUR (17%) |
Note : `payableId=null` non visible dans ce jeu de données démo — le risque est documenté dans la spec MCP mais non testable ici.
## Exemple de prompt
- "Quels POs expirent dans les 30 prochains jours ?" → endDateFrom/endDateTo + status=open
- "Quel est le taux de consommation de nos POs actifs ?" → status=open + calcul billedAmount/amount
- "Trouve les factures liées au PO Oracle" → invoices[].payableId → get_payable_by_id
Comment installer ce skill
/
- 1Télécharger le fichier
s28-purchase-orders-payable-id.mdvia le bouton ci-dessus. - 2Placer le fichier dans le répertoire
.claude/de votre projet (ou~/.claude/pour une installation globale).cp s28-purchase-orders-payable-id.md .claude/s28-purchase-orders-payable-id.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