Skip to content

Eliminar Items

Este endpoint permite eliminar items del sistema de forma permanente.

Endpoint: DELETE /api/v1/items/{code}

Descripción: Elimina un item del sistema de forma permanente.

Accept: application/json
Authorization: Bearer {token}
ParámetroTipoDescripción
codestringCódigo del item a eliminar
Terminal window
curl -X DELETE "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001" \
-H "Accept: application/json" \
-H "Authorization: Bearer your_token_here"
{
"message": "Item eliminado exitosamente",
"status": "OK",
"payload": {
"code": "PROD-001",
"description": "Producto eliminado",
"deleted_at": "2024-01-15T10:30:00Z"
}
}
{
"message": "Item no encontrado",
"status": "NOT_FOUND",
"error": "El item con código 'PROD-999' no existe"
}
{
"message": "No se puede eliminar el item",
"status": "CONFLICT",
"error": "El item está siendo utilizado en documentos existentes",
"details": {
"documents_count": 5,
"last_document": "FAC-001-000123"
}
}

Respuesta de Error (422 Unprocessable Entity)

Section titled “Respuesta de Error (422 Unprocessable Entity)”
{
"message": "No se puede eliminar el item",
"status": "UNPROCESSABLE_ENTITY",
"error": "El item tiene movimientos de inventario registrados",
"details": {
"kardex_movements": 15,
"current_stock": 25
}
}
CódigoDescripción
200Item eliminado exitosamente
401Token de autorización inválido
404Item no encontrado
409Conflicto - Item en uso
422No se puede eliminar - Tiene movimientos
500Error interno del servidor
  1. Items con documentos asociados

    • Facturas emitidas
    • Presupuestos activos
    • Órdenes de trabajo
  2. Items con movimientos de kardex

    • Ingresos de inventario
    • Salidas registradas
    • Ajustes de stock
  3. Items con inventario actual

    • Stock disponible > 0
    • Reservas pendientes

Antes de eliminar un item, el sistema verifica:

  • ✅ El item existe
  • ✅ No tiene documentos asociados
  • ✅ No tiene movimientos de kardex
  • ✅ No tiene stock disponible
  • ✅ No está en uso en plantillas

Para eliminar un item de forma segura, sigue estos pasos:

Terminal window
# Consultar el item para ver su estado
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001" \
-H "Authorization: Bearer $TOKEN"
Terminal window
# Buscar documentos que usen este item
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/documents" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"filters": [
{
"field": "items.code",
"condition": "equals",
"value": "PROD-001"
}
]
}'
Terminal window
# Consultar movimientos de kardex
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex" \
-H "Authorization: Bearer $TOKEN"
Terminal window
# Solo si no hay restricciones
curl -X DELETE "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001" \
-H "Authorization: Bearer $TOKEN"

Si no puedes eliminar un item, considera estas alternativas:

Terminal window
# Cambiar descripción para marcarlo como inactivo
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": "[INACTIVO] Producto descontinuado",
"rate": 0.01,
"unit": "Unidad",
"type": "PRODUCT",
"allow_accounting": 0,
"taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}]
}'
Terminal window
# Reducir stock a 0 si tiene 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 agotado",
"rate": 0.01,
"unit": "Unidad",
"type": "PRODUCT",
"allow_accounting": 1,
"count_available": 0,
"taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}]
}'
use Illuminate\Support\Facades\Http;
function deleteItemSafely($token, $itemCode) {
try {
$response = Http::withHeaders([
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . $token,
])->delete("https://dev-facturacion.e-dinky.test/api/v1/items/{$itemCode}");
if ($response->successful()) {
return [
'success' => true,
'message' => 'Item eliminado exitosamente'
];
}
$error = $response->json();
switch ($response->status()) {
case 404:
return [
'success' => false,
'message' => 'El item no existe'
];
case 409:
return [
'success' => false,
'message' => 'El item está en uso y no se puede eliminar',
'details' => $error['details'] ?? null
];
case 422:
return [
'success' => false,
'message' => 'El item tiene movimientos de inventario',
'details' => $error['details'] ?? null
];
default:
return [
'success' => false,
'message' => 'Error inesperado: ' . $error['message']
];
}
} catch (Exception $e) {
return [
'success' => false,
'message' => 'Error de conexión: ' . $e->getMessage()
];
}
}
const deleteItemSafely = async (token, itemCode) => {
try {
const response = await axios.delete(`https://dev-facturacion.e-dinky.test/api/v1/items/${itemCode}`, {
headers: {
'Accept': 'application/json',
'Authorization': `Bearer ${token}`
}
});
return {
success: true,
message: 'Item eliminado exitosamente',
data: response.data
};
} catch (error) {
const status = error.response?.status;
const data = error.response?.data;
switch (status) {
case 404:
return {
success: false,
message: 'El item no existe'
};
case 409:
return {
success: false,
message: 'El item está en uso y no se puede eliminar',
details: data?.details
};
case 422:
return {
success: false,
message: 'El item tiene movimientos de inventario',
details: data?.details
};
default:
return {
success: false,
message: `Error: ${data?.message || error.message}`
};
}
}
};
  • ⚠️ Eliminación permanente: Esta operación no se puede deshacer
  • 🔒 Validaciones estrictas: El sistema previene eliminaciones que puedan causar inconsistencias
  • 📊 Integridad de datos: Se mantiene la integridad referencial en todo momento
  • 🔄 Alternativas: Considera desactivar en lugar de eliminar si hay dudas
  • 📝 Auditoría: Todas las eliminaciones quedan registradas en los logs del sistema
  1. Siempre verificar el uso del item antes de intentar eliminarlo
  2. Usar eliminación por lotes solo en entornos de desarrollo
  3. Mantener backups antes de eliminaciones masivas
  4. Documentar las razones de eliminación para auditoría
  5. Considerar archivado en lugar de eliminación para items históricos