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

Correction et mise à jour de la taxation des revenus du capital dans l'IRPP #1034

Merged
merged 54 commits into from
Jul 13, 2018

Conversation

claireleroy
Copy link
Contributor

Cette PR verrifie le calcul de l'impôt sur le revenu relatif au revenus du capital (RVCM et plus-values) depuis 2013 et, le cas échéant, le corrige ou le mets à jour et essaie de le simplifier pour le rendre plus clair.

NB : pour la taxation des plus-values, il reste encore un peu de travail à faire (prise en compte des moins-values, des abattements, taxation au système du quotient ..).

  • Évolution du système socio-fiscal.
  • Périodes concernées : à partir du 01/01/2013 essentiellement
  • Zones impactées :
    • model/prelevements_obligatoires/impot_revenu/ir.py.
    • model/revenus/capital/financier.py
    • model/revenus/capital/plus_value.py
    • parameters/impot_revenu/plus_values.yaml
  • Détails :
    • Ajout de nouvelles cases de l'impôt (2013-2017) relatives aux plus-values ou aux revenus financiers
    • Réorganise le fichier plus_value.py afin de le rendre plus lisible
    • Corrige le calcul du RFR (afin de prendre en compte les revenus financiers et les plus-values qui sont éxonérés ou imposés forfaitairement)
    • Corrige et mets à jour le calcul des RVCM et plus-value taxés au barème, et de ceux taxés forfaitairement
    • Déplace des variables de revenus qui étaient dans le fichier de calcul de l'IR

Ces changements :

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

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.

Quelques remarques cosmétiques

@@ -252,6 +286,87 @@ class epargne_revenus_imposables(Variable):
definition_period = MONTH


class rev_cap_bar(Variable):
Copy link
Member

Choose a reason for hiding this comment

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

Comme ce sont des concepts intrinsèquemetn liés à l'impôt peut-être qu'il vaut mieux les garder dans l'IR plutôt que dans les revenus.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Enfait justement cette variable n'est jamais utilisée pour le calcul de l'IRPP. C'est une variable un peu fictive des revenus du capital bruts hors abattements qui est utilisée dans le calcul du revenu disponible, dans certaines bases ressources et dans le calcul de la CSG.
Etant donné qu'il faudrait alléger le fichier ir.py (surchargé de variables et calculs pas directement liés à l'IR), ces deux variables me semblent mieux placées dans financier.py non ?

Copy link
Member

Choose a reason for hiding this comment

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

Bonne remarque !
Peut-être à mettre dans mesures alors.
Mais bon capital/financier me convient aussi.

return (f2dc + f2ch + f2ts + f2go * majGO + f2tr + f2fu - avf) / 12


class rev_cap_lib(Variable):
Copy link
Member

Choose a reason for hiding this comment

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

Idem plus haut

# Bouvard: j'ai changé là mais pas dans le code, il faut chercher les f1uv
# et les mettre en f1tvm comme pour salaire_imposable
# Il faut aussi le faire en amont dans les tables
###################################################
Copy link
Member

Choose a reason for hiding this comment

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

Moins de #####/
Proposition (faire edit)

Plan

1. Gains taxés comme des salaires

2. Autres plus-values (exonérées, au barème, ...)

3. Abattements sur plus-values

4. Plus-values taxées forfaitairement

5. Autres variables

CHANGELOG.md Outdated
- Ajout de nouvelles cases de l'impôt (2013-2017) relatives aux plus-values ou aux revenus financiers
- Réorganise le fichier plus_value.py afin de le rendre plus lisible
- Corrige le calcul du RFR (afin de prendre en compte les revenus financiers et les plus-values qui sont éxonérés ou imposés forfaitairement)
- Corrige et mets à jour le calcul des RVCM et plus-value taxés au barème, et de ceux taxés forfaitairement
Copy link
Contributor

Choose a reason for hiding this comment

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

Qu'est ce que c'est que les RCVM ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

C'est les "Revenus des Capitaux et Valeurs Mobilières" je le rajoute dans le Changelog !

value_type = int
unit = 'currency'
entity = FoyerFiscal
label = u"Pertes en capital sur prêts participatifs"
Copy link
Contributor

Choose a reason for hiding this comment

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

Quelle est la différence entre f2tu et f2tv ?

avf = foyer_fiscal('avf', year)
f2da = foyer_fiscal('f2da', year)
f2ee = foyer_fiscal('f2ee', year)
finpfl = parameters(period).impot_revenu.autre.finpfl # TODO remove ad check case
Copy link
Contributor

Choose a reason for hiding this comment

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

