- 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>
454 lines
22 KiB
SQL
454 lines
22 KiB
SQL
-- =====================================================================
|
|
-- aether-police — Datenbankschema
|
|
--
|
|
-- Einspielen: mysql -u root -p aether < sql/aether_police.sql
|
|
--
|
|
-- Hinweis zum Grundprinzip: Keine dieser Tabellen enthaelt Automatismen.
|
|
-- Fristen (z. B. Haftzeit) werden nur MITGEFUEHRT, damit das System
|
|
-- erinnern kann. Ausgefuehrt wird ausschliesslich durch einen Beamten —
|
|
-- erkennbar an den Feldern `entlassen_von` / `entlassen_am`.
|
|
-- =====================================================================
|
|
|
|
USE `aether`;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Personal: Zugehoerigkeit, Rolle und individuelle Rechte
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_personal` (
|
|
`character` INT UNSIGNED NOT NULL COMMENT 'Charakter aus aether_characters',
|
|
`dienstnummer` VARCHAR(16) NOT NULL COMMENT 'Dienstnummer, z. B. LSPD-0421',
|
|
`rolle` VARCHAR(32) NOT NULL DEFAULT 'anwaerter',
|
|
`abteilung` VARCHAR(32) NOT NULL DEFAULT 'streife' COMMENT 'streife/kripo/verkehr/sek/leitstelle',
|
|
`rechte_extra` LONGTEXT DEFAULT NULL COMMENT 'Zusaetzlich gewaehrte Rechte als JSON-Array',
|
|
`rechte_entzug` LONGTEXT DEFAULT NULL COMMENT 'Einzeln entzogene Rechte als JSON-Array',
|
|
`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_dienstnummer` (`dienstnummer`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Dienstzeiten (nur Protokoll, keine Auswertung zur Bewertung)
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_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 NOT NULL DEFAULT 0,
|
|
`abteilung` VARCHAR(32) NOT NULL DEFAULT 'streife',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_character` (`character`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Personenakten — Stammdaten der Polizei zu einer Person
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_person` (
|
|
`character` INT UNSIGNED NOT NULL,
|
|
`lichtbild` LONGTEXT DEFAULT NULL COMMENT 'Bild-URL oder Data-URI',
|
|
`fingerabdruck` VARCHAR(64) DEFAULT NULL,
|
|
`dna` VARCHAR(64) DEFAULT NULL,
|
|
`warnhinweis` VARCHAR(255) DEFAULT NULL COMMENT 'z. B. gewaltbereit, bewaffnet',
|
|
`gefahrenstufe` TINYINT NOT NULL DEFAULT 0 COMMENT '0 = keine, 3 = hoch',
|
|
`aktualisiert` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`character`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Akten (Straf-, Ermittlungs-, Einsatz-, Unfallakte, Vernehmung ...)
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_akte` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`aktenzeichen` VARCHAR(32) NOT NULL,
|
|
`typ` VARCHAR(24) NOT NULL COMMENT 'straf/ermittlung/einsatz/unfall/vernehmung/beschluss',
|
|
`titel` VARCHAR(160) NOT NULL,
|
|
`status` VARCHAR(24) NOT NULL DEFAULT 'offen' COMMENT 'offen/pruefung/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 COMMENT 'Wer hat freigegeben (nie automatisch)',
|
|
`freigabe_am` DATETIME DEFAULT NULL,
|
|
`version` INT NOT NULL DEFAULT 1,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uniq_az` (`aktenzeichen`),
|
|
KEY `idx_typ` (`typ`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- Versionshistorie jeder Akte (Dokumentenverwaltung)
|
|
CREATE TABLE IF NOT EXISTS `police_akte_version` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`akte` INT UNSIGNED NOT NULL,
|
|
`version` INT NOT NULL,
|
|
`inhalt` LONGTEXT DEFAULT NULL,
|
|
`geaendert_von` INT UNSIGNED NOT NULL,
|
|
`geaendert_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`grund` VARCHAR(255) DEFAULT NULL COMMENT 'Warum wurde geaendert',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_akte` (`akte`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- Verknuepfungen: Akte <-> Person / Fahrzeug / Beweis / Einsatz
|
|
CREATE TABLE IF NOT EXISTS `police_verknuepfung` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`akte` INT UNSIGNED NOT NULL,
|
|
`typ` VARCHAR(16) NOT NULL COMMENT 'person/fahrzeug/beweis/einsatz/bericht',
|
|
`ziel_id` VARCHAR(64) NOT NULL COMMENT 'ID oder Kennzeichen des Ziels',
|
|
`rolle` VARCHAR(32) DEFAULT NULL COMMENT 'beschuldigt/zeuge/geschaedigt/beteiligt',
|
|
`erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_akte` (`akte`),
|
|
KEY `idx_ziel` (`typ`, `ziel_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Anzeigen — erfasste Delikte. Immer von einem Beamten bestaetigt.
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_anzeige` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`akte` INT UNSIGNED DEFAULT NULL,
|
|
`beschuldigter` INT UNSIGNED NOT NULL,
|
|
`delikte` LONGTEXT NOT NULL COMMENT 'JSON: [{id,name,haft,geld,paragraph}]',
|
|
`haft_empfohlen` INT NOT NULL DEFAULT 0 COMMENT 'Vorschlag des Katalogs (Minuten)',
|
|
`geld_empfohlen` INT NOT NULL DEFAULT 0 COMMENT 'Vorschlag des Katalogs',
|
|
`haft_final` INT NOT NULL DEFAULT 0 COMMENT 'Vom Beamten festgelegt',
|
|
`geld_final` INT NOT NULL DEFAULT 0 COMMENT 'Vom Beamten festgelegt',
|
|
`begruendung` VARCHAR(512) DEFAULT NULL COMMENT 'Pflicht bei Abweichung vom Vorschlag',
|
|
`status` VARCHAR(16) NOT NULL DEFAULT 'entwurf' COMMENT 'entwurf/bestaetigt/verworfen',
|
|
`erstellt_von` INT UNSIGNED NOT NULL,
|
|
`erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`bestaetigt_von` INT UNSIGNED DEFAULT NULL,
|
|
`bestaetigt_am` DATETIME DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_beschuldigter` (`beschuldigter`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Gewahrsam — reine Fristenverwaltung, KEINE automatische Entlassung
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_gewahrsam` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`character` INT UNSIGNED NOT NULL,
|
|
`anzeige` INT UNSIGNED DEFAULT NULL,
|
|
`haft_minuten` INT NOT NULL COMMENT 'Vom Beamten festgelegte Dauer',
|
|
`beginn` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`faellig_am` DATETIME NOT NULL COMMENT 'Ab hier erinnert das System nur',
|
|
`grund` VARCHAR(512) NOT NULL DEFAULT '',
|
|
`zelle` VARCHAR(32) DEFAULT NULL,
|
|
`eingewiesen_von` INT UNSIGNED NOT NULL,
|
|
-- Entlassung geschieht ausschliesslich manuell:
|
|
`entlassen_von` INT UNSIGNED DEFAULT NULL,
|
|
`entlassen_am` DATETIME DEFAULT NULL,
|
|
`entlass_grund` VARCHAR(255) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_character` (`character`),
|
|
KEY `idx_offen` (`entlassen_am`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Einsaetze und Dispatch
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_einsatz` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`nummer` VARCHAR(24) NOT NULL COMMENT 'Einsatznummer',
|
|
`titel` VARCHAR(160) NOT NULL,
|
|
`kategorie` VARCHAR(32) NOT NULL DEFAULT 'sonstiges',
|
|
`prioritaet` TINYINT NOT NULL DEFAULT 3 COMMENT '1 = hoechste',
|
|
`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(24) NOT NULL DEFAULT 'offen' COMMENT 'offen/zugewiesen/vorort/abgeschlossen',
|
|
`quelle` VARCHAR(32) NOT NULL DEFAULT 'manuell' COMMENT 'manuell/notruf/panik/extern',
|
|
`erstellt_von` INT UNSIGNED DEFAULT NULL COMMENT 'NULL bei eingehendem Notruf',
|
|
`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 `police_einsatz_beamter` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`einsatz` INT UNSIGNED NOT NULL,
|
|
`character` INT UNSIGNED NOT NULL,
|
|
`beigetreten` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`verlassen` DATETIME DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_einsatz` (`einsatz`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS `police_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;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Fahndungen — immer manuell angelegt
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_fahndung` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`typ` VARCHAR(16) NOT NULL DEFAULT 'person' COMMENT 'person/fahrzeug',
|
|
`ziel_id` VARCHAR(64) NOT NULL COMMENT 'Charakter-ID oder Kennzeichen',
|
|
`bezeichnung` VARCHAR(160) NOT NULL,
|
|
`grund` VARCHAR(512) NOT NULL,
|
|
`gefahr` VARCHAR(24) NOT NULL DEFAULT 'normal' COMMENT 'normal/bewaffnet/gefaehrlich',
|
|
`prioritaet` TINYINT NOT NULL DEFAULT 3,
|
|
`hinweise` TEXT DEFAULT NULL,
|
|
`bild` LONGTEXT DEFAULT NULL,
|
|
`aktiv` TINYINT(1) NOT NULL DEFAULT 1,
|
|
`erstellt_von` INT UNSIGNED NOT NULL,
|
|
`erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`aufgehoben_von` INT UNSIGNED DEFAULT NULL,
|
|
`aufgehoben_am` DATETIME DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_ziel` (`typ`, `ziel_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Beweise
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_beweis` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`kennung` VARCHAR(32) NOT NULL COMMENT 'Beweismittelnummer',
|
|
`akte` INT UNSIGNED DEFAULT NULL,
|
|
`art` VARCHAR(24) NOT NULL COMMENT 'foto/video/fingerabdruck/dna/huelse/dokument/aussage/gegenstand',
|
|
`bezeichnung` VARCHAR(160) NOT NULL,
|
|
`beschreibung` TEXT DEFAULT NULL,
|
|
`fundort` VARCHAR(160) DEFAULT NULL,
|
|
`gefunden_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`datei` LONGTEXT DEFAULT NULL COMMENT 'Bild-/Video-URL',
|
|
`erfasst_von` INT UNSIGNED NOT NULL,
|
|
`erfasst_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uniq_kennung` (`kennung`),
|
|
KEY `idx_akte` (`akte`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Asservatenkammer
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_asservat` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`kennung` VARCHAR(32) NOT NULL,
|
|
`kategorie` VARCHAR(24) NOT NULL COMMENT 'waffe/drogen/bargeld/schmuck/datentraeger/dokument/sonstiges',
|
|
`bezeichnung` VARCHAR(160) NOT NULL,
|
|
`menge` VARCHAR(48) DEFAULT NULL,
|
|
`lagerort` VARCHAR(64) NOT NULL DEFAULT 'Asservatenkammer A',
|
|
`verantwortlich` INT UNSIGNED NOT NULL,
|
|
`akte` INT UNSIGNED DEFAULT NULL,
|
|
`beweis` INT UNSIGNED DEFAULT NULL,
|
|
`status` VARCHAR(24) NOT NULL DEFAULT 'eingelagert' COMMENT 'eingelagert/ausgegeben/vernichtet/zurueckgegeben',
|
|
`eingelagert_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uniq_kennung` (`kennung`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS `police_asservat_historie` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`asservat` INT UNSIGNED NOT NULL,
|
|
`aktion` VARCHAR(48) NOT NULL,
|
|
`von` INT UNSIGNED NOT NULL,
|
|
`am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`notiz` VARCHAR(255) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_asservat` (`asservat`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Dienstfahrzeuge
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_fahrzeug` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`kennzeichen` VARCHAR(16) NOT NULL,
|
|
`modell` VARCHAR(48) NOT NULL,
|
|
`bezeichnung` VARCHAR(64) NOT NULL,
|
|
`abteilung` VARCHAR(32) NOT NULL DEFAULT 'streife',
|
|
`zugewiesen_an` INT UNSIGNED DEFAULT NULL COMMENT 'Manuell zugewiesen',
|
|
`letzter_fahrer` INT UNSIGNED DEFAULT NULL,
|
|
`tank` FLOAT NOT NULL DEFAULT 100,
|
|
`zustand` FLOAT NOT NULL DEFAULT 1000,
|
|
`wartung` VARCHAR(24) NOT NULL DEFAULT 'ok' COMMENT 'ok/faellig/werkstatt',
|
|
`status` VARCHAR(24) NOT NULL DEFAULT 'verfuegbar',
|
|
`pos_x` FLOAT DEFAULT NULL,
|
|
`pos_y` FLOAT DEFAULT NULL,
|
|
`pos_z` FLOAT DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uniq_kennzeichen` (`kennzeichen`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Berichte
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_bericht` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`nummer` VARCHAR(32) NOT NULL,
|
|
`einsatz` INT UNSIGNED DEFAULT NULL,
|
|
`akte` INT UNSIGNED DEFAULT NULL,
|
|
`titel` VARCHAR(160) NOT NULL,
|
|
`beschreibung` LONGTEXT DEFAULT NULL,
|
|
`massnahmen` LONGTEXT DEFAULT NULL,
|
|
`beteiligte` LONGTEXT DEFAULT NULL COMMENT 'JSON',
|
|
`anlagen` LONGTEXT DEFAULT NULL COMMENT 'JSON',
|
|
`status` VARCHAR(24) 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 unterschrieben',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uniq_nummer` (`nummer`),
|
|
KEY `idx_status` (`status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Interne Kommunikation
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_nachricht` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`absender` INT UNSIGNED NOT NULL,
|
|
`empfaenger` VARCHAR(64) NOT NULL COMMENT 'Charakter-ID, Abteilung oder "alle"',
|
|
`empf_typ` VARCHAR(16) NOT NULL DEFAULT 'person' COMMENT 'person/abteilung/rundmeldung',
|
|
`betreff` VARCHAR(160) DEFAULT NULL,
|
|
`text` TEXT NOT NULL,
|
|
`gelesen` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`gesendet` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_empfaenger` (`empfaenger`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Benachrichtigungen (Hinweise, Erinnerungen, Fristen)
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_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/fahndung/gewahrsam/bericht/akte/beweis/system',
|
|
`prioritaet` VARCHAR(16) NOT NULL DEFAULT 'normal' COMMENT 'niedrig/normal/hoch/kritisch',
|
|
`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;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Protokollierung — wer, wann, was, warum
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_protokoll` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`character` INT UNSIGNED DEFAULT NULL,
|
|
`dienstnummer` 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;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Strafenkatalog — vom Administrator pflegbar
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_katalog` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`kennung` VARCHAR(24) NOT NULL,
|
|
`kategorie` VARCHAR(48) NOT NULL,
|
|
`bezeichnung` VARCHAR(160) NOT NULL,
|
|
`paragraph` VARCHAR(48) DEFAULT NULL COMMENT 'Gesetzliche Grundlage',
|
|
`haft` INT NOT NULL DEFAULT 0 COMMENT 'Empfehlung in Minuten',
|
|
`geld` INT NOT NULL DEFAULT 0 COMMENT 'Empfehlung in Euro',
|
|
`hinweis` VARCHAR(512) 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;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Systemeinstellungen (aktive Module, Vorlagen, Kategorien)
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_einstellung` (
|
|
`schluessel` VARCHAR(64) NOT NULL,
|
|
`wert` LONGTEXT DEFAULT NULL,
|
|
PRIMARY KEY (`schluessel`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Notizen zu einer Person (kurze Vermerke ausserhalb einer Akte)
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_person_notiz` (
|
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`character` INT UNSIGNED NOT NULL COMMENT 'Betroffene Person',
|
|
`text` VARCHAR(1000) NOT NULL,
|
|
`von` INT UNSIGNED NOT NULL COMMENT 'Verfassender Beamter',
|
|
`am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_character` (`character`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Lesestatus einer Nachricht je Empfaenger
|
|
-- Noetig, weil Abteilungs- und Rundmeldungen viele Empfaenger haben.
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_nachricht_gelesen` (
|
|
`nachricht` INT UNSIGNED NOT NULL,
|
|
`character` INT UNSIGNED NOT NULL,
|
|
`gelesen_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`nachricht`, `character`),
|
|
CONSTRAINT `fk_nlesen_nachricht` FOREIGN KEY (`nachricht`)
|
|
REFERENCES `police_nachricht` (`id`) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Aushaenge und Dienstanweisungen
|
|
-- Das System veroeffentlicht nichts von selbst und setzt nichts auf
|
|
-- gelesen — die Kenntnisnahme bestaetigt jeder Beamte eigenhaendig.
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_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',
|
|
`abteilung` VARCHAR(32) DEFAULT NULL COMMENT 'NULL = gesamte Behoerde',
|
|
`angeheftet` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Bleibt oben stehen',
|
|
`kenntnispflicht` TINYINT(1) NOT NULL DEFAULT 0
|
|
COMMENT 'Beamte sollen die Kenntnisnahme bestaetigen',
|
|
`frist` DATETIME DEFAULT NULL
|
|
COMMENT 'Bis wann erinnert das System an die Kenntnisnahme',
|
|
`erstellt_von` INT UNSIGNED NOT NULL,
|
|
`erstellt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
-- Archivierung geschieht ausschliesslich manuell:
|
|
`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;
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Bestaetigte Kenntnisnahmen zu einem Aushang
|
|
-- ---------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS `police_aushang_kenntnis` (
|
|
`aushang` INT UNSIGNED NOT NULL,
|
|
`character` INT UNSIGNED NOT NULL,
|
|
`bestaetigt_am` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`aushang`, `character`),
|
|
CONSTRAINT `fk_kenntnis_aushang` FOREIGN KEY (`aushang`)
|
|
REFERENCES `police_aushang` (`id`) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|