Recerc

Customer API

Customer CRM endpoints and the Agrosystems SAP Business Partner creation contract.

Customer API

Crear cliente SAP

POST /api/customagro/sap-customers

Este endpoint crea un BusinessPartners de tipo cliente en SAP Service Layer. El contrato es un único request: datos principales, clasificación comercial, condiciones de pago, vendedor, direcciones y contactos iniciales.

La ruta valida el payload antes de llamar SAP. Después hace el write directo en SAP y deja que SAP devuelva el error exacto si el cliente ya existe o algún campo no es válido.

Autenticación

Requiere sesión activa de Recerc en un workspace Agrosystems/Hydro habilitado. El sourceKey puede ser agro o hydro; si no se envía, se resuelve desde el workspace actual.

Request body

Campos requeridos:

  • cardCode: código SAP del cliente.
  • rut: RUT o identificador tributario que se envía como FederalTaxID.
  • name: razón social o nombre del cliente.
  • addresses: al menos una dirección. Cada dirección requiere name y type.

Campos comerciales opcionales:

  • groupCode: código de grupo de cliente SAP. Usa este campo para mantener el flujo en un único request.
  • currency: moneda SAP, por ejemplo CLP, USD o ##.
  • paymentTermsCode o paymentTermsName: condición de pago. Contado se normaliza a -1.
  • salesPersonCode: vendedor asociado en SAP.
  • businessActivity: se envía en Notes.

Direcciones:

  • type: "billing" se envía como bo_BillTo.
  • type: "shipping" se envía como bo_ShipTo.
  • state debe ser el código exacto que SAP acepta en States para el país. Para Chile, Región Metropolitana es 13.
  • country acepta código SAP como CL; Chile también se normaliza a CL.

Contactos:

  • code se usa como Name en SAP; si no se envía, se usa name.
  • name, firstName, lastName, position, phone, mobilePhone, email se envían dentro de ContactEmployees.
  • El primer contacto queda como ContactPerson del Business Partner.
{
  "sourceKey": "agro",
  "cardCode": "C000000",
  "rut": "11111111-1",
  "name": "Cliente prueba Recerc",
  "customerType": "customer",
  "groupCode": 115,
  "currency": "CLP",
  "paymentTermsName": "Contado",
  "salesPersonCode": 1,
  "email": "compras@cliente.cl",
  "phone": "+56911111111",
  "country": "CL",
  "businessActivity": "Cliente creado desde Recerc",
  "addresses": [
    {
      "name": "FACTURA",
      "type": "billing",
      "street": "Av. Apoquindo 3000",
      "city": "Las Condes",
      "county": "Las Condes",
      "state": "13",
      "country": "CL",
      "taxCode": "IVA"
    },
    {
      "name": "DESPACHO",
      "type": "shipping",
      "street": "Av. Apoquindo 3000",
      "city": "Las Condes",
      "county": "Las Condes",
      "state": "13",
      "country": "CL",
      "taxCode": "IVA"
    }
  ],
  "contacts": [
    {
      "code": "COMPRAS",
      "name": "Contacto Compras",
      "email": "compras@cliente.cl",
      "phone": "+56911111111",
      "active": true
    }
  ]
}

Respuesta

Creación exitosa:

{
  "status": "ok",
  "result": {
    "sourceKey": "agro",
    "mode": "created",
    "cardCode": "C000000",
    "name": "Cliente prueba Recerc"
  }
}

Payload inválido:

{
  "error": "Invalid SAP customer payload",
  "issues": [
    {
      "path": "addresses",
      "message": "Array must contain at least 1 element(s)"
    }
  ]
}

Ejemplo curl

curl -X POST "https://app.recerc.com/api/customagro/sap-customers" \
  -H "Content-Type: application/json" \
  -b "next-auth.session-token=..." \
  --data @customer.json

Borrar cliente SAP

DELETE /api/customagro/sap-customers/{cardCode}?sourceKey=agro

Ruta operacional para borrar clientes de prueba por CardCode. Está restringida a usuarios con rol admin del workspace. Ejecuta el DELETE directo en SAP; si el cliente no existe o SAP no permite borrarlo, la respuesta expone el error SAP.

{
  "status": "ok",
  "result": {
    "sourceKey": "agro",
    "mode": "deleted",
    "cardCode": "C000000"
  }
}

Obtener payload SAP desde una orden Recerc

GET /api/customagro/sap-sales-documents/payload?orderId={orderId}&kind=quotation&sourceKey=agro