Il y a t'il des noms de variable plus explicites pour finpfl et majGo et avf (avoirs_credits_fiscaux) ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oui tu as raison :

  • pour finpfl je propose de carrément virer ce paramètre
  • pour majGO je propose majoration_revenus_reputes_distribues ?
  • avoirs_credits_fiscaux me parait très bien !

finpfl = parameters(period).impot_revenu.autre.finpfl # TODO remove ad check case
majGO = parameters(period).impot_revenu.rvcm.majGO

# year = period.start.year
Copy link
Contributor

Choose a reason for hiding this comment

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

Pourquoi garder ces éléments commentés ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oui c'est vrai, c'est juste que je ne savais pas qui a mis ça et si ça servirait à quelqu'un mais tu as raison je vire :)

# return f2dc + f2gr + f2ch + f2ts + f2go + f2tr + f2fu - avf
# elif year > 2011:
# return f2dc + f2gr + f2ch + f2ts + f2go + f2tr + f2fu - avf + (f2da + f2ee)
return (f2dc + f2gr + f2ch + f2ts + f2go * majGO + f2tr + f2fu - avf + (f2da + f2ee) * finpfl) / 12
Copy link
Contributor

Choose a reason for hiding this comment

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

Que penserais-tu de quelque chose comme:

revenu_capital_au_bareme_annuel = (
        f2dc + f2gr + f2ch + f2ts + f2tr + f2fu
        + f2go * majGO 
        + (f2da + f2ee) * finpfl
         - avf 
        )
return revenu_capital_au_bareme_annuel / 12

# Bouvard: j'ai changé là mais pas dans le code, il faut chercher les f1uv
# et les mettre en f1tvm comme pour salaire_imposable
# Il faut aussi le faire en amont dans les tables
## PLAN :
Copy link
Contributor

Choose a reason for hiding this comment

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

🙌 J'aime beaucoup le plan ^^ 🙌


# TODO: vérifier avant 2012
end = '2009-12-31'
definition_period = YEAR
Copy link
Contributor

Choose a reason for hiding this comment

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

Il faut ajouter une ligne vide à la fin du fichier :)

2002-01-01:
value: 0.19
taux_pv_bspce2:
description: Cessions de bons de souscription de parts de créateur d'entreprise (BSPCE)
Copy link
Contributor

Choose a reason for hiding this comment

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

Quelle est la différence entre taux_pv_bspce1 et taux_pv_bspce2?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Les BSPCE sont taxés soit à 19% soit à 30%, "si, à la date de cession des titres, vous exercez votre activité dans la société depuis moins de trois ans ou si, n’étant plus salarié de la société à la même date, vous y avez exercé votre activité pendant moins de trois ans."
Si tu as une suggestion de nom de paramètres plus explicites je suis preneuse :)

Copy link
Contributor

Choose a reason for hiding this comment

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

Proposition :

tx_plus_values_bspce:
  description: Taux général de taxation des cessions de bons de souscription de parts de créateur d'entreprise (BSPCE). (Un taux spécial est applicable sous conditions, cf tx_plus_values_bspce_conditionnel)
  reference: openfisca
  unit: /1
  values:
    2012-01-01:
      value: 0.30

 tx_plus_values_bspce_conditionnel:
  description: Taux spécial de taxation des cessions de bons de souscription de parts de créateur d'entreprise (BSPCE). Ce taux est applicable si, à la date de cession des titres, vous exercez votre activité dans la société depuis moins de trois ans ou si, n’étant plus salarié de la société à la même date, vous y avez exercé votre activité pendant moins de trois ans.
  reference: openfisca
  unit: /1
  values:
    2018-01-01:
      value: 0.19

values:
2002-01-01:
value: 0.30
taux_pv_report1:
Copy link
Contributor

Choose a reason for hiding this comment

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

Quelle est la différence entre taux_pv_report1 et taux_pv_report2?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Les plus-values dont le report a expiré sont taxées soit à 24% soit à 19% si "(plus-value de cession de
titres réalisée par un créateur d’entreprise remplissant les conditions
prévues par l’article 200 A, 2bis, du CGI dans sa rédaction
applicable en 2012)."

Idem, si tu as un nom plus explicite je veux bien.

Copy link
Contributor

Choose a reason for hiding this comment

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

Proposition :

plus_values_report_conditionnel:
  description: Taux forfaitaire spécial appliqué sous conditions (article 200 A, 2bis, du CGI) aux plus-values en report d'imposition et dont le report a expiré. 
  reference: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069577&idArticle=LEGIARTI000026946928&dateTexte=&categorieLien=id
  unit: /1
  values:
    2016-01-01:
      value: 0.19
