Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajoute l'aide aux jeunes diplômés et anciens boursiers #1501

Merged
merged 43 commits into from
Jun 2, 2021

Conversation

sandcha
Copy link
Contributor

@sandcha sandcha commented Mar 27, 2021

  • Évolution du système socio-fiscal.
  • Périodes concernées : à partir du 05/02/2021 et jusqu'au 30/06/2021.
  • Zones impactées :
    • model/prestations/bourses_superieur.py
    • parameters/bourses_superieur/criteres_sociaux.yaml
  • Détails :
    • Ajoute l'éligibilité et le calcul du montant de l'aide aux jeunes diplômes et anciens boursiers.
    • L'aide fait partie du dispositif "plan de relance Jeunes" faisant suite à la crise Covid-19.

Ces changements (effacez les lignes ne correspondant pas à votre cas) :

  • Modifient l'API publique d'OpenFisca France (par exemple renommage ou suppression de variables).
  • Ajoutent une fonctionnalité (par exemple ajout d'une variable).
  • Corrigent ou améliorent un calcul déjà existant.
  • Modifient des éléments non fonctionnels de ce dépôt (par exemple modification du README).

Quelques conseils à prendre en compte :

@guillett
Copy link
Member

@sandcha C'est vraiment top ces travaux ! Je vais regarder cette branche là car je voudrais l'utiliser comme pour l'ajout d'autres aides.

@sandcha sandcha changed the title Ajoute l'éligibilité à l'aide aux jeunes diplômés et anciens boursiers Ajoute l'aide aux jeunes diplômés et anciens boursiers Apr 1, 2021
@sandcha sandcha marked this pull request as ready for review April 1, 2021 20:36
Comment on lines 19 to 28
class bourse_criteres_sociaux(Variable):
value_type = float
entity = Individu
reference = [
"Circulaire ESRS2013435C - Annexe 3 - Conditions de ressources et points de charge / 1 - Conditions de ressources",
"https://www.education.gouv.fr/bo/20/Hebdo25/ESRS2013435C.htm"
]
label = "Échelon de la bourse sur critères sociaux de l'enseignement supérieur perçue (de 0 à 7)"
definition_period = MONTH
set_input = set_input_divide_by_period
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Variable issue de la PR #1484 + ajout du set_input mais des interrogations sur la meilleure façon de modéliser les périodes de réception de la bourse.

Ceci afin de répondre à contrainte d'éligibilité à l'aide disant Avoir bénéficié d'une bourse de l'enseignement supérieur attribuée sur critères sociaux au cours de la dernière année de préparation du diplôme.
Et pour être cohérent avec la durée de versement qui est en général de 10 mois mais qui peut intervenir sur une autre durée (vacances d'été, ...). 🤔

Comment on lines 100 to 104
part_bourse = where(
bourse_2021 > 0,
bourse_2021 / parameters_bourse.nombre_mensualites,
bourse_2020 / parameters_bourse.nombre_mensualites
) * parameters_bourse.aide_jeunes_diplomes_anciens_boursiers.taux_bourse
Copy link
Contributor Author

@sandcha sandcha Apr 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La page Pôle emploi dit :

QUAND / COMMENT L’AIDE SERA-T-ELLE VERSÉE ?

L’aide est versée directement par Pôle emploi, et ce durant 4 mois.
(...)

QUEL EST LE MONTANT DE L’AIDE?

L’aide financière varie en fonction du montant de votre ancienne bourse : 

* 70% du montant net de la bourse perçue la dernière année ;
* S’ajoute une somme supplémentaire de 100 € si vous ne vivez pas chez l’un de vos parents et devez-vous loger (sur justificatif : facture d'énergie, bail à votre nom).

Mais n'indique pas si le montant calculé est bien un montant mensuel que la personne percevrait 4 fois ou un montant à diviser par 4. Le parti pris ici est de considérer que l'aide venant prolonger la bourse, la baisse ne serait que de 30% et que la majoration de 100€ pour le logement surviendrait tous les mois.

Autre descriptif de l'aide un pouillème moins ambigu.

Il me semble que ce serait à vérifier avec le métier @guillett.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je suis aligné avec l'interprétation donnée ici 🙂

Comment on lines 107 to 109
condition_logement = not_(
(statut_occupation_logement == TypesStatutOccupationLogement.loge_gratuitement)
+ (statut_occupation_logement == TypesStatutOccupationLogement.non_renseigne)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Au regard de la page Pôle emploi, ce pourrait être "tout sauf loge_gratuitement" mais deux situations m'ont posé question : non_renseigne et sans_abris. Ici, on donne les 100€ aux ex boursiers sans abris.

values:
2020-07-31:
value: 10
aide_jeunes_diplomes_anciens_boursiers:
Copy link
Contributor Author

@sandcha sandcha Apr 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On aurait pu reprendre l'arborescence de la PR #1484 mais vu la longueur du nom de l'aide, il m'a semblé qu'elle n'aiderait pas au respect de la contrainte de longueur de chemin de fichiers sous windows (164 caractères en supposant un répertoire ou deux depuis le disque si je me souviens bien) d'où l'inclusion des paramètres dans ce yaml.

Copy link
Member

@guillett guillett left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je me suis permis de faire #1510 pour faire des propositions concrètes qui passent les tests.

openfisca_france/model/base.py Outdated Show resolved Hide resolved
default_value = date.max
entity = Individu
label = "Date d'obtention du diplôme de plus haut niveau"
definition_period = ETERNITY
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pourquoi ne pas mettre MONTH et permettre l'historisation des mois d'obtention des différents diplômes obtenus ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pas sûr de voir la valeur ajoutée, alors que ça a un coût computationnel.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Finalement, modifié en MONTH pour les réutilisations de cette variable (calculs en dehors de cette PR).

class formation(Variable):
value_type = bool
entity = Individu
label = "Inscrit à une formation ou en cours de formation professionnelle"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines 74 to 75
class formation(Variable):
value_type = bool
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cette variable là pourrait-être niveau_diplome_en_preparation

sandcha added a commit that referenced this pull request Apr 2, 2021
MattiSG
MattiSG previously requested changes Apr 6, 2021
Copy link
Member

@MattiSG MattiSG left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merci @sandcha ! Pas évident de mener cette revue avec #1510 en parallèle, je ne suis pas certain de comment traiter ce cas.

Au-delà des commentaires spécifiques faits ligne à ligne, je ressens le besoin de clarifier un point par rapport à l'introduction de l'ARE et l'ATI : je suis extrêmement surpris que l'ARE ne soit pas encore modélisée. Peut-être faut-il simplement raffiner chomage_brut, mais dans tous les cas il me semble impératif d'expliciter la relation de ces nouvelles variables avec toute la série de variables chomage_* déjà existantes ! 🙂

@@ -13,3 +14,100 @@ class boursier(Variable):
entity = Individu
label = "Élève ou étudiant boursier"
definition_period = MONTH


class bourse_criteres_sociaux(Variable):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En quoi cette variable diffère-t-elle de bourse_enseignement_sup ? 🤔

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ou de echelon_bourse.

Copy link
Contributor Author

@sandcha sandcha Apr 8, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La confusion avec l'échelon me semble venir d'une erreur de libellé (modification proposée ici). Nous calculerons bien un montant pour bourse_criteres_sociaux.

Et, afin de distinguer bourse_criteres_sociaux de bourse_enseignement_sup, je mets ici à jour le libellé de bourse_enseignement_sup en Toute bourse de l'enseignement supérieur puisqu'il existe des bourses du supérieur qui ne sont pas fournies par l'Etat (autres que la bourse sur critères sociaux) comme les bourses des fondations et territoires (exemple de bourse de fondation).

"Circulaire ESRS2013435C - Annexe 3 - Conditions de ressources et points de charge / 1 - Conditions de ressources",
"https://www.education.gouv.fr/bo/20/Hebdo25/ESRS2013435C.htm"
]
label = "Échelon de la bourse sur critères sociaux de l'enseignement supérieur perçue (de 0 à 7)"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si c'est un échelon de 0 à 7, pourquoi le type est-il float ? Je m'attendrais à une valeur d'Enum, ou à ce que le montant de la bourse soit donné en euros 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De même, c'est une erreur de libellé (modification proposée au même endroit). cc @guillett 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correction bien intégrée à master. Ceci devrait donc disparaître au rebase de cette PR après validation.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je préfèrerais que le rebase soit effectué avant d'approuver, car en l'état il ne me semble pas acceptable d'approuver… On a un problème de poule et d'œuf 😉

set_input = set_input_divide_by_period


class aide_jeunes_diplomes_anciens_boursiers_eligibilite(Variable):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

D'après la référence donnée, cette aide est très spécifique à la crise sanitaire du Covid-19, ce qui explique ses conditions d'années très contraintes. J'aurais donc tendance à la déclarer dans le fichier covid19.py, ou mieux encore à en faire un dossier dans lequel créer un fichier contenant cette aide aux jeunes diplômés anciens boursiers 🙂

Comment on lines 50 to 51
date_diplome = individu("date_diplome", period)
annee_validation_diplome = date_diplome.astype('datetime64[Y]')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Attention à la cohérence entre les formes de guillemets 😉

Comment on lines 100 to 104
part_bourse = where(
bourse_2021 > 0,
bourse_2021 / parameters_bourse.nombre_mensualites,
bourse_2020 / parameters_bourse.nombre_mensualites
) * parameters_bourse.aide_jeunes_diplomes_anciens_boursiers.taux_bourse
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je suis aligné avec l'interprétation donnée ici 🙂

@@ -31,3 +31,23 @@ class indemnites_chomage_partiel(Variable):
label = "Indemnités de chômage partiel"
definition_period = MONTH
set_input = set_input_divide_by_period


class are(Variable):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En quoi cette variable diffère-t-elle de chomage_brut ? 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L'ARE (l'allocation d'Aide au Retour à l'Emploi) semble être une composante du chomage_brut.

Voici quelques éléments ayant mené à cette conclusion :

  • Montant brut ?
    Le montant de l'ARE est bien un montant brut si on se réfère à sa valeur journalière indiquée comme montant brut par service-public qu'il s'agisse du cas d'un salarié du privé ou d'un agent public.

  • ARE composante du chomage_brut ?
    On en a déjà parlé sur openfisca-france : c'est du moins ce qui est envisagé par ce commentaire de @benjello sur la PR qui supprimait la variable inutilisée allocation_aide_retour_emploi 👻 .

➡️ Reste à identifier la formule qui rattache l'are au chomage_brut :

Je propose dans un premier temps de les définir comme égales (formula de chomage_brut qui renvoie la valeur d'are). Est-ce que cela vous semblerait acceptable @MattiSG @benjello ?
L'autre option me semblerait d'y joindre l'ASS. 🤔

Pourquoi ? :

  • Si l'ARE n'est qu'une composante du chômage brut, quelles sont les autres composantes ?
    L'ARE est la principale allocation chômage au regard de cette page de pôle emploi.
    Néanmoins, si l'on définit le chomage_brut comme la somme des revenus de remplacement pour les demandeurs d'emploi, alors selon les dispositions générales décrites par l'article L5421-2 du code du travail il en existe de plusieurs sortes que l'on retrouve dans les chapitres dédiés aux indemnisations : allocation d'assurance (ARE seule ?), allocations de solidarité (ASS, allocation équivalent retraite) et allocations des régimes particuliers.

  • Salarié du privé et agent public :
    Si l'on sait que l'ARE concerne les deux catégories de demandeurs d'emploi, il faudrait une analyse plus fine pour déterminer ce qu'il en est des autres types d'allocations / revenus de remplacement. Et c'est une source de complexité pour la modélisation de la formule du chomage_brut qui me semble dépasser le périmètre de cette PR.


Mémos divers :

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De ma compréhension de la description de l'aide, l'ARE, l'ASS et l'ATI ne semblent être données qu'à titre d'exemple de revenu de remplacement.

Ne pas percevoir un revenu de remplacement au moment de la demande, qu’il s’agisse de l’allocation d’aide au retour à l’emploi (ARE) de l’allocation de solidarité spécifique (ASS) ou de l’allocation des travailleurs indépendants (ATI) ;

J'ai donc l'impression qu'il n'est pas nécessaire créer une nouvelle variable are mais de reprendre les variables existantes notamment chomage_brut. En effet, on ne s'intéresse qu'au fait que ces variables soient nulles, si elles sont décomptées deux fois ce n'est pas trop grave.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(message écrit et envoyé hier à 7h41 mais apparemment pas parti… 🙁 )

Merci infiniment @sandcha pour cette analyse détaillée !

Je suis aligné avec l’idée que chomage_brut renvoie allocation_retour_emploi. Je me suis posé la question dans #1513 de si chomage_brut (ou chomage_net…) ne devrait pas également comprendre indemnites_chomage_partiel.
Je suis également aligné avec l’idée que l’on définisse « chomage_brut comme la somme des revenus de remplacement pour les demandeurs d’emploi » 👍

Pour compléter l’analyse, je comprends que l’ASS est un minima social spécifique distribué par Pôle Emploi, et non une forme de compensation assurantielle. Je ne l’incluerais donc pas dans chomage_brut.

De mon point de vue, il reste donc à éclaircir (mais pas pour cette PR !) :

  1. L’AREF devrait-elle être incluse dans chomage_brut ? C’est-à-dire, constitue-t-elle un revenu de remplacement pour les demandeurs d’emploi ?
  2. Faudrait-il inclure ATA et AER dans une formule historique de chomage_brut ?

Et à implémenter :

  1. Création de allocation_retour_emploi comme variable d’entrée pure.
  2. `chomage_brut

@sandcha
Copy link
Contributor Author

sandcha commented Apr 15, 2021

@MattiSG @guillett Merci pour vos retours !
Cette branche intègre désormais les propositions de la revue de cette PR ainsi que le cherry-pick des deux commits de la #1510. L'idée étant maintenant d'avoir ici une vue consolidée de l'aide aux jeunes diplômés et anciens boursiers.

Comment on lines 26 to 30
return where(
bourse_2021 > 0,
bourse_2021 / parameters_bourse.nombre_mensualites,
bourse_2020 / parameters_bourse.nombre_mensualites
)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comme évoqué en réunion, une valeur médiane semblerait plus proche de la réalité ici mais cela n'a pas été fait parce que sa modélisation m'a aussi semblée complexe/laborieuse.

sandcha added a commit that referenced this pull request Apr 15, 2021
sandcha added a commit that referenced this pull request Apr 16, 2021
Copy link
Member

@MattiSG MattiSG left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je me sens bloqué dans l'approbation par un problème qui est annoncé comme a priori résolu par un rebase. Merci de me re-demander comme reviewer lorsque le rebase aura été fait 🙂

possible_values = TypesNiveauDiplome # defined in model/base.py
entity = Individu
label = "Plus haut niveau de diplôme obtenu"
definition_period = MONTH
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
definition_period = MONTH
definition_period = YEAR

default_value = date.max
entity = Individu
label = "Date d'obtention du diplôme de plus haut niveau"
definition_period = MONTH
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
definition_period = MONTH
definition_period = YEAR

possible_values = TypesNiveauDiplome # defined in model/base.py
entity = Individu
label = "Niveau du diplôme en cours de préparation"
definition_period = MONTH
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
definition_period = MONTH
definition_period = YEAR

"Circulaire ESRS2013435C - Annexe 3 - Conditions de ressources et points de charge / 1 - Conditions de ressources",
"https://www.education.gouv.fr/bo/20/Hebdo25/ESRS2013435C.htm"
]
label = "Échelon de la bourse sur critères sociaux de l'enseignement supérieur perçue (de 0 à 7)"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je préfèrerais que le rebase soit effectué avant d'approuver, car en l'état il ne me semble pas acceptable d'approuver… On a un problème de poule et d'œuf 😉

definition_period = MONTH
set_input = set_input_divide_by_period
calculate_output = calculate_output_add

def formula(individu, period):
return individu("allocation_retour_emploi", period)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce que indemnites_chomage_partiel ne devrait pas être inclus ici aussi ? 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bien vu ! Ajouté.

Ceci avec l'idée que les indemnités de chômage partiel sont des revenus de remplacement sur lesquels, comme pour l'ARE, il n'y a pas de cotisation mais bien un prélèvement de CSG et CRDS (src : urssaf.fr).

Copy link
Contributor Author

@sandcha sandcha May 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cela s'avère plus compliqué qu'imaginé. Le test suivant échoue suite à cette modification :

/.../openfisca-france/tests/formulas/cs/cmu_fiab.yaml:
  Test 'CMU-C: N°3 accord CMU-C':
    cmu_base_ressources@2018-05: [19948.] differs from 19323.0 with an absolute margin [625.] > 0.05

Par conséquent, comme cela est à la frontière du périmètre de l'aide traitée ici, je propose de reverter la modification et d'analyser la question dans une autre PR. 🤔

@MattiSG MattiSG dismissed their stale review April 26, 2021 15:53

Le problème bloquant est annoncé comme a priori résolu par un futur rebase

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants