-
Notifications
You must be signed in to change notification settings - Fork 101
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
Add a formula for taux_csg_remplacement #1101
Conversation
ad9fd7c
to
cbdd69c
Compare
@@ -3775,6 +3775,35 @@ def formula_2017_01_01(foyer_fiscal, period, parameters): | |||
# TODO : verrifier la formule de cette réduction pour les années 2004-2013, les cases changent de signification d'une année à l'autre, cela ne semble pas pris en compte dans le calcul (ex: f7xd) | |||
|
|||
|
|||
class invrev(Variable): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai du mal à voir le rapport entre ça et le sujet CSG ?…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Une erreur a été créer par l'absence de cette variable qui avait été virée par inadvertance dans une PR passée.
@@ -3,7 +3,11 @@ reference: Décret n° 2016-1818 du 22 décembre 2016 portant relèvement du sal | |||
de croissance - Article 1 | |||
unit: currency | |||
values: | |||
2001-08-01: | |||
1999-07-01: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pareil que pour invrev je ne vois pas le rapport avec le sujet de la PR…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Idem
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je n'ai pas l'impression que par "idem" tu veux dire "on a précédemment supprimé par erreur des valeurs de paramètre de valeur du SMIC et on les ajoute à la marge dans cette PR" - ça me semble improbable.
Si tu veux dire "on ajoute une correction à la marge dans cette PR" sans que ce soit pour autant corriger une régression, pour moi c'est un peu différent - il vaut mieux faire des PR pour un seul objectif ou plus largement un seul thème. Sinon c'est plus compliqué à review et il me semble que c'est un facteur aggravant des PR qui trainent longtemps en review.
A tout le moins mentionne l'intention de la modif dans le Changelog.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je voulais dire c'est dans les barèmes IPP.
Ce sont des paramètres que j'ai ajouté pour permettre de remonter dans le passé sans que cela casse. Je les vire.
@@ -44,7 +71,7 @@ class csg_deductible_chomage(Variable): | |||
def formula(individu, period, parameters): | |||
chomage_brut = individu('chomage_brut', period) | |||
csg_imposable_chomage = individu('csg_imposable_chomage', period) | |||
taux_csg_remplacement = individu('taux_csg_remplacement', period) | |||
taux_csg_remplacement = individu('taux_csg_remplacement', period, max_nb_cycles = 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je trouve ça bizarre que ta restriction sur le nombre de cyles soit dans l’appelant - je m’attendrais à ce que ça soit le job d’une fonction récursive de déterminer ses propres conditions d’arrêt de récursion
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Et en fait je me rends compte que je ne vois pas immédiatement où est la dépendance récursive… Quelle partie de la formule taux_csg_remplacement
fait appel à un autre calcul de taux_csg_remplacement
? (ETA: en fait tu m'as déjà donné une réponse via Slack; "le taux de CSG de l'année n dépend du RFR de l'année n-2 qui dépend des revenus de n-2 qui dépendent du taux de csg de n-2 etc", ignore ce commentaire)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pourquoi tu ne peux pas spécifier max_nb_cycles dans taux_csg_remplacement directement ? (ETA: on en a discuté avec @sandcha IRL, et j'ai analysé le code de Core qui gère max_nb_cycles, je penche très fortement vers l'idée que c'est ici qu'il faut ajouter max_nb_cycles:
Line 31 in 0800037
rfr = individu.foyer_fiscal('rfr', period = period.n_2) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK
@@ -27,11 +27,38 @@ class taux_csg_remplacement(Variable): | |||
label = u"Taux retenu sur la CSG des revenus de remplacment" | |||
definition_period = MONTH | |||
|
|||
def formula_2015(individu, period, parameters): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tu as une référence législative pour ce calcul du taux sur le RFR n-2 ? J'ai http://www.cdg29.bzh/sites/default/files/fond_documentaire/fi_remun_201801_12_crds_revenus_remplacement.pdf
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pareil que précédemment: ca va venir avec les barèmes IPP
@@ -3775,6 +3775,35 @@ def formula_2017_01_01(foyer_fiscal, period, parameters): | |||
# TODO : verrifier la formule de cette réduction pour les années 2004-2013, les cases changent de signification d'une année à l'autre, cela ne semble pas pris en compte dans le calcul (ex: f7xd) | |||
|
|||
|
|||
class invrev(Variable): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remplacer l'acronyme par un nom explicite ?
return (P.taux_gs * min_(f7gs, P.seuil_gs * (1 + maries_ou_pacses)) / 4 + | ||
P.taux_gu * min_(f7gu, P.seuil_gu * (1 + maries_ou_pacses)) / 4 + | ||
P.taux_xg * min_(f7xg, P.seuil_xg * (1 + maries_ou_pacses)) / 4 + | ||
P.taux_gt * f7gt + P.taux_gt * f7gv) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indenter ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK
CHANGELOG.md
Outdated
* Périodes concernées : toutes. | ||
* Zones impactées : `prelevements_obligatoires/prelevements_sociaux/contributions_sociales/remplacement`. | ||
* Détails : | ||
- Ajout d'une formule pour calculer les taux de CSG sur les revenus de remplacement |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Compléter par les autres ajouts de la PR (invrev...) ?
CHANGELOG.md
Outdated
* Zones impactées : `prelevements_obligatoires/prelevements_sociaux/contributions_sociales/remplacement`. | ||
* Détails : | ||
- Ajoute une formule pour calculer les taux de CSG sur les revenus de remplacement | ||
- Ré-ajoute `invret` qui avait été malencontreusement retirée dans le passé |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
invret -> invrev
@@ -27,12 +27,38 @@ class taux_csg_remplacement(Variable): | |||
label = u"Taux retenu sur la CSG des revenus de remplacment" | |||
definition_period = MONTH | |||
|
|||
def formula_2015(individu, period, parameters): | |||
rfr = individu.foyer_fiscal('rfr', period = period.n_2, max_nb_cycles = 1) | |||
nbptr = individu.foyer_fiscal('nbptr', period = period.n_2, max_nb_cycles = 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je pense pas que le nombre de parts n-2 dépende du taux de CSG…
@@ -255,7 +255,7 @@ def solve_function(retraite_brute): | |||
'retraite_imposable_pour_inversion', period, options = [DIVIDE]) | |||
|
|||
# Calcule les pensions de retraite brutes à partir des pensions imposables. | |||
taux_csg_remplacement = individu('taux_csg_remplacement', period) | |||
taux_csg_remplacement = individu('taux_csg_remplacement', period, max_nb_cycles = 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je pense que le max_nb_cycles
est à supprimer ici. Mon raisonnement est que cette décision incombe à la fonction qui décide de faire un appel créant une dépendance circulaire (en l'occurrence taux_csg_remplacement
demande le RFR n-2 en sachant que cela peut déclencher un calcul de revenu qui dépend à son tour de ce même taux). Sinon on dit implicitement que tout appel à une fonction de calcul doit se préoccuper d'une dépendance circulaire potentielle.
Merci @Morendil pour ta patience sur cette PR qui a eu très vite raison de la mienne ! |
@Morendil : je vois que ma formulation est maladroite: ce n'est bien entendu pas ta patience qui a eu raison de la mienne mais bien la PR ;-) |
J'ai l'impression que cette PR crée des cycles, je tente de créer un cas de test minimal mais l'investigation des cycles est très compliqué (openfisca/openfisca-core#658) |
@guillett Qu'est-ce que tu observes qui te donne cette impression ? |
Je crois que j'ai une situation d'exemple {
"individus": {
"demandeur": {
"date_naissance": {
"2018-10": "1952-01-05",
"2018-09": "1952-01-05",
"2018-08": "1952-01-05",
"2018-07": "1952-01-05"
},
"retraite_imposable": {
"2018-09": null
},
"salaire_imposable": {
"2018": 1000,
"2017": 1000,
"2016": 1000
}
}
},
"familles": {
"_": {
"parents": [
"demandeur"
],
"enfants": [],
"logement_social_eligible": {
"2018-10": null
}
}
},
"foyers_fiscaux": {
"_": {
"declarants": [
"demandeur"
],
"personnes_a_charge": []
}
},
"menages": {
"_": {
"personne_de_reference": [
"demandeur"
],
"enfants": []
}
}
} |
C'est testable sur https://betagouv.github.io/openfisca-tracer/ :) avec https://fr.openfisca.org/api/v24 La demande de calcul de retraite_imposable génère le cycle. logement_social_eligible est calculé pour mettre en évidence le fait que rfr est à zéro alors qu'il devrait être environ à 1000 Vous pouvez comparer les résultats avec https://openfisca.mes-aides.gouv.fr (seule version accessible en ligne que j'ai trouvé ; cette version est environ à 22.3.0) |
Wow je ne savais pas qu'on pouvait faire ça! Merci pour le tuyau. Je n'arrive pas à reproduire un problème de boucle mais peut-être est-ce que je m'y prends mal ou bien je ne sais pas quoi observer… |
|
? (ETA oh, I got it, that would be Mauko's Cockney accent then) |
@Morendil Merci, typo 😄 C'est en effet noice (super nice), pas noise. |
Pour info, voilà quelques faux cycles détectés. (faux car les périodes sont différentes). To be continued...
|
@guillett : il me semble que ces faux cycles sont inévitables si on part de revenu de remplacement bruts et que l'on veut calculer des prestations. En effet, le taux de csg à appliqué aux revenus de remplacement dépends du revenu fiscal de référence qui dépend des revenus de remplacement imposables antérieurs qui dépendent du taux de CSG antérieur etc. Donc on remonte indéfiniment dans le passé. |
Je suis d'accord avec toi, je suis en train d'essayer de les mettre en évidence. Je crois que la façon dont ces faux cycles sont actuellement gérés n'est pas la meilleure (presque tout devrait tolérer de tels cycles). |
On peut penser à une backstop date pour laquelle soit on garde la dernière valeur (hypothèse de permanence dans le passé= soit on prend la valeur par défaut. |
En tout cas elle est mal documentée, et assez complexe, donc si on peut trouver mieux, c'est bien! |
prelevements_obligatoires/prelevements_sociaux/contributions_sociales/remplacement
.Ces changements (effacez les lignes ne correspondant pas à votre cas) :
Quelques conseils à prendre en compte :
setup.py
.CHANGELOG.md
.Et surtout, n'hésitez pas à demander de l'aide ! :)