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 le calcul de l'éligibilité et du montant de la caution Visale pour les moins de 30 ans #1513

Merged
merged 25 commits into from
Apr 6, 2021

Conversation

MattiSG
Copy link
Member

@MattiSG MattiSG commented Apr 4, 2021

  • Évolution du système socio-fiscal.
  • Périodes concernées : à partir du 25/03/2020.
  • Zones impactées :
    • model/caracteristiques_socio_demographiques/logement.py
    • model/prestations/anah/eligibilite_anah.py
    • model/prestations/logement_social.py
    • model/prestations/visale.py
    • parameters/geopolitique/departements_idf.yaml
    • parameters/prestations/visale/*
  • Détails :
    • Ajoute le calcul de l'éligibilité et du montant de la caution Visale pour les moins de 30 ans.
    • Extrait la liste des départements de la région Île-de-France dans un paramètre.
    • Ajoute la variable residence_idf qui indique si un ménage réside dans un logement situé en région Île-de-France ou non.

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

  • Ajoutent une fonctionnalité (par exemple ajout d'une variable).

Aspects non traités et prévus pour être hors scope

  • Étudiant‧e‧s hors UE sans visa long séjour (https://www.campusfrance.org/fr/visa-long-sejour-etudiant ) : vu qu'il s'agit d'une aide au logement, on suppose que le visa long séjour (4 mois à 1 an) est acquis, et on ignore donc les cas où un étudiant hors UE vient pour une durée de moins de 4 mois sans visa (ex : étudiante néo-zélandaise en visa touristique de 90 jours, l'éligibilité à Visale sera indiquée à tort comme positive).
  • Cas où le demandeur n'est pas étudiant mais la deuxième personne avec qui il souhaite emménager en colocation l'est et où la somme de leurs ressources est inférieure au double du plafond étudiant (soit 1200€ hors IdF et 1600€ en IdF) : ce cas n'est pas défini dans la documentation. L'éligibilité aux bénéfices spécifiques aux étudiant‧e‧s n'est déterminée que pour la « personne de référence » du ménage.
  • Ressources non prises en compte à ce jour car non modélisées dans OpenFisca : mobili-jeune (seule l'éligibilité a été ajoutée dans Ajoute l'éligibilité à l'aide mobili-jeune #1492), prime transitoire de solidarité (PTS), allocation journalière de présence parentale (AJPP).
  • Éligibilité à Visale pour les personnes de plus de 30 ans. Il me semble néanmoins toujours pertinent d'appeler la variable visale plutôt que visale_jeune, par exemple, car il s'agit d'un seul et même dispositif, et qu'il me semble préférable que l'API reste stable quitte à compléter le calcul ultérieurement.

Aspects non traités et dont l'ajout est prévu avant la finalisation de cette PR

  • Prise en compte des ressources du foyer fiscal.
  • Prise en compte des ressources de la famille.
  • Cas où le ménage contient plus de 2 personnes. Dans ce cas, seules les ressources de la personne de référence ne devraient être prises en compte (mais pour une quote-part du loyer, ce qui n'est pas évident à décider : doit-on considérer que loyer est celui du ménage en colocation, ou est-ce que la situation décrit déjà le montant du loyer qui revient à la personne de référence ? A priori, je prévois de considérer que le loyer indiqué serait celui payé par la personne de référence et non par le ménage si le ménage contient plus de 2 personnes, car ce comportement me semble le plus courant pour une colocation).
  • Les dates de début sont probablement fausses (mars 2020 alors que le dispositif existe depuis 2016).

Type de feedback attendu par l'ouverture d'une PR draft

  • Arbitrages détaillés ci-dessus.
  • Choix d'implémentation en deux variables visale_eligibilite et visale_montant_max, qui n'est peut-être pas le plus simple pour la réutilisation.
  • Pertinence de la factorisation de residence_idf.
  • Pertinence de la création du paramètre visale.residence_hors_eee plutôt que de coder cela dans les formules.
  • Pertinence du forçage de la garantie jeunes à 0 dans les tests.
  • Compréhensibilité du calcul.

@MattiSG MattiSG requested a review from guillett April 4, 2021 20:56
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.

Merci @MattiSG ! 📈

Je trouverais ça bien d'ajouter une variable qui indique le montant de la caution Visale après prise en compte de l'éligibilité mais son absence n'est pas bloquante pour moi.

Comment on lines +13 to +30
age = menage.personne_de_reference('age', period)
majeur = menage.personne_de_reference('majeur', period)

eligibilite_age = majeur * (age <= parameters(period).prestations.visale.eligibilite.age_max)

etudiant = menage.personne_de_reference('etudiant', period)
ressortissant_eee = menage.personne_de_reference('ressortissant_eee', period)
nationalite = menage.personne_de_reference('nationalite', period)
ressortissant_pays_eligible = sum([nationalite == str.encode(etat) for etat in parameters(period).prestations.visale.eligibilite.residence_hors_eee]) # TOOPTIMIZE: string encoding into bytes array should be done at load time

eligibilite_nationalite = ressortissant_eee + ressortissant_pays_eligible + etudiant # Sont éligibles les « étudiant‧e‧s hors Union Européenne justifiant d’un visa long séjour valant titre de séjour mention étudiant ou passeport talent en cours de validité, ou d’un titre de séjour mention étudiant en cours de validité ». Vu qu'il s'agit d'une aide au logement, on suppose que le visa long séjour (4 mois à 1 an) est acquis, et on ignore donc les cas où un étudiant hors UE vient pour une durée de moins de 4 mois sans visa (ex : étudiante néo-zélandaise en visa touristique de 90 jours, l'éligibilité à Visale sera indiquée à tort comme positive).
Copy link
Member

Choose a reason for hiding this comment

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

J'aurais tendance à extraire la logique d'éligibilité d'un individu dans une variable dédiée pour séparer les logiques et limiter la complexité dans une seule variable.

Copy link
Member Author

Choose a reason for hiding this comment

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

Je crois que c'est un refactor qui a du sens d'un point de vue d'ingénierie logicielle mais pas d'un point de vue du modèle de la loi. À défaut d'une valeur de réutilisation (par exemple indiquer « vous seriez éligible si vous limitiez votre loyer à X€ ou si vous augmentiez vos ressources à 2X€ »), je ne suis pas certain de la pertinence de complexifier le modèle en ajoutant une variable.

Copy link
Member

Choose a reason for hiding this comment

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

J'ai apporté des éléments de réponse dans #1507 (comment) et j'ai l'impression que c'est un schéma déjà utilisé (et utile), rsa_base_ressources_individu pour n'en citer qu'un.

De nos échanges, j'ai l'impression qu'il y a un équilibre à trouver (ou pas).

Copy link
Member Author

Choose a reason for hiding this comment

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

Sur les bases ressources, je suis d'accord, c'est d'ailleurs ce que j'ai fait pour cette implémentation précisément 🙂
En revanche je ne suis pas très convaincu par la séparation des différentes formes d'éligibilité, car je crois qu'elles rendent l'usage plus confus tout en n'ayant pas de valeur de réutilisabilité.

Copy link
Member Author

Choose a reason for hiding this comment

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

Et oui, je pense que ça serait top d'avoir une discussion posée à ce sujet ! C'est un élément récurrent de discussions que j'ai eues sur plusieurs années, et j'ai abouti à des conclusions qui ne sont peut-être pas très explicitées 🙂

Comment on lines 34 to 42
'''
Attention, un montant non nul pour cette variable ne signifie pas que l'entité est éligible à Visale : d'autres conditions peuvent ne pas être remplies. Pour déterminer l'éligibilité à la caution Visale au loyer actuellement renseigné pour le ménage, il faut utiliser la variable `visale_eligibilite`.
'''


class visale_montant_max(Variable):
value_type = float
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
'''
Attention, un montant non nul pour cette variable ne signifie pas que l'entité est éligible à Visale : d'autres conditions peuvent ne pas être remplies. Pour déterminer l'éligibilité à la caution Visale au loyer actuellement renseigné pour le ménage, il faut utiliser la variable `visale_eligibilite`.
'''
class visale_montant_max(Variable):
value_type = float
class visale_montant_max(Variable):
'''
Attention, un montant non nul pour cette variable ne signifie pas que l'entité est éligible à Visale : d'autres conditions peuvent ne pas être remplies. Pour déterminer l'éligibilité à la caution Visale au loyer actuellement renseigné pour le ménage, il faut utiliser la variable `visale_eligibilite`.
'''
value_type = float

Copy link
Member Author

Choose a reason for hiding this comment

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

Je suis d'accord que ça devrait être au niveau de la Variable, néanmoins en observant plus en détails la manière dont le rendu est fait côté Legislation Explorer, j'ai fait le choix de mettre la docstring dans la formule elle-même dans 0ef22b5, car je crains que sinon cette documentation n'apparaisse pas 🙂


class visale_montant_max(Variable):
value_type = float
entity = Menage # « Si vous êtes 2 à rechercher un logement et un garant, votre demande Visale doit être réalisée conjointement. Pour les logements en colocation, au-delà de 2 colocataires, un bail et un visa individuels doivent être faits par colocataire. »
Copy link
Member

Choose a reason for hiding this comment

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

un bail et un visa

À quoi visa fais-tu référence ? Est une demande Visale ? Si oui, ce n'était pas clair pour moi.

Copy link
Member Author

Choose a reason for hiding this comment

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

Comme les guillemets l'indiquent, c'est une citation directe des conditions Visale. J'ai retiré cette citation et amélioré (je l'espère) la documentation dans 0ef22b5.

@@ -0,0 +1,168 @@
from openfisca_france.model.base import *
Copy link
Member

Choose a reason for hiding this comment

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

J'ai une préférence pour l'explicitation des éléments importés. Y-a-t-il une raison (non historique) pour importer * ?

Copy link
Member Author

Choose a reason for hiding this comment

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

Non, que de la cohérence avec l'historique ; et, je dois bien l'avouer, l'incertitude sur la valeur ajoutée dans le contexte d'un DSL à restreindre les éléments importés.

Copy link
Member Author

Choose a reason for hiding this comment

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

En l'occurrence il faudrait from openfisca_france.model.base import Individu, Menage, FoyerFiscal, Famille, Variable, MONTH, DIVIDE, where, max_, min_. Je trouve ça fastidieux, ça m'a pris quelques itérations avant d'avoir la liste complète, et je crois que ça ne sera pas maintenu. En l'absence de règle de lint dédiée et de documentation à ce sujet, je pense laisser *. Je suis preneur d'un retour pour comprendre la valeur ajoutée de spécifier les imports 🙂 Je connais les raisons de génie logiciel en général (déterminer les parties d'une API dont on dépend réellement et éviter les conflits de nommages notamment), mais elles ne me semblent pas applicables dans le cas d'une DSL, au contraire.

Comment on lines 67 to 76
'''
La documentation Visale indique : « Si vous êtes 2 à rechercher un logement et un garant, votre demande Visale doit être réalisée conjointement. Pour les logements en colocation, au-delà de 2 colocataires, un bail et un visa individuels doivent être faits par colocataire. »
Cette modélisation est impossible à réaliser telle quelle dans OpenFisca, car cela correspondrait à une variable de Ménage pour 1 à 2 personnes, et une variable d'Individu à partir de 3 personnes en colocation, mais pour lesquelles le montant du loyer serait différent (ou en tous cas, serait la quote-part du loyer total du logement loué).
Par conséquent, le calcul de cette variable fait l'hypothèse d'une déclaration des Ménages avec un Ménage par personne inscrite sur le bail pour 3 personnes ou plus, et avec un seul Ménage pour une colocation (ou un bail solidaire) de 2 personnes.
'''


class visale_base_ressources(Variable):
value_type = float
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
'''
La documentation Visale indique : « Si vous êtes 2 à rechercher un logement et un garant, votre demande Visale doit être réalisée conjointement. Pour les logements en colocation, au-delà de 2 colocataires, un bail et un visa individuels doivent être faits par colocataire. »
Cette modélisation est impossible à réaliser telle quelle dans OpenFisca, car cela correspondrait à une variable de Ménage pour 1 à 2 personnes, et une variable d'Individu à partir de 3 personnes en colocation, mais pour lesquelles le montant du loyer serait différent (ou en tous cas, serait la quote-part du loyer total du logement loué).
Par conséquent, le calcul de cette variable fait l'hypothèse d'une déclaration des Ménages avec un Ménage par personne inscrite sur le bail pour 3 personnes ou plus, et avec un seul Ménage pour une colocation (ou un bail solidaire) de 2 personnes.
'''
class visale_base_ressources(Variable):
value_type = float
class visale_base_ressources(Variable):
'''
La documentation Visale indique : « Si vous êtes 2 à rechercher un logement et un garant, votre demande Visale doit être réalisée conjointement. Pour les logements en colocation, au-delà de 2 colocataires, un bail et un visa individuels doivent être faits par colocataire. »
Cette modélisation est impossible à réaliser telle quelle dans OpenFisca, car cela correspondrait à une variable de Ménage pour 1 à 2 personnes, et une variable d'Individu à partir de 3 personnes en colocation, mais pour lesquelles le montant du loyer serait différent (ou en tous cas, serait la quote-part du loyer total du logement loué).
Par conséquent, le calcul de cette variable fait l'hypothèse d'une déclaration des Ménages avec un Ménage par personne inscrite sur le bail pour 3 personnes ou plus, et avec un seul Ménage pour une colocation (ou un bail solidaire) de 2 personnes.
'''
value_type = float

Copy link
Member Author

Choose a reason for hiding this comment

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

Déplacé dans 0ef22b5 avec les mêmes remarques que plus haut.

Prend en compte le décalage d'un mois dans les justificatifs demandés
Force la garantie jeunes à 0 pour simplifier les tests
Supprime la duplication dans l'ANAH et le logement social
Create variable residence_idf
Create parameter geopolitique.departements_idf
Create parameter prestations.visale.quote_part_aides_logement
Ajoute l'historique du plafond de loyer pour les étudiant·e·s
@MattiSG MattiSG marked this pull request as ready for review April 6, 2021 14:55
@MattiSG
Copy link
Member Author

MattiSG commented Apr 6, 2021

montant de la caution Visale après prise en compte de l'éligibilité

Je ne suis pas certain de comprendre ce que ça pourrait représenter. Pour rappel, la caution Visale est un dispositif qui garantit le paiement des loyers (charges comprises) impayés jusqu'à 36 mensualités, directement au propriétaire du bien. Si les locataires sont éligibles, Action Logement se porte garant pour eux. Il n'y a aucun montant spécifique adossé à cette caution, si ce n'est le montant maximal total du défaut pris en charge par Action Logement, mais dont la limite est fixée dès l'éligibilité en fonction des ressources et de la durée du bail. Ce dispositif ne module en rien le prix du loyer, et n'est activable que dans des plafonds de ressources.

@MattiSG MattiSG merged commit 469941e into master Apr 6, 2021
@MattiSG MattiSG deleted the visale branch April 6, 2021 15:32
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