Recherche · Ontologies & règles métier
Les règles de l'entreprise, écrites une fois et appliquées exactement
Une ontologie décrit ce que l'entreprise manipule : ses objets, leurs attributs, leurs liens, et les règles qui s'y appliquent. Dans VAILS, elle n'est pas un document de conception : elle s'exécute. Les documents y sont transcrits, les règles métier s'y appliquent, et l'on peut l'interroger ou contrôler sa cohérence à tout moment.
Comment ça marche
Une ontologie se déclare avec des classes, des attributs typés et contraints (obligatoire, bornes, liste fermée de valeurs, héritage) et des relations. Elle est compilée en règles logiques, dans une base propre à l'ontologie et à la session.
Les données y arrivent de trois façons : extraites d'un texte ou d'une image par le modèle de langage, guidé par le schéma ; créées directement par le programme ; ou produites par un calcul d'optimisation. Les règles métier s'écrivent avec une condition et une action, et une priorité ; l'inférence les applique jusqu'à ce que plus rien ne change. On interroge ensuite l'ontologie par filtres, ou en langage naturel.
- Déclarer
- Alimenter
- Appliquer les règles
- Interroger et contrôler
Exemples en entreprise
Banque : bloquer les virements à risque
Trois règles, par ordre de priorité : un montant élevé ou un pays sensible rend le virement à risque, et un virement à risque est bloqué. Les règles sont lisibles par le service conformité.
$Banque = [ontology:define "Banque_Securite"
[ontology:class Virement
[attributes
[montant Float [required true]]
[pays_destination String [default "France"]]
[niveau_risque String [default "FAIBLE"]]
[statut String [default "EN_ATTENTE"]]]]]
[ontology:rule "MontantEleve" $Banque [target "Virement"] [priority 100]
[when ($this.montant > 10000)]
[then [ontology:set $this "niveau_risque" "ELEVE"]]]
[ontology:rule "PaysSensible" $Banque [target "Virement"] [priority 90]
[when ($this.pays_destination == "Iles Caimans")]
[then [ontology:set $this "niveau_risque" "ELEVE"]]]
[ontology:rule "Blocage" $Banque [target "Virement"] [priority 10]
[when ($this.niveau_risque == "ELEVE")]
[then [ontology:set $this "statut" "BLOQUE"]]]
[ontology:commit [new Virement [montant 15500] [pays_destination "Iles Caimans"]]]
[ontology:commit [new Virement [montant 820]]]
[ontology:infer-fixpoint $Banque 10]
[ontology:select $Banque "Virement" [statut "BLOQUE"]]
Résultat obtenu sur le serveur : le virement de 15 500 € vers les îles Caïmans est bloqué, celui de 820 € reste en attente.
Recrutement : une chaîne de règles
Une première règle détermine le niveau à partir de l'expérience ; une seconde décide à partir du niveau et du score. L'inférence enchaîne les deux.
$RH = [ontology:define "RH_Tri"
[ontology:class Candidat
[attributes [nom String [required true]] [experience Integer [min 0]]
[score Integer [min 0] [max 100]]
[niveau String [default "JUNIOR"]] [decision String [default "A_ETUDIER"]]]]]
[ontology:rule "NiveauSenior" $RH [target "Candidat"] [priority 100]
[when ($this.experience >= 7)]
[then [ontology:set $this "niveau" "SENIOR"]]]
[ontology:rule "Accepte" $RH [target "Candidat"] [priority 10]
[when (($this.niveau == "SENIOR") && ($this.score >= 70))]
[then [ontology:set $this "decision" "ACCEPTE"]]]
[ontology:commit [new Candidat [nom "Marie"] [experience 9] [score 82]]]
[ontology:commit [new Candidat [nom "Paul"] [experience 9] [score 55]]]
[ontology:commit [new Candidat [nom "Lea"] [experience 3] [score 90]]]
[ontology:infer-fixpoint $RH 10]
[ontology:select $RH "Candidat" [decision "ACCEPTE"]]
Résultat obtenu sur le serveur : seule Marie est acceptée ; Paul est senior mais son score est insuffisant, Léa n'est pas encore senior.
Achats : contrôler la qualité des données fournisseurs
Avant de payer ou de référencer un fournisseur, l'ontologie vérifie que les champs obligatoires sont présents et que les valeurs respectent leurs bornes. Ce contrôle est purement symbolique.
$Four = [ontology:define "Fournisseurs"
[ontology:class Fournisseur
[attributes [raison_sociale String [required true]] [siret String [required true]]
[note_qualite Integer [min 0] [max 20]]]]]
[ontology:commit [new Fournisseur [raison_sociale "Alpha SARL"] [note_qualite 25]]]
[ontology:consistent $Four]
Résultat obtenu sur le serveur : deux violations bloquantes, le SIRET manquant et une note qualité de 25 pour un maximum de 20.
Commandes : ramener une valeur libre au catalogue
La couleur et la taille d'une menuiserie n'acceptent que les valeurs du catalogue. Quand le client écrit anthracite ou grand format, l'extraction ramène la valeur au bon libellé selon le sens.
$menuiserie = [ontology:define menuiserie
[ontology:class Fenetre [attributes
[reference String]
[couleur String [in_values "Blanc 9010" "Gris 7016" "Brun 8019" "Noir 9005"]]
[taille String [in_values "S" "M" "L" "XL"]]]]]
$f = [ontology:fromText $menuiserie "Fenetre" "Commande REF-001 : fenetre coulissante, profil couleur anthracite, grand format (large)."]
[print $f.couleur] # Gris 7016
[print $f.taille] # L
Devis : extraire un document scanné
Un devis en PDF est transformé en images, puis transcrit dans le schéma, y compris son tableau de lignes. Les montants arrivent typés, prêts à être contrôlés par des règles.
[ontology:class Devis
[attributes
[numero String [key true]]
[date Date]
[client Client]
[lignes List [of LigneDevis]] # déclenche l'extraction du tableau
[total_ht Currency]
[taux_tva Number]
[total_ttc Currency]]]
$images = [pdfToImages $fichier_pdf 2.0]
$devis = [ontology:fromImage $DevisSystem "Devis" $images]
Règles écrites par les équipes métier
Les règles peuvent aussi être rédigées en Gherkin, le format des scénarios de test, puis transformées automatiquement en ontologie exécutable.
$source = "
Feature: SecurityRules
Background: Schema
Given I define an ontology named 'BankSystem'
And I define a class 'Transaction' with attributes:
| Name | Type | Default |
| amount | Integer | 0 |
| status | String | 'Pending' |
@priority: 100
Scenario: High Value Rule
Given a 'Transaction' context
When 'amount' is greater than 1000
Then set 'status' to 'HighRisk'
"
$Ontologie = [evaluate [ontology:loadGherkin $source]]
Ce qu'elle garantit, et ses limites
- Les règles s'appliquent de façon exacte et reproductible, dans l'ordre de leurs priorités, jusqu'à stabilité.
- La cohérence se contrôle sans modèle de langage : champs obligatoires, bornes, listes de valeurs, cardinalités.
- Chaque session a ses propres ontologies ; les conserver au-delà de la session se fait explicitement, par une sauvegarde dans l'espace de travail.
- L'extraction depuis un texte ou une image passe par le modèle de langage ; les contrats ontologiques permettent de la valider et de la relancer en cas d'écart.
Appliquer ces travaux à vos processus ?
Le diagnostic part de votre fonctionnement réel et identifie les décisions qui peuvent être confiées à l'IA.