Pular para o conteúdo principal

Processar Saldo de Produtor por Unidade de Entrega

Descrição: Processa o saldo de um produtor por unidade de entrega (delivery_place_id). Endpoint separado do Processar Saldo de Produtor para manter compatibilidade com integrações que enviam saldo agregado por cultura.

Semântica de upsert (chave: cpf_cnpj + cultura + delivery_place_id). Idempotente na camada de validação — enviar o mesmo payload múltiplas vezes retorna sucesso.

Importante: delivery_place_id é o identificador da Unidade de Entrega cadastrada via API de Locais de entrega. Não corresponde ao domínio de armazém (warehouse) do baseline.

Endpoint

POST/api/v1/integration/balances/by-delivery-place

Regras

AtributosDescriçãoTipoObrigatórioValidações
cpf_cnpjCPF (11 dígitos) ou CNPJ (14 dígitos) do produtorStringSimDeve ser um CPF ou CNPJ válido (com verificação de dígito)
cropsLista de culturas com saldosArraySimNão pode ser nulo ou vazio
crops[].nameNome da cultura (ex: SOJA, MILHO)StringSimNão pode ser vazio ou nulo
crops[].delivery_placesLista de saldos por unidade de entregaArraySimNão pode ser nulo ou vazio
crops[].delivery_places[].delivery_place_idID da unidade de entregaUUIDSimDeve ser um UUID válido retornado por Buscar Unidades de Entrega
crops[].delivery_places[].deposit_balance_tonSaldo em depósito (toneladas)NumberSimDeve ser maior ou igual a zero
crops[].delivery_places[].to_fix_balance_tonSaldo a fixar (toneladas)NumberSimDeve ser maior ou igual a zero
crops[].delivery_places[].total_balance_tonSaldo total (toneladas)NumberSimDeve ser maior ou igual a zero

Exemplo de Requisição

curl -X POST \
-H "Authorization: {SUA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"cpf_cnpj": "52998224725",
"crops": [
{
"name": "SOJA",
"delivery_places": [
{
"delivery_place_id": "1c2db7cc-1020-4423-98cc-02e829299e49",
"deposit_balance_ton": 100,
"to_fix_balance_ton": 200,
"total_balance_ton": 300
},
{
"delivery_place_id": "ad2db7cc-1020-4423-98cc-02e829299e49",
"deposit_balance_ton": 200,
"to_fix_balance_ton": 400,
"total_balance_ton": 600
}
]
}
]
}' \
"https://api.merx.tech/api/v1/integration/balances/by-delivery-place"
Exemplo de Requisição (cURL legado)
curl -X POST "https://api.merx.tech/api/v1/integration/balances/by-delivery-place" \
-H "Authorization: {SUA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"cpf_cnpj": "52998224725",
"crops": [
{
"name": "SOJA",
"delivery_places": [
{
"delivery_place_id": "1c2db7cc-1020-4423-98cc-02e829299e49",
"deposit_balance_ton": 100,
"to_fix_balance_ton": 200,
"total_balance_ton": 300
},
{
"delivery_place_id": "ad2db7cc-1020-4423-98cc-02e829299e49",
"deposit_balance_ton": 200,
"to_fix_balance_ton": 400,
"total_balance_ton": 600
}
]
}
]
}'

Com múltiplas culturas:

Exemplo de Requisição com múltiplas culturas
curl -X POST "https://api.merx.tech/api/v1/integration/balances/by-delivery-place" \
-H "Authorization: {SUA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"cpf_cnpj": "52998224725",
"crops": [
{
"name": "SOJA",
"delivery_places": [
{
"delivery_place_id": "1c2db7cc-1020-4423-98cc-02e829299e49",
"deposit_balance_ton": 100,
"to_fix_balance_ton": 200,
"total_balance_ton": 300
}
]
},
{
"name": "MILHO",
"delivery_places": [
{
"delivery_place_id": "ad2db7cc-1020-4423-98cc-02e829299e49",
"deposit_balance_ton": 50,
"to_fix_balance_ton": 100,
"total_balance_ton": 150
}
]
}
]
}'

Parâmetros

Parâmetros de Cabeçalho

NomeDescriçãoTipoObrigatório
AuthorizationChave de API obtida via support-api@merx.techStringSim
Content-TypeDeve ser application/jsonStringSim

Parâmetros do Corpo

NomeDescriçãoTipoObrigatório
cpf_cnpjCPF ou CNPJ do produtorStringSim
cropsLista de culturas com saldosArraySim
crops[].nameNome da cultura (ex: SOJA, MILHO)StringSim
crops[].delivery_placesLista de saldos por unidade de entregaArraySim
crops[].delivery_places[].delivery_place_idID da unidade de entrega (Buscar Unidades de Entrega)UUIDSim
crops[].delivery_places[].deposit_balance_tonSaldo em depósito (toneladas)NumberSim
crops[].delivery_places[].to_fix_balance_tonSaldo a fixar (toneladas)NumberSim
crops[].delivery_places[].total_balance_tonSaldo total (toneladas)NumberSim

Respostas

  • 200 - OK

Response sem body (HTTP 200 com corpo vazio).

  • 400 - Bad Request
{
"messages": [
"descrição do erro 1",
"descrição do erro 2"
]
}
CenárioMensagem de erro
cpf_cnpj ausentecpf_cnpj is required
CPF/CNPJ inválidocpf_cnpj is invalid
crops ausentecrops is required
Array crops vaziocrops cannot be empty
Cultura sem namename is required
Array delivery_places vaziodelivery_places cannot be empty
delivery_place_id ausentedelivery_place_id is required
Valor de saldo negativodeposit_balance_ton must be greater than or equal to zero
Produtor não encontradomessage.producer.not-found
Cultura/produto não encontradomessage.product.not-found
  • 404 - Not Found

Produtor ou produto (cultura) não encontrado para a cooperativa informada.

  • 415 - Unsupported Media Type

Content-Type diferente de application/json.