def formula_2020_01(individu, period, parameters):
        age = individu('age', period)
        inapte_travail = individu('inapte_travail', period)
        ressortissant_eee = individu('ressortissant_eee', period)
        repas_foyer_parameters = parameters(
            period).departements.eure_et_loir.repas_foyer

        condition_residence = individu.menage(
            'eure_et_loir_eligibilite_residence', period)
        condition_age = (
            (age >=
             repas_foyer_parameters.age_minimal_personne_agee_apte_travail) +
            ((age >= repas_foyer_parameters.
              age_minimal_personne_agee_inapte_travail) * inapte_travail))
        condition_nationalite = ressortissant_eee + individu(
            'titre_sejour', period) + individu('refugie', period) + individu(
                'apatride', period)
        condition_ressources = individu('asi_aspa_base_ressources_individu',
                                        period) <= individu.famille(
                                            'aspa', period)

        condition_apa = individu('apa_domicile', period.last_month) <= 0
        condition_aides_actp = not_(individu('beneficiaire_actp', period))
        condition_aides_mtp = not_(individu('mtp', period))
        condition_aide_menagere_caisse_retraite = not_(
            individu('aide_menagere_fournie_caisse_retraite', period))
        conditions_non_cumul = condition_apa * condition_aide_menagere_caisse_retraite * condition_aides_actp * condition_aides_mtp

        return (condition_residence * condition_age * condition_nationalite *
                condition_ressources * conditions_non_cumul)
    def formula_2020_01(individu, period, parameters):
        age = individu('age', period)
        inapte_travail = individu('inapte_travail', period)
        ressortissant_eee = individu('ressortissant_eee', period)
        gir = individu('gir', period)
        possede_actp = individu('beneficiaire_actp', period)
        possede_mtp = individu('mtp', period)

        parameters_chemin = parameters(
            period).departements.eure_et_loir.aide_menagere

        condition_residence = individu.menage(
            'eure_et_loir_eligibilite_residence', period)
        condition_age = (
            (age >= parameters_chemin.age_minimal_personne_agee_apte_travail) +
            ((age >= parameters_chemin.age_minimal_personne_agee_inapte_travail
              ) * inapte_travail))
        condition_nationalite = ressortissant_eee + individu(
            'refugie', period) + individu('apatride', period)

        # condition non intégrée : Les personnes de nationalité étrangère doivent justifier d'une résidence
        # en France métropolitaine ininterrompue depuis au moins 15 ans, et ce avant l'âge de 70 ans.
        condition_gir = ((gir == TypesGir.gir_5) + (gir == TypesGir.gir_6))
        condition_ressources = individu('asi_aspa_base_ressources_individu',
                                        period) <= individu.famille(
                                            'aspa', period)

        condition_apa = individu('apa_domicile', period.last_month) <= 0
        condition_aides_actp = not_(possede_actp)
        condition_aides_mtp = not_(possede_mtp)
        condition_aide_menagere_caisse_retraite = not_(
            individu('aide_menagere_fournie_caisse_retraite', period))
        conditions_aides = condition_apa * condition_aide_menagere_caisse_retraite * condition_aides_actp * condition_aides_mtp

        return condition_residence * condition_age * condition_nationalite * condition_gir * condition_ressources * conditions_aides
Beispiel #3
0
    def formula_2020_01(individu, period):
        condition_residence = individu.menage(
            'eure_et_loir_eligibilite_residence', period)
        condition_nationalite = individu(
            'ressortissant_eee',
            period) + individu('titre_sejour', period) + individu(
                'refugie', period) + individu('apatride', period)
        condition_handicap = individu('handicap', period)
        condition_aides_aeeh = not_(
            individu.famille('beneficiaire_complement_aeeh', period))
        condition_aides_apa = not_(individu('apa_domicile', period) > 0)
        conditions_aides_actp_acfp = not_(individu(
            'beneficiaire_actp', period)) * not_(
                individu('beneficiaire_acfp', period))

        return condition_residence * condition_nationalite * condition_handicap * condition_aides_aeeh * condition_aides_apa * conditions_aides_actp_acfp
    def formula_2020_03(famille, period, parameters):
        montants = parameters(period).covid19.aide_exceptionnelle_famille
        rsa = famille('rsa', period) > 0
        ass = famille.sum(famille.members('ass', period)) > 0
        al = famille('aide_logement', period) > 0
        af_nbenf = famille('af_nbenf', period)

        base = rsa + ass

        return base * (montants.base + montants.par_enfant * af_nbenf
                       ) + not_(base) * al * af_nbenf * montants.par_enfant
