Skip to content

Commit

Permalink
Mise à jour législation 2019 et 2020 et ajout tests correspondants
Browse files Browse the repository at this point in the history
  • Loading branch information
Lola Josseran committed Oct 26, 2023
1 parent 0f856bf commit 1067938
Show file tree
Hide file tree
Showing 4 changed files with 196 additions and 13 deletions.
66 changes: 54 additions & 12 deletions openfisca_france/model/prelevements_obligatoires/impot_revenu/ir.py
Original file line number Diff line number Diff line change
Expand Up @@ -890,14 +890,59 @@ def formula_2018_01_01(foyer_fiscal, period, parameters):

return max_(0, rvcm_apres_abattement - f2ca - deficit_rcm)

def formula_2019_01_01(foyer_fiscal, period, parameters):
'''
Revenus des valeurs et capitaux mobiliers
Seule différence avec la formule précédente :
On ajoute la case 2TQ qui représente des revenus qui étaient comptés dans 2TR jusqu'en 2018.
Source : Brochure pratique revenus 2019 page 123 et 340: https://www.impots.gouv.fr/www2/fichiers/documentation/brochure/ir_2020/accueil.htm
'''
maries_ou_pacses = foyer_fiscal('maries_ou_pacses', period)
deficit_rcm = foyer_fiscal('deficit_rcm', period)
P = parameters(period).impot_revenu.calcul_revenus_imposables.rvcm
imposition_au_bareme = foyer_fiscal('f2op', period)

# Revenus à prendre en compte dans les deux cas: pfu ou imposition au barème
f2ch = foyer_fiscal('f2ch', period)
f2yy = foyer_fiscal('f2yy', period)

# Revenus à prendre en compte dans un seul cas: imposition au barème
f2ca = foyer_fiscal('f2ca', period)
f2dc = foyer_fiscal('f2dc', period)
f2fu = foyer_fiscal('f2fu', period)
f2go = foyer_fiscal('f2go', period)
f2tr = foyer_fiscal('f2tr', period)
f2ts = foyer_fiscal('f2ts', period)
f2tt = foyer_fiscal('f2tt', period)
f2vv = foyer_fiscal('f2vv', period)
f2ww = foyer_fiscal('f2ww', period)
f2zz = foyer_fiscal('f2zz', period)
f2tq = foyer_fiscal('f2tq', period)

# Revenus après abatemment
abattement_dividende = (f2fu + f2dc) * P.revenus_capitaux_mobiliers_dividendes.taux_abattement
abattement_assurance_vie = P.produits_assurances_vies_assimiles.abattement * (1 + maries_ou_pacses)
abattement_residuel = max_(abattement_assurance_vie - f2ch, 0)
abattement_residuel2 = max_(abattement_residuel - f2vv, 0)
pre_result = where(imposition_au_bareme, f2zz + max_(f2vv - abattement_residuel, 0) + max_(f2ww - abattement_residuel2, 0) + f2fu + f2dc - abattement_dividende
+ f2ts + f2tr + f2tt + f2go * P.majoration_revenus_reputes_distribues + f2tq, 0)
rvcm_apres_abattement = (
f2yy
+ f2ch - min_(f2ch, abattement_assurance_vie)
+ pre_result
)
f2ca = where(imposition_au_bareme, f2ca, 0)

return max_(0, rvcm_apres_abattement - f2ca - deficit_rcm)

def formula_2020_01_01(foyer_fiscal, period, parameters):
'''
Revenus des valeurs et capitaux mobiliers
NB : La mise en place du PFU supprime la taxation au barème de la plupart des revenus des valeurs et capitaux mobiliers.
Ces revenus sortent donc de la variable `revenu_categoriel_capital` et entrent dans la variable `revenus_capitaux_prelevement_forfaitaire_unique_ir`.
En revanche, si la case 2op est cochée, les revenus des valeurs et capitaux mobiliers sont taxés au barème et non au pfu.
Dans ce cas, ils ne sortent pas de la variable `revenu_categoriel_capital`.
Seule différence avec la formule précédente :
On ajoute la case 2TZ qui représente des revenus qui étaient comptés dans 1AI jusqu'en 2018 et n'étaient pas éligibles au pfu.
Source : Brochure pratique revenus 2020 page 119, 132 et 364: https://www.impots.gouv.fr/www2/fichiers/documentation/brochure/ir_2021/accueil.htm
'''
maries_ou_pacses = foyer_fiscal('maries_ou_pacses', period)
deficit_rcm = foyer_fiscal('deficit_rcm', period)
Expand Down Expand Up @@ -927,19 +972,16 @@ def formula_2020_01_01(foyer_fiscal, period, parameters):
abattement_assurance_vie = P.produits_assurances_vies_assimiles.abattement * (1 + maries_ou_pacses)
abattement_residuel = max_(abattement_assurance_vie - f2ch, 0)
abattement_residuel2 = max_(abattement_residuel - f2vv, 0)
pre_result = where(imposition_au_bareme, f2zz + max_(f2vv - abattement_residuel, 0) + max_(f2ww - abattement_residuel2, 0) + f2fu + f2dc - abattement_dividende
+ f2ts + f2tr + f2tt + f2go * P.majoration_revenus_reputes_distribues + f2tq + f2tz, 0)
rvcm_apres_abattement = (
f2yy
+ f2ch - min_(f2ch, abattement_assurance_vie)
+ imposition_au_bareme * (
f2zz + max_(f2vv - abattement_residuel, 0)
+ max_(f2ww - abattement_residuel2, 0)
+ f2fu + f2dc - abattement_dividende
+ f2ts + f2tr + f2tt + f2go * P.majoration_revenus_reputes_distribues
+ f2tq + f2tz
)
+ pre_result
)
f2ca = where(imposition_au_bareme, f2ca, 0)

