Saltar a contenido

API Inventario - Sage ACICloud

Crear Ajuste de Inventario

Endpoint: POST /api/acicloud/inventory_adjust
Request Class: InventoryadjustImpRequest
Controller: ACIcloudController::inventoryAdjust
Autenticación: Bearer Token requerido
Middleware: check.activate.organization

Campos de Request

Campo Tipo Requerido Descripción Validación Ejemplo
ItemID string ID del producto Máx. 20 characters "PROD001"
Reference string Referencia del ajuste Máx. 20 characters "ADJ-2025-001"
ReasonToAdjust string Razón del ajuste Máx. 35 characters "Inventory recount adjustment"
Account string Cuenta contable Máx. 15 characters "1200"
UnitCost decimal Costo unitario Decimal (4 decimales) 850.0000
Quantity decimal Cantidad a ajustar Decimal (4 decimales) 5.0000
Date string Fecha del ajuste YYYY-MM-DD "2025-01-29"
JobID string ID del trabajo Máx. 50 characters "JOB001"
JobPhaseID string ID de fase del trabajo Máx. 20 characters "PHASE01"
JobCostCodeID string ID código de costo Máx. 20 characters "COST001"

Reglas de Validación Detalladas

ItemID

  • Requerido: Sí
  • Tipo: String
  • Máximo: 20 caracteres
  • Descripción: Debe corresponder a un producto existente en el sistema
  • Ejemplo válido: "PROD001", "LAPTOP-001"

Reference

  • Requerido: Sí
  • Tipo: String
  • Máximo: 20 caracteres
  • Descripción: Número de referencia único para el ajuste
  • Ejemplo válido: "ADJ-2025-001", "INV-ADJ-001"

Quantity

  • Requerido: Sí
  • Tipo: Decimal con hasta 4 decimales
  • Descripción: Cantidad a ajustar (positiva para incrementar, negativa para decrementar)
  • Ejemplo válido: 5.0000 (agregar 5), -3.0000 (quitar 3)

Date

  • Requerido: Sí
  • Formato: YYYY-MM-DD
  • Descripción: Fecha cuando ocurre el ajuste
  • Ejemplo válido: "2025-01-29"

Tipos Comunes de Ajustes

Incremento de Inventario

{
  "ItemID": "PROD001",
  "Reference": "ADJ-INC-001",
  "ReasonToAdjust": "Inventory found during recount",
  "Quantity": 5.0000,
  "Date": "2025-01-29",
  "UnitCost": 850.0000
}

Decremento de Inventario

{
  "ItemID": "PROD001", 
  "Reference": "ADJ-DEC-001",
  "ReasonToAdjust": "Damaged goods write-off",
  "Quantity": -3.0000,
  "Date": "2025-01-29",
  "UnitCost": 850.0000
}

Ejemplo de Request Completo

{
  "ItemID": "LAPTOP001",
  "Reference": "ADJ-2025-001",
  "ReasonToAdjust": "Physical inventory adjustment",
  "Account": "1200",
  "UnitCost": 850.0000,
  "Quantity": 2.0000,
  "Date": "2025-01-29",
  "JobID": "JOB001",
  "JobPhaseID": "PHASE01",
  "JobCostCodeID": "COST001"
}

Ejemplo de Request Mínimo

{
  "ItemID": "PROD002",
  "Reference": "ADJ-MIN-001",
  "Quantity": -1.0000,
  "Date": "2025-01-29"
}

Respuesta de Éxito

{
  "ID": 1,
  "ID_compania": 1,
  "ItemID": "LAPTOP001",
  "Reference": "ADJ-2025-001",
  "ReasonToAdjust": "Physical inventory adjustment",
  "Account": "1200",
  "UnitCost": "850.0000",
  "Quantity": "2.0000",
  "Date": "2025-01-29",
  "JobID": "JOB001",
  "JobPhaseID": "PHASE01", 
  "JobCostCodeID": "COST001",
  "Export_date": null,
  "Enviado": 0,
  "Error": 0,
  "ErrorPT": null,
  "created_at": "2025-01-29T21:30:00.000000Z",
  "updated_at": "2025-01-29T21:30:00.000000Z"
}

Respuestas de Error

Error de Validación

{
  "message": "The given data was invalid.",
  "errors": {
    "ItemID": [
      "The ItemID field is required."
    ],
    "Reference": [
      "The Reference field is required."
    ],
    "Quantity": [
      "The Quantity field is required."
    ],
    "Date": [
      "The Date does not match the format Y-m-d."
    ]
  }
}

Error de Producto No Encontrado

{
  "message": "Product not found",
  "errors": {
    "ItemID": [
      "The specified product does not exist in the system."
    ]
  }
}

Obtener Ajustes de Inventario Importados

Endpoint: GET /api/acicloud/inventory_adjustment_imp
Controller: ACIcloudController::getInventoryAdjustImp
Autenticación: Bearer Token requerido
Middleware: check.activate.organization

Descripción

Obtiene la lista de ajustes de inventario que han sido importados/creados a través de la API.

Parámetros de Query (Opcionales)

Parámetro Tipo Requerido Descripción Ejemplo
item_id string Filtrar por producto "PROD001"
date_from string Fecha desde "2025-01-01"
date_to string Fecha hasta "2025-01-31"
page integer Página 1
per_page integer Registros por página 25

Respuesta de Éxito

{
  "current_page": 1,
  "data": [
    {
      "ID": 1,
      "ItemID": "LAPTOP001",
      "Reference": "ADJ-2025-001",
      "ReasonToAdjust": "Physical inventory adjustment",
      "Quantity": "2.0000",
      "Date": "2025-01-29",
      "import_status": "completed",
      "sage_sync_status": "synced",
      "created_at": "2025-01-29T21:30:00.000000Z",
      "errors": null
    },
    {
      "ID": 2,
      "ItemID": "PROD002",
      "Reference": "ADJ-2025-002", 
      "ReasonToAdjust": "Damaged goods write-off",
      "Quantity": "-1.0000",
      "Date": "2025-01-29",
      "import_status": "pending",
      "sage_sync_status": "pending",
      "created_at": "2025-01-29T21:25:00.000000Z",
      "errors": null
    }
  ],
  "first_page_url": "https://api.docucenter.com/api/acicloud/inventory_adjustment_imp?page=1",
  "from": 1,
  "last_page": 3,
  "last_page_url": "https://api.docucenter.com/api/acicloud/inventory_adjustment_imp?page=3",
  "links": [
    {
      "url": null,
      "label": "« Previous",
      "active": false
    },
    {
      "url": "https://api.docucenter.com/api/acicloud/inventory_adjustment_imp?page=1",
      "label": "1", 
      "active": true
    }
  ],
  "next_page_url": "https://api.docucenter.com/api/acicloud/inventory_adjustment_imp?page=2",
  "path": "https://api.docucenter.com/api/acicloud/inventory_adjustment_imp",
  "per_page": 10,
  "prev_page_url": null,
  "to": 10,
  "total": 25
}

Códigos de Respuesta HTTP

Código Descripción
200 Consulta exitosa
201 Ajuste creado exitosamente
400 Datos de entrada inválidos
401 No autorizado
422 Error de validación
500 Error interno del servidor

Ejemplos de cURL

Crear Ajuste de Inventario (Incremento)

curl -X POST "https://api.docucenter.com/api/acicloud/inventory_adjust" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "ItemID": "PROD001",
    "Reference": "ADJ-INC-001",
    "ReasonToAdjust": "Inventory found during recount",
    "Quantity": 5.0000,
    "Date": "2025-01-29",
    "UnitCost": 850.0000
  }'

Crear Ajuste de Inventario (Decremento)

curl -X POST "https://api.docucenter.com/api/acicloud/inventory_adjust" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "ItemID": "PROD001",
    "Reference": "ADJ-DEC-001", 
    "ReasonToAdjust": "Damaged goods write-off",
    "Quantity": -3.0000,
    "Date": "2025-01-29"
  }'

Obtener Ajustes Importados

curl -X GET "https://api.docucenter.com/api/acicloud/inventory_adjustment_imp?page=1&per_page=25" \
  -H "Authorization: Bearer YOUR_TOKEN"

Notas Técnicas

  • Cantidad Positiva: Incrementa el inventario disponible
  • Cantidad Negativa: Decrementa el inventario disponible
  • Multi-tenant: Todos los endpoints respetan el contexto de organización
  • Sincronización: Los ajustes se sincronizan automáticamente con Sage ACICloud
  • Referencia Única: Cada ajuste debe tener una referencia única para trazabilidad
  • Cuentas Contables: Si se especifica Account, debe ser una cuenta válida en el plan contable

Razones Comunes de Ajuste

  • Physical Count Variance: Diferencias encontradas en conteo físico
  • Damaged Goods: Productos dañados que se dan de baja
  • Theft/Loss: Pérdidas por robo o extravío
  • Expired Products: Productos vencidos
  • Quality Issues: Problemas de calidad
  • System Correction: Correcciones del sistema

Integración con Sage ACICloud

Los ajustes de inventario se procesan automáticamente en Sage ACICloud, actualizando los niveles de inventario y creando los asientos contables correspondientes según la configuración del sistema.