Aller au contenu
Devenir partenaire
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

Déclarer, alimenter, appliquer, interroger

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.

  1. 01Déclarer

    Classes, attributs typés et contraints, relations.

  2. 02Alimenter

    Extraites d'un texte ou d'une image, créées par le programme, ou produites par une optimisation.

  3. 03Appliquer les règles

    Condition, action, priorité : l'inférence les applique jusqu'à ce que plus rien ne change.

  4. 04Interroger et contrôler

    Par filtres, ou en langage naturel ; cohérence vérifiée à tout moment.

Exemples en entreprise

Des règles lisibles par le métier

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é.

Résultat obtenu sur le serveur : le virement de 15 500 € vers les îles Caïmans est bloqué, celui de 820 € reste en attente.

Banque_SecuriteVVL
$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"]]

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.

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.

MarieACCEPTE9 ans · score 82
PaulA_ETUDIERsenior · score 55
LéaA_ETUDIER3 ans · score 90
RH_TriVVL
$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"]]

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.

Résultat obtenu sur le serveur : deux violations bloquantes, le SIRET manquant et une note qualité de 25 pour un maximum de 20.

FournisseursVVL
$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]
Du texte et de l'image aux données

L'extraction, guidée par le schéma

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.

« anthracite »Gris 7016« grand format »L
ontology:fromTextVVL
$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:fromImageVVL
[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.

ontology:loadGherkinVVL
$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]]
Garanties

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.
Passer à la pratique

Appliquer ces travaux à vos processus ?

Ces outils sont des instructions du langage VVL : nos partenaires les mettent en œuvre chez leurs clients, sur les plateformes ProSuite.