'required|integer|exists:vehicle,id', 'tag_id' => 'required|integer|exists:tags,id', 'cancellation_reason' => 'required|in:fallo_lectura_handheld,cambio_parabrisas,roto_al_pegarlo,extravio,otro', 'cancellation_observations' => 'nullable|string|max:1000', ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'vehicle_id.required' => 'El id del vehículo es obligatorio.', 'vehicle_id.integer' => 'El id del vehículo debe ser un número entero.', 'vehicle_id.exists' => 'El vehículo especificado no existe.', 'tag_id.required' => 'El id del tag es obligatorio.', 'tag_id.integer' => 'El id del tag debe ser un número entero.', 'tag_id.exists' => 'El tag especificado no existe.', 'cancellation_reason.required' => 'El motivo de cancelación es obligatorio.', 'cancellation_reason.in' => 'El motivo de cancelación no es válido. Opciones: fallo_lectura_handheld, cambio_parabrisas, roto_al_pegarlo, extravio, otro.', 'cancellation_observations.string' => 'Las observaciones deben ser texto.', 'cancellation_observations.max' => 'Las observaciones no pueden exceder 1000 caracteres.', ]; } /** * Get custom attributes for validator errors. */ public function attributes(): array { return [ 'vehicle_id' => 'id del vehículo', 'tag_id' => 'id del tag', 'cancellation_reason' => 'motivo de cancelación', 'cancellation_observations' => 'observaciones', ]; } }