publicodes / tools

Set of utility functions to write tooling for Publicodes models
https://publicodes.github.io/tools/
MIT License
8 stars 0 forks source link

Erreurs lors de l'usage de constantFolding avec modele-social #44

Open zhouzi opened 5 months ago

zhouzi commented 5 months ago

J'essaie d'appliquer les optimisations de constantFolding au modele-social.

J'ai rencontré une première erreur avec les règles privées, que j'ai pu régler en les passant toutes en non privé manuellement.

Je n'ai plus d'erreur mais l'évaluation retourne undefined, voilà mon code :

import { constantFolding } from "@publicodes/tools/optims";
import rules from "modele-social";
import Engine from "publicodes";

const optimizedRules = constantFolding(new Engine(rules), {
  toKeep(rule) {
    return true;
  },
});

const eurl = new Engine(optimizedRules);

eurl.setSituation({
  "impôt . foyer fiscal . situation de famille": "'célibataire'",
  "impôt . méthode de calcul": "'barème standard'",
  "dirigeant . rémunération . net . après impôt": 40000,
  "dirigeant . indépendant . IJSS": "non",
  "dirigeant . indépendant . revenus étrangers": "non",
  "dirigeant . indépendant . PL . régime général . taux spécifique retraite complémentaire":
    "non",
  "dirigeant . indépendant . conjoint collaborateur": "non",
  "dirigeant . indépendant . cotisations facultatives": "non",
  "entreprise . activités . saisonnière": "non",
  "situation personnelle . RSA": "non",
  "entreprise . activité . nature . libérale . réglementée": "non",
  "entreprise . activité . nature": "'libérale'",
  "situation personnelle . domiciliation fiscale à l'étranger": "non",
  "entreprise . date de création": "01/01/2023",
  "dirigeant . exonérations . ACRE": "non",
  "dirigeant . indépendant . cotisations et contributions . exonérations . pension invalidité":
    "non",
  "entreprise . imposition": "'IS'",
  "entreprise . associés": "'unique'",
  "entreprise . catégorie juridique": "'SARL'",
});

console.log(
  eurl
    .evaluate("dirigeant . indépendant . cotisations et contributions")
    .nodeValue
);
// undefined

Sans passer par l'usage de constantFolding, j'ai bien une valeur de retour (21861).

Il me semble faire un usage correct de constantFolding d'après la documentation et ce que j'en comprends alors je me demande si je ne suis pas tombé sur un bug, mis en lumière par le modele-social ?

Je continue les expérimentations de mon côté.

EmileRolley commented 5 months ago

L'optimisation n'est pour l'instant utilisé uniquement par le modèle de Nos Gestes Climat. Or, le model-social utilise bien plus de mécanismes. Il est donc fort probable que tous ne soient pas correctement géré côté @publicodes/tools.

Une première étape de debugage serait de regarder le jeux de règle produit par l'appel à constantFolding et de repérer quelles sont les règles qui ont mal été optimisées. Et mon intuition serait de regarder du côté de l'usage des remplacements.

Je vais essayer de regarder ça, mais je ne peux pas garantir que ce sera corrigé rapidement. N'hésites pas à faire part de ton avancement si tu décides de continuer à investiguer :+1:

fmata commented 4 months ago

Nous essayons aussi de l'appliquer à modele-social + nos règles personnalisées, sans succès. Est-ce que vous prévoyez de déminer le terrain de votre côté avec modele-social ? Sans ça, j'ai peur que nous ne puissions pas faire grand chose pour avancer.