#' Szenarografik AHV

#' @title Ausgabe der Ergebnisse in Excel
#'
#' @description Grafik in Excel file auslesen
#'
#' @return excel file auslesen
#'
#' @author [MAS BSV](mailto:sekretariat.mas@bsv.admin.ch)
#'
#' @export


mod_ahv_output_szenarien <- function(tl_inp,
                                     tl_out_ahv,
                                     path_out_identifier
                                     ) {

  print("Run module: mod_ahv_output_szenarien")

  ## FHHs für alle Szenarien berechnen

  # Erstelle Menge der Szenarien
  szenarien <- c("referenz", "hoch", "tief")

  # Entferne aktuelles Szenario
  restliche_szenarien <- setdiff(szenarien, tl_inp$PARAM_GLOBAL$szenario_fhh)

  # Speichere tl_out_ahv als neues Objekt mit Namenssuffix
  assign(paste0("tl_out_ahv_", tl_inp$PARAM_GLOBAL$szenario_fhh), tl_out_ahv)

  # Speichere tl_inp als neues Objekt mit Namenssuffix
  assign(paste0("tl_inp_", tl_inp$PARAM_GLOBAL$szenario_fhh), tl_inp)

  # Iteriere über die übrigen Szenarien
  for (szen in restliche_szenarien) {
    tl_inp <- mod_read_data(path_param, path_inp, data_folders=c("allgemein", "ahv"))
    tl_inp$PARAM_GLOBAL$szenario_fhh <- szen  # Setze Szenario
    tl_inp$PARAM_GLOBAL <- mod_ahv_param_global(PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
                                                ECKWERTE = tl_inp$ECKWERTE,
                                                ESTV = tl_inp$ESTV,
                                                AHV_ABRECHNUNG_PROV= tl_inp$AHV_ABRECHNUNG_PROV,
                                                AHV_ABRECHNUNG_DEF = tl_inp$AHV_ABRECHNUNG_DEF,
                                                IK = tl_inp$IK,
                                                RR_AVS = tl_inp$RR_AVS,
                                                BEV_BESTAND = tl_inp$BEV_BESTAND,
                                                SV_BEITRAGSSATZ = tl_inp$SV_BEITRAGSSATZ,
                                                IV_SCHULD_SCEN = tl_inp$IV_SCHULD_SCEN
    )
    tl_out_ahv <- wrap_ahv(tl_inp, path_param)
    tl_inp <- c(
      tl_inp[!(grepl("^PARAM", names(tl_inp)) & names(tl_inp) %in% names(tl_out_ahv))],
      tl_out_ahv[grepl("^PARAM",names(tl_out_ahv))])

    tl_inp$PARAM_GLOBAL$identifier_number <- szen
    tl_inp$PARAM_GLOBAL$noscenoutput <- TRUE

    mod_out_ahv(path_param, path_out_identifier, tl_inp, tl_out_ahv)

    assign(paste0("tl_inp_", szen), tl_inp)  # Speichere unter entsprechendem Namen
    assign(paste0("tl_out_ahv_", szen), tl_out_ahv)  # Speichere unter entsprechendem Namen
  }

  UMLAGE_SZENARIEN <- tibble(jahr = tl_out_ahv_referenz$AHV_FHH$jahr) |>
    left_join(tl_out_ahv_referenz$AHV_FHH |> select(jahr, referenz = erg_umlag), by = "jahr") |>
    left_join(tl_out_ahv_hoch$AHV_FHH   |> select(jahr, hoch  = erg_umlag), by = "jahr") |>
    left_join(tl_out_ahv_tief$AHV_FHH   |> select(jahr, tief  = erg_umlag), by = "jahr") |>
    filter(jahr >= tl_inp$PARAM_GLOBAL$jahr_abr, jahr <= tl_inp$PARAM_GLOBAL$jahr_lastoutput)

  # --- texte lesen und Platzhalter substituieren  ------------------
  get_param_or_empty <- function(x) {
    if (x %in% names(tl_inp$PARAM_GLOBAL)) {
      return(as.character(gsub(
        "\\.",
        ",",
        (tl_inp$PARAM_GLOBAL[[x]])
      )))
    } else {
      return("")
    }
  }

  substitute_one <- function(x) {
    from <- unique(regmatches(x, gregexpr("<<.+?>>", x))[[1]])
    to <- unname(vapply(gsub("<<PARAM_GLOBAL.|>>", "", from), get_param_or_empty, ""))

    for (i in seq_along(from)) {
      x <- gsub(from[i], to[i], x = x)
    }
    x
  }

  substitute_all <- function(x) {
    vapply(x, substitute_one, "", USE.NAMES = FALSE)
  }

  text_main <- as_tibble(readr::read_delim(
    file = system.file("templates/text_main.csv", package = "delfin"),
    delim = ";", show_col_types = FALSE, trim_ws = TRUE
  )) %>%
    mutate_at(c("main.d", "main.f", "main.i", "title.d", "title.f", "title.i", "footnote.d", "footnote.f", "footnote.i"), substitute_all)

  TITLE <- tibble(
    d = paste0(
      "Szenarien der ",
      text_main |> filter(id == "lang_titel_massn") |> pull(main.d),
      " ", tl_inp$PARAM_GLOBAL$title_d
    ),
    f = paste0(
      "Scénarios des ",
      str_to_lower(str_sub(text_main |> filter(id == "lang_titel_massn") |> pull(main.f), 1, 1)),
      str_sub(text_main |> filter(id == "lang_titel_massn") |> pull(main.f), 2),
      " ", tl_inp$PARAM_GLOBAL$title_f
    ),
    i = paste0(
      "Scenario delle ",
      str_to_lower(str_sub(text_main |> filter(id == "lang_titel_massn") |> pull(main.i), 1, 1)),
      str_sub(text_main |> filter(id == "lang_titel_massn") |> pull(main.i), 2),
      " ", tl_inp$PARAM_GLOBAL$title_i
    )
  ) |>
    mutate(across(everything(), ~ str_remove(., "\\s*\\([^\\)]*\\)$")))


  SUBTITLE <- tibble(
    d = tl_inp$PARAM_GLOBAL$subtitle_d,
    f = tl_inp$PARAM_GLOBAL$subtitle_f,
    i = tl_inp$PARAM_GLOBAL$subtitle_i
  )

  UNITS_DISCOUNTED <- tibble(
    d = text_main |> filter(id == "units_discounted") |> pull(main.d),
    f = text_main |> filter(id == "units_discounted") |> pull(main.f),
    i = text_main |> filter(id == "units_discounted") |> pull(main.i)
  )

  # Possibilité de fixer la date qu'on désire voir pour la production du budget
  if ("flag_fixed_date" %in% colnames(tl_inp$PARAM_GLOBAL)) {
    if (tl_inp$PARAM_GLOBAL$flag_fixed_date) {
      tl_inp$PARAM_GLOBAL$id_version <- paste0(tl_inp$PARAM_GLOBAL$fixed_date)
    } else {
      tl_inp$PARAM_GLOBAL$id_version <- paste0(format(Sys.Date(), "%d.%m.%Y"))
    }
  } else {
    tl_inp$PARAM_GLOBAL$id_version <- paste0(format(Sys.Date(), "%d.%m.%Y"))
  }

  VERSION <- tibble(
    d = paste(text_main |> filter(id == "bsv_version") |> pull(main.d), tl_inp$PARAM_GLOBAL$id_version),
    f = paste(text_main |> filter(id == "bsv_version") |> pull(main.f), tl_inp$PARAM_GLOBAL$id_version),
    i = paste(text_main |> filter(id == "bsv_version") |> pull(main.i), tl_inp$PARAM_GLOBAL$id_version)
  )

  wb <- createWorkbook()

  ans <- lapply(
    c("d", "f", "i"),
    write_szenariografik,
    wb = wb,
    UMLAGE_SZENARIEN = UMLAGE_SZENARIEN,
    TITLE = TITLE,
    SUBTITLE = SUBTITLE,
    UNITS_DISCOUNTED = UNITS_DISCOUNTED,
    VERSION = VERSION,
    versicherung="AHV"
  )

  path_out_plot <- file.path(
    path_out_identifier, "post_process", "SZENARIEN_GRAFIK.xlsx"
  )

  # Speichern
  saveWorkbook(wb, path_out_plot, overwrite = TRUE)





  ## Werte für Tabelle INDIKATOREN_ANNAHMEN.xlsx berechnen

  GRUNDLAGEN <- tl_out_ahv_referenz$ECKWERTE_EXTENDED |>
    mutate(
      lohn=lohn/100,
      preis=preis/100
      ) %>%
    left_join(
      tl_out_ahv_referenz$RENTENENTWICKLUNG |>
        select(jahr, minimalrente),
      by = "jahr"
    )

  WANDERUNG <- tl_inp_referenz$BEV_SCENARIO %>%
    mutate(
      wanderungssaldo = einwanderung - auswanderung,
      scenario = case_when(
        scenario == tl_inp_referenz$PARAM_GLOBAL$bev_scenario ~ "referenz",
        scenario == tl_inp_hoch$PARAM_GLOBAL$bev_scenario ~ "hoch",
        scenario == tl_inp_tief$PARAM_GLOBAL$bev_scenario ~ "tief",
        TRUE ~ scenario
      )
    ) %>%
    filter(scenario %in% c("referenz","hoch","tief")) %>%
    group_by(scenario, jahr) %>%
    summarize(wanderungssaldo = sum(wanderungssaldo)) |>
    pivot_wider(
      names_from = scenario,
      values_from = wanderungssaldo,
      names_glue = "wanderungssaldo_{scenario}"
    )

  BEV65 <- tl_out_ahv_referenz$BEVOELKERUNG |>
    filter(alt >= 65) |>
    group_by(jahr) |>
    summarise(bevendejahr_referenz = sum(bevendejahr, na.rm = TRUE), .groups = "drop") |>
    mutate(delta_bev_65plus_referenz = bevendejahr_referenz/lag(bevendejahr_referenz)-1) %>%
    select(jahr, delta_bev_65plus_referenz) %>%
    left_join(
      tl_out_ahv_hoch$BEVOELKERUNG |>
        filter(alt >= 65) |>
        group_by(jahr) |>
        summarise(bevendejahr_hoch = sum(bevendejahr, na.rm = TRUE), .groups = "drop") %>%
      mutate(delta_bev_65plus_hoch = bevendejahr_hoch/lag(bevendejahr_hoch)-1) %>%
        select(jahr, delta_bev_65plus_hoch),
      by = "jahr"
    ) |>
    left_join(
      tl_out_ahv_tief$BEVOELKERUNG |>
        filter(alt >= 65) |>
        group_by(jahr) |>
        summarise(bevendejahr_tief = sum(bevendejahr, na.rm = TRUE), .groups = "drop") %>%
        mutate(delta_bev_65plus_tief = bevendejahr_tief/lag(bevendejahr_tief)-1) %>%
        select(jahr, delta_bev_65plus_tief),
      by = "jahr"
    )


  EPT <- tl_out_ahv_referenz$BEVOELKERUNG |>
    filter(jahr >= 1996, alt >= 18) |>
    mutate(ept_inland =
             case_when(
               alt <= 65 & sex == "m" ~ ept + 0.9 * frontaliers,
               alt <= 65 & sex == "f" ~ ept + 0.7 * frontaliers,
               alt > 65 & sex == "m"  ~ 0.5 * (ept + 0.9 * frontaliers),
               alt > 65 & sex == "f"  ~ 0.5 * (ept + 0.7 * frontaliers)
             )) |>
    group_by(jahr) |>
    summarise(ept_inland_referenz = sum(ept_inland, na.rm = TRUE), .groups = "drop") %>%
    mutate(delta_ept_referenz = ept_inland_referenz/lag(ept_inland_referenz)-1) %>%
    select(jahr, delta_ept_referenz) %>%
    left_join(
      tl_out_ahv_hoch$BEVOELKERUNG |>
        filter(jahr >= 1996, alt >= 18) |>
        mutate(ept_inland =
                 case_when(
                   alt <= 65 & sex == "m" ~ ept + 0.9 * frontaliers,
                   alt <= 65 & sex == "f" ~ ept + 0.7 * frontaliers,
                   alt > 65 & sex == "m"  ~ 0.5 * (ept + 0.9 * frontaliers),
                   alt > 65 & sex == "f"  ~ 0.5 * (ept + 0.7 * frontaliers)
                 )) |>
        group_by(jahr) |>
        summarise(ept_inland_hoch = sum(ept_inland, na.rm = TRUE), .groups = "drop") %>%
        mutate(delta_ept_hoch = ept_inland_hoch/lag(ept_inland_hoch)-1) %>%
        select(jahr, delta_ept_hoch),
      by = "jahr"
    ) |>
    left_join(
      tl_out_ahv_tief$BEVOELKERUNG |>
        filter(jahr >= 1996, alt >= 18) |>
        mutate(ept_inland =
                 case_when(
                   alt <= 65 & sex == "m" ~ ept + 0.9 * frontaliers,
                   alt <= 65 & sex == "f" ~ ept + 0.7 * frontaliers,
                   alt > 65 & sex == "m"  ~ 0.5 * (ept + 0.9 * frontaliers),
                   alt > 65 & sex == "f"  ~ 0.5 * (ept + 0.7 * frontaliers)
                 )) |>
        group_by(jahr) |>
        summarise(ept_inland_tief = sum(ept_inland, na.rm = TRUE), .groups = "drop") %>%
        mutate(delta_ept_tief = ept_inland_tief/lag(ept_inland_tief)-1) %>%
        select(jahr, delta_ept_tief),
      by = "jahr"
    )

  ## EPT für t+1 und t+2 durch BESTA-Wachstum und Veränderung Arbeitslosenqute ersetzen, da wir diese für diese Jahre anstatt des BFS-Erwerbsbevölkerungswachstums verwenden
  # Filtere gültige Jahre mit besta und arbeitslos vorhanden
  erstes_jahr <- tl_out_ahv_referenz[["ECKWERTE_SCENARIO"]] |>
    filter(!is.na(besta) & !is.na(arbeitslos)) |>
    summarise(min_jahr = min(jahr)) |>
    pull(min_jahr)

  arbeitslos_lag_start <- tl_inp$ARBEITSLOSENQUOTE |>
    filter(jahr == erstes_jahr - 1) |>
    pull(arbeitslosenquote) |>
    first()

  valid_eckwerte <- tl_out_ahv_referenz[["ECKWERTE_SCENARIO"]] |>
    filter(!is.na(besta) & !is.na(arbeitslos)) |>
    arrange(jahr) |>
    mutate(
      arbeitslos_lag = lag(arbeitslos),
      arbeitslos_lag = if_else(is.na(arbeitslos_lag), arbeitslos_lag_start, arbeitslos_lag),
      delta_berechnet = (besta + arbeitslos - arbeitslos_lag) / 100
    ) |>
    select(jahr, delta_berechnet)

  # Ersetze Werte in EPT
  EPT <- EPT |>
    left_join(valid_eckwerte, by = "jahr") |>
    mutate(
      delta_ept_referenz = if_else(!is.na(delta_berechnet), delta_berechnet, delta_ept_referenz),
      delta_ept_hoch     = if_else(!is.na(delta_berechnet), delta_berechnet, delta_ept_hoch),
      delta_ept_tief     = if_else(!is.na(delta_berechnet), delta_berechnet, delta_ept_tief)
    ) |>
    select(-delta_berechnet)




  MWST <- tl_inp_referenz$MWST_SZENARIEN %>%
    filter(jahr==tl_inp_referenz$PARAM_GLOBAL$jahr_abr+1) %>%
    rename(
      delta_mwst_referenz = basis,
      delta_mwst_hoch = hoch,
      delta_mwst_tief = tief
    ) %>%
    select(jahr, delta_mwst_referenz, delta_mwst_hoch, delta_mwst_tief) %>%
    bind_rows(.,
              tl_out_ahv_referenz$AHV_MWST |>
                select(jahr, mwst_pt_referenz = mwst_pt) |>
                mutate(delta_mwst_referenz = mwst_pt_referenz / lag(mwst_pt_referenz) - 1) |>
                select(jahr, delta_mwst_referenz) |>
                left_join(
                  tl_out_ahv_hoch$AHV_MWST |>
                    select(jahr, mwst_pt_hoch = mwst_pt) |>
                    mutate(delta_mwst_hoch = mwst_pt_hoch / lag(mwst_pt_hoch) - 1) |>
                    select(jahr, delta_mwst_hoch),
                  by = "jahr"
                ) |>
                left_join(
                  tl_out_ahv_tief$AHV_MWST |>
                    select(jahr, mwst_pt_tief = mwst_pt) |>
                    mutate(delta_mwst_tief = mwst_pt_tief / lag(mwst_pt_tief) - 1) |>
                    select(jahr, delta_mwst_tief),
                  by = "jahr"
                ) %>%
                filter(jahr >= tl_inp_referenz$PARAM_GLOBAL$jahr_abr+2)
              )

  STRUKTURFAKTOR <- tibble(jahr = tl_inp_referenz$PARAM_GLOBAL$jahr_abr:2070) |>
    left_join(
      tl_out_ahv_referenz$STRUKTURFAKTOR |>
        mutate(strukturfaktor=strukturfaktor/100) %>%
        select(sex, strukturfaktor) |>
        pivot_wider(names_from = sex, values_from = strukturfaktor, names_prefix = "strukturfaktor_") |>
        rename(
          strukturfaktor_m_referenz = strukturfaktor_m,
          strukturfaktor_f_referenz = strukturfaktor_f
        ) |>
        mutate(dummy = TRUE),
      by = character()
    ) |>
    left_join(
      tl_out_ahv_hoch$STRUKTURFAKTOR |>
        mutate(strukturfaktor=strukturfaktor/100) %>%
        select(sex, strukturfaktor) |>
        pivot_wider(names_from = sex, values_from = strukturfaktor, names_prefix = "strukturfaktor_") |>
        rename(
          strukturfaktor_m_hoch = strukturfaktor_m,
          strukturfaktor_f_hoch = strukturfaktor_f
        ) |>
        mutate(dummy = TRUE),
      by = "dummy"
    ) |>
    left_join(
      tl_out_ahv_tief$STRUKTURFAKTOR |>
        mutate(strukturfaktor=strukturfaktor/100) %>%
        select(sex, strukturfaktor) |>
        pivot_wider(names_from = sex, values_from = strukturfaktor, names_prefix = "strukturfaktor_") |>
        rename(
          strukturfaktor_m_tief = strukturfaktor_m,
          strukturfaktor_f_tief = strukturfaktor_f
        ) |>
        mutate(dummy = TRUE),
      by = "dummy"
    ) |>
    select(-dummy)

  LEBENSERWARTUNG <- tibble::tibble(
    jahr = 2024:2040,

    # A-00-2025 = Referenz (m)
    espvie_m_referenz = c(
      NA,
      20.7, 20.9, 21.0, 21.1, 21.2, 21.3, 21.4, 21.5, 21.5, 21.6, 21.7, 21.8, 21.8, 21.9, 22.0, 22.0
    ),

    # A-00-2025 = Referenz (f)
    espvie_f_referenz = c(
      NA,
      23.2, 23.3, 23.4, 23.5, 23.6, 23.7, 23.8, 23.9, 23.9, 24.0, 24.1, 24.2, 24.2, 24.3, 24.3, 24.4
    ),

    # B-00-2025 = Hoch (m)
    espvie_m_hoch = c(
      NA,
      21.3, 21.6, 21.8, 22.0, 22.2, 22.4, 22.5, 22.7, 22.8, 23.0, 23.1, 23.3, 23.4, 23.5, 23.7, 23.8
    ),

    # B-00-2025 = Hoch (f)
    espvie_f_hoch = c(
      NA,
      23.7, 24.0, 24.2, 24.3, 24.5, 24.6, 24.7, 24.9, 25.0, 25.1, 25.2, 25.3, 25.4, 25.5, 25.6, 25.7
    ),

    # C-00-2025 = Tief (m)
    espvie_m_tief = c(
      NA,
      20.2, 20.2, 20.2, 20.2, 20.3, 20.3, 20.3, 20.3, 20.3, 20.3, 20.4, 20.4, 20.4, 20.4, 20.4, 20.4
    ),

    # C-00-2025 = Tief (f)
    espvie_f_tief = c(
      NA,
      22.6, 22.7, 22.7, 22.8, 22.8, 22.8, 22.9, 22.9, 22.9, 23.0, 23.0, 23.0, 23.1, 23.1, 23.1, 23.1
    )
  )

  # ALTERSRENTE <- tibble(
  #   jahr = 2024:2040,
  #   altrente_referenz = c(NA, 1000, 1000, 1000, 1000, rep(1000, 11), 1000),
  #   altrente_hoch     = c(NA, 1000, 1000, 1000, 1000, rep(1000, 11), 1000),
  #   altrente_tief     = c(NA, 1000, 1000, 1000, 1000, rep(1000, 11), 1000)
  # )

  INDIKATOREN <- GRUNDLAGEN |>
    filter(jahr>tl_inp$PARAM_GLOBAL$jahr_abr) |>
    left_join(WANDERUNG,        by = "jahr") |>
    left_join(BEV65,            by = "jahr") |>
    left_join(EPT,              by = "jahr") |>
    left_join(MWST,             by = "jahr") |>
    left_join(STRUKTURFAKTOR,   by = "jahr") |>
    left_join(LEBENSERWARTUNG,  by = "jahr")
  # |>
  #   left_join(ALTERSRENTE,      by = "jahr")

  indikator_map <- tibble::tibble(
    gruppe = c(
      rep("alle", 4),
      rep("referenz", 8),
      rep("hoch", 8),
      rep("tief", 8)
    ),
    var = c(
      "preis", "lohn", "lohn_real", "minimalrente",
      "wanderungssaldo_referenz", "delta_bev_65plus_referenz", "delta_ept_referenz", "delta_mwst_referenz",
      "strukturfaktor_m_referenz", "strukturfaktor_f_referenz",
      "espvie_m_referenz", "espvie_f_referenz",
      "wanderungssaldo_hoch",  "delta_bev_65plus_hoch", "delta_ept_hoch", "delta_mwst_hoch",
      "strukturfaktor_m_hoch", "strukturfaktor_f_hoch",
      "espvie_m_hoch", "espvie_f_hoch",
      "wanderungssaldo_tief",  "delta_bev_65plus_tief", "delta_ept_tief", "delta_mwst_tief",
      "strukturfaktor_m_tief", "strukturfaktor_f_tief",
      "espvie_m_tief", "espvie_f_tief"
    ),
    beschriftung_d = c(
      "Jahresteuerung (Veränderung LIK)", "Veränderung Lohnindex nominal", "Veränderung Lohnindex real", "Minimalrente in CHF, laufende Preise",
      "Wanderungssaldo (Anzahl Personen)", "Veränderung Bevölkerung 65+ in der Schweiz", "Veränderung Erwerbsbevölkerung in VZÄ", "MWST-Entwicklung (sportevent-bereinigt) real",
      "Strukturfaktor Männer", "Strukturfaktor Frauen", "Lebenserwartung ab 65 Jahre, Männer (Jahre)", "Lebenserwartung ab 65 Jahre, Frauen (Jahre)",
      "Wanderungssaldo (Anzahl Personen)", "Veränderung Bevölkerung 65+ in der Schweiz", "Veränderung Erwerbsbevölkerung in VZÄ", "MWST-Entwicklung (sportevent-bereinigt) real",
      "Strukturfaktor Männer", "Strukturfaktor Frauen", "Lebenserwartung ab 65 Jahre, Männer (in Jahren)", "Lebenserwartung ab 65 Jahre, Frauen (in Jahren)",
      "Wanderungssaldo (Anzahl Personen)", "Veränderung Bevölkerung 65+ in der Schweiz", "Veränderung Erwerbsbevölkerung in VZÄ", "MWST-Entwicklung (sportevent-bereinigt) real",
      "Strukturfaktor Männer", "Strukturfaktor Frauen", "Lebenserwartung ab 65 Jahre, Männer (in Jahren)", "Lebenserwartung ab 65 Jahre, Frauen (in Jahren)"
    ),
    beschriftung_f = c(
      "Renchérissement annuel (IPC)", "Indice nominal des salaires", "Indice réel des salaires", "Rente Minimale en francs (prix courants)",
      "Solde migratoire (nombre de personnes)", "Croissance de la population de plus de 65 ans en Suisse", "Croissance de la population active (EPT)", "Évolution de la TVA (corrigée des événements sportifs) réelle",
      'Facteur structurel " hommes "', 'Facteur structurel " femmes "', "Espérance de vie à partir de 65 ans, hommes (années)", "Espérance de vie à partir de 65 ans, femmes (années)",
      "Solde migratoire (nombre de personnes)", "Croissance de la population de plus de 65 ans en Suisse", "Croissance de la population active (EPT)", "Évolution de la TVA (corrigée des événements sportifs) réelle",
      'Facteur structurel " hommes "', 'Facteur structurel " femmes "', "Espérance de vie à partir de 65 ans, hommes (années)", "Espérance de vie à partir de 65 ans, femmes (années)",
      "Solde migratoire (nombre de personnes)", "Croissance de la population de plus de 65 ans en Suisse", "Croissance de la population active (EPT)", "Évolution de la TVA (corrigée des événements sportifs) réelle",
      'Facteur structurel " hommes "', 'Facteur structurel " femmes "', "Espérance de vie à partir de 65 ans, hommes (années)", "Espérance de vie à partir de 65 ans, femmes (années)"
    ),
    beschriftung_i = c(
      "Rincaro annuo (IPC)", "Indice dei salari nominali", "Indice dei salari reali", "Rendita minima in franchi (prezzi correnti)",
      "Saldo migratorio (numero di persone)", "Crescita della popolazione di più di 65 anni in Svizzera", "Crescita della popolazione attiva (ETP)", "Andamento dell'IVA (al netto degli eventi sportivi) reale",
      "Fattore strutturale uomini", "Fattore strutturale donne", "Aspettativa di vita a partire dai 65 anni, uomini (anni)", "Aspettativa di vita a partire dai 65 anni, donne (anni)",
      "Saldo migratorio (numero di persone)", "Crescita della popolazione di più di 65 anni in Svizzera", "Crescita della popolazione attiva (ETP)", "Andamento dell'IVA (al netto degli eventi sportivi) reale",
      "Fattore strutturale uomini", "Fattore strutturale donne", "Aspettativa di vita a partire dai 65 anni, uomini (anni)", "Aspettativa di vita a partire dai 65 anni, donne (anni)",
      "Saldo migratorio (numero di persone)", "Crescita della popolazione di più di 65 anni in Svizzera", "Crescita della popolazione attiva (ETP)", "Andamento dell'IVA (al netto degli eventi sportivi) reale",
      "Fattore strutturale uomini", "Fattore strutturale donne", "Aspettativa di vita a partire dai 65 anni, uomini (anni)", "Aspettativa di vita a partire dai 65 anni, donne (anni)"
    )
  )

  wb <- createWorkbook()

  ans <- lapply(
    c("d", "f", "i"),
    write_indikatoren_annahmen,
    wb = wb,
    PARAM_GLOBAL = tl_inp_referenz$PARAM_GLOBAL,
    INDIKATOREN = INDIKATOREN,
    indikator_map = indikator_map,
    VERSION = VERSION,
    versicherung="AHV"
  )

  path_out_plot <- file.path(
    path_out_identifier, "post_process", "INDIKATOREN_ANNAHMEN.xlsx"
  )

  # Speichern
  saveWorkbook(wb, path_out_plot, overwrite = TRUE)

}
