-
Notifications
You must be signed in to change notification settings - Fork 97
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
Corrige les erreurs de calcul sur les allègements #862
Conversation
J'ai ajouté un test pour mettre en évidence le bug et le comportement attendu (tel que je le comprends) sur coefficient_proratisation, et implémenté le comportement attendu. Cela ne corrige pas encore le test fonctionnel tel qu'il était initialement rédigé à cause d'un écart de 7 centimes, qu'il faudrait peut-être essayer d'expliquer. En augmentant la marge d'erreur à 10 centimes les tests de décembre deviennent passants, mais il reste encore 3 échecs sur les tests de novembre. Il est possible qu'il reste d'autres bugs dans le calcul. |
Après quelques tâtonnements j'arrive à un état stable, au prix d'une modification du test pour le cas d'un salarié embauché pour le seul mois de novembre dans le cas d'un recouvrement anticipé avec régularisation en fin de période. Mon interprétation de "anticipé" m'amène à affecter l'allègement à novembre et pas décembre, et la régularisation est alors de 0. Mais je me suis peut-être trompé. Il serait utile de documenter par des références précises le fonctionnement des modes de recouvrement, je n'ai trouvé des informations en ligne que sur le mode progressif. Le noeud du problème était bien la variable Autre problème, Je suis perplexe quant au fait qu'une variable comme |
@Anna-Livia Oh yeah! Bon ça c'est la bonne nouvelle :) Du coup je reformule ce qui me rend perplexe, pourquoi |
Je ne suis pas sûr que l'on veuille mettre definition_period = ETERNITY pour |
@benjello Le seul |
@Anna-Livia : openfisca a été étendu spécifiquement pour gérer plusieurs périodes (retraite, recouvrement des allègements de charge etc) sinon toutes les variables seraient à ETERNITY. |
Je pense que l'on peut se corriger pour l'usage de @Morendil avec un set_input_variable bien senti. |
Il me semble que dans une situation où se succèdent (ou se chevauchent) deux contrats de travail, la valeur de la variable "date de début du contrat" sera fonction non pas de la période à laquelle on évalue cette variable, mais de la finalité pour laquelle on l'évalue. Pour le dire autrement, la formule de la variable Que fait |
@Morendil : on ne gère pas plusieurs contrats de travail en même temps mais on peut gérer une situation ou un individu à plusieurs contrats de travail qui se succèdent. |
@Anna-Livia @Morendil : pour l'usage considéré modifier le set_input pour qu'il mette la même date de début du contrat de travail pour tous les mois de l'année. Ou une extension qui converti en period en ETERNITY Pour plusieurs contrat de travail successifs: spécifier chaque moi la date de début et la date de fin du contrat de travail |
Merci @benjello pour ces explications 🙌 |
@Anna-Livia : à tester though, j'expose comment je vois les choses, je ne garantis pas que c'est bien codé ;-) |
On a me semble-t-il le même problème dans le cas d'un salarié qui ferait une semaine d'un même mois chez un employeur X et les trois semaines restantes chez un employeur Y: ces deux contrats consécutifs sont "simultanés" du point de vue d'une variable déclarant |
@Morendil : oui on ne peut pas descendre plus fin que le mois. |
@@ -52,8 +52,8 @@ def formula(self, simulation, period): | |||
# forfait_heures_annee | |||
# forfait_jours_annee ] | |||
|
|||
contrat_de_travail_debut = simulation.calculate('contrat_de_travail_debut', period) | |||
contrat_de_travail_fin = simulation.calculate('contrat_de_travail_fin', period) | |||
contrat_de_travail_debut = simulation.calculate('contrat_de_travail_debut', '2099-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.
Il semblerait que les tests passent sans cette modification. Est-ce que tu reproduit @Morendil ?
contrat_de_travail_debut = simulation.calculate('contrat_de_travail_debut', period) | ||
contrat_de_travail_fin = simulation.calculate('contrat_de_travail_fin', period) | ||
contrat_de_travail_debut = simulation.calculate('contrat_de_travail_debut', '2099-01') | ||
contrat_de_travail_fin = simulation.calculate('contrat_de_travail_fin', '2099-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.
Il semblerait que les tests passent sans cette modification. Est-ce que tu reproduit @Morendil ?
|
||
# Montant de l'allegment | ||
return (ratio_smic_salaire < law.plafond_en_nombre_de_smic) * law.reduction * assiette | ||
return (assiette < law.plafond_en_nombre_de_smic * smic_proratise) * law.reduction * assiette |
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.
Bien vu !
tests/test_coefficient.py
Outdated
def test_coefficient_proratisation_only_contract_periods_wide(): | ||
tax_benefit_system = FranceTaxBenefitSystem() | ||
scenario = tax_benefit_system.new_scenario() | ||
scenario.init_single_entity(period='2017', # wide: we simulate for the year |
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.
indentation: 4 espaces ;-)
@benjello Merci et done ! Une remarque meta: je vais me permettre de passer outre ton "request changes" pour cette PR à ce stade là, en usant du "Dismiss review", pour les raisons suivantes:
A titre personnel j'use du "request changes" avec la plus grande parcimonie pour beta.gouv.fr et seulement quand j'ai l'impression que la PR concernée dégraderait le code. Je préfère encourager chaque contributeur à faire preuve de responsabilité quant à la prise en charge de la qualité du code poussé. Le plus souvent je donne un "Approve" et des suggestions d'amélioration, plutôt que risquer de devenir le bottleneck pour la publication d'une PR. Je cite cet usage personnel à titre informatif et on peut bien entendu choisir d'adopter une norme différente pour OF-Fr. |
@Morendil: tu as bien fait. Généralement, on me reproche d'être trop laxiste ... J'ai peut-être surréagi |
prelevements_obligatoires/prelevements_sociaux/cotisations_sociales/allegements
.Ces changements (effacez les lignes ne correspondant pas à votre cas) :