MEDICAL OFFICE Forum

Forum-Navigation
ForumAktivität

Wundmanagement: Hausstandard-Liste Verbandstoffe, Wunddoku und Versorgungsplan

Du musst dich anmelden um Beiträge und Themen zu erstellen.

Wundmanagement: Hausstandard-Liste Verbandstoffe, Wunddoku und Versorgungsplan

Moin,

wir möchten unser Wundmanagement verbessern und dazu zwei Dinge einführen, zu denen meine Frage in die Runde ist, ob jemand anderes bereits eine gut funktionierende Lösung hat und teilen mag:

1. Wir möchten eine Liste der standardmäßig von uns verwendeten Verbandmittel erstellen, aus der wir aus der Krankenakte verordnen können (damit wir uns nicht die Handelsnamen merken müssen). Ich habe gesehen, dass es eine Funktion „Favoriten“ im Medikamentenkatalog gibt. Bei meinen Versuchen, das einzustellen, ist es mir nicht gelungen, dass man die Liste sieht; sondern nur durch Suche übers Suchfeld wurden die Einträge gefunden. Auf diese Weise löst es nicht das Problem, dass man wissen müsste, wie das Produkt heißt, um es zu finden. Kann man das anders einstellen oder gibt es eine andere Lösung? Idealerweise könnte man es gliedern (z.B. „Schaumverband“, worunter sich dann mit und ohne Haftrand in verschiedenen Größen finden lässt, „Kompressen“ – steril und unsteril in verschiedenen Größen etc)

2. Wir möchten eine übersichtliche Wunddokumentation mit einem Plan zur weiteren Versorgung schaffen (und nicht mehr in der Textkategorie „Befund“ frei Hand schreiben wie bisher). Mir sind eingefallen a) Autotexte (pro: in der Akte lesbar) und b) ein Praxisformular zu erstellen (pro: übersichtlicher gestaltbar, contra: muss geöffnet werden zum Ansehen) -> wie macht ihr das, wie zufrieden seid ihr mit eurem Vorgehen und falls jemand meint, das Nonplusultra eines Praxisformulars geschaffen zu haben: mögt ihr es teilen?

Herzlichen Dank im Voraus, Katharina Stockhusen

 

 

1. Das Basisdaten-Skript (Der Archivar: Genese, Dauer, Größe, Auffälligkeiten, Versorgung, Lokalisation)

-> im Formular bereits integriert!

Dieses Skript ist dafür da, den „Steckbrief“ der Wunden zu schreiben (Wo, Warum, Wie groß).

  • Das Problem: Medical Office spuckt immer die gesamte Historie aus (alte und neue Einträge).

  • Die Lösung: Das Skript liest die letzten 10 Einträge Zeile für Zeile durch. Sobald es eine Wunde (z. B. „Tibia re“) findet, merkt es sich die Daten. Taucht „Tibia re“ weiter unten im Text (aus einer älteren Sitzung) nochmal auf, ignoriert das Skript sie einfach. So haben Sie immer nur den aktuellsten Stand.

2. Das Therapie-Skript (Der aufpassende Arzt – wird Anhand der Basisdaten vom Therapieskript vorgeschlagen, ggf. Wechsel in den Manuellen Modus oder, falls keine teure Wundauflage benötigt wird in den Cutiplast Modus)

-> im Formular bereits integriert!

Dieses Skript plant die Behandlung und denkt medizinisch mit.

  • Intelligente Regeln: Es schaut sich die Diagnose an. Hat der Patient pAVK, erzwingt es den Warnhinweis bei der Kompression. Fehlt die Druckentlastung beim Dekubitus, fügt es sie automatisch hinzu.

  • Zusammenfassen: Es vergleicht die Therapien aller Wunden. Wenn Wunde A und Wunde B exakt gleich behandelt werden, fasst es diese zusammen (z.B. THERAPIE (TIBIA RE, FERSE LI)), um den Text in der Akte kurz zu halten.

3. Das Wund-Dashboard (Die Oberschwester & das Controlling)

-> im Formular NICHT integriert – kann z.B. in Befunde rechts als Schalter angelegt werden (s.u.)!

