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

Corrige la taxation des revenus des valeurs mobilières #1343

Merged
merged 82 commits into from
Jun 20, 2019

Conversation

claireleroy
Copy link
Contributor

@claireleroy claireleroy commented Jun 13, 2019

Contexte : Le PFU a été codé avant la publication du nouveau formulaire de l'IR et des règles précises concernant son application. Désormais, le formulaire est disponible et les règles connues. Cette PR vient donc corriger la partie "taxation des plus-values". (Cf. #1083).

Par ailleurs, elle s'appuie sur la disponibilité du simulateur de l'IR 2019 sur revenus 2018.


Fiscalité du capital : 3 régimes de taxation possible pour les revenus 2018:

  • PFU : Une grande partie des revenus du capital est concernée par le PFU (et l'option au barème sur choix) :
    • les revenus des assurance-vie (versements effectués à partir du 27/09/2017) : 2VV (taux réduit de 7,5%), 2WW, 2ZZ,
      (ils ouvrent droit à l'abattement fixe de 4600 euros)
    • les autres revenus du capital (dividendes etc.) : 2DC, 2FU, 2TS, 2TR, 2TT, 2GO
      (ils n'ouvrent droit à l'abattement de 40% seulement en cas d'option pour l'imposition au barème)
  • PFL : L'ancien système du prélèvement forfaitaire libératoire (PFL) qui subsistait même après la réforme de 2013, perdure ici aussi sur certains revenus :
    • les revenus des assurance-vie (versements effectués avant le 27/09/2017) détenus au moins 8 ans sont taxés au PFL au taux de 7,5% : 2DH
    • les revenus des assurance-vie (versements effectués avant le 27/09/2017) détenus moins de 8 ans sont taxés au PFL à un taux variant entre 7,5% et 45% selon la date de souscription et la durée de détention : 2XX
    • les produits de l'épargne solidaire sont taxés à 5% et les produits de placement à revenu fixe de source française payés dans un Etat non coopératif sont taxés à 75% : 2EE
    • NB : Les revenus soumis au PFL ne sont pas imposés dans le cadre de l'impôt sur le revenu (puisque le prélèvement dont ils ont fait l'objet est libératoire de l'IR) mais ils entrent dans le calcul du RFR et des prélèvements sociaux. Par ailleurs, ils peuvent être liés à des variables de crédit d'impôt et d'acomptes.
  • Barème : 2CH, 2YY.

  • Évolution du système socio-fiscal.
  • Périodes concernées : à partir du 01/01/2018.
  • Zones impactées : chemin/vers/le/fichier/contenant/les/variables/impactées.
  • Détails :
    • Supprime la end date des variables acomptes_ir, prelevement_forfaitaire_non_liberatoire, prlire, prelevement_forfaitaire_liberatoire, revenu_categoriel_capital, revenus_capitaux_prelevement_bareme, revenus_capitaux_prelevement_liberatoire, rfr_rvcm_abattements_a_reintegrer
    • Exclut les revenus déjà soumis à un prélèvement libératoire du calcul du PFU
    • Exclut les assurances-vies relatives à des versements effectués avant le 27/09/2017 du calcul du PFU (soumises soit au PFL soit au barème)
    • Renomme certaines inputs variables relatives au PFU (maintenant que l'on connait le nouveau formulaire de l'impôt) :
      • assurance_vie_pfu_ir_moins8ans_19970926_primes_apres_20170927 => f2zz,
      • assurance_vie_pfu_ir_plus8ans_19970926_primes_apres_20170927 => f2wwet f2zz
    • Ajoute des tests issus du simulateur en ligne de la DGFIP
    • Mets à jour les tests du PFU dans tests/revenu_disponible.yaml qui avait été codé avant de connaitre les nouvelles règles (et supprime un de ces tests qui n'a plus lieu d'être)

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.

@claireleroy claireleroy force-pushed the adapte-pfu-partie-rvcm branch 3 times, most recently from c50d599 to d5f5a68 Compare June 17, 2019 13:42
@claireleroy claireleroy changed the title WIP: Corrige la taxation des revenus des valeurs mobilières Corrige la taxation des revenus des valeurs mobilières Jun 17, 2019
@claireleroy claireleroy requested a review from a team June 17, 2019 16:24
@@ -830,18 +829,32 @@ def formula_2017_01_01(foyer_fiscal, period, parameters):

return max_(0, rvcm_apres_abattement - f2ca - deficit_rcm)

def formula_2018_01_01(foyer_fiscal, period, parameters):
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 qui explique une telle différence entre cette version et celle de 2017 ? Pourquoi ne tenons-nous plus compte de la case 2GO par exemple, toujours mentionnée dans la dernière version de l'aide en ligne de la déclaration par Internet ?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Morendil Cette variable revenu_categoriel_capital contient l'ensemble des revenus du capital taxés au barème (ceux taxés forfaitairement sont injectés ailleurs). En 2018, il y a le passage au PFU. Les cases 2CH et 2YY correspondent à des revenus forcément taxés au barème, elle restent donc dans le champ de revenu_categoriel_capital. La plupart des autres cases que je supprime ici entre 2017 et 2018 (2DC, 2FU, 2TS, 2TR, 2TT etc.) sont désormais taxées au PFU, elle sortent donc du champ de cette variable.

La seule chose qui manque dans cette PR c'est que les revenus taxés au PFU peuvent être (sur option du contribuable) taxés au barème. Pour l'instant, comme mentionné dans #1083, on suppose que cette option n'est jamais exercée. Coder cette option fera l'objet d'une PR à part. Dans tous les cas, le PFU est l'option par défaut donc ça ne me parait pas aberrant d'avoir fait cette hypothèse.

Copy link
Contributor

Choose a reason for hiding this comment

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

OK merci :) C'est pas clair à la lecture, et une référence ou un commentaire aideraient à comprendre la nature de l'évolution structurelle, en la distinguant de la succession des formules pour les années précédentes (qui traduit plutôt si je comprends bien une évolution du formulaire de déclaration sans modification en profondeur de la loi fiscale).

def formula_2018_01_01(foyer_fiscal, period, parameters):
maries_ou_pacses = foyer_fiscal('maries_ou_pacses', period)
f2ch = foyer_fiscal('f2ch', period)
# f2dc = foyer_fiscal('f2dc', period)
Copy link
Contributor

Choose a reason for hiding this comment

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

Supprimer les lignes mises en commentaire.

(f2ch < P.abat_assvie * (1 + maries_ou_pacses)) * max_(0, min_(f2vv + f2ww, P.abat_assvie * (1 + maries_ou_pacses) - f2ch - f2dh))
)

