Integracion con Sage 50 (ContaPlus)
Por que Sage 50
Sage 50 (antes ContaPlus) es el ERP mas utilizado por PYMEs espanolas, con mas de 300.000 empresas activas. Es el estandar de facto en contabilidad y facturacion para el sector del transporte en Espana.
Lo que puedes integrar
| Proceso | De Cargoffer a Sage | Como |
|---|---|---|
| Facturas de transporte | Contrato firmado -> Factura venta | Webhook + API Sage |
| Clientes | Datos del contrato -> Ficha cliente | Importacion automatica |
| Proveedores | Transportistas -> Ficha proveedor | Importacion datos fiscales |
| Cobros | Pago confirmado -> Asiento cobro | Webhook payment.received |
Metodos de integracion
1. Via fichero CSV (mas sencillo)
Sage 50 permite importar facturas desde CSV. Es el metodo mas rapido de implementar.
2. Via API Sage (automatico)
Sage tiene APIs REST disponibles para sus planes superiores. Requiere licencia Sage API.
3. Via middleware (recomendado)
Un servicio intermedio que recibe webhooks de Cargoffer y los transforma a llamadas Sage.
Guia paso a paso: Facturacion automatica
Paso 1: Registrar webhook en Cargoffer
bash
curl -X POST "https://api.pro.cargoffer.com/api/webhook" \
-H "Authorization: Bearer *** \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-sistema.com/webhook/cargoffer",
"events": ["contract.signed", "payment.received"]
}'Paso 2: Recibir el evento
Cuando se firme un contrato, recibiras:
json
{
"event": "contract.signed",
"data": {
"serviceCode": "SRV-2026-001",
"amount": 1250.00,
"currency": "EUR",
"client": {
"name": "Cliente SA",
"cif": "A12345678"
},
"date": "2026-06-17",
"description": "Transporte Madrid-Barcelona"
}
}Paso 3: Mapear campos a Sage 50
| Campo Cargoffer | Campo Sage 50 | Ejemplo |
|---|---|---|
| client.name | Cliente.Nombre | Cliente SA |
| client.cif | Cliente.CIF_NIF | A12345678 |
| amount | Factura.BaseImponible | 1250.00 |
| serviceCode | Factura.NumeroFactura | SRV-2026-001 |
| date | Factura.Fecha | 17/06/2026 |
Paso 4: Generar CSV para Sage 50
python
import csv, requests, os
TOKEN="tu_t...R_CSV = "/exportaciones/sage"
def exportar_a_sage():
"""Exporta contratos firmados a formato CSV de Sage 50."""
# Obtener contratos pendientes de facturar
r = requests.get(
"https://api.pro.cargoffer.com/api/company/contracts/",
headers={"Authorization": f"Bearer {TOKEN}"}
)
contratos = r.json()
# Generar CSV en formato Sage 50
with open(f"{DIR_CSV}/facturas_sage_{fecha}.csv", "w", newline="") as f:
writer = csv.writer(f, delimiter=";")
writer.writerow(["TipoDoc", "Serie", "NumeroFactura", "Fecha",
"ClienteCIF", "ClienteNombre", "BaseImponible",
"Concepto"])
for c in contratos:
writer.writerow([
"F", # TipoDoc: Factura
"T", # Serie: Transportes
c["serviceCode"],
c["date"],
c["client"]["cif"],
c["client"]["name"],
c["amount"],
f"Transporte {c['serviceCode']}"
])
return f"{DIR_CSV}/facturas_sage_{fecha}.csv"Paso 5: Importar en Sage 50
Desde Sage 50: Utilidades -> Importar -> CSV -> Seleccionar archivo -> Asignar columnas -> Importar
Caso de uso: Facturacion diaria automatica
Cada noche, tu sistema:
- Consulta los contratos firmados del dia en Cargoffer
- Genera el CSV de facturas para Sage 50
- Lo deja en una carpeta compartida
- Sage 50 lo importa automaticamente (o manualmente cada manana)
python
import requests
from datetime import datetime, timedelta
TOKEN="tu_t...e manana = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
hoy = datetime.now().strftime("%Y-%m-%d")
# Contratos firmados ayer
r = requests.get(
f"https://api.pro.cargoffer.com/api/company/contracts/?dateFrom={manana}&dateTo={hoy}",
headers={"Authorization": f"Bearer {TOKEN}"}
)
print(f"Contratos a facturar: {len(r.json())}")
# ... generar CSV como en el paso 4