plus_values_report:
  description: Taux forfaitaire général appliqué aux plus-values en report d'imposition et dont le report a expiré. Un taux spécial est applicable sous conditions(cf plus_values_report_conditionnel)
  reference: openfisca
  unit: /1
  values:
    2016-01-01:
      value: 0.24

unit: /1
values:
2016-01-01:
value: 0.24
Copy link
Contributor

Choose a reason for hiding this comment

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

Il faut ajouter une ligne à la fin du fichier

@claireleroy
Copy link
Contributor Author

@benjello @Anna-Livia

Que pensez-vous de virer le paramètre finpfl qui est une indicatrice de l'imposition des revenus du capitaux au barème (par opposition au prélèvement libératoire) ?
Sachant que :

  • ce paramètre a toujours été égal à zéro dans Openfisca
  • il est utilisé très rarement
  • le code que j'ai actualisé fait la distinction entre imposition au barème, au prélèvement libératoire ou taxation forfaitaire de manière beaucoup plus explicite (via des formules qui changent avec les années) que ce paramètre

values:
2002-01-01:
value: 0.30
taux_pv_report1:
Copy link
Contributor

Choose a reason for hiding this comment

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

Proposition :

plus_values_report_conditionnel:
  description: Taux forfaitaire spécial appliqué sous conditions (article 200 A, 2bis, du CGI) aux plus-values en report d'imposition et dont le report a expiré. 
  reference: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069577&idArticle=LEGIARTI000026946928&dateTexte=&categorieLien=id
  unit: /1
  values:
    2016-01-01:
      value: 0.19
plus_values_report:
  description: Taux forfaitaire général appliqué aux plus-values en report d'imposition et dont le report a expiré. Un taux spécial est applicable sous conditions(cf plus_values_report_conditionnel)
  reference: openfisca
  unit: /1
  values:
    2016-01-01:
      value: 0.24

2002-01-01:
value: 0.19
taux_pv_bspce2:
description: Cessions de bons de souscription de parts de créateur d'entreprise (BSPCE)
Copy link
Contributor

Choose a reason for hiding this comment

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

Proposition :

tx_plus_values_bspce:
  description: Taux général de taxation des cessions de bons de souscription de parts de créateur d'entreprise (BSPCE). (Un taux spécial est applicable sous conditions, cf tx_plus_values_bspce_conditionnel)
  reference: openfisca
  unit: /1
  values:
    2012-01-01:
      value: 0.30

 tx_plus_values_bspce_conditionnel:
  description: Taux spécial de taxation des cessions de bons de souscription de parts de créateur d'entreprise (BSPCE). Ce taux est applicable si, à la date de cession des titres, vous exercez votre activité dans la société depuis moins de trois ans ou si, n’étant plus salarié de la société à la même date, vous y avez exercé votre activité pendant moins de trois ans.
  reference: openfisca
  unit: /1
  values:
    2018-01-01:
      value: 0.19

h12 = 0
TOT2 = max_(0, rev - h12)
# i121= -min_(0,rev - h12)
return rvcm_net
Copy link
Contributor

Choose a reason for hiding this comment

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

proposition

return max_(0, rvcm_apres_abattement - f2ca - deficit_rcm)

plus_values.taux4 * f3vf)

return round_(out)
return round_(
Copy link
Contributor

Choose a reason for hiding this comment

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

Il faut mettre les opérateurs en début de ligne :)

'''
impôt avant imputation de l'irpp
'''
iaidrdi = foyer_fiscal('iaidrdi', period)
Copy link
Contributor

Choose a reason for hiding this comment

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

Il y a t'il une meilleur terminologie pour iaidrdi, cont_rev_loc ou teicaa?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

C'est vrai que ce ne sont pas des noms très explicite .. après c'est un problème plus général du code de l'impôt dans Openfisca et cette PR ne traite que de la partie revenus des capitaux. Du coup, je préfère laisser ça pour plus tard.

prelevement_liberatoire = parameters(period).impot_revenu.rvcm.prelevement_liberatoire

out = -(prelevement_liberatoire.action * f2da + prelevement_liberatoire.autre * f2ee) * not_(finpfl) \
out = -(prelevement_liberatoire.action * f2da + prelevement_liberatoire.autre * f2ee) \
Copy link
Contributor

Choose a reason for hiding this comment

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

Peut-on remplacer out par quelque chose de plus explicite ?

Copy link
Contributor

@Anna-Livia Anna-Livia left a comment

Choose a reason for hiding this comment

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

Quelques propositions supplémentaires d'éléments à modifier

@claireleroy claireleroy force-pushed the corrige-taxation-capital-irpp branch from c83c0eb to 16668ab Compare July 13, 2018 12: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.

5 participants