Skip to content

Commit

Permalink
Arrangement des formula de aah_base_ressources
Browse files Browse the repository at this point in the history
  • Loading branch information
JoDuGa committed Jul 19, 2023
1 parent 8102a29 commit 893b039
Showing 1 changed file with 83 additions and 82 deletions.
165 changes: 83 additions & 82 deletions openfisca_france/model/prestations/minima_sociaux/aah.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,70 +41,28 @@ class aah_base_ressources(Variable):
definition_period = MONTH
set_input = set_input_divide_by_period

def formula(individu, period, parameters): # formule pour les cas les plus anciens, moins vérifiée (sans abattement à part celui de 20% sur les revenus du conjoint)
_parameters = parameters(period)
aah = _parameters.prestations_sociales.prestations_etat_de_sante.invalidite.aah

def assiette_conjoint(revenus_conjoint):
return (1 - _parameters.impot_revenu.calcul_revenus_imposables.deductions.taux_salaires_pensions) * (1 - aah.abattement_conjoint.abattement_proportionnel) * revenus_conjoint

def base_ressource_eval_annuelle():
base_ressource = individu('aah_base_ressources_activite_eval_annuelle', period) + individu('aah_base_ressources_hors_activite_eval_annuelle', period)

base_ressource_demandeur_conjoint = individu.famille.demandeur('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint_conjoint = individu.famille.conjoint('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource + assiette_conjoint(base_ressource_conjoint)

return base_ressource_eval_annuelle() / 12

def formula_2005_07_01(individu, period, parameters):
law = parameters(period)
aah = law.prestations_sociales.prestations_etat_de_sante.invalidite.aah

def assiette_conjoint(revenus_conjoint):
return (1 - law.impot_revenu.calcul_revenus_imposables.deductions.taux_salaires_pensions) * (1 - aah.abattement_conjoint.abattement_proportionnel) * revenus_conjoint

def assiette_revenu_activite_demandeur(revenus_demandeur):
smic_brut_horaire = law.marche_travail.salaire_minimum.smic.smic_b_horaire
seuil1 = aah.travail_ordinaire.tranche_smic_horaire1 * smic_brut_horaire
seuil2 = aah.travail_ordinaire.tranche_smic_horaire2 * smic_brut_horaire
seuil3 = aah.travail_ordinaire.tranche_smic_horaire3 * smic_brut_horaire
seuil4 = aah.travail_ordinaire.tranche_smic_horaire4 * smic_brut_horaire
total_tranche1 = min_(seuil1, revenus_demandeur) * (1 - aah.travail_ordinaire.abattement_300)
total_tranche2 = max_(0, min_(revenus_demandeur - seuil1, seuil2 - seuil1)) * (1 - aah.travail_ordinaire.abattement_700)
total_tranche3 = max_(0, min_(revenus_demandeur - seuil2, seuil3 - seuil2)) * (1 - aah.travail_ordinaire.abattement_1100)
total_tranche4 = max_(0, min_(revenus_demandeur - seuil3, seuil4 - seuil3)) * (1 - aah.travail_ordinaire.abattement_1500)
total_tranche5 = max_(0, revenus_demandeur - seuil4)
return total_tranche1 + total_tranche2 + total_tranche3 + total_tranche4 + total_tranche5

def base_ressource_eval_annuelle():
base_ressource_activite = assiette_revenu_activite_demandeur(individu('aah_base_ressources_activite_eval_annuelle', period))
base_ressource = base_ressource_activite + individu('aah_base_ressources_hors_activite_eval_annuelle', period)

base_ressource_demandeur_conjoint = individu.famille.demandeur('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint_conjoint = individu.famille.conjoint('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource + assiette_conjoint(base_ressource_conjoint)

return base_ressource_eval_annuelle() / 12

def formula_2011(individu, period, parameters):
def formula_2023_10_01(individu, period, parameters):
law = parameters(period)
aah = law.prestations_sociales.prestations_etat_de_sante.invalidite.aah

en_activite = (individu('salaire_imposable', period, options = [ADD]) + individu('rpns_imposables', period.last_year) > 0)

def assiette_conjoint(revenus_conjoint):
return (1 - law.impot_revenu.calcul_revenus_imposables.deductions.taux_salaires_pensions) * (1 - aah.abattement_conjoint.abattement_proportionnel) * revenus_conjoint
en_activite = individu('activite', period) == TypesActivite.actif

def assiette_revenu_activite_demandeur(revenus_demandeur):
smic_brut_annuel = 12 * law.marche_travail.salaire_minimum.smic.smic_b_horaire * law.marche_travail.salaire_minimum.smic.nb_heures_travail_mensuel
total_tranche1 = min_(aah.travail_ordinaire.tranche_smic * smic_brut_annuel, revenus_demandeur)
total_tranche2 = max_(0, revenus_demandeur - total_tranche1)
return (1 - aah.travail_ordinaire.abattement_30) * total_tranche1 + (1 - aah.travail_ordinaire.abattement_sup) * total_tranche2
revenus_abattus_smic = (1 - aah.travail_ordinaire.abattement_30) * total_tranche1 + (1 - aah.travail_ordinaire.abattement_sup) * total_tranche2

last_month = Period(('month', period.start, 1)).offset(-1)
ressource_interrompue = not_(en_activite + (individu('activite', period) == TypesActivite.etudiant))
has_ressources_substitution = (
individu('chomage_net', last_month)
+ individu('retraite_nette', last_month)
+ individu('rente_accident_travail', last_month)
+ individu('pensions_invalidite', last_month)
) > 0
abattement_cessation_activite = (1 - aah.abattement_cessation_activite * (ressource_interrompue + has_ressources_substitution))
return abattement_cessation_activite * (revenus_abattus_smic)

def base_ressource_eval_trim():
three_previous_months = Period(('month', period.first_month.start, 3)).offset(-3)
Expand All @@ -113,21 +71,13 @@ def base_ressource_eval_trim():

base_ressource_demandeur = max_(0, assiette_revenu_activite_demandeur(base_ressource_activite) + base_ressource_hors_activite)

base_ressource_demandeur_conjoint = max_(0, individu.famille.demandeur('aah_base_ressources_activite_eval_trimestrielle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_trimestrielle', period))
base_ressource_conjoint_conjoint = max_(0, individu.famille.conjoint('aah_base_ressources_activite_eval_trimestrielle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_trimestrielle', period))
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource_demandeur + assiette_conjoint(base_ressource_conjoint)
return base_ressource_demandeur

def base_ressource_eval_annuelle():
base_ressource_activite = assiette_revenu_activite_demandeur(individu('aah_base_ressources_activite_eval_annuelle', period))
base_ressource = base_ressource_activite + individu('aah_base_ressources_hors_activite_eval_annuelle', period)

base_ressource_demandeur_conjoint = individu.famille.demandeur('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint_conjoint = individu.famille.conjoint('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource + assiette_conjoint(base_ressource_conjoint)
return base_ressource

return where(
en_activite,
Expand Down Expand Up @@ -192,28 +142,20 @@ def base_ressource_eval_annuelle():
base_ressource_eval_annuelle() / 12
)

def formula_2023_10_01(individu, period, parameters):
def formula_2011(individu, period, parameters):
law = parameters(period)
aah = law.prestations_sociales.prestations_etat_de_sante.invalidite.aah

en_activite = individu('activite', period) == TypesActivite.actif
en_activite = (individu('salaire_imposable', period, options = [ADD]) + individu('rpns_imposables', period.last_year) > 0)

def assiette_conjoint(revenus_conjoint):
return (1 - law.impot_revenu.calcul_revenus_imposables.deductions.taux_salaires_pensions) * (1 - aah.abattement_conjoint.abattement_proportionnel) * revenus_conjoint

def assiette_revenu_activite_demandeur(revenus_demandeur):
smic_brut_annuel = 12 * law.marche_travail.salaire_minimum.smic.smic_b_horaire * law.marche_travail.salaire_minimum.smic.nb_heures_travail_mensuel
total_tranche1 = min_(aah.travail_ordinaire.tranche_smic * smic_brut_annuel, revenus_demandeur)
total_tranche2 = max_(0, revenus_demandeur - total_tranche1)
revenus_abattus_smic = (1 - aah.travail_ordinaire.abattement_30) * total_tranche1 + (1 - aah.travail_ordinaire.abattement_sup) * total_tranche2

last_month = Period(('month', period.start, 1)).offset(-1)
ressource_interrompue = not_(en_activite + (individu('activite', period) == TypesActivite.etudiant))
has_ressources_substitution = (
individu('chomage_net', last_month)
+ individu('retraite_nette', last_month)
+ individu('rente_accident_travail', last_month)
+ individu('pensions_invalidite', last_month)
) > 0
abattement_cessation_activite = (1 - aah.abattement_cessation_activite * (ressource_interrompue + has_ressources_substitution))
return abattement_cessation_activite * (revenus_abattus_smic)
return (1 - aah.travail_ordinaire.abattement_30) * total_tranche1 + (1 - aah.travail_ordinaire.abattement_sup) * total_tranche2

def base_ressource_eval_trim():
three_previous_months = Period(('month', period.first_month.start, 3)).offset(-3)
Expand All @@ -222,19 +164,78 @@ def base_ressource_eval_trim():

base_ressource_demandeur = max_(0, assiette_revenu_activite_demandeur(base_ressource_activite) + base_ressource_hors_activite)

return base_ressource_demandeur
base_ressource_demandeur_conjoint = max_(0, individu.famille.demandeur('aah_base_ressources_activite_eval_trimestrielle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_trimestrielle', period))
base_ressource_conjoint_conjoint = max_(0, individu.famille.conjoint('aah_base_ressources_activite_eval_trimestrielle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_trimestrielle', period))
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource_demandeur + assiette_conjoint(base_ressource_conjoint)

def base_ressource_eval_annuelle():
base_ressource_activite = assiette_revenu_activite_demandeur(individu('aah_base_ressources_activite_eval_annuelle', period))
base_ressource = base_ressource_activite + individu('aah_base_ressources_hors_activite_eval_annuelle', period)

return base_ressource
base_ressource_demandeur_conjoint = individu.famille.demandeur('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint_conjoint = individu.famille.conjoint('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource + assiette_conjoint(base_ressource_conjoint)

return where(
en_activite,
base_ressource_eval_trim() / 12,
base_ressource_eval_annuelle() / 12
)

def formula_2005_07_01(individu, period, parameters):
law = parameters(period)
aah = law.prestations_sociales.prestations_etat_de_sante.invalidite.aah

def assiette_conjoint(revenus_conjoint):
return (1 - law.impot_revenu.calcul_revenus_imposables.deductions.taux_salaires_pensions) * (1 - aah.abattement_conjoint.abattement_proportionnel) * revenus_conjoint

def assiette_revenu_activite_demandeur(revenus_demandeur):
smic_brut_horaire = law.marche_travail.salaire_minimum.smic.smic_b_horaire
seuil1 = aah.travail_ordinaire.tranche_smic_horaire1 * smic_brut_horaire
seuil2 = aah.travail_ordinaire.tranche_smic_horaire2 * smic_brut_horaire
seuil3 = aah.travail_ordinaire.tranche_smic_horaire3 * smic_brut_horaire
seuil4 = aah.travail_ordinaire.tranche_smic_horaire4 * smic_brut_horaire
total_tranche1 = min_(seuil1, revenus_demandeur) * (1 - aah.travail_ordinaire.abattement_300)
total_tranche2 = max_(0, min_(revenus_demandeur - seuil1, seuil2 - seuil1)) * (1 - aah.travail_ordinaire.abattement_700)
total_tranche3 = max_(0, min_(revenus_demandeur - seuil2, seuil3 - seuil2)) * (1 - aah.travail_ordinaire.abattement_1100)
total_tranche4 = max_(0, min_(revenus_demandeur - seuil3, seuil4 - seuil3)) * (1 - aah.travail_ordinaire.abattement_1500)
total_tranche5 = max_(0, revenus_demandeur - seuil4)
return total_tranche1 + total_tranche2 + total_tranche3 + total_tranche4 + total_tranche5

def base_ressource_eval_annuelle():
base_ressource_activite = assiette_revenu_activite_demandeur(individu('aah_base_ressources_activite_eval_annuelle', period))
base_ressource = base_ressource_activite + individu('aah_base_ressources_hors_activite_eval_annuelle', period)

base_ressource_demandeur_conjoint = individu.famille.demandeur('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint_conjoint = individu.famille.conjoint('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource + assiette_conjoint(base_ressource_conjoint)

return base_ressource_eval_annuelle() / 12

def formula(individu, period, parameters): # formule pour les cas les plus anciens, moins vérifiée (sans abattement à part celui de 20% sur les revenus du conjoint)
_parameters = parameters(period)
aah = _parameters.prestations_sociales.prestations_etat_de_sante.invalidite.aah

def assiette_conjoint(revenus_conjoint):
return (1 - _parameters.impot_revenu.calcul_revenus_imposables.deductions.taux_salaires_pensions) * (1 - aah.abattement_conjoint.abattement_proportionnel) * revenus_conjoint

def base_ressource_eval_annuelle():
base_ressource = individu('aah_base_ressources_activite_eval_annuelle', period) + individu('aah_base_ressources_hors_activite_eval_annuelle', period)

base_ressource_demandeur_conjoint = individu.famille.demandeur('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.demandeur('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint_conjoint = individu.famille.conjoint('aah_base_ressources_activite_eval_annuelle', period) + individu.famille.conjoint('aah_base_ressources_hors_activite_eval_annuelle', period)
base_ressource_conjoint = base_ressource_conjoint_conjoint * individu.has_role(Famille.DEMANDEUR) + base_ressource_demandeur_conjoint * individu.has_role(Famille.CONJOINT)

return base_ressource + assiette_conjoint(base_ressource_conjoint)

return base_ressource_eval_annuelle() / 12

# TODO: - Prendre en compte les abattements temporaires sur les ressources en cas de changement de situation (6 mois pour retour à l'emploi, un an pour inactivité)
# - La formule du calcul de la base de ressource est celle en vigueur à partir de 2011, avant 2011:
# - l'abattement pour les personnes invalides (défini dans l'art. 157 du CGI) sur le revenu net global est pris en compte (art. R821-4 du CSS)
Expand Down

0 comments on commit 893b039

Please sign in to comment.