From 84acb971a0bb3a70022aed9e75810d4607783fdb Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Sun, 3 Jan 2021 20:36:04 +0100 Subject: [PATCH] More code for allocations_familiales --- .../decrets_divers.catala_fr | 20 +- .../allocations_familiales/metadata.catala_fr | 266 +++++---------- .../securite_sociale_L.catala_fr | 310 +++++++----------- .../securite_sociale_R.catala_fr | 41 +-- .../tests/tests_ouverture_droits.catala_fr | 32 +- src/catala/catala_surface/desugaring.ml | 4 +- src/catala/scope_language/scope_to_dcalc.ml | 12 +- 7 files changed, 245 insertions(+), 440 deletions(-) diff --git a/examples/allocations_familiales/decrets_divers.catala_fr b/examples/allocations_familiales/decrets_divers.catala_fr index 6e89db38..5400a2bd 100644 --- a/examples/allocations_familiales/decrets_divers.catala_fr +++ b/examples/allocations_familiales/decrets_divers.catala_fr @@ -10,12 +10,12 @@ Au titre de l’année 2020, l’article 81 de la loi du 24 décembr Le montant précité de la base mensuelle de calcul des allocations familiales (BMAF), en pourcentage duquel sont fxés les montants des prestations familiales, est ainsi porté de 413,16 € à 414,4 € au 1er avril 2020. /* -# champ d'application CalculAllocationsFamiliales : -# définition prestations_familiales.base_mensuelle -# sous condition -# date_calcul >= |01/04/2020| et -# date_calcul < |01/04/2021| -# conséquence égal à 414,4 € +champ d'application PrestationsFamiliales : + définition base_mensuelle + sous condition + date_courante >=@ |01/04/2020| et + date_courante <@ |01/04/2021| + conséquence égal à 414,4 € */ Des règles spécifques s’appliquent par ailleurs aux prestations familiales suivantes en métropole tout comme dans les collectivités de Guadeloupe, Guyane, Martinique, La Réunion, Saint-Barthélemy et à Saint-Martin : l’article 37 de la LFSS pour 2018 a prévu une mesure d’harmonisation du barème de l’allocation de base (AB), de la prime à la naissance et de la prime à l’adoption sur celui du complément familial. Cette réforme est applicable aux enfants nés ou adoptés à compter du 1er avril 2018 et en conséquence à l’ensemble des enfants à compter du 1er avril 2021. @@ -108,14 +108,6 @@ Je vous demande de bien vouloir transmettre à la connaissance des or @@Décret n° 2019-1387 du 18 décembre 2019 portant relèvement du salaire minimum de croissance@@ -@@Début métadonnées@@ -/* -déclaration champ d'application Smic : - contexte résidence contenu Collectivité - contexte brut_horaire contenu argent -*/ -@@Fin métadonnées@@ - @Article 1|LEGIARTI000039640195|01/01/2020@ A compter du 1er janvier 2020, pour les catégories de travailleurs mentionnés à l' article L. 2211-1 du code du travail , le montant du salaire minimum de croissance est relevé dans les conditions ci-après : 1° En métropole, en Guadeloupe, en Guyane, en Martinique, à La Réunion, à Saint-Barthélemy, à Saint-Martin et à Saint-Pierre-et-Miquelon, son montant est porté à 10,15 € l'heure ; diff --git a/examples/allocations_familiales/metadata.catala_fr b/examples/allocations_familiales/metadata.catala_fr index fe3bc4ab..28b1a7b7 100644 --- a/examples/allocations_familiales/metadata.catala_fr +++ b/examples/allocations_familiales/metadata.catala_fr @@ -1,24 +1,26 @@ @@Début métadonnées@@ /* -# déclaration structure Personne : -# donnée prénom contenu texte -# donnée nom contenu texte -# donnée date_de_naissance contenu date +déclaration structure Personne: + donnée numéro_sécurité_sociale contenu entier -# déclaration structure ParentsGardeAlternée : -# donnée parent1 contenu Personne -# donnée parent2 contenu Personne +déclaration énumération GardeAlternée : + -- OuiPartageAllocations + -- OuiAllocataireUnique + -- NonGardeUnique -# déclaration énumération PriseEnCharge : -# -- Complète contenu Personne -# -- GardeAlternée contenu ParentsGardeAlternée +déclaration énumération PriseEnChargeServiceSociaux: + -- OuiAllocationVerséeÀLaFamille + -- OuiAllocationVerséeAuxServicesSociaux + -- NonPriseEnChargeFamille déclaration structure Enfant : donnée fin_obligation_scolaire contenu date donnée rémuneration_mensuelle contenu argent + donnée date_de_naissance contenu date donnée âge contenu entier - # donnée prise_en_charge contenu PriseEnCharge - # condition confié_service_social + donnée garde_alternée contenu GardeAlternée + donnée pris_en_charge_par_services_sociaux contenu + PriseEnChargeServiceSociaux déclaration énumération Collectivité : -- Guadeloupe @@ -31,198 +33,82 @@ déclaration énumération Collectivité : -- SaintPierreEtMiquelon -- Mayotte -# déclaration structure Ménage : -# donnée enfants contenu collection Enfant -# donnée parent_en_charge contenu Personne dépend de Enfant -# donnée enfant_plus_âgé contenu Enfant -# donnée parents contenu collection Personne -# donnée parent1 contenu Personne -# donnée parent2 contenu Personne -# donnée résidence contenu Collectivité -# # Le mot optionnel permet de prévoir le cas où le -# # ménage n'a pas d'enfants +déclaration champ d'application Smic : + contexte résidence contenu Collectivité + contexte brut_horaire contenu argent -# déclaration champ d'application MénageBienFormé : -# contexte ménage contenu Ménage +déclaration énumération PriseEnCompteÉvaluationMontant: + -- Complète + -- Partagée -# champ d'application MénageBienFormé : -# assertion nombre de parents > 0 et nombre de parents <= 2 +déclaration énumération VersementAllocations: + -- Normal + -- AllocationVerséeAuxServicesSociaux -# # Les champs parent1 et parent2 sont cohérents -# assertion ménage.parent1 dans ménage.parents -# assertion ( -# selon ménage.parent2 sous forme -# -- Présent de parent2 : -# parent2 dans ménage.parents et parent2 != ménage.parent1 -# -- Absent : vrai -# ) +déclaration énumération ÂgeAlternatif: + -- Absent + -- Présent contenu entier -# # Dans la traduction informatique, le ménage est en charge de chacun -# # des enfants -# assertion (pour tout enfant dans enfants on a -# selon enfant.prise_en_charge sous forme -# -- Complète de parent : parent dans ménage.parents -# -- GardeAlternée de parents_garde_alternée : -# parents_garde_alternée.parent1 dans ménage.parents ou -# parents_garde_alternée.parent2 dans ménage.parents -# ) +déclaration énumération ÉlémentPrestationsFamiliales: + -- PrestationAccueilJeuneEnfant + -- AllocationsFamiliales + -- ComplémentFamilial + -- AllocationLogement + -- AllocationÉducationEnfantHandicapé + -- AllocationSoutienFamilial + -- AllocationRentréeScolaire + -- AllocationJournalièrePresenceParentale -# # parent_en_charge permet de savoir quel parent du ménage -# # est en charge de quel enfant -# définition parent_en_charge de enfant égal à ( -# selon enfant.prise_en_charge sous forme -# -- Complète de parent : parent -# -- GardeAlternée de parents_garde_alternée : ( -# si parents_garde_alternée.parent1 dans ménage.parents -# alors parents_garde_alternée.parent1 -# sinon parents_garde_alternée.parent2 -# )) +déclaration champ d'application PrestationsFamiliales: + contexte droit_ouvert condition dépend de Enfant + contexte conditions_hors_âge condition dépend de Enfant + contexte plafond_l512_3_2 contenu argent + contexte âge_l512_3_2 contenu entier + contexte âge_l512_3_2_alternatif contenu ÂgeAlternatif + contexte régime_outre_mer_l751_1 condition + contexte date_courante contenu date + contexte prestation_courante contenu ÉlémentPrestationsFamiliales + contexte résidence contenu Collectivité + contexte smic champ d'application Smic + contexte base_mensuelle contenu argent -# # Lorsqu'un enfant est confié au service social, il ne peut être -# # en garde alternée -# assertion pour tout enfant dans enfants on a -# si enfant.confié_service_social -# alors enfant.prise_en_charge = Complète contenu service_social -# sinon vrai +champ d'application PrestationsFamiliales: + définition smic.résidence égal à résidence -# déclaration énumération Prestation: -# -- PrestationAccueilJeuneEnfant -# -- AllocationFamiliale -# -- ComplémentFamilial -# -- AllocationLogement -# -- AllocationÉducationEnfantHandicapé -# -- AllocationSoutienFamilial -# -- AllocationRentréeScolaire -# -- AllocationJournalièrePresenceParentale +déclaration champ d'application AllocationFamilialesAvril2008: + contexte âge_limite_alinéa_1_l521_3 contenu entier -# déclaration structure PrestationsFamiliales : -# condition conditions_hors_âge dépend de Enfant -# condition droits_ouverts dépend de Enfant -# donnée base_mensuelle contenu argent -# donnée base_mensuelle_dom contenu argent +déclaration champ d'application AllocationsFamiliales: + contexte enfants_à_charge contenu collection Enfant + contexte ressources_ménage contenu argent + contexte prise_en_compte contenu + PriseEnCompteÉvaluationMontant dépend de Enfant + contexte versement contenu + VersementAllocations dépend de Enfant -# déclaration énumération ChargeAllocation : -# -- Complète -# -- Partagée + contexte droit_ouvert_base condition + contexte droit_ouvert_majoration condition dépend de Enfant + contexte montant_versé_base contenu argent -# déclaration structure AllocationsFamiliales : -# condition droits_ouverts -# donnée date_ouverture_droits contenu date -# condition conditions_hors_âge dépend de Enfant -# donnée base contenu argent -# donnée avec_garde_alternée contenu argent -# donnée montant_versé contenu argent -# donnée récipiendaire_par_enfant contenu Personne dépend de Enfant -# donnée charge_par_enfant contenu ChargeAllocation dépend de Enfant -# donnée rapport_enfants_total_moyen contenu décimal -# donnée nombre_total_enfants contenu entier -# donnée nombre_moyen_enfants contenu décimal -# donnée montant_premier_enfant contenu argent -# donnée montant_deuxieme_enfant contenu argent -# donnée montant_troisième_enfant_et_plus contenu argent + contexte droit_ouvert_forfaitaire condition dépend de Enfant + contexte montant_versé_forfaitaire contenu argent -# déclaration structure AllocationForfaitaire : -# condition droits_ouverts dépend de Enfant -# donnée montant_versé contenu argent + contexte montant_versé_majorations contenu argent -# déclaration énumération ChoixParentAllocataire : -# -- UnParent contenu Personne -# -- DeuxParents + contexte droit_ouvert_complément condition + contexte montant_versé_complément contenu argent -# déclaration structure AllocationsGardeAlternée : -# donnée choix_allocataire contenu ChoixParentAllocataire -# dépend de Enfant -# condition unique_allocataire dépend de Enfant -# condition allocataire_double dépend de Enfant -# condition demande_conjointe_partage_charge dépend de Enfant -# condition desaccord_charge dépend de Enfant + contexte prestations_familiales champ d'application PrestationsFamiliales + contexte version_avril_2008 champ d'application AllocationFamilialesAvril2008 + contexte conditions_hors_âge condition dépend de Enfant -# déclaration structure MajorationsAllocationsFamiliales : -# condition droits_ouverts dépend de Enfant -# donnée base_par_enfant contenu argent dépend de Enfant -# donnée avec_garde_alternée contenu argent dépend de Enfant -# donnée montant_versé contenu argent + contexte nombre_enfants_l512_1 contenu entier + contexte âge_limite_alinéa_1_l521_3 contenu entier dépend de Enfant + contexte nombre_enfants_alinéa_2_l521_3 contenu entier + contexte est_enfant_le_plus_âgé contenu booléen dépend de Enfant -# déclaration structure ComplémentDégressif : -# condition droits_ouverts dépend de argent -# donnée dépassement contenu argent dépend de argent -# donnée pour_allocation_forfaitaire contenu argent -# donnée pour_allocations_familiales_et_majorations contenu argent -# donnée montant_versé contenu argent - -# déclaration structure TitreI: -# condition droits_ouverts_allocations_familiales dépend de Personne - -# déclaration structure L511_1: -# donnée prestation_courante contenu Prestation - -# déclaration structure L512_3 : -# donnée âge_limite_alinéa_2 contenu entier -# donnée âge_limite_alinéa_2_alternatif contenu entier -# condition âge_limite_alinéa_2_alternatif_utilisé -# donnée plafond_rémunération_mensuelle_alinéa_2 contenu argent - -# déclaration structure L521_1 : -# donnée nombre_minimum_enfants contenu argent -# donnée ressources_ménage contenu argent - -# déclaration structure L521_3 : -# donnée âge_limite_alinéa_1 contenu entier dépend de Enfant -# donnée minimum_alinéa_2 contenu argent - -# déclaration structure L751_1 : -# condition régime_outre_mer - -# déclaration structure D521_3 : -# donnée plafond_I contenu argent -# donnée plafond_II contenu argent - -# déclaration structure SMIC : -# donnée brut_horaire contenu argent dépend de Collectivité - -# déclaration champ d'application CalculPrestationsFamiliales : -# # Les règles déclarées dans PrestationsFamiliales pourront utiliser -# # ménage et l512_3 et leur données associées -# contexte date_calcul contenu date -# contexte ménage contenu Ménage -# contexte prestations_familiales contenu PrestationsFamiliales -# contexte l511_1 contenu L511_1 -# contexte l512_3 contenu L512_3 -# contexte ménage_bien_formé champ d'application MénageBienFormé - -# champ d'application CalculPrestationsFamiliales: -# définition ménage_bien_formé.ménage égal à ménage - -# déclaration champ d'application CalculAllocationsFamilialesAvril2008 : -# contexte l521_3 contenu L521_3 - -# déclaration champ d'application CalculAllocationsFamiliales : -# contexte date_calcul contenu date -# contexte ménage contenu Ménage -# contexte allocations_familiales contenu AllocationsFamiliales -# contexte allocation_forfaitaire contenu AllocationForfaitaire -# contexte allocations_garde_alternée contenu AllocationsGardeAlternée -# contexte majorations_allocations_familiales -# contenu MajorationsAllocationsFamiliales -# contexte smic contenu SMIC - -# contexte titre_I contenu TitreI -# contexte l521_1 contenu L521_1 -# contexte l521_3 contenu L521_3 -# contexte l751_1 contenu L751_1 -# contexte d521_1 contenu D521_1 -# contexte d521_3 contenu D521_3 -# contexte calcul_prestations_familiales -# champ d'application CalculPrestationsFamiliales -# contexte calcul_avril_2008 -# champ d'application CalculAllocationsFamilialesAvril2008 - -# champ d'application CalculAllocationsFamiliales: -# définition calcul_prestations_familiales.ménage égal à ménage -# définition calcul_prestations_familiales.date_calcul égal à date_calcul -# # AllocationsFamiliales est un cas particulier de PrestationsFamiliales, -# # le dernier est donc inclus dans l'autre. Il est nécessaire de préciser -# # que les deux contextes parlent du même ménage pour caractériser -# # l'inclusion. +champ d'application AllocationsFamiliales: + définition prestations_familiales.prestation_courante égal à + AllocationsFamiliales */ @@Fin métadonnées@@ diff --git a/examples/allocations_familiales/securite_sociale_L.catala_fr b/examples/allocations_familiales/securite_sociale_L.catala_fr index e6e41461..39443f6a 100644 --- a/examples/allocations_familiales/securite_sociale_L.catala_fr +++ b/examples/allocations_familiales/securite_sociale_L.catala_fr @@ -30,49 +30,19 @@ Les prestations familiales comprennent : 9°) l'allocation journalière de présence parentale. /* -déclaration énumération ÉlémentPrestationsFamiliales: - -- PrestationAccueilJeuneEnfant - -- AllocationsFamiliales - -- ComplémentFamilial - -- AllocationLogement - -- AllocationÉducationEnfantHandicapé - -- AllocationSoutienFamilial - -- AllocationRentréeScolaire - -- AllocationJournalièrePresenceParentale +# Voir l'énumération ÉlémentPrestationsFamiliale */ @@Chapitre 2 : Champ d'application@@++++ -@@Début métadonnées@@ -/* -déclaration énumération ÂgeAlternatif: - -- Absent - -- Présent contenu entier - -déclaration champ d'application OuvertureDroitPrestationsFamiliales: - contexte droits_ouverts condition dépend de Enfant - contexte conditions_hors_âge condition dépend de Enfant - contexte plafond_l512_3_2 contenu argent - contexte âge_l512_3_2 contenu entier - contexte âge_l512_3_2_alternatif contenu ÂgeAlternatif - contexte date_courante contenu date - contexte prestation_courante contenu ÉlémentPrestationsFamiliales - contexte résidence contenu Collectivité - contexte smic champ d'application Smic - -champ d'application OuvertureDroitPrestationsFamiliales: - définition smic.résidence égal à résidence -*/ -@@Fin métadonnées@@ - @Article L512-3|LEGIARTI000038834523@ Sous réserve des règles particulières à chaque prestation, ouvre droit aux prestations familiales : 1°) tout enfant jusqu'à la fin de l'obligation scolaire ; /* -champ d'application OuvertureDroitPrestationsFamiliales : - règle droits_ouverts de enfant sous condition +champ d'application PrestationsFamiliales : + règle droit_ouvert de enfant sous condition (date_courante <=@ enfant.fin_obligation_scolaire) conséquence rempli */ @@ -80,7 +50,7 @@ champ d'application OuvertureDroitPrestationsFamiliales : 2°) après la fin de l'obligation scolaire, et jusqu'à un âge limite, tout enfant dont la rémunération éventuelle n'excède pas un plafond. /* -champ d'application OuvertureDroitPrestationsFamiliales : +champ d'application PrestationsFamiliales : # On définit les conditions hors âge d'abord car elles # sont référencées plus tard dans l'article L521-1 règle conditions_hors_âge de enfant sous condition @@ -88,7 +58,7 @@ champ d'application OuvertureDroitPrestationsFamiliales : (enfant.rémuneration_mensuelle <=€ plafond_l512_3_2) conséquence rempli - règle droits_ouverts de enfant sous condition + règle droit_ouvert de enfant sous condition (date_courante >@ enfant.fin_obligation_scolaire) et (conditions_hors_âge de enfant) et (enfant.âge <= âge_l512_3_2) @@ -99,7 +69,7 @@ Toutefois, pour l'attribution du complément familial et de l'allocation de logement mentionnés aux 3° et 4° de l'article L. 511-1 , l'âge limite peut être différent de celui mentionné au 2° du présent article. /* -champ d'application OuvertureDroitPrestationsFamiliales : +champ d'application PrestationsFamiliales : définition âge_l512_3_2 sous condition (selon âge_l512_3_2_alternatif sous forme -- Présent de âge : vrai @@ -119,19 +89,10 @@ champ d'application OuvertureDroitPrestationsFamiliales : @Article L521-1|LEGIARTI000029963006@ Les allocations familiales sont dues à partir du deuxième enfant à charge. /* -# champ d'application CalculAllocationsFamiliales : -# règle allocations_familiales.droits_ouverts sous condition -# nombre de ménage.enfants >= 2 -# conséquence rempli - -# # Les droits doivent être ouverts pour appliquer le champ -# # CalculAllocationsFamiliales. Si cette condition n'est pas remplie, -# # alors il est inutile de calculer le reste -# assertion allocations_familiales.droits_ouverts -# # Le champ d'application CalculAllocationsFamiliales inclus -# # PrestationsFamiliales, mais à condition que la prestation courante -# # soit cohérente -# définition l511_1.prestation_courante égal à AllocationFamiliale +champ d'application AllocationsFamiliales : + règle droit_ouvert_base sous condition + nombre de enfants_à_charge >= 2 + conséquence rempli */ Une allocation forfaitaire par enfant d'un montant fixé par décret est versée @@ -142,24 +103,22 @@ limite mentionné au 2° de l'article L. 512-3 . Cette allocation est versée à la condition que le ou les enfants répondent aux conditions autres que celles de l'âge pour l'ouverture du droit aux allocations familiales. /* -# champ d'application CalculAllocationsFamiliales : -# assertion fixé allocation_forfaitaire.montant_versé par décret +champ d'application AllocationsFamiliales : + assertion fixé montant_versé par décret -# # Ici, l'ouverture du droit aux allocations familiales est conditionné -# # au fait d'avoir deux enfants à charges qui répondent aux conditions -# # d'ouverture du droit à une prestation familiale. Pour cette raison, -# # nous nous référons ici aux conditions_hors_âge de prestations_familiales -# # et non pas de allocations_familiales -# règle allocations_familiales.conditions_hors_âge de enfant sous condition -# prestations_familiales.conditions_hors_âge de enfant -# conséquence rempli + # Ici, l'ouverture du droit aux allocations familiales est conditionné + # au fait d'avoir deux enfants à charges qui répondent aux conditions + # d'ouverture du droit à une prestation familiale. Pour cette raison, + # nous nous référons ici aux conditions_hors_âge de prestations_familiales + règle conditions_hors_âge de enfant sous condition + prestations_familiales.conditions_hors_âge de enfant + conséquence rempli -# règle allocation_forfaitaire.droits_ouverts de enfant sous condition -# (nombre de ménage.enfants >= l512_1.nombre_minimum_enfants) et -# (enfant dans ménage.enfants) et -# (enfant.âge = l512_3.âge_limite_alinéa_2) et -# (allocations_familiales.conditions_hors_âge de enfant) -# conséquence rempli + règle droit_ouvert_forfaitaire de enfant sous condition + (nombre de enfants_à_charge >= nombre_enfants_l512_1) et + (enfant.âge = prestations_familiales.âge_l512_3_2) et + (conditions_hors_âge de enfant) + conséquence rempli */ Le montant des allocations mentionnées aux deux premiers alinéas du présent @@ -167,21 +126,19 @@ article, ainsi que celui des majorations mentionnées à l'article L. 521-3 varient en fonction des ressources du ménage ou de la personne qui a la charge des enfants, selon un barème défini par décret. /* -# champ d'application CalculAllocationsFamiliales : -# assertion fixé allocations_familiales.montant_versé par décret -# assertion varie allocations_familiales.montant_versé avec -# l521_1.ressources_ménage -# assertion fixé majorations_allocations_familiales.montant_versé par décret -# assertion varie majorations_allocations_familiales.montant_versé avec -# l521_1.ressources_ménage +champ d'application AllocationsFamiliales : + assertion fixé montant_versé_base par décret + assertion varie montant_versé_base avec ressources_ménage + assertion fixé montant_versé_majorations par décret + assertion varie montant_versé_majorations avec ressources_ménage */ Le montant des allocations familiales varie en fonction du nombre d'enfants à charge. /* -# champ d'application CalculAllocationsFamiliales : -# assertion varie allocations_familiales.montant_versé avec -# nombre de ménage.enfants +champ d'application AllocationsFamiliales : + assertion varie montant_versé_base.montant_versé avec + nombre de enfants_à_charge */ Les niveaux des plafonds de ressources, qui varient en fonction du nombre @@ -203,24 +160,20 @@ sont définies par décret. # est assez important et nous avons choisi de ne pas l'inclure dans ce # document. -# champ d'application CalculAllocationsFamiliales : -# assertion fixé complément_dégressif.montant_versé par décret +champ d'application AllocationsFamiliales : + assertion fixé montant_versé_complément par décret */ @Article L521-2|LEGIARTI000006743210@ Les allocations sont versées à la personne qui assume, dans quelques conditions que ce soit, la charge effective et permanente de l'enfant. /* -# champ d'application CalculAllocationsFamiliales : -# définition allocations_familiales.charge_par_enfant de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (enfant.prise_en_charge sous forme Complète) -# conséquence égal à Complète +champ d'application AllocationsFamiliales : + étiquette définition_prise_en_compte + définition prise_en_compte de enfant égal à Complète -# définition allocations_familiales.récipiendaire_par_enfant de enfant -# sous condition enfant dans ménage.enfants -# conséquence égal à ménage.parent_en_charge + étiquette définition_versement + définition versement de enfant égal à Normal */ En cas de résidence alternée de l'enfant au domicile de chacun des parents telle @@ -232,47 +185,41 @@ désaccord sur la désignation de l'allocataire. Un décret en Conseil d'Etat fi les conditions d'application du présent alinéa. /* -# champ d'application CalculAllocationsFamiliales : -# # Premier cas : garde alternée, parents désignent un unique allocataire -# règle allocations_garde_alternée.unique_allocataire de enfant sous condition -# (enfant dans ménage.enfants) et -# (enfant.prise_en_charge sous forme GardeAlternée) et -# ((allocations_garde_alternée.choix_allocataire de enfant) -# sous forme Présent) et -# ((allocations_garde_alternée.choix_allocataire de enfant) -> Présent -# sous forme UnParent) et -# (((allocations_garde_alternée.choix_allocataire de enfant) -> Présent -> UnParent) -# dans ménage.parents) -# conséquence rempli +champ d'application AllocationsFamiliales : + # Premier cas : garde alternée, parents désignent un unique allocataire + exception définition_prise_en_compte + définition prise_en_compte de enfant sous condition + selon enfant.garde_alternée sous forme + -- OuiAllocataireUnique: vrai + -- OuiPartageAllocations: faux + -- NonGardeUnique: faux + conséquence égal à Complète -# définition allocations_familiales.charge_par_enfant de enfant -# sous condition allocations_garde_alternée.unique_allocataire de enfant -# conséquence égal à Complète + exception définition_versement + définition versement de enfant sous condition + selon enfant.garde_alternée sous forme + -- OuiAllocataireUnique: vrai + -- OuiPartageAllocations: faux + -- NonGardeUnique: faux + conséquence égal à Normal -# # Deuxième cas : garde alternée, parents partagent la charge pour -# # l'allocation -# règle allocations_garde_alternée.allocataire_double de enfant sous condition -# (enfant dans ménage.enfants) et -# (enfant.prise_en_charge sous forme GardeAlternée) et -# (enfant.choix_allocataire_garde_alternée sous forme Présent) et -# (enfant.choix_allocataire_garde_alternée -> Présent sous forme DeuxParents) -# conséquence rempli + # Deuxième cas : garde alternée, parents partagent la charge pour + # l'allocation + exception définition_prise_en_compte + définition prise_en_compte de enfant sous condition + selon enfant.garde_alternée sous forme + -- OuiPartageAllocations: vrai + -- OuiAllocataireUnique: faux + -- NonGardeUnique: faux + conséquence égal à Partagée -# définition allocations_familiales.charge_par_enfant de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (allocations_garde_alternée.allocataire_double de enfant) -# conséquence égal à Partagée - -# définition allocations_familiales.charge_par_enfant de enfant sous condition -# (enfant dans ménage.enfants) et -# (enfant.prise_en_charge sous forme GardeAlternée) et -# (allocations_garde_alternée.demande_conjointe_partage_charge de enfant ou -# allocations_garde_alternée.desaccord_charge de enfant) -# conséquence égal à Partagée - - -# Quelles variables fixées par R521_2 ? + exception définition_versement + définition versement de enfant sous condition + selon enfant.garde_alternée sous forme + -- OuiPartageAllocations: vrai + -- OuiAllocataireUnique: faux + -- NonGardeUnique: faux + conséquence égal à Partagée */ Lorsque la personne qui assume la charge effective et permanente de l'enfant ne @@ -280,15 +227,7 @@ remplit pas les conditions prévues au titre I du présent livre pour l'ouvertur du droit aux allocations familiales, ce droit s'ouvre du chef du père ou, à défaut, du chef de la mère. /* -# champ d'application CalculAllocationsFamiliales : -# définition allocations_familiales.récipiendaire_par_enfant de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (titre_I.droits_ouverts_allocations_familiales de -# (ménage.parent_en_charge de enfant)) -# conséquence égal à ménage.parent1 - # ménage.parent1 est le père ou à défaut la mère - # (ménage.parent2 est optionnel) +# Non formalisé pour le calcul du montant des allocations */ Lorsqu'un enfant est confié au service d'aide sociale à l'enfance, les @@ -305,18 +244,14 @@ charge morale ou matérielle de l'enfant ou en vue de faciliter le retour de l'enfant dans son foyer. /* -# champ d'application CalculAllocationsFamiliales : -# définition allocations_familiales.charge_par_enfant de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (enfant.confié_service_social) -# conséquence égal à Complète - -# définition allocations_familiales.récipiendaire_par_enfant de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (enfant.confié_service_social) -# conséquence égal à service_social +champ d'application AllocationsFamiliales : + exception définition_versement + définition versement de enfant sous condition + selon enfant.pris_en_charge_par_services_sociaux sous forme + -- OuiAllocationVerséeAuxServicesSociaux: vrai + -- OuiAllocationVerséeÀLaFamille: faux + -- NonPriseEnChargeFamille: faux + conséquence égal à AllocationVerséeAuxServicesSociaux */ Un décret en Conseil d'Etat fixe les conditions d'application du présent @@ -339,26 +274,24 @@ d) enfants confiés à un service public, à une institution privée, à un part l'exception du plus âgé, ouvre droit à partir d'un âge minimum à une majoration des allocations familiales. /* -# champ d'application CalculAllocationsFamiliales : -# règle majorations_allocations_familiales.droits_ouverts de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (enfant != ménage.enfant_plus_âgé) et -# (enfant.âge >= l521_3.âge_limite_alinéa_1 de enfant) -# conséquence rempli +champ d'application AllocationsFamiliales : + règle droit_ouvert_majoration de enfant + sous condition + (non (est_enfant_le_plus_âgé de enfant)) et + (enfant.âge >= âge_limite_alinéa_1_l521_3 de enfant) + conséquence rempli */ Toutefois, les personnes ayant un nombre déterminé d'enfants à charge bénéficient de ladite majoration pour chaque enfant à charge à partir de l'âge mentionné au premier alinéa. /* -# champ d'application CalculAllocationsFamiliales : -# règle majorations_allocations_familiales.droits_ouverts de enfant -# sous condition -# (enfant dans ménage.enfants) et -# (nombre de ménage.enfants >= l521_3.minimum_alinéa_2) et -# (enfant.âge >= l521_3.âge_limite_alinéa_1 de enfant) -# conséquence rempli +champ d'application AllocationsFamiliales : + règle droit_ouvert_majoration de enfant + sous condition + (nombre de enfants_à_charge >= nombre_enfants_alinéa_2_l521_3) et + (enfant.âge >= âge_limite_alinéa_1_l521_3 de enfant) + conséquence rempli */ @@Titre 5 : Dispositions communes@@+++ @@ -371,14 +304,13 @@ mensuelles de calcul revalorisées au 1er avril de chaque année par application du coefficient mentionné à l'article L. 161-25 . /* # Idem que L521-1, on ne formalise pas ici l'évolution de la BMPA -# champ d'application PrestationsFamiliales : -# assertion fixé prestations_familiales.base_mensuelle par décret +champ d'application PrestationsFamiliales : + assertion fixé prestations_familiales.base_mensuelle par décret */ @@Livre 7 : Régimes divers - Dispositions diverses@@++ -@@Titre 5 : Dispositions particulières à la Guadeloupe, à la Guyane, à la -Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin@@+++ +@@Titre 5 : Dispositions particulières à la Guadeloupe, à la Guyane, à la Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin@@+++ @@Chapitre 1er : Généralités@@++++ @@ -388,15 +320,15 @@ en Martinique, à La Réunion, à Saint-Barthélemy et à Saint-Martin à l'ensemble des bénéficiaires de la législation générale de sécurité sociale, y compris les membres des professions agricoles. /* -# champ d'application CalculPrestationsFamiliales : -# règle l751_1.régime_outre_mer sous condition -# (ménage.résidence = Guadeloupe) ou -# (ménage.résidence = Guyane) ou -# (ménage.résidence = Martinique) ou -# (ménage.résidence = LaRéunion) ou -# (ménage.résidence = SaintBarthélemy) ou -# (ménage.résidence = SaintMartin) -# conséquence rempli +champ d'application PrestationsFamiliales : + règle régime_outre_mer_l751_1 sous condition + (résidence = Guadeloupe) ou + (résidence = Guyane) ou + (résidence = Martinique) ou + (résidence = LaRéunion) ou + (résidence = SaintBarthélemy) ou + (résidence = SaintMartin) + conséquence rempli */ @@Chapitre 5 : Prestations familiales et prestations assimilées@@++++ @@ -410,9 +342,7 @@ La base de calcul des prestations familiales est la même que celle qui est fixée en application de l'article L. 551-1 . /* -# champ d'application CalculPrestationsFamiliales : -# définition prestations_familiales.base_mensuelle_dom égal à -# prestations_familiales.base_mensuelle +# Aucun changement dans le code, puisque les articles restent applicables */ @Article L755-11|LEGIARTI000031323803@ @@ -430,11 +360,11 @@ longtemps que le présent chapitre V est applicable. Les allocations familiales sont dues, pour tout enfant, à la personne qui a effectivement la charge de celui-ci. /* -# champ d'application CalculAllocationsFamiliales : -# règle allocations_familiales.droits_ouverts sous condition -# (l751_1.régime_outre_mer) et -# (nombre de ménage.enfants >= 1) -# conséquence rempli +champ d'application AllocationsFamiliales: + règle droit_ouvert_base sous condition + prestations_familiales.régime_outre_mer_l751_1 et + (nombre de enfants_à_charge >= 1) + conséquence rempli */ Toutefois, les quatre derniers alinéas de l'article L. 521-1 ne sont pas applicables lorsque le ménage ou la personne a un seul enfant à charge. @@ -442,16 +372,14 @@ applicables lorsque le ménage ou la personne a un seul enfant à charge. # Ceci concerne l'ouverture du droit à l'allocation forfaitaire # et au complément dégressif. -# champ d'application CalculAllocationsFamiliales : -# règle allocation_forfaitaire.droits_ouverts de enfant sous condition -# (l751_1.régime_outre_mer) et -# (nombre de ménage.enfants = 1) -# conséquence non rempli +champ d'application AllocationsFamiliales : + règle droit_ouvert_forfaitaire de enfant sous condition + prestations_familiales.régime_outre_mer_l751_1 et + (nombre de enfants_à_charge = 1) + conséquence non rempli -# règle -# complément_dégressif.droits_ouvert de allocation -# sous condition -# (l751_1.régime_outre_mer) et -# (nombre de ménage.enfants = 1) -# conséquence non rempli + règle droit_ouvert_complément sous condition + prestations_familiales.régime_outre_mer_l751_1 et + (nombre de enfants_à_charge = 1) + conséquence non rempli */ diff --git a/examples/allocations_familiales/securite_sociale_R.catala_fr b/examples/allocations_familiales/securite_sociale_R.catala_fr index 23022496..2ee905bc 100644 --- a/examples/allocations_familiales/securite_sociale_R.catala_fr +++ b/examples/allocations_familiales/securite_sociale_R.catala_fr @@ -11,7 +11,7 @@ Les enfants ouvrent droit aux prestations familiales jusqu'à l'âge de vingt ans sous réserve que leur rémunération n'excède pas le plafond fixé au deuxième alinéa du présent article. /* -champ d'application OuvertureDroitPrestationsFamiliales : +champ d'application PrestationsFamiliales : définition âge_l512_3_2 égal à 20 */ @@ -20,7 +20,7 @@ un mois, à 55 % du salaire minimum interprofessionnel de croissance défini aux articles L. 141-1 à L. 141-9 du code du travail, multiplié par 169. /* -champ d'application OuvertureDroitPrestationsFamiliales : +champ d'application PrestationsFamiliales : définition plafond_l512_3_2 égal à (smic.brut_horaire *€ 55 %) *€ 169,0 */ @@ -42,15 +42,15 @@ L'âge mentionné au premier alinéa de l'article L. 521-3 à partir duquel les enfants ouvrent droit à la majoration des allocations familiales est fixé à 14 ans. /* -# champ d'application CalculAllocationsFamiliales : -# définition l521_3.âge_limite_alinéa_1 de enfant égal à 14 an +champ d'application AllocationsFamiliales : + définition âge_limite_alinéa_1_l521_3 de enfant égal à 14 */ Le nombre minimum d'enfants à charge, mentionné au deuxième alinéa de l'article L. 521-3 ouvrant droit à ladite majoration pour chaque enfant est fixé à trois. /* -# champ d'application CalculAllocationsFamiliales : -# définition l521_3.minimum_alinéa_2 égal à 3 +champ d'application AllocationsFamiliales : + définition nombre_enfants_alinéa_2_l521_3 égal à 3 */ NOTA : Décret n° 2008-409 du 28 avril 2008 JORF du 29 avril 2008 art. 2 : Les @@ -61,15 +61,15 @@ le onzième anniversaire est postérieur au 30 avril 2008. # version du corpus législatif dont un morceau s'applique encore. Nous avons # choisi de montrer ce vieux champ d'application ici plutôt qu'à côté du texte # du décret de 2008 pour des raisons de place seulement. -# champ d'application CalculAllocationFamilialesAvril2008: -# # Âge limite avant décret n° 2008-409 du 28 avril 2008 -# définition l521_3.minimum_alinéa_2 de enfant égal à 16 an +champ d'application AllocationFamilialesAvril2008: + # Âge limite avant décret n° 2008-409 du 28 avril 2008 + définition âge_limite_alinéa_1_l521_3 égal à 16 -# champ d'application CalculAllocationsFamiliales : -# définition l521_3.minimum_alinéa_2 de enfant -# sous condition (enfant.date_naissance + 11 an <= |30/04/2008|) -# conséquence égal à -# calcul_avril_2008.l521_3.minimum_alinéa_2 de enfant +champ d'application AllocationsFamiliales : + définition âge_limite_alinéa_1_l521_3 de enfant + sous condition (enfant.date_de_naissance +@ 11 an <=@ |30/04/2008|) + conséquence égal à + version_avril_2008.âge_limite_alinéa_1_l521_3 */ @Article R521-2|LEGIARTI000006750608@ Dans les situations visées au deuxième alinéa de l'article L. 521-2 , @@ -84,19 +84,6 @@ une demande conjointe de partage. /* # Le fait que l'allocataire dans le cas d'un commun accord soit celui des # deux parents désigné par l'accord est déjà modélisé dans L512-2. - -# champ d'application CalculAllocationsFamiliales : -# définition allocations_familiales.charge_par_enfant de enfant sous condition -# (enfant dans ménage.enfants) et -# (enfant.prise_en_charge sous forme GardeAlternée) et -# ( -# (allocations_garde_alternée.demande_conjointe_partage_charge) ou -# ( -# (non allocations_garde_alternée.demande_conjointe_partage_charge) et -# (enfant.choix_allocataire_garde_alternée sous forme Absent) -# ) -# ) -# conséquence égal à Partagée */ Lorsque les parents ont désigné un allocataire unique ou fait une demande diff --git a/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr b/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr index 56b946fe..f7c17485 100644 --- a/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr +++ b/examples/allocations_familiales/tests/tests_ouverture_droits.catala_fr @@ -4,31 +4,43 @@ /* déclaration champ d'application Test1: - contexte f champ d'application OuvertureDroitPrestationsFamiliales + contexte f champ d'application PrestationsFamiliales champ d'application Test1: définition f.âge_l512_3_2_alternatif égal à Absent - définition f.date_courante égal à |01/01/2020| + définition f.date_courante égal à |01/05/2020| définition f.prestation_courante égal à AllocationsFamiliales définition f.résidence égal à Métropole - assertion (f.droits_ouverts de Enfant { - -- fin_obligation_scolaire : |01/08/2021| + assertion (f.droit_ouvert de Enfant { + -- fin_obligation_scolaire : |01/08/2023| + -- date_de_naissance: |01/01/2007| -- âge: 13 -- rémuneration_mensuelle: 0€ + -- pris_en_charge_par_services_sociaux: NonPriseEnChargeFamille + -- garde_alternée: NonGardeUnique }) - assertion (non (f.droits_ouverts de Enfant { + assertion (non (f.droit_ouvert de Enfant { -- fin_obligation_scolaire : |01/08/2019| - -- âge: 17 + -- date_de_naissance: |01/01/2003| + -- âge: 18 -- rémuneration_mensuelle: 1000€ + -- pris_en_charge_par_services_sociaux: NonPriseEnChargeFamille + -- garde_alternée: NonGardeUnique })) - assertion (f.droits_ouverts de Enfant { + assertion (f.droit_ouvert de Enfant { -- fin_obligation_scolaire : |01/08/2019| - -- âge: 17 + -- date_de_naissance: |01/01/2003| + -- âge: 18 -- rémuneration_mensuelle: 400€ + -- pris_en_charge_par_services_sociaux: NonPriseEnChargeFamille + -- garde_alternée: NonGardeUnique }) - assertion (non (f.droits_ouverts de Enfant { - -- fin_obligation_scolaire : |01/08/2019| + assertion (non (f.droit_ouvert de Enfant { + -- fin_obligation_scolaire : |01/08/2016| + -- date_de_naissance: |01/01/1999| -- âge: 21 -- rémuneration_mensuelle: 0€ + -- pris_en_charge_par_services_sociaux: NonPriseEnChargeFamille + -- garde_alternée: NonGardeUnique })) */ \ No newline at end of file diff --git a/src/catala/catala_surface/desugaring.ml b/src/catala/catala_surface/desugaring.ml index b7821a43..f16caf8c 100644 --- a/src/catala/catala_surface/desugaring.ml +++ b/src/catala/catala_surface/desugaring.ml @@ -515,11 +515,11 @@ let process_default (ctxt : Name_resolution.context) (scope : Scopelang.Ast.Scop | Scopelang.Ast.TArrow (t_in, _), Some param_uid -> Some (Pos.unmark param_uid, t_in) | Scopelang.Ast.TArrow _, None -> Errors.raise_spanned_error - "this definition has a function type but the parameter is missing" + "This definition has a function type but the parameter is missing" (Pos.get_position (Bindlib.unbox cons)) | _, Some _ -> Errors.raise_spanned_error - "this definition has a parameter but its type is not a function" + "This definition has a parameter but its type is not a function" (Pos.get_position (Bindlib.unbox cons)) | _ -> None); exception_to_rule; diff --git a/src/catala/scope_language/scope_to_dcalc.ml b/src/catala/scope_language/scope_to_dcalc.ml index 41a771b3..17a7cf1c 100644 --- a/src/catala/scope_language/scope_to_dcalc.ml +++ b/src/catala/scope_language/scope_to_dcalc.ml @@ -92,8 +92,8 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Pos.marked) : Dcalc.Ast.expr Po try Ast.StructFieldMap.find field_name e_fields with Not_found -> Errors.raise_spanned_error - (Format.asprintf "The field %a does not belong to the structure %a" - Ast.StructFieldName.format_t field_name Ast.StructName.format_t struct_name) + (Format.asprintf "Missing field for structure %a: \"%a\"" + Ast.StructName.format_t struct_name Ast.StructFieldName.format_t field_name) (Pos.get_position e) in let field_d = translate_expr ctx field_e in @@ -107,8 +107,8 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Pos.marked) : Dcalc.Ast.expr Po in if Ast.StructFieldMap.cardinal remaining_e_fields > 0 then Errors.raise_spanned_error - (Format.asprintf "Missing fields for structure %a: %a" Ast.StructName.format_t - struct_name + (Format.asprintf "The fields \"%a\" do not belong to the structure %a" + Ast.StructName.format_t struct_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") (fun fmt (field_name, _) -> @@ -123,7 +123,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Pos.marked) : Dcalc.Ast.expr Po try List.assoc field_name (List.mapi (fun i (x, y) -> (x, (y, i))) struct_sig) with Not_found -> Errors.raise_spanned_error - (Format.asprintf "The field %a does not belong to the structure %a" + (Format.asprintf "The field \"%a\" does not belong to the structure %a" Ast.StructFieldName.format_t field_name Ast.StructName.format_t struct_name) (Pos.get_position e) in @@ -138,7 +138,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Pos.marked) : Dcalc.Ast.expr Po try List.assoc constructor (List.mapi (fun i (x, y) -> (x, (y, i))) enum_sig) with Not_found -> Errors.raise_spanned_error - (Format.asprintf "The constructor %a does not belong to the enum %a" + (Format.asprintf "The constructor \"%a\" does not belong to the enum %a" Ast.EnumConstructor.format_t constructor Ast.EnumName.format_t enum_name) (Pos.get_position e) in