Skip to content
Snippets Groups Projects
Commit e96b6fd1 authored by Benoît Courty's avatar Benoît Courty
Browse files

Merge branch 'cdhr_v6' into 'master'

CDHR : Change le titre

See merge request !147
parents 3f4ac5be 8ba197d1
Branches
No related tags found
1 merge request!147CDHR : Change le titre
Pipeline #18067 failed
%% Cell type:markdown id: tags:
 
---
title: "CDHR : Contribution Différentielle sur les très Hauts Revenus"
title: "Contribution différentielle sur les hauts revenus (CDHR)"
execute:
echo: false
skip_showdoc: true
---
 
%% Cell type:code id: tags:
 
``` python
# | hide
from IPython.core.interactiveshell import InteractiveShell
 
InteractiveShell.ast_node_interactivity = "all"
```
 
%% Cell type:markdown id: tags:
 
<p class="last_update">Dernière date de mise à jour du document : 15 octobre 2024</p>
 
%% Cell type:markdown id: tags:
 
:::{.callout-caution}
**Comment lire ce document ?**
 
<div style="text-align: justify;">
Ce document est un support de travail du service LexImpact, rendu public. Il n'a pas pour objectif d'expliquer de façon exhaustive le fonctionnement d'un dispositif.
Les mémos regroupent la connaissance acquise par le service sur un dispositif lors de la conception et de la mise à jour des simulateurs. Cette connaissance concerne notamment :
</div>
 
* les ressources et références ;
* les agrégats ;
* le fonctionnement des dispositifs.
:::
 
%% Cell type:markdown id: tags:
 
## Mécanisme général
 
Cette nouvelle contribution est introduite par l'[Article 3 du PLF 2025](https://www.assemblee-nationale.fr/dyn/17/textes/l17b0324_projet-loi#_Toc179428410). Elle vise à atteindre un taux moyen d'imposition minimal de 20% pour les revenus supérieurs à 250 000 euros pour une personne seule et 500 000 euros pour un couple. Elle est calculée en fonction de la différence entre le taux moyen d'imposition et ce que le contribuable aurait eu à payer avec un taux moyen de 20%.
 
Il y a un mécanisme de décote pour rendre progressif l'entrée dans cette contribution.
 
Ainsi qu'une réduction pour les couples et les personnes ayant des enfants à charge, se manifestant par une majoration du montant l'impôt pris en compte dans le calcul.
 
Il est prévu que cette contribution ne s'applique qu'uniquement aux impôts payés en 2025, 2026 et 2027.
 
