diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2a5b89b6..bec7f94f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -128,8 +128,7 @@ diagnostics: - sed -i "s/BRANCH_NAME/$OUT_FOLDER/" ~/.config/openfisca-france-data/config.ini - cat ~/.config/openfisca-france-data/config.ini - compare-erfs-fpr-input -u -s -v - - cp -r /mnt/data-out/openfisca-france-data/$OUT_FOLDER/figures_directory . - - cp -r ./figures_directory $ROOT_FOLDER/$OUT_FOLDER/data_output + - cp -r /mnt/data-out/openfisca-france-data/$OUT_FOLDER/tests/figures_directory . stage: diagnostics tags: - openfisca @@ -160,7 +159,7 @@ check-for-functional-changes: - '' script: - if `.gitlab-ci/has-functional-changes.sh` ; then echo "OK to build package" ; fi - only: + only: - master build_conda_package: diff --git a/.gitlab-ci/all_years_build_and_aggregates.yml b/.gitlab-ci/all_years_build_and_aggregates.yml index 5176ebbb..8d939a26 100644 --- a/.gitlab-ci/all_years_build_and_aggregates.yml +++ b/.gitlab-ci/all_years_build_and_aggregates.yml @@ -31,8 +31,8 @@ aggregates-2019: - cp $ROOT_FOLDER/$OUT_FOLDER/openfisca_survey_manager_config_input_data-after-build-erfs-fprs-2019.ini ~/.config/openfisca-survey-manager/config.ini - python tests/erfs_fpr/integration/test_aggregates.py --year 2019 - - mkdir -p $ROOT_FOLDER/$OUT_FOLDER - - cp ./*.csv $ROOT_FOLDER/$OUT_FOLDER/data_output + - mkdir -p $ROOT_FOLDER/$OUT_FOLDER/tests + - cp ./*.csv $ROOT_FOLDER/$OUT_FOLDER/tests stage: aggregates tags: - openfisca diff --git a/.gitlab-ci/openfisca_france_data_config.ini b/.gitlab-ci/openfisca_france_data_config.ini index 7019feae..2be2892c 100644 --- a/.gitlab-ci/openfisca_france_data_config.ini +++ b/.gitlab-ci/openfisca_france_data_config.ini @@ -1,3 +1,3 @@ [paths] -figures_directory = /mnt/data-out/openfisca-france-data/BRANCH_NAME/figures_directory +figures_directory = /mnt/data-out/openfisca-france-data/BRANCH_NAME/tests/figures_directory backup = ./backup diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cf2cb4d..8646f12f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +### 3.4.2 [#258](https://github.com/openfisca/openfisca-france-data/pull/258) + +* Technical changes + - Ajout d'aggrégats de comparaion pour 2022 + - Corrige les tests de comparaisons et d'agrégats + ### 3.4.1 [#257](https://github.com/openfisca/openfisca-france-data/pull/257) * Technical changes diff --git a/openfisca_france_data/__init__.py b/openfisca_france_data/__init__.py index 9b8d426c..c836c333 100644 --- a/openfisca_france_data/__init__.py +++ b/openfisca_france_data/__init__.py @@ -158,7 +158,7 @@ def apply(self): CountryTaxBenefitSystem = lambda: france_data_tax_benefit_system # noqa analysis:ignore AGGREGATES_DEFAULT_VARS = [ - "cotisation_salariales", + "cotisations_salariales", #"cotisations_employeur", "cotisation_non_salarie", "salaire_brut", diff --git a/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2021.json b/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2021.json index ca3c69cd..9761d798 100644 --- a/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2021.json +++ b/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2021.json @@ -1,5 +1,4 @@ { - "documentation":"Pour les prestations sociales, les cotisations et prélèvements sociaux, note de validation INES 2019, pour l'ir note de validation 2019 et 2020", "data":[ { "variable":"salaire_imposable", @@ -32,13 +31,13 @@ "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { - "variable":"revenu_categoriel_capital", + "variable":"revenus_capital", "actual_beneficiaries": 15511000, "actual_amount": 45881000000, "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { - "variable":"revenu_categoriel_plus_values", + "variable":"plus_values_base_large", "actual_beneficiaries": 216000, "actual_amount": 216000000, "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" @@ -100,19 +99,31 @@ { "variable":"aides_logement", "actual_beneficiaries": 0, - "actual_amount": 15262994463, - "source": "Rapport du Directeur comptable et financier sur les comptes de l'exercice 2021, CAF (https://www.caf.fr/sites/default/files/medias/cnaf/Nous_connaitre/qui%20sommes%20nous/presentation/Comptes-et-financements/2021/Rapport_Dcf_comptes_exercice2021.pdf)" + "actual_amount": 15602974660, + "source": "Dépenses tous régimes des prestations familiales et sociales gérées par la branche Famille, CAF (http://data.caf.fr/dataset/les-depenses-tous-regimes-de-prestations-familiales-et-sociales)" }, { - "variable":"aah", + "variable":"apl", "actual_beneficiaries": 0, - "actual_amount":11222712959, - "source": "Rapport du Directeur comptable et financier sur les comptes de l'exercice 2021, CAF (https://www.caf.fr/sites/default/files/medias/cnaf/Nous_connaitre/qui%20sommes%20nous/presentation/Comptes-et-financements/2021/Rapport_Dcf_comptes_exercice2021.pdf)" + "actual_amount": 6897920894, + "source": "Dépenses tous régimes des prestations familiales et sociales gérées par la branche Famille, CAF (http://data.caf.fr/dataset/les-depenses-tous-regimes-de-prestations-familiales-et-sociales)" }, { - "variable":"apl", + "variable":"alf", + "actual_beneficiaries": 0, + "actual_amount": 3565671170, + "source": "Dépenses tous régimes des prestations familiales et sociales gérées par la branche Famille, CAF (http://data.caf.fr/dataset/les-depenses-tous-regimes-de-prestations-familiales-et-sociales)" + }, + { + "variable":"als", "actual_beneficiaries": 0, - "actual_amount": 6743703175, + "actual_amount": 5109934933, + "source": "Dépenses tous régimes des prestations familiales et sociales gérées par la branche Famille, CAF (http://data.caf.fr/dataset/les-depenses-tous-regimes-de-prestations-familiales-et-sociales)" + }, + { + "variable":"aah", + "actual_beneficiaries": 0, + "actual_amount":11222712959, "source": "Rapport du Directeur comptable et financier sur les comptes de l'exercice 2021, CAF (https://www.caf.fr/sites/default/files/medias/cnaf/Nous_connaitre/qui%20sommes%20nous/presentation/Comptes-et-financements/2021/Rapport_Dcf_comptes_exercice2021.pdf)" }, { @@ -163,7 +174,7 @@ "source":"Comptes de la sécurité sociale, résultats 2022 et prévisions 2023 (https://www.securite-sociale.fr/files/live/sites/SSFR/files/medias/DSS/2023/CCSS-Mai2023.pdf)" }, { - "variable":"impot_revenu_restant_a_payer", + "variable":"irpp_economique", "actual_beneficiaries":40257000, "actual_amount":80826000000, "source": "Statistiques DGFIP, Impôt sur le revenu : répartition par région (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" @@ -173,5 +184,5 @@ "actual_beneficiaries":0, "actual_amount":0 } - ] -} \ No newline at end of file + ] +} diff --git a/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2022.json b/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2022.json index 538ca5ad..3826630c 100644 --- a/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2022.json +++ b/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2022.json @@ -3,45 +3,45 @@ "data":[ { "variable":"salaire_imposable", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_beneficiaries": 24172000, + "actual_amount": 729255000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { "variable":"chomage_imposable", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_beneficiaries": 5394000, + "actual_amount": 33669000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { "variable":"retraite_imposable", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_beneficiaries": 15094000, + "actual_amount": 356693000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { "variable":"rpns_imposables", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_beneficiaries": 3733000, + "actual_amount": 91066000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { "variable":"revenu_categoriel_foncier", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_beneficiaries": 5090000, + "actual_amount": 30719000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { - "variable":"revenu_categoriel_capital", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "variable":"revenus_capital", + "actual_beneficiaries": 16083000, + "actual_amount": 48960000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { - "variable":"revenu_categoriel_plus_values", - "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "variable":"plus_values_base_large", + "actual_beneficiaries": 195000, + "actual_amount": 26281000000, + "source": "Statistiques DGFIP, Impôt sur le revenu : répartition des revenus catégoriels déclarés entre imposés et non-imposés (https://www.impots.gouv.fr/statistiques-impots-des-particuliers)" }, { "variable":"af", @@ -164,9 +164,9 @@ "source":"Comptes de la sécurité sociale, résultats 2022 et prévisions 2023 (https://www.securite-sociale.fr/files/live/sites/SSFR/files/medias/DSS/2023/CCSS-Mai2023.pdf)" }, { - "variable":"impot_revenu_restant_a_payer", + "variable":"irpp_economique", "actual_beneficiaries": 0, - "actual_amount": 0, + "actual_amount": 82100000000, "source": "" }, { @@ -175,5 +175,5 @@ "actual_amount": 0, "source": "" } - ] -} \ No newline at end of file + ] +} diff --git a/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2023.json b/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2023.json index 0c7e2cc7..9f45fb5f 100644 --- a/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2023.json +++ b/openfisca_france_data/assets/aggregats/france_entiere/france_entiere_2023.json @@ -32,13 +32,13 @@ "source": "" }, { - "variable":"revenu_categoriel_capital", + "variable":"revenus_capital", "actual_beneficiaries": 0, "actual_amount": 0, "source": "" }, { - "variable":"revenu_categoriel_plus_values", + "variable":"plus_values_base_large", "actual_beneficiaries": 0, "actual_amount": 0, "source": "" @@ -46,14 +46,14 @@ { "variable":"af", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 13414000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"paje_prepare", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 755000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"aeeh", @@ -64,44 +64,62 @@ { "variable":"asf", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 3024000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"paje_base", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 2997000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"paje_naissance", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 516000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"cf", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 2448000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"ars", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 2116000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"paje_cmg", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 7093000000, + "source": "Rapport de la commission des comptes de la Sécurité sociale - Résultats 2022, prévision 2023 et 2024, p97" }, { "variable":"aides_logement", "actual_beneficiaries": 0, - "actual_amount": 0, - "source": "" + "actual_amount": 16315000000, + "source": "Documents annexés au Projet de loi de finances pour 2024, Budget général, Cohésion des territoires, programme 109 aide à l'accès au logement, p17" + }, + { + "variable":"apl", + "actual_beneficiaries": 0, + "actual_amount": 7227000000, + "source": "Documents annexés au Projet de loi de finances pour 2024, Budget général, Cohésion des territoires, programme 109 aide à l'accès au logement, p17" + }, + { + "variable":"alf", + "actual_beneficiaries": 0, + "actual_amount": 3578000000, + "source": "Documents annexés au Projet de loi de finances pour 2024, Budget général, Cohésion des territoires, programme 109 aide à l'accès au logement, p17" + }, + { + "variable":"als", + "actual_beneficiaries": 0, + "actual_amount": 5190000000, + "source": "Documents annexés au Projet de loi de finances pour 2024, Budget général, Cohésion des territoires, programme 109 aide à l'accès au logement, p17" }, { "variable":"aah", @@ -169,5 +187,5 @@ "actual_amount": 0, "source": "" } - ] -} \ No newline at end of file + ] +} diff --git a/openfisca_france_data/common.py b/openfisca_france_data/common.py index 50cbf6fa..065166c5 100644 --- a/openfisca_france_data/common.py +++ b/openfisca_france_data/common.py @@ -57,9 +57,9 @@ def create_salaire_de_base(individus, period = None, revenu_type = 'imposable', plafond_securite_sociale_mensuel = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel parameters_csg_deductible = parameters.prelevements_sociaux.contributions_sociales.csg.activite.deductible taux_csg = parameters_csg_deductible.taux - taux_abattement = parameters_csg_deductible.abattement.rates[0] + taux_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = parameters_csg_deductible.abattement.thresholds[1] + seuil_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours été limité à 4 PSS seuil_abattement = None csg_deductible = MarginalRateTaxScale(name = 'csg_deductible') @@ -71,9 +71,9 @@ def create_salaire_de_base(individus, period = None, revenu_type = 'imposable', parameters_csg_imposable = parameters.prelevements_sociaux.contributions_sociales.csg.activite.imposable taux_csg = parameters_csg_imposable.taux - taux_abattement = parameters_csg_imposable.abattement.rates[0] + taux_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = parameters_csg_imposable.abattement.thresholds[1] + seuil_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours été limité à 4 PSS seuil_abattement = None csg_imposable = MarginalRateTaxScale(name = 'csg_imposable') @@ -83,9 +83,9 @@ def create_salaire_de_base(individus, period = None, revenu_type = 'imposable', parameters_crds = parameters.prelevements_sociaux.contributions_sociales.crds.activite taux_csg = parameters_crds.taux - taux_abattement = parameters_crds.abattement.rates[0] + taux_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = parameters_crds.abattement.thresholds[1] + seuil_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours été limité à 4 PSS seuil_abattement = None crds = MarginalRateTaxScale(name = 'crds') @@ -244,9 +244,9 @@ def create_traitement_indiciaire_brut(individus, period = None, revenu_type = 'i plafond_securite_sociale_mensuel = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel parameters_csg_deductible = parameters.prelevements_sociaux.contributions_sociales.csg.activite.deductible taux_csg = parameters_csg_deductible.taux - taux_abattement = parameters_csg_deductible.abattement.rates[0] + taux_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = parameters_csg_deductible.abattement.thresholds[1] + seuil_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours été limité à 4 PSS seuil_abattement = None csg_deductible = MarginalRateTaxScale(name = 'csg_deductible') @@ -260,9 +260,9 @@ def create_traitement_indiciaire_brut(individus, period = None, revenu_type = 'i # 1. csg imposable parameters_csg_imposable = parameters.prelevements_sociaux.contributions_sociales.csg.activite.imposable taux_csg = parameters_csg_imposable.taux - taux_abattement = parameters_csg_imposable.abattement.rates[0] + taux_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = parameters_csg_imposable.abattement.thresholds[1] + seuil_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours été limité à 4 PSS seuil_abattement = None csg_imposable = MarginalRateTaxScale(name = 'csg_imposable') @@ -272,9 +272,9 @@ def create_traitement_indiciaire_brut(individus, period = None, revenu_type = 'i # 2. crds parameters_crds = parameters.prelevements_sociaux.contributions_sociales.crds.activite taux_csg = parameters_crds.taux - taux_abattement = parameters_crds.abattement.rates[0] + taux_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = parameters_crds.abattement.thresholds[1] + seuil_abattement = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours été limité à 4 PSS seuil_abattement = None crds = MarginalRateTaxScale(name = 'crds') @@ -427,8 +427,8 @@ def create_revenus_remplacement_bruts(individus, period, tax_benefit_system, rev csg = parameters.prelevements_sociaux.contributions_sociales.csg csg_deductible_chomage = csg.remplacement.allocations_chomage.deductible pss = parameters.prelevements_sociaux.pss.plafond_securite_sociale_annuel - taux_abattement_csg_chomage = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.allocations_chomage.deductible.abattement.rates[0] - seuil_abattement_csg_chomage = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.allocations_chomage.deductible.abattement.thresholds[1] + taux_abattement_csg_chomage = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] + seuil_abattement_csg_chomage = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] taux_plein = csg_deductible_chomage.taux_plein taux_reduit = csg_deductible_chomage.taux_reduit liste_smic_mensuel = [] diff --git a/openfisca_france_data/comparator.py b/openfisca_france_data/comparator.py index e1db9d22..91c8c74f 100644 --- a/openfisca_france_data/comparator.py +++ b/openfisca_france_data/comparator.py @@ -24,14 +24,14 @@ def get_entity_original_id(survey_scenario, variable): - entity = survey_scenario.tax_benefit_system.variables[variable].entity.key + entity = survey_scenario.tax_benefit_systems['baseline'].variables[variable].entity.key return "noindiv" if entity == "individu" else "idmen_original" def compute_result(variable, survey_scenario, target_dataframe): result = None stats = None - entity = survey_scenario.tax_benefit_system.variables[variable].entity.key + entity = survey_scenario.tax_benefit_systems['baseline'].variables[variable].entity.key entity_original_id = get_entity_original_id(survey_scenario, variable) output_variables = [entity_original_id, variable] entity_dataframe = survey_scenario.create_data_frame_by_entity( @@ -306,7 +306,8 @@ class AbstractComparator(object): messages = list() survey_scenario = None - def __init__(self): + def __init__(self, period): + self.period = period name = self.get_name() assert name is not None and isinstance(name, str) @@ -368,8 +369,7 @@ def compare(self, browse, load, verbose, debug, target_variables = None, period if target_variables is None: target_variables = self.default_target_variables - self.target_variables = target_variables - + self.target_variables = target_variables if period is not None: period = int(period) @@ -483,7 +483,7 @@ def compute_divergence(self, input_dataframe_by_entity, target_dataframe_by_enti data = data ) - tax_benefit_system = survey_scenario.tax_benefit_system + tax_benefit_system = survey_scenario.tax_benefit_systems['baseline'] markdown_section_by_variable = dict() markdown_summary_section_by_variable = dict() stats_by_variable = dict() @@ -495,6 +495,7 @@ def compute_divergence(self, input_dataframe_by_entity, target_dataframe_by_enti entity = tax_benefit_system.variables[variable].entity.key target_dataframe = target_dataframe_by_entity[entity] + print( target_dataframe.columns) assert variable in target_dataframe log.debug(f"Testing final only variable: {variable}") result, stats = compute_result( diff --git a/openfisca_france_data/erfs_fpr/comparison.py b/openfisca_france_data/erfs_fpr/comparison.py index f67c5461..55ee5cea 100644 --- a/openfisca_france_data/erfs_fpr/comparison.py +++ b/openfisca_france_data/erfs_fpr/comparison.py @@ -47,12 +47,12 @@ class ErfsFprtoInputComparator(AbstractComparator): default_target_variables = [ "chomage_imposable", "loyer", - # "rag", + "rag", "retraite_imposable", - # "ric", - # "rnc", + "ric", + "rnc", "salaire_imposable", - "statut_occupation_logement", + #"statut_occupation_logement", ] def compute_test_dataframes(self): @@ -104,6 +104,7 @@ def compare(browse = False, load = False, verbose = True, debug = True, target_v Data can be explored using D-Tale and graphs are saved as pdf files. """ - comparator = ErfsFprtoInputComparator() + comparator = ErfsFprtoInputComparator(period=period) comparator.period = period - comparator.compare(browse, load, verbose, debug, target_variables, period, rebuild, summary) + comparator.compare(browse=browse, load=load, verbose=verbose, debug=debug, target_variables=target_variables, period=period, rebuild=rebuild, summary=summary, compute_divergence = True) + diff --git a/openfisca_france_data/erfs_fpr/scenario.py b/openfisca_france_data/erfs_fpr/scenario.py index eef10cd5..d6ffc73d 100644 --- a/openfisca_france_data/erfs_fpr/scenario.py +++ b/openfisca_france_data/erfs_fpr/scenario.py @@ -9,13 +9,13 @@ class ErfsFprSurveyScenario(AbstractErfsSurveyScenario): # Les variables OpenFisca qu'on va utiliser avec les données en entrée. used_as_input_variables = [ "activite", - "autonomie_financiere", + #"autonomie_financiere", "categorie_salarie", "categorie_non_salarie", "chomage_brut", "chomage_imposable", "contrat_de_travail", - "cotisation_sociale_mode_recouvrement", + #"cotisation_sociale_mode_recouvrement", "date_naissance", "effectif_entreprise", "f4ba", diff --git a/openfisca_france_data/model/common.py b/openfisca_france_data/model/common.py index c798e5f8..c571a8f5 100644 --- a/openfisca_france_data/model/common.py +++ b/openfisca_france_data/model/common.py @@ -24,7 +24,7 @@ def formula(individu, period, parameters): assiette_csg_abattue = individu('assiette_csg_abattue', period) assiette_csg_non_abattue = individu('assiette_csg_non_abattue', period) plafond_securite_sociale = individu('plafond_securite_sociale', period) - abattement = parameters(period.start).prelevements_sociaux.contributions_sociales.csg.activite.deductible.abattement + abattement = parameters(period.start).prelevements_sociaux.contributions_sociales.csg.activite.abattement assiette = assiette_csg_abattue - abattement.calc( assiette_csg_abattue, factor = plafond_securite_sociale, @@ -96,7 +96,7 @@ def formula(individu, period): + individu('csg_imposable_chomage', period) + individu('csg_deductible_chomage', period) ) - + class csg_retraite(Variable): value_type = float entity = Individu @@ -106,7 +106,7 @@ def formula(individu, period): csg_imposable_retraite = individu('csg_imposable_retraite', period, options = [ADD]) csg_deductible_retraite = individu('csg_deductible_retraite', period, options = [ADD]) return csg_deductible_retraite + csg_imposable_retraite - + class csg_chomage(Variable): value_type = float entity = Individu diff --git a/openfisca_france_data/reforms/inversion_directe_salaires.py b/openfisca_france_data/reforms/inversion_directe_salaires.py index 6297a38c..e00fe398 100644 --- a/openfisca_france_data/reforms/inversion_directe_salaires.py +++ b/openfisca_france_data/reforms/inversion_directe_salaires.py @@ -44,9 +44,9 @@ def formula(individu, period, parameters): plafond_securite_sociale_annuel = P.prelevements_sociaux.pss.plafond_securite_sociale_mensuel * 12 csg_deductible = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite.deductible taux_csg = csg_deductible.taux - taux_abattement = csg_deductible.abattement.rates[0] + taux_abattement = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] try: - seuil_abattement = csg_deductible.abattement.thresholds[1] + seuil_abattement = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite.abattement.thresholds[1] except IndexError: # Pour gérer le fait que l'abattement n'a pas toujours était limité à 4 PSS seuil_abattement = None csg = MarginalRateTaxScale(name = 'csg') diff --git a/openfisca_france_data/smic.py b/openfisca_france_data/smic.py index 000532f2..7dacf7fc 100644 --- a/openfisca_france_data/smic.py +++ b/openfisca_france_data/smic.py @@ -147,13 +147,13 @@ def smic_annuel_imposable_from_net(year, smic_hor_brut): working_hours = params.marche_travail.salaire_minimum.smic.nb_heures_travail_mensuel smic_brut = smic_hor_brut * working_hours * 12 taux_csg = params.prelevements_sociaux.contributions_sociales.csg.activite.imposable.taux - taux_crds = params.prelevements_sociaux.contributions_sociales.crds.activite.taux + taux_crds = params.prelevements_sociaux.contributions_sociales.crds.taux pss = params.prelevements_sociaux.pss.plafond_securite_sociale_annuel - abatt_sous_4pss = params.prelevements_sociaux.contributions_sociales.csg.activite.imposable.abattement.rates[0] - use_plafond = params.prelevements_sociaux.contributions_sociales.csg.activite.imposable.abattement.rates.__len__() == 2 + abatt_sous_4pss = params.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[0] + use_plafond = params.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates.__len__() == 2 if use_plafond: - abatt_dessus_4pss = params.prelevements_sociaux.contributions_sociales.csg.activite.imposable.abattement.rates[1] - + abatt_dessus_4pss = params.prelevements_sociaux.contributions_sociales.csg.activite.abattement.rates[1] + # precise formula is kinda unnecessary, since SMIC won't ever be beyond 4 PSS. but still, for the heck of it. if use_plafond: base_csg_crds = (1 - abatt_sous_4pss) * min(smic_brut, 4 * pss) + (smic_brut > 4 * pss) * (1 - abatt_dessus_4pss) * (smic_brut - 4 * pss) @@ -185,4 +185,4 @@ def smic_annuel_imposable_from_net(year, smic_hor_brut): (year, smic_horaire_brut_by_year[year] * openfisca_france_tax_benefit_system.get_parameters_at_instant(instant = periods.period(year).start).marche_travail.salaire_minimum.smic.nb_heures_travail_mensuel * 12) for year in range(start_year, end_year) - ]) \ No newline at end of file + ]) diff --git a/openfisca_france_data/surveys.py b/openfisca_france_data/surveys.py index 32e9b156..80dbb51a 100644 --- a/openfisca_france_data/surveys.py +++ b/openfisca_france_data/surveys.py @@ -153,7 +153,6 @@ def custom_initialize(self, simulation): computed_variables_used_as_input = [ "chomage_imposable", "primes_fonction_publique", - "retraite_brute", "retraite_imposable", "salaire_de_base", "traitement_indiciaire_brut", diff --git a/setup.py b/setup.py index faf78d94..ad7aa6ef 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name = "OpenFisca-France-Data", - version = "3.4.1", + version = "3.4.2", description = "OpenFisca-France-Data module to work with French survey data", long_description = long_description, long_description_content_type="text/markdown", @@ -42,7 +42,7 @@ python_requires = ">=3.9", install_requires = [ "multipledispatch >=0.6.0, <1.0.0", - "OpenFisca-France >=167.0.0, <168.0.0", + "OpenFisca-France >=168.0.0, <169.0.0", "openFisca-survey-manager >=2.0.0, <2.1.0", ], extras_require = { diff --git a/tests/erfs_fpr/integration/test_aggregates.py b/tests/erfs_fpr/integration/test_aggregates.py index 2b07ffd1..cc3a2947 100644 --- a/tests/erfs_fpr/integration/test_aggregates.py +++ b/tests/erfs_fpr/integration/test_aggregates.py @@ -7,15 +7,12 @@ import pandas as pd import sys import gc -import os - - from openfisca_france_data import france_data_tax_benefit_system from openfisca_france_data.erfs_fpr import REFERENCE_YEAR from openfisca_france_data.erfs_fpr.get_survey_scenario import get_survey_scenario from openfisca_france_data.aggregates import FranceAggregates as Aggregates - +from openfisca_france_data.config import config log = logging.getLogger(__name__) logging.basicConfig(level = logging.INFO, stream = sys.stdout, @@ -23,7 +20,6 @@ datefmt='%Y-%m-%d %H:%M:%S' ) - def test_erfs_fpr_survey_simulation_aggregates(year = REFERENCE_YEAR, rebuild_input_data = False, use_marginal_tax_rate = True, variation_factor = 0.03, varying_variable = 'salaire_de_base'): log.info(f'test_erfs_fpr_survey_simulation_aggregates for {year}...') np.seterr(all = 'raise') @@ -55,7 +51,7 @@ def test_erfs_fpr_survey_simulation_aggregates(year = REFERENCE_YEAR, rebuild_in np.quantile(mtr_rd, q = np.arange(0, 1.1, .1)) - return survey_scenario, aggregates_taxipp.get_data_frame(), aggregates_ines.get_data_frame(), aggregates_france_entiere.get_data_frame() + return survey_scenario, aggregates_taxipp.get_data_frame(), aggregates_ines.get_data_frame(), aggregates_france_entiere.get_data_frame() def test_erfs_fpr_aggregates_reform(): diff --git a/tests/test_get_baremes_salarie.py b/tests/test_get_baremes_salarie.py index db30d566..b5b9d450 100644 --- a/tests/test_get_baremes_salarie.py +++ b/tests/test_get_baremes_salarie.py @@ -14,7 +14,6 @@ 2016: [ 'agff', 'arrco', - 'asf', 'chomage', 'maladie', 'vieillesse_deplafonnee', @@ -23,7 +22,6 @@ 2017: [ 'agff', 'arrco', - 'asf', 'chomage', 'maladie', 'vieillesse_deplafonnee', @@ -32,14 +30,12 @@ 2018: [ 'agff', 'arrco', - 'asf', 'chomage', 'vieillesse_deplafonnee', 'vieillesse_plafonnee', ], 2019: [ 'agirc_arrco', - 'asf', 'ceg', 'cet2019', 'vieillesse_deplafonnee', @@ -52,7 +48,6 @@ 'agirc', 'apec', 'arrco', - 'asf', 'cet', 'chomage', 'maladie', @@ -64,7 +59,6 @@ 'arrco', 'agirc', 'apec', - 'asf', 'cet', 'maladie', 'chomage', @@ -76,7 +70,6 @@ 'arrco', 'agirc', 'apec', - 'asf', 'cet', 'chomage', 'vieillesse_deplafonnee', @@ -84,7 +77,6 @@ ], 2019: [ 'agirc_arrco', - 'asf', 'apec', 'ceg', 'cet2019',