Skip to content

Commit cb4edd1

Browse files
cglbenoit-cty
authored andcommitted
barémise la csg et la crds
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 fix fix supprime l'appel du pss qui n'est pas utilisé dans la csg_retraite
1 parent e2c0034 commit cb4edd1

File tree

30 files changed

+382
-184
lines changed

30 files changed

+382
-184
lines changed

openfisca_france/model/prelevements_obligatoires/prelevements_sociaux/contributions_sociales/activite.py

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22

33
from openfisca_france.model.base import *
4-
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds
4+
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme
55

66

77
log = logging.getLogger(__name__)
@@ -111,7 +111,7 @@ def formula(individu, period, parameters):
111111
plafond_securite_sociale = individu('plafond_securite_sociale', period)
112112

113113
csg = parameters(period).prelevements_sociaux.contributions_sociales.csg
114-
montant_csg = montant_csg_crds(
114+
montant_csg = montant_csg_crds_bareme(
115115
base_avec_abattement = assiette_csg_abattue,
116116
base_sans_abattement = assiette_csg_non_abattue,
117117
abattement_parameter = csg.activite.abattement,
@@ -135,7 +135,7 @@ def formula(individu, period, parameters):
135135
plafond_securite_sociale = individu('plafond_securite_sociale', period)
136136
csg_parameters = parameters(period).prelevements_sociaux.contributions_sociales.csg
137137

138-
montant_csg = montant_csg_crds(
138+
montant_csg = montant_csg_crds_bareme(
139139
base_avec_abattement = assiette_csg_abattue,
140140
base_sans_abattement = assiette_csg_non_abattue,
141141
abattement_parameter = csg_parameters.activite.abattement,
@@ -161,7 +161,7 @@ def formula(individu, period, parameters):
161161

162162
parameters = parameters(period).prelevements_sociaux.contributions_sociales
163163

164-
montant_crds = montant_csg_crds(
164+
montant_crds = montant_csg_crds_bareme(
165165
law_node = parameters.crds,
166166
base_avec_abattement = assiette_csg_abattue,
167167
base_sans_abattement = assiette_csg_non_abattue,
@@ -418,40 +418,57 @@ def formula(individu, period):
418418
class csg_imposable_non_salarie(Variable):
419419
value_type = float
420420
entity = Individu
421-
label = 'Assiette CSG des personnes non salariées'
421+
label = 'CSG des personnes non salariées'
422422
definition_period = YEAR
423423

424424
def formula(individu, period, parameters):
425425
assiette_csg_crds_non_salarie = individu('assiette_csg_crds_non_salarie', period)
426426
csg = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite
427-
taux = csg.imposable.taux
428-
return - taux * assiette_csg_crds_non_salarie
427+
428+
montant_csg = montant_csg_crds_bareme(
429+
base_sans_abattement = assiette_csg_crds_non_salarie,
430+
law_node = csg.imposable,
431+
)
432+
433+
return montant_csg
429434

430435

431436
class csg_deductible_non_salarie(Variable):
432437
value_type = float
433438
entity = Individu
434-
label = 'Assiette CSG des personnes non salariées'
439+
label = 'CSG des personnes non salariées'
435440
definition_period = YEAR
436441

437442
def formula(individu, period, parameters):
438443
assiette_csg_crds_non_salarie = individu('assiette_csg_crds_non_salarie', period)
439444
csg = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite
440-
taux = csg.deductible.taux
441-
return - taux * assiette_csg_crds_non_salarie
445+
446+
montant_csg = montant_csg_crds_bareme(
447+
base_sans_abattement = assiette_csg_crds_non_salarie,
448+
law_node = csg.deductible,
449+
)
450+
451+
return montant_csg
442452

443453

444454
class crds_non_salarie(Variable):
445455
calculate_output = calculate_output_add
446456
value_type = float
447457
entity = Individu
448-
label = 'Assiette CSG des personnes non salariées'
458+
label = 'CRDS des personnes non salariées'
449459
definition_period = YEAR
450460

451461
def formula(individu, period, parameters):
452462
assiette_csg_crds_non_salarie = individu('assiette_csg_crds_non_salarie', period)
453-
taux = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
454-
return - taux * assiette_csg_crds_non_salarie
463+
464+
law = parameters(period)
465+
466+
montant_crds = montant_csg_crds_bareme(
467+
base_sans_abattement = assiette_csg_crds_non_salarie,
468+
law_node = law.prelevements_sociaux.contributions_sociales.crds,
469+
)
470+
471+
return montant_crds
455472

456473

457474
class revenus_non_salarie_nets(Variable):

openfisca_france/model/prelevements_obligatoires/prelevements_sociaux/contributions_sociales/base.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,36 @@ def montant_csg_crds(base_avec_abattement = None, base_sans_abattement = None, i
3131
+ law_node.taux_reduit * indicatrice_taux_reduit
3232
+ law_node.taux_median * indicatrice_taux_intermediaire
3333
) * base
34+
35+
36+
def montant_csg_crds_bareme(base_avec_abattement = None, base_sans_abattement = None, indicatrice_taux_plein = None,
37+
indicatrice_taux_intermediaire = None, indicatrice_taux_reduit = None, abattement_parameter = None, law_node = None, plafond_securite_sociale = None):
38+
assert law_node is not None
39+
if base_sans_abattement is None:
40+
base_sans_abattement = 0
41+
if base_avec_abattement is None:
42+
base = base_sans_abattement
43+
else:
44+
assert plafond_securite_sociale is not None
45+
assert abattement_parameter is not None
46+
base = base_avec_abattement - abattement_parameter.calc(
47+
base_avec_abattement,
48+
factor = plafond_securite_sociale,
49+
round_base_decimals = 2,
50+
) + base_sans_abattement
51+
if indicatrice_taux_plein is None and indicatrice_taux_reduit is None:
52+
return -law_node.taux.calc(base)
53+
elif indicatrice_taux_plein is not None and indicatrice_taux_reduit is not None and indicatrice_taux_intermediaire is None:
54+
return -(
55+
law_node.taux_plein.calc(base) * indicatrice_taux_plein
56+
+ law_node.taux_reduit.calc(base) * indicatrice_taux_reduit
57+
)
58+
else:
59+
assert indicatrice_taux_plein is not None
60+
assert indicatrice_taux_reduit is not None
61+
assert indicatrice_taux_intermediaire is not None
62+
return -(
63+
law_node.taux_plein.calc(base) * indicatrice_taux_plein
64+
+ law_node.taux_reduit.calc(base) * indicatrice_taux_reduit
65+
+ law_node.taux_median.calc(base) * indicatrice_taux_intermediaire
66+
)

openfisca_france/model/prelevements_obligatoires/prelevements_sociaux/contributions_sociales/capital.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import logging
2+
23
from openfisca_france.model.base import *
4+
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme
35

46
log = logging.getLogger(__name__)
57

@@ -318,7 +320,7 @@ class csg_glo_assimile_salaire_ir_et_ps(Variable):
318320
def formula(individu, period, parameters):
319321
f1tt = individu('f1tt', period)
320322
csg_activite = parameters(period).prelevements_sociaux.contributions_sociales.csg.activite
321-
taux = csg_activite.imposable.taux + csg_activite.deductible.taux
323+
taux = csg_activite.imposable.taux.rates[0] + csg_activite.deductible.taux.rates[0]
322324
return - f1tt * taux
323325

324326

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

333335
def formula(individu, period, parameters):
334336
f1tt = individu('f1tt', period)
335-
return - f1tt * (
336-
parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
337+
338+
law = parameters(period)
339+
340+
montant_crds = montant_csg_crds_bareme(
341+
base_sans_abattement = f1tt,
342+
law_node = law.prelevements_sociaux.contributions_sociales.crds,
337343
)
338344

345+
return montant_crds
346+
339347

340348
class contribution_salariale_glo_assimile_salaire(Variable):
341349
calculate_output = calculate_output_add
@@ -391,16 +399,18 @@ class crds_revenus_capital(Variable):
391399

392400
def formula(foyer_fiscal, period, parameters):
393401
assiette_csg_revenus_capital = foyer_fiscal('assiette_csg_revenus_capital', period)
394-
taux_crds = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
395-
396402
crds_glo_assimile_salaire_ir_et_ps_i = foyer_fiscal.members('crds_glo_assimile_salaire_ir_et_ps', period)
397403
crds_glo_assimile_salaire_ir_et_ps = foyer_fiscal.sum(crds_glo_assimile_salaire_ir_et_ps_i)
398404

399-
return (
400-
- assiette_csg_revenus_capital * taux_crds
401-
+ crds_glo_assimile_salaire_ir_et_ps
405+
law = parameters(period)
406+
407+
montant_crds = montant_csg_crds_bareme(
408+
base_sans_abattement = assiette_csg_revenus_capital,
409+
law_node = law.prelevements_sociaux.contributions_sociales.crds,
402410
)
403411

412+
return (montant_crds + crds_glo_assimile_salaire_ir_et_ps)
413+
404414

405415
class prelevements_sociaux_revenus_capital_hors_csg_crds(Variable):
406416
value_type = float

openfisca_france/model/prelevements_obligatoires/prelevements_sociaux/contributions_sociales/remplacement.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import logging
22

33
from openfisca_france.model.base import *
4-
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import (
5-
montant_csg_crds
6-
)
4+
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme
5+
76
log = logging.getLogger(__name__)
87

98

@@ -74,7 +73,7 @@ def formula_2015(individu, period, parameters):
7473
chomage_cotisation_retraite_complementaire = individu('chomage_cotisation_retraite_complementaire', period)
7574
assiette_csg_chomage = chomage_brut - chomage_cotisation_retraite_complementaire
7675

77-
montant_csg = montant_csg_crds(
76+
montant_csg = montant_csg_crds_bareme(
7877
base_avec_abattement = assiette_csg_chomage,
7978
indicatrice_taux_plein = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_plein),
8079
indicatrice_taux_reduit = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_reduit),
@@ -140,7 +139,7 @@ def formula_2015(individu, period, parameters):
140139
chomage_cotisation_retraite_complementaire = individu('chomage_cotisation_retraite_complementaire', period)
141140
assiette_csg_chomage = chomage_brut - chomage_cotisation_retraite_complementaire
142141

143-
montant_csg = montant_csg_crds(
142+
montant_csg = montant_csg_crds_bareme(
144143
base_avec_abattement = assiette_csg_chomage,
145144
indicatrice_taux_plein = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_plein),
146145
indicatrice_taux_reduit = (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_reduit),
@@ -209,7 +208,7 @@ def formula_2015(individu, period, parameters):
209208
(taux_csg_remplacement == TypesTauxCSGRemplacement.taux_reduit)
210209
+ (taux_csg_remplacement == TypesTauxCSGRemplacement.taux_plein)
211210
)
212-
montant_crds = montant_csg_crds(
211+
montant_crds = montant_csg_crds_bareme(
213212
base_avec_abattement = assiette_crds_chomage,
214213
abattement_parameter = parameters.prelevements_sociaux.contributions_sociales.csg.activite.abattement,
215214
law_node = parameters.prelevements_sociaux.contributions_sociales.crds,
@@ -297,7 +296,7 @@ def formula_2019(individu, period, parameters):
297296
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_intermediaire, TypesTauxCSGRetraite.taux_plein]
298297
)
299298

300-
montant_csg = montant_csg_crds(
299+
montant_csg = montant_csg_crds_bareme(
301300
base_sans_abattement = retraite_brute,
302301
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
303302
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
@@ -321,20 +320,19 @@ def formula_2015(individu, period, parameters):
321320
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_plein]
322321
)
323322

324-
montant_csg = montant_csg_crds(
323+
montant_csg = montant_csg_crds_bareme(
325324
base_sans_abattement = retraite_brute,
326325
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
327326
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
328327
law_node = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.deductible,
329-
plafond_securite_sociale = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel,
330328
)
331329
return montant_csg
332330

333331
def formula(individu, period, parameters): # formula_1997_2014 à corriger (cf. commentaire au niveau de la variable)
334332
retraite_brute = individu('retraite_brute', period)
335333
parameters = parameters(period)
336334

337-
montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.deductible.taux_plein * retraite_brute
335+
montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.deductible.taux_plein.rates[0] * retraite_brute
338336
return - montant_csg
339337

340338

@@ -363,13 +361,12 @@ def formula_2019(individu, period, parameters):
363361
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_intermediaire, TypesTauxCSGRetraite.taux_plein]
364362
)
365363

366-
montant_csg = montant_csg_crds(
364+
montant_csg = montant_csg_crds_bareme(
367365
base_sans_abattement = retraite_brute,
368366
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
369367
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
370368
indicatrice_taux_intermediaire = (taux_csg_retraite == TypesTauxCSGRetraite.taux_intermediaire),
371369
law_node = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.imposable,
372-
plafond_securite_sociale = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel,
373370
)
374371
return montant_csg
375372

@@ -387,7 +384,7 @@ def formula_2015(individu, period, parameters):
387384
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_plein]
388385
)
389386

390-
montant_csg = montant_csg_crds(
387+
montant_csg = montant_csg_crds_bareme(
391388
base_sans_abattement = retraite_brute,
392389
indicatrice_taux_plein = (taux_csg_retraite == TypesTauxCSGRetraite.taux_plein),
393390
indicatrice_taux_reduit = (taux_csg_retraite == TypesTauxCSGRetraite.taux_reduit),
@@ -400,7 +397,7 @@ def formula(individu, period, parameters): # formula_1997_2014 à corriger (cf.
400397
retraite_brute = individu('retraite_brute', period)
401398
parameters = parameters(period)
402399

403-
montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.imposable.taux_plein * retraite_brute
400+
montant_csg = parameters.prelevements_sociaux.contributions_sociales.csg.remplacement.pensions_retraite_invalidite.imposable.taux_plein.rates[0] * retraite_brute
404401
return - montant_csg
405402

406403

@@ -429,7 +426,7 @@ def formula_2019(individu, period, parameters):
429426
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_intermediaire, TypesTauxCSGRetraite.taux_plein]
430427
)
431428

432-
montant_crds = montant_csg_crds(
429+
montant_crds = montant_csg_crds_bareme(
433430
base_sans_abattement = retraite_brute,
434431
law_node = parameters.prelevements_sociaux.contributions_sociales.crds,
435432
plafond_securite_sociale = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel,
@@ -451,7 +448,7 @@ def formula_2015(individu, period, parameters):
451448
[TypesTauxCSGRetraite.exonere, TypesTauxCSGRetraite.taux_reduit, TypesTauxCSGRetraite.taux_plein]
452449
)
453450

454-
montant_crds = montant_csg_crds(
451+
montant_crds = montant_csg_crds_bareme(
455452
base_sans_abattement = retraite_brute,
456453
law_node = parameters.prelevements_sociaux.contributions_sociales.crds,
457454
plafond_securite_sociale = parameters.prelevements_sociaux.pss.plafond_securite_sociale_mensuel,
@@ -461,7 +458,7 @@ def formula_2015(individu, period, parameters):
461458
def formula(individu, period, parameters): # formula_1997_2014 à corriger (cf. commentaire au niveau de la variable)
462459
retraite_brute = individu('retraite_brute', period)
463460
parameters = parameters(period)
464-
taux = parameters.prelevements_sociaux.contributions_sociales.crds.taux
461+
taux = parameters.prelevements_sociaux.contributions_sociales.crds.taux.rates[0]
465462

466463
return - taux * retraite_brute
467464

openfisca_france/model/prestations/aides_logement.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from openfisca_france.model.base import *
1414
from openfisca_france.model.revenus.activite.salarie import TypesConges
1515
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf
16-
16+
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme
1717

1818
log = logging.getLogger(__name__)
1919

@@ -1450,8 +1450,15 @@ class crds_logement(Variable):
14501450

14511451
def formula(famille, period, parameters):
14521452
aide_logement_montant_brut = famille('aide_logement_montant_brut_crds', period)
1453-
crds = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
1454-
return -aide_logement_montant_brut * crds
1453+
1454+
law = parameters(period)
1455+
1456+
montant_crds = montant_csg_crds_bareme(
1457+
base_sans_abattement = aide_logement_montant_brut,
1458+
law_node = law.prelevements_sociaux.contributions_sociales.crds,
1459+
)
1460+
1461+
return montant_crds
14551462

14561463

14571464
class TypesZoneApl(Enum):

openfisca_france/model/prestations/complement_are.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def formula(individu, period, parameters):
317317

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

323323
# après la CSG, la CRDS ne doit pas faire baisser le montant net de l'allocation en-dessous du smic brut

openfisca_france/model/prestations/minima_sociaux/anciens_ms.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from openfisca_france.model.base import *
44
from openfisca_france.model.prestations.prestations_familiales.base_ressource import nb_enf
5+
from openfisca_france.model.prelevements_obligatoires.prelevements_sociaux.contributions_sociales.base import montant_csg_crds_bareme
56

67

78
class api(Variable):
@@ -184,9 +185,15 @@ class crds_rsa_activite(Variable):
184185

185186
def formula_2009_06_01(famille, period, parameters):
186187
rsa_activite = famille('rsa_activite', period)
187-
taux_crds = parameters(period).prelevements_sociaux.contributions_sociales.crds.taux
188188

189-
return - taux_crds * rsa_activite
189+
law = parameters(period)
190+
191+
montant_crds = montant_csg_crds_bareme(
192+
base_sans_abattement = rsa_activite,
193+
law_node = law.prelevements_sociaux.contributions_sociales.crds,
194+
)
195+
196+
return montant_crds
190197

191198

192199
class rsa_activite_net_crds(Variable):

0 commit comments

Comments
 (0)