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; export const dispatchPriority = z.enum(['low', 'medium', 'high']); export type DispatchPriority = z.infer; /** 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; 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; export const assignDispatchSchema = z.object({ officers: z.array(citizenId).min(1), status: dispatchStatus.optional(), }); export type AssignDispatchInput = z.infer;