Skip to content

Commit

Permalink
Fiabilisation du calcul des ressources pour l eligibilite a la CSS pa…
Browse files Browse the repository at this point in the history
…r application des abattements
  • Loading branch information
Georges Faye committed Oct 2, 2024
1 parent a6a9e0d commit c36543a
Show file tree
Hide file tree
Showing 13 changed files with 1,095 additions and 23 deletions.
25 changes: 20 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

### 168.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)


## 168.2.0 [2360](https://github.com/openfisca/openfisca-france/pull/2360)

* Évolution du système socio-fiscal. | Correction d'un crash.
Expand Down Expand Up @@ -862,7 +877,7 @@ Zones impactées :

* Évolution du système socio-fiscal.
* Périodes concernées : à partir du 01/01/2024.
* Zones impactées :
* Zones impactées :
- `openfisca_france/parameters/impot_revenu/calcul_revenus_imposables/charges_deductibles/pensions_alimentaires/plafond.yaml`.
- `openfisca_france/parameters/impot_revenu/calcul_revenus_imposables/charges_deductibles/pensions_alimentaires/plafond.yaml`
* Détails :
Expand All @@ -878,17 +893,17 @@ Zones impactées :

### 155.2.1 [2237](https://github.com/openfisca/openfisca-france/pull/2237)

* Amélioration technique.
* Amélioration technique.
* Périodes concernées : à partir du 01/07/2022.
* Zones impactées : `openfisca_france/model/revenus/activite/salarie.py`
* Détails :
- Ajoute un lien vers la page de documentation du BOSS concernant la `prime_partage_valeur`, PPV.

### 155.2.0 [2232](https://github.com/openfisca/openfisca-france/pull/2232)

* Amélioration technique.
* Amélioration technique.
* Périodes concernées : toutes.
* Zones impactées :
* Zones impactées :
- `openfisca_france/model/prestations/minima_sociaux/rsa.py`
- `openfisca_france/model/prestations/minima_sociaux/ppa.py`
- `openfisca_france/model/prestations/minima_sociaux/anciens_ms.py`
Expand Down Expand Up @@ -4218,7 +4233,7 @@ git log --oneline commit_debut^..commit_fin | grep "variable_name"
- `parameters/prelevements_sociaux/cotisations_securite_sociale_regime_general/famille`
- `parameters/prelevements_sociaux/cotisations_securite_sociale_regime_general/csa`
* Détails :
- Met à jour certaines valeurs et références de cotisations employeur, dont : la contribution apprentissage, la contribution solidarité autonomie, les cotisations famille, la contribution au dialogue social et le versement transport
- Met à jour certaines valeurs et références de cotisations employeur, dont : la Contribution apprentissage, la Contribution solidarité autonomie, les cotisations famille, la contribution au dialogue social et le versement transport

## 80.4.0 [#1725](https://github.com/openfisca/openfisca-france/pull/1725)

Expand Down
105 changes: 91 additions & 14 deletions openfisca_france/model/prestations/minima_sociaux/cs/ressources.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from numpy import absolute as abs_, logical_or as or_, logical_not as not_
from numpy import absolute as abs_, logical_and as and_, logical_or as or_, logical_not as not_, maximum as max_, select, where, sum as sum_

from openfisca_core.periods import Period

from openfisca_france.model.base import (
Variable,
Individu,
Famille,
FoyerFiscal,
MONTH,
ADD,
TypesStatutOccupationLogement,
Expand All @@ -31,17 +32,16 @@ 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',
'css_base_ressources_aah_individu',
'allocation_securisation_professionnelle',
'asi',
'ass',
'bourse_recherche',
'caah',
Expand Down Expand Up @@ -82,10 +82,80 @@ 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_01(individu, period, parameters):
return max_(individu('aah', period) - parameters(period).prestations_sociales.solidarite_insertion.minima_sociaux.cs.css.abattements.aah, 0)

class css_abattement_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 0

def formula_2021_04_01(individu, period, parameters):

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/2
adulte_ayant_asi = where(and_(
individu.has_role(FoyerFiscal.DECLARANT),
individu('asi', period)),
True, False)
appliquer_abattement_couple = sum_(adulte_ayant_asi) > 1
aah = individu('aah', period)
return select(
[aah > 0, appliquer_abattement_couple and adulte_ayant_asi, adulte_ayant_asi],
[0, abattement_asi_couple, abattement_asi_personne_seule],
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_01(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 and 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
Expand All @@ -95,12 +165,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 +185,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 @@ -127,23 +197,30 @@ def formula(famille, period, parameters):
)

ressources_individuelles = famille.members('css_cmu_base_ressources_individu', period)
ressources_parents = famille.sum(ressources_individuelles, role = Famille.PARENT)
ressources_individuelles_asi = famille.members('asi', previous_year, options = [ADD])
abattements_asi_individuelles = famille.members('css_abattement_asi_individu', previous_year, options = [ADD])

ressources_asi_parents = max_(famille.sum(ressources_individuelles_asi, role = Famille.PARENT) - famille.sum(abattements_asi_individuelles), 0)
ressources_parents = famille.sum(ressources_individuelles, role = Famille.PARENT) + ressources_asi_parents

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

return forfait_logement + ressources_famille + ressources_parents + ressources_enfants

# Helper functions

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

# 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 +240,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 setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

setup(
name = 'OpenFisca-France',
version = '168.2.0',
version = '168.2.1',
author = 'OpenFisca Team',
author_email = '[email protected]',
classifiers = [
Expand Down
6 changes: 3 additions & 3 deletions tests/formulas/cs/css.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
acs_plafond: 30209.49

- name: "CSS: Base de ressource d'une personne seule"
period: 2019-11
period: 2019-12
absolute_error_margin: 0.1
input:
individus:
Expand Down Expand Up @@ -78,7 +78,7 @@
css_cmu_base_ressources: 10000

- name: "CSS: Base de ressource de deux personnes"
period: 2019-11
period: 2019-12
absolute_error_margin: 0.1
input:
individus:
Expand Down Expand Up @@ -179,7 +179,7 @@
css_cmu_base_ressources: 14000

- name: "CSS: Base de ressource de cinq personnes"
period: 2019-11
period: 2019-12
absolute_error_margin: 0.1
input:
individus:
Expand Down
Loading

0 comments on commit c36543a

Please sign in to comment.