Aller au contenu

Lot 1 bis — Routes d'écriture et recette automatisée

03/10/2026. Séquence L1-6, étape 2, du plan d’alignement. Écarts : EC-082 à EC-087 (droits, routes livrées pour 085 à 087), EC-112 (ce qui reste ouvert).

Les écrans B3 étaient en lecture. Six routes ajoutent les écritures que les scénarios SR-L1 exigent, chacune sous le droit de son domaine. Le contrat d’API passe à 1.17.0. La recette est un fichier de test, apps/api/test/recette-l1.test.ts, qui rejoue chaque scénario par HTTP contre la vraie base. Le parcours navigateur n’est pas fait : il est reporté à la recette d’un lot ultérieur.

Route Droit Effet Refus
POST /v1/contrats contracts.manage Crée un brouillon avec lignes et primes corps_invalide (400), contrat_refuse (409)
POST /v1/contrats/{id}/activer contracts.manage Active un brouillon, rend la fiche contrat_inconnu (404), activation_refusee (409)
POST /v1/rendements capacity.propose Ajoute une version du rendement, avec motif (RG-023) cible_invalide (400), cible_introuvable (404), rendement_refuse (409)
POST /v1/capacites capacity.propose Propose une capacité ; la base calcule (surface mesurée × rendement) polygone_absent, polygone_invalide, chevauchement_non_leve, producteur_en_controle, rendement_inconnu, campagne_cloturee (409)
POST /v1/conformite/statuts certification.manage Ajoute une ligne à l’historique ; toute révision exige un motif (RG-150) unite_introuvable (404), statut_refuse (409)
POST /v1/fournisseurs certification.manage Crée le fournisseur et son certificat en une transaction (EC-053) fournisseur_refuse (409)

Les routes de capacité sont rattachées au module Membres et foncier, les autres au noyau. La validation d’une capacité reste sous capacity.approve : l’auteur ne valide pas.

Un refus de la base (contrainte, déclencheur) annule la transaction et devient un code 409 générique, avec le message de la base en détail (refusDeBase). Rien n’est écrit à moitié.

Scénario Règle Résultat
SR-L1-01 AV1-01 Passé : sans polygone, polygone invalide, sans rendement, cible inconnue
SR-L1-02 AV1-02 Passé : contrôle ouvert, capacité refusée (producteur_en_controle)
SR-L1-03 RG-004 Passé : activité déclarée puis retirée avec motif ; 403 sans modules.manage
SR-L1-04 RG-005 Passé : jeton sans organisation ou d’une organisation inconnue refusé
SR-L1-05 RG-012 Réserve : seul l’état de départ est vérifié ; le refus à la collecte est du Lot 3 (EC-112)
SR-L1-06 RG-013 Passé : fournisseur et certificat ensemble, rien en cas de refus
SR-L1-07 RG-015 Passé pour la route unique : sans certificat, rien n’est créé. Le deuxième point d’entrée (la réception) est du Lot 2
SR-L1-08 RG-016 Passé : « en vigueur » puis « expiré » selon la date de lecture ; aucune colonne d’expiration
SR-L1-09 RG-020 Passé : capacité = surface mesurée × rendement, jamais la surface déclarée ; validée après direction et RSCI
SR-L1-10 RG-023 Passé : versions 1 et 2 du rendement avec leur motif ; motif vide refusé
SR-L1-11 RG-150 Passé : révision sans motif refusée, historique conservé, la conversion ne se revendique pas

Le même fichier couvre la création et l’activation d’un contrat (EC-086).

  • Parcours navigateur avec admin.demo : reporté à la recette d’un lot ultérieur. Le critère D6 (démonstration depuis le back-office) n’est donc pas encore atteint.
  • Campagnes et produits : droits existants, aucune route (EC-112).
  • Producteurs et parcelles : posés par la connexion des migrations, faute de gestionnaires de commande (Lot 3).
Test Ce qu’il vérifie
apps/api/test/recette-l1.test.ts 14 tests, un describe par SR-L1-01 à 11, plus les contrats
openapi.test.ts Concordance du registre et des routes montées
i18n.test.ts Les codes d’erreur ajoutés existent en français et en anglais