expenses
Registrar compra
POST /expenses
Igual que en ventas, el sistema externo debe enviar los desgloses fiscales por línea y los totales calculados.
{
"branch_id": "uuid",
"provider_id": "uuid",
"document_type": "ccf",
"date": "2026-10-01",
"observation": "Compra de insumos",
"is_credit": false,
"credit_days": 0,
"number_control": "DTE-03-M001P001-000000000000123",
"generation_code": "A1B2C3D4-...",
"stamp": "2026XYZ...",
"products": [
{
"sku": "INS-001",
"name": "Insumo A",
"type": "goods",
"quantity": 5,
"price_before_taxes": 8.00,
"expense_not_suject": 0,
"expense_exent": 0,
"expense_taxed": 40.00,
"subtotal": 40.00
}
],
"totals": {
"netTotals": 40.00,
"charge_1": 0,
"charge_2": 0,
"expenseTotalTax": 40.00,
"totalRent": 0,
"totalTax": 5.20,
"totalRetein": 0,
"expenseTotalToPayment": 45.20
}
}
Campos
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
branch_id | uuid | Sí | Sucursal que registra la compra. |
provider_id | uuid | Sí | Proveedor. Ver Proveedores. |
document_type | string | Sí | ccf (Crédito Fiscal), fse (Factura de Sujeto Excluido) o ticket. |
date | date | Sí | Fecha del documento. |
is_credit | boolean | Sí | Compra al crédito. |
credit_days | integer | No | Días de crédito. |
observation | string | No | Observaciones. |
number_control | string | No | Número de control del DTE del proveedor. |
generation_code | string | No | Código de generación del DTE del proveedor. |
stamp | string | No | Sello de recepción del DTE del proveedor. |
products | array | Sí | Líneas (mínimo 1). |
totals | object | Sí | Totales. |
products[] (todos requeridos)
| Campo | Tipo | Descripción |
|---|---|---|
sku | string | Código del bien o servicio. |
name | string | Descripción. |
type | string | goods (bien) o services (servicio). |
quantity | number | Cantidad (mínimo 0.01). |
price_before_taxes | number | Precio unitario sin impuestos. |
expense_not_suject | number | Monto no sujeto. |
expense_exent | number | Monto exento. |
expense_taxed | number | Monto gravado. |
subtotal | number | Total de la línea. |
totals (todos requeridos)
| Campo | Descripción |
|---|---|
netTotals | Suma de subtotales sin impuestos. |
charge_1 | Cargo especial 1 (en El Salvador: COTRANS en combustibles). |
charge_2 | Cargo especial 2 (en El Salvador: FOVIAL en combustibles). |
expenseTotalTax | Base gravada. |
totalRent | Renta retenida. |
totalTax | IVA (crédito fiscal). |
totalRetein | IVA retenido / percibido. |
expenseTotalToPayment | Total a pagar. |
Respuesta 200
{
"status": true,
"message": "Expense created successfully",
"data": {
"expense_id": "uuid",
"generation_code": "A1B2C3D4-...",
"control_number": "DTE-03-M001P001-000000000000123",
"status": "processed",
"issue_time": "2026-10-01 10:00:00",
"total": 45.20
}
}
Consultar compra
GET /expenses/{expense_id}
{
"status": true,
"data": {
"expense_id": "uuid",
"generation_code": "A1B2C3D4-...",
"control_number": "DTE-03-...",
"document_type": "ccf",
"status": "processed",
"issue_time": "2026-10-01 10:00:00",
"payment_status": "pending",
"is_credit": true,
"provider": { "id": "uuid", "legal_name": "Distribuidora XYZ S.A. de C.V.", "provider_name": "Distribuidora XYZ" },
"totals": { "expense_total": 45.20, "expense_to_payment": 45.20 },
"products": [
{ "sku": "INS-001", "name": "Insumo A", "quantity": 5, "individual_price": 8.00, "subtotal": 40.00 }
]
}
}