Skip to content

Commit

Permalink
application des abattements pour le calcul de la CSS (#2361)
Browse files Browse the repository at this point in the history
  • Loading branch information
humbleCraftman authored Oct 31, 2024
2 parents 91289d7 + 4bd085a commit 7b98f0e
Show file tree
Hide file tree
Showing 12 changed files with 1,100 additions and 13 deletions.
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Changelog

### 169.2.1 [2361](https://github.com/openfisca/openfisca-france/pull/2361)

* Évolution du système socio-fiscal.
* Périodes concernées : à partir du 01/04/2021.
* Zones impactées :
- `openfisca_france/model/prestations/minima_sociaux/cs/ressources.py`
- `openfisca_france/parameters/prestations_sociales/solidarite_insertion/minima_sociaux/cs/css/`
* Détails :
Prise en compte des abattements pour palier les revalorisations exceptionnelles de
- l’allocation aux adultes handicapés (AAH),
- l’allocation de solidarité aux personnes âgées (ASPA),
- l’allocation supplémentaire vieillesse (ASV),
- l’allocation supplémentaire d’invalidité (ASI)

### 169.2.0 [2371](https://github.com/openfisca/openfisca-france/pull/2371)

* Évolution du système socio-fiscal.
Expand Down
110 changes: 98 additions & 12 deletions openfisca_france/model/prestations/minima_sociaux/cs/ressources.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from numpy import absolute as abs_, logical_or as or_, logical_not as not_
from numpy import absolute as abs_, logical_or as or_, logical_not as not_, select

from openfisca_core.periods import Period

Expand All @@ -8,6 +8,7 @@
Famille,
MONTH,
ADD,
max_,
TypesStatutOccupationLogement,
TypesActivite,
set_input_divide_by_period,
Expand All @@ -31,21 +32,21 @@ class css_cmu_base_ressources_individu(Variable):

def formula(individu, period, parameters):
# Rolling year
previous_year = Period(('year', period.start, 1)).offset(-1)
previous_year = compute_previous_year(period)
# N-1
last_year = period.last_year
last_month = period.last_month

P = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.cmu
parametres_cmu = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.cmu

ressources_a_inclure = [
'aah',
'allocation_securisation_professionnelle',
'asi',
'ass',
'bourse_recherche',
'caah',
'chomage_net',
'css_base_ressources_aah_individu',
'css_base_ressources_asi_individu',
'dedommagement_victime_amiante',
'gains_exceptionnels',
'indemnites_chomage_partiel',
Expand Down Expand Up @@ -82,11 +83,91 @@ def formula(individu, period, parameters):
+ bourse
+ revenus_tns(individu, previous_year, last_year)
- pensions_alim_versees
- abbattement_chomage(individu, period, previous_year, P)
- abattement_chomage(individu, period, previous_year, parametres_cmu)
- neutralisation_stage_formation_pro(individu, previous_year, last_month)
)


class css_base_ressources_aah_individu(Variable):
value_type = float
label = "Base de ressources AAH de l'individu prise en compte pour l'éligibilité à la CSS après application de l'abattement"
reference = [
'Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021',
'https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75',
'Bulletin officiel Santé - Protection sociale - Solidarité n° 2023/24 du 29 décembre 2023 - Instruction interministérielle N° DSS/SD2A/2023/98 du 22 décembre 2023',
'https://sante.gouv.fr/fichiers/bo/2023/2023.24.sante.pdf#page=82',
]
entity = Individu
definition_period = MONTH
set_input = set_input_divide_by_period

def formula(individu, period, parameters):
return individu('aah', period)

def formula_2021_04(individu, period, parameters):
return max_(individu('aah', period) - parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.css.abattements.aah, 0)


class css_base_ressources_asi_individu(Variable):
value_type = float
label = "Base de ressources ASI de l'individu prise en compte pour l'éligibilité à la CSS après application de l'abattement"
reference = [
'Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021',
'https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75'
]
entity = Individu
definition_period = MONTH
set_input = set_input_divide_by_period

def formula(individu, period, parameters):
return individu('asi', period)

def formula_2021_04(individu, period, parameters):

aah = individu('aah', period)
asi = individu('asi', period)
asi_famille = individu.famille.members('asi', period)
nb_allocataire_asi = individu.famille.sum(asi_famille > 0, role=Famille.PARENT)

abattement_asi_personne_seule = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.css.abattements.asi.personne_seule
abattement_asi_couple = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.css.abattements.asi.couple

condition_abattement_asi_couple = nb_allocataire_asi > 1
condition_abattement_asi_personne_seule = asi > 0
abattement_asi = select(
[aah > 0, condition_abattement_asi_couple, condition_abattement_asi_personne_seule],
[0, abattement_asi_couple / 2, abattement_asi_personne_seule],
0)

montant_asi = asi - abattement_asi
return max_(montant_asi, 0)


class css_base_ressources_aspa_asv(Variable):
value_type = float
label = "Base de ressources ASPA/ASV de pour une famille prise en compte pour l'éligibilité à la CSS après application de l'abattement"
reference = [
'Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021',
'https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75'
]
entity = Famille
definition_period = MONTH
set_input = set_input_divide_by_period

def formula(famille, period, parameters):
return famille('aspa', period)

def formula_2021_04(famille, period, parameters):
aspa = famille('aspa', period)
aspa_couple = famille('aspa_couple', period)
abattement_aspa_personne_seule = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.css.abattements.aspa_asv.personne_seule
abattement_aspa_couple = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.css.abattements.aspa_asv.couple
return select(
[(aspa > 0) * aspa_couple, aspa > 0],
[max_(aspa - abattement_aspa_couple, 0), max_(aspa - abattement_aspa_personne_seule, 0)],
aspa)


class css_cmu_base_ressources(Variable):
value_type = float
label = "Base de ressources prise en compte pour l'éligibilité à la ACS / CMU-C / CSS"
Expand All @@ -95,12 +176,12 @@ class css_cmu_base_ressources(Variable):
set_input = set_input_divide_by_period

def formula(famille, period, parameters):
previous_year = Period(('year', period.start, 1)).offset(-1)
previous_year = compute_previous_year(period)

ressources_famille_a_inclure = [
'af',
'asf',
'aspa',
'css_base_ressources_aspa_asv',
'cf',
'paje_clca',
'paje_prepare',
Expand All @@ -115,7 +196,7 @@ def formula(famille, period, parameters):
css_cmu_forfait_logement_base = famille('css_cmu_forfait_logement_base', period)
css_cmu_forfait_logement_al = famille('css_cmu_forfait_logement_al', period)

P = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.cmu
parametres_cmu = parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.cmu

proprietaire = (statut_occupation_logement == TypesStatutOccupationLogement.proprietaire)
heberge_titre_gratuit = (statut_occupation_logement == TypesStatutOccupationLogement.loge_gratuitement)
Expand All @@ -130,20 +211,25 @@ def formula(famille, period, parameters):
ressources_parents = famille.sum(ressources_individuelles, role = Famille.PARENT)

age = famille.members('age', period)
condition_enfant_a_charge = (age >= 0) * (age <= P.age_limite_pac)
condition_enfant_a_charge = (age >= 0) * (age <= parametres_cmu.age_limite_pac)
ressources_enfants = famille.sum(ressources_individuelles * condition_enfant_a_charge, role = Famille.ENFANT)

return forfait_logement + ressources_famille + ressources_parents + ressources_enfants

# Helper functions


def compute_previous_year(period):
return Period(('year', period.start, 1)).offset(-1)

# Abattement sur revenus d'activité si :
# - IJ maladie
# - chômage
# - ass
# - formation professionnelle
def abbattement_chomage(individu, period, previous_year, P):


def abattement_chomage(individu, period, previous_year, parametres_cmu):
indemnites_journalieres_maladie = individu('indemnites_journalieres_maladie', period)

chomage = individu('activite', period) == TypesActivite.chomeur
Expand All @@ -163,7 +249,7 @@ def abbattement_chomage(individu, period, previous_year, P):

salaire_net = individu('salaire_net', previous_year, options = [ADD])

return eligibilite_abattement_chomage * salaire_net * P.abattement_chomage
return eligibilite_abattement_chomage * salaire_net * parametres_cmu.abattement_chomage


# Revenus de stage de formation professionnelle exclus si plus perçus depuis 1 mois
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
description: Abattement sur le montant des ressources AAH pour le calcul de l'éligibilité à la CSS
values:
2021-04-01:
value: 68
metadata:
short_label: Abattement
unit: currency
reference:
2021-04-01:
title: Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021
href: https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75
notes:
2024-01-01:
title: Précisions sur la formule - Bulletin officiel Santé - Protection sociale - Solidarité n° 2023/24 du 29 décembre 2023 - Instruction interministérielle N° DSS/SD2A/2023/98 du 22 décembre 2023
href: https://sante.gouv.fr/fichiers/bo/2023/2023.24.sante.pdf#page=82
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
description: Abattement sur le montant des ressources ASI pour le calcul de l'éligibilité à la CSS pour un couple dont les deux personnes beneficient de l'aide
values:
2021-04-01:
value: 86
metadata:
short_label: Abattement
unit: currency
reference:
2021-04-01:
title: Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021
href: https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
description: Abattement sur le montant des ressources ASI pour le calcul de l'éligibilité à la CSS
values:
2021-04-01:
value: 49
metadata:
short_label: Abattement
unit: currency
reference:
2021-04-01:
title: Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021
href: https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
description: Abattement sur le montant des ressources ASPA/ASV pour le calcul de l'éligibilité à la CSS pour un couple
values:
2021-04-01:
value: 110
metadata:
short_label: Abattement
unit: currency
reference:
2021-04-01:
title: Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021
href: https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
description: Abattement sur le montant des ressources ASPA/ASV pour le calcul de l'éligibilité à la CSS pour une personne seule
values:
2021-04-01:
value: 71
metadata:
short_label: Abattement
unit: currency
reference:
2021-04-01:
title: Bulletin officiel Santé - Protection sociale - Solidarité n° 2021/6 du 16 avril 2021 - Instruction interministérielle N° DSS/SD2A/2021/71 du 30 mars 2021
href: https://sante.gouv.fr/fichiers/bo/2021/2021.6.sante.pdf#page=75
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
description: Abattements sur le montant de certaines ressources pour le calcul de l'éligibilité à la CSS
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "OpenFisca-France"
version = "169.2.0"
version = "169.2.1"
description = "OpenFisca Rules as Code model for France."
readme = "README.md"
keywords = ["microsimulation", "tax", "benefit", "rac", "rules-as-code", "france"]
Expand Down
Loading

0 comments on commit 7b98f0e

Please sign in to comment.