27 lines
1.2 KiB
TypeScript
27 lines
1.2 KiB
TypeScript
export const INCIDENT_TYPES = ['injury', 'near_miss', 'hazard', 'asset_damage', 'environmental', 'security', 'fire'] as const
|
|
export const MEDICAL_STATUSES = ['none', 'first_aid', 'medical_treatment', 'lti'] as const
|
|
|
|
export type IncidentType = typeof INCIDENT_TYPES[number]
|
|
export type MedicalStatus = typeof MEDICAL_STATUSES[number]
|
|
|
|
export interface IncidentInput {
|
|
zone_token: string
|
|
incident_type: IncidentType
|
|
description: string
|
|
injury_involved: boolean
|
|
medical_status?: MedicalStatus
|
|
asset_involved: boolean
|
|
}
|
|
|
|
export function validateIncidentInput(input: IncidentInput): { ok: boolean; errors: string[] } {
|
|
const errors: string[] = []
|
|
|
|
if (!input.zone_token?.trim()) errors.push('zone_token is required')
|
|
if (input.description.trim().length < 10) errors.push('description must be at least 10 characters')
|
|
if (!INCIDENT_TYPES.includes(input.incident_type)) errors.push('incident_type is invalid')
|
|
if (input.injury_involved && !input.medical_status) errors.push('medical_status is required when injury is involved')
|
|
if (input.medical_status && !MEDICAL_STATUSES.includes(input.medical_status)) errors.push('medical_status is invalid')
|
|
|
|
return { ok: errors.length === 0, errors }
|
|
}
|