- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark, Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI) - aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource, an aether-core gekoppelt (Rechte über aether_users.admin_group), mit WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU) - Prototypen admin/ vervollständigt - SQL-Schema aether_admin.sql - Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
608 lines
28 KiB
SQL
608 lines
28 KiB
SQL
-- =====================================================================
|
|
-- 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;
|