return - abattement_assurance_vie # + abattement_dividende
Copy link
Contributor

Choose a reason for hiding this comment

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

Supprimer la partie en commentaire.

Par ailleurs je vois un très gros risque de confusion si je lis cette formule et que je la compare avec la période précédente: une variable avec le même nom abattement_assurance_vie semble avoir changé de signe. Je ne comprends pas la modification du mode de calcul et je ne vois pas de référence législative.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Morendil J'ai effectué cette correction après avoir remarqué via le simulateur en ligne que le calcul du RFR se faisait en déduisant l'abattement fixe sur les assurances-vies (et non en les ajoutant comme la formule de 2017 semble le suggérer). Je vais chercher une référence législative et peut-être rajouter un test pour 2017 pour voir si il n'y avait pas d'erreur avant.

Copy link
Contributor Author

@claireleroy claireleroy Jun 18, 2019

Choose a reason for hiding this comment

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

J'ai ajouté un test dans rvcm.py et on peut voir qu'il semble effectivement qu'il y ait une erreur avant 2018. OpenFisca prend les revenus sans abattements dans le calcul du RFR tandis que le simulateur DGFiP les prend nets d'abattements.

J'ai l'impression que l'erreur vient du fait que certains abattements doivent bien être réintroduits dans le calcul du RFR tandis que d'autres non. Ex :

  • Abattement de 40% sur les dividendes : n'est pas pris en compte dans le calcul du RFR (revenus bruts d'abattements)
  • Abattement fixe sur assurance-vie (celui ici) : est pris en compte dans le calcul du RFR (revenus nets d'abattements)

La règle semble plutôt être celle où il est pris en compte (et celle sur l'abattement de 40% semble être l'exception). L'article qui régit le calcul du RFR semble être l'article 1417 du CGI voir a bis) du 1° du IV
Source : ici

value_type = float
entity = FoyerFiscal
label = u"Produits des bons ou contrats de capitalisation et d'assurance vie de moins de 8 ans pour les contrats souscrits après le 26 septembre 1997, dont le produits sont associés aux primes versées après le 27 septembre 2017, et que le bénéficiaire décide de soumettre au prélèvement forfaitaire unique au titre de l'impôt sur le revenu"
definition_period = YEAR
# start_date = date(2018, 1, 1)
Copy link
Contributor

