Catalogue des types de règles

Les seize types de règles paramétrables : à quoi chacun sert, ses paramètres, le refus vu par l’utilisateur et comment le simuler avant de l’activer.

Un type de règle reste du code Go compilé et testé : le consultant choisit un type, paramètre des seuils et une portée, jamais de logique métier écrite en dur. Les seize fiches ci-dessous suivent toutes le même plan : à quoi ça sert, tables et moment, portées possibles, paramètres, ce que voit l’utilisateur en cas de refus, comment simuler, et la référence normative quand elle existe.

Tolérance de sur-réception sur_reception

Limite l’écart entre la quantité commandée et la quantité reçue à la réception, en pourcentage et/ou en quantité absolue.

Typereception_items
PortéeLocataire, fournisseur, article
MomentÀ la saisie
Sans paramétrageAucune limite ne s’applique

Paramètres

ParamètreTypeRequis / défautExemple
pct_maxNombreOptionnel5
abs_maxNombreOptionnel10
illimiteeBooléenOptionnelfalse

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "sur_reception",
  "params": { "commande": "…", "recu": "…", "maximum": "…" },
  "message": "réception au-delà de la tolérance : commandé 100, reçu 120, maximum autorisé 105. Ajustez la quantité reçue ou faites relever la tolérance de sur-réception."
}

HTTP 400 · sur_reception

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "sur_reception",
  "scope_type": "tenant",
  "params": { "pct_max": 5, "illimitee": false },
  "jours": 90
}

Référence normative

Limite de crédit client limite_credit_client

Refuse une commande client ou une facture qui passe au ferme si elle fait franchir au client sa limite de crédit.

Typesales_orders, invoices
PortéeLocataire, client
MomentAu ferme
Sans paramétrageAucune vérification, même si une limite de crédit est renseignée

Paramètres

ParamètreTypeRequis / défautExemple
tolerance_pctNombreOptionnel10
inclure_commandesBooléenOptionneltrue
modeTexteOptionnelbloquer | avertiravertir

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "limite_credit_depassee",
  "params": { "client": "…", "encours": "…", "montant": "…", "limite": "…" },
  "message": "plafond de crédit du client dépassé : encours 12 000 + document 5 000 > limite 15 000. Faites relever la limite, encaissez des factures ouvertes ou réduisez le document."
}

HTTP 409 · limite_credit_depassee

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "limite_credit_client",
  "scope_type": "tenant",
  "params": { "tolerance_pct": 10, "inclure_commandes": true, "mode": "avertir" },
  "jours": 90
}

Référence normative

Champ requis au statut champ_requis_statut

Exige un ou plusieurs champs renseignés avant qu’un document passe à un statut donné, ou à n’importe quel statut ferme.

Typechoisie par le consultant : n’importe quelle table exposée par le CRUD générique (paramètre table)
PortéeLocataire
MomentAu ferme
Sans paramétrageAucun champ requis

Paramètres

ParamètreTypeRequis / défautExemple
tableTexteRequissales_orders
statutTexteOptionnelvide = n’importe quel statut fermeconfirmed
champsListe de textesRequisdelivery_date

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "champ_requis_statut",
  "params": { "table": "…", "statut": "…", "champs": "…" },
  "message": "le document ne peut pas passer au statut confirmed : renseignez d’abord delivery_date."
}

HTTP 400 · champ_requis_statut

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "champ_requis_statut",
  "scope_type": "tenant",
  "params": { "table": "sales_orders", "statut": "", "champs": ["delivery_date"] },
  "jours": 90
}

Référence normative

Période close periode_close

Refuse tout document daté dans une période comptable déjà clôturée, ou en cours de clôture sur demande.

Typeinvoices, supplier_invoices, credit_notes, payments, accounting_entries (périmètre par défaut, paramètre tables pour le restreindre)
PortéeLocataire
MomentAu ferme
Sans paramétrageAucune période contrôlée

Paramètres

ParamètreTypeRequis / défautExemple
tablesListe de textesOptionnelinvoices, payments
bloquer_closingBooléenOptionnelfalse

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "periode_close",
  "params": { "periode": "…", "table": "…" },
  "message": "la période comptable 2026-08 est clôturée : datez le document dans une période ouverte ou faites rouvrir la période."
}

