---
title: ""

format:
  html:
    fig-width: 9
    fig-height: 8
    fig-dpi: 300
    # embed-resources: TRUE # Entwicklung
    # theme: "null" # Entwicklung
    embed-resources: FALSE # Veröffentlichung
    theme: none # Veröffentlichung
    header-includes: |
     <link rel="stylesheet" href="https://media.sciencemediacenter.de/static/fonts/circular/web.css">

mainfont: CircularSMCWeb

execute:
  echo: FALSE
  output: asis
  warning: FALSE
  error: FALSE
---

```{r}
#| label: pakete_und_daten
#| output: false
library(tidyverse)
library(SMChelpR)
library(sf)
library(leaflet)
library(leaflet.extras)
library(htmltools)
library(htmlwidgets)
library(mapview)

## wichtige Story-Parameter
storyNo <- 25121
file_name_code <- "2025_Perinatalzentren.qmd"

caption_karte_1 <-
    "Quelle: Qualitätsberichte der Krankenhäuser (G-BA, 2023), perinatalzentren.org (IQTIQ), BKG, Zensus 2022\nBerechnungen/Darstellung: Science Media Center Germany."
caption_karte_2 <-
    "Quelle: Qualitätsberichte der Krankenhäuser (G-BA, 2023), perinatalzentren.org (IQTIQ), BKG, Zensus 2022\nBerechnungen/Darstellung: Science Media Center Germany."
caption_karte_3 <-
    "Quelle: Qualitätsberichte der Krankenhäuser (G-BA, 2023), BKG\nDarstellung: Science Media Center Germany."
Datumsprefix_files <- FALSE # FALSE, wenn keine regelmäßige Aussendung / keine tagesaktuellen Daten


##############################

imagepath <-
    file.path("reports", storyNo)
dir.create(imagepath, showWarnings = FALSE, recursive = TRUE)

## workspace directory in RStudio interaktiv
if (rstudioapi::isAvailable()) {
    setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
}

if (is.na(file_name_code)) {
    stop("Dateiname der qmd nicht gesetzt")
}
if (!file.exists(file_name_code)) {
    stop("qmd existiert nicht. Dateiname falsch?")
}


file.copy(
    from = file_name_code,
    to = file.path(
        imagepath,
        paste0(
            today()[Datumsprefix_files],
            "_"[Datumsprefix_files],
            file_name_code
        )
    ),
    overwrite = TRUE
)

```

```{r}
#| label: set-graphic-parameters
#| output: false

options(scipen = 999) # set scientific notation to be off
SMC_theme_ggplot()

if (exists("caption_")) {
    stop("Caption wurde nicht angepasst")
}

source(
    "helpers/leaflet_helpers.R"
)

storyNo <- 25121

data_url <- paste0(
  "https://media.sciencemediacenter.de/reports/",
  storyNo,
  "/data/report_data"
)
```

```{r}
#| label: load-map_perinatalzentren_data_Frauen_im_gebaerfaehigen_Alter
#| output: false

# load(
#     file = c(
#         "data",
#         "map_perinatalzentren_data_Frauen_im_gebaerfaehigen_Alter.RData"
#     ) |>
#         reduce(file.path) |>
#         normalizePath()
# )

load(url(file.path(
  data_url,
  "map_perinatalzentren_data_Frauen_im_gebaerfaehigen_Alter.RData"
)))

n_klinken_mit_geburten <- nrow(marker_data)
# anhand von zwei Quellen:
# 1: Qualitätsberichte (Eintrag in DeQS) (Stand 2023)
# 2: Liste auf perinatalzentren.de (Stand 07/2025)

# < 30 min zur nächsten Geburtsklinik
n_total <- sum(polygon_data$Einwohner_Gesamt, na.rm = TRUE)
n_total_Einwohnerinnen_relevant <- sum(
    polygon_data$Einwohnerinnen_relevant,
    na.rm = TRUE
)
n_ueber_30_min <- sum(polygon_data$Anzahl_Betroffene_relevant, na.rm = TRUE)
n_unter_30_min <- n_total_Einwohnerinnen_relevant - n_ueber_30_min
prozent_ueber_30_min <- round(
    n_ueber_30_min / n_total_Einwohnerinnen_relevant * 100,
    1
)
prozent_unter_30_min <- round(
    n_unter_30_min / n_total_Einwohnerinnen_relevant * 100,
    1
)

n_ueber_40_min <- sum(ueber_40$Anzahl_Betroffene_relevant, na.rm = TRUE)
prozent_ueber_40_min <- round(
    n_ueber_40_min / n_total_Einwohnerinnen_relevant * 100,
    2
)

n_ueber_50_min <- sum(ueber_50$Anzahl_Betroffene_relevant, na.rm = TRUE)
prozent_ueber_50_min <- round(
    n_ueber_50_min / n_total_Einwohnerinnen_relevant * 100,
    2
)

gemeinden_ueber_40_min <- ueber_40 |>
    filter(Anzahl_Betroffene_relevant > 0) |>
    arrange(Anzahl_Betroffene_relevant)

n_kliniken <- nrow(marker_data)
n_kliniken_level_4 <- marker_data |>
    filter(Stufe == "Level 4") |>
    nrow()
prozent_kliniken_level_4 <- round(n_kliniken_level_4 / n_kliniken * 100, 1)

```

```{r}
# Geburtenrate: Anzahl Geburten pro Frau im laufe des Lebens
# 15-49 Jahre: 35 Jahre -> pro Jahr: geteilt durch 35
# geburtenrate_destatis_2022 <- 1.49
# geburtenrate_destatis_2023 <- 1.38
geburtenrate_destatis_2024 <- 1.35 # neueste Geburtenziffer

n_erwartbare_geburten <- n_total_Einwohnerinnen_relevant / 35 * geburtenrate_destatis_2024

n_erwartbare_geburten_ueber_30_min <- ceiling(n_ueber_30_min / 35 * geburtenrate_destatis_2024)
n_erwartbare_geburten_ueber_40_min <- ceiling(n_ueber_40_min / 35 * geburtenrate_destatis_2024)
n_erwartbare_geburten_ueber_50_min <- ceiling(n_ueber_50_min / 35 * geburtenrate_destatis_2024)

```

```{r}
#| label: load-n_geburten
#| output: false

# load(
#     file = c(
#         "data",
#         "n_geburten.RData"
#     ) |>
#         reduce(file.path) |>
#         normalizePath()
# )

load(url(file.path(
  data_url,
  "n_geburten.RData"
)))
```

```{r}
#| label: kliniken_mit_weniger_500_geburten_pro_jahr
#| output: false

kliniken_mit_weniger_500_geburten_pro_jahr <- marker_data |>
    filter(Anzahl_Geburten < 500)

n_kliniken_mit_weniger_500_geburten <- nrow(
    kliniken_mit_weniger_500_geburten_pro_jahr
)

n_kliniken_mit_weniger_500_geburten_level_4 <- kliniken_mit_weniger_500_geburten_pro_jahr |>
    filter(Stufe == "Level 4") |>
    nrow()

bundesland_mapping <- c(
    "01" = "SH",
    "02" = "HH",
    "03" = "NI",
    "04" = "HB",
    "05" = "NW",
    "06" = "HE",
    "07" = "RP",
    "08" = "BW",
    "09" = "BY",
    "10" = "SL",
    "11" = "BE",
    "12" = "BB",
    "13" = "MV",
    "14" = "SN",
    "15" = "ST",
    "16" = "TH"
)


n_kliniken_mit_weniger_500_geburten_nrw <- kliniken_mit_weniger_500_geburten_pro_jahr |>
    filter(Bundesland == "05") |>
    nrow()

```

::: m-news-single__ce

-   das SMC hat eine Übersicht zur Verteilung der verschiedenen Versorgungslevel von Geburtskliniken sowie zu deren Geburtenzahlen erstellt
-   analyisiert wurden zudem die aktuellen Fahrzeiten zur jeweils nächstgelegenen Geburtsklinik – ebenso wie die zu erwartenden Fahrzeitverlängerungen, wenn sehr kleine Geburtskliniken mit weniger als 500 Geburten pro Jahr aus der Versorgung fallen würden
-   anhand der Qualitätsberichte der Kliniken wurden zusätzlich die Geburten ermittelt, die zuletzt nicht im angemessenen Versorgungslevel erfolgten

Deutschland verfügt über ein dichtes Netz an Geburtskliniken. Eine wohnortnahe Versorgung ist den allermeisten Regionen gegeben. Recherchen des SMC zeigen, dass nur in wenigen Gebieten Geburtskliniken nicht innerhalb der von Fachleuten empfohlenen 30 bis 40 Minuten Fahrzeit erreichbar sind. Doch entscheidend für die Qualität der Versorgung ist weniger die Entfernung zur Klinik, sondern vielmehr, wo ein Kind zur Welt kommt. Längere Anfahrtswege können von Vorteil sein, sofern sie dazu führen, dass Geburten vermehrt in größeren, erfahrenen Kliniken stattfinden.

Bei kleinen Geburtskliniken mit weniger als 500 Geburten im Jahr, das sind lediglich 1,4 Geburten am Tag, sehen Fachleute die Wirtschaftlickeit und Versorgungsqualität gefährdet. Dennoch gab es in Deutschland zuletzt `r format_SMC(n_kliniken_mit_weniger_500_geburten)` solcher Kliniken, wie eine Auswertung des SMC zeigt. Eine Fahrzeitenanalyse ergibt: Selbst wenn diese Kliniken aus der Versorgung herausgenommen würden, würden sich die Fahrzeiten zur dann nächstgelegenen Geburtsklinik mit mehr als 500 Geburten nur in wenigen Regionen deutlich erhöhen.

Weniger kleine Geburtskliniken und mehr Geburten in spezialisierten Häusern – dies könnte dazu beitragen, dass vor allem Kinder mit erhöhtem Gesundheitsrisiko seltener in Kliniken zur Welt kommen, die für ihre Versorgung nicht optimal sind. Das SMC hat deshalb auch die Zahl der Geburten, die zuletzt nicht in der angemessenen Versorgungsstufe erfolgten, aus den Qualitätsberichten aller Kliniken ermittelt.

### Status quo

**In Deutschland gibt es aktuell `r format_SMC(n_klinken_mit_geburten)` Kliniken, in denen Kinder zur Welt gebracht werden.** Nach [Empfehlungen](https://www.bundesgesundheitsministerium.de/fileadmin/Dateien/3_Downloads/K/Krankenhausreform/BMG_Regierungskommission_12te_Zukunftsfaehige_Versorgung.pdf){target="_blank"} der Regierungskommission für eine moderne und bedarfsgerechte Krankenhausversorgung sollte eine Geburtsklinik in Ballungszentren innerhalb von maximal 30 und in dünner besiedelten Gebieten innerhalb von maximal 40 Minuten Fahrzeit erreicht werden. Die meisten Schwangeren fahren selbst beziehungsweise mit Angehörigen mit dem eigenen Pkw ins Krankenhaus. Fahrten mit dem Krankenwagen sind selten. Die Geburt ist also mehrheitlich ein planbarer Eingriff.

Hierzulande lebten laut Zensusdaten von 2022 insgesamt `r format_SMC(n_total_Einwohnerinnen_relevant)` Einwohnerinnen im gebärfähigen Alter, also zwischen 15 und 49 Jahren. Im Jahr 2023 kamen den aktuellen Qualiätsberichten der Kliniken zufolge `r format_SMC(n_geburten_total)` Kinder in einer Klinik zur Welt.

Eine Fahrzeit von unter 30 Minuten zur nächsten Geburtsklinik trifft auf gut `r format_SMC(prozent_unter_30_min)` Prozent aller Einwohnerinnen im gebärfähigen Alter (`r format_SMC(n_unter_30_min)`) zu, wie eine Analyse des SMC zeigt. Lediglich `r format_SMC(prozent_ueber_30_min)` Prozent müssen länger fahren: `r format_SMC(n_ueber_30_min)` der Einwohnerinnen im gebärfähigen Alter benötigen mehr als 30 Minuten bis zur nächstgelegenen Geburtsklinik. In dieser Gruppe wären `r format_SMC(n_erwartbare_geburten_ueber_30_min)` Geburten zu erwarten. `r format_SMC(prozent_ueber_40_min)` Prozent fahren mehr als 40 und nur `r format_SMC(prozent_ueber_50_min)` Prozent mehr als 50 Minuten. **Insgesamt sind `r format_SMC(n_ueber_40_min)` Einwohnerinnen im gebärfähigen Alter von Fahrzeiten über den maximal empfohlenen 40 Minuten betroffen. Das entspricht `r format_SMC(n_erwartbare_geburten_ueber_40_min)` erwarteten Geburten.**

[***Karte I: Fahrzeiten zur nächstgelegenen Geburtsklinik***]{.underline}

```{r}
#| label: map-1
#| output: true

base_map_parameters <- get_base_map_parameters()
choropleth_layer_parameters <- get_choropleth_layer_parameters()
circle_marker_parameters <- get_circle_marker_parameters()

marker_data <- marker_data |>
    mutate(
        Stufe_roman = case_when(
            Stufe == "Level 1" ~ "Level I",
            Stufe == "Level 2" ~ "Level II",
            Stufe == "Perinataler Schwerpunkt" ~ "Level III",
            Stufe == "Level 4" ~ "Level IV",
            TRUE ~ Stufe
        )
    ) |>
    mutate(
        group = Stufe_roman
    )

marker_colors <- c(
    "Level I" = "#589296",
    "Level II" = "#8bc5c9",
    "Level III" = "#bffbff",
    "Level IV" = "#d3d3d3"
)

map <- create_base_map(base_map_parameters = base_map_parameters) |>
    enable_shared_leaflet_control_style() |>
    prependContent(
        shared_leaflet_control_style()
    ) |>
    # Panes with higher index are rendered above panes with lower indices.
    # Somehow a difference > 100 is needed to render the choropleth layer below the basemap
    ##### Choropleth
    addMapPane("choropleth", zIndex = 350) |>
    map_add_choropleth_layer(
        polygon_data = polygon_data,
        polygon_color_mapping = polygon_data$polygon_color_mapping,
        polygon_label = polygon_data$label,
        choropleth_layer_parameters = choropleth_layer_parameters,
        leaflet_group = "Fahrzeiten"
    ) |>
    addLegend(
        "bottomleft",
        values = polygon_data$Mittlere_Gewichtete_Fahrzeit,
        title = HTML("Fahrzeit in min"),
        opacity = 1,
        colors = choropleth_legend_colors,
        labels = choropleth_legend_labels
    ) |>
    ##### Basemap
    addMapPane("basemap", zIndex = 500) |>
    addTiles(
        urlTemplate = "https://tileserver.smc.report/data/all_zoom_levels/{z}/{x}/{y}.png",
        options = pathOptions(pane = "basemap"),
        attribution = "Map data from <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a>",
        group = "basemap"
    ) |>
    ##### Markers
    addMapPane("markerPane", zIndex = 600) |>
    addCircleMarkers(
        data = marker_data,
        label = marker_data$label,
        fillColor = marker_data$fillColor,
        color = marker_data$color,
        radius = circle_marker_parameters$radius,
        stroke = circle_marker_parameters$stroke,
        weight = circle_marker_parameters$weight,
        fillOpacity = circle_marker_parameters$fillOpacity,
        labelOptions = circle_marker_parameters$labelOptions,
        options = circle_marker_parameters$options,
        group = marker_data$group
    ) |>
    addLegendCustomToggle(
        # markers
        "bottomright",
        colors = unname(marker_colors),
        labels = names(marker_colors),
        title = HTML("Geburtskliniken")
        # opacity = 0.0,
    ) |>
    ##### Features
    addResetMapButton() |>
    addFullscreenControl(position = "topleft") |>
    addSearchFeatures(
        targetGroups = c("Fahrzeiten", unique(unname(marker_data$group))),
        options = searchFeaturesOptions(
            zoom = 9,
            openPopup = FALSE,
            autoCollapse = TRUE,
            position = "topright",
            marker = list(
                icon = NULL,
                animate = TRUE,
                circle = list(
                    radius = 10,
                    weight = 3,
                    color = "orange",
                    stroke = TRUE,
                    fill = FALSE
                )
            )
        )
    )

map

```

```{r}
filename <- "Fahrzeiten_Geburtskliniken"

data_choropleth <- tibble(
    fileformat = c("geojson", "csv", "geojson", "csv"),
    filename_suffix = c("Kliniken", "Kliniken", "Fahrzeiten", "Fahrzeiten")
)

images_choropleth <- tibble(
    fileformat = c("html", "pdf", "png"),
    filename_suffix = c("")
)

htmlpfad <- file.path(imagepath, paste0(filename, ".html"))
pngpfad <- file.path(imagepath, paste0(filename, ".png"))
pdfpfad <- file.path(imagepath, paste0(filename, ".pdf"))

datenpfad_markers <- file.path(imagepath, paste0(filename, "_Kliniken.geojson"))
datenpfad_polygons <- file.path(imagepath, paste0(filename, "_Fahrzeiten.geojson"))

datenpfad_markers_csv <- file.path(imagepath, paste0(filename, "_Kliniken.csv"))
datenpfad_polygons_csv <- file.path(imagepath, paste0(filename, "_Fahrzeiten.csv"))

mapshot(map, url = htmlpfad)

mapshot2(
    map,
    file = pngpfad,
    vwidth = 750,
    vheight = 750,
    delay = 10,
    zoom = 10,
    selector = ".leaflet-container",
    remove_controls = c("homeButton"),
)

mapshot2(
    map,
    file = pdfpfad,
    vwidth = 750,
    vheight = 750,
    delay = 10,
    zoom = 10,
    selector = ".leaflet-container",
    remove_controls = c("homeButton"),
)

polygon_data |> 
    st_drop_geometry() |> 
    select(
        Gemeindename,
        Gemeindeschluessel,
        Mittlere_Gewichtete_Fahrzeit,
        Mittlere_Gewichtete_Fahrzeit_formatted,
        # alle Einwohner der Gemeinde
        # summiert über alle Altersklassen via Zensus-Daten auf Gemeindeebene
        Einwohner_Gesamt, 
        Einwohner_Gesamt_formatted,
        # 3_variable_attribute_label == Total in Zensus-Daten auf Gemeindeebene
        Einwohner_total, 
        Einwohner_total_via_Gitterzellen, # via Gitterzellen
        # Einwohner mit Fahrzeit > 30 min
        Anzahl_Betroffene,
        Anzahl_Betroffene_formatted,
        Prozent_Betroffene,
        Prozent_Betroffene_formatted,
        # Einwohnerinnen im gebärfähigen Alter
        Einwohnerinnen_relevant,
        Einwohnerinnen_relevant_formatted,
        Anteil_Einwohnerinnen_relevant,
        # Einwohnerinnen mit Fahrzeit > 30 min
        Anzahl_Betroffene_relevant,
        Anzahl_Betroffene_relevant_formatted,
        Prozent_Betroffene_relevant,
        Prozent_Betroffene_relevant_formatted,
        # Tooltip
        label,
        polygon_color_mapping
    ) |> 
    write_csv(datenpfad_polygons_csv)

marker_data |> 
    st_drop_geometry() |> 
    select(
        "Krankenhaus_IK",
        "Krankenhaus_Standort_ID",
        "Krankenhaus_Standortnummer",
        # Karte
        "color",
        "fillColor",
        "group",
        "label",
        "Stufe",
        # INEK-Verzeichnis Auslese
        "Adresse",
        "Bezeichnung",
        "Einrichtung_Name",
        "Träger",
        "Straße",
        "Ort",
        "Postleitzahl",
        "Bundesland",
        # DeQS Auslese
        "Anzahl_Geburten",
        "Anzahl_Geburten_formatted",
        "Geburten_Herkunft",
        "Anzahl_Datensaetze_Standort",
        "Fallzahl",
        "DeQS_Bezeichnung",
        "Dokumentationsrate",
        "Kuerzel",
        # in_perinatalzentren_but_not_deqs
        "Standort-ID_matched",
        "Krankenhaus_Standortnummer_matched",
        "Krankenhausstandort_matched",
        "Standort-ID_original",
        "Krankenhaus_Standortnummer_original",
        "reason_for_correction",
        "Krankenhausstandort_original",
        "n_births_milupa",
        "use_Fallzahl",
        "notes",
        # redundante Spalten
        # "IK",
        # "Krankenhausstandort",
        # "list_id",
        # "Standortnummer",
        # "web-scraper-order",
        # "web-scraper-start-url",
    ) |> 
    write_csv(datenpfad_markers_csv)

polygon_data |>
    select(
        Gemeindename,
        Gemeindeschluessel,
        Mittlere_Gewichtete_Fahrzeit,
        Mittlere_Gewichtete_Fahrzeit_formatted,
        # alle Einwohner der Gemeinde
        # summiert über alle Altersklassen via Zensus-Daten auf Gemeindeebene
        Einwohner_Gesamt, 
        Einwohner_Gesamt_formatted,
        # 3_variable_attribute_label == Total in Zensus-Daten auf Gemeindeebene
        Einwohner_total, 
        Einwohner_total_via_Gitterzellen, # via Gitterzellen
        # Einwohner mit Fahrzeit > 30 min
        Anzahl_Betroffene,
        Anzahl_Betroffene_formatted,
        Prozent_Betroffene,
        Prozent_Betroffene_formatted,
        # Einwohnerinnen im gebärfähigen Alter
        Einwohnerinnen_relevant,
        Einwohnerinnen_relevant_formatted,
        Anteil_Einwohnerinnen_relevant,
        # Einwohnerinnen mit Fahrzeit > 30 min
        Anzahl_Betroffene_relevant,
        Anzahl_Betroffene_relevant_formatted,
        Prozent_Betroffene_relevant,
        Prozent_Betroffene_relevant_formatted,
        # Tooltip
        label,
        polygon_color_mapping,
        geometry
    ) |> 
    st_write(datenpfad_polygons, delete_dsn = TRUE, quiet = TRUE)

marker_data |>
    select(
        "Krankenhaus_IK",
        "Krankenhaus_Standort_ID",
        "Krankenhaus_Standortnummer",
        # Karte
        "color",
        "fillColor",
        "group",
        "label",
        "Stufe",
        # INEK-Verzeichnis Auslese
        "Adresse",
        "Bezeichnung",
        "Einrichtung_Name",
        "Träger",
        "Straße",
        "Ort",
        "Postleitzahl",
        "Bundesland",
        # DeQS Auslese
        "Anzahl_Geburten",
        "Anzahl_Geburten_formatted",
        "Geburten_Herkunft",
        "Anzahl_Datensaetze_Standort",
        "Fallzahl",
        "DeQS_Bezeichnung",
        "Dokumentationsrate",
        "Kuerzel",
        # in_perinatalzentren_but_not_deqs
        "Standort-ID_matched",
        "Krankenhaus_Standortnummer_matched",
        "Krankenhausstandort_matched",
        "Standort-ID_original",
        "Krankenhaus_Standortnummer_original",
        "reason_for_correction",
        "Krankenhausstandort_original",
        "n_births_milupa",
        "use_Fallzahl",
        "notes",
        # redundante Spalten
        # "IK",
        # "Krankenhausstandort",
        # "list_id",
        # "Standortnummer",
        # "web-scraper-order",
        # "web-scraper-start-url",
        "geometry"
    ) |> 
    st_write(datenpfad_markers, delete_dsn = TRUE, quiet = TRUE)

image_helper_light(
    filename = filename,
    filepath = imagepath,
    data = data_choropleth,
    images = images_choropleth,
    captions = caption_karte_1
)
```

*Karte I: Zu sehen sind die durchschnittlichen Fahrzeiten jeder 100-mal-100-Meter-Gitterzelle in Deutschland zur nächstgelegenen Geburtsklinik (Punkte). Zudem ist die Zahl der Einwohnerinnen im gebärfähigen Alter angegeben, die davon betroffen sind. Die verschiedenen Kliniklevel sind zur Übersicht an- und abwählbar. Die Fahrzeitenberechnung erfolgt allerdings nicht neu. Die Geburtenzahlen sind auf dem Stand 2023.*

**Doch nicht jede Klinik kann und darf jede Geburt betreuen.** Hierzulande sind Geburtskliniken in vier [Versorgungslevel](https://perinatalzentren.org/informationen/faq/#collapse70){target="_blank"} eingeteilt. Diese Level geben an, wie gut eine Klinik für Früh- oder Risikogeburten ausgestattet ist. „Normale“, also risikoarme Geburten können in allen Leveln erfolgen.

In Kliniken mit vielen Geburten kommt es [seltener](https://www.bundesgesundheitsministerium.de/fileadmin/Dateien/3_Downloads/K/Krankenhausreform/BMG_Regierungskommission_12te_Zukunftsfaehige_Versorgung.pdf){target="_blank"} kurz vor, während oder kurz nach der Geburt zum Tod des Kindes (perinatale Mortalität). Zudem kann durch die direkte Anbindung einer Kinderklinik bei einem Notfall wertvolle Zeit gewonnen werden. Gemäß Empfehlungen der Regierungskommission soll [„mittelfristig“](https://www.bundesgesundheitsministerium.de/presse/pressemitteilungen/regierungskommission-legt-empfehlung-fuer-zukunftsfaehige-geburtshilfe-vor-pm-14-11-2024.html){target="_blank"} an allen Geburtskliniken auch eine pädiatrische Abteilung zur Versorgung von Neugeborenen vorhanden sein. Dies ist aktuell nur in Kliniken der Level I bis II zwingend erforderlich. Für den Level-III-Status reicht eine enge Kooperation. **Level-IV-Häuser müssen keine Zusammenarbeit mit einer Kinderklinik nachweisen. Sie machen aber bundesweit `r format_SMC(prozent_kliniken_level_4)` Prozent (`r format_SMC(n_kliniken_level_4)`) aller Geburtskliniken aus.**

### Niedrige Geburtenzahlen

**Bei Kliniken mit weniger als 500 Geburten pro Jahr sind laut Regierungskommission Versorgungsqualität und Wirtschaftlichkeit gefährdet.**

**In Deutschland gab es zuletzt `r format_SMC(n_kliniken_mit_weniger_500_geburten)` Kliniken (`r format_SMC(n_kliniken_mit_weniger_500_geburten_level_4)` davon Level IV), in denen jährlich weniger als 500 Kinder zur Welt gekommen sind.** In solchen Fällen empfiehlt die Regierungskommission einen Zusammenschluss zu größeren Verbünden. Doch die Entscheidung darüber, ob eine Klinik fusionieren muss oder gar geschlossen wird, obliegt nicht dem Bund, sondern den Ländern. Krankenhausplanung ist Ländersache.

Im Zuge der bundesweiten Klinikreform ist eine Konzentration der Geburten aktuell kaum zu beobachten. Besonders kleine Geburtskliniken, die häufig unterfinanziert sind, erhalten gezielte [finanzielle Unterstützung](https://www.land.nrw/pressemitteilung/25-millionen-euro-fuer-kleine-geburtshilfen-nordrhein-westfalen){target="_blank"}, damit sie zunächst bestehen bleiben. In Nordrhein-Westfalen wurden beispielsweise [alle Anträge](https://www.mags.nrw/25-millionen-euro-fuer-kleine-geburtshilfen-nordrhein-westfalen#:~:text=Wir%20sind%20froh%20%C3%BCber%20jedes%20Krankenhaus%2C%20das,haben%2C%20dass%20sie%20eine%20Geburtshilfe%20schlie%C3%9Fen%20wollen){target="_blank"} für die Leistungsgruppe „Geburtshilfe“ bewilligt, sofern die Mindestkriterien erfüllt waren und keine Schließung angezeigt wurde. In NRW gibt es `r format_SMC(n_kliniken_mit_weniger_500_geburten_nrw)` Kliniken mit weniger als 500 Geburten pro Jahr.

**Ein häufiges Argument gegen die Schließung oder Zusammenlegung kleinerer Geburtshäuser sind längere Fahrzeiten zur nächstgelegenen Klinik.**

In der folgenden Karte ist eine hypothetische Versorgungslandschaft dargestellt, bei der alle Kliniken mit unter 500 Geburten pro Jahr nicht an der Versorgung teilnehmen.

[***Karte II: Versorgungsbeispiel ohne Kliniken mit weniger als 500 Geburten pro Jahr***]{.underline}

```{r}
#| label: get-data-related-to-map-2
#| output: false

# load(
#     file = c(
#         "data",
#         "map_perinatalzentren_data_with_gte_500_birth_Frauen_im_gebaerfaehigen_Alter.RData"
#     ) |>
#         reduce(file.path) |>
#         normalizePath()
# )

load(url(file.path(
  data_url,
    "map_perinatalzentren_data_with_gte_500_birth_Frauen_im_gebaerfaehigen_Alter.RData"
)))

# szenario_1 = Kliniken mit Level I bis IV mit mehr als 500 Geburten

# < 30 min zur nächsten Geburtsklinik
n_ueber_30_min_szenario_1 <- sum(
    polygon_data$Anzahl_Betroffene_relevant,
    na.rm = TRUE
)
n_unter_30_min_szenario_1 <- n_total_Einwohnerinnen_relevant -
    n_ueber_30_min_szenario_1
prozent_ueber_30_min_szenario_1 <- round(
    n_ueber_30_min_szenario_1 / n_total_Einwohnerinnen_relevant * 100,
    1
)
prozent_unter_30_min_szenario_1 <- round(
    n_unter_30_min_szenario_1 / n_total_Einwohnerinnen_relevant * 100,
    1
)

n_ueber_40_min_szenario_1 <- sum(
    ueber_40$Anzahl_Betroffene_relevant,
    na.rm = TRUE
)
prozent_ueber_40_min_szenario_1 <- round(
    n_ueber_40_min_szenario_1 / n_total_Einwohnerinnen_relevant * 100,
    1
)

n_ueber_50_min_szenario_1 <- sum(
    ueber_50$Anzahl_Betroffene_relevant,
    na.rm = TRUE
)
prozent_ueber_50_min_szenario_1 <- round(
    n_ueber_50_min_szenario_1 / n_total_Einwohnerinnen_relevant * 100,
    1
)

n_ueber_30_min_szenario_1_mehr <- n_ueber_30_min_szenario_1 - n_ueber_30_min
n_ueber_40_min_szenario_1_mehr <- n_ueber_40_min_szenario_1 - n_ueber_40_min
n_ueber_50_min_szenario_1_mehr <- n_ueber_50_min_szenario_1 - n_ueber_50_min

prozent_ueber_40_min_szenario_1_mehr_im_vergleich_zu_status_quo <- round(
    n_ueber_40_min_szenario_1 / n_ueber_40_min * 100 - 100,
    1
)

n_geburten <- marker_data |>
    st_drop_geometry() |>
    summarise(
        Geburten = sum(Anzahl_Geburten, na.rm = TRUE)
    ) |>
    summarise(total = sum(Geburten)) |>
    pull(total)


n_geburten_in_level_4 <- marker_data |>
    st_drop_geometry() |>
    filter(Stufe == "Level 4") |>
    # Summe der Geburten in Level-IV-Kliniken
    summarise(
        Geburten = sum(Anzahl_Geburten, na.rm = TRUE)
    ) |>
    summarise(total = sum(Geburten)) |>
    pull(total)


n_geburten_in_klinik_unter_500 <- marker_data |>
    st_drop_geometry() |>
    filter(Anzahl_Geburten < 500) |>
    summarise(
        Geburten = sum(Anzahl_Geburten, na.rm = TRUE)
    ) |>
    summarise(total = sum(Geburten)) |>
    pull(total)

n_geburten_in_klinik_ueber_500 <- marker_data |>
    st_drop_geometry() |>
    filter(Anzahl_Geburten >= 500) |>
    summarise(
        Geburten = sum(Anzahl_Geburten, na.rm = TRUE)
    ) |>
    summarise(total = sum(Geburten)) |>
    pull(total)


n_erwartbare_geburten_ueber_40_min_szenario_1 <- ceiling(n_ueber_40_min_szenario_1 / 35 * geburtenrate_destatis_2024)
```

```{r}
#| label: get-data-map-2
#| output: false

# load(
#     file = c(
#         "data",
#         "map_perinatalzentren_data_szenario_1_differenz_Frauen_im_gebaerfaehigen_Alter.RData"
#     ) |>
#         reduce(file.path) |>
#         normalizePath()
# )

load(url(file.path(
  data_url,
    "map_perinatalzentren_data_szenario_1_differenz_Frauen_im_gebaerfaehigen_Alter.RData"
)))

marker_data <- marker_data |>
    mutate(
        group = case_when(
            Anzahl_Geburten < 500 ~ "weniger als 500",
            Anzahl_Geburten >= 500 ~ "500 oder mehr"
        )
    )

```

```{r}
#| label: map-2
#| output: true

base_map_parameters <- get_base_map_parameters()
choropleth_layer_parameters <- get_choropleth_layer_parameters()
circle_marker_parameters <- get_circle_marker_parameters()

marker_data <- marker_data |>
    mutate(
        Stufe_roman = case_when(
            Stufe == "Level 1" ~ "Level I",
            Stufe == "Level 2" ~ "Level II",
            Stufe == "Perinataler Schwerpunkt" ~ "Level III",
            Stufe == "Level 4" ~ "Level IV",
            TRUE ~ Stufe
        )
    )

marker_colors <- c(
    "Level I" = "#589296",
    "Level II" = "#8bc5c9",
    "Level III" = "#bffbff",
    "Level IV" = "#d3d3d3"
)

map <- create_base_map(base_map_parameters = base_map_parameters) |>
    enable_shared_leaflet_control_style() |>
    prependContent(
        shared_leaflet_control_style()
    ) |>
    # Panes with higher index are rendered above panes with lower indices.
    # Somehow a difference > 100 is needed to render the choropleth layer below the basemap
    ##### Choropleth
    addMapPane("choropleth", zIndex = 350) |>
    map_add_choropleth_layer(
        polygon_data = polygon_data,
        polygon_color_mapping = polygon_data$polygon_color_mapping,
        polygon_label = polygon_data$label,
        choropleth_layer_parameters = choropleth_layer_parameters,
        leaflet_group = "Fahrzeiten"
    ) |>
    addLegend(
        "bottomleft",
        values = polygon_data$Mittlere_Gewichtete_Fahrzeit,
        title = HTML("Fahrzeit in min"),
        opacity = 1,
        colors = choropleth_legend_colors,
        labels = choropleth_legend_labels
    ) |>
    ##### Basemap
    addMapPane("basemap", zIndex = 500) |>
    addTiles(
        urlTemplate = "https://tileserver.smc.report/data/all_zoom_levels/{z}/{x}/{y}.png",
        options = pathOptions(pane = "basemap"),
        attribution = "Map data from <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a>",
        group = "basemap"
    ) |>
    ##### Markers
    addMapPane("markerPane", zIndex = 600) |>
    addCircleMarkers(
        data = marker_data,
        label = marker_data$label,
        fillColor = marker_data$fillColor,
        color = marker_data$color,
        radius = circle_marker_parameters$radius,
        stroke = circle_marker_parameters$stroke,
        weight = circle_marker_parameters$weight,
        fillOpacity = circle_marker_parameters$fillOpacity,
        labelOptions = circle_marker_parameters$labelOptions,
        options = circle_marker_parameters$options,
        group = marker_data$group
    ) |>
    addLegendCustom(
        # markers
        "bottomright",
        colors = unname(marker_colors),
        labels = names(marker_colors),
        sizes = 15,
        title = HTML("Geburtskliniken"),
        opacity = 1
    ) |>
    ##### Features
    addResetMapButton() |>
    addFullscreenControl(position = "topleft") |>
    addSearchFeatures(
        targetGroups = c("Fahrzeiten", unique(unname(marker_data$group))),
        options = searchFeaturesOptions(
            zoom = 9,
            openPopup = FALSE,
            autoCollapse = TRUE,
            position = "topright",
            marker = list(
                icon = NULL,
                animate = TRUE,
                circle = list(
                    radius = 10,
                    weight = 3,
                    color = "orange",
                    stroke = TRUE,
                    fill = FALSE
                )
            )
        )
    ) |>
    addGroupedLayersControl(
        # baseGroups = c("basemap"),
        overlayGroups = list(
            "Geburten pro Jahr" = c(
                "weniger als 500",
                "500 oder mehr"
            )
        ),
        position = c("bottomright"),
        options = groupedLayersControlOptions(
            groupCheckboxes = FALSE,
            collapsed = FALSE,
            groupsCollapsable = FALSE,
            sortLayers = FALSE,
            sortGroups = FALSE,
            sortBaseLayers = FALSE,
            exclusiveGroups = character(0)
        )
    ) |>
    # Hide the "500 oder mehr" group so it starts toggled off:
    hideGroup("500 oder mehr")

map
```

```{r}
filename <- "Fahrzeiten_Differenz_mit_Szenario"

data_choropleth <- tibble(
    fileformat = c("geojson", "csv", "geojson", "csv"),
    filename_suffix = c("Kliniken", "Kliniken", "Fahrzeiten", "Fahrzeiten")
)


images_choropleth <- tibble(
    fileformat = c("html", "pdf", "png"),
    filename_suffix = c("")
)

htmlpfad <- file.path(imagepath, paste0(filename, ".html"))
pngpfad <- file.path(imagepath, paste0(filename, ".png"))
pdfpfad <- file.path(imagepath, paste0(filename, ".pdf"))


datenpfad_markers <- file.path(imagepath, paste0(filename, "_Kliniken.geojson"))
datenpfad_polygons <- file.path(imagepath, paste0(filename, "_Fahrzeiten.geojson"))

datenpfad_markers_csv <- file.path(imagepath, paste0(filename, "_Kliniken.csv"))
datenpfad_polygons_csv <- file.path(imagepath, paste0(filename, "_Fahrzeiten.csv"))


mapshot(map, url = htmlpfad)

mapshot2(
    map,
    file = pngpfad,
    vwidth = 750,
    vheight = 750,
    delay = 10,
    zoom = 10,
    selector = ".leaflet-container",
    remove_controls = c("homeButton"),
)

mapshot2(
    map,
    file = pdfpfad,
    vwidth = 750,
    vheight = 750,
    delay = 10,
    zoom = 10,
    selector = ".leaflet-container",
    remove_controls = c("homeButton"),
)

polygon_data |>
    st_drop_geometry() |> 
    select(
        Gemeindename,
        Gemeindeschluessel,
        Mittlere_Gewichtete_Fahrzeit_Differenz,
        Mittlere_Gewichtete_Fahrzeit_Differenz_formatted,
        # alle Einwohner der Gemeinde
        # summiert über alle Altersklassen via Zensus-Daten auf Gemeindeebene
        Einwohner_Gesamt, 
        Einwohner_Gesamt_formatted,
        # 3_variable_attribute_label == Total in Zensus-Daten auf Gemeindeebene
        Einwohner_total, 
        Einwohner_total_via_Gitterzellen, # via Gitterzellen
        # Einwohner mit Fahrzeit > 30 min
        Anzahl_Betroffene,
        Anzahl_Betroffene_formatted,
        Prozent_Betroffene,
        Prozent_Betroffene_formatted,
        # Einwohnerinnen im gebärfähigen Alter
        Einwohnerinnen_relevant,
        Einwohnerinnen_relevant_formatted,
        Anteil_Einwohnerinnen_relevant,
        # Einwohnerinnen mit Fahrzeit > 30 min
        Anzahl_Betroffene_relevant,
        Anzahl_Betroffene_relevant_formatted,
        Prozent_Betroffene_relevant,
        Prozent_Betroffene_relevant_formatted,
        # Tooltip
        label,
        polygon_color_mapping
    ) |> 
    write_csv(datenpfad_polygons_csv)

marker_data |>
    st_drop_geometry() |> 
    select(
        "Krankenhaus_IK",
        "Krankenhaus_Standort_ID",
        "Krankenhaus_Standortnummer",
        # Karte
        "color",
        "fillColor",
        "group",
        "label",
        "Stufe",
        "Stufe_roman",
        # INEK-Verzeichnis Auslese
        "Adresse",
        "Bezeichnung",
        "Einrichtung_Name",
        "Träger",
        "Straße",
        "Ort",
        "Postleitzahl",
        "Bundesland",
        # DeQS Auslese
        "Anzahl_Geburten",
        "Anzahl_Geburten_formatted",
        "Geburten_Herkunft",
        "Anzahl_Datensaetze_Standort",
        "Fallzahl",
        "DeQS_Bezeichnung",
        "Dokumentationsrate",
        "Kuerzel",
        # in_perinatalzentren_but_not_deqs
        "Standort-ID_matched",
        "Krankenhaus_Standortnummer_matched",
        "Krankenhausstandort_matched",
        "Standort-ID_original",
        "Krankenhaus_Standortnummer_original",
        "reason_for_correction",
        "Krankenhausstandort_original",
        "n_births_milupa",
        "use_Fallzahl",
        "notes",
        # redundante Spalten
        # "IK",
        # "Krankenhausstandort",
        # "list_id",
        # "Standortnummer",
        # "web-scraper-order",
        # "web-scraper-start-url",
    ) |> 
    write_csv(datenpfad_markers_csv)

polygon_data |>
    select(
        Gemeindename,
        Gemeindeschluessel,
        Mittlere_Gewichtete_Fahrzeit_Differenz,
        Mittlere_Gewichtete_Fahrzeit_Differenz_formatted,
        # alle Einwohner der Gemeinde
        # summiert über alle Altersklassen via Zensus-Daten auf Gemeindeebene
        Einwohner_Gesamt, 
        Einwohner_Gesamt_formatted,
        # 3_variable_attribute_label == Total in Zensus-Daten auf Gemeindeebene
        Einwohner_total, 
        Einwohner_total_via_Gitterzellen, # via Gitterzellen
        # Einwohner mit Fahrzeit > 30 min
        Anzahl_Betroffene,
        Anzahl_Betroffene_formatted,
        Prozent_Betroffene,
        Prozent_Betroffene_formatted,
        # Einwohnerinnen im gebärfähigen Alter
        Einwohnerinnen_relevant,
        Einwohnerinnen_relevant_formatted,
        Anteil_Einwohnerinnen_relevant,
        # Einwohnerinnen mit Fahrzeit > 30 min
        Anzahl_Betroffene_relevant,
        Anzahl_Betroffene_relevant_formatted,
        Prozent_Betroffene_relevant,
        Prozent_Betroffene_relevant_formatted,
        # Tooltip
        label,
        polygon_color_mapping,
        geometry
    ) |> 
    st_write(datenpfad_polygons, delete_dsn = TRUE, quiet = TRUE)

marker_data |>
    select(
        "Krankenhaus_IK",
        "Krankenhaus_Standort_ID",
        "Krankenhaus_Standortnummer",
        # Karte
        "color",
        "fillColor",
        "group",
        "label",
        "Stufe",
        "Stufe_roman",
        # INEK-Verzeichnis Auslese
        "Adresse",
        "Bezeichnung",
        "Einrichtung_Name",
        "Träger",
        "Straße",
        "Ort",
        "Postleitzahl",
        "Bundesland",
        # DeQS Auslese
        "Anzahl_Geburten",
        "Anzahl_Geburten_formatted",
        "Geburten_Herkunft",
        "Anzahl_Datensaetze_Standort",
        "Fallzahl",
        "DeQS_Bezeichnung",
        "Dokumentationsrate",
        "Kuerzel",
        # in_perinatalzentren_but_not_deqs
        "Standort-ID_matched",
        "Krankenhaus_Standortnummer_matched",
        "Krankenhausstandort_matched",
        "Standort-ID_original",
        "Krankenhaus_Standortnummer_original",
        "reason_for_correction",
        "Krankenhausstandort_original",
        "n_births_milupa",
        "use_Fallzahl",
        "notes",
        # redundante Spalten
        # "IK",
        # "Krankenhausstandort",
        # "list_id",
        # "Standortnummer",
        # "web-scraper-order",
        # "web-scraper-start-url",
        "geometry"
    ) |> 
    st_write(datenpfad_markers, delete_dsn = TRUE, quiet = TRUE)

image_helper_light(
    filename = filename,
    filepath = imagepath,
    data = data_choropleth,
    images = images_choropleth,
    captions = caption_karte_2
)
```

*Karte II: Dargestellt sind die zusätzlichen Fahrzeiten, die entstehen würden, wenn alle Kliniken (Punkte) mit unter 500 Geburten pro Jahr nicht mehr an der Versorgung teilnehmen würden. Kliniken mit mehr als 500 Geburten pro Jahr sind zur Übersicht an- und abwählbar. Die Fahrzeitenberechnung erfolgt allerdings nicht neu. Die Geburtenzahlen sind auf dem Stand 2023.*

Die Fahrzeiten zur nächstgelegenen Geburtsklinik würden sich in diesem Szenario entsprechend erhöhen. Im Vergleich zum Status quo würden im Fall einer Schwangerschaft zusätzlich `r format_SMC(n_ueber_30_min_szenario_1_mehr)` Einwohnerinnen im gebärfähigen Alter mehr als 30 Minuten zur nächsten Geburtsklinik fahren. Von über 40 Minuten wären `r format_SMC(n_ueber_40_min_szenario_1_mehr)` Einwohnerinnen im gebärfähigen Alter mehr betroffen, bei über 50 Minuten wären es `r format_SMC(n_ueber_50_min_szenario_1_mehr)`. **Insgesamt wären in diesem Szenario `r format_SMC(n_ueber_40_min_szenario_1)` Einwohnerinnen im gebärfähigen Alter von Fahrzeiten über den maximal empfohlenen 40 Minuten betroffen. Dies entspricht `r format_SMC(n_erwartbare_geburten_ueber_40_min_szenario_1)` erwarteten Geburten.**

**Die Auswirkungen sind je nach Region aber sehr unterschiedlich.** In NRW würden sich die Fahrzeiten beispielsweise nur in vereinzelten Gemeinden an der Grenze zu Hessen nennenswert erhöhen. In den östlichen Bundesländern käme es zu deutlicheren Fahrzeitenänderungen, etwa an der Grenze Sachsen/Brandenburg oder im Norden Sachsen-Anhalts. **Bundesweit betrachtet wären die Veränderungen aber eher als moderat einzustufen:** `r format_SMC(prozent_unter_30_min_szenario_1)` Prozent aller Einwohnerinnen im gebärfähigen Alter würden die nächstgelegene Geburtsklinik noch immer in unter 30 Minuten erreichen, wenn Kliniken mit weniger als 500 Geburten pro Jahr aus der Versorgung fallen.

Die Fahrzeiten würden sich bundesweit also leicht erhöhen, Geburten würden aber mehr als vorher in erfahrenen Kliniken mit höheren Fallzahlen stattfinden. Ein solches Szenario ist nicht einfach so umsetzbar. Die Geburten der wegfallenden Kliniken müssten auf andere Häuser umverteilt und deren Kapazitäten gegebenenfalls erhöht werden. **In unserem Szenario müssten `r format_SMC(n_geburten_in_klinik_unter_500)` Geburten neu verteilt werden, das heißt, rund fünf Prozent aller Geburten.** Dass sich eine solche Umverteilung aber grundsätzlich lohnen kann, zeigt ein Blick ins Ausland: So werden in den skandinavischen Ländern Finnland und Schweden sowie in Portugal bei starker Zentralisierung und zum Teil deutlich längeren Anfahrtswegen [bessere Ergebnisse](https://www.destatis.de/DE/Themen/Laender-Regionen/Internationales/Thema/Tabellen/Basistabelle_Saeuglingssterblichkeit.html){target="_blank"} bei der Säuglingssterblichkeit erreicht als in Deutschland.

Das Fundament für eine Umstrukturierung der Geburtenversorgung auf Landesebene wurde durch die Klinikreform gelegt. **Im aktuellen [Gesetzentwurf zur Anpassung der Reform (KHAG)](https://www.bundesgesundheitsministerium.de/presse/pressemitteilungen/anpassung-krankenhausreform-kabinett-pm-08-10-25.html){target="_blank"}, der jüngst vom Bundeskabinett beschlossen wurde, ist zudem explizit vorgesehen, dass alle Erreichbarkeitsvorgaben entfallen.** Das heißt, die Bundesländer müssen sich bei der Krankenhausplanung nicht mehr an bestimmten Fahrzeiten orientieren. Längere Fahrzeiten sind also eigentlich kein Argument mehr, eine Schließung oder Zusammenlegung einer Klinik beziehungsweise einer Abteilung zu verhindern – solange dadurch die Versorgungsqualität steigt.

### Geburt in der angemessenen Versorgungsstufe

Eine Versorgungsstruktur mit vielen kleinen beziehungsweise nicht ausreichend spezialisierten Kliniken kann dazu führen, dass zu viele Risikogeburten in Kliniken stattfinden, die für derlei Geburten eigentlich nicht vorgesehen sind. **Denn ob ein Kind nun in der „richtigen“ Klinik zur Welt kommt, hängt maßgeblich von den individuellen Risikofaktoren des Kindes beziehungsweise der Schwangeren ab.** Sie bestimmen, in welchem Versorgungslevel ein Kind idealerweise geboren werden sollte.

Das Institut für Qualitätssicherung und Transparenz im Gesundheitswesen (IQTIG) hat einen Qualitätsindikator entwickelt, der angibt, wie viele Geburten nicht in der angemessenen Versorgungsstufe erfolgten. Der Indikator beleuchtet die Geburten rückwirkend. Erhoben werden die Fallzahlen von Geburten, bei denen in der bundesweiten Qualitätssicherung festgestellt wurde, dass die Neugeborenen aufgrund eines absehbaren Gesundheitsrisikos in einer Klinik mit höherer Versorgungsstufe hätten geboren werden müssen. Diese Geburtenzahlen müssen die Kliniken in ihren Qualitätsberichten angeben.

Das SMC hat die Berichte sämtlicher Geburtskliniken systematisch analysiert und die jeweilige dokumentierte Zahl der Geburten in der nicht angemessenen Versorgungsstufe ermittelt.

Auf der folgenden Karte sind die Angaben für alle Geburtskliniken der Level II bis IV dargestellt. Level-I-Kliniken sind in der Regel nicht aufgeführt. Sie werden durch den Indikator auch nicht abgedeckt, da sie als Geburtskliniken der höchsten Versorgungstufe ausschließlich Geburten in der angemessenen Stufe aufweisen. Überversorgung ist kein Kriterium.

[***Karte III: Geburt in der nicht angemessenen Versorgungsstufe***]{.underline}

```{r}
#| label: get-data-map-3
#| output: true
#|
# load(
#     file = c(
#         "data",
#         "map_perinatalzentren_data_qualitaetsindikatoren_adaequate_geburt.RData"
#     ) |>
#         reduce(file.path) |>
#         normalizePath()
# )

load(url(file.path(
  data_url,
    "map_perinatalzentren_data_qualitaetsindikatoren_adaequate_geburt.RData"
)))

```

```{r}
#| label: map-3
#| output: true

popup_parameters <- popupOptions(
    maxWidth = 500,
    minWidth = 300,
    maxHeight = NULL,
    autoPan = TRUE,
    autoPanPadding = c(20, 200), # reduce how much Leaflet tries to pan
    keepInView = FALSE,
    closeButton = TRUE,
    closeOnClick = TRUE,
    className = "popup-above-legend",
    direction = "auto",
)

base_map_parameters <- get_base_map_parameters()
choropleth_layer_parameters <- get_choropleth_layer_parameters()
circle_marker_parameters <- get_circle_marker_parameters()

map <- create_base_map(base_map_parameters = base_map_parameters) |>
    ##### Basemap
    addMapPane("basemap", zIndex = 500) |>
    addTiles(
        urlTemplate = "https://tileserver.smc.report/data/all_zoom_levels/{z}/{x}/{y}.png",
        options = pathOptions(pane = "basemap"),
        attribution = "Map data from <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a>",
        group = "basemap"
    ) |>
    ##### Markers
    addMapPane("markerPane", zIndex = 600) |>
    addCircleMarkers(
        data = marker_data,
        popup = marker_data$label,
        popupOptions = popup_parameters,
        label = marker_data$label,
        labelOptions = labelOptions(
            permanent = FALSE,
            interactive = FALSE,
            opacity = 0
        ),
        fillColor = marker_data$fillColor,
        color = marker_data$color,
        radius = circle_marker_parameters$radius,
        stroke = circle_marker_parameters$stroke,
        weight = circle_marker_parameters$weight,
        fillOpacity = circle_marker_parameters$fillOpacity,
        options = circle_marker_parameters$options,
        group = marker_data$group_text
    ) |>
    addLegend(
        "bottomleft",
        pal = colorFactor(
        palette = divergent_colors[seq_len(length(legend_labels_lookup[[indicator_id_level_2]]))],
        domain = legend_labels_lookup[[indicator_id_level_2]],
        ordered = TRUE
        ),
        values = marker_data |>
        filter(group_ID == indicator_id_level_2) |>
        pull(percentile_group) |>
        factor(levels = legend_labels_lookup[[indicator_id_level_2]]),
        title = HTML("Anteil Geburten in nicht<br/>angemessener Stufe in %"),
        opacity = 1,
        group = level_2_zu_hoeher
    ) |>
    addLegend(
        "bottomleft",
        pal = colorFactor(
        palette = divergent_colors[seq_len(length(legend_labels_lookup[[indicator_id_level_3]]))],
        domain = legend_labels_lookup[[indicator_id_level_3]],
        ordered = TRUE
        ),
        values = marker_data |>
        filter(group_ID == indicator_id_level_3) |>
        pull(percentile_group) |>
        factor(levels = legend_labels_lookup[[indicator_id_level_3]]),
        title = HTML("Anteil Geburten in nicht<br/>angemessener Stufe in %"),
        opacity = 1,
        group = level_3_zu_hoeher
    ) |>
    addLegend(
        "bottomleft",
        pal = colorFactor(
        palette = divergent_colors[seq_len(length(legend_labels_lookup[[indicator_id_level_4]]))],
        domain = legend_labels_lookup[[indicator_id_level_4]],
        ordered = TRUE
        ),
        values = marker_data |>
        filter(group_ID == indicator_id_level_4) |>
        pull(percentile_group) |>
        factor(levels = legend_labels_lookup[[indicator_id_level_4]]),
        title = HTML("Anteil Geburten in nicht<br/>angemessener Stufe in %"),
        opacity = 1,
        group = level_4_zu_hoeher
    ) |>
    ##### Features
    addResetMapButton() |>
    addFullscreenControl(position = "topleft") |>
    addSearchFeatures(
        targetGroups = c(unique(unname(marker_data$group_text))),
        options = searchFeaturesOptions(
            propertyName = "label",
            zoom = 9,
            openPopup = TRUE,
            autoCollapse = TRUE,
            position = "topright",
            marker = list(
                icon = NULL,
                animate = TRUE,
                circle = list(
                    radius = 10,
                    weight = 3,
                    color = "orange",
                    stroke = TRUE,
                    fill = FALSE
                )
            )
        )
    ) |>
    addGroupedLayersControl(
        overlayGroups = list(
            "Qualitätsindikator" = c(
                level_2_zu_hoeher,
                level_3_zu_hoeher,
                level_4_zu_hoeher
            )
        ),
        position = c("bottomright"),
        options = groupedLayersControlOptions(
            groupCheckboxes = FALSE,
            collapsed = FALSE,
            groupsCollapsable = FALSE,
            sortLayers = FALSE,
            sortGroups = FALSE,
            sortBaseLayers = FALSE,
            exclusiveGroups = c(
                "Qualitätsindikator"
            )
        )
    ) |>
    hideGroup(level_2_zu_hoeher) |>
    hideGroup(level_3_zu_hoeher) |>
    addPopupBehavior() |>
    enable_shared_leaflet_control_style() |>
    prependContent(
        shared_leaflet_control_style()
    )

map

```

```{r}
filename <- "Qualiaetsindikatoren_Geburt"

data_choropleth <- tibble(
    fileformat = c("geojson", "csv"),
    filename_suffix = c("Kliniken", "Kliniken")
)

images_choropleth <- tibble(
    fileformat = c("html", "pdf", "png"),
    filename_suffix = c("")
)

htmlpfad <- file.path(imagepath, paste0(filename, ".html"))
pngpfad <- file.path(imagepath, paste0(filename, ".png"))
pdfpfad <- file.path(imagepath, paste0(filename, ".pdf"))

datenpfad_markers <- file.path(imagepath, paste0(filename, "_Kliniken.geojson"))
datenpfad_markers_csv <- file.path(imagepath, paste0(filename, "_Kliniken.csv"))

mapshot(map, url = htmlpfad)

mapshot2(
    map,
    file = pngpfad,
    vwidth = 750,
    vheight = 750,
    delay = 10,
    zoom = 10,
    selector = ".leaflet-container",
    remove_controls = c("homeButton"),
)

mapshot2(
    map,
    file = pdfpfad,
    vwidth = 750,
    vheight = 750,
    delay = 10,
    zoom = 10,
    selector = ".leaflet-container",
    remove_controls = c("homeButton"),
)

marker_data |>
    st_drop_geometry() |>
    select(
        "Krankenhaus_IK",
        "Krankenhaus_Standort_ID",
        "Krankenhaus_Standortnummer",
        # Karte
        "color",
        "fillColor",
        "group",
        "label",
        "Stufe",
        "Stufe_roman",
        "group_ID",
        "has_bounds",
        "min_val",
        "max_val",
        "bin_index",
        "percentile_group",
        "group_text",
        # INEK-Verzeichnis Auslese
        "Adresse",
        "Bezeichnung",
        "Einrichtung_Name",
        "Träger",
        "Straße",
        "Ort",
        "Postleitzahl",
        "Bundesland",
        # DeQS Auslese
        "Anzahl_Geburten",
        "Anzahl_Datensaetze_Standort",
        "Fallzahl",
        "DeQS_Bezeichnung",
        "Dokumentationsrate",
        "Kuerzel",
        # DeQS Indikatorwerte
        "Kuerzel_Leistungsbereich",
        "Bezeichnung_Leistungsbereich",
        "Ergebnis_ID",
        "Bezeichnung_Ergebnis",
        "Art_des_Wertes",
        "Bezug_zum_Verfahren",
        "Fachlicher_Hinweis_IQTIG",
        "Einheit",
        "Bundesergebnis",
        "Vertrauensbereich_Bundesweit_Vertrauensbereich_Untere_Grenze",
        "Vertrauensbereich_Bundesweit_Vertrauensbereich_Obere_Grenze",
        "Rechnerisches_Ergebnis",
        "Vertrauensbereich_Krankenhaus_Vertrauensbereich_Untere_Grenze",
        "Vertrauensbereich_Krankenhaus_Vertrauensbereich_Obere_Grenze",
        "Fallzahl_Grundgesamtheit",
        "Fallzahl_Beobachtete_Ereignisse",
        "Fallzahl_Erwartete_Ereignisse",
        "Ergebnis_Bewertung_Referenzbereich",
        "Ergebnis_Bewertung_Entwicklung_Ergebnis_zum_vorherigen_Berichtsjahr",
        "Ergebnis_Bewertung_Qualitative_Bewertung_Berichtsjahr",
        "Ergebnis_Bewertung_Qualitative_Bewertung_Vergleich_vorheriges_Berichtsjahr",
        "Ergebnis_Bewertung_Kommentar_Beauftragte_Stelle",
        "Ergebnis_text",
        # in_perinatalzentren_but_not_deqs
        "Standort-ID_matched",
        "Krankenhaus_Standortnummer_matched",
        "Krankenhausstandort_matched",
        "Standort-ID_original",
        "Krankenhaus_Standortnummer_original",
        "reason_for_correction",
        "Krankenhausstandort_original",
        "n_births_milupa",
        "use_Fallzahl",
        "notes",
        # geometrie
        # "geometry"
    ) |> 
    write_csv(datenpfad_markers_csv)

marker_data |>
    select(
        "Krankenhaus_IK",
        "Krankenhaus_Standort_ID",
        "Krankenhaus_Standortnummer",
        # Karte
        "color",
        "fillColor",
        "group",
        "label",
        "Stufe",
        "Stufe_roman",
        "group_ID",
        "has_bounds",
        "min_val",
        "max_val",
        "bin_index",
        "percentile_group",
        "group_text",
        # INEK-Verzeichnis Auslese
        "Adresse",
        "Bezeichnung",
        "Einrichtung_Name",
        "Träger",
        "Straße",
        "Ort",
        "Postleitzahl",
        "Bundesland",
        # DeQS Auslese
        "Anzahl_Geburten",
        "Anzahl_Datensaetze_Standort",
        "Fallzahl",
        "DeQS_Bezeichnung",
        "Dokumentationsrate",
        "Kuerzel",
        # DeQS Indikatorwerte
        "Kuerzel_Leistungsbereich",
        "Bezeichnung_Leistungsbereich",
        "Ergebnis_ID",
        "Bezeichnung_Ergebnis",
        "Art_des_Wertes",
        "Bezug_zum_Verfahren",
        "Fachlicher_Hinweis_IQTIG",
        "Einheit",
        "Bundesergebnis",
        "Vertrauensbereich_Bundesweit_Vertrauensbereich_Untere_Grenze",
        "Vertrauensbereich_Bundesweit_Vertrauensbereich_Obere_Grenze",
        "Rechnerisches_Ergebnis",
        "Vertrauensbereich_Krankenhaus_Vertrauensbereich_Untere_Grenze",
        "Vertrauensbereich_Krankenhaus_Vertrauensbereich_Obere_Grenze",
        "Fallzahl_Grundgesamtheit",
        "Fallzahl_Beobachtete_Ereignisse",
        "Fallzahl_Erwartete_Ereignisse",
        "Ergebnis_Bewertung_Referenzbereich",
        "Ergebnis_Bewertung_Entwicklung_Ergebnis_zum_vorherigen_Berichtsjahr",
        "Ergebnis_Bewertung_Qualitative_Bewertung_Berichtsjahr",
        "Ergebnis_Bewertung_Qualitative_Bewertung_Vergleich_vorheriges_Berichtsjahr",
        "Ergebnis_Bewertung_Kommentar_Beauftragte_Stelle",
        "Ergebnis_text",
        # in_perinatalzentren_but_not_deqs
        "Standort-ID_matched",
        "Krankenhaus_Standortnummer_matched",
        "Krankenhausstandort_matched",
        "Standort-ID_original",
        "Krankenhaus_Standortnummer_original",
        "reason_for_correction",
        "Krankenhausstandort_original",
        "n_births_milupa",
        "use_Fallzahl",
        "notes",
        # geometrie
        # "geometry"
    ) |> 
    st_write(datenpfad_markers, delete_dsn = TRUE, quiet = TRUE)

image_helper_light(
    filename = filename,
    filepath = imagepath,
    data = data_choropleth,
    images = images_choropleth,
    captions = caption_karte_3
)
```

*Karte III: Dargestellt sind die Einträge der Kliniken in den Qualitätsberichten zum Indikator Geburt in der nicht angemessenen Versorgungsstufe. Standardmäßig wird zunächst der Indikator* „*182014*“ *(Kinder, die in einer Level-IV-Klinik geboren wurden, aber in einer höheren Versorgungsstufe hätten geboren werden müssen) angegeben. Die Indikatoren für die höheren Level (*„*182011*“ *für Level III und* „*182010*“ *für Level II) können per Schaltfläche rechts auf der Karte angezeigt werden. Die Färbung der Kliniken gibt an, ob der Bundesdurchschnitt unter- oder überschritten wird. Zudem ist der jeweilige IQTIQ-Bewertungscode angegeben.*

**In Level-IV-Kliniken waren im Jahr 2023 laut Selbstauskunft der Häuser 8,8 Prozent aller Geburten fehl am Platz, erfolgten also nicht in der angemessenen Versorgungsstufe. In Level-III-Kliniken waren es 2,7 und in Level-II-Kliniken 0,1 Prozent.** Für Level-I-Kliniken gibt es keinen entsprechenden Indikator, da es keine höhere Versorgungsstufe gibt.

Damit eine Geburt als fehl am Platz eingestuft wird, muss beim jeweiligen Kind beziehungsweise der Schwangeren mindestens eines von mehreren [Gesundheitsrisiken](https://iqtig.org/downloads/auswertung/aj2024/pm-gebh/DeQS-RL_PM-GEBH_AJ2024_QIDB-RR-E_V02_2024-05-31.pdf){target="_blank"} vorgelegen haben. Die Kriterien unterscheiden sich je nach Kliniklevel.

In Level-IV-Kliniken sollen zum Beispiel nur Frauen ab der 36. Schwangerschaftswoche ohne zu erwartende Komplikationen entbinden. Frühgeborene Kinder oder jene, bei denen schon als Fötus Wachstumsschwierigkeiten auftraten sowie Kinder von Schwangeren mit insulinpflichtigem Diabetes müssen mindestens in Level-III-Kliniken zur Welt kommen. Je nach Schweregrad mancher Kriterien müssen die Kinder in noch spezialisierteren Kliniken geboren werden. Kinder mit besonderem Risiko dürfen ausschließlich in Level-I-Kliniken zur Welt kommen. Hierzu zählen etwa Frühgeborene mit einem ärztlich geschätzten Geburtsgewicht von unter 1250 Gramm, Drillinge mit einem Gestationsalter unter 33 Wochen, Mehrlinge oder Kinder mit vorgeburtlich diagnostizierten fetalen oder mütterlichen Erkrankungen, die eine Intensivpflege notwendig machen.

Im Sinne der IQTIG-Qualitätssicherung sind nicht automatisch alle Kliniken auffällig, die Fallzahlen beim Indikator „Geburt in der adäquaten Versorgungsstufe“ aufweisen. **Ein Ergebnis gilt als rechnerisch auffällig, wenn ein vom IQTIG festgelegter Referenzwert überschritten wird.** Ist ein Ergebnis rechnerisch auffällig, bittet die zuständige Landesgeschäftsstelle für Qualitätssicherung die Klinik in der Regel um eine Stellungnahme. Darin sollen die zuständigen Ärztinnen und Ärzte erklären, wie es zu den auffälligen rechnerischen Werten kommen konnte. Diese Stellungnahmen können weitere Maßnahmen der Landesgeschäftsstelle nach sich ziehen.

Das IQTIG bewertet die Fallzahlen jeder Klinik und vergibt einen [Code](https://iqtig.org/downloads/berichte/2024/IQTIG_Bundesqualitaetsbericht-2024_2024-10-22.pdf){target="_blank"}. **Nur in seltenen Fällen sind die Kliniken jedoch offiziell auffällig.** Oft sind Daten- und Softwarefehler der Grund für die Auffälligkeit. Die Kliniken haben also die Qualiätsberichte nicht korrekt ausgefüllt (Code D80 oder D81). Liegen tatsächlich Struktur- oder Prozessmängel vor, vergibt das IQTIG zum Beispiel den Code A71. Das Gros der Kliniken ist jedoch nicht auffällig.

Das liegt vor allem an den festgesetzten Referenzbereichen. So liegt eine Level-IV-Klinik, in der von allen Geburten rund zehn Prozent nicht dort hätten zur Welt kommen dürfen, zwar über dem Bundesdurchschnitt, der Referenzbereich des IQTIG reicht jedoch bis 12,02 Prozent. Die Klinik wäre nicht offiziell auffällig. Das IQTIG vergibt in solchen Fällen den Code R10. Die Referenzbereiche stellen für Level IV und Level III jeweils das 95. Perzentil dar. Das bedeutet: 95 Prozent aller Geburtskliniken liegen unter diesem Wert, lediglich fünf Prozent darüber.

**Dies wird aus der Fachwelt kritisiert, da so der Fokus nur auf den schlechtesten fünf Prozent liegt und bei den anderen Kliniken womöglich kein Anreiz besteht, die Fallzahlen zu optimieren.** Zudem erlaubt die bisherige Methodik keine konkreten Aussagen zu den einzelnen Kindern. So befinden sich unter den 100 „falschen“ Geburten einer beispielhaften Level-IV-Klinik Kinder, die nur eine Versorgungsstufe höher gemusst hätten, als auch Kinder, die in noch höheren Versorgungsstufen hätten zur Welt kommen müssen – in diesen Fällen wiegt die Geburt am falschen Ort schwerer, weil diese Kinder stark unterversorgt geboren wurden. Bei Level-II-Kliniken sind alle Fälle automatisch auffällig, da es sich um besonders schwere Fälle handelt. Man spricht hier von sogenannten Sentinel Events. Für das Jahr 2027 ist eine [Überarbeitung](https://www.g-ba.de/downloads/39-261-7364/2025-07-17_DeQS-RL_Freigabe-Veroeffentlichung-IQTIG-Bericht_Weiterentwicklung-QS-Verf.pdf){target="_blank"} des Qualitätindikators angedacht.

#### Aussagekraft der Daten zur Geburt in der nicht angemessenen Versorgungsstufe

[Einzelergebnisse bestimmter Kliniken]{.underline}\
Mithilfe der Karte kann festgestellt werden, dass in bestimmten Kliniken x Prozent der Geburten nicht in der angemessenen Versorgungsstufe erfolgten, die Kinder also bei der Geburt unterversorgt waren. Ein hoher Anteil, zum Beispiel über dem Bundesdurchschnitt, kann auf unzureichendes Zuweisungs- oder Verlegungsgeschehen hindeuten. Die Schwangeren können sich die Geburt im jeweiligen Haus aber auch ausdrücklich gewünscht haben – trotz ärztlicher Aufklärung und der Empfehlung zur Verlegung. Level-I-Kliniken sind nicht aufgelistet, weil es darüber keine höhere Stufe gibt.

[Vergleich der Kliniken untereinander:]{.underline}\
Ein Vergleich der Rate der Geburten in der nicht angemessenen Stufe ist bei Kliniken desselben Levels prinzipiell zulässig. Beim Vergleich von zwei Kliniken ist darauf zu achten, dass die angegebenen Werte Momentaufnahmen aus dem Jahr 2023 sind, die zufälligen Schwankungen unterliegen. Liegen die relativen Zahlen von zwei Kliniken weniger als zwei bis drei Prozentpunkte auseinander, kann nicht gesagt werden, dass die eine Klinik besser als die andere ist. Grundsätzlich zeigt ein Vergleich aber, ob manche Kliniken laut Selbstauskunft mehr absehbare Risikogeburten annehmen, statt sie weiterzuleiten. Nicht sinnvoll ist dagegen ein Vergleich Level IV versus Level I–III, weil die Basisrisiken in den Leveln unterschiedlich sind: In hochspezialisierten Kliniken werden mehr Risikokinder versorgt als in kleineren Häusern. Ein schlechteres Abschneiden von Level-IV-Kliniken im Vergleich zu anderen Leveln ist daher erwartbar und spiegelt nicht automatisch schlechtere Qualität wider.

[Generelles Argument gegen Level-IV-Kliniken:\
]{.underline}Der Indikator kann nicht als Beleg dafür dienen, dass Geburtskliniken der Basisversorgung obsolet sind. Er misst nur Risikofälle, nicht die Sicherheit bei normalen Geburten. Gleichwohl können auf Basis des Indikators regionale Zuweisungs- und Verlegungssituationen näher beleuchtet werden.

### Methodik und Limitationen

Wie das SMC methodisch vorgegangen ist und welche Limitationen dieser Report aufweist, wird im folgenden Kapitel erläutert. Es ist festzuhalten: Die Datengrundlage ist keinesfalls zufriedenstellend, eine Annäherung an die Realität ist allerdings möglich. Die Datenbasis wurde zudem mit Forschenden ausführlich diskutiert und Plausibilitätschecks unterzogen.

#### Was ist ein Klinikstandort?

Im Rahmen der Krankenhausreform kommuniziert das [Gesundheitsministerium](https://www.bundesgesundheitsministerium.de/themen/krankenhaus/krankenhausreform/faq-krankenhausreform.html){target="_blank"}, dass es rund 1700 Krankenhäuser in Deutschland gibt. Der Begriff Krankenhaus meint jedoch nicht ein einzelnes Gebäude: Ein Krankenhaus nach Definition des Gesundheitsministeriums kann auf mehrere Standorte verteilt sein.

Für eine Erreichbarkeitsanalyse sind diese einzelnen Standorte relevant. Aktuell verzeichnet das [Institut für das Entgeltsystem im Krankenhaus (InEK)](https://krankenhausstandorte.de/login){target="_blank"} 2710 Standorte. Hierbei ist anzumerken, dass nicht alle Standorte für alle Fragen relevant sind: Ein Beispiel sind Rehaeinrichtungen, die keine Rolle in der Geburtshilfe spielen.

#### Definition einer Geburtsklinik

Laut einer [Richtlinie des Gemeinsamen Bundesausschusses (G-BA)](https://www.g-ba.de/richtlinien/41/){target="_blank"} ist die Geburtshilfe in Deutschland in vier [Versorgungslevel](https://perinatalzentren.org/informationen/faq/#collapse70){target="_blank"} eingeteilt. Diese stellen Strukuranforderungen an Kliniken, die Geburtshilfe anbieten und regeln die Zuordnung von Schwangeren zu diesen Kliniken. Auf der Website [perinatalzentren.org](https://perinatalzentren.org/startseite){target="_blank"}, bereitgestellt vom [Institut für Qualitätssicherung und Transparenz im Gesundheitswesen (IQTIG)](http://www.iqtig.org/){target="_blank"}, findet sich eine Liste aller Klinikstandorte der Versorgungslevel I bis III. Eine vollständige Liste der Level-IV-Kliniken wird öffentlich nicht bereitgestellt.

Anhand der [Qualitätsberichte der Krankenhäuser](https://qb-referenzdatenbank.g-ba.de/#/suche){target="_blank"} aus dem Jahr 2023 hat das SMC pro Klinikstandort die Zahl der Geburten ausgelesen. Der Großteil der Einträge auf [perinatalzentren.org](https://perinatalzentren.org/startseite){target="_blank"} konnte per Standort-ID eindeutig zugeordnet werden. Die wenigen Ausnahmen wurden [händisch recherchiert](https://media.sciencemediacenter.de/reports/25121/data/in_perinatalzentren_but_not_deqs.csv){target="_blank"}. Alle Klinikstandorte, die in den Qualitätsberichten Geburten verzeichnen, aber nicht in der Liste der Kliniken der Level I bis III auftauchen, wurden als Level IV gewertet. In wenigen Fällen besteht eine sehr enge Kooperation zwischen einer Level-I-Kinderklinik, die aber keine Geburten durchführt, mit einer nahegelegenen Geburtsklinik (Marien-Krankenhaus Siegen und DRK Kinderklinik Siegen). In solchen Fällen wurde die Geburtsklinik als Level I gewertet.

Um ein möglichst aktuelles Bild zur Zahl der Geburtskliniken zu erhalten, hat das SMC alle Geburtskliniken, die zwischen 2023 und 2025 geschlossen wurden, [nachrecherchiert](https://media.sciencemediacenter.de/reports/25121/data/Geburtskliniken_geschlossen.xlsx){target="_blank"} und aus den Kliniklisten entfernt. Eine Geburtsklinik, die also noch 2023 einen Qualiätsbericht abgegeben und Geburten durchgeführt hat, aber zum Beispiel 2024 geschlossen wurde, ist nicht mehr aufgeführt. Geschlossene Geburtskliniken hat das SMC über den [Verein Mother Hood](https://mother-hood.de/informieren/geburtsstationen-deutschland/){target="_blank"} recherchiert.

#### Geburtenzahl

Einen eindeutigen Eintrag zur Geburtenzahl gibt es in den Qualitätsberichten nicht. In der datengestützten einrichtungsübergreifenden Qualitätssicherung (DeQS) im Leistungsbereich Geburtshilfe (16/1) gibt es zwei Angaben, die im Abgleich mit der [Geburtenliste von Nutricia](https://www.nutricia.de/content/dam/sn/local/dach/hc/brands/hebnews/fortbildungen/Geburtenliste%202024.pdf){target="_blank"} nur geringe Abweichungen aufwiesen. In der Regel entspricht die „Anzahl Datensätze Standort“ der Anzahl an Geburten. Die ebenfalls angegebene „Fallzahl“ hingegen ergibt sich aus der Summe der Klinikstandorte mit dem selben Institutskennzeichen (IK-Nummer).

#### Qualitätsindikatoren zur „Geburt in der adäquaten Versorgungsstufe“

In der dezentralen, einrichtungsbezogenen Qualitätssicherung (DeQS) des IQTIG gibt es drei Qualitätsindikatoren, die den Anteil der Geburten bezogen auf die Gesamtzahl aller Geburten eines Klinikstandorts berechnet, der nicht in einem adäquaten Versorgungslevel stattgefunden hat. Diese Anteile wurden ebenfalls aus den Qualitätsberichten der Krankenhäuser ausgelesen. Der Indikator mit der ID „182014“ ermittelt beispielsweise Geburten, die in einer Level-IV-Klinik erfolgten, aber in einer höheren Versorgungsstufe hätten erfolgen müssen, also in Level I, II oder III. Analog sind die Indikatoren „182011“ (in Level III geboren) und „182010“ (in Level II geboren) definiert.

Die Qualitätsindikatoren „182011“ und „182014“ werden mit einem perzentilbasierten Referenzbereich (≤ 95. Perzentil) dargestellt. Ergebnisse, die unterhalb dieses 95. Perzentils liegen, werden vom IQTIQ als unauffällig bewertet. Der Indikator „182010“ (in Level II geboren) wird mit einem sogenannten Sentinel Event als Referenzwert belegt: Jeder in diesem Indikator auffällig gewordene Fall führt zum Dialog zwischen Landesqualiätssicherung und Klinik.

Es kommt vor, dass Kliniken in mehreren dieser Indikatoren Daten eingetragen haben. Beispielsweise gibt es Einträge von Level-III-Kliniken im Indikator „182014“ (in Level IV geboren). In den Krankenhäusern wird der Ausfüllbogen pro Fall erhoben, sodass eine kleine Zahl von Dokumentationsfehlern entsprechend möglich sind. Außerdem kommt es vor, dass Klinikstandorte unterjährig ihr Versorgungslevel ändern (müssen).

#### Fahrzeitberechnung

Die Daten zu den Fahrzeiten stammen von Tim Holthaus vom Lehrstuhl für Güterverkehr und Transportlogistik an der Universität Wuppertal. Die Fahrzeit bezieht sich auf eine Fahrt mit dem Pkw an einem Werktag zwischen sieben und elf Uhr. Grundlage für die Routenberechnung ist ein OpenStreetMap-Straßennetz, in dem für alle 100-Meter-Segmente die mittlere Geschwindigkeit aus Navigations-Daten aus dem Jahr 2017 verwendet wurden. Als Startpunkt der Routenberechnung wurde immer der Straßenknoten gewählt, der dem Mittelpunkt der Gitterzelle am nächsten liegt. Eine detaillierte Beschreibung der Methodik findet sich [hier](https://www.researchgate.net/publication/342211628_Evaluation_of_driven_speed_on_German_motorways_without_speed_limits_-_a_new_approach){target="_blank"}.

Alle Gitterzellen innerhalb einer Gemeinde werden zusammengefasst und gemittelt. Dies geschieht gewichtet nach der Bevölkerung pro Gitterzelle. Die Bevölkerungsdaten stammen aus den [Zensus-Daten 2022](https://atlas.zensus2022.de/){target="_blank"}. Daraus ergibt sich für jede Gemeinde eine „mittlere Fahrzeit zur nächsten geeigneten Klinik“. Um die Fahrzeitveränderung zu bestimmen, wird dieser Vorgang zweimal durchgeführt. Einmal für alle Klinikstandorte mit Geburtshilfe und einmal für alle Kliniken, die über 500 Geburten im Jahr 2023 behandelten. Anschließend wird für jede Gemeinde die Differenz dieser zwei durchschnittlichen Fahrzeiten berechnet.

##### Limitationen und Anmerkungen bezüglich der Fahrzeitberechnungen

-   Bei großen Kliniken mit mehreren Gebäuden kann die Adresse teilweise ungenau sein. Da die Adressen in derlei Fällen aber höchstens wenige hundert Meter voneinander entfernt liegen, spielt dies für die Fahrzeitenberechnung kaum eine Rolle.
-   Das zugrundeliegende OpenStreetMap-Straßennetz ist auf dem Stand von 2017. Straßen, die danach gebaut wurden, sind nicht berücksichtigt.
-   Die auf der Karte dargestellten Gemeindegrenzen stammt vom [BKG](https://gdz.bkg.bund.de/index.php/default/verwaltungsgebiete-1-250-000-stand-01-01-vg250-01-01.html){target="_blank"} (Aktualität 2025), die Bevölkerungszahlen entsprechen dem Stand der [Zensus-Daten 2022](https://atlas.zensus2022.de/){target="_blank"}. Eine 100x100m Gitterzelle wurde der Gemeinde zugeordnet, die die größte Flächenüberschneidung hat. Gebiete, für die auf der Karte keine Fahrzeit angegeben ist, sind gemeindefrei und unbewohnt.
-   In einigen Sonderfällen, wie bei Inseln, kann die Routenberechnung fehlerhaft sein, da hier Vereinfachungen bezüglich der Fährverbindungen getroffen wurden. Auch können fehlerhaft eingetragene Einbahnstraßen zu hohen Fahrzeiten in einzelnen Zellen führen.
-   Grenzregionen: Es werden nur Kliniken in Deutschland berücksichtigt. In Grenzregionen wird nicht berücksichtigt, dass Geburten auch in einen Klinikstandort in einem Nachbarland gebracht werden könnten.
-   Die Fahrzeit bezieht sich auf Fahrten nach der Straßenverkehrsordnung. Blaulicht-Fahrten von Rettungsdiensten könnten geringfügig schneller sein.

Mit Blick auf die Fahrzeitveränderung sind viele dieser Limitationen weniger relevant. Die Ungenauigkeiten in den absoluten Werten verschwinden zum größten Teil, da sie sowohl im Vorher- als auch im Nachher-Szenario eingerechnet wurden und bei der Differenzbildung wegfallen.

#### Frauen im gebärfähigen Alter

Die Bevölkerungszahlen der [Frauen im gebärfähigen Alter (15–49 Jahre)](https://www.destatis.de/DE/Themen/Gesellschaft-Umwelt/Bevoelkerung/Geburten/Glossar/gebaerfaehiges-alter.html){target="_blank"} stammen aus den [Zensus-Daten 2022](https://atlas.zensus2022.de/){target="_blank"}. Die Daten sind auf Gemeindeebene verfügbar und wurden unter der Annahme, dass der Anteil der Frauen im gebärfähigen Alter in jeder Gitterzelle innerhalb einer Gemeinde gleich ist, auf die Gitterzellen verteilt. Für die Berechnung der Anzahl der Frauen im gebärfähigen Alter, die eine Geburtsklinik innerhalb einer bestimmten Fahrzeit erreichen können, wurden die Gitterzellen entsprechend ihrer mittleren Fahrzeit zur nächstgelegenen Klinik gruppiert und die Bevölkerungszahlen aufsummiert.

### Datengrundlage und Code

Den Code für diesen Data Report stellen wir [hier]( `r file.path(imagepath, paste0(today()[Datumsprefix_files], "_"[Datumsprefix_files], file_name_code))` ){target="_blank"} zur Verfügung. Neben Standard R-Paketen wird ein eigenes Paket verwendet, das [hier](https://github.com/sciencemediacenter/SMChelpR){target="_blank"} bereitgestellt wird.

### Ihre Ansprechpersonen in Redaktion und SMC Lab

Wenn Sie Fragen zu diesen Daten haben oder weitere Auswertungen erhalten wollen, kann das SMC Lab Auswertungen erzeugen.

*Redaktion*\
Philipp Jacobs, Redakteur für Medizin und Lebenswissenschaften\
[redaktion\@sciencemediacenter.de](mailto:redaktion@sciencemediacenter.de){.email}

*Datenauswertung*\
Simon Essink / Lars Koppers\
[lab\@sciencemediacenter.de](mailto:lab@sciencemediacenter.de){.email}

Telefon: +49 221 8888 25-0\
E-Mail Inhalt: [redaktion\@sciencemediacenter.de](mailto:redaktion@sciencemediacenter.de){.email}\
E-Mail Datenauswertung: [lab\@sciencemediacenter.de](mailto:lab@sciencemediacenter.de){.email}