tools/creer-ageDuree.R

library(data.table)

dir <- "inst/extdata"

mapping <- list(
  "aod.csv"                = "AOD",
  "aad.csv"                = "AAD",
  "ageMaximum.csv"         = "Age maximum",
  "dureeRequise.csv"       = "Duree",
  "dureeProratisation.csv" = "Duree proratisation"
)

ageDuree <- rbindlist(lapply(names(mapping), function(f) {
  dt <- fread(file.path(dir, f), na.strings = c("", "NA"))
  col_valeur <- setdiff(names(dt), c("caisse", "categorie", "dateNaissance", "dateApplication", "dateNaissanceEstimee"))
  setnames(dt, col_valeur, "valeur")
  dt[, grandeur := mapping[[f]]]
  if(!"caisse" %in% names(dt)) dt[, caisse := NA_character_]
  if(!"dateApplication" %in% names(dt)) dt[, dateApplication := NA_character_]
  for(col in c("dateNaissance", "dateApplication")){
    if(is.character(dt[[col]])){
      dt[, (col) := lubridate::make_date(
        year = substr(get(col), 1, 4),
        month = substr(get(col), 6, 7)
      )]
    }
  }
  dt[, .(valeur, grandeur, caisse, categorie, dateNaissance, dateApplication)]
}))

# Pour les lignes avec dateApplication sans dateNaissance (ex: CNAVPL),
# on utilise l'approximation : dateNaissance ≈ dateApplication - aod * 12 mois
# C'est l'approximation retenue en l'absence de dateLiq.
ageDuree[is.na(dateNaissance) & !is.na(dateApplication) & !is.na(valeur),
  dateNaissance := as.Date(dateApplication - lubridate::dmonths(valeur * 12))
]
# Les lignes avec aod=NA (bascule au droit commun) n'ont pas de dateNaissance → on les exclut
ageDuree <- ageDuree[!is.na(dateNaissance)]

# Reconversion (caisse, categorie) → categorie ancien format
ageDuree[, categorie := fcase(
  caisse %in% c("SRE", "CNRACL") & categorie == "actif",       "Actif fonction publique",
  caisse %in% c("SRE", "CNRACL") & categorie == "superactif",  "Superactif fonction publique",
  caisse %in% c("SRE", "CNRACL") & categorie == "sedentaire",  "Sedentaire fonction publique",
  caisse == "Regime special"      & categorie == "actif",       "Actif regime special",
  caisse == "Regime special"      & categorie == "superactif",  "Superactif regime special",
  caisse == "Regime special"      & categorie == "sedentaire",  "Sedentaire regime special",
  caisse == "CNAVPL" & is.na(categorie),                        "CNAVPL",
  caisse == "CNAVPL" & categorie == "inaptitude",                "CNAVPL inaptitude",
  caisse == "MSA exploitant",                                   "MSA exploitant",
  caisse %in% c("Agirc-Arrco", "Ircantec"),                    "Agirc Arrco Ircantec",
  categorie == "inaptitude",                                    "Inapte",
  is.na(caisse) & is.na(categorie),                             "Droit commun",
  default = categorie
)]

# Dédupliquer (les duplications SRE/CNRACL et Agirc-Arrco/Ircantec donnent des doublons)
ageDuree <- unique(ageDuree[, .(valeur, grandeur, categorie, dateNaissance)])
setorder(ageDuree, grandeur, categorie, dateNaissance)

usethis::use_data(ageDuree, overwrite = TRUE)

Try the legiretraite package in your browser

Any scripts or data that you put into this service are public.

legiretraite documentation built on Oct. 7, 2026, 5:09 p.m.