Taux de cotisations et salaires minima garantis - SMIC-COTISATIONS

Données - INSEE

Structure

TITLE_FR

Code
`SMIC-COTISATIONS` |>
  group_by(IDBANK, TITLE_FR) |>
  summarise(Nobs = n(),
            date1 = first(TIME_PERIOD),
            date2 = last(TIME_PERIOD)) |>
  arrange(-Nobs) |>
  print_table_conditional()

Series in 1980

Code
`SMIC-COTISATIONS` |>
  filter(TIME_PERIOD == "1980-01") |>
  select(INDICATEUR, IDBANK, TITLE_FR) |>
  print_table_conditional()
INDICATEUR IDBANK TITLE_FR
SMG 000077502 Salaire minimum brut interprofessionnel de croissance (Smic) : augmentation en %
CHGS 000077576 Taux de cotisations sociales (part salariale) des non-cadres, hors contribution sociale généralisée (CSG) et contribution au remboursement de la dette sociale (CRDS) : pour les salaires inférieurs à 1 plafond de la sécurité sociale
SMG 000822484 Montant du Smic (Salaire minimum interprofessionnel de croissance) brut horaire

SMIC Horaire

Graph - Linear

Code
`SMIC-COTISATIONS` |>
  filter(IDBANK == "000822484") |>
  month_to_date() |>
  select(date, OBS_VALUE) |>
  ggplot() + geom_line(aes(x = date, y = OBS_VALUE)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1940, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 2000, 1),
                     labels = dollar_format(accuracy = 1, prefix = "", suffix = "€"))

Graph - Log

Code
`SMIC-COTISATIONS` |>
  filter(IDBANK == "000822484") |>
  month_to_date() |>
  select(date, OBS_VALUE) |>
  ggplot() + geom_line(aes(x = date, y = OBS_VALUE)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1940, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = c(0.1, 0.2, 0.5, 1, 2, 5, 10),
                     labels = dollar_format(accuracy = .1, prefix = "", suffix = "€"))

Taux bruts

Taux horaire du SMIC brut, dernier: 12.31€/h.

  • 12.31€/h x 151,666h/mois = 1867.00846€

  • 12.31€/h x 35h/semaine x 52 = 2.24042^{4}€

  • 1 année = 35h/semaine x 52 = 1820 h / an.

  • 4.333333 semaines par mois. (52 semaines sur 12 semaines)

  • 151,666 = 35*52/12= 151.6666667

Taux nets

Taux horaire du SMIC net, dernier: 9.74€/h.

  • 9.74€/h x 151,666h/mois = 1477.22684€

  • 9.74€/h x 35h/semaine x 52 = 1.77268^{4}€

  • 1 année = 35h/semaine x 52 = 1820 h / an.

  • 4.333333 semaines par mois. (52 semaines sur 12 semaines)

  • 151,666 = 35h/semaine x 52 / 12 = 151.6666667

Montant mensuel

2005-

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  ggplot(aes(x = date, y = OBS_VALUE, color = Indicateurs_smic_cotisations)) +
  geom_line() +
  geom_label(
    data = . %>% filter(date == max(date)),
    aes(label = paste0(format(OBS_VALUE, big.mark = " ", decimal.mark = ",", digits = 6), " €")),
    show.legend = FALSE
  ) +
  scale_x_date(
    breaks = seq(as.Date("1960-01-01"), as.Date("2100-01-01"), by = "2 years"),
    labels = date_format("%Y")
  ) +
  scale_y_log10(
    breaks = seq(100, 2000, 100),
    labels = label_number(accuracy = 1, suffix = " €", big.mark = " ")
  ) +
  theme_minimal() +
  theme(
    legend.position = c(0.2, 0.9),
    legend.title = element_blank()
  ) +
  xlab("") + ylab("")

