Cadastrar Movimentação¶
📌 O que o endpoint faz¶
Este endpoint é responsável por executar a operação de Cadastrar Movimentação. Ele trafega dados diretamente na base do SISBOV, permitindo a gestão correta das informações via integração de sistemas. Os dados são processados e validados mediante as rigorosas regras exigidas pelo MAPA para as certificadoras.
Além dos identificadores internos (UUID), o endpoint também aceita chaves naturais para localizar entidades relacionadas quando os UUIDs não forem informados:
- propriedade de origem e destino por
ERASPropriedadeOrigemeERASPropriedadeDestino - produtor de origem e destino por
identificadorReceitaProdutorOrigemeidentificadorReceitaProdutorDestino - frigorífico de destino por
sifFrigorificoDestino
🧠 Lógica de Negócio (PORTUGOL)¶
A rotina interna do microserviço e sua cadeia de responsabilidades é definida simplificadamente pelos seguintes passos estruturados:
FUNÇÃO `CadastrarMovimentação`(payload):
1. Validar campos obrigatórios do payload recebido.
2. Resolver propriedade, produtor e frigorífico por UUID ou, na ausência dele, por chave natural equivalente.
3. Verificar se todas as entidades relacionadas existem e se o usuário pode operá-las.
4. Aplicar as regras de permissão (Perfil Certificadora só acessa seus dados).
5. Instanciar a nova entidade com status ativo ou inicial.
6. SALVAR no banco de dados.
7. RETORNAR código 200 com o ID gerado.
FIM_FUNÇÃO
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
idPropriedadeOrigem |
UUID |
✅ ou alternativa | UUID da propriedade de origem |
ERASPropriedadeOrigem |
Long |
✅ ou alternativa | Código ERAS da propriedade de origem, usado quando idPropriedadeOrigem não for enviado |
idPropriedadeDestino |
UUID |
✅ ou alternativa | UUID da propriedade de destino |
ERASPropriedadeDestino |
Long |
✅ ou alternativa | Código ERAS da propriedade de destino, usado quando idPropriedadeDestino não for enviado |
idProdutorOrigem |
UUID |
✅ ou alternativa | UUID do produtor de origem |
identificadorReceitaProdutorOrigem |
String |
✅ ou alternativa | CPF/CNPJ do produtor de origem, usado quando idProdutorOrigem não for enviado |
idProdutorDestino |
UUID |
✅ ou alternativa | UUID do produtor de destino |
identificadorReceitaProdutorDestino |
String |
✅ ou alternativa | CPF/CNPJ do produtor de destino, usado quando idProdutorDestino não for enviado |
idFrigorificoDestino |
UUID |
✅ ou alternativa | UUID do frigorífico de destino |
sifFrigorificoDestino |
String |
✅ ou alternativa | SIF do frigorífico de destino, usado quando idFrigorificoDestino não for enviado |
statusMovimentacao |
StatusMovimentacao |
💡 Opcional | Status inicial da movimentação |
dataEmissao |
LocalDate |
✅ | Data de emissão |
dataValidade |
LocalDate |
✅ | Data de validade |
dataCancelamento |
LocalDate |
💡 Opcional | Data de cancelamento |
dataEntrada |
LocalDate |
✅ | Data de entrada |
dataSaida |
LocalDate |
✅ | Data de saída |
dataMovimentacao |
LocalDate |
✅ | Data efetiva da movimentação |
gtas |
List<GTASync> |
💡 Opcional | Lista de GTAs associadas |
animais |
List<AnimalSync> |
💡 Opcional | Lista de animais associados |
tipoMovimentacao |
TipoMovimentacao |
✅ | Tipo da movimentação |
lastUpdate |
LocalDateTime |
💡 Opcional | Momento da última atualização no integrador |
updateType |
String |
💡 Opcional | Tipo de atualização enviada pelo integrador |
Nota Estrutural: Para cada relacionamento principal, envie o UUID ou a chave natural correspondente. Se os dois forem enviados, o processamento prioriza o UUID.
📋 Dados da Requisição (Payload)¶
Essa tabela lista os campos do corpo JSON aceitos pelo endpoint, compatíveis com o tipo MovimentacaoSync efetivamente consumido pelo serviço.
🔗 Objeto Base Esperado (REQUEST BODY): MovimentacaoSync
| Campo do Payload | Tipo Variável | Comportamento no Envio |
|---|---|---|
idPropriedadeOrigem |
UUID |
✅ Obrigatório quando ERASPropriedadeOrigem não for enviado |
ERASPropriedadeOrigem |
Long |
✅ Obrigatório quando idPropriedadeOrigem não for enviado |
idPropriedadeDestino |
UUID |
✅ Obrigatório quando ERASPropriedadeDestino não for enviado |
ERASPropriedadeDestino |
Long |
✅ Obrigatório quando idPropriedadeDestino não for enviado |
idProdutorOrigem |
UUID |
✅ Obrigatório quando identificadorReceitaProdutorOrigem não for enviado |
identificadorReceitaProdutorOrigem |
String |
✅ Obrigatório quando idProdutorOrigem não for enviado |
idProdutorDestino |
UUID |
✅ Obrigatório quando identificadorReceitaProdutorDestino não for enviado |
identificadorReceitaProdutorDestino |
String |
✅ Obrigatório quando idProdutorDestino não for enviado |
idFrigorificoDestino |
UUID |
✅ Obrigatório quando sifFrigorificoDestino não for enviado |
sifFrigorificoDestino |
String |
✅ Obrigatório quando idFrigorificoDestino não for enviado |
statusMovimentacao |
StatusMovimentacao |
💡 Opcional (Não exigido na referência) |
dataEmissao |
LocalDate |
🚨 Obrigatório |
dataValidade |
LocalDate |
🚨 Obrigatório |
dataCancelamento |
LocalDate |
💡 Opcional (Não exigido na referência) |
dataEntrada |
LocalDate |
🚨 Obrigatório |
dataSaida |
LocalDate |
🚨 Obrigatório |
dataMovimentacao |
LocalDate |
🚨 Obrigatório |
gtas |
List<GTASync> |
💡 Opcional (Não exigido na referência) |
animais |
List<AnimalSync> |
💡 Opcional (Não exigido na referência) |
tipoMovimentacao |
TipoMovimentacao |
🚨 Obrigatório |
lastUpdate |
LocalDateTime |
💡 Opcional |
updateType |
String |
💡 Opcional |
Observação importante: a obrigatoriedade dos relacionamentos é condicional por par de campos. Cada entidade relacionada pode ser informada por UUID ou por chave natural equivalente.
📦 Modelos de Dados (Data Models)¶
Configuração da Requisição¶
- URL Base:
https://api-cert.sisbov.agro.br(Produção) /https://api-cert-hom.sisbov.agro.br(Homologação) - Path Parameter / Query Parameter: Parâmetros definidos na própria URL (
/integracao/movimentacao). Em caso de paginação, utilizar os query parameters padrões formados por?pageSize=20¤tPage=0. - Header Parameters:
Authorization: Bearer <seu_token_jwt>(Obrigatório em todas as chamadas)Content-Type: application/json
Payload de Envio (Request)¶
Em endpoints que requerem o envio de corpo de dados (ex: POST, PUT), deve-se enviar um objeto JSON compatível com o DTO adequado. Variáveis obrigatórias não podem ser enviadas como nulas.
Neste endpoint, os vínculos de propriedade, produtor e frigorífico podem ser resolvidos de duas formas:
- por
UUID, usando os camposid* - por chave natural, usando
ERAS*,identificadorReceita*esifFrigorificoDestino
Resposta (Response)¶
- Sucesso (200): O método retorna
{ "id": "<uuid>" }com o identificador gerado da movimentação. - Erro de Negócio (400/417):
- Erro de Acesso (401/403): Token expirado ou dados fora da permissão da certificadora.
🚀 Exemplo de Uso (Postman Collection)¶
Exemplo mínimo com referências por UUID.
POST https://api-cert-hmg-sisbov.agricultura.gov.br/integracao/movimentacao
Content-Type: application/json
Authorization: Bearer <TOKEN>
{
"idPropriedadeOrigem": "uuid",
"idPropriedadeDestino": "uuid",
"idProdutorOrigem": "uuid",
"idProdutorDestino": "uuid",
"dataEmissao": "aaaa-mm-dd",
"dataValidade": "aaaa-mm-dd",
"dataEntrada": "aaaa-mm-dd",
"dataSaida": "aaaa-mm-dd",
"dataMovimentacao": "aaaa-mm-dd",
"tipoMovimentacao": "ENTRE_PROPRIEDADES_ORIGEM"
}
Exemplo equivalente com referências por chave natural.
POST https://api-cert-hmg-sisbov.agricultura.gov.br/integracao/movimentacao
Content-Type: application/json
Authorization: Bearer <TOKEN>
{
"ERASPropriedadeOrigem": 12345,
"ERASPropriedadeDestino": 67890,
"identificadorReceitaProdutorOrigem": "12345678901",
"identificadorReceitaProdutorDestino": "98765432100",
"dataEmissao": "2026-03-09",
"dataValidade": "2026-03-19",
"dataEntrada": "2026-03-10",
"dataSaida": "2026-03-10",
"dataMovimentacao": "2026-03-10",
"tipoMovimentacao": "ENTRE_PROPRIEDADES_ORIGEM"
}
Resposta de sucesso
📑 Simulação Swagger (OpenAPI)¶
Exemplo da especificação gerada que molda a página do Swagger Interativo:
Nenhuma definição OpenAPI pública encontrada para este endpoint na especificação base.