Actualizar Items
Actualizar Items
Section titled “Actualizar Items”Dominio: https://test-api-factura.edw-dev.com
Dominio: https://api-financiero.e-dinky.com
Este endpoint permite actualizar la información de items existentes en el sistema.
Actualizar Item
Section titled “Actualizar Item”Endpoint: PUT /api/v1/items/update
Descripción: Actualiza la información de un item existente.
Headers Requeridos
Section titled “Headers Requeridos”Accept: application/jsonContent-Type: application/jsonAuthorization: Bearer {token}
Cuerpo de la Solicitud
Section titled “Cuerpo de la Solicitud”Utiliza los mismos campos que en la creación. El item se identifica por el code
.
Campo | Tipo | Requerido | Descripción |
---|---|---|---|
code | string | Sí | Código único del item (identificador) |
description | string | Sí | Descripción del item |
rate | number | Sí | Precio unitario del item |
unit | string | Sí | Unidad de medida |
type | string | No | Tipo de item: PRODUCT o SERVICE |
allow_accounting | integer | No | Permite contabilidad de inventario (0 o 1) |
count_available | integer | No | Cantidad disponible en inventario |
taxes | array | Sí | Array de impuestos aplicables |
taxes[].percentaje | string | Sí | Porcentaje del impuesto |
taxes[].code | string | Sí | Código del tipo de impuesto |
taxes[].percentaje_code | string | Sí | Código del porcentaje específico |
Ejemplos de Solicitud
Section titled “Ejemplos de Solicitud”Actualizar Precio y Descripción
Section titled “Actualizar Precio y Descripción”{ "code": "PROD-001", "description": "Producto actualizado con nueva descripción", "rate": 30.00, "unit": "Unidad", "type": "PRODUCT", "taxes": [ { "percentaje": "15", "code": "2", "percentaje_code": "4" } ]}
Cambiar Tipo de Item
Section titled “Cambiar Tipo de Item”{ "code": "SERV-001", "description": "Servicio de mantenimiento", "rate": 85.00, "unit": "Hora", "type": "SERVICE", "taxes": [ { "percentaje": "15", "code": "2", "percentaje_code": "4" } ]}
Actualizar Inventario
Section titled “Actualizar Inventario”{ "code": "PROD-002", "description": "Producto con inventario actualizado", "rate": 45.75, "unit": "Unidad", "type": "PRODUCT", "allow_accounting": 1, "count_available": 150, "taxes": [ { "percentaje": "15", "code": "2", "percentaje_code": "4" } ]}
Ejemplos de Implementación
Section titled “Ejemplos de Implementación”curl -X PUT "https://dev-facturacion.e-dinky.test/api/v1/items/update" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_token_here" \ -d '{ "code": "PROD-001", "description": "Producto actualizado", "rate": 30.00, "unit": "Unidad", "type": "PRODUCT", "taxes": [ { "percentaje": "15", "code": "2", "percentaje_code": "4" } ] }'
use Illuminate\Support\Facades\Http;
$updateData = [ 'code' => 'PROD-001', 'description' => 'Producto actualizado', 'rate' => 30.00, 'unit' => 'Unidad', 'type' => 'PRODUCT', 'taxes' => [ [ 'percentaje' => '15', 'code' => '2', 'percentaje_code' => '4' ] ]];
$response = Http::withHeaders([ 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json'])->put('https://dev-facturacion.e-dinky.test/api/v1/items/update', $updateData);
$updatedItem = $response->json();
const axios = require('axios');
const updateItem = async (token, updateData) => { try { const response = await axios.put('https://dev-facturacion.e-dinky.test/api/v1/items/update', updateData, { headers: { 'Accept': 'application/json', 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); return response.data; } catch (error) { console.error('Error:', error.response.data); }};
// Usoconst updateData = { code: 'PROD-001', description: 'Producto actualizado', rate: 30.00, unit: 'Unidad', type: 'PRODUCT', taxes: [ { percentaje: '15', code: '2', percentaje_code: '4' } ]};
updateItem(token, updateData);
Respuesta Exitosa (200 OK)
Section titled “Respuesta Exitosa (200 OK)”{ "message": "Item actualizado exitosamente", "status": "OK", "payload": { "code": "PROD-001", "description": "Producto actualizado", "rate": 30.0, "unit": "Unidad", "type": "PRODUCT", "allow_accounting": 1, "count_available": 25, "taxes": [ { "type_name": "IVA", "name": "15%", "percentaje_tax": "15.00", "type_tax_code": "2", "tax_code": "4" } ] }}
Respuesta de Error (404 Not Found)
Section titled “Respuesta de Error (404 Not Found)”{ "message": "Item no encontrado", "status": "NOT_FOUND", "error": "El item con código 'PROD-999' no existe"}
Respuesta de Error (422 Unprocessable Entity)
Section titled “Respuesta de Error (422 Unprocessable Entity)”{ "message": "Error de validación", "status": "UNPROCESSABLE_ENTITY", "errors": { "rate": [ "El precio debe ser mayor a 0" ], "taxes": [ "Debe incluir al menos un impuesto" ] }}
Códigos de Respuesta
Section titled “Códigos de Respuesta”Código | Descripción |
---|---|
200 | Item actualizado exitosamente |
400 | Error en los datos enviados |
401 | Token de autorización inválido |
404 | Item no encontrado |
422 | Error de validación |
500 | Error interno del servidor |
Validaciones
Section titled “Validaciones”Campos Obligatorios
Section titled “Campos Obligatorios”code
: Debe existir en el sistemadescription
: No puede estar vacíorate
: Debe ser un número positivounit
: No puede estar vacíotaxes
: Debe contener al menos un impuesto
Reglas de Negocio
Section titled “Reglas de Negocio”- El código del item debe existir en el sistema
- Los códigos de impuestos deben existir en el sistema LOVs
- Si se cambia
type
aSERVICE
, se debe establecerallow_accounting = 0
- Si
allow_accounting = 0
, el campocount_available
se ignora
Restricciones Importantes
Section titled “Restricciones Importantes”Código del Item
Section titled “Código del Item”- No se puede modificar: El campo
code
sirve como identificador y no puede ser cambiado - Debe existir: El item debe estar registrado previamente en el sistema
Cambios de Tipo
Section titled “Cambios de Tipo”- PRODUCT → SERVICE: Permitido, pero se deshabilitará el control de inventario
- SERVICE → PRODUCT: Permitido, se puede habilitar control de inventario
Control de Inventario
Section titled “Control de Inventario”- Deshabilitar inventario: Cambiar
allow_accounting
de 1 a 0 mantendrá el stock actual pero no permitirá nuevos movimientos - Habilitar inventario: Cambiar
allow_accounting
de 0 a 1 iniciará el control con el stock especificado encount_available
Ejemplos de Casos de Uso
Section titled “Ejemplos de Casos de Uso”Actualizar Solo el Precio
Section titled “Actualizar Solo el Precio”curl -X PUT "https://dev-facturacion.e-dinky.test/api/v1/items/update" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "code": "PROD-001", "description": "Producto existente", "rate": 35.99, "unit": "Unidad", "type": "PRODUCT", "taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}] }'
Convertir Producto en Servicio
Section titled “Convertir Producto en Servicio”curl -X PUT "https://dev-facturacion.e-dinky.test/api/v1/items/update" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "code": "PROD-001", "description": "Servicio de instalación", "rate": 50.00, "unit": "Hora", "type": "SERVICE", "allow_accounting": 0, "taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}] }'
Ajustar Inventario
Section titled “Ajustar Inventario”curl -X PUT "https://dev-facturacion.e-dinky.test/api/v1/items/update" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "code": "PROD-001", "description": "Producto con inventario ajustado", "rate": 25.50, "unit": "Unidad", "type": "PRODUCT", "allow_accounting": 1, "count_available": 200, "taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}] }'
- Historial: Las actualizaciones no afectan el historial de kardex existente
- Facturas: Los cambios no afectan facturas ya emitidas
- Validación: Todos los campos son validados antes de la actualización
- Transaccional: La operación es atómica, si falla alguna validación no se realizan cambios