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
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
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
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
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
def test_2_years_size_in_days(): assert Period(('year', Instant((2014, 1, 1)), 2)).size_in_days == 730
def test_leap_year_size_in_days(): assert Period(('year', Instant((2012, 1, 1)), 1)).size_in_days == 366
def test_leap_3_month_size_in_days(): assert Period(('month', Instant( (2012, 1, 3)), 3)).size_in_days == 31 + 29 + 31
def test_3_month_size_in_days(): assert Period(('month', Instant( (2013, 1, 3)), 3)).size_in_days == 31 + 28 + 31
def test_month_size_in_days(): assert Period(('month', Instant((2014, 12, 1)), 1)).size_in_days == 31
def test_3_day_size_in_days(): assert Period(('day', Instant((2014, 12, 31)), 3)).size_in_days == 3
# -*- 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'
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
def test_leap_month_size_in_days(): assert Period(('month', Instant((2012, 2, 3)), 1)).size_in_days == 29
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