return max_(0, rvcm_apres_abattement - f2ca * imposition_au_bareme - deficit_rcm)
return max_(0, rvcm_apres_abattement - f2ca - deficit_rcm)


class rfr_rvcm_abattements_a_reintegrer(Variable):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,46 @@ def formula_2018_01_01(foyer_fiscal, period, parameters):

return result / 12

def formula_2019_01_01(foyer_fiscal, period, parameters):
'''
Note : cette variable est définie à l'échelle du mois pour être en cohérence avec les variables qu'elle remplace
(à savoir revenus_capitaux_prelevement_bareme et revenus_capitaux_prelevement_liberatoire)
Brochure pratique revenus 2019 page 123 et 340: https://www.impots.gouv.fr/www2/fichiers/documentation/brochure/ir_2020/accueil.htm
Nouvelle variable 'Intérêts imposables des obligations remboursables en actions détenues dans le PEA-PME' (2tq) qui est éligible au pfu. Ces revenus étaient comptés dans la variable 2tr auparavant.
'''
year = period.this_year
imposition_au_bareme = foyer_fiscal('f2op', year)
assurance_vie_pfu_ir = foyer_fiscal('assurance_vie_pfu_ir', year)
f2dc = foyer_fiscal('f2dc', year)
f2fu = foyer_fiscal('f2fu', year)
f2ts = foyer_fiscal('f2ts', year)
f2tr = foyer_fiscal('f2tr', year)
f2tt = foyer_fiscal('f2tt', year)
f2go = foyer_fiscal('f2go', year)
f2tq = foyer_fiscal('f2tq', year)

result = where(imposition_au_bareme, 0, assurance_vie_pfu_ir + f2dc + f2fu + f2ts + f2tr + f2tt + f2go + f2tq)

return result / 12

def formula_2020_01_01(foyer_fiscal, period, parameters):
'''
Note : cette variable est définie à l'échelle du mois pour être en cohérence avec les variables qu'elle remplace
(à savoir revenus_capitaux_prelevement_bareme et revenus_capitaux_prelevement_liberatoire)
Nouvelle variable 'Produits des plans d’épargne retraite – sortie en capital' (2tz) qui est éligible au pfu. Ces revenus étaient comptés dans la variable 2tr auparavant.
Source: Brochure pratique revenus 2020 pages 119, 132 et 364: https://www.impots.gouv.fr/www2/fichiers/documentation/brochure/ir_2021/accueil.htm
A compter de l’imposition des revenus de 2020, le montant des revenus 2GO est multiplié par un coefficient de 1,25 pour le calcul de l’impôt sur le revenu quelles que
soient les modalités d’imposition de ces revenus (prélèvement forfaitaire unique de 12,8% ou option pour le barème progressif). Jusqu'en 2019, ce coefficient ne s'appliquait qu'en
cas d'option pour le barème progressif.
Sources:
- Brochure pratique revenus 2020 page 130: https://www.impots.gouv.fr/www2/fichiers/documentation/brochure/ir_2021/accueil.htm
- Brochure pratique revenus 2019 page 120: https://www.impots.gouv.fr/www2/fichiers/documentation/brochure/ir_2020/accueil.htm
'''
year = period.this_year
imposition_au_bareme = foyer_fiscal('f2op', year)
P = parameters(period).impot_revenu.calcul_revenus_imposables.rvcm
assurance_vie_pfu_ir = foyer_fiscal('assurance_vie_pfu_ir', year)
f2dc = foyer_fiscal('f2dc', year)
f2fu = foyer_fiscal('f2fu', year)
Expand All @@ -153,7 +186,7 @@ def formula_2020_01_01(foyer_fiscal, period, parameters):
f2tq = foyer_fiscal('f2tq', year)
f2tz = foyer_fiscal('f2tz', year)

result = where(imposition_au_bareme, 0, assurance_vie_pfu_ir + f2dc + f2fu + f2ts + f2tr + f2tt + f2go + f2tq + f2tz)
result = where(imposition_au_bareme, 0, assurance_vie_pfu_ir + f2dc + f2fu + f2ts + f2tr + f2tt + f2go * P.majoration_revenus_reputes_distribues + f2tq + f2tz)

