Afin de faciliter la prise en main, différents projets de démonstration sont fournis avec MRules, packagés sous la forme de projets Maven autonomes, contenant des tests JUnit. Ils peuvent être obtenus via la page de téléchagements.
Un fichier de licence est nécessaire pour pouvoir exécuter les démonstrations (une licence d’essai gratuite peut être demandée sur la page de contact).
Un récapitulatif puis une description rapide des différentes démos est faite ci-dessous.
Récapitulatif
Voici la liste des projets de démos proposés, chacun étant détaillés par la suite.
- Exemple de Calcul de Prix d’Assurance Santé : Calcul le prix de l’assurance en fonction de données client.
- Exemple site E-Commerce : calcul d’avantage client en fonction de l’historique de commandes.
- Exemple de Calcul de Frais de Transports : Détermination du mode de calcul du remboursement de frais de transports d’employés en fonction de différents paramètres (lieu, mode de transport, distance, etc …)
- Exemple de Salle de classe : Calcul des résultats d’étudiants (calculs de moyennes, acceptation ou non, mention, etc …)
- Exemple de Calcul de TVA : Trouver la TVA à appliquer sur un produit en fonction de différents critères.
- Exemple de Résolution de Sudoku : Solver Sudoku incluant une comparaison avec Drools.
- « Drools Fight »: Démo utilisée pour notre benchmark comparatif entre MRules et Drools.
- Spring Integration: Démo illustrant l’intégration de MRules dans un projet Spring.
- Exemples Fonctionnalités Avancés : Quelques exemples de fonctionnalités avancés, sur des cas non concrets.
- Modélisation d’une grammaire JSon : Configurer le moteur de grammaire pour lire du contenu JSon.
- Editeur JSon Web : Étendre l’éditeur Web générique pour éditer du contenu JSon avec auto-complétion et validation de la syntaxe.
Moteur de Règles
Les démonstrations ci-dessous concernent différents cas d’utilisation du moteur de règles métiers.
Calcul de prix d’assurance santé
Nous simulons dans cette démo une assurance santé qui va calculer les prix des contrats avec MRules.
La configuration du ruleset est écrite en utilisant notre grammaire fonctionnelle. Plusieurs opérations sont effectuées :
- Premièrement, vérifier que les données sont correctes sinon remonter une erreur.
- Ensuite calculer le prix de base.
- Enfin, calculer une éventuelle majoration et l’appliquer.
- 2 moyen de fournir les paramètres au moteur :
- Une variable globle (variation 1).
- Un champs dans l’objet en entrée (variation 2).
- Comment utiliser MRules avec Spring batch grâce à notre extension Spring (batch test).
- Comment précharger la configuration dans l’éditeur de DSL (batch test).
- Comment utiliser le MRulesBuilder pour recharger automatiquement la configuration en cas de modification (batch test).
- Simuler l’usage de MRules dans Spring batch. Le batch :
- Lit les fichiers d’entrée dans le répertoire « dataser » (reader).
- Les prend en charge via MRules (processor).
- Affiche les résultats en console (writer).
- MRules est managé par Spring et injecté. Si la configuration change, elle est rechargée automatiquement.
- Lance l’éditeur web de DSL, avec la configuration courante directement chargée. Après modification de la configuration et un click sur « Save », il est visible en console qu’elle est directement rechargée au prochain run.
Et exécuter la démo batch test est simple comme deux lignes de commande :
mvn install -Dmrules.licence.file=/path/to/mrules.licence
java -Dmrules.licence.file=/path/to/mrules.licence -jar batch-test/target/batch-test-x.y.z-springboot.jar
E-Commerce
Nous créons ici un site de commerce électronique, vendant un panel de produits à ses clients. MRules est utilisé pour finaliser les commandes en effectuant ces différentes étapes :
- Calculer un rang de client, selon l’historique de commande :
- GOLD si plus de 1500 € dans l’historique.
- SILVER si plus de 1000 € ou au moins une commande de plus de 500 € dans l’historique.
- STANDARD dans les autres cas.
- Calculer la TVA : 5.5% pour les articles alimentaires (FOOD), 20% pour le reste.
- Calculer les différents montants de la commande (HT, TTC).
- Calculer les remises :
- Vérification de la validité de la remise (Si non valide, erreur)
- Appliquer les remises
- Varifier si la remise spéciale est applicable : si au moins 2 conditions remplies parmi [livraison: ECONOMIC | ville: PARIS | niveau: GOLD] : 15 € de remise sont appliqués.
- Calculer le montant final à payer.
- Calculer les remises futures que le clients obtient avec cette commande :
- Montant final > 500 : 10% de remise future
- 5ème commande : 5% de remise future
Le test JUnit a pour rôle de :
- Construire différents types de panier pour tester tous les cas
- Exécuter les opérations ci-dessus en Java
- Exécuter MRules pour les exécuter également et vérifier les résultats
- Comparer les temps d’exécution
- Tester que la fabrique de configuration de MRules écrit et lit la configuration correctement.
Remboursement de transport
Ceci est un cas très simplifié du cas d’une société utilisant MRules pour calculer les remboursements effectués au personnel pour compenser les coûts et temps de transport.
Selon :
- La ville ou travaille l’employé (PARIS, LONDON, …)
- Le mode de transport (BICYCLE, CAR, BUS, …)
- Le temps quotidien passé en transport
Les données suivantes vont être calculées :
- Un paiement doit-il être effectué ?
- Si oui, quel mode de paiement entre compensation et taux fixe ?
- Si taux fixe, quel en est le montant ?
Trois configurations possibles sont fournies, afin de montrer les différences en termes de complexité et de temps d’exécution.
Le test JUnit a pour rôle de :
- Construire différents cas
- Exécuter MRules pour chacun et vérifier les résultats, pour les trois configurations
- Comparer les temps d’exécution
- Tester que la fabrique de configuration de MRules écrit et lit la configuration correctement.
Classroom
MRules est utilisé ici pour calculer les résultats finaux des étudiants d’une classe. Étant données toutes les notes obtenues pour chacun aux tests durant l’année et le coefficients attribué à chaque épreuve, les données suivantes seront calculées :
- Pour les étudiant :
- La moyenne
- L’étudiant est-il admis ? Si oui, avec mention ? Si non, y a-t-il un rattrapage possible ?
- Pour la classe :
- La moyenne générale
- Le nombre d’admis / de recalés
Deux configurations possibles sont fournies, avec quelques légères différences dans la manière d’écrire les règles.
Le test JUnit a pour rôle de :
- Construire les données d’entrée
- Exécuter les opérations ci-dessus en Java
- Exécuter MRules pour les exécuter également et vérifier les résultats
- Comparer les temps d’exécution
- Tester que la fabrique de configuration de MRules écrit et lit la configuration correctement.
Calcul de TVA
MRules est utilisé ici pour calculer les taux de TVA et de remise maximale applicables sur des produits commerciaux, selon différents critères :
- Région (FRANCE, SPAIN, …)
- Le type de client (Société, Association, Personne)
- Le type de (Alimentaire, Livre, …)
- La date de commande
Ces règles sont appliquées, dans cet ordre :
- Si France et Livre, depuis 2016-01-01 : TVA 5.5% et 3% max de remise.
- Si France et product type is Book : TVA 5.5% et 5% max de remise.
- Si Association : TVA 5.5%.
- Si Livre : TVA 10%.
- Si Alimentaire : TVA 5.5% et 0% max de remise.
- Si Société et Electronique : TVA 10% et 15% max de remise.
- Si Personne et Maison ou Musique : TVA 10% et 25% max de remise.
- Dans les autres cas : TVA 20%.
Cette démo est intéressante car les règles sont écrites en utilisant la grammaire XML simplifiée et également car elle illustre le comportement d’arrêt du moteur à la première règle validée.
Le test JUnit a pour rôle de :
- Construire des données de test
- Exécuter MRules pour exécuter les opérations et vérifier les résultats
- Benchmark des temps d’exécution
- Tester que la fabrique de configuration de MRules écrit et lit la configuration correctement.
Sudoku
Même si MRules n’a pas été créé et conçu dans l’optique de résoudre ce type de problèmes, la puissance de la librairie et sa simplicité le permettent.
Nous utilisons ici un simple algorithme de back tracking, qui est plus ou moins une résolution de tout type de grilles via force brute (y compris des grilles vides 🙂
Cette démo va vous permettre de découvrir :
- L’utilisation avancée des fonctions.
- Comment itérer sur des nombres.
- Comment retourner une valeur au programme Java appelant.
Nous avons également inclus un solver purement Java et un solver fourni dans les exemples de Drools, afin de comparer l’écriture des règles et la vitesse d’exécution. Sachant que le solver Drools est basé sur un algorithme plus évolué que le backtracking, donc plus complexe et théoriquement plus rapide.
Le test JUnit a pour rôle de :
- Construire différentes grilles de test
- Les résoudre avec le solver Java
- Les résoudre avec le solver Drools
- Les résoudre avec le solver MRules
- Vérifier que les grilles ont été résolues si elles ont une solution
- Comparer les temps d’exécution
- Tester que la fabrique de configuration de MRules écrit et lit la configuration correctement.
Drools Fight
Cette démo a été réalisée dans le cadre de notre Benchmark comparatif entre Drools et MRules. Tout est expliqué en détail ici.
Intégration Spring
Démo illustrant l’intégration de MRules dans un projet Spring. Vous y verrez comment injecter une instance de ruleset en utilisant soit les annotation Spring soit la configuration via le contexte XML Spring.
Avancé
Cette dernière démo a simplement pour objet d’illustrer quelques fonctionnalité avancée, mais ne simule pas un cas fonctionnel.
Vous allez y apprendre à :
- Désactiver une partie du processus d’optimisation pour un rule set spécifique.
- Créer une liste partielle à partir des éléments d’une liste principale vérifiant une condition
- Arrondir un ensemble de nombres
- Récupérer les 3 premier caractères d’une chaînes, ou « N/A ».
- Exécuter une commande système et tester le résultat. Si incorrect lever une erreur.
- Tester si une propriété est accessible dans le bean d’entrée (i.e. le champ existe-t-il dans la classe Java)
- Ajouter 21 ans, 1 mois et retrancher 1 jour à la date courrant, définir une variable avec le résultat et l’imprimer. Ensuite, calculer la différence en mois entre la date courante et la variable. Si différent de 21 : erreur.
Moteur de Grammaire
Les démonstrations ci-dessous permettent de montrer l’utilisation de la librairie de grammaire fonctionnelle.
Démo JSON
Cette démonstration montre comment utiliser le moteur de grammaire MRules pour modéliser votre propre grammaire. Ici nous avons créé en quelques lignes de configuration un parser JSON.
En implémentant les deux normes JSON possibles (RFC-4627 et ECMA-404) nous montrons comment mutualiser la configuration et comment utiliser efficacement le produit.
Également, l’internationalisation d’une grammaire et l’utilisation du générateur de documentation y sont présentées.
Démo Editeur JSON
Basée sur la grammaire JSON créée dans la démonstration précédente, nous spécialisons ici le composant Web d’édition de configuration afin afin d’y intégrer les 4 variantes de grammaires JSon (2 standards * 2 langages) et d’obtenir un éditeur de texte JSON.
En lançant la version standalone Springboot, vous pourrez, directement dans votre navigateur :
- Éditer du contenu JSon avec une auto-complétion efficace et intuitive et une validation syntaxique lors la frappe.
- Changer de variante et donc vérifier que l’auto-complétion et la validation changent selon le standard et la langue sélectionnés.
- Générer la documentation automatique via un lien.
Calcul de prix d’assurance santé
La démonstration de calcul de prix d’assurance santée propose une configuration utilisant la syntaxe proche du langage naturelle, proposée par une extension du moteur de règle métier basée sur la librairie de moteur de grammaire.
Sudoku
La démonstration de solveur Sodoku propose une configuration utilisant la syntaxe proche du langage naturelle, proposée par une extension du moteur de règle métier basée sur la librairie de moteur de grammaire.