betagouv / mon-entreprise

L'assistant officiel des entrepreneurs
https://mon-entreprise.urssaf.fr
MIT License
256 stars 72 forks source link

Encoder l'évolution temporelle de la législation #34

Closed laem closed 4 years ago

laem commented 7 years ago

Pour l'instant non prioritaire.

Le modèle classique est de remplacer par exemple un taux par une liste ordonnée de changements législatifs [date changement: nouveau taux]. De même pour les autres feuilles.

Seulement, les variables aussi évoluent ! Une cotisation peut disparaître.

Cela mène rapidement à une base de règles historisée mais polluant la vue du présent...

@Morendil Tu proposais une idée d'alternative ...

Morendil commented 7 years ago

Oui mais c'est une idée à moitié cuite; ça consisterait à stocker non pas des versions historisées de certains paramètres choisis arbitrairement, car tout peut évoluer; mais des "delta" d'évolutions des formules (qui pourront éventuellement être exprimés de façon compacte et donc se réduire à "tel taux est passé de X à Y valeur").

En s'inspirant des "database migrations" on sait qu'on peut alors partir d'une version du droit à la date D1, appliquer tous les deltas jusqu'à la date D2, et obtenir alors le droit à la date D2. On peut aussi charger des deltas correspondant à une réforme.

Ce qui reste délicat c'est de pouvoir appliquer sur une même situation deux modèles (ou plus), de façon par exemple à pouvoir appliquer sur une période janvier-décembre des cotisations dont le taux a évolué en juillet. Implicitement cet exemple suppose que le delta a un effet strictement applicable à partir de sa date d'entrée en vigueur: en pratique ce n'est pas toujours le cas, et si on le spécifie avec justesse on peut peut-être traiter les cas d'extinction de certaines aides par exemple, ou encore le fait qu'on supprime en juillet un dispositif qui reste applicable pour les contrats signés avant cette date.

johangirod commented 5 years ago

Je ne comprends pas vraiment le besoin. Pourquoi ne pas simplement s'appuyer sur le versionnage des règles ? La seule limite de cette solution serait le cas où l'on implemente à l'année N une règle qui était déjà valable à l'année N - 1 et que l'on souhaite tout de même en profiter pour simuler notre situation à l'année N - 1.

Et encore, si la motivation est là, on pourrait très bien patcher la version pour ajouter les règles.

On pourrait imaginer le versionning suivant pour le fichier de règles : X.Y

Avec en peer-dependency la version compatible du moteur de règle syso.

mquandalle commented 4 years ago

On a pas mal avancé sur ce sujet avec l'introduction du système de remplacement et des variables temporelles. Je ferme cette issue qui date de 2017.