Endpoints / Productos

PATCH

Actualizar producto

Actualiza parcialmente los datos editables de un producto, incluyendo sus relaciones, precios, inventario, imagen y estado, dentro de la empresa del usuario autenticado.

PATCH/products/:id

Caso de Uso

Se usa cuando la aplicación necesita modificar cualquiera de los datos de un producto existente: cambiar su categoría, marca, proveedor o medida, corregir código o nombre, ajustar precios, modificar niveles de stock, actualizar la imagen o cambiar el estado. Al usarlo, el usuario obtiene los datos completos del producto actualizado con sus relaciones resueltas.

Autenticación

Requiere token JWT en el header `Authorization: Bearer <token>`. Permite acceso a usuarios con rol jefe o empleado. La empresa y el usuario autenticado deben estar activos.

Parámetros de ruta

idstringobligatorio

Identificador del producto.

Body

prdtoctgriaidstring opcional

Nuevo identificador de la categoría del producto.

prdtomrcidstring opcional

Nuevo identificador de la marca del producto.

prdtoprovidstring opcional

Nuevo identificador del proveedor del producto.

prdtomdiaidstring opcional

Nuevo identificador de la medida del producto.

prdtocodigostring opcional

Nuevo código del producto; debe ser único dentro de la empresa.

prdtonombrestring opcional

Nuevo nombre del producto; debe ser único dentro de la empresa.

prdtopreciocompranumber opcional

Nuevo precio de compra del producto.

prdtoprecioventanumber opcional

Nuevo precio de venta del producto.

prdtostockminimonumber opcional

Nuevo nivel mínimo de stock.

prdtostockmaximonumber opcional

Nuevo nivel máximo de stock.

prdtoestadostring opcional

Nuevo estado del producto; acepta activo, inactivo o eliminado.

imagenfile opcional

Nueva imagen del producto; solo se aceptan .png o .jpg de hasta 5 MB.

Reglas de negocio

1

Solo un usuario con rol jefe o empleado puede actualizar productos.

2

Solo permite actualizar productos de la empresa del usuario autenticado.

3

La empresa del usuario autenticado debe estar activa.

4

El usuario autenticado debe estar activo.

5

El producto debe existir dentro de la empresa autenticada.

6

Un producto con estado eliminado no puede actualizarse.

7

Debe enviarse al menos un campo editable con un valor diferente al actual.

8

Si se envían prdtoctgriaid, prdtomrcid, prdtoprovid o prdtomdiaid, deben corresponder a entidades existentes dentro de la misma empresa.

9

Si se envía prdtocodigo, no puede estar vacío ni repetirse.

10

Si se envía prdtonombre, no puede estar vacío ni repetirse.

11

Si se envían campos numéricos, deben ser valores válidos.

12

Si se envía prdtoestado, solo puede ser activo, inactivo o eliminado.

13

Si se envía imagen, solo se aceptan archivos .png y .jpg de hasta 5 MB.

14

La respuesta incluye las relaciones resueltas como objetos anidados.

Errores esperados

401No autorizado

No se envió un token JWT válido o el token no contiene información válida del usuario.

400El id de producto es requerido

No se envió el parámetro id en la ruta.

404Producto no encontrado

El producto no existe dentro de la empresa del usuario autenticado o la actualización no devolvió resultados.

500El id de categoría de producto es requerido

prdtoctgriaid fue enviado vacío.

500El id de marca de producto es requerido

prdtomrcid fue enviado vacío.

500El id de proveedor de producto es requerido

prdtoprovid fue enviado vacío.

500El id de medida de producto es requerido

prdtomdiaid fue enviado vacío.

500El código de producto es requerido

prdtocodigo fue enviado vacío.

500El nombre de producto es requerido

prdtonombre fue enviado vacío.

500El estado de producto es requerido

prdtoestado fue enviado vacío.

500El estado de producto debe ser activo, inactivo o eliminado

prdtoestado tiene un valor no permitido.

500El número es requerido

Uno de los campos numéricos fue enviado vacío.

500El valor debe ser un número válido

Uno de los campos numéricos no es un número válido.

500El tamaño de la imagen excede el límite permitido

La imagen enviada supera los 5 MB.

500Solo se permiten imágenes PNG y JPG

La imagen enviada no tiene extensión .png o .jpg.

500Error al guardar la imagen

Ocurrió un error interno al guardar la imagen en el servidor.

500El producto eliminado no puede ser actualizado

El producto existe, pero está en estado eliminado.

500La categoría de producto no existe

El prdtoctgriaid enviado no corresponde a una categoría existente.

500La marca de producto no existe

El prdtomrcid enviado no corresponde a una marca existente.

500El proveedor de producto no existe

El prdtoprovid enviado no corresponde a un proveedor existente.

500La medida de producto no existe

El prdtomdiaid enviado no corresponde a una medida existente.

500Ya existe un producto con ese código

Otro producto de la misma empresa ya usa el prdtocodigo enviado.

500Ya existe un producto con ese nombre

Otro producto de la misma empresa ya usa el prdtonombre enviado.

500Al menos un campo es requerido para actualizar el producto

No se envió ningún campo editable o todos los valores enviados son iguales a los actuales.

500La empresa no existe

La empresa asociada al usuario autenticado no fue encontrada.

500La empresa no está activa

La empresa asociada al usuario autenticado está inactiva.

500El usuario no existe

El usuario autenticado no fue encontrado dentro de su empresa.

500El usuario no pertenece a la empresa

El usuario autenticado no pertenece a la empresa indicada por su sesión.

500El usuario no puede acceder a otra empresa

El usuario autenticado intentó acceder a una empresa distinta a la suya.

500El usuario no es jefe, empleado o administrador

El rol del usuario no está permitido para acceder al módulo de productos.

500El usuario no es jefe o empleado

El usuario autenticado no tiene un rol permitido para actualizar productos.

500El usuario no está activo

El usuario autenticado está inactivo y no puede usar el sistema.

Notas de uso

1

Este endpoint no recibe query params.

2

Envía solo los campos que deseas actualizar.

3

Si no se envía imagen, usa Content-Type: application/json.

4

Si se envía imagen, usa Content-Type: multipart/form-data con el archivo en el campo imagen.

5

prdtoestado permite el valor eliminado para eliminación lógica del producto.

6

La respuesta ya incluye las relaciones anidadas listas para usar en la interfaz.