Refresh the code

This commit is contained in:
Denis Merigoux 2023-11-21 10:49:32 +01:00
parent 363ece217e
commit 9b287cc0a5
No known key found for this signature in database
GPG Key ID: EE99DCFA365C3EE3
8 changed files with 71 additions and 99 deletions

View File

@ -0,0 +1,7 @@
# How to execute ?
From the `french_law` directory, launch:
```
python -m python.cnaf_cross_tester.main
```

View File

@ -1,8 +1,9 @@
import datetime
from typing import List
from src.aides_logement import CategorieEquivalenceLoyerAllocationLogementFoyer_Code, LogementFoyer, ModeOccupation_Code, Nationalite_Code, SituationFamiliale_Code, SituationGardeAlternee_Code, SituationObligationScolaire_Code, TypeBailleur_Code, TypeLogementFoyer_Code, ZoneDHabitation_Code
from input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, LogementCrous, LogementCrousType, LogementMaisonRetraite, LogementResidenceSocialeFJT, SeulOuCouple, Zone
from src.api import EnfantAPL, InfosLocation, InfosLogementFoyer, InfosSpecifiques, PersonneAChargeAPL, aides_logement
from catala.runtime import Unit # type: ignore
from ..src.aides_logement import Collectivite, Collectivite_Code, Nationalite, CategorieEquivalenceLoyerAllocationLogementFoyer_Code, LogementFoyer, ModeOccupation_Code, Nationalite_Code, SituationFamiliale_Code, SituationGardeAlternee_Code, SituationObligationScolaire_Code, TypeBailleur_Code, TypeLogementFoyer_Code, ZoneDHabitation_Code
from .input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, LogementCrous, LogementCrousType, LogementMaisonRetraite, LogementResidenceSocialeFJT, SeulOuCouple, Zone
from ..src.api import EnfantAPL, InfosLocation, InfosLogementFoyer, InfosSpecifiques, PersonneAChargeAPL, aides_logement
def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> float:
@ -11,7 +12,6 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
for enfant in sample_input.enfants:
enfants.append(EnfantAPL(
identifiant=i,
beneficie_titre_personnel_aide_personnelle_logement=False,
a_deja_ouvert_droit_aux_allocations_familiales=False,
date_de_naissance=datetime.date.today() - datetime.timedelta(days=366 * enfant.age),
remuneration_mensuelle=int(
@ -19,7 +19,10 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
obligation_scolaire=SituationObligationScolaire_Code.Avant if enfant.age < 3 else (
SituationObligationScolaire_Code.Apres if enfant.age > 16 else SituationObligationScolaire_Code.Pendant),
situation_garde_alternee=SituationGardeAlternee_Code.PasDeGardeAlternee,
coefficient_garde_alternee=None
coefficient_garde_alternee=None,
nationalite=Nationalite(
code=Nationalite_Code.Francaise, value=Unit()),
etudes_apprentissage_stage_formation_pro_impossibilite_travail=False
))
i += 1
@ -47,12 +50,12 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
beneficiaire_aide_adulte_ou_enfant_handicapes=False,
logement_est_chambre=False,
colocation=False,
agees_ou_handicap_adultes_hebergees_onereux_particuliers=False,
logement_meuble_d842_2=False,
ancien_loyer_et_apl_relogement=None,
type_bailleur=TypeBailleur_Code.BailleurPrive,
agees_ou_handicap_adultes_hebergees_onereux_particuliers=False,
bailleur_conventionne=None,
reduction_loyer_solidarite=None
reduction_loyer_solidarite=None,
) if sample_input.logement.typ_v == LogementCrousType.Studio else InfosLogementFoyer(
type=TypeLogementFoyer_Code.Autre,
remplit_conditions_r832_21=True,
@ -62,11 +65,23 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
redevance=sample_input.loyer,
categorie_equivalence_loyer_d842_16=CategorieEquivalenceLoyerAllocationLogementFoyer_Code.EtudiantLogeEnChambreCROUS if
sample_input.logement.typ_v == LogementCrousType.Chambre else
CategorieEquivalenceLoyerAllocationLogementFoyer_Code.EtudiantLogeEnChambreCROUSRehabilitee
CategorieEquivalenceLoyerAllocationLogementFoyer_Code.EtudiantLogeEnChambreCROUSRehabilitee,
conventionne_selon_regles_drom=False,
beneficiaire_aide_adulte_ou_enfant_handicapes=False,
logement_est_chambre=False,
colocation=False,
logement_meuble_d842_2=False,
logement_foyer_jeunes_travailleurs=False
)
elif isinstance(sample_input.logement, LogementFoyer):
mode_occupation = ModeOccupation_Code.ResidentLogementFoyer
infos_specifiques = InfosLogementFoyer(
conventionne_selon_regles_drom=False,
beneficiaire_aide_adulte_ou_enfant_handicapes=False,
logement_est_chambre=False,
colocation=False,
logement_meuble_d842_2=False,
logement_foyer_jeunes_travailleurs=False,
type=TypeLogementFoyer_Code.Autre,
remplit_conditions_r832_21=True,
conventionne_livre_III_titre_V_chap_III=True,
@ -79,6 +94,12 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
# Correspond au 2° du D832-25 selon DGALN/DHUP/FE4 (mail du 26/07/2022)
mode_occupation = ModeOccupation_Code.ResidentLogementFoyer
infos_specifiques = InfosLogementFoyer(
conventionne_selon_regles_drom=False,
beneficiaire_aide_adulte_ou_enfant_handicapes=False,
logement_est_chambre=False,
colocation=False,
logement_meuble_d842_2=False,
logement_foyer_jeunes_travailleurs=False,
type=TypeLogementFoyer_Code.ResidenceSociale,
remplit_conditions_r832_21=True,
conventionne_livre_III_titre_V_chap_III=True,
@ -91,6 +112,12 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
# Correspond au 3° du D842-16 et au 1° du R832-20 selon DGALN/DHUP/FE4 (mail du 26/07/2022)
mode_occupation = ModeOccupation_Code.ResidentLogementFoyer
infos_specifiques = InfosLogementFoyer(
conventionne_selon_regles_drom=False,
beneficiaire_aide_adulte_ou_enfant_handicapes=False,
logement_est_chambre=False,
colocation=False,
logement_meuble_d842_2=False,
logement_foyer_jeunes_travailleurs=False,
type=TypeLogementFoyer_Code.LogementPersonnesAgeesOuHandicapees,
remplit_conditions_r832_21=True,
conventionne_livre_III_titre_V_chap_III=True,
@ -118,10 +145,13 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
datetime.date.today(),
ressources_menage_prises_en_compte=sample_input.revenu_pris_en_compte,
date_naissance_demandeur=datetime.date(1992, 1, 1),
nationalite_demandeur=Nationalite_Code.Francaise,
patrimoine_produisant_revenu=0,
patrimoine_ne_produisant_pas_revenu=0,
nationalite_demandeur=Nationalite(
code=Nationalite_Code.Francaise, value=Unit()),
personne_hebergee_centre_soins=False,
personnes_agees_handicapees_foyer_r844_4=False,
magistrat_fonctionnaire_centre_interets_materiels_familiaux_hors_mayotte=False,
est_non_salarie_agricole_l781_8_l_781_46_code_rural=False,
residence=Collectivite_Code.Metropole,
personne_rattache_foyer_fiscal_parent_ifi=False,
nombre_autres_occupants_logement_hors_menage=0,
enfant_a_naitre_apres_quatrieme_mois_grossesse=False,
@ -129,8 +159,6 @@ def run_catala_by_converting_cnaf_input(sample_input: CnafSimulatorInput) -> flo
date_mariage=None,
prestations_recues=[],
residence_principale=True,
logement_est_maison_de_retraite=True if isinstance(
sample_input.logement, LogementMaisonRetraite) else False,
logement_est_decent=True,
surface_logement_m_carres=10000,
zone=ZoneDHabitation_Code.Zone1 if sample_input.zone == Zone.Zone1 else (

View File

@ -1,69 +0,0 @@
🏡 Description du ménage
-> Code postal : Zone2
-> Logement : AppartementOuMaison(typ=Colocation,meuble=True)
-> Loyer : 1240 €
-> Seul of couple : Seul
-> Enfants :
Enfant(age=13,remuneration_derniere_annee=7385)
-> Revenus pris en compte : 5800 €
💰 Aides au logement (Catala): 394 €
💰 Aides au logement (CNAF) : 137 €
❌ Différence
🏡 Description du ménage
-> Code postal : Zone3
-> Logement : LogementResidenceSocialeFJT
-> Loyer : 1557 €
-> Seul of couple : Seul
-> Enfants :
Enfant(age=10,remuneration_derniere_annee=8827)
Enfant(age=7,remuneration_derniere_annee=8643)
-> Revenus pris en compte : 3800 €
💰 Aides au logement (Catala): 435 €
💰 Aides au logement (CNAF) : 81 €
❌ Différence
🏡 Description du ménage
-> Code postal : Zone1
-> Logement : LogementChambre(meuble=True)
-> Loyer : 1225 €
-> Seul of couple : EnCouple
-> Enfants :
Enfant(age=16,remuneration_derniere_annee=0)
Enfant(age=10,remuneration_derniere_annee=0)
Enfant(age=19,remuneration_derniere_annee=0)
Enfant(age=7,remuneration_derniere_annee=0)
-> Revenus pris en compte : 11800 €
💰 Aides au logement (Catala): 0 €
💰 Aides au logement (CNAF) : 291 €
❌ Différence
🏡 Description du ménage
-> Code postal : Zone3
-> Logement : LogementCrous(typ=Studio)
-> Loyer : 1271 €
-> Seul of couple : EnCouple
-> Enfants :
Enfant(age=12,remuneration_derniere_annee=3789)
Enfant(age=10,remuneration_derniere_annee=4198)
-> Revenus pris en compte : 9200 €
💰 Aides au logement (Catala): 0 €
💰 Aides au logement (CNAF) : 297 €
❌ Différence
🏡 Description du ménage
-> Code postal : Zone3
-> Logement : LogementCrous(typ=Studio)
-> Loyer : 513 €
-> Seul of couple : Seul
-> Enfants :
Enfant(age=18,remuneration_derniere_annee=0)
Enfant(age=7,remuneration_derniere_annee=0)
Enfant(age=17,remuneration_derniere_annee=0)
Enfant(age=21,remuneration_derniere_annee=0)
Enfant(age=6,remuneration_derniere_annee=0)
Enfant(age=5,remuneration_derniere_annee=0)
-> Revenus pris en compte : 11800 €
💰 Aides au logement (Catala): 524 €
💰 Aides au logement (CNAF) : 372 €
❌ Différence

View File

@ -1,18 +1,22 @@
from abc import ABC
from abc import ABC, abstractmethod
from enum import Enum
from typing import Any, List, Optional
class Logement(ABC):
@abstractmethod
def residence(self) -> str:
pass
@abstractmethod
def typ(self) -> Optional[str]:
pass
@abstractmethod
def meublee(self) -> Optional[bool]:
pass
@abstractmethod
def __str__(self) -> str:
pass

View File

@ -1,9 +1,7 @@
from cnaf_to_catala import run_catala_by_converting_cnaf_input
from pupeteer import run_simulator
from input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, SeulOuCouple, Zone
from random_input_generator import generate_random_input
from .random_input_generator import generate_random_input
from .input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, SeulOuCouple, Zone
from .pupeteer import run_simulator
from .cnaf_to_catala import run_catala_by_converting_cnaf_input
# input identical to the JS test of the housing benefits
sample_input = CnafSimulatorInput(

View File

@ -2,7 +2,7 @@
from pdb import runeval
from playwright.sync_api import sync_playwright
from input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, LogementCrous, SeulOuCouple
from .input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, LogementCrous, SeulOuCouple
import re
HOME_PAGE = 'https://wwwd.caf.fr/wps/portal/caffr/aidesetservices/lesservicesenligne/estimervosdroits/lelogement'
@ -189,17 +189,21 @@ def run_simulator(input: CnafSimulatorInput) -> int:
page.wait_for_selector("section[id=\"resultat\"]")
# Retrieve the amount
result = page.query_selector('text=/\\d+ € par mois/').text_content()
result = page.query_selector('text=/\\d+ € par mois/')
if result is None:
# Then no benefits!
housing_benefits = 0
else:
match = re.search("(\\d+) € par mois", result)
if match is None:
raise RuntimeError
housing_benefits = match.group(1)
if housing_benefits is None:
raise RuntimeError
result_text = result.text_content()
if result_text is None:
housing_benefits = 0
else:
match = re.search("(\\d+) € par mois", result_text)
if match is None:
raise RuntimeError
housing_benefits = int(match.group(1))
if housing_benefits is None:
raise RuntimeError
browser.close()
return int(housing_benefits)
return housing_benefits

View File

@ -1,5 +1,5 @@
import random
from input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, Logement, LogementChambre, LogementCrous, LogementCrousType, LogementFoyer, LogementMaisonRetraite, LogementResidenceSocialeFJT, SeulOuCouple, Zone
from .input import AppartementOuMaison, AppartementOuMaisonType, CnafSimulatorInput, Enfant, Logement, LogementChambre, LogementCrous, LogementCrousType, LogementFoyer, LogementMaisonRetraite, LogementResidenceSocialeFJT, SeulOuCouple, Zone
def generate_random_child() -> Enfant: