Aller au contenu

Lot 1, séquence A4 — Acteurs

1er octobre 2026. Mise en œuvre de la séquence A4 du plan du Lot 1. Décisions : EC-014, EC-028, EC-031, EC-053 ; écarts ouverts : EC-069, EC-070.

  • Un doublon de pièce d’identité n’est jamais refusé : la fiche est acceptée et un contrôle doublon_identite s’ouvre. Tant qu’il n’est pas levé, la fiche est « en contrôle » : ni capacité ni paiement (AV1-02).
  • La fusion de deux fiches ne supprime rien : la fiche absorbée devient fusionnee et renvoie à la fiche retenue.
  • L’éligibilité au groupe est une fonction pure du domaine à critères alternatifs (EC-014), appelée par un service de l’API. Ses seuils sont passés par l’appelant : leur stockage est en attente (EC-069).
  • Aucune route REST en A4 : le contrat est gelé en A9, les écrans B3 demanderont leurs routes.
Table Contenu
app.groupement Code unique par organisation, nom, actif
app.producteur organisation_id et groupement_id (obligatoire : la table descend sur le téléphone), code unique et jamais réutilisé, pièce d’identité et son numéro normalisé, photo et pièce en fichier, chiffre d’affaires annuel avec sa devise, statut actif ou fusionnee
app.affectation_agent Agent affecté à un groupement, avec début et fin ; une seule affectation en cours par agent et par groupement ; jamais supprimée
app.fournisseur Identité complète, tous champs obligatoires (EC-053)
app.client Identité, incoterm, devise, conditions de règlement, tous obligatoires (EC-053)
sync.controle Nouvelle colonne producteur_id (le motif doublon_identite et la décision fusion existaient déjà dans le socle)

Fournisseur et certificat (EC-053). La certification n’est pas sur la fiche : elle vit dans la table certificat, créée en A6. La règle « pas de fournisseur sans certificat complet » ne peut donc pas être une contrainte de base en A4. Elle s’applique en A6, par la création du fournisseur et de son premier certificat dans une seule transaction de l’API. En A4, aucune route de création de fournisseur n’existe : la règle n’est pas enfreinte.

Le déclencheur producteur_doublon s’exécute après chaque insertion ou changement de pièce ou de statut. Si une autre fiche active de la même organisation porte le même type de pièce et le même numéro normalisé (majuscules, sans espace ni tiret : cni tg 0001 et CNI-TG-0001 se rapprochent), il ouvre un contrôle avec la liste des fiches en cause. Un seul contrôle de doublon ouvert par fiche.

  • Aucun index unique : un doublon ne se refuse pas.
  • Un autre type de pièce, ou l’absence de pièce, ne fait jamais un doublon.
  • app.producteur_en_controle(id) dit si la fiche a un contrôle non levé. C’est la garde que la capacité (A8) et le paiement (Lot 4) appelleront.

app.fusionner_producteurs(absorbée, retenue, motif) exige un utilisateur dans le contexte (le décideur) et un motif. Elle refuse la fusion d’une fiche avec elle-même, ou d’une fiche déjà fusionnée. Elle lève les contrôles de doublon de la fiche absorbée avec la décision fusion. Le service fusionnerProducteurs (apps/api/src/acteurs/producteurs.service.ts) pose le contexte et rend fusion_refusee ou fiche_introuvable.

eligibilite.evaluerEligibiliteGroupe (packages/domain) juge trois critères, alternatifs : il suffit d’en atteindre un.

Critère Atteint quand Borne
Surface les trois surfaces (cultures, serres, prairies) sont connues et aucune ne dépasse son seuil seuil inclus
Chiffre d’affaires il ne dépasse pas le plafond, après conversion dans la devise du seuil plafond inclus
Coût de certification il dépasse le taux minimal (en centièmes de point) seuil exclu

Une donnée absente rend le critère inconnu, jamais atteint. Une devise différente sans taux est une erreur de programmation. evaluerEligibiliteDuGroupement (API) lit les producteurs actifs et passe leurs données ; les surfaces viennent de A5 et sont fournies par l’appelant.

Test Ce qu’il vérifie
db/tests/l1-a4.sql Unicités, pièce et chiffre d’affaires complets ou absents, doublon accepté et contrôle ouvert (AV1-02), normalisation, autre type de pièce, levée du contrôle, fusion et ses refus, suppression interdite, affectations, champs obligatoires des fournisseurs et clients, isolation par organisation
VT-ELIG-001 à 015 Chaque critère, leur combinaison, les bornes incluses ou exclues, la conversion XOF vers EUR, l’absence de données
apps/api/test/acteurs.test.ts Doublon et fusion avec le rôle de l’API, éligibilité d’un groupement
packages/schemas/src/acteurs.test.ts Forme des fiches

Routes REST des acteurs (écrans B3) ; création du fournisseur avec son certificat (A6) ; surfaces des producteurs (A5) ; stockage des seuils d’éligibilité (EC-069) ; règles PowerSync des nouvelles tables (A9).