Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposition avec création d'une formule minimum_recouvrement_ir #2402

Original file line number Diff line number Diff line change
Expand Up @@ -2299,10 +2299,10 @@ def formula_2011_01_01(foyer_fiscal, period, parameters):
# TODO: Gérer le II.-1 du lissage interannuel ? (problème de non recours)


class impot_revenu_restant_a_payer(Variable):
class impot_revenu_avant_seuils_mise_recouvrement(Variable):
value_type = float
entity = FoyerFiscal
label = 'Impôt sur le revenu des personnes physiques restant à payer, après prise en compte des éventuels acomptes'
label = 'Impôt sur le revenu des personnes physiques restant à payer, après prise en compte des éventuels acomptes et avant application des seuils de mise en recouvrement'
reference = 'https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000041464766'
definition_period = YEAR

Expand All @@ -2311,30 +2311,63 @@ def formula(foyer_fiscal, period, parameters):
Montant après seuil de recouvrement (hors ppe)
NB : ce montant l'impôt correspond à une notion administrative :
dans certains cas, il existe des prélèvements à la source faisant
office d'acomptes d'impôt sur le revenu (cf. variable acomptes_ir). Ces acomptes sont comptabilisés
dans la feuille d'impôt comme des crédits d'impôt, mais correspondent économiquement à des montants d'impôt dus.
Le prélèvement forfaitaire libératoire a déjà été payé il ne doit donc pas être compté dans l'impôt restant à payer.
En revanche, il compte dans le calcul du seuil de recouvrement.
office d'acomptes d'impôt sur le revenu (cf. variable acomptes_ir). Ces acomptes sont comptabilisés dans la feuille d'impôt comme des crédits d'impôt, mais correspondent économiquement à des montants d'impôt dus.
'''
iai = foyer_fiscal('iai', period)
credits_impot = foyer_fiscal('credits_impot', period)
acomptes_ir = foyer_fiscal('acomptes_ir', period)
cehr = foyer_fiscal('contribution_exceptionnelle_hauts_revenus', period)
pfu = foyer_fiscal('prelevement_forfaitaire_unique_ir', period)
pfl = foyer_fiscal('prelevement_forfaitaire_liberatoire', period)

return -(iai + cehr - pfu - credits_impot - acomptes_ir)


class correction_ir_seuils_recouvrement(Variable):
value_type = float
entity = FoyerFiscal
label = 'Montant de la correction de l´impôt sur le revenu par application des seuils de mise en recouvrement'
reference = 'https://bofip.impots.gouv.fr/bofip/2496-PGP.html/identifiant%3DBOI-IR-LIQ-20-20-40-20180704#Franchise_pour_les_impositi_14'
definition_period = YEAR

def formula(foyer_fiscal, period, parameters):
iai = foyer_fiscal('iai', period)
credits_impot = foyer_fiscal('credits_impot', period)
acomptes_ir = foyer_fiscal('acomptes_ir', period)
cehr = foyer_fiscal('contribution_exceptionnelle_hauts_revenus', period)
pfu = foyer_fiscal('prelevement_forfaitaire_unique_ir', period)
pfl = foyer_fiscal('prelevement_forfaitaire_liberatoire', period)
impots_avant_seuils_mise_recouvrement = foyer_fiscal('impot_revenu_avant_seuils_mise_recouvrement', period)
'''
Le prélèvement forfaitaire libératoire a déjà été payé il ne doit donc pas être compté dans l'impôt restant à payer.
En revanche, il compte dans le calcul du seuil de recouvrement.
'''
parameters_recouvrement = parameters(period).impot_revenu.calcul_impot_revenu.recouvrement
seuil_avant_imputations = parameters_recouvrement.min_avant_credits_impots
seuil_apres_imputations = parameters_recouvrement.min_apres_credits_impots

impots_totaux_avant_imputations = iai + cehr - pfu - pfl
impots_totaux_apres_imputations = iai + cehr - pfu - pfl - credits_impot - acomptes_ir
impots_nets = iai + cehr - pfu - credits_impot - acomptes_ir

condition_1 = (impots_totaux_avant_imputations > seuil_avant_imputations) * ((impots_totaux_apres_imputations <= 0) + (impots_totaux_apres_imputations >= seuil_apres_imputations))
condition_2 = (impots_totaux_avant_imputations <= seuil_avant_imputations) * (impots_totaux_apres_imputations < 0)

return (condition_1 + condition_2) * (-impots_nets)
condition_correction_seuils_mise_recouvrement = ~(condition_1 | condition_2)

return condition_correction_seuils_mise_recouvrement * impots_avant_seuils_mise_recouvrement


class impot_revenu_restant_a_payer(Variable):
value_type = float
entity = FoyerFiscal
label = 'Impôt sur le revenu des personnes physiques restant à payer, après prise en compte des éventuels acomptes et des seuils de mise en recouvrement'
reference = 'https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000041464766'
definition_period = YEAR

def formula(foyer_fiscal, period, parameters):
impots_avant_seuils_recouvrement = foyer_fiscal('impot_revenu_avant_seuils_mise_recouvrement', period)
correction_seuils_recouvrement = foyer_fiscal('correction_ir_seuils_recouvrement', period)

return (impots_avant_seuils_recouvrement - correction_seuils_recouvrement)


class foyer_impose(Variable):
Expand Down
Loading