{"id":14483189,"url":"https://github.com/openfisca/calculette-impots-python","last_synced_at":"2026-01-23T09:31:32.138Z","repository":{"id":140046400,"uuid":"55071696","full_name":"openfisca/calculette-impots-python","owner":"openfisca","description":"Traduction en langage Python du code source (en langage M) du calculateur des impôts sur le revenu et sur la fortune","archived":false,"fork":false,"pushed_at":"2016-04-01T04:37:32.000Z","size":5439,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-12-27T04:32:16.151Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://git.framasoft.org/openfisca/calculette-impots-python","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openfisca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-03-30T14:51:41.000Z","updated_at":"2023-12-29T07:10:54.000Z","dependencies_parsed_at":"2024-01-17T08:44:20.422Z","dependency_job_id":"3d24094f-c33a-403f-ab99-8c3e9315b418","html_url":"https://github.com/openfisca/calculette-impots-python","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/openfisca/calculette-impots-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfisca%2Fcalculette-impots-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfisca%2Fcalculette-impots-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfisca%2Fcalculette-impots-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfisca%2Fcalculette-impots-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openfisca","download_url":"https://codeload.github.com/openfisca/calculette-impots-python/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfisca%2Fcalculette-impots-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272800747,"owners_count":24995138,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-03T00:01:35.204Z","updated_at":"2026-01-23T09:31:32.088Z","avatar_url":"https://github.com/openfisca.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Calculette Impôts traduite en Python\n\n## Installation\n\nLe langage Python 3 est utilisé.\n\nIl est nécessaire d'avoir au préalable installé le paquet [calculette-impots-m-language-parser](https://git.framasoft.org/openfisca/calculette-impots-m-language-parser).\n\nCe paquet n'est pas publié sur le dépôt [PyPI](https://pypi.python.org/pypi) donc pour l'installer il faut passer par `git clone`.\n\n```\ngit clone https://git.framasoft.org/openfisca/calculette-impots-python.git\ncd calculette-impots-python\npip3 install --editable . --user\n```\n\n\u003e L'option `--user` sert sur les systèmes GNU/Linux.\n\nUn utilisateur plus expérimenté en Python peut utiliser\nun [`virtualenv`](https://virtualenv.readthedocs.org/en/latest/) s'il le souhaite.\n\n## Utilisation\n\nCe paquet installe une commande `calculette-impots` dans votre répertoire utilisateur.\nCela signifie que vous pouvez la taper dans un terminal et elle sera reconnue, sauf si elle a été installée\nen dehors du \"PATH\".\n\nCette commande accepte des sous-commandes. Voyons son utilisation :\n\n```\n$ calculette-impots\nUsage:\n  calculette-impots calculate [--no-verifs] VARIABLE...\n  calculette-impots info VARIABLE...\n  calculette-impots (-h | --help)\n  calculette-impots --version\n```\n\n### La sous-commande `info`\n\nLa sous-commande `info` permet d'afficher des informations sur les variables, en particulier leur type,\nquelques attributs, leurs éventuelles dépendances et dépendances inverses.\n\nExemple :\n\n```\n$  $ calculette-impots info TSHALLOV\n{\n  \"TSHALLOV\": {\n    \"variable_definition\": {\n      \"alias\": \"1AJ\",\n      \"attributes\": {\n        \"acompte\": 1,\n        \"avfisc\": 0,\n        \"categorie_TL\": 20,\n        \"classe\": 0,\n        \"cotsoc\": 5,\n        \"ind_abat\": 1,\n        \"nat_code\": 0,\n        \"priorite\": 10,\n        \"rapcat\": 4,\n        \"sanction\": 8\n      },\n      \"description\": \"Salaires - Declarant 1\",\n      \"name\": \"TSHALLOV\",\n      \"restituee\": true,\n      \"subtype\": \"revenu\",\n      \"tgvh_linecol\": [\n        13637,\n        1\n      ],\n      \"type\": \"variable_saisie\"\n    },\n    \"variable_reverse_dependencies\": [\n      \"ABTS1AJ\",\n      \"INDPPEV\",\n      \"INDREV1A8IR\",\n      [...]\n    ]\n  }\n}\n```\n\nCertains bouts ont été coupés pour ne pas polluer le README.\n\nCeci était une variable de saisie mais on peut également obtenir des infos les variables calculées.\n\n### La sous-commande `calculate`\n\nSans argument, la sous-commande `calculate` calcule toutes les variables restituées,\nsans remplir aucune case de la déclaration. Cela équivaut à un célibataire sans enfants et sans revenu.\n\nIl faut tout de même préciser une variable de saisie spéciale (`V_ANREV` pour \"Annee des revenus\") pour laquelle\non donne la valeur `2014` car ici on calcule les impôts de 2015 sur les revenus de 2014.\nSi on ne le fait pas un \"warning\" nous le rappelle.\n\nDe plus, pour l'instant, on peut passer une autre option (`--no-verifs`) à la commande `calculette-impots`\npour ignorer les \"vérifs\", qui sont des tests validant la cohérence des calculs.\n\n```\n$ calculette-impots calculate V_ANREV=2014 --no-verifs\n{\n  \"calculate_results\": {\n    \"ABSPE\": 9,\n    \"APPLI_BATCH\": 1,\n    \"CIIMSI\": 2,\n    \"CIRIRF\": 2,\n    [...]\n  }\n}\n```\n\nLe JSON de sortie est coupé ici pour ne pas surcharger le README.\nPour info on peut utiliser un outil comme [`jq`](https://stedolan.github.io/jq/) pour le manipuler.\n\nCeci était une simulation à vide, maintenant il serait intéressant de remplir les cases de la déclaration d'impôts.\n\n## Cas-types\n\nTout d'abord il faut savoir qu'on peut demander à calculer une ou plusieurs variables en particulier.\nPour cela il suffit d'ajouter le nom des variables mais sans le signe \"=\".\n\n```\n$ calculette-impots calculate V_ANREV=2014 IRN IDRS2 --no-verifs\n{\n  \"calculate_results\": {\n    \"IDRS2\": 0,\n    \"IRN\": 0\n  }\n}\n```\n\nIl faut aussi savoir que la variable `IRN` correspond (grosso-modo) à l'impôt total. C'est pour cela qu'on la demande.\n\nTestons à présent quelques cas-types.\n\n- Un célibataire sans enfants gagnant 10000€ par an\n```\n$ calculette-impots calculate V_ANREV=2014 TSHALLOV=10000 IRN --no-verifs\n{\n  \"calculate_results\": {\n    \"IRN\": 0\n  }\n}\n```\n- Un célibataire sans enfants gagnant 30000€ par an\n```\n$ calculette-impots calculate V_ANREV=2014 TSHALLOV=30000 IRN --no-verifs\n{\n  \"calculate_results\": {\n    \"IRN\": 2461\n  }\n}\n```\n- Un couple marié (date du mariage 05/05/1980) sans enfants dont le déclarant 1 gagne 10000€ par an et le déclarant 2 gagne 20000€ par an\n```\n$ calculette-impots calculate V_ANREV=2014 TSHALLOV=10000 TSHALLOC=20000 V_0AM=1 V_0AX=05051980 IRN --no-verifs\n{\n  \"calculate_results\": {\n    \"IRN\": 264\n  }\n}\n```\n\n## Simulateur en ligne\n\nPour comparer les résultats avec ceux du simulateur en ligne :\nhttp://www3.finances.gouv.fr/calcul_impot/2015/simplifie/index.htm\n\nUn script permet d'appeler le simulateur en ligne :\n\n```\npython3 calculette_impots/scripts/calculette_online.py\n```\n\nCependant il n'est pas peaufiné au point d'accepter des arguments sur la ligne de commande.\nIl faut donc l'éditer pour changer les valeurs.\n\nDe plus, les noms des variables ne sont pas les mêmes que dans le code source en langage M.\nIci ce sont les \"aliases\" qui sont définis dans le fichier `tgvH.m` (dans le projet [m-source-code](https://git.framasoft.org/openfisca/calculette-impots-m-source-code)).\n\nLes contributions sont les bienvenues !\n\n## Transpilation de l'AST JSON en Python\n\n\u003e Transpiler signifie compiler vers un autre langage de programmation.\n\nCette étape n'est utile que lorsque les fichiers JSON définissant l'AST changent.\nCeux-ci sont dans le dépôt [m-language-parser](https://git.framasoft.org/openfisca/calculette-impots-m-language-parser).\n\n```\npython3 calculette_impots/scripts/json_ast_to_python.py /path/to/calculette-impots-m-language-parser/json\n```\n\n## Qualité du code\n\n```\nflake8 --max-line-length 120 .\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfisca%2Fcalculette-impots-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenfisca%2Fcalculette-impots-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfisca%2Fcalculette-impots-python/lists"}