Skip to content

Commit

Permalink
barémise la csg et la crds
Browse files Browse the repository at this point in the history
 barémise la csg non salarié et chomage

fix

fix

fix

fix

fix tests

fix_tests

fix calcul csg bareme

enlève des modifications de tests qui étaient des erreurs

baremise la csg sur les retraites

fix rebase

Transforme le taux unique de crds en barème

Modifie formule CRDS salaires

Rectifie labels de certaines formules de CRDS

Modifie formule crds activité

Modifie formules crds chomage et retraite

Modifie formule de la CRDS d'un des revenus du capital

Modifie formule CRDS aides au logement

Modifie formule CRDS RSA

Modifie formule CRDS PPA

Modifie formule CRDS Allocations familiales

Modifie formule CRDS Allocation de rentrée scolaire

Modifie formule CRDS allocation de soutien familial

Modifie formule CRDS Complément familial

Modifie formules CRDS de la PAJE

Teste de modifier la formule de la CRDS crds_revenus_capital

Fix la formule capital

Supprime les paraètres CRDS présentant dans taxation_capital qui sont des doublons du taux de crds unique

fix test

fix appel taux crds

Fix erreur indentation et import

Ajoute les imports manquants de la fonction montant_csg_crds_bareme

fix

fix signe crds

fix index
  • Loading branch information
clallemand authored and b-michaud committed Nov 25, 2024
1 parent 445975a commit 08d47dc
Show file tree
Hide file tree
Showing 34 changed files with 382 additions and 220 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging

from openfisca_france.model.base import *
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme


log = logging.getLogger(__name__)
Expand Down Expand Up @@ -111,7 +111,7 @@ def formula(individu, period, parameters):
plafond_securite_sociale = individu('plafond_securite_sociale', period)

csg = parameters(period).prelevements_sociaux.contributions_sociales.csg
montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_avec_abattement = assiette_csg_abattue,
base_sans_abattement = assiette_csg_non_abattue,
abattement_parameter = csg.activite.abattement,
Expand All @@ -135,7 +135,7 @@ def formula(individu, period, parameters):
plafond_securite_sociale = individu('plafond_securite_sociale', period)
csg_parameters = parameters(period).prelevements_sociaux.contributions_sociales.csg

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_avec_abattement = assiette_csg_abattue,
base_sans_abattement = assiette_csg_non_abattue,
abattement_parameter = csg_parameters.activite.abattement,
Expand All @@ -161,7 +161,7 @@ def formula(individu, period, parameters):

parameters = parameters(period).prelevements_sociaux.contributions_sociales

