예제 #1
0
def test_amount_in_scale():
    data = {
        'description':
        'Social security contribution tax scale',
        'metadata': {
            'threshold_unit': 'currency-EUR',
            'rate_unit': '/1'
        },
        'brackets': [{
            'amount': {
                '2017-10-01': {
                    'value': 6
                },
            },
            'threshold': {
                '2017-10-01': {
                    'value': 0.23
                }
            }
        }]
    }
    scale = Scale('amount_scale', data, '')
    first_jan = Instant((2017, 11, 1))
    scale_at_instant = scale.get_at_instant(first_jan)

    assert type(scale_at_instant) == AmountTaxScale
    assert scale_at_instant.amounts[0] == 6
예제 #2
0
def test_modify_parameters():

    def modify_parameters(reference_parameters):
        reform_parameters_subtree = ParameterNode(
            'new_node',
            data = {
                'new_param': {
                    'values': {"2000-01-01": {'value': True}, "2015-01-01": {'value': None}}
                    },
                },
            )
        reference_parameters.children['new_node'] = reform_parameters_subtree
        return reference_parameters

    class test_modify_parameters(Reform):
        def apply(self):
            self.modify_parameters(modifier_function = modify_parameters)

    reform = test_modify_parameters(tax_benefit_system)

    parameters_new_node = reform.parameters.children['new_node']
    assert parameters_new_node is not None

    instant = Instant((2013, 1, 1))
    parameters_at_instant = reform.get_parameters_at_instant(instant)
    assert parameters_at_instant.new_node.new_param is True
 def eval_forfaitaire_tns():
     last_july_first = Instant(
         (period.start.year
          if period.start.month >= 7 else period.start.year - 1, 7, 1))
     smic_horaire_brut = parameters(last_july_first).cotsoc.gen.smic_h_b
     travailleur_non_salarie_i = famille.members(
         'travailleur_non_salarie', period)
     any_tns = famille.any(travailleur_non_salarie_i)
     return any_tns * 1500 * smic_horaire_brut
 def eval_forfaitaire_tns():
     last_july_first = Instant(
         (period.start.year
          if period.start.month >= 7 else period.start.year - 1, 7, 1))
     smic_horaire_brut = simulation.legislation_at(
         last_july_first).cotsoc.gen.smic_h_b
     travailleur_non_salarie_holder = simulation.compute(
         'travailleur_non_salarie', period)
     any_tns = self.any_by_roles(travailleur_non_salarie_holder)
     return any_tns * 1500 * smic_horaire_brut
예제 #5
0
    def formula_2015_01_01(famille, period, parameters):
        '''
        Prestation d'accueil du jeune enfant - Allocation de naissance
        Références législatives :git
        https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006073189&idArticle=LEGIARTI000006737121&dateTexte=&categorieLien=cid
        '''
        af_nbenf = famille('af_nbenf', period)
        base_ressources = famille('prestations_familiales_base_ressources',
                                  period)
        isole = not_(famille('en_couple', period))
        biactivite = famille('biactivite', period)
        P = parameters(period).prestations.prestations_familiales

        # Le montant de la PAJE est gelé depuis avril 2013.
        date_gel_paje = Instant((2013, 4, 1))
        bmaf = P.af.bmaf if period.start < date_gel_paje else parameters(
            date_gel_paje).prestations.prestations_familiales.af.bmaf
        prime_naissance = round(
            100 * P.paje.prime_naissance.prime_tx * bmaf) / 100

        date_naissance_i = famille.members('date_naissance', period)

        # Versée au 2 mois après la grossesse donc les enfants concernés sont les enfants qui ont 2 mois
        diff_mois_naissance_periode = (
            date_naissance_i.astype('datetime64[M]') -
            datetime64(period.start, 'M'))
        nb_enfants_eligible = famille.sum(
            diff_mois_naissance_periode.astype('int') == -2,
            role=Famille.ENFANT)

        nbenf = af_nbenf + nb_enfants_eligible  # On ajoute l'enfant à  naître;

        # Est-ce que ces taux n'ont pas été mis à jour en avril 2014 ?
        taux_plafond = (
            (nbenf > 0) +
            P.paje.base.avant_2014.taux_majoration_2_premiers_enf *
            min_(nbenf, 2) +
            P.paje.base.avant_2014.taux_majoration_3eme_enf_et_plus *
            max_(nbenf - 2, 0))

        majoration_isole_biactif = isole | biactivite

        plafond_de_ressources = (
            P.paje.base.avant_2014.plafond_ressources_0_enf * taux_plafond +
            (taux_plafond > 0) *
            P.paje.base.avant_2014.majoration_biact_parent_isoles *
            majoration_isole_biactif)

        eligible_prime_naissance = (base_ressources <= plafond_de_ressources)

        return prime_naissance * eligible_prime_naissance * nb_enfants_eligible
