Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ipp 12 : Update calcul du quotient familial, ajout nouvelle réduction sous conditions de revenus #918

Merged
merged 17 commits into from
Apr 6, 2018

Conversation

claireleroy
Copy link
Contributor

@claireleroy claireleroy commented Feb 21, 2018

Fixes #338

Les modifications de cette PR sont comparées à la branche ipp-update-rpnst (#917)

  • Evolution du système socio-fiscal
  • Périodes concernées : toutes
  • openfisca_france/model/caracteristiques_socio_demographiques/demographie.py. (label juste)
  • openfisca_france/model/revenus/autres.py (start_date juste)
  • openfisca_france/model/prelevements_obligatoires/impot_revenu/ir.py
  • openfisca_france/parameters/impot_revenu/plafond_qf
  • openfisca_france/parameters/impot_revenu/quotient_familial/veuf.yaml
  • Détails :
    • Ajout de la nouvelle réduction d'impôt de 20% "sous condition de revenus" (2016-) qui s'impute juste après la décote dans le calcul de l'impôt (https://www.impots.gouv.fr/portail/files/formulaires/2042/2017/2042_1891.pdf, p.3)
    • Corrige et nettoie le calcul du plafonnement du quotient familial à partir de 2013
    • Correction du calcul du nombre de parts fiscales (demi-part pour personnes seules ayant élevé des enfants caseL, nombre de parts des veufs avec enfants revalorisé depuis 2008 ..)
    • Création de paramètres spécifiques à la réduction d'impôt spécial DOM-TOM qui intervient juste après le plafonnement du quotient familial (pour l'instant non calculée mais à termes oui ?)
    • Mise à jour des paramètres

Ces changements :

  • Ajoutent une fonctionnalité (par exemple ajout d'une variable).
  • Corrigent ou améliorent un calcul déjà existant.
  • Impactent l'API publique d'OpenFisca France (par exemple renommage ou suppression de variables).

Copy link
Member

@benjello benjello left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ClaireLeroyIPP : s-tu bien testé le QF ?
Normalement il était bien foutu donc j'ai un peu peur qu'il en soit pas assez testé.

@claireleroy
Copy link
Contributor Author

@benjello Pour cette PR je peux construire (ou récupérer dans ce que j'ai déjà fait) des tests précis de cas type de foyers dont le QF est plafonné, et intégrer les tests à cette PR. Comme ça, on est plus sereins ?

unit: currency
values:
2001-01-01:
value: 5100.0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ClaireLeroyIPP @Anna-Livia : est-on obligé de mettre un chiffre après la virgule nul ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@benjello Je ne sais pas pourquoi mais en tout cas c'est comme ça dans quasiment tous les paramètres de l'IR, c'est pour ça que j'en ai mis.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Anna-Livia @fpagnoux @sandcha : sauriez-vous nous en dire plus ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

À mon avis les .0 sont apparus quand les paramètres ont été migrés automatiquement du XML vers le YAML.
Il n'y a pas de raison que ce soit nécessaire de les mettre.

@@ -1066,28 +1066,22 @@ def formula(foyer_fiscal, period, parameters):
A = ir_ss_qf
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quel est le role de ces variables ? pourquoi ne pas utiliser ir_ss_qf ou ìr_brut` directement ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce n'est pas moi qui ai introduit cela, mais j'ai repris la notation utilisée avant. Enfait, ces "A", "B", "C" etc. reprennent les notations des lignes de la "Fiche facultative de calculs" des brochures pratiques de l'impôt (ex: p.314 de la brochure IR 2014 http://www2.impots.gouv.fr/documentation/2014/brochure_ir/index.html#314).

  • L'avantage c'est que ça permet de rendre le code plus lisible pour quelqu'un comme moi qui arrive après et qui veut verrifier ou modifier le code de l'IRPP
  • L'inconvénient c'est que c'est incompréhensible pour un utilisateur lambda qui n'a pas la fiche devant les yeux...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En règle général, c'est compliqué de trouver des noms qui font "sens" pour l'impôt, car justement c'est souvent des calculs purement techniques et très long. C'est très différent de la partie prestations sociales selon moi, où là on peut faire des formules et des noms de variables explicites et compréhensibles, et faire en sorte que les étapes de calculs soient claires pour n'importe quel utilisateur.

(Autre exemple du côté un peu abstrait de l'IR, c'est les cases des déclarations, comme 'f7ba' par exemple, ça n'avancerais pas vraiment d'essayer de toutes leur trouver un nom explicite à chacune, et ce serait impossible comme il y en a plus de 1000, c'est même presque inutile de leur donner un label car le nom d'une case est limite plus explicite que le sens qu'elle revêt bien souvent)


# TODO: année en dur... pour caseH
condition63 = (celibataire_ou_divorce | (veuf & not_(jeune_veuf))) & not_(caseN) & (nb_pac == 0) & (caseK | caseE) & (caseH < 1981)
aa0 = (nbptr - nb_adult) * 2 # nombre de demi part excédant nbadult
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-il possible de trouver des noms de variables plus explicites ? demi_parts_hors_adultes ?
idem pour aa1, B1, B2, B3 ...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cf. commentaires précédents, les étapes du calcul du plafonnement du quotient familial sont assez longues et c'est difficile de leur donner du sens avec des noms de variables plus explicites

ir_plaf_qf = foyer_fiscal('ir_plaf_qf', period)
decote = foyer_fiscal('decote', period)
nb_adult = foyer_fiscal('nb_adult', period)
nbptr = foyer_fiscal('nbptr', period)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

est-ce que nbptr pourrait être plus explicite ?

nb_adult = foyer_fiscal('nb_adult', period)
nbptr = foyer_fiscal('nbptr', period)
rfr = foyer_fiscal('rfr', period)
parameters = parameters(period).impot_revenu.plafond_qf.reduction_ss_condition_revenus
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

je mettrai plutôt Ppour cohérence avec les autres ou reduction_ss_condition_revenus pour le sens métier

plafond1 = (parameters.seuil1 * nb_adult + parameters.seuil_maj_enf * 2 * (nbptr - nb_adult))
plafond2 = (parameters.seuil2 * nb_adult + parameters.seuil_maj_enf * 2 * (nbptr - nb_adult))

reduc = ((rfr < plafond1) * (parameters.taux * (ir_plaf_qf - decote)) +
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cette expression est peu lisible. Est ce que ce serait possible de la découper ?

unit: currency
values:
2001-01-01:
value: 5100.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il faudrait ajouter une ligne vide à la fin du fichier

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il est en général possible de configurer son éditeur pour que ce soit fait automatiquement à la sauvegarde. (here for vscode)

Copy link
Contributor Author

@claireleroy claireleroy Apr 6, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok bon à savoir ! je corrige

unit: currency
values:
2001-01-01:
value: 6700.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il faudrait ajouter une ligne vide à la fin du fichier

unit: currency
values:
2001-01-01:
value: 40.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il faudrait ajouter une ligne vide à la fin du fichier

2012-01-01:
value: 120.0
2013-01-01:
value: Null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il faudrait ajouter une ligne vide à la fin du fichier

2015-01-01:
value: 1682.0
2016-01-01:
value: 1684.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il faudrait ajouter une ligne vide à la fin du fichier

@claireleroy claireleroy changed the base branch from ipp-update-rpns to master April 6, 2018 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants