def formula(individu, period): salaire_imposable_personne_de_reference = menage.personne_de_reference( 'salaire_imposable', period=period) salaire_imposable_conjoint = menage.conjoint('salaire_imposable', period=period) return xor_(salaire_imposable_personne_de_reference > 0, salaire_imposable_conjoint > 0)
def function(self, simulation, period): period = period.start.offset('first-of', 'month').period('year') salaire_imposable_holder = simulation.compute('salaire_imposable', period = period) _P = simulation.legislation_at(period.start) salaire_imposable = self.split_by_roles(salaire_imposable_holder, roles = [CHEF, PART]) uniq = xor_(salaire_imposable[CHEF] > 0, salaire_imposable[PART] > 0) return period, uniq
def _ppe_brute(ppe_elig, ppe_elig_i, ppe_rev, ppe_base, ppe_coef, ppe_coef_tp, nb_pac, marpac, celdiv, veuf, caseT, caseL, nbH, _P, _option = {'ppe_elig_i': ALL, 'ppe_base': ALL, 'ppe_rev': ALL, 'ppe_coef_tp': ALL}): ''' Prime pour l'emploi (avant éventuel dispositif de cumul avec le RSA) 'foy' Cf. http://travail-emploi.gouv.fr/informations-pratiques,89/fiches-pratiques,91/remuneration,113/la-prime-pour-l-emploi-ppe,1034.html ''' P = _P.ir.credits_impot.ppe eliv, elic, eli1, eli2, eli3 = ppe_elig_i[VOUS], ppe_elig_i[CONJ], ppe_elig_i[PAC1], ppe_elig_i[PAC2], ppe_elig_i[PAC3], basevi, baseci = ppe_rev[VOUS], ppe_rev[CONJ] basev, basec, base1, base2, base3 = ppe_base[VOUS], ppe_base[CONJ], ppe_base[PAC1], ppe_base[PAC2], ppe_base[PAC1] coef_tpv, coef_tpc, coef_tp1, coef_tp2, coef_tp3 = ppe_coef_tp[VOUS], ppe_coef_tp[CONJ], ppe_coef_tp[PAC1], ppe_coef_tp[PAC2], ppe_coef_tp[PAC1] nb_pac_ppe = max_(0, nb_pac - eli1 - eli2 - eli3) ligne2 = marpac & xor_(basevi >= P.seuil1, baseci >= P.seuil1) ligne3 = (celdiv | veuf) & caseT & not_(veuf & caseT & caseL) ligne1 = not_(ligne2) & not_(ligne3) base_monact = ligne2 * (eliv * basev + elic * basec) base_monacti = ligne2 * (eliv * basevi + elic * baseci) def ppe_bar1(base): # cond1 = ligne1 | ligne3 # cond2 = ligne2 # return 1 / ppe_coef * ((cond1 & (base <= P.seuil2)) * (base) * P.taux1 + # (cond1 & (base > P.seuil2) & (base <= P.seuil3)) * (P.seuil3 - base) * P.taux2 + # (cond2 & (base <= P.seuil2)) * (base * P.taux1) + # (cond2 & (base > P.seuil2) & (base <= P.seuil3)) * ((P.seuil3 - base) * P.taux2) + # (cond2 & (base > P.seuil4) & (base <= P.seuil5)) * (P.seuil5 - base) * P.taux3) return (1 / ppe_coef) * (((base <= P.seuil2)) * (base) * P.taux1 + ((base > P.seuil2) & (base <= P.seuil3)) * (P.seuil3 - base) * P.taux2 + ligne2 * ((base > P.seuil4) & (base <= P.seuil5)) * (P.seuil5 - base) * P.taux3) def ppe_bar2(base): return (1 / ppe_coef) * ((base <= P.seuil2) * (base) * P.taux1 + ((base > P.seuil2) & (base <= P.seuil3)) * (P.seuil3 - base1) * P.taux2) # calcul des primes individuelles. ppev = eliv * ppe_bar1(basev) ppec = elic * ppe_bar1(basec) ppe1 = eli1 * ppe_bar2(base1) ppe2 = eli2 * ppe_bar2(base2) ppe3 = eli3 * ppe_bar2(base3) # Primes de monoactivité ppe_monact_vous = (eliv & ligne2 & (basevi >= P.seuil1) & (basev <= P.seuil4)) * P.monact ppe_monact_conj = (elic & ligne2 & (baseci >= P.seuil1) & (basec <= P.seuil4)) * P.monact # Primes pour enfants à charge maj_pac = ppe_elig * (eliv | elic) * ( (ligne1 & marpac & ((ppev + ppec) != 0) & (min_(basev, basec) <= P.seuil3)) * P.pac * (nb_pac_ppe + nbH * 0.5) + (ligne1 & (celdiv | veuf) & eliv & (basev <= P.seuil3)) * P.pac * (nb_pac_ppe + nbH * 0.5) + (ligne2 & (base_monacti >= P.seuil1) & (base_monact <= P.seuil3)) * P.pac * (nb_pac_ppe + nbH * 0.5) + (ligne2 & (base_monact > P.seuil3) & (base_monact <= P.seuil5)) * P.pac * ((nb_pac_ppe != 0) + 0.5 * ((nb_pac_ppe == 0) & (nbH != 0))) + (ligne3 & (basevi >= P.seuil1) & (basev <= P.seuil3)) * ((min_(nb_pac_ppe, 1) * 2 * P.pac + max_(nb_pac_ppe - 1, 0) * P.pac) + (nb_pac_ppe == 0) * (min_(nbH, 2) * P.pac + max_(nbH - 2, 0) * P.pac * 0.5)) + (ligne3 & (basev > P.seuil3) & (basev <= P.seuil5)) * P.pac * ((nb_pac_ppe != 0) * 2 + ((nb_pac_ppe == 0) & (nbH != 0)))) def coef(coef_tp): return (coef_tp <= 0.5) * coef_tp * 1.45 + (coef_tp > 0.5) * (0.55 * coef_tp + 0.45) ppe_vous = ppe_elig * (ppev * coef(coef_tpv) + ppe_monact_vous) ppe_conj = ppe_elig * (ppec * coef(coef_tpc) + ppe_monact_conj) ppe_pac1 = ppe_elig * (ppe1 * coef(coef_tp1)) ppe_pac2 = ppe_elig * (ppe2 * coef(coef_tp2)) ppe_pac3 = ppe_elig * (ppe3 * coef(coef_tp3)) ppe_tot = ppe_vous + ppe_conj + ppe_pac1 + ppe_pac2 + ppe_pac3 + maj_pac ppe_tot = (ppe_tot != 0) * max_(P.versmin, ppe_tot) # from pandas import DataFrame # decompo = {0: ppev, 1 :ppe_vous, 2: ppec,3: ppe_conj, 4: maj_pac, 5 : ppe_monact_vous, 6: ppe_monact_conj, 8: basev, 81 : basevi, 9: basec, 91 : baseci, 10:ppe_tot} # print DataFrame(decompo).to_string() return ppe_tot
def _ppe_brute(ppe_elig, ppe_elig_i, ppe_rev, ppe_base, ppe_coef, ppe_coef_tp, nb_pac, marpac, celdiv, veuf, caseT, caseL, nbH, _P, _option = {'ppe_elig_i': ALL, 'ppe_base': ALL, 'ppe_rev': ALL, 'ppe_coef_tp': ALL}): ''' Prime pour l'emploi (avant éventuel dispositif de cumul avec le RSA) 'foy' ''' P = _P.ir.credits_impot.ppe eliv, elic, eli1, eli2, eli3 = ppe_elig_i[VOUS], ppe_elig_i[CONJ], ppe_elig_i[PAC1], ppe_elig_i[PAC2], ppe_elig_i[PAC3], basevi, baseci = ppe_rev[VOUS], ppe_rev[CONJ] basev, basec, base1, base2, base3 = ppe_base[VOUS], ppe_base[CONJ], ppe_base[PAC1], ppe_base[PAC2], ppe_base[PAC1] coef_tpv, coef_tpc, coef_tp1, coef_tp2, coef_tp3 = ppe_coef_tp[VOUS], ppe_coef_tp[CONJ], ppe_coef_tp[PAC1], ppe_coef_tp[PAC2], ppe_coef_tp[PAC1] nb_pac_ppe = max_(0, nb_pac - eli1 - eli2 - eli3) ligne2 = marpac & xor_(basevi >= P.seuil1, baseci >= P.seuil1) ligne3 = (celdiv | veuf) & caseT & not_(veuf & caseT & caseL) ligne1 = not_(ligne2) & not_(ligne3) base_monact = ligne2 * (eliv * basev + elic * basec) base_monacti = ligne2 * (eliv * basevi + elic * baseci) def ppe_bar1(base): cond1 = ligne1 | ligne3 cond2 = ligne2 return 1 / ppe_coef * ((cond1 & (base <= P.seuil2)) * (base) * P.taux1 + (cond1 & (base > P.seuil2) & (base <= P.seuil3)) * (P.seuil3 - base) * P.taux2 + (cond2 & (base <= P.seuil2)) * (base * P.taux1) + (cond2 & (base > P.seuil2) & (base <= P.seuil3)) * ((P.seuil3 - base) * P.taux2) + (cond2 & (base > P.seuil4) & (base <= P.seuil5)) * (P.seuil5 - base) * P.taux3) def ppe_bar2(base): return 1 / ppe_coef * ((base <= P.seuil2) * (base) * P.taux1 + ((base > P.seuil2) & (base <= P.seuil3)) * (P.seuil3 - base1) * P.taux2) # calcul des primes individuelles. ppev = eliv * ppe_bar1(basev) ppec = elic * ppe_bar1(basec) ppe1 = eli1 * ppe_bar2(base1) ppe2 = eli2 * ppe_bar2(base2) ppe3 = eli3 * ppe_bar2(base3) ppe_monact_vous = (eliv & ligne2 & (basevi >= P.seuil1) & (basev <= P.seuil4)) * P.monact ppe_monact_conj = (elic & ligne2 & (baseci >= P.seuil1) & (basec <= P.seuil4)) * P.monact maj_pac = ppe_elig * (eliv | elic) * ( (ligne1 & marpac & ((ppev + ppec) != 0) & (min_(basev, basec) <= P.seuil3)) * P.pac * (nb_pac_ppe + nbH * 0.5) + (ligne1 & (celdiv | veuf) & eliv & (basev <= P.seuil3)) * P.pac * (nb_pac_ppe + nbH * 0.5) + (ligne2 & (base_monacti >= P.seuil1) & (base_monact <= P.seuil3)) * P.pac * (nb_pac_ppe + nbH * 0.5) + (ligne2 & (base_monact > P.seuil3) & (base_monact <= P.seuil5)) * P.pac * ((nb_pac_ppe != 0) + 0.5 * ((nb_pac_ppe == 0) & (nbH != 0))) + (ligne3 & (basevi >= P.seuil1) & (basev <= P.seuil3)) * ((min_(nb_pac_ppe, 1) * 2 * P.pac + max_(nb_pac_ppe - 1, 0) * P.pac) + (nb_pac_ppe == 0) * (min_(nbH, 2) * P.pac + max_(nbH - 2, 0) * P.pac * 0.5)) + (ligne3 & (basev > P.seuil3) & (basev <= P.seuil5)) * P.pac * ((nb_pac_ppe != 0) * 2 + ((nb_pac_ppe == 0) & (nbH != 0)))) plaf_ppe = P.seuil3 * ((celdiv | veuf) & (nb_pac_ppe == 0) | marpac & (ppev > P.seuil1) & (ppec > P.seuil1)) + P.seuil4 * (marpac & ((ppev > P.seuil1) | (ppec > P.seuil1)) | ligne3) def coef(coef_tp): return (coef_tp <= 0.5) * coef_tp * 1.45 + (coef_tp > 0.5) * (0.55 * coef_tp + 0.45) ppe_vous = ppe_elig * (ppev * coef(coef_tpv) + ppe_monact_vous) ppe_conj = ppe_elig * (ppec * coef(coef_tpc) + ppe_monact_conj) ppe_pac1 = ppe_elig * (ppe1 * coef(coef_tp1)) ppe_pac2 = ppe_elig * (ppe2 * coef(coef_tp2)) ppe_pac3 = ppe_elig * (ppe3 * coef(coef_tp3)) ppe_tot = ppe_vous + ppe_conj + ppe_pac1 + ppe_pac2 + ppe_pac3 + maj_pac ppe_tot = (ppe_tot != 0) * max_(P.versmin, ppe_tot) ppe_tot = ppe_tot * (ppe_tot <= plaf_ppe) return ppe_tot
def formula(individu, period): salaire_imposable_personne_de_reference = menage.personne_de_reference('salaire_imposable', period = period) salaire_imposable_conjoint = menage.conjoint('salaire_imposable', period = period) return xor_(salaire_imposable_personne_de_reference > 0, salaire_imposable_conjoint > 0)
def _ppe_brute(ppe_elig, ppe_elig_i, ppe_rev, ppe_base, ppe_coef, ppe_coef_tp, nb_pac, marpac, celdiv, veuf, caseT, caseL, nbH, _P, _option = {'ppe_elig_i': ALL, 'ppe_base': ALL, 'ppe_rev': ALL, 'ppe_coef_tp': ALL}): ''' Prime pour l'emploi (avant éventuel dispositif de cumul avec le RSA) 'foy' ''' P = _P.ir.credits_impot.ppe eliv, elic, eli1, eli2, eli3 = ppe_elig_i[VOUS], ppe_elig_i[CONJ], ppe_elig_i[PAC1], ppe_elig_i[PAC2], ppe_elig_i[PAC3], basevi, baseci = ppe_rev[VOUS], ppe_rev[CONJ] basev, basec, base1, base2, base3 = ppe_base[VOUS], ppe_base[CONJ], ppe_base[PAC1], ppe_base[PAC2], ppe_base[PAC1] coef_tpv, coef_tpc, coef_tp1, coef_tp2, coef_tp3 = ppe_coef_tp[VOUS], ppe_coef_tp[CONJ], ppe_coef_tp[PAC1], ppe_coef_tp[PAC2], ppe_coef_tp[PAC1] nb_pac_ppe = max_(0, nb_pac - eli1 - eli2 -eli3 ) ligne2 = marpac & xor_(basevi >= P.seuil1, baseci >= P.seuil1) ligne3 = (celdiv | veuf) & caseT & not_(veuf & caseT & caseL) ligne1 = not_(ligne2) & not_(ligne3) base_monact = ligne2*(eliv*basev + elic*basec) base_monacti = ligne2*(eliv*basevi + elic*baseci) def ppe_bar1(base): cond1 = ligne1 | ligne3 cond2 = ligne2 return 1/ppe_coef*((cond1 & (base <= P.seuil2))*(base)*P.taux1 + (cond1 & (base> P.seuil2) & (base <= P.seuil3))*(P.seuil3 - base)*P.taux2 + (cond2 & (base <= P.seuil2))*(base*P.taux1 ) + (cond2 & (base > P.seuil2) & (base <= P.seuil3))*((P.seuil3 - base)*P.taux2) + (cond2 & (base > P.seuil4) & (base <= P.seuil5))*(P.seuil5 - base)*P.taux3) def ppe_bar2(base): return 1/ppe_coef*((base <= P.seuil2)*(base)*P.taux1 + ((base> P.seuil2) & (base <= P.seuil3))*(P.seuil3 - base1)*P.taux2 ) # calcul des primes individuelles. ppev = eliv*ppe_bar1(basev) ppec = elic*ppe_bar1(basec) ppe1 = eli1*ppe_bar2(base1) ppe2 = eli2*ppe_bar2(base2) ppe3 = eli3*ppe_bar2(base3) ppe_monact_vous = (eliv & ligne2 & (basevi>=P.seuil1) & (basev <= P.seuil4))*P.monact ppe_monact_conj = (elic & ligne2 & (baseci>=P.seuil1) & (basec <= P.seuil4))*P.monact maj_pac = ppe_elig*(eliv|elic)*( (ligne1 & marpac & ((ppev+ppec)!=0) & (min_(basev,basec)<= P.seuil3))*P.pac*(nb_pac_ppe + nbH*0.5) + (ligne1 & (celdiv | veuf) & eliv & (basev<=P.seuil3))*P.pac*(nb_pac_ppe + nbH*0.5) + (ligne2 & (base_monacti >= P.seuil1) & (base_monact <= P.seuil3))*P.pac*(nb_pac_ppe + nbH*0.5) + (ligne2 & (base_monact > P.seuil3) & (base_monact <= P.seuil5))*P.pac*((nb_pac_ppe!=0) + 0.5*((nb_pac_ppe==0) & (nbH!=0))) + (ligne3 & (basevi >=P.seuil1) & (basev <= P.seuil3))*((min_(nb_pac_ppe,1)*2*P.pac + max_(nb_pac_ppe-1,0)*P.pac) + (nb_pac_ppe==0)*(min_(nbH,2)*P.pac + max_(nbH-2,0)*P.pac*0.5)) + (ligne3 & (basev > P.seuil3) & (basev <= P.seuil5))*P.pac*((nb_pac_ppe!=0)*2 +((nb_pac_ppe==0) & (nbH!=0)))) def coef(coef_tp): return (coef_tp <=0.5)*coef_tp*1.45 + (coef_tp > 0.5)*(0.55*coef_tp + 0.45) ppe_vous = ppe_elig*(ppev*coef(coef_tpv) + ppe_monact_vous) ppe_conj = ppe_elig*(ppec*coef(coef_tpc) + ppe_monact_conj) ppe_pac1 = ppe_elig*(ppe1*coef(coef_tp1)) ppe_pac2 = ppe_elig*(ppe2*coef(coef_tp2)) ppe_pac3 = ppe_elig*(ppe3*coef(coef_tp3)) ppe_tot = ppe_vous + ppe_conj + ppe_pac1 + ppe_pac2 + ppe_pac3 + maj_pac ppe_tot = (ppe_tot!=0)*max_(P.versmin, ppe_tot) return ppe_tot