CREATE TABLE `rdMPGGeraet` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `OrganisationID` smallint(5) unsigned NOT NULL,
  `BezeichnungID` mediumint(8) unsigned NOT NULL,
  `Lieferant` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `inventar` varchar(20) NOT NULL DEFAULT '',
  `Investitionsnummer` varchar(20) NOT NULL DEFAULT '',
  `Seriennummer` text NOT NULL,
  `Zulassung` tinytext NOT NULL DEFAULT '',
  `Baujahr` smallint(4) unsigned NOT NULL DEFAULT 0,
  `Anschaffungsdatum` date DEFAULT NULL,
  `Garantie` date DEFAULT NULL,
  `Abschreibung` date DEFAULT NULL,
  `MHD` date DEFAULT NULL,
  `kosten` float unsigned NOT NULL DEFAULT 0,
  `Zuweisungsart` enum('KFZ','Funkrufname','Dienststelle','Ersatz') NOT NULL,
  `StammFunkrufID` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `Funkruf` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `StammFesteinbauFID` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `FesteinbauFID` mediumint(8) unsigned NOT NULL DEFAULT 0 COMMENT 'FahrzeugID des Festeinbaus',
  `stammWerkstatt` mediumint(8) unsigned NOT NULL DEFAULT 0 COMMENT 'Stammdienststelle',
  `werkstatt` mediumint(8) unsigned NOT NULL DEFAULT 0 COMMENT 'aktuelle Dienststelle',
  `wartungsWerkstatt` mediumint(8) unsigned NOT NULL DEFAULT 0 COMMENT 'Werkstattstandort',
  `Anleitung` tinytext NOT NULL,
  `Software` varchar(25) NOT NULL DEFAULT '',
  `Status` enum('in Betrieb','Außer Betrieb','Verkauft','Verlust','Vernichtet') NOT NULL DEFAULT 'in Betrieb',
  `initialeFkt` mediumint(8) unsigned NOT NULL DEFAULT 0 COMMENT 'Funktionsprüfung durch (Hersteller)',
  `initialeFktDatum` date NOT NULL,
  `STK` enum('','1','2','3','4','6','12','24','36','48','60','72','84','96','108','120','216') NOT NULL DEFAULT '',
  `MTK` enum('','1','2','3','4','6','12','24','36','48','60','72','84','96','108','120','216') NOT NULL DEFAULT '',
  `check` enum('','1','2','3','4','6','12','24','36','48','60','72','84','96','108','120','216') NOT NULL DEFAULT '',
  `Wartung` enum('','1','2','3','4','6','12','24','36','48','60','72','84','96','108','120','216') NOT NULL DEFAULT '',
  `checkID` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `Bemerkung` text NOT NULL DEFAULT '',
  `ClusterID` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `Komponenten` tinytext NOT NULL DEFAULT '',
  `del` date DEFAULT NULL,
  `delID` int(10) unsigned NOT NULL DEFAULT 0,
  `Ersatz` enum('nein','ja') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci GENERATED ALWAYS AS (if(`Zuweisungsart` = 'Ersatz','ja','nein')) VIRTUAL COMMENT 'löschen, wenn Queries auf Zuweisungsart umgestellt',
  `stateChanged` date NOT NULL DEFAULT curdate(),
  `verschoben` tinyint(1) unsigned GENERATED ALWAYS AS (`Zuweisungsart` = 'KFZ' and `StammFesteinbauFID` <> `FesteinbauFID` or `Zuweisungsart` = 'Funkrufname' and `Funkruf` <> `StammFunkrufID` or `Zuweisungsart` = 'Dienststelle' and `stammWerkstatt` <> `werkstatt` or `Zuweisungsart` = 'Ersatz' and (`FesteinbauFID` + `Funkruf` > 0 or `stammWerkstatt` <> `werkstatt`)) STORED,
  `isDel` tinyint(1) unsigned GENERATED ALWAYS AS (`del` is not null) STORED,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `OrganisationID_inventar` (`OrganisationID`,`inventar`),
  KEY `Funkruf` (`Funkruf`,`werkstatt`),
  KEY `FesteinbauFID` (`FesteinbauFID`,`werkstatt`),
  KEY `werkstatt_Status_OrganisationID` (`werkstatt`,`Status`,`OrganisationID`),
  KEY `OrganisationID_Status_verschoben` (`OrganisationID`,`Status`,`verschoben`),
  KEY `OrganisationID_isDel_Status` (`OrganisationID`,`isDel`,`Status`),
  KEY `Zuweisungsart_OrganisationID` (`Zuweisungsart`,`OrganisationID`),
  KEY `BezeichnungID` (`BezeichnungID`),
  KEY `ClusterID` (`ClusterID`),
  CONSTRAINT `typeKFZ` CHECK (`isDel` = 1 or `Zuweisungsart` <> 'KFZ' or `StammFesteinbauFID` > 0 and (`werkstatt` > 0 or `FesteinbauFID` > 0)),
  CONSTRAINT `typeFunkruf` CHECK (`isDel` = 1 or `Zuweisungsart` <> 'Funkrufname' or `StammFunkrufID` > 0 and (`werkstatt` > 0 or `Funkruf` > 0)),
  CONSTRAINT `typeDienststelle` CHECK (`isDel` = 1 or `Zuweisungsart` <> 'Dienststelle' or `stammWerkstatt` > 0 and `werkstatt` > 0),
  CONSTRAINT `typeErsatz` CHECK (`isDel` = 1 or `Zuweisungsart` <> 'Ersatz' or `stammWerkstatt` > 0 and (`Funkruf` > 0) + (`FesteinbauFID` > 0) + (`werkstatt` > 0) = 1)
) ENGINE=Aria 


CREATE TABLE `rdMPGBezeichnung` (
  `ID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `OrganisationID` smallint(5) unsigned NOT NULL,
  `Hersteller` mediumint(8) unsigned NOT NULL,
  `GeraeteTyp` mediumint(8) unsigned NOT NULL,
  `Name` varchar(100) NOT NULL,
  `UMDNS` smallint(8) unsigned NOT NULL DEFAULT 0,
  `CE` varchar(30) NOT NULL DEFAULT '',
  `Einweisung` enum('nein','einweisungspflichtig','unterweisungspflichtig') NOT NULL DEFAULT 'nein',
  `WiederholungsEinweisung` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'in Jahren',
  `DeactivateWarnMails` date DEFAULT NULL,
  `Klasse` enum('keine Klasse','Klasse I','Klasse II a','Klasse II b','Klasse III','Gruppe 1','Gruppe 3','Gruppe 4') NOT NULL DEFAULT 'keine Klasse',
  `Betriebsart` enum('aktiv','nicht aktiv') NOT NULL DEFAULT 'nicht aktiv',
  `deletedDate` date NOT NULL DEFAULT '1000-01-01',
  `deletedUid` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `isDel` tinyint(3) unsigned GENERATED ALWAYS AS (`deletedDate` > '1000-01-01') STORED,
  `Kommunikation` set('Bluetooth','ZigBee','WLAN','GSM') NOT NULL DEFAULT '',
  PRIMARY KEY (`ID`),
  UNIQUE KEY `Hersteller_GeraeteTyp_Name_deletedDate` (`Hersteller`,`GeraeteTyp`,`Name`,`deletedDate`),
  KEY `OrganisationID_Einweisung` (`OrganisationID`,`Einweisung`),
  KEY `GeraeteTyp` (`GeraeteTyp`)
) ENGINE=Aria

CREATE TABLE `rdMPGGeraeteTyp` (
  `ID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `OrganisationID` smallint(5) unsigned NOT NULL,
  `Name` varchar(200) NOT NULL,
  `deletedDate` date NOT NULL DEFAULT '1000-01-01',
  `deletedUid` mediumint(8) unsigned NOT NULL DEFAULT 0,
  `isDel` tinyint(3) unsigned GENERATED ALWAYS AS (`deletedDate` > '1000-01-01') STORED,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `OrganisationID_Name_deletedDate` (`OrganisationID`,`Name`,`deletedDate`)
) ENGINE=Aria

CREATE TABLE `rdMPGAdresse` (
  `ID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `OrganisationID` smallint(5) unsigned NOT NULL,
  `Name` varchar(50) NOT NULL,
  `rolle` set('Ausbauer','Eigentümer','Hersteller','Leasinggesellschaft','Lieferant','MP-Beauftragter','Beauftragter für Medizinproduktesicherheit','Prüfstelle-KFZ','Versicherer','Werkstatt','Fachkraft für Arbeitssicherheit') NOT NULL,
  `Kundennummer` varchar(20) NOT NULL,
  `Strasse` varchar(50) NOT NULL,
  `PLZ` varchar(10) NOT NULL,
  `Ort` varchar(30) NOT NULL,
  `Land` enum('Belgien','Bosnien und Herzegowina','Dänemark','Deutschland','Frankreich','Griechenland','Großbritannien','Irland','Italien','Kroatien','Liechtenstein','Luxemburg','Niederlande','Norwegen','Österreich','Polen','Rumänien','Schweden','Schweiz','Serbien','Slowakei','Slowenien','Spanien','Tschechien','Ungarn','USA') NOT NULL DEFAULT 'Deutschland',
  `Tel` varchar(30) NOT NULL,
  `Fax` varchar(30) NOT NULL,
  `mobil` varchar(30) NOT NULL,
  `Ansprechpartner` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `bestellMail` varchar(255) NOT NULL,
  `autoCommit` enum('nein','nur ausgewählte Dienststellen','immer') NOT NULL DEFAULT 'nein',
  `Homepage` varchar(255) NOT NULL,
  `lieferantenbewertung` enum('nein','ja') NOT NULL,
  `showTool` set('Shop','MP','KFZ','Funk','EDV') NOT NULL,
  `Bemerkung` text NOT NULL DEFAULT '',
  `Mod_Date` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`ID`),
  KEY `OrganisationID` (`OrganisationID`,`rolle`,`showTool`) USING BTREE
) ENGINE=Aria