Choose a reason for hiding this comment

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

Pourquoi ajouter cette ligne commenté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.

C'est une pratique courante concernant les cases de l'impôt. Apparemment, il existait avant un attribut start_date (et on est très triste qu'il ait été supprimé à l'IPP). Toutes les start_date des cases fiscales ont été gardées en commentaires, pour ne pas perdre de l'information (et peut-être dans l'espoir qu'on fasse revivre cet attribut ?). Du coup quand j'ajoute une nouvelle case, je rajoute toujours la start_date qui est une information qui me semble importante.

Copy link
Contributor

Choose a reason for hiding this comment

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

Tu peux m'aiguiller vers le contexte de la suppression de cet attribut des variables? L'issue ou la PR qui entérine la décision par exemple…

Ca me gêne quand même de voir une ligne de code commentée, parce qu'on ne sait pas si c'est du code qu'on veut supprimer ou remettre, c'est un entre-deux inconfortable qui suscite plus de questions que de réponses.

Je ne suis pas contre les commentaires dans l'absolu, mais dans ce cas un truc comme ça me semble préférable:

# Variable applicable à partir de 2018-01-01

Mais si c'était un point de sortie de la décision qui a précédé je veux bien m'y ranger.

Copy link
Member

Choose a reason for hiding this comment

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

@Morendil : Look at openfisca-core version 14.0.0 - #522

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Morendil Je comprends ta gêne mais il me semble que c'est une pratique acceptée depuis longtemps dans OpenFisca-France dans le cas particulier des cases fiscales (inputs variables dont la date de début et de fin est importante). J'ai une forte préférence pour garder ces commentaires.

Copy link
Member

Choose a reason for hiding this comment

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

A l'époque j'avais plaidé pour que l'on garde cette information qui est redondante pour les variables qui disposent de fonctions. Mais cela n'avait pas été retenu. Comme cela avait de la valeur informationnelle, on a gardé les lignes commentées.

definition_period = YEAR
# start_date = date(2018, 1, 1)
Copy link
Contributor

Choose a reason for hiding this comment

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

Pourquoi ajouter cette ligne commenté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.

Idem que plus haut

entity = FoyerFiscal
label = u"Produits des bons ou contrats de capitalisation et d'assurance vie de plus de 8 ans pour les contrats souscrits après le 26 septembre 1997, dont le produits sont associés aux primes versées après le 27 septembre 2017, et que le bénéficiaire décide de soumettre au prélèvement forfaitaire unique au titre de l'impôt sur le revenu; produit correspondant aux primes excédant pas 150 000 euros."
definition_period = YEAR
# start_date = date(2018, 1, 1)
Copy link
Contributor

Choose a reason for hiding this comment

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

Pourquoi ajouter cette ligne commenté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.

Idem que plus haut

@@ -339,9 +355,6 @@ class f2ar(Variable):
# start_date = date(2012, 1, 1)
definition_period = YEAR

# je ne sais pas d'ou sort f2as...! probablement une ancienne année à laquelle je ne suis pas encore arrivé
Copy link
Contributor

Choose a reason for hiding this comment

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

Supprimer la variable f2as si elle n'est effectivement jamais utilisée.

@claireleroy
Copy link
Contributor Author

claireleroy commented Jun 18, 2019

@Morendil Merci pour ta review! J'ai essayé de répondre point par point dans les commentaires. Concernant l'erreur du calcul du RFR avec l'abattement sur les assurance-vie, je peux essayer de corriger les années précédentes si ça te va ?

@claireleroy claireleroy requested a review from Morendil June 19, 2019 08:28
@claireleroy
Copy link
Contributor Author

Salut @Morendil, est-ce qu'on pourrait merger cette PR aujourdhui si ça te sembles possible ? J'aimerais importer ces changements au CASD avant la fin de la semaine :)

@Morendil
Copy link
Contributor

Go, je te laisse prendre le rebase+Changelog

@claireleroy claireleroy force-pushed the adapte-pfu-partie-rvcm branch from 181f69c to 420215d Compare June 20, 2019 12:37
@claireleroy claireleroy merged commit 60fea85 into master Jun 20, 2019
@claireleroy claireleroy deleted the adapte-pfu-partie-rvcm branch June 24, 2019 09:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants