--- title: 7.3. Risco Sacado Sacados url: https://docs.vehub.com.br/API/Cadastro%20de%20Cedente/7.%20V%C3%ADnculo%20com%20Opera%C3%A7%C3%B5es/7.3.%20Risco%20Sacado%20-%20Sacados/ --- Cadastro e vínculo de **sacados** para operações **Risco Sacado** (`idModalidadeOperacao = 2`), onde o limite e o deságio são controlados por **par cedente×sacado**. O passo a passo completo está em [Roteiro - Operação Risco Sacado](7.2.%20Roteiro%20-%20Opera%C3%A7%C3%A3o%20Risco%20Sacado.md). Em resumo: cadastre e vincule o cedente (linha base) em [Vincular Cedente a Operações](7.1.%20Vincular%20Cedente%20a%20Opera%C3%A7%C3%B5es.md); então, para cada sacado, **(1)** cadastre-o como empresa Tipo Sacado e **(2)** vincule-o ao cedente na operação. !!! info "Sacado é uma empresa" O sacado é uma **empresa** do grupo econômico; o `idSacado` usado nos vínculos é o `idEmpresa` dessa empresa. As rotas de **cadastro** ficam sob `/public/api/v1/sacados`; as de **vínculo** sob `/public/api/v1/cedentes/{idEmpresa}/operacoes/{idOperacao}/sacados`. --- ## Cadastro de Sacados Gerencia as empresas Tipo Sacado do grupo econômico. O cadastro é independente do vínculo: uma vez criada a empresa sacado, ela pode ser vinculada a quantos cedentes/operações forem necessários. ### Cadastrar Sacado | Método | URL | | ------------------------------------------------ | ---------------------------------------- | | ![POST](https://img.shields.io/badge/POST-green) | `https://BASE_URL/public/api/v1/sacados` | Cria uma empresa do tipo **Sacado**. Idempotente: se já existir empresa com o mesmo documento no grupo econômico, garante o tipo Sacado nela e devolve o `idEmpresa`. O payload é o **mesmo do [cadastro de empresa](../2.%20Empresa%20Cedente/2.1.%20Criar%2C%20Consultar%20e%20Atualizar%20Cedente.md#criar-cedente)** (documento, nome, razão social, e-mail, telefone, endereço, etc.). !!! info "Pessoa Física usa `cpf`, Pessoa Jurídica usa `cnpj`" Como o payload é compartilhado com o cadastro de cedente, valem as mesmas regras: `tipoPessoa: 1` exige **`cpf`** (11 dígitos) e `tipoPessoa: 2` exige **`cnpj`** (14 dígitos). Os campos são mutuamente exclusivos e informar o do tipo errado retorna `400`. ```json title="Response Body — 200 OK (Pessoa Jurídica)" { "idEmpresa": 456, "cnpj": "98765432000188", "nome": "Sacado Exemplo LTDA", "status": "Sacado criado com sucesso." } ``` ```json title="Response Body — 200 OK (Pessoa Física)" { "idEmpresa": 457, "cpf": "52998224725", "nome": "José Osmar Rodrigues Pereira", "status": "Sacado criado com sucesso." } ``` Use o `idEmpresa` retornado como `idSacado` em [Vincular Sacado](#vincular-sacado). ### Consultar Sacado | Método | URL | | --------------------------------------------- | ---------------------------------------------------- | | ![GET](https://img.shields.io/badge/GET-blue) | `https://BASE_URL/public/api/v1/sacados/{idEmpresa}` | Retorna o cadastro de um sacado (empresa Tipo Sacado). Empresas que não são sacado retornam `400`. !!! info "`cpf` x `cnpj` na resposta" A resposta traz **apenas um** dos dois: `cnpj` para Pessoa Jurídica (`tipoPessoa: 2`) e `cpf` para Pessoa Física (`tipoPessoa: 1`). O campo do outro tipo é **omitido do JSON**, não devolvido como `null`. Vale para todas as consultas de sacado desta página. ```json title="Response Body — 200 OK" { "idEmpresa": 456, "cnpj": "98765432000188", "nome": "Sacado Exemplo LTDA", "razaoSocial": "Sacado Exemplo Sociedade LTDA", "tipoPessoa": 2, "email": "contato@sacado.com.br", "inscricaoEstadual": "123456789", "inscricaoMunicipal": "987654", "codigoCnae": "6499999", "situacao": "Ativo", "endereco": { "logradouro": "Av. Brasil", "numero": "1000", "complemento": null, "bairro": "Centro", "cep": "89010000", "cidade": "Blumenau", "uf": "SC", "pais": "BRA" } } ``` ### Consultar Sacado por CNPJ | Método | URL | | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | ![GET](https://img.shields.io/badge/GET-blue) ![DEPRECATED](https://img.shields.io/badge/DEPRECATED-lightgrey) | `https://BASE_URL/public/api/v1/sacados/por-cnpj/{cnpj}` | !!! warning "Endpoint descontinuado" Aceita **apenas CNPJ** e por isso não localiza sacados Pessoa Física, cujo documento é o CPF. Continua funcionando **sem alteração de comportamento** para as integrações existentes, mas não receberá novas evoluções. Migre para o [GET `/sacados/por-documento/{cpfCnpj}`](#consultar-sacado-por-documento-cpf-ou-cnpj). Resolve um sacado pelo CNPJ (com ou sem máscara). Mesmo corpo de resposta de [Consultar Sacado](#consultar-sacado). ### Consultar Sacado por Documento (CPF ou CNPJ) | Método | URL | | --------------------------------------------- | ---------------------------------------------------- | | ![GET](https://img.shields.io/badge/GET-blue) | `https://BASE_URL/public/api/v1/sacados/por-documento/{cpfCnpj}` | Resolve um sacado pelo documento, aceitando **CPF** (11 dígitos, Pessoa Física) ou **CNPJ** (14 dígitos, Pessoa Jurídica), com ou sem máscara. O tipo é detectado pelo tamanho. Mesmo corpo de resposta de [Consultar Sacado](#consultar-sacado). Substitui o [GET `/sacados/por-cnpj/{cnpj}`](#consultar-sacado-por-cnpj), descontinuado. | Situação | Mensagem | | --------------------------------------- | ------------------------------------------------------------------------- | | Tamanho diferente de 11 ou 14 dígitos | `O documento '{valor}' deve ter 11 dígitos (CPF) ou 14 dígitos (CNPJ).` | | 11 dígitos com verificadores inválidos | `O CPF '{valor}' é inválido.` | | 14 dígitos com verificadores inválidos | `O CNPJ '{valor}' é inválido.` | | Documento válido, mas sem cadastro | `Sacado com o documento {valor} não encontrado.` (`404`) | ### Consultar Sacados em Lote (por CNPJs) | Método | URL | | ------------------------------------------------ | ------------------------------------------------ | | ![POST](https://img.shields.io/badge/POST-green) | `https://BASE_URL/public/api/v1/sacados/por-cnpjs` | Resolve vários sacados de uma vez. Retorna apenas os encontrados (Tipo Sacado). ```json title="Request Body" { "cnpjs": ["98765432000188", "11222333000181"] } ``` ```json title="Response Body — 200 OK" [ { "idEmpresa": 456, "cnpj": "98765432000188", "nome": "Sacado Exemplo LTDA", "situacao": "Ativo" } ] ``` ### Listar Sacados (cadastro) | Método | URL | | --------------------------------------------- | ------------------------------------ | | ![GET](https://img.shields.io/badge/GET-blue) | `https://BASE_URL/public/api/v1/sacados` | Lista paginada das empresas Tipo Sacado do grupo econômico. Não confundir com [Listar Sacados Vinculados](#listar-sacados-vinculados) (pares cedente×sacado de uma operação). ### Query Params | Campo | Tipo | Descrição | | ----------------- | ------ | -------------------------------------------------- | | `nome` | Texto | Filtro por nome (substring, case-insensitive). | | `cnpj` | Texto | Filtro por CNPJ (com ou sem máscara), para sacados Pessoa Jurídica. | | `cpf` | Texto | Filtro por CPF (com ou sem máscara), para sacados Pessoa Física. | | `indicePagina` | Número | Índice da página (1-based). Default: `1`. | | `tamanhoDaPagina` | Número | Tamanho da página (1 a 100). Default: `20`. | ```json title="Response Body — 200 OK" { "registros": [ { "idEmpresa": 456, "cnpj": "98765432000188", "nome": "Sacado Exemplo LTDA", "situacao": "Ativo" } ], "paginacao": { "paginaAtual": 1, "paginaTotal": 1, "paginaQuantidadeRegistro": 20, "quantidadeRegistros": 1, "temPaginaAnterior": false, "temProximaPagina": false }, "mensagem": null } ``` O envelope de paginação (`paginacao`) é o mesmo de toda listagem paginada da API — descrito em [Envelope de Paginação](7.4.%20Consultar%20Limite%20de%20Cr%C3%A9dito.md#envelope-de-paginacao). ### Atualizar Sacado | Método | URL | | ----------------------------------------------- | ---------------------------------------------------- | | ![PUT](https://img.shields.io/badge/PUT-orange) | `https://BASE_URL/public/api/v1/sacados/{idEmpresa}` | Atualiza parcialmente o cadastro de um sacado — somente os campos enviados são alterados. O payload é o **mesmo da [atualização de cedente](../2.%20Empresa%20Cedente/2.1.%20Criar%2C%20Consultar%20e%20Atualizar%20Cedente.md#atualizar-cedente)** (todos opcionais). Empresas que não são sacado retornam `400`. ```json title="Request Body" { "nome": "Sacado Exemplo Atualizado", "email": "novo-contato@sacado.com.br" } ``` ```json title="Response Body — 200 OK" { "idEmpresa": 456, "status": "Sacado atualizado com sucesso." } ``` --- ## Vínculo de Sacados Em operações **Risco Sacado**, além do vínculo base do cedente, cada par **cedente×sacado** deve ser vinculado. **Pré-requisito:** o cedente já deve estar vinculado à operação (linha base) — ver [Vincular Cedente a Operação](7.1.%20Vincular%20Cedente%20a%20Opera%C3%A7%C3%B5es.md#vincular-cedente-a-operacao). O corpo de requisição/retorno é o mesmo modelo de [Vínculo](7.1.%20Vincular%20Cedente%20a%20Opera%C3%A7%C3%B5es.md#modelo-de-dados) do cedente. ### Listar Sacados Vinculados | Método | URL | | --------------------------------------------- | ------------------------------------------------------------------------- | | ![GET](https://img.shields.io/badge/GET-blue) | `https://BASE_URL/public/api/v1/cedentes/{idEmpresa}/operacoes/{idOperacao}/sacados` | Lista os pares cedente×sacado da operação (cada item é um [Vínculo](7.1.%20Vincular%20Cedente%20a%20Opera%C3%A7%C3%B5es.md#retorno-vinculo) com `idSacado` preenchido). ### Vincular Sacado | Método | URL | | ------------------------------------------------ | -------------------------------------------------------------------------------- | | ![POST](https://img.shields.io/badge/POST-green) | `https://BASE_URL/public/api/v1/cedentes/{idEmpresa}/operacoes/{idOperacao}/sacados/{idSacado}` | Vincula um sacado ao cedente na operação. Idempotente. Rejeita `400` se a operação não for Risco Sacado, se o cedente ainda não estiver vinculado, ou (Fonte Externa) se `percentualDesagio` for enviado. ### Path Params | Campo | Tipo | Descrição | | ------------ | ------ | ---------------------------------- | | `idEmpresa` | Número | Identificador da empresa cedente. | | `idOperacao` | Número | Identificador da operação. | | `idSacado` | Número | Identificador da empresa sacado. | ```json title="Request Body" { "idContaCorrente": 10, "limiteCredito": 30000.00 } ``` ```json title="Response Body — 200 OK" { "jaExistia": false, "mensagem": "Vínculo de sacado criado com sucesso.", "vinculo": { "idVinculo": 88, "idOperacao": 9, "nomeOperacao": "Risco Sacado Varejo", "idEmpresa": 123, "idSacado": 456, "idModalidadeOperacao": 2, "status": "Em avaliação", "coobrigacao": null, "limiteCredito": 30000.00, "percentualDesagio": null, "idContaCorrente": 10, "prazoTac": null, "prazoLimiteNegociacao": null, "taxaTac": null, "taxaJurosDia": null, "numeroContrato": null, "dataContrato": null } } ``` ### Atualizar / Desvincular Sacado | Método | URL | | ----------------------------------------------- | -------------------------------------------------------------------------------- | | ![PUT](https://img.shields.io/badge/PUT-orange) | `https://BASE_URL/public/api/v1/cedentes/{idEmpresa}/operacoes/{idOperacao}/sacados/{idSacado}` | | ![DELETE](https://img.shields.io/badge/DELETE-red) | `https://BASE_URL/public/api/v1/cedentes/{idEmpresa}/operacoes/{idOperacao}/sacados/{idSacado}` | O `PUT` atualiza os parâmetros do par (campos `null` preservam o valor atual) e retorna o [Vínculo](7.1.%20Vincular%20Cedente%20a%20Opera%C3%A7%C3%B5es.md#retorno-vinculo). O `DELETE` remove o par e retorna `{ "status": "sucesso", "mensagem": "Vínculo de sacado removido com sucesso." }`. --- ## Modelo de Dados O corpo de requisição (`limiteCredito`, `idContaCorrente`, etc.) e o retorno de vínculo (incluindo o envelope `{ jaExistia, mensagem, vinculo }`) são **compartilhados** entre cedente e sacado. A referência completa de campos está em [Vincular Cedente a Operações → Modelo de Dados](7.1.%20Vincular%20Cedente%20a%20Opera%C3%A7%C3%B5es.md#modelo-de-dados). !!! note "Limite por par" Em Risco Sacado o limite de crédito é controlado por par cedente×sacado. Para acompanhar total/tomado/disponível e os títulos que compõem o tomado de cada par, use [Consultar Limite de Crédito](7.4.%20Consultar%20Limite%20de%20Cr%C3%A9dito.md) (variantes `.../sacados/{idSacado}/limite`).