Le [simulateur LexImpact](https://socio-fiscal.leximpact.an.fr/?test_case=72&parameters=contribution_differentielle_hauts_revenus) permet de visualiser cette contribution et de préparer des amendements la concernant.
 
### Formule de calcul
 
Ce schéma représente l'implémentation qui est faire dans [OpenFisca-France-Reforms](https://git.leximpact.dev/leximpact/simulateur-socio-fiscal/openfisca/openfisca-france-reforms/-/blob/master/openfisca_france_reforms/plf_plfss_2025/cdhr.py?ref_type=heads).
 
:::{.column-page}
```{mermaid}
flowchart TD
Assiette_CDHR[RFR retraité = RFR avec certaines exceptions]
X[Début] --> F{"Eligible à la CDHR ?<br/>(rfr > 250 k€ célib ou 500 k€ couple)"}
F -->|NON| Z[pas de CDHR]
F -->|OUI| decote{"Eligible à décote ?<br/>(rfr < 330 k€ célib, 660 k€ couple)"}
Assiette_CDHR --> impot_cible_sans_decote["impôt cible sans décote = RFR retraité * 20%"]
decote --> |NON| cdhr_pas_decote["décote = 0"]
decote --> |OUI| cdhr_decote["décote = impôt cible sans décote<br/> moins 82.5% de la différence entre RFR et seuil décote"]
impot_cible_sans_decote --> cdhr_decote
 
cdhr_pas_decote --> impot_cible["impôt cible = 20% du RFR retraité - décote"]
cdhr_decote --> impot_cible
impot_avant_creation_cdhr["impot_avant_creation_cdhr = <br/>impôt_net<br/> + contribution_exceptionnelle_hauts_revenus<br/> + prelevement_forfaitaire_liberatoire"]
majoration["Majoration de 1 500 € par enfant et de 12 500€ pour un couple"]
impot_avant_creation_cdhr --> montant_cdhr("Montant de la CDHR = max(<br/>impôt cible - (impot_avant_creation_cdhr + majoration)<br/>, 0)")
majoration --> montant_cdhr
impot_cible --> montant_cdhr
 
```
:::
 
%% Cell type:markdown id: tags:
 
 
 
%% Cell type:markdown id: tags:
 
### Exemple pour une personne seule, sans enfant, qui perçoit uniquement des dividendes
 
Après analyse du dispositif, il ressort que la CDHR concerne majoritairement les foyers bénéficiant de gros abattements spécifiques ou percevant très majoritairement des revenus sousmis au Prélèvement Forfaitaire Unique (PFU).
 
C'est pourquoi ce premier exemple concerne :
 
- Une personne seule sans enfant afin d'illustrer le cas de base, sans majoration pour situation familiale (définie en III - 2°).
 
- Des revenus des dividendes pour leur représentativité relative en terme de montant total déclaré.
 
En effet, l'exposé des motifs de l'[Article 3 du PLF 2025](https://www.assemblee-nationale.fr/dyn/17/textes/l17b0324_projet-loi#_Toc179428410) indique en particulier : "Cette contribution s’applique, parmi les foyers assujettis à la CEHR, à savoir ceux dont le revenu de référence dépasse 250 000 € pour un célibataire et 500 000 € pour un couple, à ceux dont le taux moyen d’imposition est inférieur à 20 %."
 
> En savoir plus sur la [Contribution exceptionnelle sur les hauts revenus (CEHR)(service-public.fr)](https://www.service-public.fr/particuliers/vosdroits/F31130)
 
Les revenus pris en considération pour la CEHR et la CDHR comportent en particulier des revenus de capitaux mobiliers et de plus-values mobilières.
 
> En savoir plus sur les [revenus de capitaux mobiliers et de plus-values mobilières (impots.gouv.fr)](https://www.impots.gouv.fr/particulier/revenus-de-capitaux-mobiliers).
 
Parmi ces revenus, nous prenons ici l'exemple des dividendes dont le montant total déclaré dépasse celui des plus-values mobilière d'après les statistiques d'impôt sur le revenu, sur revenus 2019 (35 633 Millions d'euros).
 
> En savoir plus sur [https://www.impots.gouv.fr/statistiques-impots-des-particuliers](https://www.impots.gouv.fr/statistiques-impots-des-particuliers) > `Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés` > Données (.xls) [consulté au 14/10/2024]
 
Les contribuables concernés ont la possibilité d'être soumis au Prélèvement forfaitaire unique (PFU) ou d'opter pour une imposition au barème progressif de l'impôt (en cochant la case `2OP` de la déclaration de revenus n° 2042 comme indiqué par [impots.gouv.fr](https://www.impots.gouv.fr/particulier/questions/jai-des-valeurs-mobilieres-comment-sont-elles-imposees)). On illustre ici les deux situations.
 
Lors de l'imposition au barème les revenus perçus sous forme de dividendes, case `2DC` de la déclaration de revenus n° 2042, bénéficient d'un abattement de 40%.
 
%% Cell type:markdown id: tags:
 
 
%% Cell type:code id: tags:
 
``` python
# | hide
from openfisca_france import FranceTaxBenefitSystem
from openfisca_france_reforms.plf_plfss_2025 import PlfPlfss2025
from openfisca_core.simulations import SimulationBuilder
from openfisca_france.scenarios import init_single_entity
import plotly.graph_objects as go
import plotly.io as pio
from IPython.display import Markdown
 
pio.renderers.default = "notebook"
```
 
%% Cell type:code id: tags:
 
``` python
# | hide
plf_tbs = PlfPlfss2025(FranceTaxBenefitSystem())
```
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
 
def format_number(number):
return f"{number:,.0f}".replace(",", " ")
```
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
 
def plot(
revenus,
irpp_economique_bareme,
irpp_economique_pfu,
contribution_differentielle_hauts_revenus_bareme,
contribution_differentielle_hauts_revenus_pfu,
title="Titre",
suffix="",
max_y=120_000,
):
fig = go.Figure()
 
fig.add_trace(
go.Scatter(
x=revenus,
y=irpp_economique_bareme,
name="Impôt sur le revenu avec option au barème, avant CDHR",
line=dict(color="black", width=4, dash="dot"),
)
)
fig.add_trace(
go.Scatter(
x=revenus,
y=contribution_differentielle_hauts_revenus_bareme,
name=f"Impôt sur le revenu avec option au barème, avec CDHR{suffix}",
line=dict(color="red"),
)
)
fig.add_trace(
go.Scatter(
x=revenus,
y=irpp_economique_pfu,
name="Impôt sur le revenu au PFU, avant CDHR",
line=dict(color="black", dash="dash"),
)
)
fig.add_trace(
go.Scatter(
x=revenus,
y=contribution_differentielle_hauts_revenus_pfu,
name=f"Impôt sur le revenu au PFU, avec CDHR{suffix}",
line=dict(color="red", dash="dash"),
)
)
 
fig.update_layout(
xaxis=dict(
title="Revenus distribués éligibles à l’abattement de 40 % (case 2DC)",
# tickmode="linear",
),
yaxis=dict(
title="Montant de l'impôt (hors cotisations sociales pour revenus au PFU)"
), # , rangemode="tozero"
title=title,
)
# _ = fig.add_vline(x=250_000, line_dash="dash", line_color="red")
# Make the figure bigge in height
fig.update_layout(
height=800,
width=1100,
legend=dict(yanchor="top", y=0.95, xanchor="left", x=0.01),
yaxis_range=[0, max_y],
)
 
return fig
 
 
def add_x_reference(openfisca_parameter, period, figure, annotation_position):
lex_color = "#A6A00C"
 
figure.add_vline(
x=openfisca_parameter(period), # avec période => ParameterAtInstant
line_width=1,
line_dash="dash",
annotation_text=openfisca_parameter.metadata[
"short_label"
], # sans période => Parameter
annotation_position=annotation_position,
line_color=lex_color,
)
```
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
 
nb_step = 500
date_naissance = "1980-01-01"
f2dc_max = 500_000
 
current_period = 2024
sb = SimulationBuilder()
 
# start = (periods.instant(current_period),)
 
# taux_prelevement_pfu = 12.8 # @param {type:"slider", min:12.8, max:20, step:0.1}
 
 
# def modify_parameters(parameters):
 
# parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus.taux_decote.update(
# value=82.5 / 100, start=start
# )
# return parameters
 
 
# class ma_reforme(Reform):
# name = "Modif PFU"
 
# def apply(self):
# self.modify_parameters(modifier_function=modify_parameters)
 
 
# reformed_tax_benefit_system = ma_reforme(plf_tbs)
reformed_tax_benefit_system = plf_tbs
# reformed_tax_benefit_system.neutralize_variable("contribution_differentielle_hauts_revenus_decote")
 
 
def get_dividendes_simulation_from_scenario(tbs, case_f2op=False):
# dividendes d'actions ou dees produits de parts sociales distribués
# par des personnes morales soumises à l'impôt sur les sociétés
# = case 2DC
 
scenario = init_single_entity(
tbs.new_scenario(),
# Axe declaration
axes=[
[
dict( # in a dictionary
count=nb_step, # 'count' indicates the number of steps
min=0,
max=f2dc_max,
name="f2dc", # the variable that will evolve 'count' times between 'min' and 'max' values
),
]
],
period=current_period,
parent1=dict(
date_naissance=date_naissance,
),
foyer_fiscal=dict(f2op=case_f2op),
)
 
simulation_pfu = scenario.new_simulation()
return simulation_pfu
 
 
# https://simulateur-socio-fiscal.leximpact.dev/?law=true&test_case=21&parameters=csg_revenus_capital&tab=dispositif
 
 
# Avec PFU
 
simulation_pfu = get_dividendes_simulation_from_scenario(
reformed_tax_benefit_system, case_f2op=False
)
 
f2dc_pfu = simulation_pfu.calculate_add("f2dc", current_period)
prelevement_forfaitaire_unique_ir_pfu = simulation_pfu.calculate_add(
"prelevement_forfaitaire_unique_ir", current_period
)
irpp_economique_pfu = (
simulation_pfu.calculate_add("impot_revenu_restant_a_payer", current_period) * -1
)
contribution_differentielle_hauts_revenus_pfu = simulation_pfu.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
 
 
# Avec option au barème
 
simulation_bareme = get_dividendes_simulation_from_scenario(
reformed_tax_benefit_system, case_f2op=True
)
f2dc_bareme = simulation_bareme.calculate_add("f2dc", current_period)
 
# prelevements_sociaux_revenus_capital_hors_csg_crds_bareme = simulation_bareme.calculate_add("prelevements_sociaux_revenus_capital_hors_csg_crds", current_period) * -1
irpp_economique_bareme = (
simulation_bareme.calculate_add("impot_revenu_restant_a_payer", current_period) * -1
)
contribution_differentielle_hauts_revenus_bareme = simulation_bareme.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
 
fig = plot(
f2dc_pfu,
irpp_economique_bareme,
irpp_economique_pfu,
irpp_economique_bareme + contribution_differentielle_hauts_revenus_bareme,
irpp_economique_pfu + contribution_differentielle_hauts_revenus_pfu,
"Impact de la Contribution Différentielle sur les Hauts Revenus (CDHR) pour une personne percevant des dividendes",
)
 
cdhr_parameters = (
reformed_tax_benefit_system.parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus
)
add_x_reference(
cdhr_parameters.plafond_revenus_decote_celibataire, current_period, fig, "top left"
)
add_x_reference(cdhr_parameters.seuil_celibataire, current_period, fig, "bottom left")
```
 
%% Cell type:markdown id: tags:
 
:::{.column-page}
 
%% Cell type:code id: tags:
 
``` python
fig.show()
```
 
%% Output
 
 
 
%% Cell type:markdown id: tags:
 
:::
 
%% Cell type:markdown id: tags:
 
On constate sur le graphique ci-dessus que l'entrée dans la CDHR pour le cas au PFU se fait à partir d'un peu moins de 300 000 € de revenus et non pas à partir de 250 000 €. Cela est dû à l'effet de la décote.
 
De même, on constate que la CDHR n'a aucun effet, pour ce cas-type, lors de l'option pour l'imposition au barême. Cela est également dû à l'effet de la décote, dont nous allons montrer l'impact ci-après.
 
%% Cell type:markdown id: tags:
 
 
%% Cell type:markdown id: tags:
 
## Impact de la décote
 
%% Cell type:markdown id: tags:
 
Au V de l'[Article 3 du PLF 2025](https://www.assemblee-nationale.fr/dyn/17/textes/l17b0324_projet-loi#_Toc179428410) :
 
> V - Toutefois, lorsque le revenu mentionné au II est inférieur ou égal à 330 000 € pour les contribuables célibataires, veufs, séparés ou divorcés et à 660 000 € pour les contribuables soumis à imposition commune, le montant résultant de l’application du 1° du III est diminué de la différence, lorsqu’elle est positive, entre ce montant et 82,5 % de la différence entre ce revenu et 250 000 € pour les contribuables célibataires, veufs, séparés ou divorcés ou 500 000 € pour les contribuables soumis à imposition commune.
 
Extrait de [PLF 2025 - Évaluations préalables des articles du projet de loi](https://www.budget.gouv.fr/rechercher?query=PLF+2025+-+Évaluations+préalables+des+articles+du+projet+de+loi+&field_tags_target_id=&sort_bef_combine=search_api_relevance_DESC&f%5B0%5D=type%3Adocuments&f%5B0%5D=type%3Adocuments) :
 
> Pour atténuer l’effet de seuil lié à l’entrée dans le champ de cette nouvelle contribution, un mécanisme de décote est prévu. Ce mécanisme, qui vise à éviter les ressauts d’imposition potentiellement excessifs, bénéficiera aux contribuables célibataires, veufs, séparés ou divorcés dont le RFR est compris entre 250 000 € et 330 000 € et aux contribuables soumis à imposition commune dont le RFR est compris entre 500 000 € et 660 000 €.
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
plf_tbs_sans_decote_cdhr = PlfPlfss2025(FranceTaxBenefitSystem())
plf_tbs_sans_decote_cdhr.neutralize_variable(
"contribution_differentielle_hauts_revenus_decote"
)
 
# Avec PFU
 
simulation_pfu_sans_decote = get_dividendes_simulation_from_scenario(
plf_tbs_sans_decote_cdhr, case_f2op=False
)
 
f2dc_pfu_sans_decote = simulation_pfu_sans_decote.calculate_add("f2dc", current_period)
# prelevement_forfaitaire_unique_ir_pfu = simulation_pfu_sans_decote.calculate_add(
# "prelevement_forfaitaire_unique_ir", current_period
# )
irpp_economique_pfu_sans_decote = (
simulation_pfu_sans_decote.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_pfu_sans_decote = (
simulation_pfu_sans_decote.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
 
# Avec option au barème
 
simulation_bareme_sans_decote = get_dividendes_simulation_from_scenario(
plf_tbs_sans_decote_cdhr, case_f2op=True
)
 
# prelevements_sociaux_revenus_capital_hors_csg_crds_bareme = simulation_bareme_sans_decote.calculate_add("prelevements_sociaux_revenus_capital_hors_csg_crds", current_period) * -1
irpp_economique_bareme = (
simulation_bareme_sans_decote.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_bareme = (
simulation_bareme_sans_decote.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
fig_sans_decote = plot(
f2dc_pfu_sans_decote,
irpp_economique_bareme,
irpp_economique_pfu_sans_decote,
irpp_economique_bareme + contribution_differentielle_hauts_revenus_bareme,
irpp_economique_pfu_sans_decote
+ contribution_differentielle_hauts_revenus_pfu_sans_decote,
"CDHR sans décote pour une personne percevant des dividendes",
", sans décote",
)
 
seuil_cdhr_celibataire = (
plf_tbs_sans_decote_cdhr.parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus.seuil_celibataire
)
add_x_reference(seuil_cdhr_celibataire, current_period, fig_sans_decote, "top left")
```
 
%% Cell type:markdown id: tags:
 
:::{.column-page}
 
%% Cell type:code id: tags:
 
``` python
fig_sans_decote.show()
```
 
%% Output
 
 
%% Cell type:markdown id: tags:
 
:::
 
%% Cell type:markdown id: tags:
 
On constate sur le graphique ci-dessus que sans la décote, une part de CDHR serait due pour des revenus entre 250 000 € et près de 310 000 €, mais qu'elle est annulée par la décote.
 
%% Cell type:markdown id: tags:
 
## Impact de la majoration pour situation familiale de l'impôt pris en compte
 
Au III de l'[Article 3 du PLF 2025](https://www.assemblee-nationale.fr/dyn/17/textes/l17b0324_projet-loi#_Toc179428410) :
 
> 2° et le montant résultant de la somme de l’impôt sur le revenu et de la contribution prévue à l’article 223 sexies tels que définis au IV, ainsi que des prélèvements libératoires de l’impôt sur le revenu mentionnés au c du 1° du IV de l’article 1417, majoré de 1 500 € par personne à charge au sens des articles 196 à 196 B et de 12 500 € pour les contribuables soumis à imposition commune.
 
La majoration pour situation familiale est de 1 500 € par personne à charge et de 12 500€ pour un couple. Notre compréhension est que cette majoration est appliquée au montant théorique de l’impôt pris en compte dans le calcul de la CDHR, et tenant compte de la CEHR ([Article 223 sexies](https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000036427364)). Ce montant est ensuite déduit de la CDHR théorique, c'est à dire de 20% du RFR.
 
Cette _majoration_ entraine donc une _réduction_ de la CDHR pour les couples et les personnes ayant des enfants à charge.
 
Par la suite nous continuons de parler de majoration car c'est le terme utilisé dans le texte de loi.
 
__Prenons l'exemple d'une personne seule avec trois enfants à charge__, voici l'impact de la CDHR telle que proposée, avec majoration :
 
%% Cell type:code id: tags:
 
``` python
def get_simulation_from_scenario_3_enfants(tbs, case_f2op=False):
scenario = init_single_entity(
tbs.new_scenario(),
# Axe declaration
axes=[
[
dict( # in a dictionary
count=nb_step, # 'count' indicates the number of steps
min=0,
max=f2dc_max,
name="f2dc", # the variable that will evolve 'count' times between 'min' and 'max' values
),
]
],
period=current_period,
parent1=dict(
date_naissance=date_naissance,
),
# parent2=dict(
# date_naissance=date_naissance,
# ),
enfants=[
dict(
date_naissance="2010-01-01",
),
dict(
date_naissance="2015-01-01",
),
dict(
date_naissance="2020-01-01",
),
],
foyer_fiscal=dict(f2op=case_f2op),
)
 
simulation = scenario.new_simulation()
return simulation
```
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
 
plf_tbs = PlfPlfss2025(FranceTaxBenefitSystem())
# Avec PFU
simulation_pfu_3_enfants = get_simulation_from_scenario_3_enfants(
plf_tbs, case_f2op=False
)
f2dc_pfu_3_enfants = simulation_pfu_3_enfants.calculate_add("f2dc", current_period)
 
irpp_economique_pfu_3_enfants = (
simulation_pfu_3_enfants.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_pfu_3_enfants = (
simulation_pfu_3_enfants.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
# Avec option au barème
simulation_bareme_3_enfants = get_simulation_from_scenario_3_enfants(
plf_tbs, case_f2op=True
)
 
irpp_economique_bareme_3_enfants = (
simulation_bareme_3_enfants.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_bareme_3_enfants = (
simulation_bareme_3_enfants.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
fig_3_enfants = plot(
f2dc_pfu_3_enfants,
irpp_economique_bareme_3_enfants,
irpp_economique_pfu_3_enfants,
irpp_economique_bareme_3_enfants
+ contribution_differentielle_hauts_revenus_bareme_3_enfants,
irpp_economique_pfu_3_enfants
+ contribution_differentielle_hauts_revenus_pfu_3_enfants,
"CDHR pour une personne seule avec trois enfants à charge",
)
 
seuil_cdhr_celibataire = (
plf_tbs.parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus.seuil_celibataire
)
add_x_reference(seuil_cdhr_celibataire, current_period, fig_3_enfants, "top left")
```
 
%% Cell type:markdown id: tags:
 
:::{.column-page}
 
%% Cell type:code id: tags:
 
``` python
fig_3_enfants.show()
```
 
%% Output
 
 
%% Cell type:markdown id: tags:
 
:::
 
%% Cell type:code id: tags:
 
``` python
Markdown(
"On constate sur le graphique ci-dessus que la CDHR n'a quasiment aucun effet pour ce cas-type avec l'option au barème. Sauf entre 327 000 € et 335 000 € de revenus."
)
Markdown(
f"Par exemple à {format_number(f2dc_pfu_3_enfants[330])} € de revenus, la CDHR fait passer l'impôt dû de {format_number(irpp_economique_bareme_3_enfants[330])} € à {format_number(irpp_economique_bareme_3_enfants[330] + contribution_differentielle_hauts_revenus_bareme_3_enfants[330])} €."
)
Markdown("Vous pouvez zoomer en entourant la zone du graphique avec votre souris.")
Markdown(
"Cela est dû à la majoration pour situation familiale. Nous allons simuler ce qu'il se serait passé sans cette majoration ci-après."
)
```
 
%% Output
 
On constate sur le graphique ci-dessus que la CDHR n'a quasiment aucun effet pour ce cas-type avec l'option au barème. Sauf entre 327 000 € et 335 000 € de revenus.
<IPython.core.display.Markdown object>
 
Par exemple à 330 661 € de revenus, la CDHR fait passer l'impôt dû de 61 210 € à 61 632 €.
<IPython.core.display.Markdown object>
 
Vous pouvez zoomer en entourant la zone du graphique avec votre souris.
<IPython.core.display.Markdown object>
 
Cela est dû à la majoration pour situation familiale. Nous allons simuler ce qu'il se serait passé sans cette majoration ci-après.
<IPython.core.display.Markdown object>
 
%% Cell type:markdown id: tags:
 
 
%% Cell type:markdown id: tags:
 
__Reprenons l'exemple d'une personne seule avec trois enfants à charge__, voici l'impact de la CDHR telle que proposée, en __retirant la majoration__ :
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
plf_tbs_sans_majoration = PlfPlfss2025(FranceTaxBenefitSystem())
plf_tbs_sans_majoration.neutralize_variable(
"contribution_exceptionnelle_hauts_revenus_majoration"
)
 
# Avec PFU
simulation_pfu_3_enfants = get_simulation_from_scenario_3_enfants(
plf_tbs_sans_majoration, case_f2op=False
)
f2dc_pfu_3_enfants = simulation_pfu_3_enfants.calculate_add("f2dc", current_period)
 
irpp_economique_pfu_3_enfants = (
simulation_pfu_3_enfants.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_pfu_3_enfants = (
simulation_pfu_3_enfants.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
 
# Avec option au barème
simulation_bareme_3_enfants = get_simulation_from_scenario_3_enfants(
plf_tbs_sans_majoration, case_f2op=True
)
 
irpp_economique_bareme = (
simulation_bareme_3_enfants.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_bareme = (
simulation_bareme_3_enfants.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
fig_3_enfants = plot(
f2dc_pfu_3_enfants,
irpp_economique_bareme,
irpp_economique_pfu_3_enfants,
irpp_economique_bareme + contribution_differentielle_hauts_revenus_bareme,
irpp_economique_pfu_3_enfants
+ contribution_differentielle_hauts_revenus_pfu_3_enfants,
"CDHR pour une personne seule avec trois enfants à charge, SI la majoration n'existait pas",
suffix=", sans majoration",
)
 
seuil_cdhr_celibataire = (
plf_tbs.parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus.seuil_celibataire
)
add_x_reference(seuil_cdhr_celibataire, current_period, fig_3_enfants, "top left")
```
 
%% Cell type:markdown id: tags:
 
:::{.column-page}
 
%% Cell type:code id: tags:
 
``` python
fig_3_enfants.show()
```
 
%% Output
 
 
%% Cell type:markdown id: tags:
 
:::
 
%% Cell type:code id: tags:
 
``` python
Markdown(
f"Si nous reprenons le cas d'un revenu de {format_number(f2dc_pfu_3_enfants[330])} €, l'absence de majoration aurait fait passer l'impôt final à payer, comprenant la CDHR, de {format_number(irpp_economique_bareme[330])} € à {format_number(irpp_economique_bareme[330] + contribution_differentielle_hauts_revenus_bareme[330])} €, contre seulement {format_number(irpp_economique_bareme_3_enfants[330] + contribution_differentielle_hauts_revenus_bareme_3_enfants[330])} € avec la majoration."
)
```
 
%% Output
 
Si nous reprenons le cas d'un revenu de 330 661 €, l'absence de majoration aurait fait passer l'impôt final à payer, comprenant la CDHR, de 61 210 € à 66 132 €, contre seulement 61 632 € avec la majoration.
<IPython.core.display.Markdown object>
 
%% Cell type:markdown id: tags:
 
 
%% Cell type:markdown id: tags:
 
## Impact cumulé de la décote et de la majoration.
 
Pour un couple, le PLF indique une entrée dans le dispositif de la CDHR à 500 000 € de revenus, contre 250 000 € pour une personne seule.
 
__Prenons l'exemple pour un couple marié/pacsé avec trois enfants à charge, qui perçoit uniquement des dividendes__, voici l'impact de la CDHR telle que proposée, avec majoration et décote :
 
%% Cell type:code id: tags:
 
``` python
def get_simulation_from_scenario_3_enfants_couple(tbs, case_f2op=False):
scenario = init_single_entity(
tbs.new_scenario(),
# Axe declaration
axes=[
[
dict( # in a dictionary
count=nb_step, # 'count' indicates the number of steps
min=0,
max=f2dc_max * 2,
name="f2dc", # the variable that will evolve 'count' times between 'min' and 'max' values
),
]
],
period=current_period,
parent1=dict(
date_naissance=date_naissance,
),
parent2=dict(
date_naissance=date_naissance,
),
enfants=[
dict(
date_naissance="2010-01-01",
),
dict(
date_naissance="2015-01-01",
),
dict(
date_naissance="2020-01-01",
),
],
foyer_fiscal=dict(f2op=case_f2op),
)
 
simulation = scenario.new_simulation()
return simulation
```
 
%% Cell type:code id: tags:
 
``` python
# | hide
 
 
plf_tbs = PlfPlfss2025(FranceTaxBenefitSystem())
# Avec PFU
simulation_pfu_3_enfants_couple = get_simulation_from_scenario_3_enfants_couple(
plf_tbs, case_f2op=False
)
f2dc_pfu_3_enfants_couple = simulation_pfu_3_enfants_couple.calculate_add(
"f2dc", current_period
)
 
irpp_economique_pfu_3_enfants_couple = (
simulation_pfu_3_enfants_couple.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_pfu_3_enfants_couple = (
simulation_pfu_3_enfants_couple.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
 
# Avec option au barème
simulation_bareme_3_enfants_couple = get_simulation_from_scenario_3_enfants_couple(
plf_tbs, case_f2op=True
)
 
irpp_economique_bareme_3_enfants_couple = (
simulation_bareme_3_enfants_couple.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_bareme_3_enfants_couple = (
simulation_bareme_3_enfants_couple.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
 
fig = plot(
f2dc_pfu_3_enfants_couple,
irpp_economique_bareme_3_enfants_couple,
irpp_economique_pfu_3_enfants_couple,
irpp_economique_bareme_3_enfants_couple
+ contribution_differentielle_hauts_revenus_bareme_3_enfants_couple,
irpp_economique_pfu_3_enfants_couple
+ contribution_differentielle_hauts_revenus_pfu_3_enfants_couple,
"CDHR pour un couple avec trois enfants à charge",
max_y=200_000,
)
 
seuil_cdhr_celibataire = (
plf_tbs.parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus.seuil_couple
)
add_x_reference(seuil_cdhr_celibataire, current_period, fig, "top left")
```
 
%% Cell type:markdown id: tags:
 
:::{.column-page}
 
%% Cell type:code id: tags:
 
``` python
fig.show()
```
 
%% Output
 
 
%% Cell type:markdown id: tags:
 
⚠️ Les axes du graphique ne sont plus les mêmes, le revenu ayant doublé.
 
%% Cell type:markdown id: tags:
 
:::
 
 
 
 
On observe le même effet de décalage de l'entrée dans la CDHR en raison de la décote et un effet presque nul de la CDHR avec l'option au barème, en raison de la majoration pour situation familiale de l'impôt pris en compte dans le calcul.
 
%% Cell type:markdown id: tags:
 
__Prenons l'exemple pour un couple marié/pacsé avec trois enfants à charge, qui perçoit uniquement des dividendes__, voici l'impact de la CDHR telle que proposée, __sans majoration ni décote__ :
 
%% Cell type:code id: tags:
 
``` python
# | hide
plf_tbs = PlfPlfss2025(FranceTaxBenefitSystem())
plf_tbs.neutralize_variable("contribution_exceptionnelle_hauts_revenus_majoration")
 
plf_tbs.neutralize_variable("contribution_differentielle_hauts_revenus_decote")
# Avec PFU
simulation_pfu_sans_majo_ni_decote = get_simulation_from_scenario_3_enfants_couple(
plf_tbs, case_f2op=False
)
f2dc_pfu_3_enfants_couple = simulation_pfu_sans_majo_ni_decote.calculate_add(
"f2dc", current_period
)
 
irpp_economique_pfu_3_enfants_couple = (
simulation_pfu_sans_majo_ni_decote.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_pfu_3_enfants_couple = (
simulation_pfu_sans_majo_ni_decote.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
 
# Avec option au barème
simulation_bareme_sans_majo_ni_decote = get_simulation_from_scenario_3_enfants_couple(
plf_tbs, case_f2op=True
)
 
irpp_economique_bareme_3_enfants_couple = (
simulation_bareme_sans_majo_ni_decote.calculate_add(
"impot_revenu_restant_a_payer", current_period
)
* -1
)
contribution_differentielle_hauts_revenus_bareme_3_enfants_couple = (
simulation_bareme_sans_majo_ni_decote.calculate_add(
"contribution_differentielle_hauts_revenus", current_period
)
)
 
 
fig = plot(
f2dc_pfu_3_enfants_couple,
irpp_economique_bareme_3_enfants_couple,
irpp_economique_pfu_3_enfants_couple,
irpp_economique_bareme_3_enfants_couple
+ contribution_differentielle_hauts_revenus_bareme_3_enfants_couple,
irpp_economique_pfu_3_enfants_couple
+ contribution_differentielle_hauts_revenus_pfu_3_enfants_couple,
"CDHR pour un couple avec trois enfants à charge, SANS majoration, ni décote",
max_y=200_000,
)
 
seuil_cdhr_coulpe = (
plf_tbs.parameters.impot_revenu.contributions_exceptionnelles.contribution_differentielle_hauts_revenus.seuil_couple
)
add_x_reference(seuil_cdhr_coulpe, current_period, fig, "top left")
```
 
%% Cell type:markdown id: tags:
 
:::{.column-page}
 
%% Cell type:code id: tags:
 
``` python
fig.show()
```
 
%% Output
 
 
%% Cell type:markdown id: tags:
 
:::
 
%% Cell type:markdown id: tags:
 
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment