Skip to content

Commit

Permalink
markdown footnotes
Browse files Browse the repository at this point in the history
  • Loading branch information
mquandalle committed Dec 17, 2022
1 parent dec7f50 commit a8cfda8
Showing 1 changed file with 18 additions and 27 deletions.
45 changes: 18 additions & 27 deletions website/docs/pourquoi-publicodes/projets-similaires.mdx
Expand Up @@ -5,64 +5,59 @@ title: Projets similaires

# Projets similaires

Le problème ciblé par publicodes est évidemment vaste. Il est donc important de noter que chaque solution, que ce soit publicodes ou un autre langage ou plateforme, ne répond qu'à un besoin précis.
Le problème ciblé par publicodes est évidemment vaste. Il est donc important de noter que chaque solution, que ce soit publicodes ou un autre langage ou plateforme, ne répond qu'à un besoin précis.

Alors pourquoi ce projet alors que X existe ?

## X = n'importe quel langage de programmation complet
## X = n'importe quel langage de programmation complet

Toutes les applications de publicodes auraient assurément pu être codées directement en Javascript, en Python, en Clojure... Ces langages permettent de tout faire, mais nous constatons que n'importe quel projet incluant un modèle de calcul qui dure avec un besoin d'itérer dans l'année et de proposer une interface utilisateur, est amené à coder ses propres fichiers de configuration (pour faciliter la tâche mentale du développeur, fiabiliser les tests, publier les données, intégrer des experts métiers non-dev...), qui deviennent alors souvent des DSL (langages personnalisés dédiées au domaine en question).
Toutes les applications de publicodes auraient assurément pu être codées directement en Javascript, en Python, en Clojure... Ces langages permettent de tout faire, mais nous constatons que n'importe quel projet incluant un modèle de calcul qui dure avec un besoin d'itérer dans l'année et de proposer une interface utilisateur, est amené à coder ses propres fichiers de configuration (pour faciliter la tâche mentale du développeur, fiabiliser les tests, publier les données, intégrer des experts métiers non-dev...), qui deviennent alors souvent des DSL (langages personnalisés dédiées au domaine en question).

Le projet passe souvent par d'autres phases incontournables, comme la gestion des conversions temporelles ou unités de calcul, etc.

On pourra lire à ce propos la page [Pourquoi YAML](/docs/pourquoi-publicodes/pourquoi-yaml).

