{"id":21334,"date":"2026-05-23T16:29:12","date_gmt":"2026-05-23T14:29:12","guid":{"rendered":"https:\/\/www.drugshortage.ch\/?page_id=21334"},"modified":"2026-05-23T16:36:15","modified_gmt":"2026-05-23T14:36:15","slug":"uebersicht-nach-firmen","status":"publish","type":"page","link":"https:\/\/www.drugshortage.ch\/index.php\/uebersicht-nach-firmen\/","title":{"rendered":"\u00dcbersicht nach Firmen"},"content":{"rendered":"\n<!-- ============================================================\n     ANLEITUNG: In WordPress als \"Benutzerdefiniertes HTML\"-Block einf\u00fcgen.\n     Seite z.B. \"uebersicht-nach-firmen\"\n     ============================================================ -->\n<style>\n  #nf-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  #nf-loading { display:flex; align-items:center; gap:12px; padding:30px 20px; color:#718096; font-size:15px; }\n  .nf-spinner { width:24px; height:24px; border:3px solid #e2e8f0; border-top-color:#e53e3e; border-radius:50%; animation:nfspin .8s linear infinite; flex-shrink:0; }\n  @keyframes nfspin { to { transform:rotate(360deg); } }\n\n  .nf-section-title { font-size:15px; font-weight:700; color:#2d3748; margin:20px 0 10px 0; padding-bottom:6px; border-bottom:2px solid #e53e3e; display:flex; align-items:center; gap:8px; }\n  .nf-icon { background:#e53e3e; color:#fff; border-radius:6px; padding:2px 8px; font-size:11px; font-weight:600; }\n\n  \/* Legende *\/\n  .nf-legende-box { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:14px; padding:12px 14px; background:#f7fafc; border:1px solid #e2e8f0; border-radius:8px; }\n  .nf-legende-item { display:flex; align-items:center; gap:7px; font-size:12px; color:#4a5568; }\n\n  \/* Wichtig-Box *\/\n  .nf-wichtig { background:#fff5f5; border-left:4px solid #e53e3e; border-radius:0 8px 8px 0; padding:10px 14px; font-size:13px; color:#742a2a; line-height:1.6; margin-bottom:12px; }\n\n  \/* Tabelle *\/\n  .nf-table-wrap { overflow-x:auto; width:100%; border-radius:8px; box-shadow:0 1px 4px rgba(0,0,0,.07); margin-bottom:6px; -webkit-overflow-scrolling:touch; }\n  .nf-table { width:100%; border-collapse:collapse; background:#fff; }\n  .nf-table thead tr { background:#2d3748; }\n  .nf-table th { padding:10px 12px; text-align:left; font-size:12px; font-weight:600; color:#fff; white-space:nowrap; letter-spacing:.4px; text-transform:uppercase; cursor:pointer; user-select:none; }\n  .nf-table th:hover { background:#4a5568; }\n  .nf-table td { padding:8px 12px; border-bottom:1px solid #edf2f7; font-size:13px; vertical-align:middle; }\n  .nf-table tbody tr:nth-child(even) td { background:#f7fafc; }\n  .nf-table tbody tr:nth-child(odd) td { background:#ffffff; }\n  .nf-table tbody tr:hover td { background:#ebf8ff !important; }\n  .nf-table tbody tr:last-child td { border-bottom:none; }\n  .nf-table a { color:#e53e3e; text-decoration:none; font-weight:500; }\n  .nf-table a:hover { text-decoration:underline; }\n\n  \/* Mobile *\/\n  @media (max-width:768px) {\n    .nf-table thead { display:none; }\n    .nf-table tbody tr { display:block; margin-bottom:12px; border:1px solid #e2e8f0; border-radius:8px; overflow:hidden; }\n    .nf-table tbody td { display:flex; justify-content:space-between; align-items:center; padding:7px 12px; border-bottom:1px solid #f0f0f0; font-size:12px; background:#fff !important; }\n    .nf-table tbody td:before { content:attr(data-label); font-weight:600; color:#718096; margin-right:8px; min-width:120px; flex-shrink:0; }\n  }\n\n  \/* Bewertungs-Badges *\/\n  .nf-bew { display:inline-block; width:26px; height:26px; border-radius:6px; text-align:center; line-height:26px; font-weight:700; font-size:13px; }\n  .nf-b1 { background:#276749; color:#fff; }\n  .nf-b2 { background:#9ae6b4; color:#276749; }\n  .nf-b3 { background:#dd6b20; color:#fff; }\n  .nf-b4 { background:#c53030; color:#fff; }\n  .nf-b5 { background:#ecc94b; color:#744210; }\n\n  \/* Suchfeld *\/\n  .nf-search-wrap { display:flex; gap:10px; align-items:center; margin-bottom:12px; flex-wrap:wrap; }\n  .nf-suche { flex:1; min-width:200px; max-width:400px; padding:10px 14px; border:1px solid #e2e8f0; border-radius:8px; font-size:13px; outline:none; transition:border-color .2s, box-shadow .2s; }\n  .nf-suche:focus { border-color:#e53e3e; box-shadow:0 0 0 3px rgba(229,62,62,.1); }\n  .nf-count { font-size:12px; color:#718096; white-space:nowrap; }\n\n  .nf-fussnote { font-size:13px; color:#718096; margin:6px 0; line-height:1.5; }\n  .nf-footer { font-size:11px; color:#a0aec0; text-align:right; margin-top:8px; }\n<\/style>\n\n<div id=\"nf-outer\">\n  <div id=\"nf-loading\"><div class=\"nf-spinner\"><\/div> Daten werden geladen\u2026<\/div>\n  <div id=\"nf-inhalt\" style=\"display:none;\">\n\n    <!-- Bewertungslegende -->\n    <div class=\"nf-section-title\"><span class=\"nf-icon\">&#x2139;<\/span> Bewertung der Firmenmeldungen<\/div>\n    <div class=\"nf-legende-box\" id=\"nf-legende\"><\/div>\n    <div class=\"nf-wichtig\">\n      <strong>Wichtig:<\/strong> Bei Firmen der Kategorie 1+2 sind Produkte m\u00f6glicherweise noch bei Grossisten verf\u00fcgbar.\n      Bei Firmen, die nicht selber melden (Kategorie 3, 4 und 5) stammen die Meldungen in der Regel von Usern.\n      Diese Meldungen spiegeln die Situation deren Bestellm\u00f6glichkeiten. Es ist m\u00f6glich, dass die Firmen oder andere Grossisten noch Ware haben. Das ist im Einzelfall zu kl\u00e4ren.\n    <\/div>\n\n    <!-- Firmentabelle -->\n    <div class=\"nf-section-title\"><span class=\"nf-icon\">&#x1f3ed;<\/span> Lieferengp\u00e4sse nach Firmen<\/div>\n    <div class=\"nf-search-wrap\">\n      <input type=\"text\" class=\"nf-suche\" id=\"nf-suche\" placeholder=\"&#x1f50d; Firma suchen\u2026\">\n      <span class=\"nf-count\" id=\"nf-count\"><\/span>\n    <\/div>\n    <div class=\"nf-table-wrap\">\n      <table class=\"nf-table\" style=\"min-width:500px;\">\n        <thead><tr>\n          <th onclick=\"nfSort('bewertung')\" style=\"width:80px;text-align:center;\">Bew. &#x2195;<\/th>\n          <th onclick=\"nfSort('firma')\">Firma &#x2195;<\/th>\n          <th onclick=\"nfSort('anzahlProdukte')\" style=\"text-align:center;\">Registrierte Produkte Total &#x2195;<\/th>\n          <th onclick=\"nfSort('anzahlEngpaesse')\" style=\"text-align:center;\">Offene Engp\u00e4sse &#x2195;<\/th>\n        <\/tr><\/thead>\n        <tbody id=\"nf-tbody\"><\/tbody>\n      <\/table>\n    <\/div>\n    <p class=\"nf-fussnote\">Hinweis: Die Anzahl registrierter Produkte gibt einen Hinweis auf den Stellenwert des Engpasses f\u00fcr die Firma, hat aber nichts mit dem therapeutischen Stellenwert zu tun.<\/p>\n    <div class=\"nf-footer\">Daten werden w\u00f6chentlich aktualisiert \u00b7 drugshortage.ch<\/div>\n\n  <\/div>\n<\/div>\n\n<script>\nconst NF_BASE = \"https:\/\/www.drugshortage.ch\";\nconst NF_API  = NF_BASE + \"\/api_engpaesse.php\";\n\nlet nfAlle       = [];\nlet nfSortFeld   = \"bewertung\";\nlet nfAufsteigend = true;\n\nasync function ladeNachFirma() {\n  try {\n    const res = await fetch(NF_API);\n    const d   = await res.json();\n    if (d.fehler) {\n      document.getElementById(\"nf-loading\").innerHTML =\n        \"<div style='color:#c53030;padding:20px;background:#fff5f5;border-radius:8px;width:100%;'>&#x26a0;&#xfe0f; \" + d.fehler + \"<\/div>\";\n      return;\n    }\n\n    \/\/ Legende\n    const legDiv = document.getElementById(\"nf-legende\");\n    (d.bewertungLegende || []).forEach(function(b) {\n      const item = document.createElement(\"div\");\n      item.className = \"nf-legende-item\";\n      item.innerHTML =\n        \"<span class='nf-bew nf-b\" + b.ident + \"'>\" + b.ident + \"<\/span>\" +\n        \"<span><strong>\" + (b.bewertung || \"\") + \"<\/strong> \u2013 \" + (b.artMeldung || \"\") + \"<\/span>\";\n      legDiv.appendChild(item);\n    });\n\n    nfAlle = d.firmen || [];\n    nfZeige(nfAlle);\n\n    document.getElementById(\"nf-loading\").style.display = \"none\";\n    document.getElementById(\"nf-inhalt\").style.display  = \"block\";\n\n    document.getElementById(\"nf-suche\").addEventListener(\"input\", function() {\n      const q = this.value.toLowerCase();\n      nfZeige(q ? nfAlle.filter(function(f) { return (f.firma||\"\").toLowerCase().includes(q); }) : nfAlle);\n    });\n\n  } catch(err) {\n    document.getElementById(\"nf-loading\").innerHTML =\n      \"<div style='color:#c53030;padding:20px;background:#fff5f5;border-radius:8px;width:100%;'>&#x274c; Fehler: \" + err + \"<\/div>\";\n  }\n}\n\nfunction nfZeige(daten) {\n  const tbody = document.getElementById(\"nf-tbody\");\n  const count = document.getElementById(\"nf-count\");\n  tbody.innerHTML = \"\";\n  count.textContent = daten.length + \" Firmen\";\n  daten.forEach(function(f) {\n    const tr  = document.createElement(\"tr\");\n    const bew = f.bewertung || 0;\n    const url = NF_BASE + \"\/index.php\/lieferengpaesse-nach-firma\/?Firma=\" + encodeURIComponent(f.firma || \"\");\n    tr.innerHTML =\n      \"<td style='text-align:center;' data-label='Bewertung'><span class='nf-bew nf-b\" + bew + \"'>\" + (f.bewertung || \"\u2013\") + \"<\/span><\/td>\" +\n      \"<td data-label='Firma'><a href='\" + url + \"' target='_blank'>\" + (f.firma || \"\u2013\") + \"<\/a><\/td>\" +\n      \"<td style='text-align:center;' data-label='Produkte Total'>\" + (f.anzahlProdukte || \"\u2013\") + \"<\/td>\" +\n      \"<td style='text-align:center;font-weight:700;color:#e53e3e;' data-label='Offene Engp\u00e4sse'>\" + (f.anzahlEngpaesse || \"\u2013\") + \"<\/td>\";\n    tbody.appendChild(tr);\n  });\n}\n\nfunction nfSort(feld) {\n  nfAufsteigend = (nfSortFeld === feld) ? !nfAufsteigend : true;\n  nfSortFeld    = feld;\n  const q = document.getElementById(\"nf-suche\").value.toLowerCase();\n  const liste = q ? nfAlle.filter(function(f) { return (f.firma||\"\").toLowerCase().includes(q); }) : nfAlle.slice();\n  liste.sort(function(a, b) {\n    if (feld === \"bewertung\" || feld === \"anzahlProdukte\" || feld === \"anzahlEngpaesse\") {\n      return nfAufsteigend ? (a[feld]||0)-(b[feld]||0) : (b[feld]||0)-(a[feld]||0);\n    }\n    const va = (a[feld]||\"\").toLowerCase();\n    const vb = (b[feld]||\"\").toLowerCase();\n    return nfAufsteigend ? va.localeCompare(vb) : vb.localeCompare(va);\n  });\n  nfZeige(liste);\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", ladeNachFirma);\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Daten werden geladen\u2026 &#x2139; Bewertung der Firmenmeldungen Wichtig: Bei Firmen der Kategorie 1+2 sind Produkte m\u00f6glicherweise noch bei Grossisten verf\u00fcgbar. Bei Firmen, die nicht selber melden (Kategorie 3, 4 und 5) stammen die Meldungen in der Regel von Usern. Diese Meldungen spiegeln die Situation deren Bestellm\u00f6glichkeiten. Es ist m\u00f6glich, dass die Firmen oder andere Grossisten&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-21334","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21334","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=21334"}],"version-history":[{"count":1,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21334\/revisions"}],"predecessor-version":[{"id":21336,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21334\/revisions\/21336"}],"wp:attachment":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/media?parent=21334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}