#' Calcul des facteurs de croissance annuels des EPRC estimés par âge
#'
#' Ce module calcule les facteurs de croissance annuels des EPRC calculés pour
#' chaque âge (voir étape 1) afin de les appliquer sur les EPRC calculés à
#' partir du registre des rentes.
#'
#' @param list `tidylist`. Elément obligatoire dans tous les modules. Au lieu de
#'   fournir des dataframes au module, il est possible de l'alimenter uniquement
#'   avec une`tidylist` qui contient les tidy dataframes. Tous les datframes
#'   listés doivent être présents dans la tidylist, avec le même nom. De plus,
#'   la `tidylist` peut aussi contenir des dataframes qui ne sont pas utilisés
#'   par le module.
#'
#' @param PARAM_GLOBAL a single row data frame, of which we use the following
#'   parameters:
#'   - `jahr_rr`: année de l'évaluation du RR
#'
#' @param EPRC_ESTIMATION data frame contenant les EPRC calculés dans la
#' fonction \code{\link{mod_eprc_estimation}} grâce aux
#' données de la population et aux taux de mortalité de l'OFS.
#'
#' @references \href{https://www.bsv.admin.ch/dam/bsv/fr/dokumente/ahv/finanzperspektiven/validierung-modellansatz-ahv.pdf.download.pdf/2018_07_09_definitif_ld_rapport_ofas.pdf}{Rapport de Prof. Dr Laurent Donzé}
#'
#' @return une `tidylist` contenant le data frame suivant:
#' - FACTEURS_CROISSANCE_ANNUELS_EPRC_ESTIMES
#'
#' @author [MAS BSV](mailto:sekretariat.mas@bsv.admin.ch)
#'
#' @export
#'

mod_facteurs_croissance_annuels_eprc_estimes <- function(PARAM_GLOBAL,
                                                         EPRC_ESTIMATION
                                                         ) {

    
    print("Run module: mod_facteurs_croissance_annuels_eprc_estimes")

  # --- Calcul des taux de croissance annuels pour chaque âge --------------------


  #-------Méthode pour contrôler les 0 des EPRC et de la population------------

  # Calculer les facteurs de croissance
  FACTEURS_CROISSANCE_ANNUELS_EPRC_ESTIMES <- EPRC_ESTIMATION %>%
    filter(jahr >= PARAM_GLOBAL$jahr_rr) %>%
    group_by(sex, nat, dom, alt) %>%
    arrange(jahr, .by_group = TRUE) %>%
    # Construire une population fake pour éviter de diviser par 0 (si popu= 0 en
    # t et en t-1, facteur de croissance = 1)
    mutate(
      bevendejahr_fake = if_else(bevendejahr == 0 &
        lag(bevendejahr) == 0,
      1, bevendejahr
      ),
      eprc_fake = if_else(eprc == 0 &
        lag(eprc) == 0,
      1, eprc
      )
    ) %>%
    mutate(
      bevendejahr_fake = if_else(is.na(bevendejahr_fake) &
        jahr == PARAM_GLOBAL$jahr_rr,
      1, bevendejahr_fake
      ),
      eprc_fake = if_else(is.na(eprc_fake) &
        jahr == PARAM_GLOBAL$jahr_rr,
      1, eprc_fake
      )
    ) %>%
    # Construction des facteurs de croissance
    mutate(
      wachstumsfaktor = eprc_fake / lag(eprc_fake),
      wachstumsfaktor_popu = bevendejahr_fake / lag(bevendejahr_fake)
    ) %>%
    mutate(wachstumsfaktor = if_else(is.na(wachstumsfaktor) &
      jahr == min(jahr),
    1,
    wachstumsfaktor
    )) %>%
    mutate(wachstumsfaktor_popu = if_else(is.na(wachstumsfaktor_popu) &
      jahr == min(jahr),
    1,
    wachstumsfaktor_popu
    )) %>%
    ungroup() %>% 
    select(sex, nat, dom, jahr, alt, wachstumsfaktor, wachstumsfaktor_popu)
  
  return(FACTEURS_CROISSANCE_ANNUELS_EPRC_ESTIMES)
}
