---
name: s09-depenses-par-bookkeeping-status
scenario: S09
description: Répartition des dépenses par statut comptable via spendesk_analyze_spend — seules les lignes avec données non-nulles apparaissent; absence d'un statut ≠ inexistence
tags: [spend-analysis, bookkeeping, workflow-comptable, status-breakdown]
when_to_use: Quand on veut visualiser la répartition des dépenses selon leur stade dans le workflow comptable (toPrepare / toExport / exported) pour une période donnée
risk: P2 — groupBy=["bookkeepingStatus"] ne retourne que les statuts qui ont des payables dans la période. L'absence de "toPrepare" dans le résultat signifie 0 payables avec ce statut DANS LA PÉRIODE — pas qu'il n'en existe aucun sur le compte.
---

# Instructions — Répartition par statut comptable

## ⚠️ Lignes absentes = zéro dans la période, pas inexistence universelle

`spendesk_analyze_spend` n'affiche que les statuts avec des payables dans la période définie.

Exemple : si toutes les payables en janvier 2026 sont `exported`, la réponse retourne :
```json
[{ "key": "exported", "amount": ..., "share": 100 }]
```
→ Il **manque** `toPrepare` et `toExport` dans le résultat.
→ Cela signifie : **0 payable avec payableDate en jan 2026** a ces statuts — pas que le compte est propre.

Des payables `toPrepare`/`toExport` peuvent exister avec des `payableDate` en dehors de la période.

## ⚠️ spendesk_analyze_spend filtre par payableDate

`spendesk_analyze_spend` utilise toujours `payableDate` comme période. Pour trouver les payables `toPrepare` sans contrainte de date, utiliser `get_payables` avec `bookkeepingStatus=toPrepare` sans filtre de date.

## Les 3 statuts comptables

| Statut | Signification | Action |
|--------|--------------|--------|
| `toPrepare` | Non encore examiné — en attente de review comptable | Reviewer manuellement dans Spendesk |
| `toExport` | Reviewed, prêt à envoyer à l'ERP | **Exporter** (ne jamais omettre `toExport` d'un export ERP) |
| `exported` | Déjà envoyé à l'ERP | **À exclure** des exports pour éviter le double-comptage |

→ Pour un export ERP : `bookkeepingStatus = ["toExport"]` uniquement (cf. S10).

## Étape 1 — Répartition sur une période

```json
{
  "companyId": "...",
  "fromDate": "YYYY-MM-DD",
  "toDate": "YYYY-MM-DD",
  "groupBy": ["bookkeepingStatus"]
}
```

→ Retourne les statuts présents dans la période, avec montant et count pour chacun.

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

Chaque row :
- `key` : `"toPrepare"` | `"toExport"` | `"exported"`
- `amount` : total des payables avec ce statut dans la période
- `count` : nombre de payables
- `share` : % du total de la période

Si une row est absente → 0 payable avec ce statut dans la période (ce n'est PAS une garantie globale).

## Étape 3 — Détecter les payables en attente hors période

Pour s'assurer qu'il n'y a aucun backlog, toujours compléter par :
```json
// get_payables — sans filtre de date
{
  "filters": { "field": "bookkeepingStatus", "operator": "=", "value": ["toPrepare", "toExport"] }
}
```
→ Retourne TOUS les payables non encore exportés, quelle que soit leur `payableDate`.

## Exemple live (H1 2026 et Jul-25→Jun-26)

```
fromDate: 2026-01-01 / toDate: 2026-06-30
→ exported : 8 174 523,65 EUR (3 937 payables, 100%)
→ toPrepare : [absent — 0 payable dans cette période]
→ toExport  : [absent — 0 payable dans cette période]
```

```
fromDate: 2025-07-01 / toDate: 2026-06-30
→ exported : 16 524 574,27 EUR (7 199 payables, 100%)
→ toPrepare : [absent — 0 payable dans cette période]
→ toExport  : [absent — 0 payable dans cette période]
```

→ **Interprétation correcte** : Sur ce compte, tous les payables avec une payableDate dans ces périodes sont déjà `exported`. Des payables `toExport` existent bien (3 ont été trouvés par S10), mais leur `payableDate` est postérieure au 30 juin 2026.

## Combinaison utile : statut × type de dépense

Pour analyser le backlog comptable par type :
```json
{
  "groupBy": ["bookkeepingStatus", "payableType"],
  "fromDate": "...",
  "toDate": "..."
}
```
→ Permet de voir si le backlog `toPrepare` est principalement des notes de frais (`expenseClaim`), des factures (`invoicePurchase`), etc.

## Exemple de prompts

- "Combien de factures sont encore en attente de review ?" → groupBy=["bookkeepingStatus"], filter toPrepare
- "Quel % des dépenses est déjà exporté en compta ?" → groupBy=["bookkeepingStatus"], lire share de "exported"
- "Y a-t-il des factures prêtes à exporter ?" → groupBy=["bookkeepingStatus"] ou get_payables avec toExport
- "Répartition du workflow comptable pour Q1 2026" → groupBy=["bookkeepingStatus", "payableType"]
