فهرس أنواع القواعد

الأنواع الستة عشر القابلة للإعداد: فائدة كل نوع، معطياته، الرفض الذي يراه المستخدم، وكيفية محاكاته قبل تفعيله.

يبقى نوع القاعدة شفرة Go مُصرَّفة ومُختبَرة: يختار الاستشاري نوعا، يضبط حدودا ونطاقا، ولا يكتب منطق عمل أبدا. تتبع البطاقات الستة عشرة أدناه جميعها نفس الخطة: الفائدة، الجداول والتوقيت، النطاقات الممكنة، المعطيات، ما يراه المستخدم عند الرفض، كيفية المحاكاة، والمرجع المعياري عند وجوده.

تسامح فائض الاستلام 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.

النوعreception_items
النطاقالمستأجر، المورد، الصنف
التوقيتعند الإدخال
بدون إعدادلا يُطبَّق أي حد

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
pct_maxرقماختياري5
abs_maxرقماختياري10
illimiteeمنطقي (نعم/لا)اختياريfalse

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

سقف ائتمان العميل 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.

النوعsales_orders, invoices
النطاقالمستأجر، العميل
التوقيتعند الإغلاق
بدون إعدادلا تحقق، حتى لو كان سقف الائتمان محددا

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tolerance_pctرقماختياري10
inclure_commandesمنطقي (نعم/لا)اختياريtrue
modeنصاختياريbloquer | avertiravertir

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

حقل مطلوب عند الحالة champ_requis_statut

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

النوعchoisie par le consultant : n’importe quelle table exposée par le CRUD générique (paramètre table)
النطاقالمستأجر
التوقيتعند الإغلاق
بدون إعدادلا حقل مطلوب

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tableنصمطلوبsales_orders
statutنصاختياريvide = n’importe quel statut fermeconfirmed
champsقائمة نصوصمطلوبdelivery_date

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

فترة مغلقة periode_close

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

النوعinvoices, supplier_invoices, credit_notes, payments, accounting_entries (périmètre par défaut, paramètre tables pour le restreindre)
النطاقالمستأجر
التوقيتعند الإغلاق
بدون إعدادلا فترة مراقبة

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tablesقائمة نصوصاختياريinvoices, payments
bloquer_closingمنطقي (نعم/لا)اختياريfalse

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

المصادقة حسب المبلغ 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.

النوعpurchase_orders, purchase_requests, quotes (choisie par le paramètre table)
النطاقالمستأجر، المورد
التوقيتعند الإغلاق
بدون إعداديُطبَّق الجدول التاريخي لطلبات الشراء (5000 ← المشتريات، 50000 ← إدارة المشتريات)

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tableنصمطلوبpurchase_orders
paliersقائمة نصوصمطلوبformat seuil:rôle5000:achat, 50000:directeur_achat
modeنصاختياريbloquer | avertiravertir

ما يراه المستخدم

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

المحاكاة

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
}

المرجع المعياري

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

مسار موافقة مطلوب workflow_requis

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

النوعquotes, purchase_requests, purchase_order_amendments, consumption_vouchers, production_release_pvs, supplier_invoices, manufacturing_orders, purchase_orders, sales_orders (paramètre tables pour restreindre)
النطاقالمستأجر
التوقيتعند الإغلاق
بدون إعدادلا مصادقة مطلوبة

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tablesقائمة نصوصاختياريpurchase_orders
modeنصاختياريbloquer | avertirbloquer

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

مورّد غير مقيَّم fournisseur_non_evalue

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

النوعpurchase_orders
النطاقالمستأجر، المورد
التوقيتعند الإغلاق
بدون إعدادAucun fournisseur n’est contrôlé

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
age_max_joursرقماختياريdéfaut 365365
score_minرقماختياري70
accepter_auditمنطقي (نعم/لا)اختياريtrue

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

عدم مطابقة بدون إجراء تصحيحي nc_sans_action

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

النوعnon_conformities
النطاقالمستأجر
التوقيتعند الإغلاق
بدون إعدادAucune fermeture n’est contrôlée

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
severitesقائمة نصوصاختياريdéfaut : major, criticalmajor, critical
exiger_verificationمنطقي (نعم/لا)اختياريtrue

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

التتبع مطلوب 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é.

النوعreception_items, consumption_voucher_items, delivery_note_items (à la saisie) ; manufacturing_orders (clôture d’OF, via une garde dédiée)
النطاقالمستأجر، الصنف
التوقيتعند الإدخالLa 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.
بدون إعدادAucun article n’est contrôlé

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
momentsقائمة نصوصاختياريreception, sortie, fabricationreception
tous_articlesمنطقي (نعم/لا)اختياريfalse
serie_aussiمنطقي (نعم/لا)اختياريfalse

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

