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 update charges deductibles #907

Merged
merged 49 commits into from
Mar 5, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f0623ca
Update bareme IR 2016
Anna-Livia Feb 19, 2018
ae39c19
Update parameters of 'abatpro' 2016
Anna-Livia Feb 19, 2018
95fe314
Update parameters of charges deductibles 2016
Anna-Livia Feb 19, 2018
3a49b47
Update parameters of decote 2015
Anna-Livia Feb 19, 2018
26dfcf6
Fix error in parameters value for tax reduction 'mohist'
Anna-Livia Feb 19, 2018
7942eee
Update parameters values for tax reduction 'donapd' 2014-2016
Anna-Livia Feb 19, 2018
9af5ba1
update Cessions titres réalisées par un entrepreneur
Anna-Livia Feb 19, 2018
dbc72ff
Update parameters
Anna-Livia Feb 19, 2018
f953e0e
Update parameter of income tax
Anna-Livia Feb 19, 2018
7e4927b
Correct parameters dates
Anna-Livia Feb 19, 2018
a500945
Add charges deductibles to income tax computation for 2015-2016 incomes
Anna-Livia Feb 19, 2018
af7f04d
Update 'grosses_reparations' for year 2015-2016 and correct for year …
Anna-Livia Feb 19, 2018
9596fd2
Correct formula of variable 'grosses_reparations' for year 2009-2012
Anna-Livia Feb 19, 2018
75a9920
Update CHANGELOG and setup.py
Feb 21, 2018
35b0312
Add charges deductibles to income tax computation for 2015-2016 incomes
Anna-Livia Feb 19, 2018
315f7b7
Update 'grosses_reparations' for year 2015-2016 and correct for year …
Anna-Livia Feb 19, 2018
bfb8cf4
Correct formula of variable 'grosses_reparations' for year 2009-2012
Anna-Livia Feb 19, 2018
591b6be
Merge branch 'ipp-update-charges-deductibles' of https://github.com/o…
Feb 21, 2018
3d44ae4
Update CHANGELOG et setup.py
Feb 21, 2018
5068b5a
Ajout références
Feb 21, 2018
d5c7a70
Add charges deductibles to income tax computation for 2015-2016 incomes
Anna-Livia Feb 19, 2018
e1a0fdd
Update 'grosses_reparations' for year 2015-2016 and correct for year …
Anna-Livia Feb 19, 2018
cb96b8b
Correct formula of variable 'grosses_reparations' for year 2009-2012
Anna-Livia Feb 19, 2018
52dbc2c
Update CHANGELOG et setup.py
Feb 21, 2018
b0e23d7
Update CHANGELOG
Feb 21, 2018
2e62f83
Merge branch 'ipp-update-charges-deductibles' of https://github.com/o…
Feb 21, 2018
a731552
Non end_date + Label plus explicite
Feb 21, 2018
540ec0a
Noms de variables plus explicite
Feb 22, 2018
c182523
Ajout référence
Feb 22, 2018
19a4c80
Update CHANGELOG and setup.py
Feb 22, 2018
0d1ea37
Make formula and variables more explicit
Feb 23, 2018
37f8cbf
Merge branch 'master' into ipp-update-baremes
claireleroy Feb 26, 2018
4fa0938
Update setup.py
Feb 26, 2018
aec13d2
Merge branch 'ipp-update-baremes' of git+ssh://github.com/openfisca/o…
Feb 26, 2018
bca6335
Merge branch 'ipp-update-baremes' into ipp-update-charges-deductibles
claireleroy Feb 26, 2018
0f05eda
Add charges deductibles to income tax computation for 2015-2016 incomes
Anna-Livia Feb 19, 2018
fd631e7
Update 'grosses_reparations' for year 2015-2016 and correct for year …
Anna-Livia Feb 19, 2018
7cc60bd
Correct formula of variable 'grosses_reparations' for year 2009-2012
Anna-Livia Feb 19, 2018
1bc7664
Update CHANGELOG and setup.py
Feb 21, 2018
9b81919
Non end_date + Label plus explicite
Feb 21, 2018
c54e93e
Noms de variables plus explicite
Feb 22, 2018
97b9179
Ajout référence
Feb 22, 2018
26ab2e0
Make formula and variables more explicit
Feb 23, 2018
f140627
Update CHANGELOG and setup.py
Feb 28, 2018
09c6acc
Update CHANGELOG
Feb 28, 2018
d2ad4c4
Correction d'erreurs dans la formule de 'grosses_reparations'
Feb 28, 2018
f1b5655
Update CHANGELOG
Mar 1, 2018
cd89a15
Merge branch 'master' into ipp-update-charges-deductibles
Mar 1, 2018
ad2372d
Update setup.py
Mar 1, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog


