first commit

This commit is contained in:
2026-07-16 09:35:32 +02:00
commit dd0746e2e6
179 changed files with 25679 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
import { z } from 'zod';
import { citizenId, isoDate, coordsSchema } from './common';
import { DEPARTMENTS } from '../rbac';
export const dispatchStatus = z.enum(['pending', 'assigned', 'enroute', 'onscene', 'closed']);
export type DispatchStatus = z.infer<typeof dispatchStatus>;
export const dispatchPriority = z.enum(['low', 'medium', 'high']);
export type DispatchPriority = z.infer<typeof dispatchPriority>;
/** Live-Einsatz (Tabelle mdt_dispatch_calls + Realtime via Socket). */
export const dispatchCallSchema = z.object({
id: z.number().int(),
code: z.string(), // 10-Code / Kategorie
title: z.string(),
description: z.string().default(''),
department: z.enum(DEPARTMENTS),
priority: dispatchPriority.default('medium'),
status: dispatchStatus.default('pending'),
location: z.string().nullable(),
coords: coordsSchema.nullable(),
callerCitizenid: citizenId.nullable(),
assignedOfficers: z.array(citizenId).default([]),
createdAt: isoDate,
updatedAt: isoDate.nullable(),
});
export type DispatchCall = z.infer<typeof dispatchCallSchema>;
export const createDispatchCallSchema = z.object({
code: z.string().min(1),
title: z.string().min(1),
description: z.string().default(''),
department: z.enum(DEPARTMENTS).default('police'),
priority: dispatchPriority.default('medium'),
location: z.string().nullable().default(null),
coords: coordsSchema.nullable().default(null),
callerCitizenid: citizenId.nullable().default(null),
});
export type CreateDispatchCallInput = z.infer<typeof createDispatchCallSchema>;
export const assignDispatchSchema = z.object({
officers: z.array(citizenId).min(1),
status: dispatchStatus.optional(),
});
export type AssignDispatchInput = z.infer<typeof assignDispatchSchema>;