예제 #6
0
def test_dispatch_scale_creation_on_type():
    data = {
        'description': 'Social security contribution tax scale',
        'metadata': {
            'type': 'single_amount',
            'threshold_unit': 'currency-EUR',
            'rate_unit': '/1'
        },
    }
    scale = Scale('amount_scale', data, '')
    first_jan = Instant((2017, 11, 1))
    scale_at_instant = scale.get_at_instant(first_jan)

    assert type(scale_at_instant) == SingleAmountTaxScale
예제 #7
0
    def formula_2004_01_01(famille, period, parameters):
        '''
        Prestation d'accueil du jeune enfant - Allocation de naissance
        '''
        af_nbenf = famille('af_nbenf', period)
        base_ressources = famille('prestations_familiales_base_ressources',
                                  period)
        isole = not_(famille('en_couple', period))
        biactivite = famille('biactivite', period)
        P = parameters(period).prestations.prestations_familiales

        # Le montant de la PAJE est gelé depuis avril 2013.
        date_gel_paje = Instant((2013, 4, 1))
        bmaf = P.af.bmaf if period.start < date_gel_paje else parameters(
            date_gel_paje).prestations.prestations_familiales.af.bmaf
        nais_prime = round(100 * P.paje.prime_naissance.prime_tx * bmaf) / 100

        age_en_mois_i = famille.members('age_en_mois', period)
        # Versée au 7e mois de grossesse dans l'année donc les enfants concernés sont les enfants qui ont -2 mois
        nb_enfants_7e_mois_grossese = famille.sum(age_en_mois_i == -2,
                                                  role=Famille.ENFANT)

        nbenf = af_nbenf + nb_enfants_7e_mois_grossese  # On ajoute l'enfant à  naître;

        # Est-ce que ces taux n'ont pas été mis à jour en avril 2014 ?
        plaf_tx = ((nbenf > 0) +
                   P.paje.base.avant_2014.taux_majoration_2_premiers_enf *
                   min_(nbenf, 2) +
                   P.paje.base.avant_2014.taux_majoration_3eme_enf_et_plus *
                   max_(nbenf - 2, 0))

        majo = isole | biactivite

        plaf = (P.paje.base.avant_2014.plafond_ressources_0_enf * plaf_tx +
                (plaf_tx > 0) *
                P.paje.base.avant_2014.majoration_biact_parent_isoles * majo)

        elig = (base_ressources <= plaf)

        return nais_prime * elig * nb_enfants_7e_mois_grossese
예제 #8
0
def test_2_years_size_in_days():
    assert Period(('year', Instant((2014, 1, 1)), 2)).size_in_days == 730
예제 #9
0
def test_leap_year_size_in_days():
    assert Period(('year', Instant((2012, 1, 1)), 1)).size_in_days == 366
예제 #10
0
def test_leap_3_month_size_in_days():
    assert Period(('month', Instant(
        (2012, 1, 3)), 3)).size_in_days == 31 + 29 + 31
예제 #11
0
def test_3_month_size_in_days():
    assert Period(('month', Instant(
        (2013, 1, 3)), 3)).size_in_days == 31 + 28 + 31
예제 #12
0
def test_month_size_in_days():
    assert Period(('month', Instant((2014, 12, 1)), 1)).size_in_days == 31
예제 #13
0
def test_3_day_size_in_days():
    assert Period(('day', Instant((2014, 12, 31)), 3)).size_in_days == 3
예제 #14
0
# -*- coding: utf-8 -*-

from __future__ import unicode_literals, print_function, division, absolute_import

import pytest

from openfisca_core.periods import Period, Instant, YEAR, MONTH, DAY, period
from openfisca_core.commons import to_unicode

first_jan = Instant((2014, 1, 1))
first_march = Instant((2014, 3, 1))
'''
Test Period -> String
'''

# Years


def test_year():
    assert to_unicode(Period((YEAR, first_jan, 1))) == '2014'


def test_12_months_is_a_year():
    assert to_unicode(Period((MONTH, first_jan, 12))) == '2014'


def test_rolling_year():
    assert to_unicode(Period((MONTH, first_march, 12))) == 'year:2014-03'
    assert to_unicode(Period((YEAR, first_march, 1))) == 'year:2014-03'