HTTP 409 · periode_close

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "periode_close",
  "scope_type": "tenant",
  "params": {},
  "jours": 90
}

Référence normative

Pratique comptable standard : fenêtre de dates de comptabilisation autorisées.

Approbation par montant approbation_montant

Refuse le passage au ferme d’un achat ou d’un devis dont le montant dépasse un seuil sans approbation d’un niveau suffisant.

Typepurchase_orders, purchase_requests, quotes (choisie par le paramètre table)
PortéeLocataire, fournisseur
MomentAu ferme
Sans paramétrageLa grille historique des DA s’applique (5 000 → achat, 50 000 → direction achat)

Paramètres

ParamètreTypeRequis / défautExemple
tableTexteRequispurchase_orders
paliersListe de textesRequisformat seuil:rôle5000:achat, 50000:directeur_achat
modeTexteOptionnelbloquer | avertiravertir

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "approbation_requise",
  "params": { "table": "…", "montant": "…", "seuil": "…", "niveau": "…", "role": "…" },
  "message": "ce document de 62 000 dépasse le seuil de 50 000 : il doit être approuvé (niveau 3 — Directeur achats) avant de passer au ferme. Soumettez-le à l’approbation avant de le repasser au ferme."
}

HTTP 409 · approbation_requise

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "approbation_montant",
  "scope_type": "tenant",
  "params": { "table": "purchase_orders", "paliers": ["10000:2", "100000:3"], "mode": "avertir" },
  "jours": 90
}

Référence normative

Pratique achats standard : stratégie de libération des demandes par seuils de montant.

Workflow requis workflow_requis

Refuse le passage au ferme d’un document tant que son workflow d’approbation actif n’a pas d’instance approuvée.

Typequotes, purchase_requests, purchase_order_amendments, consumption_vouchers, production_release_pvs, supplier_invoices, manufacturing_orders, purchase_orders, sales_orders (paramètre tables pour restreindre)
PortéeLocataire
MomentAu ferme
Sans paramétrageAucune approbation exigée

Paramètres

ParamètreTypeRequis / défautExemple
tablesListe de textesOptionnelpurchase_orders
modeTexteOptionnelbloquer | avertirbloquer

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "workflow_requis",
  "params": { "table": "…", "workflow": "…" },
  "message": "ce document est soumis au workflow « Validation achats » : soumettez-le à l’approbation et attendez la validation avant de le passer au ferme."
}

HTTP 409 · workflow_requis

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "workflow_requis",
  "scope_type": "tenant",
  "params": {},
  "jours": 90
}

Référence normative

Pratique de gouvernance standard : un document sous circuit d’approbation actif ne se libère pas hors circuit.

Fournisseur non évalué fournisseur_non_evalue

Refuse le passage au ferme d’une commande d’achat pour un fournisseur sans évaluation valide.

Typepurchase_orders
PortéeLocataire, fournisseur
MomentAu ferme
Sans paramétrageAucun fournisseur n’est contrôlé

Paramètres

ParamètreTypeRequis / défautExemple
age_max_joursNombreOptionneldéfaut 365365
score_minNombreOptionnel70
accepter_auditBooléenOptionneltrue

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "fournisseur_non_evalue",
  "params": { "fournisseur": "…", "derniere_evaluation": "…", "age_max": "…" },
  "message": "fournisseur ACME sans évaluation valide (dernière évaluation : jamais, validité 365 jours) : évaluez le fournisseur ou ajustez la portée avant de passer la commande au ferme."
}

HTTP 409 · fournisseur_non_evalue

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "fournisseur_non_evalue",
  "scope_type": "tenant",
  "params": { "age_max_jours": 365, "mode": "avertir" },
  "jours": 90
}

Référence normative

ISO 9001 § 8.4.1 — maîtrise des processus, produits et services fournis par des prestataires externes.

NC sans action corrective nc_sans_action

Refuse la fermeture d’une non-conformité sans action corrective rattachée.

Typenon_conformities
PortéeLocataire
MomentAu ferme
Sans paramétrageAucune fermeture n’est contrôlée

Paramètres

ParamètreTypeRequis / défautExemple
severitesListe de textesOptionneldéfaut : major, criticalmajor, critical
exiger_verificationBooléenOptionneltrue

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "nc_sans_action",
  "params": { "nc": "…", "severite": "…" },
  "message": "la non-conformité NC-2026-014 (sévérité major) ne peut pas être fermée sans action corrective : ajoutez une action corrective rattachée avant de clôturer."
}

HTTP 409 · nc_sans_action

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "nc_sans_action",
  "scope_type": "tenant",
  "params": { "severites": ["major", "critical"], "mode": "avertir" },
  "jours": 90
}

Référence normative

ISO 9001 § 10.2 — non-conformité et action corrective.

Traçabilité requise tracabilite_requise

Refuse la réception, la sortie ou la clôture de fabrication d’un article suivi par lot sans numéro de lot renseigné.

Typereception_items, consumption_voucher_items, delivery_note_items (à la saisie) ; manufacturing_orders (clôture d’OF, via une garde dédiée)
PortéeLocataire, article
MomentÀ la saisieLa clôture d’un ordre de fabrication est contrôlée à part, par une garde dédiée appelée à la clôture — pas par le registre générique de règles.
Sans paramétrageAucun article n’est contrôlé

Paramètres

ParamètreTypeRequis / défautExemple
momentsListe de textesOptionnelreception, sortie, fabricationreception
tous_articlesBooléenOptionnelfalse
serie_aussiBooléenOptionnelfalse

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "tracabilite_requise",
  "params": { "article": "…", "document": "…", "moment": "…" },
  "message": "l’article REF-2210 est suivi par lot : renseignez le numéro de lot avant d’enregistrer ce réception."
}

HTTP 400 · tracabilite_requise

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "tracabilite_requise",
  "scope_type": "tenant",
  "params": { "moments": ["reception"], "mode": "avertir" },
  "jours": 90
}

Référence normative

Traçabilité lot/série de bout en bout ; IATF 16949 § 8.5.2 ; ISO 13485 § 7.5.9.

Certificat expiré certificat_expire

Refuse la commande d’achat au ferme ou la réception pour un fournisseur, et un article si demandé, sans certificat matière valide.

Typepurchase_orders (au ferme), receptions (à la saisie)
PortéeLocataire, fournisseur, article
MomentAu fermeLe catalogue déclare ce type « au ferme » ; la table receptions mord en réalité à la saisie, la table purchase_orders au ferme.
Sans paramétrageAucun certificat n’est contrôlé

Paramètres

ParamètreTypeRequis / défautExemple
normesListe de textesOptionnelOEKO-TEX, BSCI, GOTS
par_articleBooléenOptionneltrue
tolerance_joursNombreOptionneldéfaut 00

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "certificat_expire",
  "params": { "fournisseur": "…", "norme": "…", "expire_le": "…" },
  "message": "fournisseur ACME : certificat OEKO-TEX expiré ou absent (aucun certificat) : renouvelez le certificat avant de poursuivre."
}

HTTP 409 · certificat_expire

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "certificat_expire",
  "scope_type": "tenant",
  "params": { "normes": ["OEKO-TEX", "BSCI", "GOTS"], "mode": "avertir" },
  "jours": 90
}

Référence normative

Oeko-Tex / BSCI / GOTS ; ISO 13485 § 7.4 — informations documentées d’origine externe.

Équipement non étalonné equipement_non_etalonne

Refuse un contrôle qualité ou une mesure SPC saisi avec un instrument hors étalonnage.

Typequality_controls, spc_measurements
PortéeLocataire
MomentÀ la saisie
Sans paramétrageAucun instrument n’est contrôlé

Paramètres

ParamètreTypeRequis / défautExemple
tablesListe de textesOptionnelquality_controls
tolerance_joursNombreOptionneldéfaut 00

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "equipement_non_etalonne",
  "params": { "instrument": "…", "echeance": "…" },
  "message": "instrument PIED-003 hors étalonnage (échéance : 2026-05-01) : ré-étalonnez l’instrument avant de l’utiliser pour ce contrôle."
}

