Skip to content

Commit

Permalink
Corrections lint, refacto calcul seuils revenus
Browse files Browse the repository at this point in the history
  • Loading branch information
c82jdur committed Nov 21, 2024
1 parent 63e5185 commit 4e9fe11
Showing 1 changed file with 45 additions and 48 deletions.
93 changes: 45 additions & 48 deletions openfisca_france/model/prestations/prestations_familiales/paje.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,6 @@ def formula_2017_04_01(famille, period, parameters):

inactif = famille('inactif', period)
partiel1 = famille('partiel1', period)
nombre_enfants = famille('af_nbenf', period)
base_ressources = famille('prestations_familiales_base_ressources', period.first_month)
emploi_direct = famille('empl_dir', period)
assistant_maternel = famille('ass_mat', period)
Expand All @@ -449,10 +448,6 @@ def formula_2017_04_01(famille, period, parameters):

etudiant_i = famille.members('etudiant', period)
parent_etudiant = famille.any(etudiant_i, role = Famille.PARENT)

# Il s'agit d'une famille monoparentale (parent isolé)
parent_isole = famille('nb_parents', period) == 1


# condition de revenu minimal

Expand All @@ -470,34 +465,35 @@ def formula_2017_04_01(famille, period, parameters):
paje_prepare_inactif = (paje_prepare > 0) * inactif
eligible = cond_eligibilite * not_(paje_prepare_inactif)

# Les plafonds de ressource
def calculer_seuil(nombre_enfants, params, is_parent_isole, taux_parent_isole, paje_prepare_temps_partiel):
# On détermine la valeur initiale du plafond en fonction du nombre d'enfants
seuil_revenus = ((nombre_enfants == 1) * params.enfant + (nombre_enfants >= 2) * params.deux_enfants
+ max_(nombre_enfants - 2, 0) * params.majoration_enfant_supp)

# On détermine la valeur initiale du premier plafond en fonction du nombre d'enfants
seuil_revenus_1 = (
(nombre_enfants == 1) * paje.plaf_cmg.premier_plafond_ne_adopte_apres_04_2014.enfant
+ (nombre_enfants >= 2) * paje.plaf_cmg.premier_plafond_ne_adopte_apres_04_2014.deux_enfants
+ max_(nombre_enfants - 2, 0) * paje.plaf_cmg.premier_plafond_ne_adopte_apres_04_2014.majoration_enfant_supp
)
# On applique la majoration "parent isolé" si applicable
seuil_revenus_1 = seuil_revenus_1 * (1 + parent_isole * paje.plaf_cmg.majoration_plafond_personne_isolee)

# On détermine la valeur initiale du second plafond en fonction du nombre d'enfants
seuil_revenus_2 = (
(nombre_enfants == 1) * paje.plaf_cmg.deuxieme_plafond_ne_adopte_apres_04_2014.enfant
+ (nombre_enfants >= 2) * paje.plaf_cmg.deuxieme_plafond_ne_adopte_apres_04_2014.deux_enfants
+ max_(nombre_enfants - 2, 0) * paje.plaf_cmg.deuxieme_plafond_ne_adopte_apres_04_2014.majoration_enfant_supp
)
# On applique la majoration "parent isolé" si applicable
seuil_revenus_2 = seuil_revenus_2 * (1 + parent_isole * paje.plaf_cmg.majoration_plafond_personne_isolee)
# On applique la majoration "parent isolé" si applicable
seuil_revenus = seuil_revenus * (1 + is_parent_isole * taux_parent_isole)

# Si vous bénéficiez du PreParE taux partiel (= vous travaillez entre 50 et 80% de la durée du travail fixée
# dans l'entreprise), vous cumulez intégralement la PreParE et le Cmg.
# Si vous bénéficiez du PreParE taux partiel (= vous travaillez à 50% ou moins de la durée
# du travail fixée dans l'entreprise), le montant des plafonds Cmg est divisé par 2.
seuil_revenus = seuil_revenus * (1 - .5 * paje_prepare_temps_partiel)

# Si vous bénéficiez du PreParE taux partiel (= vous travaillez entre 50 et 80% de la durée du travail fixée
# dans l'entreprise), vous cumulez intégralement la PreParE et le Cmg.
# Si vous bénéficiez du PreParE taux partiel (= vous travaillez à 50% ou moins de la durée
# du travail fixée dans l'entreprise), le montant des plafonds Cmg est divisé par 2.
return seuil_revenus

# Les plafonds de ressource

paje_prepare_temps_partiel = (paje_prepare > 0) * partiel1
seuil_revenus_1 = seuil_revenus_1 * (1 - .5 * paje_prepare_temps_partiel)
seuil_revenus_2 = seuil_revenus_2 * (1 - .5 * paje_prepare_temps_partiel)
nombre_enfants = famille('af_nbenf', period)
# Il s'agit d'une famille monoparentale (parent isolé)
parent_isole = famille('nb_parents', period) == 1

seuil_revenus_1 = calculer_seuil(nombre_enfants, paje.plaf_cmg.premier_plafond_ne_adopte_apres_04_2014,
parent_isole, paje.plaf_cmg.majoration_plafond_personne_isolee,
paje_prepare_temps_partiel)
seuil_revenus_2 = calculer_seuil(nombre_enfants, paje.plaf_cmg.deuxieme_plafond_ne_adopte_apres_04_2014,
parent_isole, paje.plaf_cmg.majoration_plafond_personne_isolee,
paje_prepare_temps_partiel)

# calcul du montant

Expand All @@ -507,64 +503,65 @@ def formula_2017_04_01(famille, period, parameters):
elig_seuil_2 = (base_ressources >= seuil_revenus_1) * (base_ressources < seuil_revenus_2)
# On détermine si les ressources de la famille sont au-dessus du second plafond
elig_seuil_3 = base_ressources >= seuil_revenus_2

# On détermine le taux à appliquer au montant de la CMG emploi direct
taux_seuils_emploi_direct = select(
[ elig_seuil_1, elig_seuil_2, elig_seuil_3 ],
[elig_seuil_1, elig_seuil_2, elig_seuil_3],
[
paje.paje_cmg.complement_libre_choix_mode_garde.revenus_inferieurs_45_plaf,
paje.paje_cmg.complement_libre_choix_mode_garde.revenus_superieurs_45_plaf,
paje.paje_cmg.complement_libre_choix_mode_garde.revenus_superieurs_plaf
]
)
]
)
# On détermine le taux à appliquer au montant de la CMG assistant maternel
taux_seuils_assistant_maternel = select(
[ elig_seuil_1, elig_seuil_2, elig_seuil_3 ],
[elig_seuil_1, elig_seuil_2, elig_seuil_3],
[
paje.paje_cmg.assistante_mat_asso_entreprise_microcreche.sous_premier_plafond,
paje.paje_cmg.assistante_mat_asso_entreprise_microcreche.sous_second_plafond,
paje.paje_cmg.assistante_mat_asso_entreprise_microcreche.apres_second_plafond
]
)
]
)
# On détermine le taux à appliquer au montant de la CMG garde domicile/micro-crèche
taux_seuils_garde_domicile_micro_creche = select(
[ elig_seuil_1, elig_seuil_2, elig_seuil_3 ],
[elig_seuil_1, elig_seuil_2, elig_seuil_3],
[
paje.paje_cmg.garde_domicile.sous_premier_plafond,
paje.paje_cmg.garde_domicile.sous_second_plafond,
paje.paje_cmg.garde_domicile.apres_second_plafond
]
)
]
)

# On récupère le nombre d'enfants donnant droit à une prestation pleine du CMG
nb_enf_presta_pleine = nb_enf(famille, period, 0,
paje.paje_cmg.limite_age.pleine - 1)
paje.paje_cmg.limite_age.pleine - 1)
# On récupère le nombre d'enfants donnant droit à une prestation réduite du CMG
nb_enf_presta_reduite = nb_enf(famille, period, paje.paje_cmg.limite_age.pleine,
paje.paje_cmg.limite_age.reduite - 1)
paje.paje_cmg.limite_age.reduite - 1)

# On calcule le coefficient de majoration des différents types de CMG en fonction du nombre d'enfants
coeff_enfants_emploi_direct = (1.0 * (nb_enf_presta_pleine > 0) + 0.5 * (nb_enf_presta_reduite > 0))
coeff_enfants_assistant_maternel_micro_creche = (1.0 * nb_enf_presta_pleine + 0.5 * nb_enf_presta_reduite)
coeff_enfants_garde_domicile = select(
[ nb_enf_presta_pleine > 0, nb_enf_presta_reduite > 0 ],
[ 1.0, 0.5 ],
[nb_enf_presta_pleine > 0, nb_enf_presta_reduite > 0],
[1.0, 0.5],
0
)
)

montant_cmg = bmaf * (
emploi_direct * taux_seuils_emploi_direct * coeff_enfants_emploi_direct
+ assistant_maternel * taux_seuils_assistant_maternel * coeff_enfants_assistant_maternel_micro_creche
+ garde_a_domicile * taux_seuils_garde_domicile_micro_creche * coeff_enfants_garde_domicile
+ micro_creche * taux_seuils_garde_domicile_micro_creche * coeff_enfants_assistant_maternel_micro_creche
)
)
montant_cmg = montant_cmg * (1 + parent_isole * paje.paje_cmg.majoration_montant_personne_isolee)

frais_garde = famille('frais_garde', period)
# Le montant de la CMG ne doit pas dépasser 85% des frais de garde de la famille
montant_cmg = where(frais_garde > 0.0,
min_(montant_cmg, frais_garde * paje.paje_cmg.taux_prise_en_charge_maximale),
montant_cmg)
min_(montant_cmg, frais_garde * paje.paje_cmg.taux_prise_en_charge_maximale),
montant_cmg
)
paje_cmg = eligible * montant_cmg
# TODO: connecter avec le crédit d'impôt
# TODO vérfiez les règles de cumul
Expand Down

0 comments on commit 4e9fe11

Please sign in to comment.