2012-

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2012-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  ggplot(aes(x = date, y = OBS_VALUE, color = Indicateurs_smic_cotisations)) +
  geom_line() +
  geom_label(
    data = . %>% filter(date == max(date)),
    aes(label = paste0(format(OBS_VALUE, big.mark = " ", decimal.mark = ",", digits = 6), " €")),
    show.legend = FALSE
  ) +
  scale_x_date(
    breaks = seq(as.Date("1960-01-01"), as.Date("2100-01-01"), by = "2 years"),
    labels = date_format("%Y")
  ) +
  scale_y_log10(
    breaks = seq(100, 2000, 100),
    labels = label_number(accuracy = 1, suffix = " €", big.mark = " ")
  ) +
  theme_minimal() +
  theme(
    legend.position = c(0.2, 0.9),
    legend.title = element_blank()
  ) +
  xlab("") + ylab("")

2017-

Euros

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = Indicateurs_smic_cotisations)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "6 months",
               labels = date_format("%b %Y")) +
  scale_y_log10(breaks = seq(0, 2000, 100),
                     labels = dollar_format(accuracy = 1, prefix = "", suffix = "€")) +
  
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  geom_label(data = . %>% filter(date %in% c(max(date), min(date))),
             aes(x = date, y = OBS_VALUE, label = formatC(OBS_VALUE, big.mark = " "), color = Indicateurs_smic_cotisations))

Indice

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2017-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  group_by(Indicateurs_smic_cotisations) |>
  arrange(date) |>
  mutate(indice = 100*OBS_VALUE/OBS_VALUE[1]) |>
  ggplot() + geom_line(aes(x = date, y = indice, color = Indicateurs_smic_cotisations)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "6 months",
               labels = date_format("%b %Y")) +
  scale_y_log10(breaks = seq(0, 2000, 2)) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  geom_label_repel(data = . %>% filter(date == max(date)),
             aes(x = date, y = indice, label = round(indice, 1), color = Indicateurs_smic_cotisations), show.legend = F)

2020-

Euros

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2020-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = Indicateurs_smic_cotisations)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  scale_y_log10(breaks = seq(0, 2000, 100),
                     labels = dollar_format(accuracy = 1, prefix = "", suffix = "€")) +
  
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Indice

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2020-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  group_by(Indicateurs_smic_cotisations) |>
  arrange(date) |>
  mutate(indice = 100*OBS_VALUE/OBS_VALUE[1]) |>
  ggplot() + geom_line(aes(x = date, y = indice, color = Indicateurs_smic_cotisations)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  scale_y_log10(breaks = seq(0, 2000, 2)) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2021-

Euros

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2021-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = Indicateurs_smic_cotisations)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  scale_y_log10(breaks = seq(0, 2000, 100),
                     labels = dollar_format(accuracy = 1, prefix = "", suffix = "€")) +
  
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Indice

Code
`SMIC-COTISATIONS` |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  month_to_date() |>
  filter(date >= as.Date("2021-01-01")) |>
  select(Indicateurs_smic_cotisations, date, OBS_VALUE) |>
  group_by(Indicateurs_smic_cotisations) |>
  arrange(date) |>
  mutate(indice = 100*OBS_VALUE/OBS_VALUE[1]) |>
  ggplot() + geom_line(aes(x = date, y = indice, color = Indicateurs_smic_cotisations)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  scale_y_log10(breaks = seq(0, 2000, 1)) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

SMIC réel

Déflateurs

  • IPC : indice des prix à la consommation, ensemble des ménages. Série longue chaînée : IPC 295 postes base 1980 (1949-1989), IPC 265 postes base 1990 (1990-1995), IPC base 2025 (1996-).
  • IPCH : indice des prix à la consommation harmonisé, base 2025, disponible depuis 1996.
  • Les indices de prix sont lissés par une moyenne mobile sur 12 mois (mois courant et 11 mois précédents), ce qui neutralise la saisonnalité (soldes, etc.). Les séries réelles commencent donc 11 mois après le début de chaque indice de prix (IPCH : décembre 1996).

Euros constants de octobre 2026 (dernier mois de prix disponible ; niveau de prix = moyenne des 12 mois se terminant en octobre 2026).

SMIC horaire brut réel (IPC), 1951-

Code
SMIC_reel |>
  filter(INDICATEURS_SMIC_COTISATIONS == "SMICH", deflateur == "IPC") |>
  ggplot(aes(x = date, y = reel)) + geom_line() +
  theme_minimal() + xlab("") +
  ylab(paste0("SMIC horaire brut (€ de ", mois_ref, ")")) +
  scale_x_date(breaks = seq(1950, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = c(1, 1.5, 2, 3, 4, 5, 6, 7, 8, 10, 12, 15),
                labels = label_number(accuracy = 0.1, suffix = " €", decimal.mark = ","))

SMIC horaire brut réel (IPC et IPCH), 1996-

Code
SMIC_reel |>
  filter(INDICATEURS_SMIC_COTISATIONS == "SMICH", date >= as.Date("1996-01-01")) |>
  ggplot(aes(x = date, y = reel, color = deflateur)) + geom_line() +
  theme_minimal() + xlab("") +
  ylab(paste0("SMIC horaire brut (€ de ", mois_ref, ")")) +
  scale_x_date(breaks = seq(1996, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(5, 15, 0.5),
                labels = label_number(accuracy = 0.1, suffix = " €", decimal.mark = ",")) +
  theme(legend.position = c(0.2, 0.9), legend.title = element_blank())

Montant mensuel réel, 2005-

Code
SMIC_reel |>
  filter(INDICATEURS_SMIC_COTISATIONS %in% c("SMICMB-35H", "SMICMNN-35H")) |>
  ggplot(aes(x = date, y = reel, color = Indicateurs_smic_cotisations, linetype = deflateur)) +
  geom_line() +
  geom_label_repel(data = \(d) d |> filter(date == max(date) | date == min(date)),
                   aes(label = paste0(format(round(reel), big.mark = " "), " €")),
                   show.legend = FALSE, size = 3) +
  theme_minimal() + xlab("") +
  ylab(paste0("€ de ", mois_ref)) +
  scale_x_date(breaks = seq(2004, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 3000, 50),
                labels = label_number(accuracy = 1, suffix = " €", big.mark = " ")) +
  scale_linetype_manual(values = c("IPC" = "solid", "IPCH" = "dashed")) +
  theme(legend.position = "top", legend.direction = "vertical", legend.title = element_blank())

Indice du SMIC réel, différents points de départ

Montants mensuels brut (trait plein) et net (pointillés) pour 35h, déflatés par l’IPC ou l’IPCH, base 100 au point de départ. Indices de prix lissés sur 12 mois.

2005-

Code
plot_smic_reel_indice("2005-07-01", breaks_x = "2 years", by_y = 2)

2012-

Code
plot_smic_reel_indice("2012-01-01", breaks_x = "1 year", by_y = 1)

2017-

Code
plot_smic_reel_indice("2017-01-01", breaks_x = "6 months", format_x = "%b %Y", by_y = 1)

2020-

Code
plot_smic_reel_indice("2020-01-01", breaks_x = "6 months", format_x = "%b %Y", by_y = 1)

2021-

Code
plot_smic_reel_indice("2021-01-01", breaks_x = "3 months", format_x = "%b %Y", by_y = 1)

2022-

Code
plot_smic_reel_indice("2022-01-01", breaks_x = "3 months", format_x = "%b %Y", by_y = 1)

SMIC horaire réel (IPC), points de départ historiques

Code
c("1951-01-01", "1968-05-01", "1981-05-01", "1995-01-01", "2002-01-01") |>
  map(\(debut) SMIC_reel |>
        filter(INDICATEURS_SMIC_COTISATIONS == "SMICH", deflateur == "IPC",
               date >= as.Date(debut)) |>
        arrange(date) |>
        mutate(indice = 100 * reel / reel[1],
               depart = format(as.Date(debut), "%B %Y"))) |>
  list_rbind() |>
  mutate(depart = fct_inorder(depart)) |>
  ggplot(aes(x = date, y = indice, color = depart)) + geom_line() +
  geom_label_repel(data = \(d) d |> filter(date == max(date)),
                   aes(label = round(indice)), show.legend = FALSE, size = 3) +
  theme_minimal() + xlab("") + ylab("Indice 100 au point de départ") +
  scale_x_date(breaks = seq(1950, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = c(80, 90, 100, 110, 120, 150, 200, 300, 400, 500)) +
  theme(legend.position = c(0.15, 0.8), legend.title = element_blank())