Das ist das „Master-Skript“, das alle Informationen zusammenzieht und auswertet.

  • Heilungstendenz: Es vergleicht die Quadratzentimeter der allerersten Dokumentation mit der von heute und berechnet, ob die Wunde heilt oder sich vergrößert hat.

  • Materialrechner: Es liest das Wechselintervall (z.B. 3x/Woche) und rechnet aus, wie viele Kompressen, Schaumverbände und Binden in den nächsten Wochen benötigt werden.

  • Rezept-Check: Es schaut in den Medikamentenplan der letzten 14 bis 28 Tage. Hat der Patient das errechnete Material (anhand der PZN oder Namen) schon bekommen? Wenn nicht, setzt es das Material auf die „To-Do-Liste“.

  • Abrechnungs-Check: Es prüft die ICD-10 Dauerdiagnosen. Haben Sie ein „Ulcus cruris venosum“ dokumentiert, aber die I83.0 fehlt in der Akte? Das Skript schlägt Alarm.

In der Patientenakte sieht es dann so aus:

 

Es ist ein Ambitioniertes Projekt und vielleicht (noch) nicht das nonplusultra, dass wir alle bei dem Thema Wunden suchen. Ich befinde mich noch in einer Art Testphase und kann sowohl Programmierhilfe als auch medizinischen Input gut gebrauchen. 

Erforderliche Aufträge, die angelegt werden müssen um den „PHP Modus“ zu nutzen:

„WUNDE“ , „WUNDV“

Erforderliche Aufträge, die angelegt werden müssen um den „manuellen Modus“ (falls das Skript mal total falsch liegt) zu nutzen:

„PFLEGE“ , „SPUELUNG“ , „AUFLAGE“ , „KOMPRESSION“ , „LAGERUNG“

Die Aufträge legt man so an: 

 

Dieses Skript kann man sich z.B. bei Befunde (ich habe eine eigene Textkategorie Wundanalyse angelegt) rechts in die Leiste speichern:

 

{PHP}
/* ============================================================================
   MEDICAL OFFICE: ULTIMATIVES WUND-DASHBOARD & MATERIALRECHNER
   VERSION: 6.5 (06.04.2026) - 2-Wochen-Zyklus für teure Wundauflagen
   ============================================================================ */
error_reporting(0);
clearstatcache();
ini_set('opcache.enable', 0);

$heute_datum = date('d.m.y'); 

/* --- 1. DATEN ABRUFEN --- */
$raw_wunde = '{Auftrag:WUNDE:Maxzahl#10:\n:DATUM:ASCII}';
$raw_wundv = '{Auftrag:WUNDV:Maxzahl#10:\n:DATUM:ASCII}';
// NEU: Zwei Zeitfenster für den Medikamentenplan
$medi_text_14 = '{Medikamente:Tagzahl#14}'; 
$medi_text_28 = '{Medikamente:Tagzahl#28}'; 
$diag_text = '{DDiagnosen:Fall} {ADiagnosen:Fall}';

// BMI berechnen (Für Schlauchverband)
$gewicht   = (float)str_replace(',', '.', '{Patient.Gewicht}'); 
$groesse   = (float)str_replace(',', '.', '{Patient.Groesse}');
if ($groesse > 3) $groesse /= 100;
$bmi = 0;
if ($groesse > 0) $bmi = ($gewicht / ($groesse * $groesse));


/* --- 2. HILFSFUNKTIONEN --- */
function normalize_lok($str) {
    $str = strtoupper(trim($str));
    $str = str_replace(array('Ä','Ö','Ü','SS','ä','ö','ü','ß'), array('A','O','U','SS','A','O','U','SS'), $str);
    $res = "";
    for ($i = 0; $i < strlen($str); $i++) {
        $ord = ord($str[$i]);
        if (($ord >= 65 && $ord <= 90) || ($ord >= 48 && $ord <= 57) || $ord == 46) $res .= $str[$i];
        else $res .= " ";
    }
    return trim(preg_replace('/\s+/', ' ', $res));
}

function get_area($str) {
    if (preg_match('/\((\d+(?:,\d+)?)\s*cm²\)/', $str, $matches)) {
        return (float)str_replace(',', '.', $matches[1]);
    }
    return -1;
}

