- GET /api/allergens (public anonyme, lecture seule) : les 14 allergenes INCO
(id/code/name) via App\Catalogue\AllergenRepository. CatalogueController::allergens
(meme enveloppe {data,total} + present que les autres lectures catalogue).
- La borne CONSERVE son JSON statique (data/allergens.json) : il porte les
descriptions riches, absentes du schema allergen (code+name seulement). Le swap
reste possible si les descriptions sont ajoutees cote API ; commentaire data.js maj.
- Prix : decision confirmee -- centimes en stockage/API (price_cents), euros a
l'affichage (state.formatPrice). Aucun changement de convention requis.
- Test : AllergenReadDbTest (integration, vraie DB : les 14 INCO). 351 PHP verts,
PHPStan L6 propre, /api/allergens verifie live (200, total 14, same-origin).