Ir para o conteúdo

Cadastrar Movimentação

POST /integracao/movimentacao

📌 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 ERASPropriedadeOrigem e ERASPropriedadeDestino
  • produtor de origem e destino por identificadorReceitaProdutorOrigem e identificadorReceitaProdutorDestino
  • 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&currentPage=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 campos id*
  • por chave natural, usando ERAS*, identificadorReceita* e sifFrigorificoDestino

Resposta (Response)

  • Sucesso (200): O método retorna { "id": "<uuid>" } com o identificador gerado da movimentação.
  • Erro de Negócio (400/417):
    {
      "message": "Erro: descrição detalhada do bloqueio pela regra de negócio"
    }
    
  • 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

{
  "id": "123e4567-e89b-12d3-a456-426614174000"
}

📑 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.