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

application des abattements pour le calcul de la CSS #2361

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 :
humbleCraftman marked this conversation as resolved.
Show resolved Hide resolved
- `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.
humbleCraftman marked this conversation as resolved.
Show resolved Hide resolved
* 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.
humbleCraftman marked this conversation as resolved.
Show resolved Hide resolved
* Périodes concernées : toutes.
* Zones impactées :
* Zones impactées :
humbleCraftman marked this conversation as resolved.
Show resolved Hide resolved
- `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

humbleCraftman marked this conversation as resolved.
Show resolved Hide resolved
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),
Copy link
Member

Choose a reason for hiding this comment

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

Utiliser des vecteurs booléens et * pour AND

individu('asi', period)),
True, False)
appliquer_abattement_couple = sum_(adulte_ayant_asi) > 1
aah = individu('aah', period)
Copy link
Member

Choose a reason for hiding this comment

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

Sur quelle entité faut-il sommer ? Là, on risque de sommer sur toutes la population si on a des données qui ne se réduisent pas à un cas type.

Copy link
Author

Choose a reason for hiding this comment

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

@benjello @sylvainipp en réfléchissant sur ce commentaire je me suis posé la question de savoir si la variable "asi" est vraiment une variable "Individu". Ne devrait t-elle pas être une variable "famille" comme l'aspa ? En effet, elle dépend comme l'aspa de la composition et des ressources des autres membres (conjoint en l'occurrence) du foyer.
Merci de me donner votre avis car je connais pas très bien openFisca je débute

Copy link
Author

Choose a reason for hiding this comment

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

en regardant les définitions de l'ASI et de l'ASPA je me dis qu'elles se ressemblent beaucoup quand même. Elles dépendent toutes deux du fait d'être en couple ou pas:

Copy link
Member

Choose a reason for hiding this comment

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

Je ne connais pas (ou ne me souviens pas) des raisons ayant présidé à ce choix. Mais l'idée n'est pas que le choix de l'entité soit lié aux ressources que l'on considère, mais à qui elle est versée et si elle peut être considérée comme une prestation collective ou individuelle.

Copy link
Contributor

Choose a reason for hiding this comment

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

Il semble que l'ASI soit passée de l'entité Famille à l'Individu à la version 25.0.0 d'openfisca-france : #1156
cc @guillett @Morendil au cas où vous auriez encore la mémoire de ce choix

La question des performances a aussi été discutée dans une PR référencée sur la précédente : #991

Copy link
Contributor

Choose a reason for hiding this comment

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

C'est loin: je ne me souviens plus du raisonnement… de ce que je peux comprendre en lisant les commits de #1156 c'était une amélioration de modélisation par rapport à la version précédente (cf. le commentaire TODO: Faute de mieux, on verse l'asi à la famille plutôt qu'aux individus), effectivement l'ASI semble bien être une prestation individuelle.

return select(
[aah > 0, appliquer_abattement_couple and adulte_ayant_asi, adulte_ayant_asi],
[0, abattement_asi_couple, abattement_asi_personne_seule],
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
[aah > 0, appliquer_abattement_couple and adulte_ayant_asi, adulte_ayant_asi],
[aah > 0, appliquer_abattement_couple * adulte_ayant_asi, adulte_ayant_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_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)],
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
[aspa > 0 and aspa_couple, aspa > 0],
[(aspa > 0) * aspa_couple, aspa > 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
Loading