mirror of
https://github.com/CatalaLang/catala.git
synced 2024-11-09 22:16:10 +03:00
Refresh the code
This commit is contained in:
parent
363ece217e
commit
9b287cc0a5
7
french_law/python/cnaf_cross_tester/README.md
Normal file
7
french_law/python/cnaf_cross_tester/README.md
Normal file
@ -0,0 +1,7 @@
|
||||
# How to execute ?
|
||||
|
||||
From the `french_law` directory, launch:
|
||||
|
||||
```
|
||||
python -m python.cnaf_cross_tester.main
|
||||
```
|
0
french_law/python/cnaf_cross_tester/__init__.py
Normal file
0
french_law/python/cnaf_cross_tester/__init__.py
Normal 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 (
|
||||
|
@ -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
|
@ -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
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user