Beispiel #5
0
    def formula(individu, period, parameters):
        rfr = individu.foyer_fiscal('rfr', period.n_2)
        plafond = individu('livret_epargne_populaire_plafond', period)
        independent = not_(individu('enfant_a_charge', period.this_year))

        return independent * (rfr <= plafond)
        def formula(foyer_fiscal, period, parameters):
            """
            Nombre de parts du foyer fiscal

            note 1 enfants et résidence alternée (formulaire 2041 GV page 10)

            quotient_familial.conj : nb part associées au conjoint d'un couple marié ou pacsé
            quotient_familial.enf1 : nb part 2 premiers enfants
            quotient_familial.enf2 : nb part enfants de rang 3 ou plus
            quotient_familial.inv1 : nb part supp enfants invalides (I, G)
            quotient_familial.inv2 : nb part supp adultes invalides (R)
            quotient_familial.not31 : nb part supp note 3 : cases W ou G pour veuf, celib ou div
            quotient_familial.not32 : nb part supp note 3 : personne seule ayant élevé des enfants
            quotient_familial.not41 : nb part supp adultes invalides (vous et/ou conjoint) note 4
            quotient_familial.not42 : nb part supp adultes anciens combattants (vous et/ou conjoint) note 4
            quotient_familial.not6 : nb part supp note 6
            quotient_familial.isol : demi-part parent isolé (T)
            quotient_familial.edcd : enfant issu du mariage avec conjoint décédé;
            """
            nb_pac = foyer_fiscal("nb_pac", period)
            maries_ou_pacses = foyer_fiscal("maries_ou_pacses", period)
            celibataire_ou_divorce = foyer_fiscal("celibataire_ou_divorce",
                                                  period)
            veuf = foyer_fiscal("veuf", period)
            jeune_veuf = foyer_fiscal("jeune_veuf", period)
            # nbF = foyer_fiscal("nbF", period)
            nbG = foyer_fiscal("nbG", period)
            nbH = foyer_fiscal("nbH", period)
            nbI = foyer_fiscal("nbI", period)
            nbR = foyer_fiscal("nbR", period)
            # nbJ = foyer_fiscal("nbJ", period)
            # nbN = foyer_fiscal("nbN", period)  # noqa F841
            caseP = foyer_fiscal("caseP", period)
            caseW = foyer_fiscal("caseW", period)
            caseG = foyer_fiscal("caseG", period)
            caseE = foyer_fiscal("caseE", period)
            caseK = foyer_fiscal("caseK", period)
            caseN = foyer_fiscal("caseN", period)
            caseF = foyer_fiscal("caseF", period)
            caseS = foyer_fiscal("caseS", period)
            caseL = foyer_fiscal("caseL", period)
            caseT = foyer_fiscal("caseT", period.first_month)
            quotient_familial = parameters(
                period).impot_revenu.quotient_familial

            no_pac = nb_pac == 0  # Aucune personne à charge en garde exclusive
            has_pac = not_(no_pac)
            no_alt = nbH == 0  # Aucun enfant à charge en garde alternée
            has_alt = not_(no_alt)

            # Ici on calcule plutôt d'abord le nombre de parts liées au nb d'enfants en charge principale

            def nb_enfants_principal(situation="celibataire"):
                def fonction_parts_gagnees(nb_charge_principale=1):
                    return (
                        parts_pac_tableau[situation][nb_enfants_tableau] +
                        (nb_charge_principale - nb_enfants_tableau) *
                        calcul_nb_parts["partsParPACAuDela"]
                    ) * (nb_charge_principale > nb_enfants_tableau) + (
                        nb_charge_principale <= nb_enfants_tableau) * take(
                            parts_pac_tableau[situation],
                            min_(nb_enfants_tableau, nb_charge_principale),
                        )

                return fonction_parts_gagnees

            statut_marital = foyer_fiscal.declarant_principal(
                "statut_marital", period.first_month)
            celib = statut_marital == TypesStatutMarital.celibataire
            divorce = statut_marital == TypesStatutMarital.divorce
            nb_pac = nb_pac.astype(int)
            enf3 = (celib * nb_enfants_principal("celibataire")(nb_pac) +
                    divorce * nb_enfants_principal("divorce")(nb_pac) +
                    maries_ou_pacses *
                    nb_enfants_principal("mariesOuPacses")(nb_pac) +
                    veuf * nb_enfants_principal("veuf")(nb_pac))

            # # nombre de parts liées aux enfants à charge
            # que des enfants en résidence alternée
            enf1 = (no_pac & has_alt) * (
                parts_supp_cp["zeroChargePrincipale"]["deuxPremiers"] *
                min_(nbH, 2) +
                parts_supp_cp["zeroChargePrincipale"]["suivants"] *
                max_(nbH - 2, 0))
            # pas que des enfants en résidence alternée
            enf2 = (has_pac & has_alt) * (
                (nb_pac == 1) *
                (parts_supp_cp["unChargePrincipale"]["premier"] * min_(nbH, 1)
                 + parts_supp_cp["unChargePrincipale"]["suivants"] *
                 max_(nbH - 1, 0)) + (nb_pac > 1) *
                (parts_supp_cp["deuxOuPlusChargePrincipale"]["suivants"] * nbH)
            )
            # pas d'enfant en résidence alternée
            # enf3 = quotient_familial.enf1 * min_(nb_pac, 2) + quotient_familial.enf2 * max_((nb_pac - 2), 0)

            enf = enf1 + enf2 + enf3
            # # note 2 : nombre de parts liées aux invalides (enfant + adulte)
            n2 = quotient_familial.inv1 * (
                nbG + nbI / 2) + quotient_familial.inv2 * nbR

            # # note 3 : Pas de personne à charge
            # - invalide

            # La formulation de l'article 195 nous pousse à faire ceci pour plus de cohérence.
            # Ce sont les cas couverts par l'alinéa 1 de l'article 195 du CGI
            conditions_invalidite = caseP
            conditions_combattant = caseW | caseG
            conditions_seul_enfants = (caseE | caseK | caseL) & not_(
                caseN)  # demie-part supplémentaire
            n3 = (1.5 - enf) * (no_pac & no_alt &
                                (conditions_combattant | conditions_invalidite
                                 | conditions_seul_enfants))
            # # note 4 Invalidité de la personne ou du conjoint pour les mariés ou
            # # jeunes veuf(ve)s
            n4 = max_(
                quotient_familial.not41 * (1 * caseP + 1 * caseF),
                quotient_familial.not42 * (caseW | caseS),
            )

            # # note 5
            #  - enfant du conjoint décédé
            # n51 = quotient_familial.cdcd * (caseL & ((nbF + nbJ) > 0))
            #  - enfant autre et parent isolé
            # n52 = quotient_familial.isol * caseT * (((no_pac & has_alt) * ((nbH == 1) * 0.5 + (nbH >= 2))) + 1 * has_pac)
            # n5 = max_(n51, n52)

            # # note 6 invalide avec personne à charge
            n6 = quotient_familial.not6 * (caseP & (has_pac | has_alt))

            # # note 7 Parent isolé["auMoinsUnChargePrincipale"]
            n7 = caseT * ((no_pac & has_alt) * (
                (nbH == 1) * bonus_isole["zeroChargePrincipaleUnPartage"] +
                (nbH >= 2) *
                bonus_isole["zeroChargeprincipaleDeuxOuPlusPartage"]) +
                          bonus_isole["auMoinsUnChargePrincipale"] * has_pac)
            # # Régime des mariés ou pacsés
            nb_parts_famille = enf + n2 + n4

            # # veufs  hors jeune_veuf
            nb_parts_veuf = enf + n2 + n3 + n6 + n7

            # # celib div
            nb_parts_celib = enf + n2 + n3 + n6 + n7
            return ((maries_ou_pacses | jeune_veuf) * nb_parts_famille +
                    (veuf & not_(jeune_veuf)) * nb_parts_veuf +
                    celibataire_ou_divorce * nb_parts_celib)
    def formula_2020_01(individu, period, parameters):
        taux_incapacite = individu('taux_incapacite', period)
        restriction_substantielle_durable = individu(
            'aah_restriction_substantielle_durable_acces_emploi', period)
        age = individu('age', period)
        ressortissant_eee = individu('ressortissant_eee', period)

        repas_foyer_parameters = parameters(
            period).departements.eure_et_loir.repas_foyer

        # Base de ressources identique à celle pour l'aide ménagère PH.
        individual_resource_names = {
            'aah', 'salaire_imposable', 'retraite_imposable',
            'pensions_invalidite', 'revenus_stage_formation_pro'
        }
        ressources_famille = {'aspa'}
        ressources_annuelles = {
            'retraite_complementaire_artisan_commercant',
            'retraite_complementaire_profession_liberale'
        }
        individu_resources_month = sum(
            sum([
                individu(resource, period.last_month)
                for resource in individual_resource_names
            ]),
            sum([
                individu.famille(resource, period.last_month)
                for resource in ressources_famille
            ]))
        individu_resources = sum(
            individu_resources_month,
            sum([
                individu(resource, period, options=[DIVIDE])
                for resource in ressources_annuelles
            ]))

        condition_residence = individu.menage(
            'eure_et_loir_eligibilite_residence', period)
        condition_age = age < repas_foyer_parameters.age_minimal_personne_handicap
        condition_nationalite = ressortissant_eee + individu(
            'titre_sejour', period) + individu('refugie', period) + individu(
                'apatride', period)
        condition_taux_incapacite = (
            (taux_incapacite >=
             repas_foyer_parameters.taux_incapacite_superieur) +
            ((taux_incapacite <= repas_foyer_parameters.
              taux_incapacite_maximum_restriction_acces_emploi) *
             ((taux_incapacite >= repas_foyer_parameters.
               taux_incapacite_minimum_restriction_acces_emploi) *
              restriction_substantielle_durable)))
        condition_ressources = individu_resources <= individu.famille(
            'aspa', period)

        condition_aides_actp = not_(individu('beneficiaire_actp', period))
        condition_aides_mtp = not_(individu('mtp', period))
        condition_aide_menagere_caisse_retraite = not_(
            individu('aide_menagere_fournie_caisse_retraite', period))
        conditions_non_cumul = condition_aide_menagere_caisse_retraite * condition_aides_actp * condition_aides_mtp

        return (condition_residence * condition_taux_incapacite *
                condition_nationalite * condition_age * conditions_non_cumul *
                condition_ressources)
    def formula_2020_01(individu, period, parameters):
        taux_incapacite = individu('taux_incapacite', period)
        restriction_substantielle_durable = individu(
            'aah_restriction_substantielle_durable_acces_emploi', period)
        age = individu('age', period)
        ressortissant_eee = individu('ressortissant_eee', period)
        possede_actp = individu('beneficiaire_actp', period)
        possede_mtp = individu('mtp', period)

        individual_resource_names = {
            'aah', 'salaire_imposable', 'retraite_imposable',
            'pensions_invalidite', 'revenus_stage_formation_pro'
        }
        ressources_famille = {'aspa'}
        ressources_annuelles = {
            'retraite_complementaire_artisan_commercant',
            'retraite_complementaire_profession_liberale'
        }
        individu_resources_month = sum(
            sum([
                individu(resource, period.last_month)
                for resource in individual_resource_names
            ]),
            sum([
                individu.famille(resource, period.last_month)
                for resource in ressources_famille
            ]))
        individu_resources = sum(
            individu_resources_month,
            sum([
                individu(resource, period, options=[DIVIDE])
                for resource in ressources_annuelles
            ]))

        condition_residence = individu.menage(
            'eure_et_loir_eligibilite_residence', period)
        parameters_chemin = parameters(
            period).departements.eure_et_loir.aide_menagere

        condition_taux_incapacite = (
            (taux_incapacite >= parameters_chemin.taux_incapacite_superieur) +
            ((taux_incapacite < parameters_chemin.
              taux_incapacite_maximum_restriction_acces_emploi) *
             ((taux_incapacite > parameters_chemin.
               taux_incapacite_minimum_restriction_acces_emploi) *
              restriction_substantielle_durable)))
        condition_age = (age <=
                         parameters_chemin.age_minimal_personne_handicap)
        condition_nationalite = ressortissant_eee + individu(
            'refugie', period) + individu('apatride', period)
        # condition non intégrée : Les personnes de nationalité étrangère doivent justifier d'une résidence
        # en France métropolitaine ininterrompue depuis au moins 15 ans, et ce avant l'âge de 70 ans.
        condition_ressources = individu_resources <= individu.famille(
            'aspa', period)
        condition_aides_actp = not_(possede_actp)
        condition_aides_mtp = not_(possede_mtp)
        condition_aide_menagere_caisse_retraite = not_(
            individu('aide_menagere_fournie_caisse_retraite', period))
        conditions_aides = condition_aide_menagere_caisse_retraite * condition_aides_actp * condition_aides_mtp

        return condition_residence * condition_taux_incapacite * condition_age * condition_nationalite * condition_ressources * conditions_aides