예제 #15
0
    def formula_2004(famille, period, parameters):
        couple_biactif = famille('biactivite', period)
        parent_isole = not_(famille('en_couple', period))
        nombre_enfants = famille('af_nbenf', period)
        pfam = parameters(period).prestations.prestations_familiales

        # Le montant, précédemment indexé sur la BMAF, est gelé en 2013, et dégelé en 2018
        date_gel_paje = Instant((2013, 4, 1))
        date_degel_paje = Instant((2018, 4, 1))
        periode_de_gel = date_degel_paje > period.start > date_gel_paje
        indice = parameters(
            date_gel_paje
        ).prestations.prestations_familiales.af.bmaf if periode_de_gel else pfam.af.bmaf
        montant_taux_plein = indice * pfam.paje.base.taux_allocation_base

        def plafond_avant_avril_2014():
            plafond_de_base = pfam.paje.base.avant_2014.plafond_ressources_0_enf
            maj_plafond_2_premiers_enfants = pfam.paje.base.avant_2014.taux_majoration_2_premiers_enf * plafond_de_base
            maj_plafond_par_enfant_sup = pfam.paje.base.avant_2014.taux_majoration_3eme_enf_et_plus * plafond_de_base
            maj_plafond_seul_biactif = pfam.paje.base.avant_2014.majoration_biact_parent_isoles

            plafond = (
                plafond_de_base +
                min_(nombre_enfants, 2) * maj_plafond_2_premiers_enfants +
                max_(nombre_enfants - 2, 0) * maj_plafond_par_enfant_sup +
                (couple_biactif + parent_isole) * maj_plafond_seul_biactif)
            return plafond

        def plafond_taux_plein(params):
            plafond_de_base = params.taux_plein.plaf
            maj_plafond_seul_biactif = params.taux_plein.plaf_maj
            maj_plafond_par_enfant = plafond_de_base * params.plaf_tx_par_enf

            return plafond_apres_ajustement(plafond_de_base,
                                            maj_plafond_par_enfant,
                                            maj_plafond_seul_biactif)

        def plafond_taux_partiel(params):
            plafond_de_base = params.taux_partiel.plaf
            maj_plafond_seul_biactif = params.taux_partiel.plaf_maj
            maj_plafond_par_enfant = plafond_de_base * params.plaf_tx_par_enf

            return plafond_apres_ajustement(plafond_de_base,
                                            maj_plafond_par_enfant,
                                            maj_plafond_seul_biactif)

        def plafond_apres_ajustement(plafond_de_base, maj_plafond_par_enfant,
                                     maj_plafond_seul_biactif):
            plafond = (
                plafond_de_base + nombre_enfants * maj_plafond_par_enfant +
                (couple_biactif + parent_isole) * maj_plafond_seul_biactif)
            return plafond

        a_un_enfant_eligible = famille.any(
            famille.members('enfant_eligible_paje', period))
        date_plus_jeune = famille.reduce(
            famille.members('date_naissance', period), maximum,
            datetime64('1066-01-01'))
        sujet_a_reforme_2014 = date_plus_jeune >= datetime64('2014-04-01')
        sujet_a_reforme_2018 = date_plus_jeune >= datetime64('2018-04-01')
        ne_avant_avril_2014 = True

        plafond_taux_partiel = select(
            [sujet_a_reforme_2018, sujet_a_reforme_2014, ne_avant_avril_2014],
            [
                plafond_taux_partiel(pfam.paje.base.apres_2018),
                plafond_taux_partiel(pfam.paje.base.apres_2014),
                plafond_avant_avril_2014()
            ])

        plafond_taux_plein = select(
            [sujet_a_reforme_2018, sujet_a_reforme_2014, ne_avant_avril_2014],
            [
                plafond_taux_plein(pfam.paje.base.apres_2018),
                plafond_taux_plein(pfam.paje.base.apres_2014),
                plafond_avant_avril_2014()
            ])

        ressources = famille('prestations_familiales_base_ressources', period)
        montant_taux_partiel = montant_taux_plein / 2

        montant = ((ressources <= plafond_taux_plein) * montant_taux_plein +
                   (ressources <= plafond_taux_partiel) *
                   (ressources > plafond_taux_plein) * montant_taux_partiel)

        return a_un_enfant_eligible * montant
예제 #16
0
def test_leap_month_size_in_days():
    assert Period(('month', Instant((2012, 2, 3)), 1)).size_in_days == 29
예제 #17
0
    def formula_2004(famille, period, parameters):
        couple_biactif = famille('biactivite', period)
        parent_isole = not_(famille('en_couple', period))
        nombre_enfants = famille('af_nbenf', period)
        pfam = parameters(period).prestations.prestations_familiales
        date_gel_paje = Instant(
            (2013, 4, 1))  # Le montant de la PAJE est gelé depuis avril 2013.
        bmaf = pfam.af.bmaf if period.start < date_gel_paje else parameters(
            date_gel_paje).prestations.prestations_familiales.af.bmaf
        montant_taux_plein = bmaf * pfam.paje.base.taux_allocation_base

        def plafond_avant_avril_2014():
            plafond_de_base = pfam.paje.base.avant_2014.plafond_ressources_0_enf
            maj_plafond_2_premiers_enfants = pfam.paje.base.avant_2014.taux_majoration_2_premiers_enf * plafond_de_base
            maj_plafond_par_enfant_sup = pfam.paje.base.avant_2014.taux_majoration_3eme_enf_et_plus * plafond_de_base
            maj_plafond_seul_biactif = pfam.paje.base.avant_2014.majoration_biact_parent_isoles

            plafond = (
                plafond_de_base +
                min_(nombre_enfants, 2) * maj_plafond_2_premiers_enfants +
                max_(nombre_enfants - 2, 0) * maj_plafond_par_enfant_sup +
                (couple_biactif + parent_isole) * maj_plafond_seul_biactif)
            return plafond

        def plafond_taux_plein():
            plafond_de_base = pfam.paje.base.apres_2014.taux_plein.plaf
            maj_plafond_seul_biactif = pfam.paje.base.apres_2014.taux_plein.plaf_maj
            if period.start.date >= date(2014, 4, 1):
                maj_plafond_par_enfant = plafond_de_base * pfam.paje.base.apres_2014.plaf_tx_par_enf
            else:
                maj_plafond_par_enfant = 0

            plafond = (
                plafond_de_base + nombre_enfants * maj_plafond_par_enfant +
                (couple_biactif + parent_isole) * maj_plafond_seul_biactif)
            return plafond

        def plafond_taux_partiel():
            plafond_de_base = pfam.paje.base.apres_2014.taux_partiel.plaf
            maj_plafond_seul_biactif = pfam.paje.base.apres_2014.taux_partiel.plaf_maj
            if period.start.date >= date(2014, 4, 1):
                maj_plafond_par_enfant = plafond_de_base * pfam.paje.base.apres_2014.plaf_tx_par_enf
            else:
                maj_plafond_par_enfant = 0

            plafond = (
                plafond_de_base + nombre_enfants * maj_plafond_par_enfant +
                (couple_biactif + parent_isole) * maj_plafond_seul_biactif)
            return plafond

        def enfant_eligible_ne_avant_avril_2014():
            enfant_eligible_avant_reforme_2014 = famille.members(
                'paje_base_enfant_eligible_avant_reforme_2014', period)
            return enfant_eligible_avant_reforme_2014

        def enfant_eligible_ne_apres_avril_2014():
            enfant_eligible_apres_reforme_2014 = famille.members(
                'paje_base_enfant_eligible_apres_reforme_2014', period)
            return enfant_eligible_apres_reforme_2014

        def montant_enfant_ne_avant_avril_2014():
            ressources = famille('prestations_familiales_base_ressources',
                                 period)
            return (ressources <=
                    plafond_avant_avril_2014()) * montant_taux_plein

        def montant_enfant_ne_apres_avril_2014():
            ressources = famille('prestations_familiales_base_ressources',
                                 period)
            montant_taux_partiel = montant_taux_plein / 2

            montant = (
                (ressources <= plafond_taux_plein()) * montant_taux_plein +
                (ressources <= plafond_taux_partiel()) *
                (ressources > plafond_taux_plein()) * montant_taux_partiel)
            return montant

        age_plus_jeune_enfant = min(famille.members('age', period))
        est_plus_jeune_enfant = famille.members(
            'age', period) == age_plus_jeune_enfant

        enfant_elig_avant_avril_2014 = famille.any(
            enfant_eligible_ne_avant_avril_2014() * est_plus_jeune_enfant)
        montant_elig_avant_avril_2014 = montant_enfant_ne_avant_avril_2014()
        enfant_elig_apres_avril_2014 = famille.any(
            enfant_eligible_ne_apres_avril_2014() * est_plus_jeune_enfant)
        montant_elig_apres_avril_2014 = montant_enfant_ne_apres_avril_2014()

        montant = (
            enfant_elig_avant_avril_2014 * montant_elig_avant_avril_2014 +
            not_(enfant_elig_avant_avril_2014) * enfant_elig_apres_avril_2014 *
            montant_elig_apres_avril_2014)

        return montant