Skip to content

Commit

Permalink
Harmonisation IR Calcul Revenus Imposables - Part 2 (#1955)
Browse files Browse the repository at this point in the history
Harmonisation IR Calcul Revenus Imposables - Part 2 (#1955)
  • Loading branch information
Sasha-Laniece authored Dec 19, 2022
2 parents ec995c4 + 08b842d commit 79c44c5
Show file tree
Hide file tree
Showing 57 changed files with 3,619 additions and 514 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

# 132.0.0 [#1955](https://github.com/openfisca/openfisca-france/pull/1955)

* Évolution du système socio-fiscal. | Amélioration technique.
* Périodes concernées : toutes.
* Zones impactées : `openfisca_france/parameters/impot_revenu/calcul_revenus_imposables`
- exonerations: `exo_ir`
- rpns: `microentreprise` et `microsocial`

* Détails :
- Harmonisation et ajout de parametres
- Fusion des doublons

# 131.0.0 [#1952](https://github.com/openfisca/openfisca-france/pull/1952)

* Évolution du système socio-fiscal. | Amélioration technique.
Expand Down
83 changes: 42 additions & 41 deletions openfisca_france/model/prelevements_obligatoires/impot_revenu/ir.py
Original file line number Diff line number Diff line change
Expand Up @@ -936,18 +936,18 @@ def formula(foyer_fiscal, period, parameters):
log.error(('Problème de déclarations des revenus : incompatibilité de la déclaration des revenus fonciers (f4ba) et de déficits (f4bb, f4bc)'))
if ((f4be != 0) & ((f4ba != 0) | (f4bb != 0) | (f4bc != 0))).any():
log.error(('Problème de déclarations des revenus : incompatibilité de la déclaration des revenus fonciers (f4ba, f4bb, f4bc) et microfonciers (f4be)'))
if (f4be > microfoncier.max).any():
if (f4be > microfoncier.plafond_recettes).any():
log.error(('Problème de déclarations des revenus : les revenus microfonciers (f4be) dépassent le maximum légal'))

micro = min_(f4be, microfoncier.max) * (1 - microfoncier.taux)
micro = min_(f4be, microfoncier.plafond_recettes) * (1 - microfoncier.taux)

# Conditions
deficit = (f4bc > 0) | (f4bb > 0)
micro = f4be > 0

# Calculs
si_deficit = -f4bc
si_micro = min_(f4be, microfoncier.max) * (1 - microfoncier.taux)
si_micro = min_(f4be, microfoncier.plafond_recettes) * (1 - microfoncier.taux)
sinon = max_(0, f4ba - f4bd)

return select([deficit, micro],
Expand Down Expand Up @@ -1606,7 +1606,7 @@ def formula_2009_01_01(foyer_fiscal, period, parameters):
# http://vosdroits.service-public.fr/professionnels-entreprises/F23267.xhtml
return foyer_fiscal.sum(ebnc_impo_i)

# assert (ebnc_impo <= P.specialbnc.max)
# assert (ebnc_impo <= P.microentreprise.regime_micro_bnc.services.plafond)


class microsocial(Variable):
Expand Down Expand Up @@ -1644,9 +1644,9 @@ def formula_2009_01_01(foyer_fiscal, period, parameters):
ebic_imps = foyer_fiscal.sum(ebic_imps_i)
ebic_impv = foyer_fiscal.sum(ebic_impv_i)
return (
max_(0, ebnc_impo - max_(micro.microentreprise.montant_minimum, micro.specialbnc.taux * ebnc_impo))
+ max_(0, ebic_imps - max_(micro.microentreprise.montant_minimum, micro.microentreprise.taux_prestations_de_services * ebic_imps))
+ max_(0, ebic_impv - max_(micro.microentreprise.montant_minimum, micro.microentreprise.taux_ventes_de_marchandises * ebic_impv))
max_(0, ebnc_impo - max_(micro.microentreprise.montant_minimum, micro.microentreprise.regime_micro_bnc.taux * ebnc_impo))
+ max_(0, ebic_imps - max_(micro.microentreprise.montant_minimum, micro.microentreprise.regime_micro_bnc.services.taux * ebic_imps))
+ max_(0, ebic_impv - max_(micro.microentreprise.montant_minimum, micro.microentreprise.regime_micro_bnc.marchandises.taux * ebic_impv))
)


Expand Down Expand Up @@ -2514,14 +2514,14 @@ def formula(foyer_fiscal, period, parameters):
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

def abat_rpns(rev, P):
return max_(0, rev - min_(rev, max_(P.taux * min_(P.max, rev), P.min)))
return max_(0, rev - min_(rev, max_(P.taux * min_(P.plafond, rev), micro.microentreprise.montant_minimum)))

nacc_impn = foyer_fiscal.sum(nacc_impn_i)
macc_pvct = foyer_fiscal.sum(macc_pvct_i)
macc_impv = foyer_fiscal.sum(macc_impv_i)
macc_imps = foyer_fiscal.sum(macc_imps_i)
aacc_impn = foyer_fiscal.sum(aacc_impn_i)
macc_timp = abat_rpns(macc_impv, micro.specialbnc.marchandises) + abat_rpns(macc_imps, micro.specialbnc.services)
macc_timp = abat_rpns(macc_impv, micro.microentreprise.regime_micro_bnc.marchandises) + abat_rpns(macc_imps, micro.microentreprise.regime_micro_bnc.services)
return (
min_(f5rn + f5ro + f5rp + f5rq + f5rr + f5rw, aacc_impn + macc_pvct + macc_timp + (1 + cga) * nacc_impn)
)
Expand All @@ -2545,10 +2545,11 @@ def formula(foyer_fiscal, period, parameters):
cncn_aimp_i = foyer_fiscal.members('cncn_aimp', period)
cncn_bene_i = foyer_fiscal.members('cncn_bene', period)
cga = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.cga_taux2
specialbnc = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro.specialbnc
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro
specialbnc = micro.microentreprise.regime_micro_bnc

def abat_rpns(rev, P):
return max_(0, rev - min_(rev, max_(P.taux * min_(P.max, rev), P.min)))
return max_(0, rev - min_(rev, max_(P.taux * min_(P.plafond, rev), micro.microentreprise.montant_minimum)))
cncn_bene = foyer_fiscal.sum(cncn_bene_i)
mncn_impo = foyer_fiscal.sum(mncn_impo_i)
mncn_pvct = foyer_fiscal.sum(mncn_pvct_i)
Expand Down Expand Up @@ -2653,14 +2654,14 @@ def formula(individu, period, parameters):
)

cond = (mbic_impv > 0) & (mbic_imps == 0)
taux = micro.specialbnc.marchandises.taux * cond + micro.specialbnc.services.taux * not_(cond)
taux = micro.microentreprise.regime_micro_bnc.marchandises.taux * cond + micro.microentreprise.regime_micro_bnc.services.taux * not_(cond)

cbic = min_(
mbic_impv + mbic_imps + mbic_exon,
max_(
micro.specialbnc.marchandises.min,
micro.microentreprise.montant_minimum,
round_(
mbic_impv * micro.specialbnc.marchandises.taux + mbic_imps * micro.specialbnc.services.taux + mbic_exon * taux
mbic_impv * micro.microentreprise.regime_micro_bnc.marchandises.taux + mbic_imps * micro.microentreprise.regime_micro_bnc.services.taux + mbic_exon * taux
)
)
)
Expand Down Expand Up @@ -2704,12 +2705,12 @@ def formula(individu, period, parameters):

# TODO: aacc_imps aacc_defs
cond = (macc_impv > 0) & (macc_imps == 0)
taux = micro.specialbnc.marchandises.taux * cond + micro.specialbnc.services.taux * not_(cond)
taux = micro.microentreprise.regime_micro_bnc.marchandises.taux * cond + micro.microentreprise.regime_micro_bnc.services.taux * not_(cond)

cacc = min_(macc_impv + macc_imps + macc_exon + mncn_impo, max_(micro.specialbnc.marchandises.min, round_(
macc_impv * micro.specialbnc.marchandises.taux
+ macc_imps * micro.specialbnc.services.taux + macc_exon * taux
+ mncn_impo * micro.specialbnc.taux)))
cacc = min_(macc_impv + macc_imps + macc_exon + mncn_impo, max_(micro.microentreprise.montant_minimum, round_(
macc_impv * micro.microentreprise.regime_micro_bnc.marchandises.taux
+ macc_imps * micro.microentreprise.regime_micro_bnc.services.taux + macc_exon * taux
+ mncn_impo * micro.microentreprise.regime_micro_bnc.taux)))

return zacc - cacc

Expand All @@ -2733,7 +2734,7 @@ def formula(individu, period, parameters):
nbnc_impo = individu('nbnc_impo', period)
abnc_defi = individu('abnc_defi', period)
nbnc_defi = individu('nbnc_defi', period)
specialbnc = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro.specialbnc
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro.microentreprise

zbnc = (
mbnc_exon + mbnc_impo
Expand All @@ -2745,8 +2746,8 @@ def formula(individu, period, parameters):
cbnc = min_(
mbnc_exon + mbnc_impo,
max_(
specialbnc.services.min,
round_((mbnc_exon + mbnc_impo) * specialbnc.taux)
micro.montant_minimum,
round_((mbnc_exon + mbnc_impo) * micro.regime_micro_bnc.taux)
)
)

Expand Down Expand Up @@ -2877,8 +2878,8 @@ def formula_2016_01_01(individu, period, parameters):
date_creation = individu('date_creation', period)
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

frag_impo_n2_maj = frag_impo_n2 * (1 + micro.maj_frag)
frag_impo_n1_maj = frag_impo_n1 * (1 + micro.maj_frag)
frag_impo_n2_maj = frag_impo_n2 * (1 + micro.microentreprise.regime_micro_ba.maj_frag)
frag_impo_n1_maj = frag_impo_n1 * (1 + micro.microentreprise.regime_micro_ba.maj_frag)
benefices_estimes_3 = (mrag_impo + frag_impo_n2_maj + arag_impo_n2 + frag_impo_n1_maj + arag_impo_n1) / 3
benefices_estimes_2 = (mrag_impo + frag_impo_n1_maj + arag_impo_n1) / 2

Expand All @@ -2888,7 +2889,7 @@ def formula_2016_01_01(individu, period, parameters):
+ (date_creation == 2016) * mrag_impo
)

return montant_benef * (1 - micro.taux_mBA)
return montant_benef * (1 - micro.microentreprise.regime_micro_ba.taux)

def formula_2017_01_01(individu, period, parameters):
mrag_impo = individu('mrag_impo', period)
Expand All @@ -2898,7 +2899,7 @@ def formula_2017_01_01(individu, period, parameters):
date_creation = individu('date_creation', period)
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

frag_impo_n2_maj = frag_impo_n2 * (1 + micro.maj_frag)
frag_impo_n2_maj = frag_impo_n2 * (1 + micro.microentreprise.regime_micro_ba.maj_frag)
benefices_estimes_3 = (mrag_impo + frag_impo_n2_maj + arag_impo_n2 + frag_impo_n1) / 3
benefices_estimes_2 = (mrag_impo + frag_impo_n1) / 2

Expand All @@ -2908,13 +2909,13 @@ def formula_2017_01_01(individu, period, parameters):
+ (date_creation == 2017) * mrag_impo
)

return montant_benef * (1 - micro.taux_mBA)
return montant_benef * (1 - micro.microentreprise.regime_micro_ba.taux)

def formula_2018_01_01(individu, period, parameters):
mrag_impo = individu('mrag_impo', period)
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

return mrag_impo * (1 - micro.taux_mBA)
return mrag_impo * (1 - micro.microentreprise.regime_micro_ba.taux)


class rpns_imposables(Variable):
Expand Down Expand Up @@ -2992,7 +2993,7 @@ def formula(individu, period, parameters):
micro = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

def abat_rpns(rev, P):
return max_(0, rev - min_(rev, max_(P.taux * min_(P.max, rev), P.min)))
return max_(0, rev - min_(rev, max_(P.taux * min_(P.plafond, rev), micro.microentreprise.montant_minimum)))

# Jeunes agriculteurs montant de l'abattement de 50% ou 100%
# nrag_ajag = f5hm + f5im + f5jm
Expand All @@ -3009,7 +3010,7 @@ def abat_rpns(rev, P):

# # B revenus industriels et commerciaux professionnels
# regime micro entreprise
mbic_timp = abat_rpns(mbic_impv, micro.specialbnc.marchandises) + abat_rpns(mbic_imps, micro.specialbnc.services)
mbic_timp = abat_rpns(mbic_impv, micro.microentreprise.regime_micro_bnc.marchandises) + abat_rpns(mbic_imps, micro.microentreprise.regime_micro_bnc.services)

# Régime du bénéfice réel bénéficiant de l'abattement CGA
abic_timp = abic_impn + abic_imps - (abic_defn + abic_defs)
Expand All @@ -3024,26 +3025,26 @@ def abat_rpns(rev, P):
# (revenus accesoires du foyers en nomenclature INSEE)

# regime micro entreprise
macc_timp = abat_rpns(macc_impv, micro.specialbnc.marchandises) + abat_rpns(macc_imps, micro.specialbnc.services)
macc_timp = abat_rpns(macc_impv, micro.microentreprise.regime_micro_bnc.marchandises) + abat_rpns(macc_imps, micro.microentreprise.regime_micro_bnc.services)
# Régime du bénéfice réel bénéficiant de l'abattement CGA
aacc_timp = (
max_(
0,
(aacc_impn + (aacc_gits > 0) * max_(
micro.specialbnc.services.min,
aacc_gits * (1 - micro.specialbnc.marchandises.taux)
micro.microentreprise.montant_minimum,
aacc_gits * (1 - micro.microentreprise.regime_micro_bnc.marchandises.taux)
))
+ (aacc_imps > 0) * max_(
micro.specialbnc.marchandises.min,
aacc_imps * (1 - micro.specialbnc.services.taux)
micro.microentreprise.montant_minimum,
aacc_imps * (1 - micro.microentreprise.regime_micro_bnc.services.taux)
)
+ (nacc_meup > 0) * max_(
micro.specialbnc.services.min,
nacc_meup * (1 - micro.specialbnc.marchandises.taux)
micro.microentreprise.montant_minimum,
nacc_meup * (1 - micro.microentreprise.regime_micro_bnc.marchandises.taux)
)
+ (nacc_meuc > 0) * max_(
micro.specialbnc.services.min,
nacc_meuc * (1 - micro.specialbnc.services.taux)
micro.microentreprise.montant_minimum,
nacc_meuc * (1 - micro.microentreprise.regime_micro_bnc.services.taux)
)
+ max_(0, nacc_defs - alnp_defs) - aacc_defn - aacc_defs
)
Expand All @@ -3053,7 +3054,7 @@ def abat_rpns(rev, P):

# # E revenus non commerciaux non professionnels
# regime déclaratif special ou micro-bnc
mncn_timp = abat_rpns(mncn_impo, micro.specialbnc)
mncn_timp = abat_rpns(mncn_impo, micro.microentreprise.regime_micro_bnc.services)

# régime de la déclaration controlée
# total 11
Expand All @@ -3062,7 +3063,7 @@ def abat_rpns(rev, P):

# # D revenus non commerciaux professionnels
# regime déclaratif special ou micro-bnc
mbnc_timp = abat_rpns(mbnc_impo, micro.specialbnc)
mbnc_timp = abat_rpns(mbnc_impo, micro.microentreprise.regime_micro_bnc.services)

# regime de la déclaration contrôlée bénéficiant de l'abattement association agréée
abnc_timp = abnc_impo - abnc_defi
Expand Down
4 changes: 2 additions & 2 deletions openfisca_france/model/prestations/minima_sociaux/rsa.py
Original file line number Diff line number Diff line change
Expand Up @@ -761,8 +761,8 @@ def eligibilite_agricole(has_conjoint, rsa_nb_enfants, rpns_benefice_agricole, P
return rpns_benefice_agricole < plafond_benefice_agricole_majore

def eligibilite_chiffre_affaire(ca, type_activite, P_micro):
plaf_vente = P_micro.specialbnc.marchandises.max
plaf_service = P_micro.specialbnc.services.max
plaf_vente = P_micro.microentreprise.regime_micro_bnc.marchandises.plafond
plaf_service = P_micro.microentreprise.regime_micro_bnc.services.plafond

TypesTnsTypeActivite = type_activite.possible_values
achat_revente = (type_activite == TypesTnsTypeActivite.achat_revente)
Expand Down
12 changes: 6 additions & 6 deletions openfisca_france/model/revenus/activite/non_salarie.py
Original file line number Diff line number Diff line change
Expand Up @@ -2117,9 +2117,9 @@ def formula_2008_01_01(individu, period, parameters):

bareme = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

benefice = ((rpns_auto_entrepreneur_CA_achat_revente * (1 - bareme.microentreprise.taux_ventes_de_marchandises))
+ (rpns_auto_entrepreneur_CA_bnc * (1 - bareme.specialbnc.taux))
+ (rpns_auto_entrepreneur_CA_bic * (1 - bareme.microentreprise.taux_prestations_de_services)))
benefice = ((rpns_auto_entrepreneur_CA_achat_revente * (1 - bareme.microentreprise.regime_micro_bnc.marchandises.taux))
+ (rpns_auto_entrepreneur_CA_bnc * (1 - bareme.microentreprise.regime_micro_bnc.taux))
+ (rpns_auto_entrepreneur_CA_bic * (1 - bareme.microentreprise.regime_micro_bnc.services.taux)))

return benefice

Expand All @@ -2140,9 +2140,9 @@ def formula_2008_01_01(individu, period, parameters):

bareme = parameters(period).impot_revenu.calcul_revenus_imposables.rpns.micro

benefice = ((rpns_micro_entreprise_CA_bic_vente_imp * (1 - bareme.microentreprise.taux_ventes_de_marchandises))
+ (rpns_micro_entreprise_CA_bnc_imp * (1 - bareme.specialbnc.taux))
+ (rpns_micro_entreprise_CA_bic_service_imp * (1 - bareme.microentreprise.taux_prestations_de_services))
benefice = ((rpns_micro_entreprise_CA_bic_vente_imp * (1 - bareme.microentreprise.regime_micro_bnc.marchandises.taux))
+ (rpns_micro_entreprise_CA_bnc_imp * (1 - bareme.microentreprise.regime_micro_bnc.taux))
+ (rpns_micro_entreprise_CA_bic_service_imp * (1 - bareme.microentreprise.regime_micro_bnc.services.taux))
+ rpns_micro_entreprise_CA_bnc_exon
+ rpns_micro_entreprise_bic_exon)

Expand Down

This file was deleted.

This file was deleted.

Loading

0 comments on commit 79c44c5

Please sign in to comment.