> Ecobalyse est un bon exemple de projet calculatoire [ayant développé son projet moteur de calcul](https://github.com/MTES-MCT/ecobalyse/blob/master/src/Data/Food/Process.elm), en Elm. Quite à partir sur un langage de programmation complet, il est en effet intéressant d'en choisir un fortement typé.

## X = Un tableur LibreOffice, Excel ou Google Spreadsheet

Une façon de voir publicodes, c'est qu'il s'agit d'un langage permettant de versionner des tableurs calculatoires dans lesquels les variables ont été nommées.
Une façon de voir publicodes, c'est qu'il s'agit d'un langage permettant de versionner des tableurs calculatoires dans lesquels les variables ont été nommées.

Bien sûr, les tableurs gardent leur avantage incontournable : une vue 2D d'un calcul qui permet notammenr de manipuler facilement des tableaux, l'absence de nommage des variables, la facilité de travail dans un logiciel, etc.

Si les tableurs sont un super moyen de commencer à travailler sur un projet calculatoire, **ses avantages sont précisément ses limites**. Impossibilité de s'y retrouver dans les variables non nommées, onglets présentés de façon linéaires, référence à d'autres tableurs introuvables, versionnage dans le nom de fichier et collaboration très difficile, etc.

On notera en particulier que collaborer sur un projet publicodes, comme sur n'importe quel projet de code source texte, permet d'utiliser [la puissance bien démontrée](docs/pourquoi-publicodes/standard-modeles-ouverts) des forges en lignes telles que Github ou Gitlab.

On notera en particulier que collaborer sur un projet publicodes, comme sur n'importe quel projet de code source texte, permet d'utiliser [la puissance bien démontrée](docs/pourquoi-publicodes/standard-modeles-ouverts) des forges en lignes telles que Github ou Gitlab.

## X = Moteurs de calcul numérique, comme OpenFisca
---------------------

Il existe aujourd'hui un certain nombre de simulateurs numériques du système social français. Par exemple INES, développé par l'INSEE. OpenFisca, ouvert, relativement étendu et _collaboratif_ en est un représentant inédit.*
---

Il existe aujourd'hui un certain nombre de simulateurs numériques du système social français. Par exemple INES, développé par l'INSEE. OpenFisca, ouvert, relativement étendu et _collaboratif_ en est un représentant inédit. [^1]

OpenFisca permet aujourd'hui de faire des simulations économiques (menant à des rapports de politique publique, ou à des travaux de recherche), et des services numériques de type simulateur en ligne, tels que [Mes aides](https://mes-aides.1jeune1solution.beta.gouv.fr). C'est un calculateur numérique : on lui donne une situation (ex. une famille avec deux parents salariés ayant un certain revenu brut et un enfant scolarisé), on lui demande des variables de sortie (ex. le revenu net, le revenu après impôts), et on en obtient les résultats sous forme de liste de couples variable = valeur (ex. revenu du ménage après impôts = 3000€).

OpenFisca est bâti comme le sont beaucoup de serveurs : du code métier (ex. comment votre cotisation de retraite est calculée), et une API Web pour servir des interfaces. Une particularité cependant : le moteur (OpenFisca Core) est (de mieux en mieux) séparé du code métier du pays initial (OpenFisca France), ce qui a permis à d'autres pays ou régions d'ébaucher le code de leur système socio-fiscal (pour l'instant, la Tunisie, le Sénégal, la Catalogne).

Le code métier, comme le moteur d'exécution, est écrit en Python, langage très commun, et en Numpy **. Ces choix historiques entraînent ces limitations importantes :
Le code métier, comme le moteur d'exécution, est écrit en Python, langage très commun, et en Numpy [^2]. Ces choix historiques entraînent ces limitations importantes :

- les règles (le code représentant la législation) ne sont pas réutilisables en dehors d'OpenFisca (il est très spécifique et surtout difficile à _parser_)
- en conséquence, le moteur est destiné (et limité) à fournir des résultats purement numériques, sauf circonvolutions importantes.
- il faut être développeur expérimenté, de préférence habitué au calcul vectoriel imposé par Numpy et au moins développeur Python, pour lire ou modifier ces règles. En bref, l'objectif est la rapidité, mais les règles et le moteur sont bien plus complexes.
- il faut être développeur expérimenté, de préférence habitué au calcul vectoriel imposé par Numpy et au moins développeur Python, pour lire ou modifier ces règles. En bref, l'objectif est la rapidité, mais les règles et le moteur sont bien plus complexes.

Le développement de toute une gamme d'applications est fortement compliqué par ces limitations ***. Un simulateur Web devra recopier la liste des lignes d'une fiche de paie, pourtant présente dans le moteur, pour en afficher les valeurs numériques dans l'interface; on ne peut construire facilement une vue pédagogique dans le navigateur qui explique les calculs; le code métier est ouvert (disponible en ligne) mais très complexe, même pour un développeur; les outils d'exploration de la législation sont très coûteux à construire et maintenir; etc.
Le développement de toute une gamme d'applications est fortement compliqué par ces limitations [^3]. Un simulateur Web devra recopier la liste des lignes d'une fiche de paie, pourtant présente dans le moteur, pour en afficher les valeurs numériques dans l'interface; on ne peut construire facilement une vue pédagogique dans le navigateur qui explique les calculs; le code métier est ouvert (disponible en ligne) mais très complexe, même pour un développeur; les outils d'exploration de la législation sont très coûteux à construire et maintenir; etc.

Une simplification a été faite dans cet exposé : le code métier est aujourd'hui en partie externalisé dans des paramètres contenant les nombres historisés utilisés par les règles de calcul. Par exemple, les valeurs historisées de votre taux de cotisation de retraite complémentaire, ou celles du SMIC. Contrairement au code métier, ces paramètres sont théoriquement de la donnée facilement exploitable par d'autres applications : on peut par exemple les visualiser sous forme de tableaux. Malheureusement, la loi n'est que rarement si simple, et l'on s'en apercevra vite : les paramètres sont eux même paramétrés... par exemple, il y a deux retraites complémentaires dans le régime général : pour les cadres et les non-cadres. Il y a donc de la logique incrustée dans ces paramètres (liste historique des taux cadres, liste historique des taux non-cadre), exploitée par le code métier pour pouvoir calculer la bonne valeur de votre cotisation retraite.

L'idée de publicodes est de prendre clairement le parti d'inscrire toute la logique métier sous forme déclarative dans de la donnée. Dans notre exemple, c'est toute la description de la retraite et son calcul (des références législatives, un barème à taux marginal, des exceptions etc.) qui seront inscrits dans une base de règles lisible. Différents moteurs d'exécution pourront exploiter cette donnée pour construire les applications aujourd'hui manquantes. Il faut donc définir une nouvelle syntaxe, un format de données interprétable par un programme et assez expressif pour être lisible et agréable à écrire.

Pour aller plus loin, voici [un exemple d'implémentation d'une fonction de calcul dans ces deux plateformes](/docs/pourquoi-publicodes/coder-un-barème).

> (*) il couvre notamment les 3 grands domaines impôts sur le revenu, prestations sociales et prélèvements sur les salaires. Ceci grâce au travail de l'Institut des Politiques Publiques, d'Étalab et de l'Incubateur des Services numériques, services de l'État, ainsi qu'un certain nombre d'autres acteurs.
> (**) Numpy est une brique logicielle qui permet en théorie au moteur de simuler des populations entières (millions d'individus) dix fois plus rapidement. Eh oui, les processeurs qui font tourner nos ordinateurs et smartphones sont souvent mal exploités !
[^1]: il couvre notamment les 3 grands domaines impôts sur le revenu, prestations sociales et prélèvements sur les salaires. Ceci grâce au travail de l'Institut des Politiques Publiques, d'Étalab et de l'Incubateur des Services numériques, services de l'État, ainsi qu'un certain nombre d'autres acteurs.
[^2]: Numpy est une brique logicielle qui permet en théorie au moteur de simuler des populations entières (millions d'individus) dix fois plus rapidement. Eh oui, les processeurs qui font tourner nos ordinateurs et smartphones sont souvent mal exploités !
[^3]: Il est pour l'instant dans notre ère beaucoup trop complexe, voir tout simplement impossible, d'écrire un programme qui analyse une base de règles et la transforme en quelque chose de plus lisible.

> (***) Il est pour l'instant dans notre ère beaucoup trop complexe, voir tout simplement impossible, d'écrire un programme qui analyse une base de règles et la transforme en quelque chose de plus lisible.

X = Créateurs de simulateurs
-------------------------------
## X = Créateurs de simulateurs

### G6K

Expand All @@ -79,19 +74,15 @@ La grosse différence est dans l'objectif : le but de G6K est de créer des form

Une autre différence importante est que les formulaires sont à renseigner entièrement à la main : on construit l'interface de saisie champ par champ, étape par étape. Ici à l'inverse, le formulaire est construit automatiquement à partir des règles législatives.


X = Catala
-------------------------------
## X = Catala

Le [langage Catala](https://catala-lang.org/) a beaucoup de similarité avec publicodes. Il diffère notamment dans son objectif premier, qui est de couvrir le domaine métier de la loi française.

À compléter.

## X = Créateurs de formulaires

X = Créateurs de formulaires
-------------------------------

Ces outils se concentre davantage sur le recueil de données : leur capacité de faire des calculs est limitée ou absente.
Ces outils se concentre davantage sur le recueil de données : leur capacité de faire des calculs est limitée ou absente.

- l'outil de GDS, les services publics anglais : un DSL Ruby qui produit des formulaires (je ne retrouve pas le lien !).

Expand Down

0 comments on commit a8cfda8

Please sign in to comment.