# CLAUDE.md — chaps (métadonnées & backoffice)

> Service **chaps-api** : catalogue de métadonnées et autorisations (Laravel), port local **8011**.
> Gouvernance globale : `../estair-connect-docs/CLAUDE.md` + `../estair-connect-docs/registry/CLAUDE.md`.

## Rôle

Source de vérité du **catalogue** : domaines, modules, menus, `metadatas` (flags
`searchable`/`filterable`/`exportable`), picklists, CTAs (avec `endpoint`/`method` —
CTAs auto-descriptives), `badges` (définitions KPI par module), rôles/permissions.
Consommé par le frontend (`/api/v1/metadata/{module}`) et par estair
(`/internal/*` sous `verify.apikey`).

## Règles non-négociables

- 🔒 **FND-007 — Isolation des bases** : chaps ne lit ni n'écrit JAMAIS les bases `estair`
  ou `messager`. Les données d'estair se consomment via son API HTTP
  (`DataClientService` / `EstairClientService` + `X-API-Key`). L'isolation est testée par
  `BadgeController::health()` — ne pas la casser.
  Détail : `../estair-connect-docs/registry/FND/FND-007-service-db-isolation-http-only.md`.
- Chaps **ne calcule aucune valeur métier** : il porte des DÉFINITIONS (badges, CTAs,
  metadatas) ; les valeurs sont calculées par estair.
- Ne jamais re-versionner un `.env.staging` (templates = `.env.staging.example`).

## Repères

- Routes internes pour estair : `routes/api.php` `/internal/*` (middleware `verify.apikey`).
- Base locale : `chaps` (historiquement `estair_bo` en prod).
