<commit_before># -*- coding: utf-8 -*-

from __future__ import division

import csv
import codecs
import json
import logging
import pkg_resources
import sys

from numpy import ceil, datetime64, fromiter, int16, logical_or as or_, logical_and as and_, logical_not as not_

import openfisca_france
from openfisca_core.periods import Instant

from openfisca_france.model.base import *
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf


log = logging.getLogger(__name__)


class aide_logement(Variable):
    value_type = float
    entity = Famille
    label = u"Aide au logement (tout type)"
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        apl = famille('apl', period)
        als = famille('als', period)
        alf = famille('alf', period)

        return max_(max_(apl, als), alf)


class apl(Variable):
    documentation = "Réservée aux logements conventionnés, surtout des HLM, et financée par le fonds national de l'habitation."
    calculate_output = calculate_output_add
    value_type = float
    entity = Famille
    label = u"Aide personnalisée au logement"
    reference = u"http://vosdroits.service-public.fr/particuliers/F12006.xhtml",
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        aide_logement_montant = famille('aide_logement_montant', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)

        return aide_logement_montant * logement_conventionne


class als(Variable):
    calculate_output = calculate_output_add
    value_type = float
    entity = Famille
    label = u"Allocation logement sociale"
    reference = u"http://vosdroits.service-public.fr/particuliers/F1280.xhtml"
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        aide_logement_montant = famille('aide_logement_montant', period)
        al_nb_pac = famille('al_nb_personnes_a_charge', period)
        proprietaire_proche_famille = famille('proprietaire_proche_famille', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)

        return (al_nb_pac == 0) * not_(logement_conventionne) * not_(proprietaire_proche_famille) * aide_logement_montant


class alf(Variable):
    calculate_output = calculate_output_add
    value_type = float
    entity = Famille
    label = u"Allocation logement familiale"
    reference = u"http://vosdroits.service-public.fr/particuliers/F13132.xhtml"
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        aide_logement_montant = famille('aide_logement_montant', period)
        al_nb_pac = famille('al_nb_personnes_a_charge', period)
        proprietaire_proche_famille = famille('proprietaire_proche_famille', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)

        return (al_nb_pac >= 1) * not_(logement_conventionne) * not_(proprietaire_proche_famille) * aide_logement_montant


class aide_logement_montant(Variable):
    value_type = float
    entity = Famille
    label = u"Montant des aides au logement net de CRDS"
    definition_period = MONTH

    def formula(famille, period):
        aide_logement_montant_brut = famille('aide_logement_montant_brut_crds', period)
        crds_logement = famille('crds_logement', period)
        montant = round_(aide_logement_montant_brut + crds_logement, 2)

        return montant


class aide_logement_montant_brut_crds(Variable):
    value_type = float
    entity = Famille
    label = u"Montant des aides au logement brut de CRDS"
    reference = u"https://www.legifrance.gouv.fr/eli/decret/2018/2/27/2018-136/jo/article_1"
    definition_period = MONTH

    def formula_2018(famille, period, parameters):
        rls = parameters(period).prestations.reduction_loyer_solidarite
        aide_logement_montant_brut = famille('aide_logement_montant_brut', period)
        reduction_loyer_solidarite = famille('reduction_loyer_solidarite', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)
        statut_occupation_logement = famille.demandeur.menage('statut_occupation_logement', period)

        taux_rls = rls.fraction_baisse_aide_logement
        condition_rls = logement_conventionne * (statut_occupation_logement != TypesStatutOccupationLogement.locataire_foyer)
        rls_apl = reduction_loyer_solidarite * taux_rls * condition_rls
        montant = max_(0, (aide_logement_montant_brut - rls_apl))
        return montant

    def formula(famille, period, parameters):
        return famille('aide_logement_montant_brut', period)


class aide_logement_montant_brut(Variable):
    value_type = float
    entity = Famille
    label = u"Montant des aides au logement après degressivité et abattement forfaitaire, avant CRDS"
    reference = u"https://www.legifrance.gouv.fr/eli/decret/2017/9/28/TERL1721632D/jo/texte"
    definition_period = MONTH

    def formula_2016_07_01(famille, period, parameters):
        montant_avant_degressivite = famille('aide_logement_montant_brut_avant_degressivite', period)
        loyer_reel = famille('aide_logement_loyer_reel', period)

        zone_apl = famille.demandeur.menage('zone_apl', period)
        loyer_plafond = famille('aide_logement_loyer_plafond', period)
        chambre = famille.demandeur.menage('logement_chambre', period)
        coloc = famille.demandeur.menage('coloc', period)

        coefficients = parameters(period).prestations.aides_logement.loyers_plafond.par_zone[zone_apl]
        minoration_coloc = 0.25 * coloc
        minoration_chambre = 0.1 * chambre
        modulation = minoration_coloc + minoration_chambre
        loyer_degressivite = round_(loyer_plafond * (coefficients.degressivite + modulation), 2)<commit_msg>Supprime la condition d'éligibilité à la RLS dans le calcul des aides au logement (redondant)<commit_after># -*- coding: utf-8 -*-

from __future__ import division

import csv
import codecs
import json
import logging
import pkg_resources
import sys

from numpy import ceil, datetime64, fromiter, int16, logical_or as or_, logical_and as and_, logical_not as not_

import openfisca_france
from openfisca_core.periods import Instant

from openfisca_france.model.base import *
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf


log = logging.getLogger(__name__)


class aide_logement(Variable):
    value_type = float
    entity = Famille
    label = u"Aide au logement (tout type)"
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        apl = famille('apl', period)
        als = famille('als', period)
        alf = famille('alf', period)

        return max_(max_(apl, als), alf)


class apl(Variable):
    documentation = "Réservée aux logements conventionnés, surtout des HLM, et financée par le fonds national de l'habitation."
    calculate_output = calculate_output_add
    value_type = float
    entity = Famille
    label = u"Aide personnalisée au logement"
    reference = u"http://vosdroits.service-public.fr/particuliers/F12006.xhtml",
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        aide_logement_montant = famille('aide_logement_montant', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)

        return aide_logement_montant * logement_conventionne


class als(Variable):
    calculate_output = calculate_output_add
    value_type = float
    entity = Famille
    label = u"Allocation logement sociale"
    reference = u"http://vosdroits.service-public.fr/particuliers/F1280.xhtml"
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        aide_logement_montant = famille('aide_logement_montant', period)
        al_nb_pac = famille('al_nb_personnes_a_charge', period)
        proprietaire_proche_famille = famille('proprietaire_proche_famille', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)

        return (al_nb_pac == 0) * not_(logement_conventionne) * not_(proprietaire_proche_famille) * aide_logement_montant


class alf(Variable):
    calculate_output = calculate_output_add
    value_type = float
    entity = Famille
    label = u"Allocation logement familiale"
    reference = u"http://vosdroits.service-public.fr/particuliers/F13132.xhtml"
    definition_period = MONTH
    set_input = set_input_divide_by_period

    def formula(famille, period):
        aide_logement_montant = famille('aide_logement_montant', period)
        al_nb_pac = famille('al_nb_personnes_a_charge', period)
        proprietaire_proche_famille = famille('proprietaire_proche_famille', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)

        return (al_nb_pac >= 1) * not_(logement_conventionne) * not_(proprietaire_proche_famille) * aide_logement_montant


class aide_logement_montant(Variable):
    value_type = float
    entity = Famille
    label = u"Montant des aides au logement net de CRDS"
    definition_period = MONTH

    def formula(famille, period):
        aide_logement_montant_brut = famille('aide_logement_montant_brut_crds', period)
        crds_logement = famille('crds_logement', period)
        montant = round_(aide_logement_montant_brut + crds_logement, 2)

        return montant


class aide_logement_montant_brut_crds(Variable):
    value_type = float
    entity = Famille
    label = u"Montant des aides au logement brut de CRDS"
    reference = u"https://www.legifrance.gouv.fr/eli/decret/2018/2/27/2018-136/jo/article_1"
    definition_period = MONTH

    def formula_2018(famille, period, parameters):
        rls = parameters(period).prestations.reduction_loyer_solidarite
        aide_logement_montant_brut = famille('aide_logement_montant_brut', period)
        reduction_loyer_solidarite = famille('reduction_loyer_solidarite', period)
        logement_conventionne = famille.demandeur.menage('logement_conventionne', period)
        statut_occupation_logement = famille.demandeur.menage('statut_occupation_logement', period)

        taux_rls = rls.fraction_baisse_aide_logement
        rls_apl = reduction_loyer_solidarite * taux_rls

        return max_(0, (aide_logement_montant_brut - rls_apl))

    def formula(famille, period, parameters):
        return famille('aide_logement_montant_brut', period)


class aide_logement_montant_brut(Variable):
    value_type = float
    entity = Famille
    label = u"Montant des aides au logement après degressivité et abattement forfaitaire, avant CRDS"
    reference = u"https://www.legifrance.gouv.fr/eli/decret/2017/9/28/TERL1721632D/jo/texte"
    definition_period = MONTH

    def formula_2016_07_01(famille, period, parameters):
        montant_avant_degressivite = famille('aide_logement_montant_brut_avant_degressivite', period)
        loyer_reel = famille('aide_logement_loyer_reel', period)

        zone_apl = famille.demandeur.menage('zone_apl', period)
        loyer_plafond = famille('aide_logement_loyer_plafond', period)
        chambre = famille.demandeur.menage('logement_chambre', period)
        coloc = famille.demandeur.menage('coloc', period)

        coefficients = parameters(period).prestations.aides_logement.loyers_plafond.par_zone[zone_apl]
        minoration_coloc = 0.25 * coloc
        minoration_chambre = 0.1 * chambre
        modulation = minoration_coloc + minoration_chambre
        loyer_degressivite = round_(loyer_plafond * (coefficients.degressivite + modulation), 2)
{'fraction_non_alphanumeric': 0.07929664384140671, 'fraction_numerical': 0.01183531997632936, 'mean_word_length': 4.264797507788162, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 4, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '410781', 'n_tokens_mistral': 4100, 'n_tokens_neox': 3971, 'n_words': 726}