شهادة منتهية الصلاحية 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.

النوعpurchase_orders (au ferme), receptions (à la saisie)
النطاقالمستأجر، المورد، الصنف
التوقيتعند الإغلاقLe catalogue déclare ce type « au ferme » ; la table receptions mord en réalité à la saisie, la table purchase_orders au ferme.
بدون إعدادAucun certificat n’est contrôlé

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
normesقائمة نصوصاختياريOEKO-TEX, BSCI, GOTS
par_articleمنطقي (نعم/لا)اختياريtrue
tolerance_joursرقماختياريdéfaut 00

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

معدّة غير معايَرة equipement_non_etalonne

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

النوعquality_controls, spc_measurements
النطاقالمستأجر
التوقيتعند الإدخال
بدون إعدادAucun instrument n’est contrôlé

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tablesقائمة نصوصاختياريquality_controls
tolerance_joursرقماختياريdéfaut 00

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

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

مستند مطلوب قبل الحالة 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.

النوعmanufacturing_orders, purchase_orders, sales_orders (choisie par le paramètre table)
النطاقالمستأجر
التوقيتعند الإغلاق
بدون إعدادRien n’est contrôlé tant qu’aucune règle complète n’est posée — table, statut et documents sont tous requis

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tableنصمطلوبmanufacturing_orders
statutنصمطلوبin_progress
documentsقائمة نصوصمطلوبfmea_studies, quality_control_plans, document_controlfmea_studies
statut_documentنصاختياريdéfaut selon le type de documentcompleted

ما يراه المستخدم

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

المحاكاة

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
}

المرجع المعياري

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

محور تحليلي مطلوب 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).

النوعtable 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
النطاقالمستأجر، العميل، المورّد
التوقيتعند الإغلاقSur 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.
بدون إعدادAucune dimension n’est exigée

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
tableنصمطلوبinvoices
statutنصاختياريvide = n’importe quel statut ferme (ignoré sur une ligne)confirmed
dimensionsقائمة نصوصمطلوبcodes dim_dimensions.codeAFFAIRE

ما يراه المستخدم

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

HTTP 400 · dimension_requise

المحاكاة

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

المرجع المعياري

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

مجموعة محاور ممنوعة 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.

النوعles mêmes 28 tables porteuses de dimensions que dimension_requise — ce type n’a aucun paramètre table propre
النطاقالمستأجر
التوقيتعند الإدخال
بدون إعدادAucune combinaison n’est bloquée

المعطيات

المعطىالنوعمطلوب / افتراضيمثال

ما يراه المستخدم

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

المحاكاة

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

المرجع المعياري

Combinaisons de dimensions interdites (table dim_forbidden).

تأهيل مطلوب 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.

النوعmanufacturing_operations (CRUD générique) ; mord aussi sur la route dédiée PUT /manufacturing-operations/{id}/operator
النطاقالمستأجر
التوقيتعند الإدخالMord quand operator_id est posé (affectation), ou quand le statut passe à in_progress avec un opérateur déjà affecté.
بدون إعدادAucun opérateur n’est contrôlé

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
niveau_min_defautرقماختياريdéfaut 2 ; le seuil posé sur la fiche du poste prime quand il existe2
exiger_formation_valideمنطقي (نعم/لا)اختياريtrue

ما يراه المستخدم

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

المحاكاة

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
}

المرجع المعياري

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

فصل المهام 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.

النوعtables 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)
النطاقالمستأجر
التوقيتعند الإغلاقMord aussi à l’approbation (approved_by posé) et à la validation de paiement — pas seulement au passage au ferme.
بدون إعدادAucun conflit n’est contrôlé

المعطيات

المعطىالنوعمطلوب / افتراضيمثال
conflitsقائمة نصوصمطلوبformat action_a:action_bcreer_fournisseur:valider_paiement, creer_da:approuver
tablesقائمة نصوصاختياريdéfaut = toutes les tables éligiblespurchase_orders, payments
modeنصاختياريbloquer | avertiravertir

ما يراه المستخدم

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

المحاكاة

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
}

المرجع المعياري

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

العودة إلى قواعد العمل والمراقبة
انظر أيضا : حزم حسب القطاع · التشغيل · أمثلة حسب القطاع · القيادة وإشارات الخطر · Copilote · Profils de statuts