function get_wechsel_pro_woche($str) {
    if (stripos($str, 'täglich') !== false) return 7;
    if (stripos($str, '3x') !== false) return 3;
    if (stripos($str, '2x') !== false) return 2;
    if (stripos($str, '1x') !== false) return 1;
    if (stripos($str, 'Bedarf') !== false) return 2; 
    return 0;
}

function parse_line($line, &$current_date) {
    $line = trim($line);
    if (preg_match('/^(\d{2}\.\d{2}\.\d{2,4})\s*(.*)$/', $line, $matches)) {
        $pot_date = $matches[1];
        if (strlen($pot_date) == 10) {
            $pot_date = substr($pot_date, 0, 6) . substr($pot_date, 8, 2); 
        }
        $current_date = $pot_date;
        $line = trim($matches[2]);
    }
    return trim(str_ireplace(array("Wunde:", "Wundversorgung:"), "", $line));
}

function needs_med($medi_string, $search_terms) {
    foreach($search_terms as $term) {
        if (stripos($medi_string, $term) !== false) return false; 
    }
    return true; 
}


/* --- 3. WUNDEN PARSEN (Historie aufbauen) --- */
$lines_wunde = explode("\n", str_replace("\r", "\n", $raw_wunde));
$historie = array(); 
$current_lok = "";
$current_date = "Unbekannt";

foreach ($lines_wunde as $line) {
    $line = parse_line($line, $current_date);
    if ($line == "") continue;

    if (stripos($line, "Lok.:") !== false) {
        $parts = explode("Lok.:", $line);
        $raw_lok = trim($parts[1]); 
        
        $current_lok = normalize_lok($raw_lok);
        if (!isset($historie[$current_lok])) {
            $historie[$current_lok] = array();
        }
        if (!isset($historie[$current_lok][$current_date])) {
            $historie[$current_lok][$current_date] = array('lok_raw' => $raw_lok, 'area' => -1, 'diag' => '');
        }
    } elseif ($current_lok != "") {
        if (stripos($line, "Maße:") !== false) {
            $historie[$current_lok][$current_date]['area'] = get_area($line);
        }
        if (stripos($line, "Diag.:") !== false) {
            $historie[$current_lok][$current_date]['diag'] = trim(substr($line, stripos($line, "Diag.:") + 6));
        }
    }
}


/* --- 4. THERAPIEN PARSEN (Nur aktuelle) --- */
$lines_wundv = explode("\n", str_replace("\r", "\n", $raw_wundv));
$aktuelle_therapien = array();
$current_lok = "";
$is_current_date = false;

foreach ($lines_wundv as $line) {
    $line = parse_line($line, $current_date);
    if ($line == "") continue;

    if (stripos($line, "THERAPIE & VERSORGUNG") !== false && stripos($line, "(") !== false) {
        $start = strpos($line, "(");
        $end = strrpos($line, ")");
        if ($start !== false && $end !== false) {
            $lok_raw = trim(substr($line, $start + 1, $end - $start - 1));
            $current_lok = normalize_lok($lok_raw);
            
            if (!isset($aktuelle_therapien[$current_lok])) {
                $aktuelle_therapien[$current_lok] = array('text' => '', 'wechsel' => 0);
                $is_current_date = true;
            } else {
                $is_current_date = false; 
            }
        }
    } elseif ($current_lok != "" && $is_current_date) {
        $aktuelle_therapien[$current_lok]['text'] .= " " . $line;
        if (stripos($line, "Wechselintervall") !== false) {
            $aktuelle_therapien[$current_lok]['wechsel'] = get_wechsel_pro_woche($line);
        }
    }
}

if (count($historie) == 0) {
    echo "HINWEIS: Keine Wunddokumentation gefunden.\r\n";
    return;
}

/* --- 5. HEILUNGSTENDENZ & DOKU-STATUS --- */
$ist_erstversorgung = true;
$bericht_heilung = array();
$gesamt_wechsel_woche = 0; 

foreach ($historie as $lok => $daten_nach_datum) {
    $dates = array_keys($daten_nach_datum);
    
    if (count($dates) > 1 || (count($dates) == 1 && $dates[0] != $heute_datum)) {
        $ist_erstversorgung = false;
    }

    $neueste_daten = reset($daten_nach_datum); 
    $aelteste_daten = end($daten_nach_datum);  
    
    $lok_name = $neueste_daten['lok_raw'];
    $area_neu = $neueste_daten['area'];
    $area_alt = $aelteste_daten['area'];
    
    $tendenz = "Stagnierend (0%)";
    if ($area_neu >= 0 && $area_alt > 0) {
        if ($area_neu < $area_alt) {
            $prozent = round((1 - ($area_neu / $area_alt)) * 100);
            $tendenz = "Besserung (-" . $prozent . "%)";
        } elseif ($area_neu > $area_alt) {
            $prozent = round((($area_neu / $area_alt) - 1) * 100);
            $tendenz = "VERGRÖSSERT (+" . $prozent . "%)";
        }
    }
    
    if ($area_neu == -1) $tendenz = "Keine Maße";
    elseif ($area_neu == $area_alt && count($dates) == 1) $tendenz = "Neuaufnahme";

    $bericht_heilung[] = "- " . $lok_name . ": " . $tendenz . " [Aktuell: " . str_replace('.',',', $area_neu) . " cm²]";
    
    if (isset($aktuelle_therapien[$lok])) {
        if ($aktuelle_therapien[$lok]['wechsel'] > $gesamt_wechsel_woche) {
            $gesamt_wechsel_woche = $aktuelle_therapien[$lok]['wechsel'];
        }
    }
}


/* --- 6. MATERIAL-RECHNER (2-WOCHEN / 4-WOCHEN LOGIK) --- */
$bedarf_2w = array(); // Teure Auflagen
$bedarf_4w = array(); // Basis-Material
$kompressen_steril_count = 0;
$kompressen_unsteril_count = 0;

$tg_artikel = 'TG Schlauchverband Gr. 7 (PZN 18363370)';
$tg_suchbegriffe = array('18363370', 'TG SCHL VERB GR7', 'GR 7');
if ($bmi >= 30 || $gewicht >= 90) {
    $tg_artikel = 'TG Schlauchverband Gr. 9 (PZN 1020312 - Kräftig)';
    $tg_suchbegriffe = array('1020312', 'TG SCHL VERB GR9', 'GR 9');
}

foreach ($aktuelle_therapien as $lok => $th) {
    $text = $th['text'];
    $wochenwechsel = $th['wechsel'];
    if ($wochenwechsel == 0) $wochenwechsel = 3; 
    
    $wechsel_2w = $wochenwechsel * 2; 
    $wechsel_4w = $wochenwechsel * 4; 
    
    // Kompressen zur Reinigung halten ewig, Kalkulation für 4 Wochen
    $kompressen_steril_count += ($wechsel_4w * 2);
    $kompressen_unsteril_count += ($wechsel_4w * 2);
    
    if (stripos($text, 'Octenisept') !== false) $bedarf_4w['Octenisept 250ml'] = 1;
    if (stripos($text, 'NaCl') !== false) $bedarf_4w['NaCl 0,9% Spüllösung (Ampullen)'] = 1;

    // Teure Auflagen: Kalkulation für 2 WOCHEN
    if (stripos($text, 'Schaumstoffverband') !== false) {
        if (stripos($text, '5x5') !== false) {
            if(!isset($bedarf_2w['Schaumstoff Haft 5x5 (z.B. Dracofoam)'])){$bedarf_2w['Schaumstoff Haft 5x5 (z.B. Dracofoam)'] = 0;}
            $bedarf_2w['Schaumstoff Haft 5x5 (z.B. Dracofoam)'] += $wechsel_2w;
        }
        elseif (stripos($text, '7,5x7,5') !== false) {
            if(!isset($bedarf_2w['Schaumstoff Haft 7,5x7,5 (z.B. Dracofoam)'])){$bedarf_2w['Schaumstoff Haft 7,5x7,5 (z.B. Dracofoam)'] = 0;}
            $bedarf_2w['Schaumstoff Haft 7,5x7,5 (z.B. Dracofoam)'] += $wechsel_2w;
        }
        elseif (stripos($text, '10x10') !== false) {
            if(!isset($bedarf_2w['Schaumstoff Haft 10x10 (z.B. Dracofoam)'])){$bedarf_2w['Schaumstoff Haft 10x10 (z.B. Dracofoam)'] = 0;}
            $bedarf_2w['Schaumstoff Haft 10x10 (z.B. Dracofoam)'] += $wechsel_2w;
        }
    }
    
    if (stripos($text, 'Alginat') !== false) {
        if(!isset($bedarf_2w['Alginat (z.B. Curasorb)'])){$bedarf_2w['Alginat (z.B. Curasorb)'] = 0;}
        $bedarf_2w['Alginat (z.B. Curasorb)'] += $wechsel_2w;
    }
    if (stripos($text, 'Superabsorber') !== false) {
        if(!isset($bedarf_2w['Superabsorber (z.B. Vliwasorb)'])){$bedarf_2w['Superabsorber (z.B. Vliwasorb)'] = 0;}
        $bedarf_2w['Superabsorber (z.B. Vliwasorb)'] += $wechsel_2w;
    }
    
    if (stripos($text, 'Kompression') !== false || stripos($text, 'Dracolastic') !== false) {
        $bedarf_4w['Dracolastic (Kurzzugbinde)'] = 2; 
        $bedarf_4w['Polsterwatte'] = 4;
        if(!isset($bedarf_4w[$tg_artikel])) {
            $bedarf_4w[$tg_artikel] = 1; 
        }
    }
}

// Kompressen auf 100er Boxen aufrunden
if ($kompressen_steril_count > 0) {
    $bedarf_4w['Vlieskompressen steril (PZN 17549440)'] = ceil($kompressen_steril_count / 100);
}
if ($kompressen_unsteril_count > 0) {
    $bedarf_4w['Vlieskompressen unsteril (PZN 8889421)'] = ceil($kompressen_unsteril_count / 100);
}


/* --- 7. REZEPT-ABGLEICH --- */
$fehlendes_material = array();

$suchbegriffe = array(
    'Octenisept 250ml' => array('OCTENISEPT'),
    'NaCl 0,9% Spüllösung (Ampullen)' => array('NACL', 'KOCHSALZ'),
    'Schaumstoff Haft 5x5 (z.B. Dracofoam)' => array('5X5', '5 X 5'),
    'Schaumstoff Haft 7,5x7,5 (z.B. Dracofoam)' => array('7,5', '7.5'),
    'Schaumstoff Haft 10x10 (z.B. Dracofoam)' => array('10X10', '10 X 10'),
    'Alginat (z.B. Curasorb)' => array('ALGINAT', 'CURASORB'),
    'Superabsorber (z.B. Vliwasorb)' => array('VLIWASORB', 'SUPERABSORBER', 'CUREA'),
    'Dracolastic (Kurzzugbinde)' => array('DRACOLASTIC', 'KURZUGBINDE'),
    'Polsterwatte' => array('POLSTERWATTE'),
    'Vlieskompressen steril (PZN 17549440)' => array('17549440', 'STERIL', 'ST KOM 50X2'),
    'Vlieskompressen unsteril (PZN 8889421)' => array('8889421', 'UNSTERIL', 'UNST KOM 100')
);
$suchbegriffe[$tg_artikel] = $tg_suchbegriffe;

// Check 2-Wochen-Bedarf
foreach ($bedarf_2w as $artikel => $menge) {
    $suche = isset($suchbegriffe[$artikel]) ? $suchbegriffe[$artikel] : array();
    // Prüfe NUR die letzten 14 Tage
    if (needs_med($medi_text_14, $suche)) {
        // Falls in den letzten 14 Tagen nichts war, prüfen wir, ob es vor 3-4 Wochen verordnet wurde
        if (!needs_med($medi_text_28, $suche)) {
            $fehlendes_material[] = $menge . "x " . $artikel . " (Achtung: Zuletzt vor >14 Tagen verordnet!)";
        } else {
            $fehlendes_material[] = $menge . "x " . $artikel;
        }
    }
}

