Rollback - PDF Import funzt so semi

Dieser Commit ist enthalten in:
Claude Project Manager
2025-09-23 22:40:37 +02:00
Ursprung 26f95d2e4a
Commit 2cabd4c0c6
27 geänderte Dateien mit 4455 neuen und 41 gelöschten Zeilen

Datei anzeigen

@ -376,6 +376,119 @@ export function initializeDatabase() {
)
`)
// Organizational Structure Tables
db.exec(`
CREATE TABLE IF NOT EXISTS organizational_units (
id TEXT PRIMARY KEY,
code TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
type TEXT NOT NULL CHECK(type IN ('direktion', 'abteilung', 'dezernat', 'sachgebiet', 'teildezernat', 'fuehrungsstelle', 'stabsstelle', 'sondereinheit')),
level INTEGER NOT NULL,
parent_id TEXT,
position_x INTEGER,
position_y INTEGER,
color TEXT,
order_index INTEGER DEFAULT 0,
description TEXT,
has_fuehrungsstelle INTEGER DEFAULT 0,
fuehrungsstelle_name TEXT,
is_active INTEGER DEFAULT 1,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY (parent_id) REFERENCES organizational_units(id)
);
CREATE INDEX IF NOT EXISTS idx_org_units_parent ON organizational_units(parent_id);
CREATE INDEX IF NOT EXISTS idx_org_units_type ON organizational_units(type);
CREATE INDEX IF NOT EXISTS idx_org_units_level ON organizational_units(level);
`)
// Employee Unit Assignments
db.exec(`
CREATE TABLE IF NOT EXISTS employee_unit_assignments (
id TEXT PRIMARY KEY,
employee_id TEXT NOT NULL,
unit_id TEXT NOT NULL,
role TEXT NOT NULL CHECK(role IN ('leiter', 'stellvertreter', 'mitarbeiter', 'beauftragter')),
start_date TEXT NOT NULL,
end_date TEXT,
is_primary INTEGER DEFAULT 1,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE,
FOREIGN KEY (unit_id) REFERENCES organizational_units(id) ON DELETE CASCADE,
UNIQUE(employee_id, unit_id, role)
);
CREATE INDEX IF NOT EXISTS idx_emp_units_employee ON employee_unit_assignments(employee_id);
CREATE INDEX IF NOT EXISTS idx_emp_units_unit ON employee_unit_assignments(unit_id);
`)
// Special Positions (Personalrat, Beauftragte, etc.)
db.exec(`
CREATE TABLE IF NOT EXISTS special_positions (
id TEXT PRIMARY KEY,
employee_id TEXT NOT NULL,
position_type TEXT NOT NULL CHECK(position_type IN ('personalrat', 'schwerbehindertenvertretung', 'datenschutzbeauftragter', 'gleichstellungsbeauftragter', 'inklusionsbeauftragter', 'informationssicherheitsbeauftragter', 'geheimschutzbeauftragter', 'extremismusbeauftragter')),
unit_id TEXT,
start_date TEXT NOT NULL,
end_date TEXT,
is_active INTEGER DEFAULT 1,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE,
FOREIGN KEY (unit_id) REFERENCES organizational_units(id)
);
CREATE INDEX IF NOT EXISTS idx_special_pos_employee ON special_positions(employee_id);
CREATE INDEX IF NOT EXISTS idx_special_pos_type ON special_positions(position_type);
`)
// Deputy Assignments (Vertretungen)
db.exec(`
CREATE TABLE IF NOT EXISTS deputy_assignments (
id TEXT PRIMARY KEY,
principal_id TEXT NOT NULL,
deputy_id TEXT NOT NULL,
unit_id TEXT,
valid_from TEXT NOT NULL,
valid_until TEXT NOT NULL,
reason TEXT,
can_delegate INTEGER DEFAULT 1,
created_by TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY (principal_id) REFERENCES employees(id),
FOREIGN KEY (deputy_id) REFERENCES employees(id),
FOREIGN KEY (unit_id) REFERENCES organizational_units(id),
FOREIGN KEY (created_by) REFERENCES users(id)
);
CREATE INDEX IF NOT EXISTS idx_deputy_principal ON deputy_assignments(principal_id);
CREATE INDEX IF NOT EXISTS idx_deputy_deputy ON deputy_assignments(deputy_id);
CREATE INDEX IF NOT EXISTS idx_deputy_dates ON deputy_assignments(valid_from, valid_until);
`)
// Deputy Delegations (Vertretungs-Weitergaben)
db.exec(`
CREATE TABLE IF NOT EXISTS deputy_delegations (
id TEXT PRIMARY KEY,
original_assignment_id TEXT NOT NULL,
from_deputy_id TEXT NOT NULL,
to_deputy_id TEXT NOT NULL,
reason TEXT,
delegated_at TEXT NOT NULL,
created_at TEXT NOT NULL,
FOREIGN KEY (original_assignment_id) REFERENCES deputy_assignments(id),
FOREIGN KEY (from_deputy_id) REFERENCES employees(id),
FOREIGN KEY (to_deputy_id) REFERENCES employees(id)
);
CREATE INDEX IF NOT EXISTS idx_delegation_assignment ON deputy_delegations(original_assignment_id);
CREATE INDEX IF NOT EXISTS idx_delegation_from ON deputy_delegations(from_deputy_id);
CREATE INDEX IF NOT EXISTS idx_delegation_to ON deputy_delegations(to_deputy_id);
`)
// Audit Log für Änderungsverfolgung
db.exec(`
CREATE TABLE IF NOT EXISTS audit_log (