montant_crds = montant_csg_crds(
montant_crds = montant_csg_crds_bareme(
law_node = parameters.crds,
base_avec_abattement = assiette_csg_abattue,
base_sans_abattement = assiette_csg_non_abattue,
Expand Down Expand Up @@ -418,39 +418,56 @@ def formula(individu, period):
class csg_imposable_non_salarie(Variable):
value_type = float
entity = Individu
label = 'Assiette CSG des personnes non salariées'
label = 'CSG des personnes non salariées'
definition_period = YEAR

def formula(individu, period, parameters):
assiette_csg_crds_non_salarie = individu('assiette_csg_crds_non_salarie', period)
csg = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite
taux = csg.imposable.taux
return - taux * assiette_csg_crds_non_salarie

montant_csg = montant_csg_crds_bareme(
base_sans_abattement = assiette_csg_crds_non_salarie,
law_node = csg.imposable,
)

return montant_csg


class csg_deductible_non_salarie(Variable):
value_type = float
entity = Individu
label = 'Assiette CSG des personnes non salariées'
label = 'CSG des personnes non salariées'
definition_period = YEAR

def formula(individu, period, parameters):
assiette_csg_crds_non_salarie = individu('assiette_csg_crds_non_salarie', period)
csg = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite
taux = csg.deductible.taux
return - taux * assiette_csg_crds_non_salarie

montant_csg = montant_csg_crds_bareme(
base_sans_abattement = assiette_csg_crds_non_salarie,
law_node = csg.deductible,
)

return montant_csg


class crds_non_salarie(Variable):
value_type = float
entity = Individu
label = 'Assiette CSG des personnes non salariées'
label = 'CRDS des personnes non salariées'
definition_period = YEAR

def formula(individu, period, parameters):
assiette_csg_crds_non_salarie = individu('assiette_csg_crds_non_salarie', period)
taux = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
return - taux * assiette_csg_crds_non_salarie

law = parameters(period)

montant_crds = montant_csg_crds_bareme(
base_sans_abattement = assiette_csg_crds_non_salarie,
law_node = law.prelevements_sociaux.contributions_sociales.crds,
)

return montant_crds


class revenus_non_salarie_nets(Variable):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,36 @@ def montant_csg_crds(base_avec_abattement = None, base_sans_abattement = None, i
+ law_node.taux_reduit * indicatrice_taux_reduit
+ law_node.taux_median * indicatrice_taux_intermediaire
) * base


def montant_csg_crds_bareme(base_avec_abattement = None, base_sans_abattement = None, indicatrice_taux_plein = None,
indicatrice_taux_intermediaire = None, indicatrice_taux_reduit = None, abattement_parameter = None, law_node = None, plafond_securite_sociale = None):
assert law_node is not None
if base_sans_abattement is None:
base_sans_abattement = 0
if base_avec_abattement is None:
base = base_sans_abattement
else:
assert plafond_securite_sociale is not None
assert abattement_parameter is not None
base = base_avec_abattement - abattement_parameter.calc(
base_avec_abattement,
factor = plafond_securite_sociale,
round_base_decimals = 2,
) + base_sans_abattement
if indicatrice_taux_plein is None and indicatrice_taux_reduit is None:
return -law_node.taux.calc(base)
elif indicatrice_taux_plein is not None and indicatrice_taux_reduit is not None and indicatrice_taux_intermediaire is None:
return -(
law_node.taux_plein.calc(base) * indicatrice_taux_plein
+ law_node.taux_reduit.calc(base) * indicatrice_taux_reduit
)
else:
assert indicatrice_taux_plein is not None
assert indicatrice_taux_reduit is not None
assert indicatrice_taux_intermediaire is not None
return -(
law_node.taux_plein.calc(base) * indicatrice_taux_plein
+ law_node.taux_reduit.calc(base) * indicatrice_taux_reduit
+ law_node.taux_median.calc(base) * indicatrice_taux_intermediaire
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import logging

from openfisca_france.model.base import *
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -318,7 +320,7 @@ class csg_glo_assimile_salaire_ir_et_ps(Variable):
def formula(individu, period, parameters):
f1tt = individu('f1tt', period)
csg_activite = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite
taux = csg_activite.imposable.taux + csg_activite.deductible.taux
taux = csg_activite.imposable.taux.rates[0] + csg_activite.deductible.taux.rates[0]
return - f1tt * taux


Expand All @@ -332,10 +334,16 @@ class crds_glo_assimile_salaire_ir_et_ps(Variable):

def formula(individu, period, parameters):
f1tt = individu('f1tt', period)
return - f1tt * (
parameters(period).prelevements_sociaux.contributions_sociales.crds.taux

law = parameters(period)

montant_crds = montant_csg_crds_bareme(
base_sans_abattement = f1tt,
law_node = law.prelevements_sociaux.contributions_sociales.crds,
)

return montant_crds


class contribution_salariale_glo_assimile_salaire(Variable):
calculate_output = calculate_output_add
Expand Down Expand Up @@ -390,16 +398,18 @@ class crds_revenus_capital(Variable):

def formula(foyer_fiscal, period, parameters):
assiette_csg_revenus_capital = foyer_fiscal('assiette_csg_revenus_capital', period)
prelevements_sociaux = parameters(period).taxation_capital.prelevements_sociaux

crds_glo_assimile_salaire_ir_et_ps_i = foyer_fiscal.members('crds_glo_assimile_salaire_ir_et_ps', period)
crds_glo_assimile_salaire_ir_et_ps = foyer_fiscal.sum(crds_glo_assimile_salaire_ir_et_ps_i)

return (
- assiette_csg_revenus_capital * prelevements_sociaux.crds.produits_de_placement
+ crds_glo_assimile_salaire_ir_et_ps
law = parameters(period)

montant_crds = montant_csg_crds_bareme(
base_sans_abattement = assiette_csg_revenus_capital,
law_node = law.prelevements_sociaux.contributions_sociales.crds,
)

return (montant_crds + crds_glo_assimile_salaire_ir_et_ps)


class prelevements_sociaux_revenus_capital_hors_csg_crds(Variable):
value_type = float
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import logging

from openfisca_france.model.base import *
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import (
montant_csg_crds
)
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme

log = logging.getLogger(__name__)


Expand Down Expand Up @@ -74,7 +73,7 @@ def formula_2015(individu, period, parameters):
chomage_cotisation_retraite_complementaire = individu('chomage_cotisation_retraite_complementaire', period)
assiette_csg_chomage = chomage_brut - chomage_cotisation_retraite_complementaire

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_avec_abattement = assiette_csg_chomage,
indicatrice_taux_plein = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_plein),
indicatrice_taux_reduit = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_reduit),
Expand Down Expand Up @@ -140,7 +139,7 @@ def formula_2015(individu, period, parameters):
chomage_cotisation_retraite_complementaire = individu('chomage_cotisation_retraite_complementaire', period)
assiette_csg_chomage = chomage_brut - chomage_cotisation_retraite_complementaire

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_avec_abattement = assiette_csg_chomage,
indicatrice_taux_plein = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_plein),
indicatrice_taux_reduit = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_reduit),
Expand Down Expand Up @@ -209,7 +208,7 @@ def formula_2015(individu, period, parameters):
(taux_csg_remplacement == TypesTauxCSGRemplacement.taux_reduit)
+ (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_plein)
)
montant_crds = montant_csg_crds(
montant_crds = montant_csg_crds_bareme(
base_avec_abattement = assiette_crds_chomage,
abattement_parameter = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement,
law_node = parameters.prelevements_sociaux.contributions_sociales.crds,
Expand Down Expand Up @@ -297,7 +296,7 @@ def formula_2019(individu, period, parameters):
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_intermediaire, TypesTauxCSGRetraite.taux_plein]
)

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_sans_abattement = retraite_brute,
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
Expand All @@ -321,7 +320,7 @@ def formula_2015(individu, period, parameters):
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_plein]
)

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_sans_abattement = retraite_brute,
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
Expand All @@ -334,7 +333,7 @@ def formula(individu, period, parameters): # formula_1997_2014 à corriger (cf.
retraite_brute = individu('retraite_brute', period)
parameters = parameters(period)

montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.deductible.taux_plein * retraite_brute
montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.deductible.taux_plein.rates[0] * retraite_brute
return - montant_csg


Expand Down Expand Up @@ -363,7 +362,7 @@ def formula_2019(individu, period, parameters):
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_intermediaire, TypesTauxCSGRetraite.taux_plein]
)

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_sans_abattement = retraite_brute,
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
Expand All @@ -387,7 +386,7 @@ def formula_2015(individu, period, parameters):
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_plein]
)

montant_csg = montant_csg_crds(
montant_csg = montant_csg_crds_bareme(
base_sans_abattement = retraite_brute,
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
Expand All @@ -400,7 +399,7 @@ def formula(individu, period, parameters): # formula_1997_2014 à corriger (cf.
retraite_brute = individu('retraite_brute', period)
parameters = parameters(period)

montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.imposable.taux_plein * retraite_brute
montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.imposable.taux_plein.rates[0] * retraite_brute
return - montant_csg


Expand Down Expand Up @@ -429,7 +428,7 @@ def formula_2019(individu, period, parameters):
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_intermediaire, TypesTauxCSGRetraite.taux_plein]
)

montant_crds = montant_csg_crds(
montant_crds = montant_csg_crds_bareme(
base_sans_abattement = retraite_brute,
law_node = parameters.prelevements_sociaux.contributions_sociales.crds,
plafond_securite_sociale = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel,
Expand All @@ -451,7 +450,7 @@ def formula_2015(individu, period, parameters):
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_plein]
)

montant_crds = montant_csg_crds(
montant_crds = montant_csg_crds_bareme(
base_sans_abattement = retraite_brute,
law_node = parameters.prelevements_sociaux.contributions_sociales.crds,
plafond_securite_sociale = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel,
Expand All @@ -461,7 +460,7 @@ def formula_2015(individu, period, parameters):
def formula(individu, period, parameters): # formula_1997_2014 à corriger (cf. commentaire au niveau de la variable)
retraite_brute = individu('retraite_brute', period)
parameters = parameters(period)
taux = parameters.prelevements_sociaux.contributions_sociales.crds.taux
taux = parameters.prelevements_sociaux.contributions_sociales.crds.taux.rates[0]

return - taux * retraite_brute

Expand Down
13 changes: 10 additions & 3 deletions openfisca_france/model/prestations/aides_logement.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from openfisca_france.model.base import *
from openfisca_france.model.revenus.activite.salarie import TypesConges
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf

from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -1410,8 +1410,15 @@ class crds_logement(Variable):

def formula(famille, period, parameters):
aide_logement_montant_brut = famille('aide_logement_montant_brut_crds', period)
crds = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
return -aide_logement_montant_brut * crds

law = parameters(period)

montant_crds = montant_csg_crds_bareme(
base_sans_abattement = aide_logement_montant_brut,
law_node = law.prelevements_sociaux.contributions_sociales.crds,
)

return montant_crds


class TypesZoneApl(Enum):
Expand Down
2 changes: 1 addition & 1 deletion openfisca_france/model/prestations/complement_are.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ def formula(individu, period, parameters):

# taux global par défaut : au demandeur d'emploi de suivre une démarche
# pour la prise en compte du RFR (exonération potentielle de CRDS)
taux_global_crds_chomage = parametres_prelevements_sociaux.contributions_sociales.crds.taux
taux_global_crds_chomage = parametres_prelevements_sociaux.contributions_sociales.crds.taux.rates[0]
crds_theorique = assiette_journaliere_crds * taux_global_crds_chomage

# après la CSG, la CRDS ne doit pas faire baisser le montant net de l'allocation en-dessous du smic brut
Expand Down
11 changes: 9 additions & 2 deletions openfisca_france/model/prestations/minima_sociaux/anciens_ms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from openfisca_france.model.base import *
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme


class api(Variable):
Expand Down Expand Up @@ -183,9 +184,15 @@ class crds_rsa_activite(Variable):

def formula_2009_06_01(famille, period, parameters):
rsa_activite = famille('rsa_activite', period)
taux_crds = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux

return - taux_crds * rsa_activite
law = parameters(period)

montant_crds = montant_csg_crds_bareme(
base_sans_abattement = rsa_activite,
law_node = law.prelevements_sociaux.contributions_sociales.crds,
)

return montant_crds


class rsa_activite_net_crds(Variable):
Expand Down
Loading

0 comments on commit 08d47dc

Please sign in to comment.