return result / 12

Expand Down
26 changes: 26 additions & 0 deletions openfisca_france/model/revenus/capital/financier.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ class f2tq(Variable):
unit = 'currency'
entity = FoyerFiscal
label = 'Intérêts imposables des obligations remboursables en actions détenues dans le PEA-PME'
# start_date = date(2019, 1, 1)
definition_period = YEAR


Expand Down Expand Up @@ -534,6 +535,31 @@ def formula_2018_01_01(foyer_fiscal, period, parameters):

return (f2ch + f2yy + pre_result) / 12

def formula_2019_01_01(foyer_fiscal, period, parameters):
year = period.this_year
imposition_au_bareme = foyer_fiscal('f2op', year)
majoration_revenus_reputes_distribues = parameters(period).impot_revenu.calcul_revenus_imposables.rvcm.majoration_revenus_reputes_distribues

# Revenus à prendre en compte dans les deux cas: pfu ou imposition au barème
f2ch = foyer_fiscal('f2ch', year)
f2yy = foyer_fiscal('f2yy', year)

# Revenus à prendre en compte dans un seul cas: imposition au barème
f2dc = foyer_fiscal('f2dc', year)
f2fu = foyer_fiscal('f2fu', year)
f2go = foyer_fiscal('f2go', year)
f2tr = foyer_fiscal('f2tr', year)
f2ts = foyer_fiscal('f2ts', year)
f2tt = foyer_fiscal('f2tt', year)
f2vv = foyer_fiscal('f2vv', year)
f2ww = foyer_fiscal('f2ww', year)
f2zz = foyer_fiscal('f2zz', year)
f2tq = foyer_fiscal('f2tq', year)

pre_result = where(imposition_au_bareme, f2dc + f2ts + f2go * majoration_revenus_reputes_distribues + f2tr + f2fu + f2tt + f2vv + f2ww + f2zz + f2tq, 0)

return (f2ch + f2yy + pre_result) / 12

def formula_2020_01_01(foyer_fiscal, period, parameters):
year = period.this_year
imposition_au_bareme = foyer_fiscal('f2op', year)
Expand Down
82 changes: 82 additions & 0 deletions tests/impot_revenu/pfu_bareme.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,85 @@
prelevement_forfaitaire_unique_ir: -2560 # pfu des actifs numériques f3an qui ne peuvent pas être imposé au barème
rfr: 390000
impot_revenu_restant_a_payer: -94395 # pfu des an + taxation au barème des revenus éligibles au pfu

- name: option_prelevement_forfaitaire_unique_capital_2019
description: Test pfu pour 2019 avec des revenus de capital
period: 2019
absolute_error_margin: 1
input:
foyer_fiscal:
declarants:
- ind0
f2go: 10000
f2tt: 50000
f2tq: 20000
f2op: false
individus:
ind0:
statut_marital: celibataire
output:
rfr: 80000
prelevement_forfaitaire_unique_ir: -10240 # 80000*0.128
impot_revenu_restant_a_payer: -10240 # pfu

- name: option_imposition_bareme_capital_2019
description: Test imposition bareme pour 2019 avec des revenus de capital
period: 2019
absolute_error_margin: 1
input:
foyer_fiscal:
declarants:
- ind0
f2go: 10000
f2tt: 50000
f2tq: 20000
f2op: true
individus:
ind0:
statut_marital: celibataire
output:
prelevement_forfaitaire_unique_ir: 0 # option barème
rfr: 82500 # 10000*1.25 (2go majoré si taxation au barème) + 50000 + 20000
impot_revenu_restant_a_payer: -19772

- name: option_prelevement_forfaitaire_unique_capital_2020
description: Test pfu pour 2020 avec des revenus de capital
period: 2020
absolute_error_margin: 1
input:
foyer_fiscal:
declarants:
- ind0
f2go: 10000
f2tt: 40000
f2tq: 20000
f2tz: 10000
f2op: false
individus:
ind0:
statut_marital: celibataire
output:
prelevement_forfaitaire_unique_ir: -10560 # (10000*1.25 (2go majoré dans tous les cas, pfu ou barème, à partir de 2020) + 70000)*0.128
impot_revenu_restant_a_payer: -10560 # pfu
rfr: 82500

- name: option_imposition_bareme_capital_2020
description: Test imposition bareme pour 2020 avec des revenus de capital
period: 2020
absolute_error_margin: 1
input:
foyer_fiscal:
declarants:
- ind0
f2go: 10000
f2tt: 40000
f2tq: 20000
f2tz: 10000
f2op: true
individus:
ind0:
statut_marital: celibataire
output:
prelevement_forfaitaire_unique_ir: 0 # option barème
rfr: 82500
impot_revenu_restant_a_payer: -19744

0 comments on commit 1067938

Please sign in to comment.