// Check 4-Wochen-Bedarf
foreach ($bedarf_4w as $artikel => $menge) {
    $suche = isset($suchbegriffe[$artikel]) ? $suchbegriffe[$artikel] : array();
    if (needs_med($medi_text_28, $suche)) {
        $fehlendes_material[] = $menge . "x " . $artikel;
    }
}


/* --- 8. AUSGABE --- */
echo "==== WUND-DASHBOARD ====\r\n";
if ($ist_erstversorgung) {
    echo "[X] ERSTDOKUMENTATION (Neuaufnahme)\r\n";
} else {
    echo "[X] FOLGEDOKUMENTATION\r\n";
}
echo "--------------------------------------------------\r\n";

echo ">>> HEILUNGSTENDENZ (vs. Erstdokumentation) <<<\r\n";
foreach ($bericht_heilung as $bh) {
    echo $bh . "\r\n";
}
echo "--------------------------------------------------\r\n";

echo ">>> MATERIALBEDARF <<<\r\n";
echo "Anzahl Verbandswechsel pro Woche (Patient): " . $gesamt_wechsel_woche . "x\r\n";
echo "Zeitraum: Wundauflagen (14 Tage) | Basis-Material (28 Tage)\r\n";
echo "Kompressen (4 Wochen): " . $kompressen_steril_count . " steril, " . $kompressen_unsteril_count . " unsteril\r\n\r\n";

if (count($fehlendes_material) > 0) {
    echo "NOCH NICHT VERORDNET / NEU BENÖTIGT:\r\n";
    foreach ($fehlendes_material as $fm) {
        echo "[ ] " . $fm . "\r\n";
    }
} else {
    echo "Materialbedarf ist durch aktuelle Verordnungen gedeckt.\r\n";
}

/* --- 9. ICD KONTROLLE --- */
echo "--------------------------------------------------\r\n";
$icd_todos = array();
$gesamt_text = str_replace("\r", " ", $raw_wunde) . " " . str_replace("\r", " ", $raw_wundv);

if (stripos($gesamt_text, 'Venös') !== false || stripos($gesamt_text, 'CVI') !== false) {
    if (!preg_match('/I83\.[012]|I87\.[02]1/', $diag_text)) $icd_todos[] = "Venöses Ulcus (I83.0 / I83.1 / I83.2) oder PTS (I87.01 / I87.21)";
}
if (stripos($gesamt_text, 'Arteriell') !== false || stripos($gesamt_text, 'pAVK') !== false) {
    if (!preg_match('/I70\.2[34]/', $diag_text)) $icd_todos[] = "pAVK mit Ulcus (I70.23 oder I70.24)";
}
if (stripos($gesamt_text, 'Druck') !== false || stripos($gesamt_text, 'Mal perf') !== false) {
    if (stripos($diag_text, 'L89') === false) $icd_todos[] = "Dekubitus / Druckulkus (L89.-)";
}

if (count($icd_todos) > 0) {
    echo ">>> ICD KONTROLLE <<<\r\nFEHLENDE DIAGNOSEN:\r\n";
    foreach ($icd_todos as $it) echo " - " . $it . "\r\n";
} else {
    echo ">>> ICD KONTROLLE <<<\r\nAlle wunden-spezifischen Diagnosen sind dokumentiert!\r\n";
}

{/PHP}

 

Bei der Folgedokumentation sollte das Skript wiederholbar sein. Bei Dauer sollte man dann Verlaufskontrolle ankreuzen und das Skript holt sich die Information aus der Patientenakte und der vorherigen Dokumentation).

 

Wer Lust hat mit-zu-tüfteln ist herzlich eingeladen! Wer eine komplett fertige Lösung sucht, wird vielleicht enttäuscht werden. (Es fehlt noch die tägliche Erfahrung). Die Datei einfach wieder in WUNDE GANZKOERPER OHNE LOGO.mfw (ohne PDF) umbenennen und hier installieren:

Bezeichnung ist bei Mir „Wunddoku Ganzkörper“  Tastenkürzel „wd“ und Kartentyp auch „wd“. Kann aber eigentlich frei gewählt werden. 

Hochgeladene Dateien: