-- ===================================================================== -- aether-medical — Datenbankschema -- -- Grundsatz, der sich durch das ganze Schema zieht: -- Das System unterstuetzt medizinische Entscheidungen — es trifft -- niemals selbst welche. -- -- Deshalb hat JEDER Vorgang, der eine Entscheidung darstellt, eine -- Spalte mit dem verantwortlichen Mediziner. Es gibt keine Spalte, -- die das System ohne einen Menschen dahinter fuellen wuerde. -- Aufnahmen, Entlassungen, Diagnosen, Medikamentengaben und -- Todesfeststellungen tragen immer einen Namen. -- ===================================================================== -- --------------------------------------------------------------------- -- Personal -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_personal` ( `character` INT UNSIGNED NOT NULL COMMENT 'Charakter aus aether_characters', `personalnummer` VARCHAR(16) NOT NULL COMMENT 'z. B. LSMC-0421', `rolle` VARCHAR(32) NOT NULL DEFAULT 'praktikant', `station` VARCHAR(32) NOT NULL DEFAULT 'notaufnahme', `rechte_extra` LONGTEXT DEFAULT NULL COMMENT 'Zusaetzlich gewaehrte Rechte als JSON', `rechte_entzug` LONGTEXT DEFAULT NULL COMMENT 'Einzeln entzogene Rechte als JSON', `eingestellt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `notiz` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`character`), UNIQUE KEY `uniq_personalnummer` (`personalnummer`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Dienstzeiten (nur Protokoll, keine Auswertung zur Bewertung) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_dienst` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED NOT NULL, `beginn` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `ende` DATETIME DEFAULT NULL, `sekunden` INT UNSIGNED NOT NULL DEFAULT 0, `station` VARCHAR(32) DEFAULT NULL, `funktion` VARCHAR(24) NOT NULL DEFAULT 'station' COMMENT 'rtw/notarzt/station/op/leitstelle', PRIMARY KEY (`id`), KEY `idx_character` (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Patientenstammdaten -- Werden ausschliesslich von Medizinern gepflegt. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_patient` ( `character` INT UNSIGNED NOT NULL, `blutgruppe` VARCHAR(8) DEFAULT NULL COMMENT 'Erst nach Bestimmung im Labor', `allergien` VARCHAR(512) DEFAULT NULL, `vorerkrankungen` VARCHAR(1000) DEFAULT NULL, `dauermedikation` VARCHAR(1000) DEFAULT NULL, `implantate` VARCHAR(512) DEFAULT NULL, `organspender` VARCHAR(16) DEFAULT NULL COMMENT 'ja/nein/unbekannt', `notfallkontakt` VARCHAR(160) DEFAULT NULL, `hinweis` VARCHAR(512) DEFAULT NULL COMMENT 'Warnhinweis, z. B. Gerinnungsstoerung', `lichtbild` VARCHAR(512) DEFAULT NULL COMMENT 'Bildadresse fuer die Patientenakte', `aktualisiert_von` INT UNSIGNED DEFAULT NULL, `aktualisiert_am` DATETIME DEFAULT NULL, PRIMARY KEY (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Kurze Vermerke zu einem Patienten ausserhalb einer Akte CREATE TABLE IF NOT EXISTS `medical_patient_notiz` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `patient` INT UNSIGNED NOT NULL, `text` VARCHAR(1000) NOT NULL, `von` INT UNSIGNED NOT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Akten und ihre Versionen -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_akte` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `aktenzeichen` VARCHAR(24) NOT NULL, `patient` INT UNSIGNED DEFAULT NULL, `typ` VARCHAR(24) NOT NULL DEFAULT 'behandlung', `titel` VARCHAR(160) NOT NULL, `status` VARCHAR(16) NOT NULL DEFAULT 'entwurf' COMMENT 'entwurf/offen/freigegeben/geschlossen', `inhalt` LONGTEXT DEFAULT NULL, `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `freigabe_von` INT UNSIGNED DEFAULT NULL, `freigabe_am` DATETIME DEFAULT NULL, `version` INT UNSIGNED NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `uniq_aktenzeichen` (`aktenzeichen`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_akte_version` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `akte` INT UNSIGNED NOT NULL, `version` INT UNSIGNED NOT NULL, `inhalt` LONGTEXT DEFAULT NULL, `geaendert_von` INT UNSIGNED NOT NULL, `geaendert_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `kommentar` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_akte` (`akte`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Verknuepfungen zwischen Vorgaengen (Akte <-> Einsatz <-> OP <-> Labor) CREATE TABLE IF NOT EXISTS `medical_verknuepfung` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `von_typ` VARCHAR(24) NOT NULL, `von_id` VARCHAR(64) NOT NULL, `zu_typ` VARCHAR(24) NOT NULL, `zu_id` VARCHAR(64) NOT NULL, `von` INT UNSIGNED DEFAULT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_von` (`von_typ`, `von_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Aufnahme -- Es gibt KEINE automatische Aufnahme und KEINE automatische -- Entlassung. Beides traegt immer einen Mediziner als Verantwortlichen. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_aufnahme` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `patient` INT UNSIGNED NOT NULL, `grund` VARCHAR(512) NOT NULL, `prioritaet` TINYINT NOT NULL DEFAULT 3 COMMENT '1 = sofort … 4 = nachrangig', `station` VARCHAR(32) DEFAULT NULL, `zimmer` INT UNSIGNED DEFAULT NULL, `status` VARCHAR(16) NOT NULL DEFAULT 'wartend' COMMENT 'wartend/aufgenommen/entlassen', `aufgenommen_von` INT UNSIGNED NOT NULL COMMENT 'Wer hat aufgenommen', `aufgenommen_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Entlassung geschieht ausschliesslich manuell: `entlassen_von` INT UNSIGNED DEFAULT NULL, `entlassen_am` DATETIME DEFAULT NULL, `entlass_grund` VARCHAR(512) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_patient` (`patient`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Behandlungsdokumentation -- Das System speichert AUSSCHLIESSLICH die Dokumentation. Es heilt -- nichts, es diagnostiziert nichts, es schlaegt keine Diagnose vor. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_behandlung` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `patient` INT UNSIGNED NOT NULL, `aufnahme` INT UNSIGNED DEFAULT NULL, `einsatz` INT UNSIGNED DEFAULT NULL, `symptome` TEXT DEFAULT NULL COMMENT 'Was der Patient schildert', `untersuchung` TEXT DEFAULT NULL COMMENT 'Was der Mediziner erhebt', `diagnose` TEXT DEFAULT NULL COMMENT 'Vom Mediziner gestellt, nie berechnet', `massnahmen` TEXT DEFAULT NULL, `empfehlung` TEXT DEFAULT NULL, `nachsorge` TEXT DEFAULT NULL, `status` VARCHAR(16) NOT NULL DEFAULT 'laufend' COMMENT 'laufend/abgeschlossen', `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `abgeschlossen_von` INT UNSIGNED DEFAULT NULL, `abgeschlossen_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Verabreichte Medikamente — immer mit dem Mediziner, der sie gegeben hat CREATE TABLE IF NOT EXISTS `medical_behandlung_medikament` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `behandlung` INT UNSIGNED NOT NULL, `medikament` INT UNSIGNED NOT NULL, `dosierung` VARCHAR(64) DEFAULT NULL, `menge` INT NOT NULL DEFAULT 1, `gegeben_von` INT UNSIGNED NOT NULL, `gegeben_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `hinweis` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_behandlung` (`behandlung`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Operationen -- Werden vollstaendig manuell dokumentiert. Keine Durchfuehrung -- durch das System, kein automatischer Ausgang. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_operation` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `patient` INT UNSIGNED NOT NULL, `aufnahme` INT UNSIGNED DEFAULT NULL, `art` VARCHAR(160) NOT NULL, `saal` INT UNSIGNED DEFAULT NULL, `geplant_fuer` DATETIME DEFAULT NULL COMMENT 'Ab hier erinnert das System nur', `beginn` DATETIME DEFAULT NULL COMMENT 'Vom OP-Team eingetragen', `ende` DATETIME DEFAULT NULL COMMENT 'Vom OP-Team eingetragen', `verlauf` TEXT DEFAULT NULL, `komplikationen` TEXT DEFAULT NULL, `nachsorge` TEXT DEFAULT NULL, `status` VARCHAR(16) NOT NULL DEFAULT 'geplant' COMMENT 'geplant/laufend/abgeschlossen/abgesagt', `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_operation_team` ( `operation` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `funktion` VARCHAR(48) NOT NULL DEFAULT 'assistenz' COMMENT 'operateur/assistenz/anaesthesie/pflege', PRIMARY KEY (`operation`, `character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Medikamente -- Bestandsfuehrung. Eine Ausgabe bucht der Mediziner selbst — -- das System gibt nichts aus und verordnet nichts. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_medikament` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `name` VARCHAR(120) NOT NULL, `wirkstoff` VARCHAR(120) DEFAULT NULL, `kategorie` VARCHAR(48) NOT NULL DEFAULT 'sonstiges', `dosierung_standard` VARCHAR(64) DEFAULT NULL COMMENT 'Nur ein Vorschlag', `einheit` VARCHAR(24) NOT NULL DEFAULT 'Stück', `bestand` INT NOT NULL DEFAULT 0, `mindestbestand` INT NOT NULL DEFAULT 0 COMMENT 'Ab hier erinnert das System', `lagerort` VARCHAR(64) DEFAULT NULL, `verfaellt_am` DATE DEFAULT NULL, `hinweis` VARCHAR(255) DEFAULT NULL COMMENT 'z. B. Wechselwirkungen', `betaeubungsmittel` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Erfordert besondere Doku', `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `sortierung` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_medikament_buchung` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `medikament` INT UNSIGNED NOT NULL, `art` VARCHAR(16) NOT NULL COMMENT 'eingang/ausgabe/ruecknahme/verfall/korrektur', `menge` INT NOT NULL, `bestand_danach` INT NOT NULL, `patient` INT UNSIGNED DEFAULT NULL, `grund` VARCHAR(255) DEFAULT NULL, `gebucht_von` INT UNSIGNED NOT NULL, `gebucht_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_medikament` (`medikament`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Labor -- Das Labor speichert Ergebnisse. Es stellt keine Diagnose — -- die Bewertung eines Befundes bleibt dem Mediziner ueberlassen. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_labor` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `patient` INT UNSIGNED NOT NULL, `art` VARCHAR(32) NOT NULL COMMENT 'blut/dna/urin/gewebe/toxikologie', `fragestellung` VARCHAR(512) DEFAULT NULL COMMENT 'Wonach wird gesucht', `dringend` TINYINT(1) NOT NULL DEFAULT 0, `status` VARCHAR(16) NOT NULL DEFAULT 'offen' COMMENT 'offen/in_arbeit/fertig/verworfen', `auftrag_von` INT UNSIGNED NOT NULL, `auftrag_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `bearbeitet_von` INT UNSIGNED DEFAULT NULL, `bearbeitet_am` DATETIME DEFAULT NULL, `ergebnis` TEXT DEFAULT NULL COMMENT 'Messwerte, vom Labor eingetragen', `befund` TEXT DEFAULT NULL COMMENT 'Bewertung durch einen Mediziner', `befund_von` INT UNSIGNED DEFAULT NULL, `befund_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Blutbank -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_blut` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `konserve` VARCHAR(24) NOT NULL, `blutgruppe` VARCHAR(8) NOT NULL, `menge_ml` INT NOT NULL DEFAULT 500, `lagerort` VARCHAR(64) DEFAULT NULL, `eingelagert_von` INT UNSIGNED NOT NULL, `eingelagert_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `verfaellt_am` DATE DEFAULT NULL COMMENT 'Ab hier erinnert das System nur', `status` VARCHAR(16) NOT NULL DEFAULT 'vorraetig' COMMENT 'vorraetig/reserviert/ausgegeben/verworfen', `reserviert_fuer` INT UNSIGNED DEFAULT NULL, `reserviert_von` INT UNSIGNED DEFAULT NULL, `ausgegeben_von` INT UNSIGNED DEFAULT NULL, `ausgegeben_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_konserve` (`konserve`), KEY `idx_blutgruppe` (`blutgruppe`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Krankenhaus: Stationen, Zimmer, Belegung -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_station` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `name` VARCHAR(120) NOT NULL, `art` VARCHAR(24) NOT NULL DEFAULT 'normal' COMMENT 'notaufnahme/normal/intensiv/op/behandlung', `etage` VARCHAR(24) DEFAULT NULL, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `sortierung` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_zimmer` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `station` INT UNSIGNED NOT NULL, `kennung` VARCHAR(24) NOT NULL, `betten` INT NOT NULL DEFAULT 1, `art` VARCHAR(24) NOT NULL DEFAULT 'bett' COMMENT 'bett/behandlung/op/intensiv/isolierung', `status` VARCHAR(16) NOT NULL DEFAULT 'frei' COMMENT 'frei/belegt/reinigung/gesperrt — immer manuell gesetzt', `hinweis` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_station` (`station`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_belegung` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `zimmer` INT UNSIGNED NOT NULL, `bett` INT NOT NULL DEFAULT 1, `patient` INT UNSIGNED NOT NULL, `aufnahme` INT UNSIGNED DEFAULT NULL, `belegt_von` INT UNSIGNED NOT NULL, `belegt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `frei_von` INT UNSIGNED DEFAULT NULL, `frei_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_zimmer` (`zimmer`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Intensivstation -- Keine automatischen Statusaenderungen. Jeder Verlaufseintrag -- stammt von einem Menschen. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_intensiv` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `patient` INT UNSIGNED NOT NULL, `aufnahme` INT UNSIGNED DEFAULT NULL, `zimmer` INT UNSIGNED DEFAULT NULL, `geraete` VARCHAR(512) DEFAULT NULL COMMENT 'Angeschlossene Geraete als Text', `verantwortlich` INT UNSIGNED DEFAULT NULL COMMENT 'Zustaendiger Arzt', `zustand` VARCHAR(24) NOT NULL DEFAULT 'stabil' COMMENT 'stabil/kritisch/besserung — immer manuell gesetzt', `notiz` VARCHAR(1000) DEFAULT NULL, `aufgenommen_von` INT UNSIGNED NOT NULL, `aufgenommen_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `beendet_von` INT UNSIGNED DEFAULT NULL, `beendet_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_intensiv_verlauf` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `intensiv` INT UNSIGNED NOT NULL, `text` VARCHAR(1000) NOT NULL, `von` INT UNSIGNED NOT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_intensiv` (`intensiv`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Einsaetze und Leitstelle -- Ein Notruf erzeugt einen OFFENEN Einsatz. Zugewiesen wird -- ausschliesslich durch die Leitstelle, nie durch das System. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_einsatz` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `nummer` VARCHAR(24) NOT NULL, `titel` VARCHAR(160) NOT NULL, `kategorie` VARCHAR(32) NOT NULL DEFAULT 'notruf', `prioritaet` TINYINT NOT NULL DEFAULT 3, `ort` VARCHAR(160) DEFAULT NULL, `pos_x` FLOAT DEFAULT NULL, `pos_y` FLOAT DEFAULT NULL, `pos_z` FLOAT DEFAULT NULL, `beschreibung` TEXT DEFAULT NULL, `status` VARCHAR(16) NOT NULL DEFAULT 'offen' COMMENT 'offen/laufend/abgeschlossen', `quelle` VARCHAR(24) NOT NULL DEFAULT 'manuell' COMMENT 'manuell/notruf/polizei/system', `erstellt_von` INT UNSIGNED DEFAULT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `geschlossen_von` INT UNSIGNED DEFAULT NULL, `geschlossen_am` DATETIME DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_nummer` (`nummer`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_einsatz_kraft` ( `einsatz` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `seit` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `bis` DATETIME DEFAULT NULL, PRIMARY KEY (`einsatz`, `character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_einsatz_notiz` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `einsatz` INT UNSIGNED NOT NULL, `text` VARCHAR(1000) NOT NULL, `von` INT UNSIGNED NOT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_einsatz` (`einsatz`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Berichtswesen -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_bericht` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `nummer` VARCHAR(24) NOT NULL, `patient` INT UNSIGNED DEFAULT NULL, `behandlung` INT UNSIGNED DEFAULT NULL, `einsatz` INT UNSIGNED DEFAULT NULL, `titel` VARCHAR(160) NOT NULL, `symptome` TEXT DEFAULT NULL, `untersuchung` TEXT DEFAULT NULL, `diagnose` TEXT DEFAULT NULL, `massnahmen` TEXT DEFAULT NULL, `empfehlung` TEXT DEFAULT NULL, `anlagen` LONGTEXT DEFAULT NULL COMMENT 'JSON: Bilder und Dokumente', `status` VARCHAR(16) NOT NULL DEFAULT 'entwurf' COMMENT 'entwurf/eingereicht/freigegeben', `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `unterschriften` LONGTEXT DEFAULT NULL COMMENT 'JSON: wer hat gegengezeichnet', PRIMARY KEY (`id`), UNIQUE KEY `uniq_nummer` (`nummer`), KEY `idx_patient` (`patient`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Fuhrpark -- Standort, Tank und Zustand sind GEMELDETE Tatsachen. -- Zuweisung und Wartungsstatus setzt immer ein Mensch. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_fahrzeug` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennzeichen` VARCHAR(12) NOT NULL, `modell` VARCHAR(48) NOT NULL, `bezeichnung` VARCHAR(64) NOT NULL COMMENT 'z. B. RTW 1', `art` VARCHAR(24) NOT NULL DEFAULT 'rtw' COMMENT 'rtw/nef/ktw/hubschrauber/sonstiges', `station` VARCHAR(32) DEFAULT NULL, `status` VARCHAR(24) NOT NULL DEFAULT 'verfuegbar' COMMENT 'verfuegbar/im_einsatz/werkstatt/ausser_dienst', `wartung` VARCHAR(16) NOT NULL DEFAULT 'ok' COMMENT 'ok/faellig/werkstatt', `ausstattung` VARCHAR(512) DEFAULT NULL, `tank` FLOAT DEFAULT NULL COMMENT 'Gemeldet', `zustand` FLOAT DEFAULT NULL COMMENT 'Gemeldet', `letzter_fahrer` INT UNSIGNED DEFAULT NULL COMMENT 'Gemeldet', `pos_x` FLOAT DEFAULT NULL, `pos_y` FLOAT DEFAULT NULL, `pos_z` FLOAT DEFAULT NULL, `gemeldet_am` DATETIME DEFAULT NULL, `zugewiesen_an` INT UNSIGNED DEFAULT NULL COMMENT 'Manuell zugewiesen', `notiz` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennzeichen` (`kennzeichen`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Interne Kommunikation -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_nachricht` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `absender` INT UNSIGNED NOT NULL, `empfaenger` VARCHAR(64) NOT NULL COMMENT 'Charakter-ID, Station oder "alle"', `empf_typ` VARCHAR(16) NOT NULL DEFAULT 'person' COMMENT 'person/station/rundmeldung', `betreff` VARCHAR(160) DEFAULT NULL, `text` TEXT NOT NULL, `gesendet` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_empfaenger` (`empfaenger`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_nachricht_gelesen` ( `nachricht` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `gelesen_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`nachricht`, `character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_aushang` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `titel` VARCHAR(160) NOT NULL, `text` TEXT NOT NULL, `kategorie` VARCHAR(24) NOT NULL DEFAULT 'information' COMMENT 'anweisung/information/warnung/hygiene', `station` VARCHAR(32) DEFAULT NULL COMMENT 'NULL = gesamte Klinik', `angeheftet` TINYINT(1) NOT NULL DEFAULT 0, `kenntnispflicht` TINYINT(1) NOT NULL DEFAULT 0, `frist` DATETIME DEFAULT NULL, `erstellt_von` INT UNSIGNED NOT NULL, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `archiviert_von` INT UNSIGNED DEFAULT NULL, `archiviert_am` DATETIME DEFAULT NULL, `aktiv` TINYINT(1) NOT NULL DEFAULT 1, PRIMARY KEY (`id`), KEY `idx_aktiv` (`aktiv`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `medical_aushang_kenntnis` ( `aushang` INT UNSIGNED NOT NULL, `character` INT UNSIGNED NOT NULL, `bestaetigt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`aushang`, `character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Hinweise und Erinnerungen -- Sie erinnern ausschliesslich. Kein Hinweis fuehrt etwas aus. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_hinweis` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED DEFAULT NULL COMMENT 'NULL = an alle im Dienst', `kategorie` VARCHAR(32) NOT NULL COMMENT 'einsatz/patient/labor/medikament/blut/op/doku/system', `prioritaet` VARCHAR(16) NOT NULL DEFAULT 'normal', `titel` VARCHAR(160) NOT NULL, `text` VARCHAR(512) DEFAULT NULL, `ziel_typ` VARCHAR(24) DEFAULT NULL COMMENT 'Wohin springt ein Klick', `ziel_id` VARCHAR(64) DEFAULT NULL, `gelesen` TINYINT(1) NOT NULL DEFAULT 0, `erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_character` (`character`, `gelesen`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Protokoll — wer, wann, was, warum -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_protokoll` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `character` INT UNSIGNED DEFAULT NULL, `personalnummer` VARCHAR(16) DEFAULT NULL, `modul` VARCHAR(32) NOT NULL, `aktion` VARCHAR(64) NOT NULL, `ziel_typ` VARCHAR(24) DEFAULT NULL, `ziel_id` VARCHAR(64) DEFAULT NULL, `details` LONGTEXT DEFAULT NULL COMMENT 'JSON: was genau geaendert wurde', `grund` VARCHAR(255) DEFAULT NULL, `am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_modul` (`modul`), KEY `idx_character` (`character`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Systemeinstellungen (aktive Module, Vorlagen) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_einstellung` ( `schluessel` VARCHAR(64) NOT NULL, `wert` LONGTEXT DEFAULT NULL, PRIMARY KEY (`schluessel`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Vorlagen fuer Dokumentation (Administration pflegt sie) -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `medical_vorlage` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `kennung` VARCHAR(24) NOT NULL, `bereich` VARCHAR(24) NOT NULL COMMENT 'behandlung/bericht/op/labor', `name` VARCHAR(120) NOT NULL, `inhalt` LONGTEXT DEFAULT NULL COMMENT 'JSON: vorbelegte Felder', `aktiv` TINYINT(1) NOT NULL DEFAULT 1, `sortierung` INT NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uniq_kennung` (`kennung`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;