### 20.2.0 [#907](https://github.com/openfisca/openfisca-france/pull/907)

Évolution du système socio-fiscal.
* Périodes concernées : 2009 - 2016
* Zones impactées : openfisca_france/model/prelevements_obligatoires/impot_revenu/charges_deductibles.py
* Détails :
- Ammélioration du calcul des grosses réparations et de leurs prise en compte dans le calcul des charges déductibles
- Ajout de nouvelles variables d'inputs pour les cases de l'IR correspondantes

### 20.1.0 [#884](https://github.com/openfisca/openfisca-france/pull/884)

* Évolution du système socio-fiscal.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ class f6hj(Variable):
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses des années antérieures"
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2009"
# start_date = date(2010, 1, 1)
definition_period = YEAR

Expand All @@ -223,7 +223,7 @@ class f6hk(Variable):
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses des années antérieures"
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2010"
# start_date = date(2011, 1, 1)
definition_period = YEAR

Expand All @@ -233,7 +233,7 @@ class f6hl(Variable):
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses des années antérieures"
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2011"
# start_date = date(2012, 1, 1)
definition_period = YEAR

Expand All @@ -243,10 +243,37 @@ class f6hm(Variable):
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses des années antérieures"
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2012"
# start_date = date(2013, 1, 1)
definition_period = YEAR

class f6hn(Variable):
cerfa_field = u"6HN"
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2013"
# start_date = date(2014, 1, 1)
definition_period = YEAR

class f6ho(Variable):
cerfa_field = u"6HO"
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2014"
# start_date = date(2015, 1, 1)
definition_period = YEAR

class f6hp(Variable):
cerfa_field = u"6HP"
value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Dépenses de grosses réparations effectuées par les nus-propriétaires: report des dépenses de l'année 2015"
# start_date = date(2016, 1, 1)
definition_period = YEAR


# Sommes à rajouter au revenu imposable
class f6gh(Variable):
Expand Down Expand Up @@ -335,7 +362,6 @@ class cd1(Variable):
label = u"Charges déductibles non plafonnées"
reference = "http://impotsurlerevenu.org/definitions/215-charge-deductible.php"
definition_period = YEAR
end = '2014-12-31'

def formula_2002_01_01(foyer_fiscal, period, parameters):
'''
Expand Down Expand Up @@ -675,16 +701,107 @@ class grosses_reparations(Variable):
value_type = float
entity = FoyerFiscal
label = u"Dépenses de grosses réparations des nus-propriétaires"
reference = u"http://bofip.impots.gouv.fr/bofip/1852-PGP"
definition_period = YEAR

def formula_2009(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires (case 6CB et 6HJ)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Serait-il possible d'ajouter une référence ?

Copy link
Contributor

Choose a reason for hiding this comment

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

Par rapport à la end-date ? C'est juste que cette formule est valide après 2014 (j'ai mis 2016 comem end date parce que c'est la dernière année pour laquelle je suis sure que la formule est valide mais en soi on peut virer la end-date puisqu'à priori la formule sera valide chaque année)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Par rapport à la formule en général, il y a t'il une URL qui décrit ce dispositif, type : http://bofip.impots.gouv.fr/bofip/1852-PGP
On pourrait le mettre dans un attribut reference de la formule.
Désolée pour la confusion :/

'''

f6cb = foyer_fiscal('f6cb', period)
Copy link
Contributor Author

@Anna-Livia Anna-Livia Feb 21, 2018

Choose a reason for hiding this comment

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

Le code de cette formule me parait être beaucoup de copié-collé. Est-ce nécéssaire ?
Quel serait le risque de faire :

class grosses_reparations(Variable):
    value_type = float
    entity = FoyerFiscal
    label = u"Dépenses de grosses réparations des nus-propriétaires"
    definition_period = YEAR

    def formula_2009(foyer_fiscal, period, parameters):
        '''
        Dépenses de grosses réparations des nus-propriétaires
        '''
        somme_reparations = (
               foyer_fiscal('f6cb', period) +
               foyer_fiscal('f6cj', period) + # report année 2009
               foyer_fiscal('f6hk', period) +  # report année 2010
               foyer_fiscal('f6hl', period) +  # report année 2011
               foyer_fiscal('f6hm', period) +  # report année 2012
               foyer_fiscal('f6hn', period) +  # report année 2013
               foyer_fiscal('f6ho', period) +  # report année 2014
               foyer_fiscal('f6hp', period)   # report année 2015
        )
   
        plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

        return min_( somme_reparations, plafond_grosses_reparations)

De ce que j'ai compris, f6hj n'existe qu'à partir de 2010, f6hk qu'à partir de 2011 ...
Comme ce sont des inputs variables, elle n'ont pas de start date définie, ce qui voudrait dire qu'un utilisateur pourrait par erreur les renseigner sur une période antérieure à leur création, ce qui rendrait le calcul faux.

Or dans OF, c'est à l'utilisateur d'envoyer les bons inputs. Même lorsqu'une variable a une end_date, elle sera supplantée par un input mis par l'utilisateur.
ex : si je met une valeur en 2018-01 à la paje_clca(dont le end_date est 2017-04), le calcul de la paje pour 2018-01 sera affecté.

Si vous estimez que le risque est trop important, il est possible d'écrire :

    def formula_2009(foyer_fiscal, period, parameters):
        '''
        Dépenses de grosses réparations des nus-propriétaires
        '''
            somme_reparations = (
                        foyer_fiscal('f6cb', period) +
                        np.where(period > '2009', foyer_fiscal('f6hj', period)) +  # report année 2009
                        np.where(period > '2010', foyer_fiscal('f6hk', period))  # report année 2010
                        np.where(period > '2011', foyer_fiscal('f6hl', period)) # report année 2011
                        np.where(period > '2012', foyer_fiscal('f6hm', period)) # report année 2012
                        np.where(period > '2013', foyer_fiscal('f6hn', period)) # report année 2013
                        np.where(period > '2014', foyer_fiscal('f6ho', period)) # report année 2014
                        np.where(period > '2015', foyer_fiscal('f6hp', period)) # report année 2015
        )

        plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

        return min_(somme_reparations, plafond_grosses_reparations)

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 : Il y avait des if sur les period il y a un certain temps et il avait décidé si je me souviens bien de plutôt choisir des formules par périodes.
L'idée étant qu'il fallait simplifier le code pour l'utilisateur qui le lirait à une date donnée dans le legislation-explorer quitte à ne pas factoriser au maximum.

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 C'est dans cet idée que je propose la première option, qui est à mon avis au plus proche de l'esprit d'OpenFisca.
Les + :

  • Plus court donc plus lisible
  • pas de copié/collé de code donc plus maintenable
  • Respecte le fonctionnement global des inputs utilisateurs qui prennent le pas sur les formules.

Le moins :

  • risque de mauvais résultats si les periodes des inputs ne sont pas respecté par les utilisateurs. Ce qui est le risque de n'importe quelle variable (input ou formule) d'OpenFisca

Ma préconisation est donc :

class grosses_reparations(Variable):
    value_type = float
    entity = FoyerFiscal
    label = u"Dépenses de grosses réparations des nus-propriétaires"
    definition_period = YEAR

    def formula_2009(foyer_fiscal, period, parameters):
        '''
        Dépenses de grosses réparations des nus-propriétaires
        '''
        somme_reparations = (
               foyer_fiscal('f6cb', period) +
               foyer_fiscal('f6cj', period) + # report année 2009
               foyer_fiscal('f6hk', period) +  # report année 2010
               foyer_fiscal('f6hl', period) +  # report année 2011
               foyer_fiscal('f6hm', period) +  # report année 2012
               foyer_fiscal('f6hn', period) +  # report année 2013
               foyer_fiscal('f6ho', period) +  # report année 2014
               foyer_fiscal('f6hp', period)   # report année 2015
        )
   
        plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

        return min_( somme_reparations, plafond_grosses_reparations)

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 : je me permets de contester tes +

  • Plus cour donc plus lisible is in the eye of the beholder: si je veux regarder la formule pour une année il est plus lisible pour moi de l'avoir en entier séparément. Certes cela fait plus de code pour le codeur qui regarde plusieurs années mais bon il est plus armé que l'utilisateur/contributeur novice. Et en fait pour l'écrire c'est aussi plus facile de faire la formule d'une année à la fois parce que cela évite d'avoir toutes les feuilles d'impôt de toutes les années pour vérifier que l'on ne fait pas foirer la formule. Pour la complétude historique, nous avions souvent envisagé de mettre des helper qui calculent à part certaines expressions (ici ce serait somme_reparations) mais on essayé de les limiter au maximum parce que cela compliquait la lecture de l'utilisateur/contributeur novice

  • Ton 3e point est un mois (-) pour moi. Il viole le principe explicit is better than implicit. Je désire que cela pète ou au moins produise un warning si la case n'existe pas à la période considérée. Et du coup je règle ton unique point (-)

  • Enfin, je ne pense pas que cette PR introduit le problème. Essayons de rattraper notre retard sans détériorer le code mais n'essayons pas de tout régler en un seul coup. Mais bien sûr il est très utile de relever les problèmes potentiels. Je propose que l'on répertorie ce genre de problème pour établir de guidelines consensuelles et après on fera un passage de nettoyage. Ce sera un bon sujet à mettre à l'ordre du jour de la réunion du bureau de l'association ;-)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

OK pour garder les multiples formules. Je pense qu'il reste intéressant de mettre un commentaire tel que # report année 2009 pour facilement identifier ce qui a changé entre les formules.

Copy link
Member

Choose a reason for hiding this comment

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

Ok pour les commentaires.

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 ça vous va comme ça ? (J'ai pensé que ça faisait la même chose que de rajouter des commentaires mais en moins lourd, mais je peux rechanger) :

def formula_2016(foyer_fiscal, period, parameters):
        '''
        Dépenses de grosses réparations des nus-propriétaires
        '''
        f6cb = foyer_fiscal('f6cb', period)
        report_2009 = foyer_fiscal('f6hj', period)
        report_2010 = foyer_fiscal('f6hk', period)
        report_2011 = foyer_fiscal('f6hl', period)
        report_2012 = foyer_fiscal('f6hm', period)
        report_2013 = foyer_fiscal('f6hn', period)
        report_2014 = foyer_fiscal('f6ho', period)
        report_2015 = foyer_fiscal('f6hp', period)
        plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

        return min_(f6cb + report_2009 + report_2010 + report_2011 + report_2012 + report_2013 + report_2014 + report_2015, plafond_grosses_reparations)

plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb, plafond_grosses_reparations)

def formula_2010(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
report_2009 = foyer_fiscal('f6hj', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009, plafond_grosses_reparations)

def formula_2011(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
f6hj = foyer_fiscal('f6hj', period)
f6hk = foyer_fiscal('f6hk', period)
f6hl = foyer_fiscal('f6hl', period)
grorep = parameters(period).impot_revenu.charges_deductibles.grosses_reparations
report_2009 = foyer_fiscal('f6hj', period)
report_2010 = foyer_fiscal('f6hk', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009 + report_2010, plafond_grosses_reparations)

return min_(f6cb + f6hj + f6hk + f6hl, grorep.plafond)
def formula_2012(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
report_2009 = foyer_fiscal('f6hj', period)
report_2010 = foyer_fiscal('f6hk', period)
report_2011 = foyer_fiscal('f6hl', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009 + report_2010 + report_2011, plafond_grosses_reparations)

def formula_2013(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
report_2009 = foyer_fiscal('f6hj', period)
report_2010 = foyer_fiscal('f6hk', period)
report_2011 = foyer_fiscal('f6hl', period)
report_2012 = foyer_fiscal('f6hm', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009 + report_2010 + report_2011 + report_2012, plafond_grosses_reparations)


def formula_2014(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
report_2009 = foyer_fiscal('f6hj', period)
report_2010 = foyer_fiscal('f6hk', period)
report_2011 = foyer_fiscal('f6hl', period)
report_2012 = foyer_fiscal('f6hm', period)
report_2013 = foyer_fiscal('f6hn', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009 + report_2010 + report_2011 + report_2012 + report_2013, plafond_grosses_reparations)

def formula_2015(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
report_2009 = foyer_fiscal('f6hj', period)
report_2010 = foyer_fiscal('f6hk', period)
report_2011 = foyer_fiscal('f6hl', period)
report_2012 = foyer_fiscal('f6hm', period)
report_2013 = foyer_fiscal('f6hn', period)
report_2014 = foyer_fiscal('f6ho', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009 + report_2010 + report_2011 + report_2012 + report_2013 + report_2014, plafond_grosses_reparations)

def formula_2016(foyer_fiscal, period, parameters):
'''
Dépenses de grosses réparations des nus-propriétaires
'''
f6cb = foyer_fiscal('f6cb', period)
report_2009 = foyer_fiscal('f6hj', period)
report_2010 = foyer_fiscal('f6hk', period)
report_2011 = foyer_fiscal('f6hl', period)
report_2012 = foyer_fiscal('f6hm', period)
report_2013 = foyer_fiscal('f6hn', period)
report_2014 = foyer_fiscal('f6ho', period)
report_2015 = foyer_fiscal('f6hp', period)
plafond_grosses_reparations = parameters(period).impot_revenu.charges_deductibles.grosses_reparations.plafond

return min_(f6cb + report_2009 + report_2010 + report_2011 + report_2012 + report_2013 + report_2014 + report_2015, plafond_grosses_reparations)
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

setup(
name = 'OpenFisca-France',
version = '20.1.0',
version = '20.2.0',
author = 'OpenFisca Team',
author_email = 'contact@openfisca.fr',
classifiers = [
Expand Down