API Pagos y Créditos - Sage ACICloud
Obtener Estado de Órdenes de Venta
Endpoint: GET /api/acicloud/sales_order_status/{salesOrderNumber}
Controller: ACIcloudController::salesOrderStatus
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Parámetros de URL
| Parámetro | Tipo | Requerido | Descripción | Ejemplo |
|---|---|---|---|---|
salesOrderNumber |
string | ✅ | Número de orden de venta | "SO-2025-001" |
Respuesta de Éxito
{
"success": true,
"data": {
"sales_order_number": "SO-2025-001",
"status": "partially_shipped",
"customer": {
"id": "CUST001",
"name": "ABC Corporation S.A.",
"ruc": "12345678-1-123456"
},
"order_date": "2025-01-15",
"requested_date": "2025-01-25",
"promised_date": "2025-01-22",
"total_amount": 2500.00,
"shipped_amount": 1500.00,
"remaining_amount": 1000.00,
"payment_status": "pending",
"shipping_info": {
"total_quantity": 10,
"shipped_quantity": 6,
"remaining_quantity": 4,
"shipments": [
{
"shipment_number": "SHIP-001",
"date": "2025-01-20",
"quantity": 6,
"amount": 1500.00,
"tracking_number": "TRK123456789"
}
]
},
"items_status": [
{
"line_number": 1,
"product_code": "PROD001",
"description": "Laptop Dell Inspiron 15",
"ordered_quantity": 5,
"shipped_quantity": 3,
"remaining_quantity": 2,
"unit_price": 1200.00,
"line_status": "partially_shipped"
},
{
"line_number": 2,
"product_code": "PROD002",
"description": "Mouse Inalámbrico",
"ordered_quantity": 5,
"shipped_quantity": 3,
"remaining_quantity": 2,
"unit_price": 25.00,
"line_status": "partially_shipped"
}
]
}
}
Estados Posibles
pending- Pendienteconfirmed- Confirmadain_production- En producciónready_to_ship- Lista para envíopartially_shipped- Parcialmente enviadashipped- Enviadadelivered- Entregadacompleted- Completadacancelled- Cancelada
Crear Orden de Venta
Endpoint: POST /api/acicloud/sales_order
Request Class: SalesOrderRequest
Controller: ACIcloudController::salesOrder
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Campos de Request (Header)
| Campo | Tipo | Requerido | Descripción | Validación | Ejemplo |
|---|---|---|---|---|---|
SalesOrderNumber |
string | ✅ | Número único de orden | Único, máx. 20 chars | "SO-2025-001" |
CustomerID |
string | ✅ | ID del cliente | Máx. 50 characters | "CUST001" |
CustomerPO |
string | ❌ | Orden de compra del cliente | Máx. 50 characters | "PO-ABC-2025-001" |
CustomerName |
string | ✅ | Nombre del cliente | Máx. 39 characters | "ABC Corporation S.A." |
Subtotal |
decimal | ✅ | Subtotal de la orden | Decimal (4 decimales) | 2500.0000 |
TaxID |
string | ✅ | ID del impuesto | Máx. 8 characters | "TAX001" |
OrderTax |
decimal | ✅ | Impuesto de la orden | Decimal (4 decimales) | 175.0000 |
NetDue |
decimal | ✅ | Total neto | Decimal (4 decimales) | 2675.0000 |
ARAccount |
string | ❌ | Cuenta contable AR | Máx. 15 characters | "1200" |
ShipToName |
string | ✅ | Nombre para envío | Máx. 100 characters | "ABC Corp Warehouse" |
ShipToAddressLine1 |
string | ❌ | Dirección línea 1 | - | "Calle 50, Torre Global" |
ShipToAddressLine2 |
string | ❌ | Dirección línea 2 | - | "Piso 15" |
ShipToCity |
string | ❌ | Ciudad de envío | - | "Ciudad de Panamá" |
ShipToState |
string | ❌ | Estado/Provincia | Máx. 2 characters | "PA" |
ShipToZip |
string | ❌ | Código postal | Máx. 12 characters | "0833" |
ShipToCountry |
string | ❌ | País de envío | - | "Panamá" |
SalesRepID |
string | ❌ | ID representante de ventas | Máx. 20 characters | "REP001" |
Campos de Request (Items)
| Campo | Tipo | Requerido | Descripción | Validación | Ejemplo |
|---|---|---|---|---|---|
Items[].SalesOrderNumber |
string | ✅ | Número de orden (debe coincidir) | Máx. 20 characters | "SO-2025-001" |
Items[].Taxable |
integer | ✅ | Si aplica impuesto | 1 o 2 | 1 |
Items[].ItemOrd |
string | ❌ | Orden del item | Máx. 20 characters | "1" |
Items[].ItemId |
string | ✅ | ID del producto | Máx. 20 characters | "PROD001" |
Items[].Description |
string | ✅ | Descripción del item | Máx. 160 characters | "Laptop Dell Inspiron 15" |
Items[].Quantity |
decimal | ✅ | Cantidad | Decimal (5 decimales) | 5.00000 |
Items[].UnitPrice |
decimal | ✅ | Precio unitario | Decimal (4 decimales) | 1200.0000 |
Items[].NetLine |
decimal | ✅ | Línea neta | Decimal (4 decimales) | 6000.0000 |
Items[].JobId |
string | ❌ | ID del trabajo | Máx. 20 characters | "JOB001" |
Items[].JobPhaseID |
string | ❌ | ID de fase del trabajo | Máx. 20 characters | "PHASE01" |
Items[].JobCostCodeID |
string | ❌ | ID código de costo | Máx. 20 characters | "COST001" |
Ejemplo de Request
{
"SalesOrderNumber": "SO-2025-001",
"CustomerID": "CUST001",
"CustomerPO": "PO-ABC-2025-001",
"CustomerName": "ABC Corporation S.A.",
"Subtotal": 6125.0000,
"TaxID": "TAX001",
"OrderTax": 428.7500,
"NetDue": 6553.7500,
"ARAccount": "1200",
"ShipToName": "ABC Corp Warehouse",
"ShipToAddressLine1": "Calle 50, Torre Global",
"ShipToAddressLine2": "Piso 15, Oficina 1501",
"ShipToCity": "Ciudad de Panamá",
"ShipToState": "PA",
"ShipToZip": "0833",
"ShipToCountry": "Panamá",
"SalesRepID": "REP001",
"Items": [
{
"SalesOrderNumber": "SO-2025-001",
"Taxable": 1,
"ItemOrd": "1",
"ItemId": "PROD001",
"Description": "Laptop Dell Inspiron 15",
"Quantity": 5.00000,
"UnitPrice": 1200.0000,
"NetLine": 6000.0000,
"JobId": null,
"JobPhaseID": null,
"JobCostCodeID": null
},
{
"SalesOrderNumber": "SO-2025-001",
"Taxable": 1,
"ItemOrd": "2",
"ItemId": "PROD002",
"Description": "Mouse Inalámbrico",
"Quantity": 5.00000,
"UnitPrice": 25.0000,
"NetLine": 125.0000,
"JobId": null,
"JobPhaseID": null,
"JobCostCodeID": null
}
]
}
Respuesta de Éxito
{
"ID_compania": 1,
"SalesOrderNumber": "SO-2025-001",
"CustomerID": "CUST001",
"CustomerPO": "PO-ABC-2025-001",
"CustomerName": "ABC Corporation S.A.",
"Subtotal": "6125.0000",
"TaxID": "TAX001",
"OrderTax": "428.7500",
"Net_due": "6553.7500",
"Export_date": "2025-01-29T21:30:00.000000Z",
"Enviado": 0,
"Error": 0,
"Items": [
{
"ID": 1,
"ID_compania": 1,
"SalesOrderNumber": "SO-2025-001",
"Taxable": 1,
"ItemOrd": "1",
"Item_id": "PROD001",
"Description": "Laptop Dell Inspiron 15",
"Quantity": "5.00000",
"Unit_Price": "1200.0000",
"Net_line": "6000.0000",
"JobId": null,
"JobPhaseID": null,
"JobCostCodeID": null,
"LAST_CHANGE": "2025-01-29T21:30:00.000000Z",
"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": {
"SalesOrderNumber": [
"The SalesOrderNumber has already been taken."
],
"Items.0.Quantity": [
"The Items.0.Quantity field is required."
]
}
}
Obtener Órdenes de Venta
Endpoint: GET /api/acicloud/sales_order
Controller: ACIcloudController::getSalesOrder
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Parámetros de Query (Opcionales)
| Parámetro | Tipo | Requerido | Descripción | Ejemplo |
|---|---|---|---|---|
status |
string | ❌ | Filtrar por estado | "pending" |
customer_id |
string | ❌ | Filtrar por cliente | "CUST001" |
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
{
"data": [
{
"ID": 1,
"ID_compa": 1,
"TransaID": "SO001",
"SalesOrderNumber": "SO-2025-001",
"CustomerID": "CUST001",
"CustomerName": "ABC Corporation S.A.",
"Date": "2025-01-15",
"Close_SO": "N",
"CustomerPO": "PO-ABC-2025-001",
"Total": 2500.00,
"TaxID": "TAX001",
"Detalles": [
{
"ID": 1,
"TransactionID": "SO001",
"ID_compania": 1,
"Item_id": "PROD001",
"Description": "Laptop Dell Inspiron 15",
"Quantity": 2.00,
"Unit_Price": 1200.00,
"Net_line": 2400.00,
"TaxType": 1
}
]
},
{
"ID": 2,
"ID_compa": 1,
"TransaID": "SO002",
"SalesOrderNumber": "SO-2025-002",
"CustomerID": "CUST002",
"CustomerName": "XYZ Company Ltd.",
"Date": "2025-01-18",
"Close_SO": "N",
"CustomerPO": "PO-XYZ-2025-001",
"Total": 3200.00,
"TaxID": "TAX001",
"Detalles": [
{
"ID": 2,
"TransactionID": "SO002",
"ID_compania": 1,
"Item_id": "PROD002",
"Description": "Servidor Dell PowerEdge",
"Quantity": 1.00,
"Unit_Price": 3200.00,
"Net_line": 3200.00,
"TaxType": 1
}
]
}
],
"links": {
"first": "https://api.docucenter.com/api/acicloud/sales_order?page=1",
"last": "https://api.docucenter.com/api/acicloud/sales_order?page=4",
"prev": null,
"next": "https://api.docucenter.com/api/acicloud/sales_order?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 4,
"path": "https://api.docucenter.com/api/acicloud/sales_order",
"per_page": 10,
"to": 10,
"total": 85
}
}
Crear Recibo de Cliente
Endpoint: POST /api/acicloud/customer_receipt_imp
Controller: ACIcloudController::customerReceiptImp
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Campos de Request
| Campo | Tipo | Requerido | Descripción | Ejemplo |
|---|---|---|---|---|
receipt_number |
string | ✅ | Número del recibo | "REC-2025-001" |
customer_id |
string | ✅ | ID del cliente | "CUST001" |
date |
string | ✅ | Fecha del recibo | "2025-01-29" |
payment_method |
string | ✅ | Método de pago | "check" |
amount |
decimal | ✅ | Monto del pago | 2500.00 |
currency |
string | ❌ | Moneda | "USD" |
exchange_rate |
decimal | ❌ | Tipo de cambio | 1.00 |
reference |
string | ❌ | Referencia del pago | "CHK-123456" |
bank_account |
string | ❌ | Cuenta bancaria | "1100" |
memo |
string | ❌ | Memo del recibo | "Pago factura SO-2025-001" |
applied_invoices |
array | ❌ | Facturas aplicadas | [] |
applied_invoices[].invoice_number |
string | ❌ | Número de factura | "INV-2025-001" |
applied_invoices[].amount_applied |
decimal | ❌ | Monto aplicado | 2500.00 |
applied_invoices[].discount_taken |
decimal | ❌ | Descuento tomado | 0.00 |
Métodos de Pago Válidos
cash- Efectivocheck- Chequecredit_card- Tarjeta de créditobank_transfer- Transferencia bancariaach- ACHwire_transfer- Transferencia wireother- Otros
Ejemplo de Request
{
"receipt_number": "REC-2025-001",
"customer_id": "CUST001",
"date": "2025-01-29",
"payment_method": "check",
"amount": 2500.00,
"currency": "USD",
"reference": "CHK-123456",
"bank_account": "1100",
"memo": "Pago de factura SO-2025-001",
"applied_invoices": [
{
"invoice_number": "INV-2025-001",
"amount_applied": 2500.00,
"discount_taken": 0.00
}
]
}
Respuesta de Éxito
{
"success": true,
"message": "Recibo de cliente creado exitosamente",
"data": {
"receipt_number": "REC-2025-001",
"sage_id": "SAGE_REC_001",
"amount": 2500.00,
"customer_balance_updated": true,
"invoices_applied": 1,
"created_at": "2025-01-29 21:30:00",
"sync_status": "completed"
}
}
Crear Nota de Crédito de Cliente
Endpoint: POST /api/acicloud/customer_credit_memo
Controller: ACIcloudController::customerCreditMemoImp
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Campos de Request
| Campo | Tipo | Requerido | Descripción | Ejemplo |
|---|---|---|---|---|
credit_memo_number |
string | ✅ | Número de nota de crédito | "CM-2025-001" |
customer_id |
string | ✅ | ID del cliente | "CUST001" |
date |
string | ✅ | Fecha de la nota | "2025-01-29" |
reason |
string | ✅ | Razón de la nota de crédito | "Product return" |
reference_invoice |
string | ❌ | Factura de referencia | "INV-2025-001" |
currency |
string | ❌ | Moneda | "USD" |
items |
array | ✅ | Items de la nota de crédito | [] |
items[].product_code |
string | ✅ | Código del producto | "PROD001" |
items[].description |
string | ✅ | Descripción | "Laptop Dell devuelta" |
items[].quantity |
decimal | ✅ | Cantidad | 1.00 |
items[].unit_price |
decimal | ✅ | Precio unitario | 1200.00 |
items[].tax_rate |
decimal | ❌ | Tasa de impuesto | 0.07 |
items[].reason |
string | ❌ | Razón específica del item | "Defective unit" |
Ejemplo de Request
{
"credit_memo_number": "CM-2025-001",
"customer_id": "CUST001",
"date": "2025-01-29",
"reason": "Product return - defective unit",
"reference_invoice": "INV-2025-001",
"currency": "USD",
"items": [
{
"product_code": "PROD001",
"description": "Laptop Dell Inspiron 15 - devuelta",
"quantity": 1.00,
"unit_price": 1200.00,
"tax_rate": 0.07,
"reason": "Defective screen"
}
]
}
Respuesta de Éxito
{
"success": true,
"message": "Nota de crédito creada exitosamente",
"data": {
"credit_memo_number": "CM-2025-001",
"sage_id": "SAGE_CM_001",
"subtotal": 1200.00,
"tax_amount": 84.00,
"total_amount": 1284.00,
"customer_balance_updated": true,
"created_at": "2025-01-29 21:30:00",
"sync_status": "completed"
}
}
Obtener Notas de Crédito Importadas
Endpoint: GET /api/acicloud/customer_credit_memo_imp
Controller: ACIcloudController::getCustomerCreditMemoImp
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Respuesta de Éxito
{
"success": true,
"data": [
{
"id": 1,
"credit_memo_number": "CM-2025-001",
"customer_id": "CUST001",
"customer_name": "ABC Corporation S.A.",
"sage_id": "SAGE_CM_001",
"date": "2025-01-29",
"total_amount": 1284.00,
"reason": "Product return - defective unit",
"import_status": "completed",
"created_at": "2025-01-29 21:30:00",
"errors": null
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 8,
"total_pages": 1
}
}
Códigos de Respuesta HTTP
| Código | Descripción |
|---|---|
| 200 | Consulta exitosa |
| 201 | Recibo/Nota de crédito creado exitosamente |
| 400 | Datos de entrada inválidos |
| 401 | No autorizado |
| 404 | Orden/Cliente no encontrado |
| 422 | Error de validación |
| 500 | Error interno del servidor |
Ejemplos de cURL
Consultar Estado de Orden de Venta
curl -X GET "https://api.docucenter.com/api/acicloud/sales_order_status/SO-2025-001" \
-H "Authorization: Bearer YOUR_TOKEN"
Obtener Órdenes de Venta
curl -X GET "https://api.docucenter.com/api/acicloud/sales_order?status=pending&page=1" \
-H "Authorization: Bearer YOUR_TOKEN"
Crear Recibo de Cliente
curl -X POST "https://api.docucenter.com/api/acicloud/customer_receipt_imp" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"receipt_number": "REC-2025-001",
"customer_id": "CUST001",
"date": "2025-01-29",
"payment_method": "check",
"amount": 2500.00,
"reference": "CHK-123456"
}'
Crear Nota de Crédito
curl -X POST "https://api.docucenter.com/api/acicloud/customer_credit_memo" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"credit_memo_number": "CM-2025-001",
"customer_id": "CUST001",
"date": "2025-01-29",
"reason": "Product return",
"items": [
{
"product_code": "PROD001",
"description": "Laptop devuelta",
"quantity": 1.00,
"unit_price": 1200.00
}
]
}'
Notas Técnicas
- Multi-tenant: Todos los endpoints respetan el contexto de organización
- Validación de Saldos: Se verifica que los pagos no excedan saldos pendientes
- Aplicación Automática: Los recibos pueden aplicarse automáticamente a facturas
- Control de Créditos: Las notas de crédito actualizan automáticamente saldos
- Trazabilidad: Mantiene referencias a documentos originales
- Monedas Múltiples: Soporte para pagos en diferentes monedas
Gestión de Cobros
- Recibos: Registro de pagos recibidos de clientes
- Aplicación: Aplicación de pagos a facturas específicas
- Conciliación: Proceso de conciliación bancaria
- Seguimiento: Control de antigüedad de saldos
- Reportes: Reportes de cobranza y flujo de caja
Control de Créditos
- Notas de Crédito: Manejo de devoluciones y ajustes
- Aplicación: Aplicación automática a facturas pendientes
- Inventario: Actualización de inventario en devoluciones
- Contabilidad: Asientos contables automáticos
- Aprobaciones: Flujo de aprobación para notas de crédito
Integración con Sage ACICloud
Los pagos y créditos se integran completamente con el módulo de cuentas por cobrar de Sage ACICloud, actualizando automáticamente balances y generando asientos contables.