Dépenses d’assurance maladie par région (juillet 2026)

Données - Assurance Maladie (Cnam)

Code
source(here::here("_rinit.R"))
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/cnam; /usr/local/bin/R -e 'quarto::quarto_render("risque_regions.qmd")'
# (données : Rscript --vanilla cnam.R)

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
                      fig.width = 9, fig.height = 5.5, dpi = 150)
library(dplyr); library(tidyr); library(ggplot2); library(stringr)

path <- here::here("data", "cnam", "risque_regions.parquet")
d <- arrow::read_parquet(path)

mdd <- scales::label_number(scale = 1e-9, suffix = " Md€", accuracy = 0.1, big.mark = " ", decimal.mark = ",")
mde <- scales::label_number(scale = 1e-6, suffix = " M€", accuracy = 1, big.mark = " ", decimal.mark = ",")
pct <- scales::label_percent(accuracy = 0.1, decimal.mark = ",")
nb  <- scales::label_number(big.mark = " ", decimal.mark = ",")

theme_cnam <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold", size = 13), plot.title.position = "plot",
        plot.subtitle = element_text(colour = "grey35"),
        panel.grid.minor = element_blank(), legend.position = "bottom")
col1 <- "#1b7f79"; col2 <- "#c0392b"

# barres horizontales triées
barh <- function(df, lab, val, fmt = mdd, fill = col1, ...) {
  df |>
    mutate(.l = forcats::fct_reorder({{ lab }}, {{ val }})) |>
    ggplot(aes(.l, {{ val }})) +
    geom_col(fill = fill, ...) +
    geom_text(aes(label = fmt({{ val }})), hjust = -0.08, size = 3) +
    coord_flip() +
    scale_y_continuous(labels = fmt, expand = expansion(mult = c(0, 0.2))) +
    labs(x = NULL, y = NULL) + theme_cnam
}
Code
r <- d
fr_ <- r |> filter(region == "France entière")
reg <- r |> filter(region != "France entière")

Montants remboursés par l’assurance maladie du 1er janvier au 31 juillet 2026, par région de la Cnam (regroupements de régions : Alsace-Champagne-Ardenne-Lorraine, Nord-Pas-de-Calais-Picardie, Aquitaine-Limousin-Poitou-Charentes…, plus la Corse et les DROM), en euros, pour les soins de ville, les établissements sanitaires publics et privés et les établissements médico-sociaux. Total France : 132,1 Md€.

Répartition régionale

Code
reg |> filter(secteur == "Total") |> mutate(part = montant_rembourse / sum(montant_rembourse)) |>
  barh(region, montant_rembourse) + labs(title = "Total remboursé par région, janv.-juil. 2026")

Code
reg |> filter(secteur != "Total") |>
  mutate(region = forcats::fct_reorder(region, montant_rembourse, sum)) |>
  ggplot(aes(region, montant_rembourse, fill = secteur)) + geom_col() + coord_flip() +
  scale_y_continuous(labels = mdd) + scale_fill_manual(values = c(col1, col2, "#e0a030")) +
  labs(x = NULL, y = NULL, fill = NULL, title = "Par secteur") + theme_cnam + guides(fill = guide_legend(nrow = 2))

L’Île-de-France représente 20,0% des montants remboursés, devant l’Auvergne-Rhône-Alpes. La part des soins de ville et celle des établissements sanitaires sont proches au niveau national.

Évolution sur un an

Code
reg |> filter(secteur == "Total") |> mutate(l = forcats::fct_reorder(region, evolution)) |>
  ggplot(aes(l, evolution)) + geom_col(fill = col1) + coord_flip() +
  geom_text(aes(label = pct(evolution)), hjust = -0.1, size = 3.2) +
  scale_y_continuous(labels = scales::label_percent(), expand = expansion(mult = c(0, .15))) +
  labs(x = NULL, y = NULL, title = "Évolution du total remboursé (PCAP), par région") + theme_cnam

Avertissement

L’évolution soins de ville de l’Île-de-France (24,8%) est très éloignée de la moyenne nationale (3,9%) et celle de la Corse pour les établissements médico-sociaux est aberrante (+61 %) : ces écarts sont plus probablement des effets de rattachement comptable / de changement de périmètre entre régions que de vraies dynamiques territoriales. À interpréter avec prudence.

Code
r |> filter(secteur %in% c("Soins de ville", "Établissements sanitaires publics et privés", "Total")) |>
  select(region, secteur, montant_rembourse, evolution) |>
  pivot_wider(names_from = secteur, values_from = c(montant_rembourse, evolution)) |>
  gt::gt() |> gt::fmt_number(starts_with("montant"), decimals = 0, sep_mark = " ") |>
  gt::fmt_percent(starts_with("evolution"), decimals = 1) |> gt::tab_options(table.width = "100%")
region montant_rembourse_Soins de ville montant_rembourse_Établissements sanitaires publics et privés montant_rembourse_Total evolution_Soins de ville evolution_Établissements sanitaires publics et privés evolution_Total
Île-de-France 13 576 102 355 12 703 926 842 26 404 885 350 24.8% 10.7% 17.5%
Alsace, Champagne-Ardenne et Lorraine 5 215 077 342 5 176 978 746 10 438 205 908 −0.7% 2.6% 0.9%
Nord-Pas-de-Calais et Picardie 5 992 242 923 5 542 274 258 11 582 980 190 0.0% 2.5% 1.2%
Normandie 3 094 642 630 3 038 119 448 6 157 727 630 0.4% 5.4% 2.8%
Centre-Val de Loire 2 224 035 627 2 170 981 406 4 411 215 288 −0.5% 5.9% 2.5%
Bourgogne et Franche-Comté 2 556 768 187 2 633 923 170 5 213 188 001 −0.1% 3.0% 1.5%
Pays de la Loire 3 192 922 960 3 208 089 817 6 422 641 572 2.0% 3.9% 3.0%
Bretagne 2 935 063 745 3 172 186 943 6 126 934 479 −0.1% 5.6% 2.8%
Aquitaine, Limousin et Poitou-Charentes 5 788 221 162 5 587 462 306 11 416 385 403 −0.5% 5.5% 2.4%
Auvergne et Rhône-Alpes 7 578 147 793 7 467 502 498 15 101 641 223 0.2% 6.4% 3.2%
Languedoc-Roussillon et Midi-Pyrénées 6 200 538 941 5 572 760 288 11 821 062 967 −1.2% 3.6% 1.0%
Provence-Alpes-Côte d'Azur 6 309 546 892 5 123 095 884 11 474 488 967 −0.7% 4.3% 1.4%
Corse 438 784 556 347 388 988 789 596 620 −3.6% 8.2% 1.4%
DROM 2 248 685 857 2 415 033 148 4 691 347 656 −0.6% 8.5% 4.0%
France entière 67 350 780 970 64 159 723 741 132 052 301 252 3.9% 5.8% 4.8%

Source

Caisse nationale de l’Assurance Maladie (Cnam) — Cnam (SNDS) — Dépenses par type de risque, période du 1.1 au 31.7.2026, onglet « Dépenses région ». Conversion Excel → Parquet : cnam.R (dossier data/cnam).