['nullable', 'string', 'max:100'], 'sku' => ['nullable', 'string', 'max:50'], 'category_id' => ['nullable', 'exists:categories,id'], 'stock' => ['nullable', 'integer', 'min:0'], // Campos de Price 'cost' => ['nullable', 'numeric', 'min:0'], 'retail_price' => ['nullable', 'numeric', 'min:0', 'gt:cost'], 'tax' => ['nullable', 'numeric', 'min:0', 'max:100'], ]; } public function messages(): array { return [ // Mensajes de Inventory 'name.string' => 'El nombre debe ser una cadena de texto.', 'name.max' => 'El nombre no debe exceder los 100 caracteres.', 'sku.string' => 'El SKU debe ser una cadena de texto.', 'sku.max' => 'El SKU no debe exceder los 50 caracteres.', 'sku.unique' => 'El SKU ya está en uso.', 'category_id.exists' => 'La categoría seleccionada no es válida.', 'stock.min' => 'El stock no puede ser negativo.', // Mensajes de Price 'cost.numeric' => 'El costo debe ser un número.', 'cost.min' => 'El costo no puede ser negativo.', 'retail_price.numeric' => 'El precio de venta debe ser un número.', 'retail_price.min' => 'El precio de venta no puede ser negativo.', 'retail_price.gt' => 'El precio de venta debe ser mayor que el costo.', 'tax.numeric' => 'El impuesto debe ser un número.', 'tax.min' => 'El impuesto no puede ser negativo.', 'tax.max' => 'El impuesto no puede exceder el 100%.', ]; } }