Skip to content

Commit

Permalink
refactor: extraction code principal en méthodes (BRS)
Browse files Browse the repository at this point in the history
  • Loading branch information
Shamzic committed Jan 13, 2025
1 parent de46874 commit 7837a37
Showing 1 changed file with 33 additions and 33 deletions.
66 changes: 33 additions & 33 deletions openfisca_france/model/prestations/bail_reel_solidaire.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
import numpy as np


def preload_zone_abc(period, parameters):
def load_zonage_file(period, parameters):
chemin_fichier_zonage_abc = os.path.join(parameters(period).prestations_sociales.bail_reel_solidaire.parametres_generaux.fichier_zonage[0])


if not os.path.exists(chemin_fichier_zonage_abc):
return None

Expand All @@ -15,6 +16,31 @@ def preload_zone_abc(period, parameters):
return {row['CODGEO']: row['Zone en vigueur depuis le 5 juillet 2024'] for row in csv_reader}


def plafond_par_zone_et_composition(nb_personnes, plafonds_par_zones, zone):
plafond_zone = plafonds_par_zones[f'zone_{zone}']

tranches_composition = range(1, 7)
conditions_nb_personnes = [
nb_personnes == i if i < 6 else nb_personnes >= i
for i in tranches_composition
]

plafonds_revenus = [
plafond_zone[f'nb_personnes_{i}']
for i in tranches_composition
]

return select(conditions_nb_personnes, plafonds_revenus)


def plafond_supplementaire_par_zone(nb_personnes, plafonds_par_zones, zone, nb_personnes_max):
return where(
nb_personnes > nb_personnes_max,
(nb_personnes - nb_personnes_max) * plafonds_par_zones[f'zone_{zone}']['nb_personnes_supplementaires'],
0
)


class bail_reel_solidaire(Variable):
entity = Menage
value_type = bool
Expand All @@ -27,53 +53,27 @@ def formula(menage, period, parameters):
zones_abc_eligibles = parametres.zones_abc_eligibles
nb_personnes_max = parametres.nombre_personnes_maximum

def plafond_par_zone_et_composition(nb_personnes, plafonds_par_zones, zone):
plafond_zone = plafonds_par_zones[f'zone_{zone}']
conditions_nb_personnes = [
nb_personnes == 1,
nb_personnes == 2,
nb_personnes == 3,
nb_personnes == 4,
nb_personnes == 5,
nb_personnes >= 6
]
plafonds_revenus = [
plafond_zone['nb_personnes_1'],
plafond_zone['nb_personnes_2'],
plafond_zone['nb_personnes_3'],
plafond_zone['nb_personnes_4'],
plafond_zone['nb_personnes_5'],
plafond_zone['nb_personnes_6']
]
return select(conditions_nb_personnes, plafonds_revenus)

def plafond_supplementaire_par_zone(nb_personnes, plafonds_par_zones, zone):
return where(nb_personnes > nb_personnes_max,
(nb_personnes - nb_personnes_max) * plafonds_par_zones[f'zone_{zone}']['nb_personnes_supplementaires'], 0)

zones_par_depcom = preload_zone_abc(period, parameters)
zones_par_depcom = load_zonage_file(period, parameters)
if not zones_par_depcom:
return False

nb_personnes = menage.nb_persons()
depcom = menage('depcom', period.first_month)
zones_menage = np.array([zones_par_depcom.get(
d.decode('utf-8'), None) for d in depcom])
zones_menage = np.array([zones_par_depcom.get(d.decode('utf-8'), None) for d in depcom])

plafonds_par_zones = parameters(
period).prestations_sociales.bail_reel_solidaire.plafonds_par_zones
plafonds_par_zones = parameters(period).prestations_sociales.bail_reel_solidaire.plafonds_par_zones

plafond_revenu_base = select(
[zones_menage == zone for zone in zones_abc_eligibles],
[plafond_par_zone_et_composition(
nb_personnes, plafonds_par_zones, zone) for zone in zones_abc_eligibles]
)
)

plafond_revenu_supplementaire = select(
[zones_menage == zone for zone in zones_abc_eligibles],
[plafond_supplementaire_par_zone(
nb_personnes, plafonds_par_zones, zone) for zone in zones_abc_eligibles]
)
nb_personnes, plafonds_par_zones, zone, nb_personnes_max) for zone in zones_abc_eligibles]
)

rfr = menage.sum(menage.members.foyer_fiscal(
'rfr', period.n_2), role=FoyerFiscal.DECLARANT_PRINCIPAL)
Expand Down

0 comments on commit 7837a37

Please sign in to comment.