HTTP 409 · equipement_non_etalonne

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "equipement_non_etalonne",
  "scope_type": "tenant",
  "params": { "mode": "bloquer" },
  "jours": 90
}

Référence normative

ISO 9001 § 7.1.5 ; IATF 16949 § 7.1.5.2 — ressources de surveillance et de mesure.

Document requis avant statut document_requis_avant_statut

Refuse le passage d’un OF, d’une commande d’achat ou d’une commande client à un statut cible tant que le document requis n’existe pas pour son article.

Typemanufacturing_orders, purchase_orders, sales_orders (choisie par le paramètre table)
PortéeLocataire
MomentAu ferme
Sans paramétrageRien n’est contrôlé tant qu’aucune règle complète n’est posée — table, statut et documents sont tous requis

Paramètres

ParamètreTypeRequis / défautExemple
tableTexteRequismanufacturing_orders
statutTexteRequisin_progress
documentsListe de textesRequisfmea_studies, quality_control_plans, document_controlfmea_studies
statut_documentTexteOptionneldéfaut selon le type de documentcompleted

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "document_requis",
  "params": { "document": "…", "article": "…", "statut": "…" },
  "message": "le document ne peut pas passer au statut in_progress : document(s) requis manquant(s) pour l’article ART-4471 (fmea_studies)."
}

HTTP 409 · document_requis

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "document_requis_avant_statut",
  "scope_type": "tenant",
  "params": {
    "table": "manufacturing_orders",
    "statut": "in_progress",
    "documents": ["fmea_studies"],
    "mode": "bloquer"
  },
  "jours": 90
}

Référence normative

IATF 16949 — PPAP / AMDEC (FMEA) ; ISO 9001 § 8.5.1 — maîtrise de la production et de la prestation de service.

Dimension requise dimension_requise

Refuse le passage d’un en-tête à un statut (ou n’importe quel statut ferme), ou la saisie d’une ligne, tant qu’une ou plusieurs dimensions analytiques choisies restent vides après héritage (fiche → en-tête → ligne).

Typetable choisie par le consultant, restreinte aux 28 tables porteuses de dimensions : les 15 en-têtes (quotes, invoices, purchase_orders, sales_orders, delivery_notes, credit_notes, consumption_vouchers, purchase_requests, receptions, supplier_invoices, subcontracting_orders, supplier_rfqs, manufacturing_orders, technical_studies, stock_movements) et leurs 13 tables de lignes
PortéeLocataire, client, fournisseur
MomentAu fermeSur un en-tête : au ferme (paramètre statut, vide = n’importe quel statut ferme). Sur une ligne : à chaque saisie — une ligne n’a pas de statut propre.
Sans paramétrageAucune dimension n’est exigée

Paramètres

ParamètreTypeRequis / défautExemple
tableTexteRequisinvoices
statutTexteOptionnelvide = n’importe quel statut ferme (ignoré sur une ligne)confirmed
dimensionsListe de textesRequiscodes dim_dimensions.codeAFFAIRE

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "dimension_requise",
  "params": { "table": "…", "dimensions": "…" },
  "message": "renseignez la dimension AFFAIRE avant de passer au statut confirmed."
}

HTTP 400 · dimension_requise

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "dimension_requise",
  "scope_type": "tenant",
  "params": { "table": "invoices", "statut": "", "dimensions": ["AFFAIRE"], "mode": "avertir" },
  "jours": 90
}

Référence normative

Comptabilité analytique standard : dimensions obligatoires par compte/document.

Combinaison de dimensions interdite combinaison_interdite

Refuse, dès la saisie, tout couple de valeurs de dimensions présent dans les combinaisons interdites configurées (Réglages → Dimensions). Ce type ne lit aucun paramètre propre dans rule_parameters — seule son activation compte ; la simulation, elle, demande une table cible ponctuelle (non stockée) pour savoir où rejouer le contrôle.

Typeles mêmes 28 tables porteuses de dimensions que dimension_requise — ce type n’a aucun paramètre table propre
PortéeLocataire
MomentÀ la saisie
Sans paramétrageAucune combinaison n’est bloquée

Paramètres