Construye el payload SAP que Recerc generaría para una orden seleccionada, sin crear ni actualizar nada en SAP. kind acepta quotation o sales-order. La respuesta queda lista para usar en los endpoints raw de creación o actualización. Si Recerc detecta datos que probablemente SAP rechazará, devuelve warnings pero no bloquea la generación del payload.

{
  "status": "ok",
  "result": {
    "sourceKey": "agro",
    "documentKind": "quotation",
    "orderId": "fFNgQs8YOGPUwo2RngAVj",
    "payload": {
      "CardCode": "C000000",
      "DocDate": "2026-06-11",
      "DocDueDate": "2026-06-11",
      "TaxDate": "2026-06-11",
      "DocCurrency": "CLP",
      "SalesPersonCode": 1,
      "DocumentLines": [
        {
          "ItemCode": "ITEM001",
          "Quantity": 1,
          "UnitPrice": 1000,
          "Currency": "CLP",
          "WarehouseCode": "ALM1000",
          "TaxCode": "IVA"
        }
      ]
    },
    "warnings": [
      {
        "code": "sap_sales_item_false",
        "message": "Order item 3YvDb3e2YqVmH8xhWinau (C0000018274 - FILTRO 2T S/MALLA) is not marked as SAP SalesItem for Agro. SAP will reject it in DocumentLines.ItemCode.",
        "itemId": "3YvDb3e2YqVmH8xhWinau",
        "itemCode": "C0000018274"
      }
    ]
  }
}

Crear cotización SAP raw

POST /api/customagro/sap-quotations

Ejecuta POST Quotations en SAP Service Layer. El contrato recibe el payload SAP explícito dentro de payload; Recerc valida estructura mínima con el schema SAP actual y no resuelve datos desde una orden Recerc.

{
  "sourceKey": "agro",
  "payload": {
    "CardCode": "C000000",
    "DocDate": "2026-06-11",
    "DocDueDate": "2026-06-11",
    "TaxDate": "2026-06-11",
    "DocCurrency": "CLP",
    "SalesPersonCode": 1,
    "PaymentGroupCode": -1,
    "Comments": "Cotizacion raw creada desde Recerc",
    "DocumentLines": [
      {
        "ItemCode": "ITEM001",
        "Quantity": 1,
        "UnitPrice": 1000,
        "Currency": "CLP",
        "WarehouseCode": "ALM1000",
        "TaxCode": "IVA"
      }
    ]
  }
}

Actualizar cotización SAP raw

PATCH /api/customagro/sap-quotations/{docEntry}

Ejecuta PATCH Quotations({docEntry}) con B1S-ReplaceCollectionsOnPatch: true. El body usa el mismo formato que creación.

Cancelar cotización SAP raw

POST /api/customagro/sap-quotations/{docEntry}?sourceKey=agro

Ruta admin para cancelar una Quotation por DocEntry. Ejecuta la acción Quotations({docEntry})/Cancel en SAP y devuelve el error exacto de Service Layer si SAP no permite cancelar el documento.

Crear nota de venta SAP raw

POST /api/customagro/sap-sales-orders

Ejecuta POST Orders en SAP Service Layer. El payload se envía como contrato SAP explícito dentro de payload.

{
  "sourceKey": "agro",
  "payload": {
    "CardCode": "C000000",
    "DocDate": "2026-06-11",
    "DocDueDate": "2026-06-11",
    "TaxDate": "2026-06-11",
    "U_f_comp": "13",
    "U_via_embarque_vta": "RETIRA CLIENTE",
    "SalesPersonCode": 1,
    "Comments": "Orden raw creada desde Recerc",
    "DocumentLines": [
      {
        "ItemCode": "ITEM001",
        "Quantity": 1,
        "UnitPrice": 1000,
        "Currency": "CLP",
        "WarehouseCode": "ALM1000",
        "TaxCode": "IVA"
      }
    ]
  }
}

Actualizar nota de venta SAP raw

PATCH /api/customagro/sap-sales-orders/{docEntry}

Ejecuta PATCH Orders({docEntry}) con B1S-ReplaceCollectionsOnPatch: true. El body usa el mismo formato que creación.

Cancelar nota de venta SAP raw

POST /api/customagro/sap-sales-orders/{docEntry}?sourceKey=agro

Ruta admin para cancelar un Order por DocEntry. Ejecuta la acción Orders({docEntry})/Cancel en SAP y devuelve el error exacto de Service Layer si SAP no permite cancelar el documento.

On this page