OpenFisca-France 168.2.0__py3-none-any.whl → 169.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of OpenFisca-France might be problematic. Click here for more details.
- {OpenFisca_France-168.2.0.dist-info → OpenFisca_France-169.1.0.dist-info}/METADATA +15 -10
- {OpenFisca_France-168.2.0.dist-info → OpenFisca_France-169.1.0.dist-info}/RECORD +8 -20
- {OpenFisca_France-168.2.0.dist-info → OpenFisca_France-169.1.0.dist-info}/WHEEL +1 -1
- {OpenFisca_France-168.2.0.dist-info → OpenFisca_France-169.1.0.dist-info}/top_level.txt +0 -1
- openfisca_france/assets/taxe_habitation/source/do_REI_2017-2018_to_csv.do +175 -0
- openfisca_france/model/prestations/cheque_energie.py +1 -1
- openfisca_france/model/prestations/locapass.py +2 -1
- OpenFisca_France-168.2.0.data/data/share/openfisca/openfisca-france/CHANGELOG.md +0 -10001
- OpenFisca_France-168.2.0.data/data/share/openfisca/openfisca-france/README.md +0 -302
- tests/__init__.py +0 -0
- tests/cache.py +0 -3
- tests/test_basics.py +0 -44
- tests/test_coefficient.py +0 -38
- tests/test_entities.py +0 -163
- tests/test_metadata.py +0 -7
- tests/test_nb_enfants.py +0 -24
- tests/test_parameters.py +0 -11
- tests/test_preprocessing.py +0 -172
- tests/test_scenarios.py +0 -39
- tests/test_tax_rates.py +0 -53
- {OpenFisca_France-168.2.0.dist-info → OpenFisca_France-169.1.0.dist-info}/LICENSE.AGPL.txt +0 -0
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
# OpenFisca-France
|
|
2
|
-
|
|
3
|
-
[](mailto:contact%40openfisca.org?subject=Subscribe%20to%20your%20newsletter%20%7C%20S'inscrire%20%C3%A0%20votre%20newsletter&body=%5BEnglish%20version%20below%5D%0A%0ABonjour%2C%0A%0AVotre%C2%A0pr%C3%A9sence%C2%A0ici%C2%A0nous%C2%A0ravit%C2%A0!%20%F0%9F%98%83%0A%0AEnvoyez-nous%20cet%20email%20pour%20que%20l'on%20puisse%20vous%20inscrire%20%C3%A0%20la%20newsletter.%20%0A%0AAh%C2%A0!%20Et%20si%20vous%20pouviez%20remplir%20ce%20petit%20questionnaire%2C%20%C3%A7a%20serait%20encore%20mieux%C2%A0!%0Ahttps%3A%2F%2Fgoo.gl%2Fforms%2F45M0VR1TYKD1RGzX2%0A%0AAmiti%C3%A9%2C%0AL%E2%80%99%C3%A9quipe%20OpenFisca%0A%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20ENGLISH%20VERSION%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0AHi%2C%20%0A%0AWe're%20glad%20to%20see%20you%20here!%20%F0%9F%98%83%0A%0APlease%20send%20us%20this%20email%2C%20so%20we%20can%20subscribe%20you%20to%20the%20newsletter.%0A%0AAlso%2C%20if%20you%20can%20fill%20out%20this%20short%20survey%2C%20even%20better!%0Ahttps%3A%2F%2Fgoo.gl%2Fforms%2FsOg8K1abhhm441LG2%0A%0ACheers%2C%0AThe%20OpenFisca%20Team)
|
|
4
|
-
[](https://twitter.com/intent/follow?screen_name=openfisca)
|
|
5
|
-
[](mailto:contact%40openfisca.org?subject=Join%20you%20on%20Slack%20%7C%20Nous%20rejoindre%20sur%20Slack&body=%5BEnglish%20version%20below%5D%0A%0ABonjour%2C%0A%0AVotre%C2%A0pr%C3%A9sence%C2%A0ici%C2%A0nous%C2%A0ravit%C2%A0!%20%F0%9F%98%83%0A%0ARacontez-nous%20un%20peu%20de%20vous%2C%20et%20du%20pourquoi%20de%20votre%20int%C3%A9r%C3%AAt%20de%20rejoindre%20la%20communaut%C3%A9%20OpenFisca%20sur%20Slack.%0A%0AAh%C2%A0!%20Et%20si%20vous%20pouviez%20remplir%20ce%20petit%20questionnaire%2C%20%C3%A7a%20serait%20encore%20mieux%C2%A0!%0Ahttps%3A%2F%2Fgoo.gl%2Fforms%2F45M0VR1TYKD1RGzX2%0A%0AN%E2%80%99oubliez%20pas%20de%20nous%20envoyer%20cet%20email%C2%A0!%20Sinon%2C%20on%20ne%20pourra%20pas%20vous%20contacter%20ni%20vous%20inviter%20sur%20Slack.%0A%0AAmiti%C3%A9%2C%0AL%E2%80%99%C3%A9quipe%20OpenFisca%0A%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20ENGLISH%20VERSION%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0AHi%2C%20%0A%0AWe're%20glad%20to%20see%20you%20here!%20%F0%9F%98%83%0A%0APlease%20tell%20us%20a%20bit%20about%20you%20and%20why%20you%20want%20to%20join%20the%20OpenFisca%20community%20on%20Slack.%0A%0AAlso%2C%20if%20you%20can%20fill%20out%20this%20short%20survey%2C%20even%20better!%0Ahttps%3A%2F%2Fgoo.gl%2Fforms%2FsOg8K1abhhm441LG2.%0A%0ADon't%20forget%20to%20send%20us%20this%20email!%20Otherwise%20we%20won't%20be%20able%20to%20contact%20you%20back%2C%20nor%20invite%20you%20on%20Slack.%0A%0ACheers%2C%0AThe%20OpenFisca%20Team)
|
|
6
|
-
[](https://pypi.python.org/pypi/openfisca-france)
|
|
7
|
-
[](https://pypi.python.org/pypi/openfisca-france)
|
|
8
|
-
[](https://gitpod-referer.now.sh/api/gitpod-referer-redirect)
|
|
9
|
-
|
|
10
|
-
## [EN] Introduction
|
|
11
|
-
|
|
12
|
-
OpenFisca is a versatile microsimulation free software. This repository contains the OpenFisca model of the French tax and benefit system. Therefore, the working language here is French. You can however check the [general OpenFisca documentation](https://openfisca.org/doc/) in English!
|
|
13
|
-
> We host a public instance of of the [OpenFisca-France Web API](https://api.fr.openfisca.org/latest/). Learn more about its endpoint in the [Swagger documentation](https://legislation.fr.openfisca.org/swagger).
|
|
14
|
-
> If you need to run large amount of calculations, or add extensions, you should [host your own instance](#servez-openfisca-france-avec-lapi-web-openfisca).
|
|
15
|
-
|
|
16
|
-
## [FR] Introduction
|
|
17
|
-
|
|
18
|
-
[OpenFisca](https://www.openfisca.fr/) est un logiciel libre de micro-simulation. Ce dépôt contient la modélisation du système social et fiscal français. Pour plus d'information sur les fonctionnalités et la manière d'utiliser OpenFisca, vous pouvez consulter la [documentation générale](https://openfisca.org/doc/).
|
|
19
|
-
> Nous mettons à disposition une instance publique de [l'API Web OpenFisca-France](https://api.fr.openfisca.org/latest/). Découvrez ses capacité sur sa [documentation Swagger](https://legislation.fr.openfisca.org/swagger).
|
|
20
|
-
> Si vous avez besoin de réaliser un grand nombre de calculs ou d'ajouter des extensions, vous pouvez [servir votre propre instance](#servez-openfisca-france-avec-lapi-web-openfisca).
|
|
21
|
-
|
|
22
|
-
## API Web publique : interrogez OpenFisca-France sans installation
|
|
23
|
-
|
|
24
|
-
OpenFisca met à disposition une [API Web publique](https://openfisca.org/doc/openfisca-web-api/endpoints.html) qui ne demande aucune installation.
|
|
25
|
-
Utilisez l'API publique si vous souhaitez :
|
|
26
|
-
- accéder à un paramètre (Ex : [le montant du Smic horaire brut](https://api.fr.openfisca.org/latest/parameter/marche_travail.salaire_minimum.smic.smic_b_horaire)) ;
|
|
27
|
-
- consulter une formule de calcul (Ex : [le calcul de l'allocation de base des allocations familiales](https://api.fr.openfisca.org/latest/variable/af_base)) ;
|
|
28
|
-
- faire des calculs sur une situation (Ex : le calcul du coût du travail).
|
|
29
|
-
|
|
30
|
-
L'ensembles des endpoints sont décrits dans la [documentation Swagger](https://legislation.fr.openfisca.org/swagger).
|
|
31
|
-
|
|
32
|
-
[L'explorateur de législation](https://legislation.fr.openfisca.org/swagger) contient la liste des paramètres et variables disponibles.
|
|
33
|
-
|
|
34
|
-
## Installation
|
|
35
|
-
|
|
36
|
-
Ce paquet requiert [Python 3.9](https://www.python.org/downloads/release/python-390/) et [pip](https://pip.pypa.io/en/stable/installing/) ou [conda](https://www.anaconda.com/products/individual).
|
|
37
|
-
|
|
38
|
-
Plateformes supportées :
|
|
39
|
-
- distributions GNU/Linux (en particulier Debian and Ubuntu) ;
|
|
40
|
-
- Mac OS X ;
|
|
41
|
-
- Windows : Nous recommandons d'utiliser [conda](https://www.anaconda.com/products/individual), voir la procédure ci-dessous [Installez un environnement virtuel avec conda](./README.md#installez-un-environnement-virtuel-avec-conda) ; OpenFisca fonctionne également dans le [sous-système Windows pour Linux (WSL)](https://docs.microsoft.com/fr-fr/windows/wsl/install). Dans ce dernier cas, il suffit de suivre la procédure pour Linux car vous êtes alors dans un environnement Linux.
|
|
42
|
-
|
|
43
|
-
Pour les autres OS : si vous pouvez exécuter Python et Numpy, l'installation d'OpenFisca devrait fonctionner.
|
|
44
|
-
|
|
45
|
-
### Installez un environnement virtuel avec Pew
|
|
46
|
-
|
|
47
|
-
Nous recommandons l'utilisation d'un [environnement virtuel](https://virtualenv.pypa.io/en/stable/) (_virtualenv_) avec un gestionnaire de _virtualenv_ tel que [Pew](https://github.com/berdario/pew). Vous pouvez aussi utiliser le gestionnaire d'environnemnt officiel de Python : [venv](https://docs.python.org/3/library/venv.html).
|
|
48
|
-
|
|
49
|
-
- Un _[virtualenv](https://virtualenv.pypa.io/en/stable/)_ crée un environnement pour les besoins spécifiques du projet sur lequel vous travaillez.
|
|
50
|
-
- Un gestionnaire de _virtualenv_, tel que [Pew](https://github.com/berdario/pew), vous permet de facilement créer, supprimer et naviguer entre différents projets.
|
|
51
|
-
|
|
52
|
-
Pour installer Pew, lancez une fenêtre de terminal et suivez ces instructions :
|
|
53
|
-
|
|
54
|
-
```sh
|
|
55
|
-
python --version # Python 3.9.0 ou plus récent devrait être installé sur votre ordinateur.
|
|
56
|
-
# Si non, téléchargez-le sur http://www.python.org et téléchargez pip.
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
```sh
|
|
60
|
-
pip install --upgrade pip
|
|
61
|
-
pip install pew
|
|
62
|
-
```
|
|
63
|
-
Créez un nouveau _virtualenv_ nommé **openfisca** et configurez-le avec python 3.9 :
|
|
64
|
-
|
|
65
|
-
```sh
|
|
66
|
-
pew new openfisca --python=python3.9
|
|
67
|
-
# Si demandé, répondez "Y" à la question sur la modification du fichier de configuration de votre shell
|
|
68
|
-
```
|
|
69
|
-
Le _virtualenv_ **openfisca** sera alors activé, c'est-à-dire que les commandes suivantes s'exécuteront directement dans l'environnement virtuel. Vous verrez dans votre terminal :
|
|
70
|
-
|
|
71
|
-
```sh
|
|
72
|
-
Installing setuptools, pip, wheel...done.
|
|
73
|
-
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Informations complémentaires :
|
|
77
|
-
- sortez du _virtualenv_ en tapant `exit` (or Ctrl-D) ;
|
|
78
|
-
- re-rentrez en tapant `pew workon openfisca` dans votre terminal.
|
|
79
|
-
|
|
80
|
-
Bravo :tada: Vous êtes prêt·e à installer OpenFisca-France !
|
|
81
|
-
|
|
82
|
-
Nous proposons deux procédures d'installation. Choisissez l'installation A ou B ci-dessous en fonction de l'usage que vous souhaitez faire d'OpenFisca-France.
|
|
83
|
-
|
|
84
|
-
### A. Installation minimale (pip install)
|
|
85
|
-
|
|
86
|
-
Suivez cette installation si vous souhaitez :
|
|
87
|
-
- procéder à des calculs sur une large population ;
|
|
88
|
-
- créer des simulations fiscales ;
|
|
89
|
-
- écrire une extension au-dessus de la législation française (exemple : les extensions de [Paris](https://github.com/sgmap/openfisca-paris) et [Rennes](https://github.com/sgmap/openfisca-rennesmetropole) ;
|
|
90
|
-
- servir OpenFisca-France avec l'API Web OpenFisca.
|
|
91
|
-
|
|
92
|
-
Pour pouvoir modifier OpenFisca-France, consultez l'[Installation avancée](#b-installation-avancée-git-clone).
|
|
93
|
-
|
|
94
|
-
#### Installer OpenFisca-France avec pip install
|
|
95
|
-
|
|
96
|
-
Dans votre _virtualenv_, vérifiez les pré-requis :
|
|
97
|
-
|
|
98
|
-
```sh
|
|
99
|
-
python --version # Devrait afficher "Python 3.9.xx".
|
|
100
|
-
#Si non, vérifiez que vous passez --python=python3.9 lors de la création de votre environnement virtuel.
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
```sh
|
|
104
|
-
pip --version # Devrait afficher au moins 9.0.x
|
|
105
|
-
#Si non, exécutez "pip install --upgrade pip".
|
|
106
|
-
```
|
|
107
|
-
Installez OpenFisca-France :
|
|
108
|
-
|
|
109
|
-
```sh
|
|
110
|
-
pip install openfisca-france && pip install openfisca-core[web-api]
|
|
111
|
-
```
|
|
112
|
-
> _Note: La deuxième partie de la commande, à partir du `&&`, est optionnelle. Elle vous permet d'installer l'API Web d'OpenFisca._
|
|
113
|
-
|
|
114
|
-
Félicitations :tada: OpenFisca-France est prêt à être utilisé !
|
|
115
|
-
|
|
116
|
-
#### Prochaines étapes
|
|
117
|
-
|
|
118
|
-
- Apprenez à utiliser OpenFisca avec nos [tutoriels](https://openfisca.org/doc/) (en anglais).
|
|
119
|
-
- Hébergez et servez votre instance d'OpenFisca-France avec l'[API Web OpenFisca](#servez-openfisca-france-avec-lapi-web-openfisca).
|
|
120
|
-
|
|
121
|
-
En fonction de vos projets, vous pourriez bénéficier de l'installation des paquets suivants dans votre _virtualenv_ :
|
|
122
|
-
- pour installer une extension ou écrire une législation au-dessus d'OpenFisca-France, consultez la [documentation sur les extensions](https://openfisca.org/doc/contribute/extensions.html) (en anglais) ;
|
|
123
|
-
- pour représenter graphiquement vos résultats, essayez la bibliothèque [matplotlib](http://matplotlib.org/) ;
|
|
124
|
-
- pour gérer vos données, découvrez la bibliothèque [pandas](http://pandas.pydata.org/).
|
|
125
|
-
|
|
126
|
-
### B. Installation avancée (Git Clone)
|
|
127
|
-
|
|
128
|
-
Suivez cette installation si vous souhaitez :
|
|
129
|
-
- enrichir ou modifier la législation d'OpenFisca-France ;
|
|
130
|
-
- contribuer au code source d'OpenFisca-France.
|
|
131
|
-
|
|
132
|
-
#### Cloner OpenFisca-France avec Git
|
|
133
|
-
|
|
134
|
-
Premièrement, assurez-vous que [Git](https://www.git-scm.com/) est bien installé sur votre machine.
|
|
135
|
-
|
|
136
|
-
Dans votre _virtualenv_, assurez-vous que vous êtes dans le répertoire où vous souhaitez cloner OpenFisca-France.
|
|
137
|
-
|
|
138
|
-
Vérifiez les pré-requis :
|
|
139
|
-
|
|
140
|
-
```sh
|
|
141
|
-
python --version # Devrait afficher "Python 3.9.xx".
|
|
142
|
-
#Si non, vérifiez que vous passez --python=python3.9 lors de la création de votre environnement virtuel.
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
```sh
|
|
146
|
-
pip --version # Devrait afficher au moins 23.0.
|
|
147
|
-
#Si non, exécutez "pip install --upgrade pip".
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Clonez OpenFisca-France sur votre machine :
|
|
151
|
-
|
|
152
|
-
```sh
|
|
153
|
-
git clone https://github.com/openfisca/openfisca-france.git
|
|
154
|
-
cd openfisca-france
|
|
155
|
-
pip install --editable .[dev] && pip install openfisca-core[web-api]
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Vous pouvez vous assurer que votre installation s'est bien passée en exécutant :
|
|
159
|
-
|
|
160
|
-
```sh
|
|
161
|
-
pytest tests/test_basics.py # Ces test peuvent prendre jusqu'à 60 secondes.
|
|
162
|
-
```
|
|
163
|
-
:tada: OpenFisca-France est prêt à être utilisé !
|
|
164
|
-
|
|
165
|
-
### Installez un environnement virtuel avec conda
|
|
166
|
-
|
|
167
|
-
Nous conseillons cette procédure pour les personnes utilisant Windows et n'ayant pas d'environnement Python fonctionnel. Elle fonctionne également sous Linux et macOS.
|
|
168
|
-
|
|
169
|
-
Ceci vous permet d'obtenir en une seule installation :
|
|
170
|
-
- Python
|
|
171
|
-
- Le gestionnaire de paquets [Anaconda.org](https://docs.anaconda.com/anacondaorg/user-guide/)
|
|
172
|
-
- Le gestionnaire d'environnement Python virtuel : [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html)
|
|
173
|
-
|
|
174
|
-
Voici les étapes à suivre :
|
|
175
|
-
|
|
176
|
-
- Installer la version communautaire/gratuite en suivant la procédure décrite sur [le site Anaconda](https://www.anaconda.com/products/individual). A noter que Anaconda occupe beaucoup d'espace disque (>2 Go), vous pouvez installer à la place [Miniconda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/windows.html) qui occupe beaucoup moins d'espace disque. Cependant vous n'aurez pas l'interface graphique [Anaconda Navigator](https://docs.anaconda.com/anaconda/navigator/index.html) qui vous permet de gérer vos environnements. Si vous êtes habituée à gérer les choses en ligne de commande, préfèrez Miniconda.
|
|
177
|
-
- Depuis le menu démarrer, exécuter `Anaconda Powershell Prompt`. Ou utiliser votre shell préféré avec Miniconda, il vous faudra peut-être utiliser la commande `conda init`, mais conda vous le dira.
|
|
178
|
-
- Exécuter les commandes suivantes dans le shell:
|
|
179
|
-
- Ajouter `conda-forge` comme channel par défaut : `conda config --add channels conda-forge && conda config --set channel_priority strict `
|
|
180
|
-
- Créer un environnement virtuel dédié : `conda create --name openfisca python=3.9`
|
|
181
|
-
- Activer l'environnement : `conda activate openfisca`
|
|
182
|
-
- Installer OpenFisca : `conda install openfisca-france`
|
|
183
|
-
|
|
184
|
-
:tada: OpenFisca-France est prêt à être utilisé !
|
|
185
|
-
|
|
186
|
-
Ensuite, pour quitter l'environnement OpenFisca : `conda deactivate`
|
|
187
|
-
|
|
188
|
-
Pour y revenir : `conda activate openfisca`
|
|
189
|
-
|
|
190
|
-
A noter que OpenFisca-France est présent sur [conda-forge](https://anaconda.org/conda-forge/openfisca-france) et sur un _channel_ dédié [openfisca](https://anaconda.org/openfisca/openfisca-france). C'est conda-forge qui est mis en avant dans cette documentation, car accessible par défaut dans les installations Anaconda.
|
|
191
|
-
|
|
192
|
-
A noter que l'installation d'Openfisca-France peut lever une erreur sur certaines machines Windows à cause de la longueur des chemins de certains fichiers de paramètres et des restrictions de longueur de chemin sous Windows. Une option possible pour résoudre ce problème est de lever cette limite (voir cette documentation pour [Windows >=10](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later))
|
|
193
|
-
|
|
194
|
-
#### Prochaines étapes
|
|
195
|
-
|
|
196
|
-
- Pour enrichir ou faire évoluer la législation d'OpenFisca-France, lisez _[Coding the Legislation](https://openfisca.org/doc/coding-the-legislation/index.html)_ (en anglais).
|
|
197
|
-
- Pour contribuer au code, lisez le _[Contribution Guidebook](https://openfisca.org/doc/contribute/index.html)_ (en anglais).
|
|
198
|
-
|
|
199
|
-
## Testing
|
|
200
|
-
|
|
201
|
-
Pour faire tourner les tests d'OpenFisca-France, exécutez la commande suivante :
|
|
202
|
-
|
|
203
|
-
```sh
|
|
204
|
-
make test
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Style
|
|
208
|
-
|
|
209
|
-
Ce dépôt adhère à un style de code précis, et on vous invite à le suivre pour que vos contributions soient intégrées au plus vite.
|
|
210
|
-
|
|
211
|
-
L'analyse de style est déjà exécutée avec `make test`. Pour le faire tourner de façon indépendante :
|
|
212
|
-
|
|
213
|
-
```sh
|
|
214
|
-
make check-style
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
Pour corriger les erreurs de style de façon automatique:
|
|
218
|
-
|
|
219
|
-
```sh
|
|
220
|
-
make format-style
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
Pour corriger les erreurs de style de façon automatique à chaque fois que vous faites un _commit_ :
|
|
224
|
-
|
|
225
|
-
```sh
|
|
226
|
-
touch .git/hooks/pre-commit
|
|
227
|
-
chmod +x .git/hooks/pre-commit
|
|
228
|
-
|
|
229
|
-
tee -a .git/hooks/pre-commit << END
|
|
230
|
-
#!/bin/sh
|
|
231
|
-
#
|
|
232
|
-
# Automatically format your code before committing.
|
|
233
|
-
exec make format-style
|
|
234
|
-
END
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Servez OpenFisca-France avec l'API Web OpenFisca
|
|
238
|
-
|
|
239
|
-
Il est possible de servir l'API Web d'OpenFisca-France sur votre propre serveur :
|
|
240
|
-
|
|
241
|
-
```sh
|
|
242
|
-
openfisca serve
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
Pour en savoir plus sur la commande `openfisca serve` et ses options, consultez la [documentation de référence](https://openfisca.org/doc/openfisca-python-api/openfisca_serve.html).
|
|
246
|
-
|
|
247
|
-
Testez votre installation en requêtant la commande suivante :
|
|
248
|
-
|
|
249
|
-
```sh
|
|
250
|
-
curl "http://localhost:5000/parameter/marche_travail.salaire_minimum.smic.smic_b_horaire"
|
|
251
|
-
```
|
|
252
|
-
Vous devriez avoir le resultat suivant :
|
|
253
|
-
```JSON
|
|
254
|
-
{
|
|
255
|
-
"description": "Smic horaire brut",
|
|
256
|
-
"id": "marche_travail.salaire_minimum.smic.smic_b_horaire",
|
|
257
|
-
"values": {
|
|
258
|
-
"2001-08-01": 6.67,
|
|
259
|
-
"2002-07-01": 6.83,
|
|
260
|
-
"2003-07-01": 7.19,
|
|
261
|
-
"2004-07-01": 7.61,
|
|
262
|
-
"2005-07-01": 8.03,
|
|
263
|
-
"2006-07-01": 8.27,
|
|
264
|
-
"2007-07-01": 8.44,
|
|
265
|
-
"2008-05-01": 8.63,
|
|
266
|
-
"2008-07-01": 8.71,
|
|
267
|
-
"2009-07-01": 8.82,
|
|
268
|
-
"2010-01-01": 8.86,
|
|
269
|
-
"2011-01-01": 9.0,
|
|
270
|
-
"2011-12-01": 9.19,
|
|
271
|
-
"2012-01-01": 9.22,
|
|
272
|
-
"2012-07-01": 9.4,
|
|
273
|
-
"2013-01-01": 9.43,
|
|
274
|
-
"2014-01-01": 9.53,
|
|
275
|
-
"2015-01-01": 9.61,
|
|
276
|
-
"2016-01-01": 9.67,
|
|
277
|
-
"2017-01-01": 9.76
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
:tada: Vous servez OpenFisca-France via l'API Web OpenFisca !
|
|
283
|
-
|
|
284
|
-
Pour en savoir plus, explorez [la documentation de l'API Web](https://legislation.fr.openfisca.org/swagger).
|
|
285
|
-
|
|
286
|
-
Vous pouvez activer le suivi des visites sur votre instance via Piwik avec _[le Tracker API OpenFisca](https://github.com/openfisca/tracker)_ (en anglais).
|
|
287
|
-
|
|
288
|
-
## Stratégie de versionnement
|
|
289
|
-
|
|
290
|
-
Le code d'OpenFisca-France est déployé de manière continue et automatique. Ainsi, à chaque fois que le code de la législation évolue sur la branche principale `master`, une nouvelle version est publiée.
|
|
291
|
-
|
|
292
|
-
De nouvelles versions sont donc publiées très régulièrement. Cependant, la différence entre deux versions consécutives étant réduite, les efforts d'adaptation pour passer de l'une à l'autre sont en général très limités.
|
|
293
|
-
|
|
294
|
-
Par ailleurs, OpenFisca-France respecte les règles du [versionnement sémantique](http://semver.org/). Tous les changements qui ne font pas l'objet d'une augmentation du numéro majeur de version sont donc garantis rétro-compatibles.
|
|
295
|
-
|
|
296
|
-
> Par exemple, si mon application utilise la version `13.1.1`, je sais qu'elle fonctionnera également avec la version `13.2.0`. En revanche, il est possible qu'une adaptation soit nécessaire sur mon client pour pouvoir utiliser la version `14.0.0`.
|
|
297
|
-
|
|
298
|
-
Enfin, les impacts et périmètres des évolutions sont tous documentés sur le [CHANGELOG](CHANGELOG.md) du package. Ce document permet aux contributeurs de suivre les évolutions et d'établir leur propre stratégie de mise à jour.
|
|
299
|
-
|
|
300
|
-
## Contributeurs
|
|
301
|
-
|
|
302
|
-
Voir la [liste des contributeurs](https://github.com/openfisca/openfisca-france/graphs/contributors).
|
tests/__init__.py
DELETED
|
File without changes
|
tests/cache.py
DELETED
tests/test_basics.py
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
'''Basic test of all covered years.'''
|
|
2
|
-
|
|
3
|
-
import datetime
|
|
4
|
-
|
|
5
|
-
from openfisca_france.scenarios import init_single_entity
|
|
6
|
-
|
|
7
|
-
from .cache import tax_benefit_system
|
|
8
|
-
|
|
9
|
-
import pytest
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
scenarios_arguments = [
|
|
13
|
-
dict(
|
|
14
|
-
period = year,
|
|
15
|
-
parent1 = dict(
|
|
16
|
-
date_naissance = datetime.date(1972, 1, 1),
|
|
17
|
-
salaire_de_base = 2000,
|
|
18
|
-
effectif_entreprise = 25,
|
|
19
|
-
categorie_salarie = 'prive_non_cadre',
|
|
20
|
-
),
|
|
21
|
-
parent2 = dict(
|
|
22
|
-
date_naissance = datetime.date(1972, 1, 1),
|
|
23
|
-
),
|
|
24
|
-
menage = dict(
|
|
25
|
-
zone_apl = 'zone_1',
|
|
26
|
-
),
|
|
27
|
-
)
|
|
28
|
-
for year in range(2006, 2024)
|
|
29
|
-
]
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
@pytest.mark.parametrize('scenario_arguments', scenarios_arguments)
|
|
33
|
-
def test_basics(scenario_arguments):
|
|
34
|
-
'''Basic test for a specific year.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
scenario_arguments (dict): Arguments to initialize scenario.
|
|
38
|
-
'''
|
|
39
|
-
scenario = tax_benefit_system.new_scenario()
|
|
40
|
-
init_single_entity(scenario, **scenario_arguments)
|
|
41
|
-
simulation = scenario.new_simulation(debug = False)
|
|
42
|
-
period = scenario_arguments['period']
|
|
43
|
-
assert simulation.calculate('revenu_disponible', period = period) is not None, "Can't compute revenu_disponible on period {}".format(period)
|
|
44
|
-
assert simulation.calculate_add('salaire_super_brut', period = period) is not None, "Can't compute salaire_super_brut on period {}".format(period)
|
tests/test_coefficient.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from openfisca_france import FranceTaxBenefitSystem
|
|
2
|
-
from openfisca_france.scenarios import init_single_entity
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def test_coefficient_proratisation_only_contract_periods_wide():
|
|
6
|
-
tax_benefit_system = FranceTaxBenefitSystem()
|
|
7
|
-
scenario = tax_benefit_system.new_scenario()
|
|
8
|
-
init_single_entity(scenario, period='2017', # wide: we simulate for the year
|
|
9
|
-
parent1=dict(salaire_de_base={'2017-11': 2300},
|
|
10
|
-
effectif_entreprise=1,
|
|
11
|
-
code_postal_entreprise='75001',
|
|
12
|
-
categorie_salarie='prive_non_cadre',
|
|
13
|
-
contrat_de_travail_debut={2017: '2017-11-01'},
|
|
14
|
-
contrat_de_travail_fin={2017: '2017-12-01'},
|
|
15
|
-
allegement_general_mode_recouvrement='progressif'))
|
|
16
|
-
simulation = scenario.new_simulation()
|
|
17
|
-
assert simulation.calculate('coefficient_proratisation', '2017-11') == 1
|
|
18
|
-
assert simulation.calculate('coefficient_proratisation', '2017-12') == 0
|
|
19
|
-
assert simulation.calculate('coefficient_proratisation', '2017-10') == 0
|
|
20
|
-
assert simulation.calculate_add('coefficient_proratisation', '2017') == 1
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def test_coefficient_proratisation_only_contract_periods_narrow():
|
|
24
|
-
tax_benefit_system = FranceTaxBenefitSystem()
|
|
25
|
-
scenario = tax_benefit_system.new_scenario()
|
|
26
|
-
init_single_entity(scenario, period='2017-11', # narrow: we simulate for the month
|
|
27
|
-
parent1=dict(salaire_de_base={'2017-11': 2300},
|
|
28
|
-
effectif_entreprise=1,
|
|
29
|
-
code_postal_entreprise='75001',
|
|
30
|
-
categorie_salarie='prive_non_cadre',
|
|
31
|
-
contrat_de_travail_debut={2017: '2017-11-01'},
|
|
32
|
-
contrat_de_travail_fin={2017: '2017-12-01'},
|
|
33
|
-
allegement_general_mode_recouvrement='progressif'))
|
|
34
|
-
simulation = scenario.new_simulation()
|
|
35
|
-
assert simulation.calculate('coefficient_proratisation', '2017-11') == 1
|
|
36
|
-
assert simulation.calculate('coefficient_proratisation', '2017-12') == 0
|
|
37
|
-
assert simulation.calculate('coefficient_proratisation', '2017-10') == 0
|
|
38
|
-
assert simulation.calculate_add('coefficient_proratisation', '2017') == 1
|
tests/test_entities.py
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
|
-
|
|
3
|
-
from openfisca_core.taxbenefitsystems import TaxBenefitSystem
|
|
4
|
-
from openfisca_core.tools import assert_near
|
|
5
|
-
|
|
6
|
-
from openfisca_france.entities import entities, Individu, Famille, Menage
|
|
7
|
-
from openfisca_france.model.base import * # noqa analysis:ignore
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class af(Variable):
|
|
11
|
-
value_type = float
|
|
12
|
-
entity = Famille
|
|
13
|
-
definition_period = MONTH
|
|
14
|
-
set_input = set_input_divide_by_period
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class salaire(Variable):
|
|
18
|
-
value_type = float
|
|
19
|
-
entity = Individu
|
|
20
|
-
definition_period = MONTH
|
|
21
|
-
set_input = set_input_divide_by_period
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class age(Variable):
|
|
25
|
-
value_type = int
|
|
26
|
-
entity = Individu
|
|
27
|
-
definition_period = MONTH
|
|
28
|
-
set_input = set_input_dispatch_by_period
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class autonomie_financiere(Variable):
|
|
32
|
-
value_type = bool
|
|
33
|
-
entity = Individu
|
|
34
|
-
definition_period = MONTH
|
|
35
|
-
set_input = set_input_divide_by_period
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class depcom(Variable):
|
|
39
|
-
value_type = str
|
|
40
|
-
max_length = 5
|
|
41
|
-
entity = Menage
|
|
42
|
-
label = '''Code INSEE "depcom" de la commune de résidence de la famille'''
|
|
43
|
-
definition_period = ETERNITY
|
|
44
|
-
|
|
45
|
-
# This tests are more about core than france, but we need france entities to run some of them.
|
|
46
|
-
# We use a dummy TBS to run the tests faster
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
class DummyTaxBenefitSystem(TaxBenefitSystem):
|
|
50
|
-
def __init__(self):
|
|
51
|
-
TaxBenefitSystem.__init__(self, entities)
|
|
52
|
-
self.add_variables(af, salaire, age, autonomie_financiere, depcom)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
tax_benefit_system = DummyTaxBenefitSystem()
|
|
56
|
-
|
|
57
|
-
TEST_CASE = {
|
|
58
|
-
'individus': {'ind0': {}, 'ind1': {}, 'ind2': {}, 'ind3': {}, 'ind4': {}, 'ind5': {}},
|
|
59
|
-
'familles': {
|
|
60
|
-
'f1': {'enfants': ['ind2', 'ind3'], 'parents': ['ind0', 'ind1']},
|
|
61
|
-
'f2': {'enfants': ['ind5'], 'parents': ['ind4']}
|
|
62
|
-
},
|
|
63
|
-
'foyers_fiscaux': {
|
|
64
|
-
'ff1': {'declarants': ['ind0', 'ind1'], 'personnes_a_charge': ['ind2', 'ind3']},
|
|
65
|
-
'ff2': {'personnes_a_charge': ['ind5'], 'declarants': ['ind4']}
|
|
66
|
-
},
|
|
67
|
-
'menages': {
|
|
68
|
-
'm1': {'conjoint': 'ind1', 'enfants': ['ind2', 'ind3'], 'personne_de_reference': 'ind0'},
|
|
69
|
-
'm2': {'conjoint': [], 'enfants': ['ind5'], 'personne_de_reference': 'ind4'},
|
|
70
|
-
},
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
TEST_CASE_AGES = deepcopy(TEST_CASE)
|
|
74
|
-
AGES = [40, 37, 7, 9, 54, 20]
|
|
75
|
-
|
|
76
|
-
for (individu, age_) in zip(TEST_CASE_AGES['individus'].values(), AGES):
|
|
77
|
-
individu['age'] = age_
|
|
78
|
-
|
|
79
|
-
reference_period = 2013
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def new_simulation(test_case):
|
|
83
|
-
test_case['period'] = reference_period
|
|
84
|
-
return tax_benefit_system.new_scenario().init_from_dict(test_case).new_simulation()
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def test_transpose():
|
|
88
|
-
test_case = deepcopy(TEST_CASE)
|
|
89
|
-
test_case['familles']['f1']['af'] = 20000
|
|
90
|
-
test_case['familles']['f2']['af'] = 10000
|
|
91
|
-
test_case['foyers_fiscaux'] = {
|
|
92
|
-
'ff1': TEST_CASE['foyers_fiscaux']['ff1'],
|
|
93
|
-
'ff2': {'declarants': ['ind4']},
|
|
94
|
-
'ff3': {'declarants': ['ind5']}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
simulation = new_simulation(test_case)
|
|
98
|
-
foyer_fiscal = simulation.foyer_fiscal
|
|
99
|
-
|
|
100
|
-
af_foyer_fiscal = foyer_fiscal.first_person.famille('af', period = reference_period, options = [ADD])
|
|
101
|
-
|
|
102
|
-
assert_near(af_foyer_fiscal, [20000, 10000, 10000])
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def test_transpose_string():
|
|
106
|
-
test_case = deepcopy(TEST_CASE)
|
|
107
|
-
test_case['menages']['m1']['depcom'] = '93400'
|
|
108
|
-
test_case['menages']['m2']['depcom'] = '89300'
|
|
109
|
-
|
|
110
|
-
simulation = new_simulation(test_case)
|
|
111
|
-
famille = simulation.famille
|
|
112
|
-
|
|
113
|
-
depcom_famille = famille.first_person.menage('depcom', period = reference_period)
|
|
114
|
-
|
|
115
|
-
assert (depcom_famille == [b'93400', b'89300']).all()
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
def test_value_from_person():
|
|
119
|
-
test_case = deepcopy(TEST_CASE_AGES)
|
|
120
|
-
simulation = new_simulation(test_case)
|
|
121
|
-
|
|
122
|
-
foyer_fiscal = simulation.foyer_fiscal
|
|
123
|
-
|
|
124
|
-
age_conjoint = foyer_fiscal.conjoint('age', period='2013-01')
|
|
125
|
-
assert_near(age_conjoint, [37, 0])
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def test_combination_projections():
|
|
129
|
-
test_case = deepcopy(TEST_CASE_AGES)
|
|
130
|
-
simulation = new_simulation(test_case)
|
|
131
|
-
|
|
132
|
-
individu = simulation.persons
|
|
133
|
-
|
|
134
|
-
age_parent1 = individu.famille.demandeur('age', period='2013-01')
|
|
135
|
-
|
|
136
|
-
assert_near(age_parent1, [40, 40, 40, 40, 54, 54])
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
def test_complex_chain_2():
|
|
140
|
-
test_case = {
|
|
141
|
-
'individus': {'ind0': {'age': 30}, 'ind1': {'age': 31}, 'ind2': {'age': 32}, 'ind3': {'age': 33}},
|
|
142
|
-
'familles': {
|
|
143
|
-
'f1': {'parents': ['ind0', 'ind1']},
|
|
144
|
-
'f2': {'parents': ['ind2']},
|
|
145
|
-
'f3': {'parents': ['ind3']},
|
|
146
|
-
},
|
|
147
|
-
'foyers_fiscaux': {
|
|
148
|
-
'ff1': {'declarants': ['ind0', 'ind1']},
|
|
149
|
-
'ff2': {'declarants': ['ind2', 'ind3']},
|
|
150
|
-
},
|
|
151
|
-
'menages': {
|
|
152
|
-
'm1': {'personne_de_reference': 'ind0'},
|
|
153
|
-
'm2': {'personne_de_reference': 'ind1', 'autres': 'ind2'},
|
|
154
|
-
'm4': {'personne_de_reference': 'ind3'},
|
|
155
|
-
},
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
simulation = new_simulation(test_case)
|
|
159
|
-
|
|
160
|
-
assert_near(simulation.famille.demandeur.menage.personne_de_reference('age', period='2013-01'), [30, 31, 33])
|
|
161
|
-
assert_near(simulation.famille.conjoint.menage.personne_de_reference('age', period='2013-01'), [31, 0, 0])
|
|
162
|
-
assert_near(simulation.famille.demandeur.foyer_fiscal.declarant_principal('age', period='2013-01'), [30, 32, 32])
|
|
163
|
-
assert_near(simulation.foyer_fiscal.conjoint.famille.demandeur('age', period='2013-01'), [30, 33])
|
tests/test_metadata.py
DELETED
tests/test_nb_enfants.py
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
|
-
|
|
3
|
-
from openfisca_core import periods
|
|
4
|
-
from openfisca_core.tools import assert_near
|
|
5
|
-
|
|
6
|
-
from .test_entities import TEST_CASE_AGES, new_simulation
|
|
7
|
-
from .cache import tax_benefit_system
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def test_nb_enfants():
|
|
11
|
-
test_case = deepcopy(TEST_CASE_AGES)
|
|
12
|
-
year = 2013
|
|
13
|
-
test_case['period'] = year
|
|
14
|
-
simulation = tax_benefit_system.new_scenario().init_from_dict(test_case).new_simulation()
|
|
15
|
-
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf
|
|
16
|
-
|
|
17
|
-
month = periods.period(year).first_month
|
|
18
|
-
assert_near(nb_enf(simulation.famille, month, 3, 18), [2, 0])
|
|
19
|
-
assert_near(nb_enf(simulation.famille, month, 19, 50), [0, 1]) # Adults don't count
|
|
20
|
-
|
|
21
|
-
test_case['individus']['ind5']['autonomie_financiere'] = True
|
|
22
|
-
simulation_2 = new_simulation(test_case)
|
|
23
|
-
|
|
24
|
-
assert_near(nb_enf(simulation_2.famille, month, 19, 50), [0, 0])
|
tests/test_parameters.py
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
|
|
3
|
-
from .cache import tax_benefit_system
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def test_parameters():
|
|
7
|
-
parameters = tax_benefit_system.parameters
|
|
8
|
-
assert parameters is not None
|
|
9
|
-
for year in range(2006, datetime.date.today().year + 1):
|
|
10
|
-
parameters_at_instant = tax_benefit_system.get_parameters_at_instant(year)
|
|
11
|
-
assert parameters_at_instant is not None
|