Le système de retraite français est composé de différents régimes qui sont modélisés en utilisant le formalisme d'OpenFisca. Ainsi le système complet est un système socio-fiscal (TaxBenefitSystem
) comprenant les caractéristiques des individus sous forme de variables Variables
rattachées à des entités (Entities
). Dans le cas qui nous intéresse les entités utilisées sont l'individu et ses ayants-droits.
Les caractéristiques des individus sont celles de leur carrière fournies par l'utilisateur et celles calculées selon les règles du régime approprié (trimestres, décote, surcote, points, pension, majoration etc) à partir de formules faisant intervenir d'autres variables et des paramètres législatifs (Parameters
). Les paramètres de la législation sont consommées directement depuis les barèmes IPP.
Une contrainte forte pesant sur l'écriture des formules des variables est l'utilisation d'opération sur des vecteurs car l'usage d'une boucle sur l'ensemble des individus est trop coûteux si leur nombre est grand alors qu'une opération vectorielle est quasiment indépendante de la taille des vecteurs qu'elle manipule (tant que ceux-ci sont stockables dans la RAM).
Afin de refléter l'évolution de la législation, les variables calculées s'appuient sur des formules qui peuvent évoluer dans le temps de deux façons:
Afin d'éviter des redondances inutiles et de factoriser la création des variables intervenant dans les différents régimes, une innovation issue de TiL-Pension a été rajoutée, le régime. Les abstractions retenues sont:
- le régime le plus abstrait (
AbstractRegime
) qui spécifie les variables communes à tous les régimes (sans nécessairement préciser leurs formules) - le régime de base abstrait (
AbstractRegimeDeBase
) (TODO: envisager de renommer en régime en annuités) - le régime complémentaire abstrait (
AbstractRegimeComplementaire
) (TODO: envisager de renommer en régime en points)
Ces abstractions servent de base aux régimes réels qui "héritent" de leur structure, avec la possibilité de modifier certaines de leur caractéristiques. Par exemple, le régime général et celui de la fonction publique sont tous les deux des régimes en annuité. Ils héritent par conséquent tous les deux de la structure d'AbstractRegimeDeBase
. Cela leur permet de profiter implicitement de leurs points communs avec ce type de régime, comme par exemple le calcul de la pension en fonction d'un salaire de reference multiplié par un taux de liquidation et un coefficient de proratisation. Certaines formules sont alors partagées. Là où chaque régime diverge du modèle de base, les formules sont adaptées. Ainsi, le calcul du salaire de référence dans le régime général divergera des autres régimes.
Les variables créées seront préfixées par le nom du régime (par exemple regime_general_cnav_pension
).
L'étude des réformes du système de retraite peut être facilement conduite
en mobilisant l'objet idoine Reform
fourni par OpenFisca qui viendra modifier, retirer ou ajouter, de façon sélective, certaines variables du système de retraite ou en modifier certains paramètres.
Ainsi, on peut comparer plusieurs systèmes socio-fiscaux en modifiant les composants du code de manière minimale.
Les composantes des différents régimes ont été modélisés à partir du travail déjà effectué dans TiL-Pension et des informations trouvées dans le précis de législation de l'IPP intitulé "Le système de retraite français : historique et législation". Notamment les exemples données dans le précis de législation ont servi de base pour écrire les tests unitaires des formules des différentes variables.
Le pas de temps retenu ici est l'année mais il peut-être modifié.
Il définit les éléments essentiels d'un régime en annuité (décote, surcote et taux de liquidation). Il permet de calculer la pension brute à partir d'un coefficient de proratisation, d'un taux de liquidation et d'un salaire de référence et la pension complète à partir de la pension brute et des majorations.
Le régime général de la sécurité sociale RegimeGeneralCnav
a été modélisé avec les variables suivantes:
cotisation_employeur
etcotisation_salarie
salaire_de_reference
duree_assurance
majoration_duree_assurance
(non implémentée complètement)coefficient_de_proratisation
decote_trimestres
decote
surcote
pension_minimale
pension_maximale
majoration_pension
(non implémentée complètement)pension_servie
Le régime général de la sécurité sociale RegimeGeneralCnav
a été modélisé avec les variables suivantes (hors service actif):
trimestres
(non implémentés)coefficient_de_proratisation
aod
limite_d_age
decote
surcote
dernier_indice_atteint
etsalaire_de_reference
majoration
(non implémentée)bonification
(non implémentée)
Il définit les éléments essentiels d'un régime en points (points, coefficient de minoration, décote et taux de liquidation). Il permet de calculer la pension brute à partir des points et de leur valeurs, et la pension complète à partir de la pension brute éventuellement majorée à laquelle on applique une décote et un coefficient de minoration.
Le régime de retraite complémentaire Arrco RegimeArrco
avec un traitement différents des cadres et des non-cadres a été modélisé avec les variables suivantes (sans pensions de réversion):
coefficient_de_minoration
cotisation_employeur
cotisation_salarie
points_enfants
majoration_pension
(uniquement enfants)pension_servie
Le régime de retraite complémentaire Agirc est spécifique aux cadres a été modélisé avec les variables suivantes (sans points enfants ni pensions de réversion):
coefficient_de_minoration
cotisation_employeur
cotisation_salarie
points_enfants
majoration_pension
(uniquement enfants)pension_servie
Pour l'instant le régime unifié est la poursuite du régime Arrco pour les non-cadres et de l'Agirc pour les cadres mais il serait préférable de créer un nouveau régime.
Pour réaliser des simulations avec des données, on mobilise un SurveyScenario
qui permet d'utiliser un système de retraite et éventuellement une réforme en initialisant les individus avec des tables contenant certaines de leurs caractéristiques par période.
Un test de faisabilité a été conduit avec les données Destinie.
Le premier problème potentiel identifié a été une chute de performance due au calcul du salaire de référence dans le cadre du régime général. En effet, ce calcul implique de faire des tris longitudinaux sur de nombreuses années. Une pure solution Python étant trop lente, la compilation de la fonction problématique avec Numba a permis de résoudre le problème.
OpenFisca garde des effectifs constants lors d'une simulation. Si l'on désire faire un calcul en une seule simulation, on est donc conduit à conserver tous les individus ayant participé à la simulation sur toutes la durée de la simulation. Cela peut-être problématique en terme de mémoire consommée. Une solution possible est de recourir à une écriture disque régulièrement mais cela serait vraisemblablement très coûteux en temps. Une autre solution serait de découper la simulation en quelques intervalles temporels pour éliminer les personnes décédées régulièrement.
On utilise un pas de temps annuel. On peut prendre plus petit mais cela augementera la taille des données mobilisées et le temps de calcul.
A priori il n'y a pas de problèmes de traiter des polypensionnés tant qu'il n'ont qu'ils ne cotisent qu'à une seule caisse par pas de temps.
A priori on peut créer des entités collectives pour rattacher les individus entre eux. Mais on peut aussi conserver les informations pertinentes au niveaux des individus. En effet, il faudra garder tous les individus que l'on veut faire participer à des entités collectives dans la simulation dans ce cas.