{"id":21187,"date":"2026-05-20T13:51:16","date_gmt":"2026-05-20T11:51:16","guid":{"rendered":"https:\/\/www.drugshortage.ch\/?page_id=21187"},"modified":"2026-05-20T13:51:20","modified_gmt":"2026-05-20T11:51:20","slug":"versorgungsengpaesse-2","status":"publish","type":"page","link":"https:\/\/www.drugshortage.ch\/index.php\/versorgungsengpaesse-2\/","title":{"rendered":"Versorgungsengp\u00e4sse"},"content":{"rendered":"\n\n<style>\n  #vs-outer { width:100%; box-sizing:border-box; font-family:'Segoe UI',Arial,sans-serif; font-size:13px; color:#2d3748; }\n  .container,.container-fluid,.entry-content,.post-content,.page-content,\n  .site-content,.content-area,#content,#primary,main,article {\n    max-width:100% !important; overflow:visible !important;\n  }\n\n  \/* Ladeanimation *\/\n  #vs-loading { display:flex; align-items:center; gap:12px; padding:30px 20px; color:#718096; font-size:15px; }\n  .vs-spinner { width:24px; height:24px; border:3px solid #e2e8f0; border-top-color:#e53e3e; border-radius:50%; animation:vsspin .8s linear infinite; flex-shrink:0; }\n  @keyframes vsspin { to { transform:rotate(360deg); } }\n\n  \/* Erkl\u00e4rungsbox *\/\n  .vs-erklaerung { background:#ebf8ff; border:1px solid #bee3f8; border-radius:10px; padding:16px 20px; margin-bottom:20px; }\n  .vs-erklaerung p { margin:4px 0; font-size:13px; color:#2c5282; }\n  .vs-erklaerung strong { color:#2b6cb0; }\n\n  \/* Abschnittstitel *\/\n  .vs-section-title { font-size:15px; font-weight:700; color:#2d3748; margin:28px 0 10px 0; padding-bottom:6px; border-bottom:2px solid #e53e3e; display:flex; align-items:center; gap:8px; }\n  .vs-icon { background:#e53e3e; color:#fff; border-radius:6px; padding:2px 8px; font-size:11px; font-weight:600; }\n\n  \/* Zusammenfassungs-Karten *\/\n  .vs-karten { display:flex; flex-wrap:wrap; gap:14px; margin-bottom:20px; }\n  .vs-karte { flex:1; min-width:200px; background:#fff; border:1px solid #e2e8f0; border-radius:10px; padding:16px 20px; box-shadow:0 1px 4px rgba(0,0,0,.06); }\n  .vs-karte-titel { font-size:11px; font-weight:700; color:#e53e3e; text-transform:uppercase; letter-spacing:.5px; margin-bottom:12px; }\n  .vs-karte-table { width:100%; border-collapse:collapse; }\n  .vs-karte-table th { font-size:11px; color:#718096; font-weight:600; padding:3px 6px; text-align:center; border-bottom:1px solid #edf2f7; }\n  .vs-karte-table td { font-size:16px; font-weight:700; color:#2d3748; padding:6px; text-align:center; }\n\n  \/* Suche *\/\n  #vs-suche { width:100%; padding:10px 14px; margin-bottom:12px; border:1px solid #e2e8f0; border-radius:8px; font-size:13px; box-sizing:border-box; outline:none; transition:border-color .2s; }\n  #vs-suche:focus { border-color:#e53e3e; box-shadow:0 0 0 3px rgba(229,62,62,.1); }\n\n  \/* Tabellen *\/\n  .vs-table-wrap { overflow-x:auto; width:100%; border-radius:8px; box-shadow:0 1px 4px rgba(0,0,0,.07); margin-bottom:6px; }\n  .vs-table { width:100%; border-collapse:collapse; background:#fff; }\n  .vs-table thead tr { background:#2d3748; }\n  .vs-table th { padding:6px 6px; text-align:left; font-size:10px; font-weight:600; color:#fff; white-space:nowrap; cursor:pointer; user-select:none; }\n  .vs-table th:hover { background:#4a5568; }\n  .vs-table td { padding:4px 6px; border-bottom:1px solid #edf2f7; font-size:10px; vertical-align:middle; }\n  .vs-table tbody tr:last-child td { border-bottom:none; }\n  .vs-table tbody tr:hover td { background:#f7fafc !important; }\n\n  \/* Prozent-Balken *\/\n  .vs-bar-wrap { display:flex; align-items:center; gap:4px; min-width:60px; }\n  .vs-bar-bg { flex:1; height:5px; background:#edf2f7; border-radius:4px; overflow:hidden; }\n  .vs-bar-fill { height:100%; border-radius:4px; background:#e53e3e; transition:width .3s; }\n  .vs-bar-label { font-size:10px; font-weight:700; color:#e53e3e; white-space:nowrap; min-width:28px; text-align:right; }\n\n  \/* Badges WHO\/BWL *\/\n  .vs-badge { display:inline-block; padding:1px 5px; border-radius:10px; font-size:10px; font-weight:600; }\n  .vs-badge-who { background:#bee3f8; color:#2b6cb0; }\n  .vs-badge-bwl { background:#c6f6d5; color:#276749; }\n\n  \/* Footer *\/\n  .vs-footer { font-size:11px; color:#a0aec0; margin-top:10px; text-align:right; }\n<\/style>\n\n<div id=\"vs-outer\">\n  <div id=\"vs-loading\"><div class=\"vs-spinner\"><\/div> Daten werden geladen\u2026<\/div>\n  <div id=\"vs-inhalt\" style=\"display:none;\">\n\n    \n    <div class=\"vs-erklaerung\">\n      <p><strong>Lieferengpass:<\/strong> wenn einzelne Pr\u00e4parate eines Wirkstoffes fehlen<\/p>\n      <p><strong>Versorgungsengpass:<\/strong> wenn alle Pr\u00e4parate des Wirkstoffes \/ Form \/ Dosierung fehlen<\/p>\n    <\/div>\n\n    \n    <div class=\"vs-section-title\"><span class=\"vs-icon\">&#x1f4ca;<\/span> Zusammenfassung<\/div>\n    <div class=\"vs-karten\">\n      <div class=\"vs-karte\">\n        <div class=\"vs-karte-titel\">100% fehlend<\/div>\n        <table class=\"vs-karte-table\">\n          <thead><tr>\n            <th>Anzahl Wirkstoffe\/<br>Dosierungen<\/th>\n            <th>davon BWL-Liste<\/th>\n            <th>davon WHO-Liste<\/th>\n          <\/tr><\/thead>\n          <tbody id=\"vs-100\"><\/tbody>\n        <\/table>\n      <\/div>\n      <div class=\"vs-karte\">\n        <div class=\"vs-karte-titel\">50 \u2013 99% fehlend<\/div>\n        <table class=\"vs-karte-table\">\n          <thead><tr>\n            <th>Anzahl Wirkstoffe\/<br>Dosierungen<\/th>\n            <th>davon BWL-Liste<\/th>\n            <th>davon WHO-Liste<\/th>\n          <\/tr><\/thead>\n          <tbody id=\"vs-5099\"><\/tbody>\n        <\/table>\n      <\/div>\n    <\/div>\n\n    \n    <div class=\"vs-section-title\"><span class=\"vs-icon\">&#x1f48a;<\/span> Wirkstoffe \/ Dosierungen im Detail<\/div>\n    <input type=\"text\" id=\"vs-suche\" placeholder=\"&#x1f50d;  Suche nach Wirkstoff, ATC oder Dosierung\u2026\" \/>\n    <div class=\"vs-table-wrap\">\n      <table class=\"vs-table\" style=\"min-width:1200px;\">\n        <thead><tr>\n          <th onclick=\"vsSortiere('atc')\">WirkstoffCode (ATC) &#x2195;<\/th>\n          <th onclick=\"vsSortiere('wirkstoff')\">Wirkstoff &#x2195;<\/th>\n          <th onclick=\"vsSortiere('appTyp')\">Applikationstyp &#x2195;<\/th>\n          <th onclick=\"vsSortiere('appWeg')\">Applikationsweg &#x2195;<\/th>\n          <th onclick=\"vsSortiere('galenisch')\">Galenische Gruppe &#x2195;<\/th>\n          <th onclick=\"vsSortiere('retard')\">Retardierung &#x2195;<\/th>\n          <th onclick=\"vsSortiere('dosierung')\">Dosierung &#x2195;<\/th>\n          <th onclick=\"vsSortiere('totalPraep')\" style=\"text-align:center;\">Total Pr\u00e4parate &#x2195;<\/th>\n          <th onclick=\"vsSortiere('anzEngpass')\" style=\"text-align:center;\">Anz. Lieferengp\u00e4sse &#x2195;<\/th>\n          <th onclick=\"vsSortiere('prozentNum')\" style=\"min-width:150px;\">% fehlend &#x2195;<\/th>\n          <th style=\"text-align:center;\">WHO<\/th>\n          <th style=\"text-align:center;\">BWL<\/th>\n        <\/tr><\/thead>\n        <tbody id=\"vs-tbody\"><\/tbody>\n      <\/table>\n    <\/div>\n    <div class=\"vs-footer\">Daten werden alle 5 Minuten aktualisiert \u00b7 drugshortage.ch<\/div>\n\n  <\/div>\n<\/div>\n\n<script>\n\/\/ &#x26a0;&#xfe0f; DEINE URL HIER EINTRAGEN:\nconst VS_BASE = \"https:\/\/www.drugshortage.ch\";\nconst VS_API  = VS_BASE + \"\/api_versorgung.php\";\n\nlet vsAlleDaten = [];\nlet vsSortiereNach = \"prozentNum\";\nlet vsAufsteigend = false;\n\nasync function ladeVersorgung() {\n  try {\n    const res = await fetch(VS_API);\n    const d = await res.json();\n\n    if (d.fehler) {\n      document.getElementById(\"vs-loading\").innerHTML =\n        \"<div style='color:#c53030;padding:20px;background:#fff5f5;border-radius:8px;width:100%;'>\" +\n        \"<strong>&#x26a0;&#xfe0f; Fehler in der API:<\/strong><br>\" + d.fehler +\n        \"<details style='margin-top:8px;'><summary style='cursor:pointer;color:#718096;'>Details<\/summary>\" +\n        \"<pre style='font-size:10px;color:#718096;overflow:auto;'>\" + d.detail + \"<\/pre><\/details><\/div>\";\n      return;\n    }\n\n    \/\/ 100% fehlend\n    const tb100 = document.getElementById(\"vs-100\");\n    (d.fehlend100 || []).forEach(function(r) {\n      const tr = document.createElement(\"tr\");\n      tr.innerHTML =\n        \"<td>\" + vs(r.anzahl) + \"<\/td>\" +\n        \"<td>\" + vs(r.bwl)    + \"<\/td>\" +\n        \"<td>\" + vs(r.who)    + \"<\/td>\";\n      tb100.appendChild(tr);\n    });\n\n    \/\/ 50-99% fehlend\n    const tb5099 = document.getElementById(\"vs-5099\");\n    (d.fehlend5099 || []).forEach(function(r) {\n      const tr = document.createElement(\"tr\");\n      tr.innerHTML =\n        \"<td>\" + vs(r.anzahl) + \"<\/td>\" +\n        \"<td>\" + vs(r.bwl)    + \"<\/td>\" +\n        \"<td>\" + vs(r.who)    + \"<\/td>\";\n      tb5099.appendChild(tr);\n    });\n\n    \/\/ Prozent als Zahl f\u00fcr Sortierung vorberechnen\n    vsAlleDaten = (d.wirkstoffe || []).map(function(e) {\n      const p = e.prozent ? parseFloat(e.prozent.toString().replace(\",\", \".\")) : 0;\n      return Object.assign({}, e, { prozentNum: isNaN(p) ? 0 : p });\n    });\n\n    vsZeigeTabelle(vsAlleDaten);\n\n    document.getElementById(\"vs-loading\").style.display = \"none\";\n    document.getElementById(\"vs-inhalt\").style.display  = \"block\";\n\n  } catch(err) {\n    document.getElementById(\"vs-loading\").innerHTML =\n      \"<div style='color:#c53030;padding:20px;'>&#x274c; Fehler beim Laden. Bitte Seite neu laden.<br><small style=\\\"color:#718096\\\">\" + err + \"<\/small><\/div>\";\n  }\n}\n\nfunction vsZeigeTabelle(daten) {\n  const tbody = document.getElementById(\"vs-tbody\");\n  tbody.innerHTML = \"\";\n  if (!daten.length) {\n    tbody.innerHTML = \"<tr><td colspan='12' style='padding:16px;color:#718096;text-align:center;'>Keine Eintr\u00e4ge gefunden.<\/td><\/tr>\";\n    return;\n  }\n  daten.forEach(function(e) {\n    const tr = document.createElement(\"tr\");\n    const pNum = e.prozentNum || 0;\n    const pCapped = Math.min(pNum, 100);\n    const barColor = pNum >= 100 ? \"#c53030\" : pNum >= 50 ? \"#dd6b20\" : \"#e53e3e\";\n    const whoBadge = e.who ? \"<span class='vs-badge vs-badge-who'>\" + e.who + \"<\/span>\" : \"\u2013\";\n    const bwlBadge = e.bwl ? \"<span class='vs-badge vs-badge-bwl'>\" + e.bwl + \"<\/span>\" : \"\u2013\";\n    tr.innerHTML =\n      \"<td style='white-space:nowrap;font-weight:600;'>\" + vs(e.atc)       + \"<\/td>\" +\n      \"<td style='white-space:nowrap;'>\"                  + vs(e.wirkstoff) + \"<\/td>\" +\n      \"<td style='white-space:nowrap;'>\"                  + vs(e.appTyp)    + \"<\/td>\" +\n      \"<td style='white-space:nowrap;'>\"                  + vs(e.appWeg)    + \"<\/td>\" +\n      \"<td style='white-space:nowrap;'>\"                  + vs(e.galenisch) + \"<\/td>\" +\n      \"<td style='white-space:nowrap;'>\"                  + vs(e.retard)    + \"<\/td>\" +\n      \"<td style='white-space:nowrap;'>\"                  + vs(e.dosierung) + \"<\/td>\" +\n      \"<td style='text-align:center;'>\"                   + vs(e.totalPraep)+ \"<\/td>\" +\n      \"<td style='text-align:center;font-weight:600;color:#e53e3e;'>\" + vs(e.anzEngpass) + \"<\/td>\" +\n      \"<td><div class='vs-bar-wrap'>\" +\n        \"<div class='vs-bar-bg'><div class='vs-bar-fill' style='width:\" + pCapped + \"%;background:\" + barColor + \";'><\/div><\/div>\" +\n        \"<span class='vs-bar-label'>\" + pNum.toFixed(0) + \"%<\/span>\" +\n      \"<\/div><\/td>\" +\n      \"<td style='text-align:center;'>\" + whoBadge + \"<\/td>\" +\n      \"<td style='text-align:center;'>\" + bwlBadge + \"<\/td>\";\n    tbody.appendChild(tr);\n  });\n}\n\nfunction vsSortiere(feld) {\n  vsAufsteigend = (vsSortiereNach === feld) ? !vsAufsteigend : true;\n  vsSortiereNach = feld;\n  const gesucht = document.getElementById(\"vs-suche\").value.toLowerCase();\n  let liste = vsFiltern(gesucht);\n  liste.sort(function(a, b) {\n    if (feld === \"prozentNum\" || feld === \"totalPraep\" || feld === \"anzEngpass\") {\n      const va = parseFloat(a[feld]) || 0;\n      const vb = parseFloat(b[feld]) || 0;\n      return vsAufsteigend ? va - vb : vb - va;\n    }\n    const va = (a[feld] || \"\").toString().toLowerCase();\n    const vb = (b[feld] || \"\").toString().toLowerCase();\n    return vsAufsteigend ? va.localeCompare(vb) : vb.localeCompare(va);\n  });\n  vsZeigeTabelle(liste);\n}\n\nfunction vsFiltern(q) {\n  if (!q) return vsAlleDaten.slice();\n  return vsAlleDaten.filter(function(e) {\n    return (e.wirkstoff || \"\").toLowerCase().includes(q) ||\n           (e.atc       || \"\").toLowerCase().includes(q) ||\n           (e.dosierung || \"\").toLowerCase().includes(q);\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n  document.getElementById(\"vs-suche\").addEventListener(\"input\", function() {\n    vsZeigeTabelle(vsFiltern(this.value.toLowerCase()));\n  });\n  ladeVersorgung();\n});\n\nfunction vs(val) { return (val !== null && val !== undefined) ? val : \"\u2013\"; }\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Daten werden geladen\u2026 Lieferengpass: wenn einzelne Pr\u00e4parate eines Wirkstoffes fehlen Versorgungsengpass: wenn alle Pr\u00e4parate des Wirkstoffes \/ Form \/ Dosierung fehlen &#x1f4ca; Zusammenfassung 100% fehlend Anzahl Wirkstoffe\/Dosierungen davon BWL-Liste davon WHO-Liste 50 \u2013 99% fehlend Anzahl Wirkstoffe\/Dosierungen davon BWL-Liste davon WHO-Liste &#x1f48a; Wirkstoffe \/ Dosierungen im Detail WirkstoffCode (ATC) &#x2195; Wirkstoff &#x2195; Applikationstyp &#x2195; Applikationsweg&hellip; <a class=\"read-more\" href=\"https:\/\/www.drugshortage.ch\/index.php\/versorgungsengpaesse-2\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-fullwidth.php","meta":{"footnotes":""},"class_list":["post-21187","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/comments?post=21187"}],"version-history":[{"count":5,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21187\/revisions"}],"predecessor-version":[{"id":21217,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21187\/revisions\/21217"}],"wp:attachment":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/media?parent=21187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}