ParamètreTypeRequis / défautExemple

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "combinaison_interdite",
  "params": { "dimension_a": "…", "valeur_a": "…", "dimension_b": "…", "valeur_b": "…" },
  "message": "combinaison de dimensions interdite : Affaire = Import ne peut pas être associé à Compte = 5800."
}

HTTP 400 · combinaison_interdite

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "combinaison_interdite",
  "scope_type": "tenant",
  "params": { "table": "invoices" },
  "jours": 90
}

Référence normative

Combinaisons de dimensions interdites (table dim_forbidden).

Habilitation requise habilitation_requise

Refuse l’affectation d’un opérateur à une opération de production (ou son démarrage) si l’opérateur ne possède pas, au niveau minimal exigé, une compétence requise par le poste (workstation_competencies) — ou sans formation/certification valide si exigée.

Typemanufacturing_operations (CRUD générique) ; mord aussi sur la route dédiée PUT /manufacturing-operations/{id}/operator
PortéeLocataire
MomentÀ la saisieMord quand operator_id est posé (affectation), ou quand le statut passe à in_progress avec un opérateur déjà affecté.
Sans paramétrageAucun opérateur n’est contrôlé

Paramètres

ParamètreTypeRequis / défautExemple
niveau_min_defautNombreOptionneldéfaut 2 ; le seuil posé sur la fiche du poste prime quand il existe2
exiger_formation_valideBooléenOptionneltrue

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "habilitation_requise",
  "params": { "operateur": "…", "poste": "…", "competence": "…" },
  "message": "opérateur Karim B. non habilité pour le poste Sertissage 3 : compétence requise « Sertissage niveau 3 » absente ou insuffisante. Complétez l’habilitation (niveau, formation) avant d’affecter cet opérateur."
}

HTTP 409 · habilitation_requise

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "habilitation_requise",
  "scope_type": "tenant",
  "params": { "niveau_min_defaut": 2, "exiger_formation_valide": true, "mode": "avertir" },
  "jours": 90
}

Référence normative

ISO 9001 § 7.2 ; IATF 16949 § 7.2.1 — compétence, sensibilisation et formation.

Séparation des tâches separation_taches

Empêche la personne qui a réalisé une action A (créer un fournisseur/client, créer un document, modifier un RIB…) de réaliser ensuite une action B (approuver, valider un paiement, passer au ferme, approuver un workflow…) sur ce même document — contrôle quatre yeux. Une seule ligne active par locataire : la matrice de conflits est portée en liste.

Typetables de documents fermés (même périmètre que workflow_requis) plus payments — quatre points de morsure : le registre CRUD générique, la garde du passage au ferme, l’approbation de workflow (internal/workflow) et la validation de paiement (internal/finance)
PortéeLocataire
MomentAu fermeMord aussi à l’approbation (approved_by posé) et à la validation de paiement — pas seulement au passage au ferme.
Sans paramétrageAucun conflit n’est contrôlé

Paramètres

ParamètreTypeRequis / défautExemple
conflitsListe de textesRequisformat action_a:action_bcreer_fournisseur:valider_paiement, creer_da:approuver
tablesListe de textesOptionneldéfaut = toutes les tables éligiblespurchase_orders, payments
modeTexteOptionnelbloquer | avertiravertir

Ce que voit l’utilisateur

Exemple de refus
{
  "code": "separation_taches",
  "params": { "action_a": "…", "action_b": "…", "utilisateur": "…" },
  "message": "séparation des tâches : la personne qui a « creer_fournisseur » ne peut pas « valider_paiement » sur ce document — contrôle quatre yeux, demandez à un autre utilisateur."
}

HTTP 409 · separation_taches

Simuler

POST /api/v1/rules/simulate
{
  "rule_type": "separation_taches",
  "scope_type": "tenant",
  "params": { "conflits": ["creer_fournisseur:valider_paiement", "creer_da:approuver"], "mode": "avertir" },
  "jours": 90
}

Référence normative

Matrice de séparation des tâches (contrôle quatre yeux) — pratique d’audit interne standard.

Retour à Règles métier et contrôle
Voir aussi : Packs par métier · Mise en service · Exemples par secteur · Pilotage et signaux de risque · Copilote · Profils de statuts