{"openapi":"3.0.0","info":{"title":"API Viveiro Municipal","version":"1.0.0","description":"API do Sistema de Gestão de Viveiro Municipal.\n\n## Como autenticar\n1. Execute **POST /api/auth/sign-in/email** com email e password\n2. Copie o `token` da resposta\n3. Clique em **Authorize** (cadeado) e cole **apenas o seu token**\n\n## Cargos\n- **Administrador** — acesso total\n- **Operador** — operações do dia a dia"},"servers":[{"url":"https://api.pamine.fs.fslab.dev/"},{"url":"http://localhost:7340"}],"tags":[{"name":"Auth","description":"Autenticação e autorização"},{"name":"Usuários","description":"Gestão de usuários do sistema"},{"name":"Espécies","description":"Cadastro e gestão de espécies do viveiro"},{"name":"Estufas","description":"Gestão de estufas e espaços físicos"},{"name":"Lotes","description":"Controle de lotes de produção"},{"name":"Movimentações","description":"Entradas, saídas e expedições"},{"name":"Destinatários","description":"Cadastro de destinatários das expedições"},{"name":"Relatórios","description":"Relatórios gerenciais"},{"name":"Auditoria","description":"Registros de auditoria do sistema"},{"name":"Dashboard","description":"Dados analíticos para dashboards"}],"paths":{"/auditoria/logs":{"get":{"tags":["Auditoria"],"summary":"Listar logs de auditoria","description":"Retorna registros de auditoria do sistema com filtros. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"usuarioId","in":"query","schema":{"type":"string"},"description":"Filtrar por ID do usuário"},{"name":"acao","in":"query","schema":{"type":"string","enum":["CRIAR_ESPECIE","ATUALIZAR_ESPECIE","INATIVAR_ESPECIE","CRIAR_MOVIMENTACAO","ESTORNAR_MOVIMENTACAO","CRIAR_LOTE","ATUALIZAR_FASE_LOTE","TRANSFERIR_LOTE","CANCELAR_LOTE","REGISTRAR_MORTALIDADE","CRIAR_ESTUFA","ATUALIZAR_ESTUFA","INATIVAR_ESTUFA","CRIAR_USUARIO","ATUALIZAR_USUARIO","INATIVAR_USUARIO","LOGIN","LOGOUT","ATIVAR_CONTA","RESETAR_SENHA","CRIAR_DESTINATARIO","ATUALIZAR_DESTINATARIO","INATIVAR_DESTINATARIO","EXPEDIR_LOTE"]},"description":"Filtrar por ação"},{"name":"dataInicio","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data início (ISO 8601)"},{"name":"dataFim","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data fim (ISO 8601)"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limit","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LogAuditoriaPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/api/auth/sign-in/email":{"post":{"tags":["Auth"],"summary":"Autenticar usuário com Better Auth","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginPost"}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/RespostaLogin"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/api/auth/get-session":{"get":{"tags":["Auth"],"summary":"Consultar a sessão atual","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SessaoAuth"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/api/auth/sign-out":{"post":{"tags":["Auth"],"summary":"Encerrar a sessão atual","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Sessão encerrada com sucesso"},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/api/auth/request-password-reset":{"post":{"tags":["Auth"],"summary":"Solicitar redefinição de senha por e-mail","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"},"redirectTo":{"type":"string","format":"uri","example":"http://localhost/definir-senha","description":"Página autorizada para a qual o Better Auth redireciona após validar o token."}}}}}},"responses":{"200":{"description":"Solicitação processada"},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/api/auth/reset-password":{"post":{"tags":["Auth"],"summary":"Definir ou redefinir a senha usando o token do Better Auth","description":"No primeiro acesso, cria a credencial e ativa o usuário pendente. Também atende ao fluxo de recuperação de senha.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["newPassword","token"],"properties":{"newPassword":{"type":"string","format":"password","minLength":8,"maxLength":128},"token":{"type":"string"}}}}}},"responses":{"200":{"description":"Senha definida e, se pendente, conta ativada"},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/dashboard/geral":{"get":{"tags":["Dashboard"],"summary":"Dados analíticos gerais","description":"Retorna métricas consolidadas para o dashboard principal: totais de espécies, lotes ativos, movimentações recentes e ocupação de estufas. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DashboardGeral"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/destinatarios":{"post":{"tags":["Destinatários"],"summary":"Cadastrar novo destinatário","description":"Cria um destinatário para expedições. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinatarioPost"},"examples":{"pessoaJuridica":{"summary":"Pessoa jurídica pública","value":{"nome":"Secretaria Municipal de Meio Ambiente","tipo":"JURIDICA","email":"meioambiente@prefeitura.gov.br","telefone":"(11) 3333-4444","categoria":"PUBLICA","documento":"12.345.678/0001-99","responsavel":"Dra. Ana Paula Ferreira","endereco":"Av. das Árvores, 500 — São Paulo/SP"}},"pessoaFisica":{"summary":"Pessoa física privada","value":{"nome":"Carlos Eduardo Ramos","tipo":"FISICA","email":"carlos@email.com","categoria":"PRIVADA","documento":"123.456.789-00","endereco":"Rua das Flores, 10 — São Paulo/SP"}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Destinatario"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"409":{"description":"Conflito com o estado atual do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Conflito com o estado atual do servidor"},"errors":{"type":"array","example":[{"message":"Conflito com o estado atual do servidor"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"get":{"tags":["Destinatários"],"summary":"Listar destinatários com filtros e paginação","description":"Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar por nome (busca parcial)"},{"name":"email","in":"query","schema":{"type":"string"},"description":"Filtrar por e-mail"},{"name":"documento","in":"query","schema":{"type":"string"},"description":"Filtrar por CPF/CNPJ"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["FISICA","JURIDICA"]},"description":"Filtrar por tipo de pessoa"},{"name":"categoria","in":"query","schema":{"type":"string","enum":["PUBLICA","PRIVADA","SOCIAL"]},"description":"Filtrar por categoria"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":10},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DestinatarioPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/destinatarios/{id}":{"get":{"tags":["Destinatários"],"summary":"Buscar destinatário por ID","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do destinatário (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Destinatario"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"patch":{"tags":["Destinatários"],"summary":"Atualizar destinatário","description":"Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do destinatário (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinatarioPatch"},"examples":{"exemplo":{"summary":"Atualizar telefone e endereço","value":{"telefone":"(11) 98765-4321","endereco":"Rua Nova, 200 — São Paulo/SP"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Destinatario"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"delete":{"tags":["Destinatários"],"summary":"Inativar destinatário","description":"Marca o destinatário como inativo. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do destinatário (UUID)"}],"responses":{"200":{"description":"Destinatário inativado com sucesso"},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/especies":{"post":{"tags":["Espécies"],"summary":"Cadastrar nova espécie","description":"Cria uma nova espécie no viveiro. Quando `quantidade_inicial` for maior que zero, registra uma movimentação automática de entrada e retorna a espécie com o saldo contabilizado. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EspeciePost"},"examples":{"arvore":{"summary":"Espécie arbórea","value":{"nome_popular":"Ipê Amarelo","nome_cientifico":"Handroanthus albus","variedade":"Albus","categoria":"ARBOREA","tipo":"MUDA","quantidade_inicial":100,"anotacoes":"Espécie nativa do cerrado"}},"semente":{"summary":"Espécie semente","value":{"nome_popular":"Aroeira","variedade":"Comum","categoria":"NATIVA","tipo":"SEMENTE"}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Especie"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"get":{"tags":["Espécies"],"summary":"Listar espécies com filtros e paginação","description":"Retorna lista paginada de espécies. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"nome","in":"query","schema":{"type":"string"},"description":"Busca textual parcial por nome popular ou científico, sem diferenciar maiúsculas e minúsculas"},{"name":"categoria","in":"query","schema":{"type":"string","enum":["ARBOREA","FRUTIFERA","ORNAMENTAL","NATIVA","EXOTICA"]},"description":"Filtrar por categoria"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["SEMENTE","MUDA"]},"description":"Filtrar por tipo"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":10},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EspeciePaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/especies/{id}":{"get":{"tags":["Espécies"],"summary":"Buscar espécie por ID","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da espécie (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Especie"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"patch":{"tags":["Espécies"],"summary":"Atualizar espécie","description":"Atualiza dados de uma espécie. O campo `tipo` não pode ser alterado após a criação. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da espécie (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EspeciePatch"},"examples":{"exemplo":{"summary":"Atualizar nome e categoria","value":{"nome_popular":"Ipê Roxo","categoria":"ORNAMENTAL"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Especie"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/especies/{id}/historico":{"get":{"tags":["Espécies"],"summary":"Histórico de movimentações da espécie","description":"Retorna todas as movimentações vinculadas a uma espécie.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da espécie (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Movimentacao"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/estufas":{"post":{"tags":["Estufas"],"summary":"Cadastrar nova estufa","description":"Cria uma nova estufa/espaço físico. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstufaPost"},"examples":{"exemplo":{"summary":"Nova estufa","value":{"localizacao_estufa":"Estufa A","localizacao_barraca":"Barraca 01","localizacao_posicao":"Fileira 3","capacidade_total":500}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Estufa"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"409":{"description":"Conflito com o estado atual do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Conflito com o estado atual do servidor"},"errors":{"type":"array","example":[{"message":"Conflito com o estado atual do servidor"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"get":{"tags":["Estufas"],"summary":"Listar estufas com filtros e paginação","description":"Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["Livre","Ocupada","Inativo"]},"description":"Filtrar por status"},{"name":"codigo_identificador","in":"query","schema":{"type":"string"},"description":"Filtrar por código identificador"},{"name":"localizacao_estufa","in":"query","schema":{"type":"string"},"description":"Filtrar por localização da estufa"},{"name":"localizacao_barraca","in":"query","schema":{"type":"string"},"description":"Filtrar por localização da barraca"},{"name":"localizacao_posicao","in":"query","schema":{"type":"string"},"description":"Filtrar por posição"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":10},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EstufaPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/estufas/{id}":{"get":{"tags":["Estufas"],"summary":"Buscar estufa por ID","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da estufa (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Estufa"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"patch":{"tags":["Estufas"],"summary":"Atualizar estufa","description":"Atualiza dados ou status de uma estufa. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da estufa (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstufaPatch"},"examples":{"exemplo":{"summary":"Atualizar status","value":{"status":"Manutenção"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Estufa"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"delete":{"tags":["Estufas"],"summary":"Inativar estufa","description":"Marca a estufa como inativa. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da estufa (UUID)"}],"responses":{"200":{"description":"Estufa inativada com sucesso"},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/lotes":{"post":{"tags":["Lotes"],"summary":"Criar novo lote","description":"Cria um lote de produção vinculando espécies a uma estufa. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LotePost"},"examples":{"exemplo":{"summary":"Criar lote com duas espécies","value":{"estufa_id":"7b77b153-24fe-4a61-82dd-24a230468965","itens_especies":[{"especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade_inicial":200},{"especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade_inicial":100}]}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lote"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"get":{"tags":["Lotes"],"summary":"Listar lotes com filtros e paginação","description":"Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"busca","in":"query","schema":{"type":"string"},"description":"Busca por código do lote"},{"name":"especieId","in":"query","schema":{"type":"string"},"description":"Filtrar por ID de espécie"},{"name":"estufaId","in":"query","schema":{"type":"string"},"description":"Filtrar por ID de estufa"},{"name":"fase","in":"query","schema":{"type":"string","enum":["SEMEADURA","GERMINAÇÃO","PRODUÇÃO","PRONTO","FINALIZADO"]},"description":"Filtrar por fase; a consulta não diferencia maiúsculas e minúsculas"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status; a consulta não diferencia maiúsculas e minúsculas"},{"name":"dataInicio","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data início (ISO 8601)"},{"name":"dataFim","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data fim (ISO 8601)"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":15},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LotePaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/lotes/{id}":{"get":{"tags":["Lotes"],"summary":"Buscar lote por ID","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lote"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"delete":{"tags":["Lotes"],"summary":"Deletar/descartar lote","description":"Remove o lote informando uma justificativa de descarte. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoteDelecao"},"examples":{"exemplo":{"summary":"Justificativa de descarte","value":{"justificativa":"Lote contaminado por praga. Descarte sanitário obrigatório."}}}}}},"responses":{"200":{"description":"Lote descartado com sucesso"},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/lotes/{id}/historico":{"get":{"tags":["Lotes"],"summary":"Histórico de movimentações do lote","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Movimentacao"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/lotes/{id}/fase":{"patch":{"tags":["Lotes"],"summary":"Atualizar fase do lote","description":"Avança ou retrocede a fase de produção do lote. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoteFasePatch"},"examples":{"exemplo":{"summary":"Avançar para produção","value":{"fase":"PRODUÇÃO"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lote"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/lotes/{id}/transferir":{"patch":{"tags":["Lotes"],"summary":"Transferir lote para outra estufa","description":"Move o lote para uma nova estufa. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoteTransferencia"},"examples":{"exemplo":{"summary":"Transferir para nova estufa","value":{"nova_estufa_id":"7b77b153-24fe-4a61-82dd-24a230468965"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lote"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/lotes/{id}/mortalidade":{"post":{"tags":["Lotes"],"summary":"Registrar mortalidade no lote","description":"Registra baixa de quantidade por morte de mudas/sementes. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoteMortalidade"},"examples":{"exemplo":{"summary":"Registrar mortalidade","value":{"especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade":15,"justificativa":"Morte por excesso de irrigação na semana 03."}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Movimentacao"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/movimentacoes":{"post":{"tags":["Movimentações"],"summary":"Registrar movimentação","description":"Registra uma movimentação de estoque. Disponível para **Administrador** e **Operador**.\n\n**Regras:**\n- `AJUSTE` aceita quantidade positiva ou negativa; os demais tipos exigem quantidade positiva\n- A quantidade deve ser diferente de zero\n- `EXPEDICAO` só aceita lote com fase `PRONTO`\n- `EXPEDICAO` exige `destinatario_id`, exceto quando `retorno_ao_viveiro=true`\n- Ao zerar o saldo total do lote, a expedição define a fase como `FINALIZADO` e libera a estufa\n- No retorno ao viveiro, o estoque equivalente do tipo `MUDA` é criado ou incrementado\n- `PERDA`, `EXPEDICAO` e `MORTALIDADE` exigem `lote_id`","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MovimentacaoPost"},"examples":{"entrada":{"summary":"Entrada de estoque","value":{"tipo":"ENTRADA","especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade":300,"justificativa":"Recebimento de doação da prefeitura regional."}},"expedicao":{"summary":"Expedição para destinatário","value":{"tipo":"EXPEDICAO","especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","lote_id":"7b77b153-24fe-4a61-82dd-24a230468965","destinatario_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade":50,"justificativa":"Expedição para reflorestamento do Parque Municipal."}},"retornoAoViveiro":{"summary":"Retorno de mudas ao estoque do viveiro","value":{"tipo":"EXPEDICAO","especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","lote_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade":25,"justificativa":"Retorno para armazenamento na sementeira.","retorno_ao_viveiro":true}},"ajuste":{"summary":"Ajuste de inventário","value":{"tipo":"AJUSTE","especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade":-10,"justificativa":"Correção de divergência no inventário mensal."}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Movimentacao"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"get":{"tags":["Movimentações"],"summary":"Listar movimentações com filtros e paginação","description":"Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"tipo","in":"query","schema":{"type":"string","enum":["ENTRADA","SAIDA","AJUSTE","PERDA","EXPEDICAO","MORTALIDADE"]},"description":"Filtrar por tipo"},{"name":"especieId","in":"query","schema":{"type":"string"},"description":"Filtrar por ID de espécie"},{"name":"usuarioId","in":"query","schema":{"type":"string"},"description":"Filtrar por ID de usuário"},{"name":"loteId","in":"query","schema":{"type":"string"},"description":"Filtrar por ID de lote"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data início (ISO 8601)"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data fim (ISO 8601)"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":15},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MovimentacaoPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/movimentacoes/{id}":{"get":{"tags":["Movimentações"],"summary":"Buscar movimentação por ID","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da movimentação (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Movimentacao"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/movimentacoes/{id}/estorno":{"post":{"tags":["Movimentações"],"summary":"Estornar movimentação","description":"Cria uma movimentação de estorno revertendo o efeito da original. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da movimentação a estornar (UUID)"}],"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Movimentacao"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/movimentacoes/especie/{especie_id}":{"get":{"tags":["Movimentações"],"summary":"Listar movimentações por espécie","security":[{"bearerAuth":[]}],"parameters":[{"name":"especie_id","in":"path","required":true,"schema":{"type":"string"},"description":"ID da espécie (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MovimentacaoPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/movimentacoes/lote/{lote_id}":{"get":{"tags":["Movimentações"],"summary":"Listar movimentações por lote","security":[{"bearerAuth":[]}],"parameters":[{"name":"lote_id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do lote (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MovimentacaoPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/lotes/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de lotes","description":"Gera e baixa o relatório de lotes em **PDF** ou **Excel**. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"especie","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome popular ou científico da espécie"},{"name":"estufa","in":"query","schema":{"type":"string"},"description":"Filtrar pelo código identificador da estufa"},{"name":"fase","in":"query","schema":{"type":"string","enum":["SEMEADURA","GERMINAÇÃO","PRODUÇÃO","PRONTO","FINALIZADO"]},"description":"Filtrar por fase"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date"},"description":"Data início"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date"},"description":"Data fim"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-lotes.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/lotes":{"get":{"tags":["Relatórios"],"summary":"Relatório de lotes","description":"Lista histórico de lotes com filtros avançados. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"especie","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome popular ou científico da espécie"},{"name":"estufa","in":"query","schema":{"type":"string"},"description":"Filtrar pelo código identificador da estufa"},{"name":"fase","in":"query","schema":{"type":"string","enum":["SEMEADURA","GERMINAÇÃO","PRODUÇÃO","PRONTO","FINALIZADO"]},"description":"Filtrar por fase"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date"},"description":"Data início"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date"},"description":"Data fim"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LotePaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/movimentacoes/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de movimentações","description":"Gera e baixa o relatório de movimentações em **PDF** ou **Excel**. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"especie","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome popular ou científico da espécie"},{"name":"usuario","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome do usuário"},{"name":"lote","in":"query","schema":{"type":"string"},"description":"Filtrar pelo código do lote"},{"name":"destinatario","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome do destinatário"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["ENTRADA","SAIDA","MORTALIDADE","EXPEDICAO","AJUSTE"]},"description":"Filtrar por tipo"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date"},"description":"Data inicial do período"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date"},"description":"Data final do período"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-movimentacoes.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/movimentacoes":{"get":{"tags":["Relatórios"],"summary":"Relatório de movimentações","description":"Lista movimentações com filtros avançados para relatórios gerenciais. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"especie","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome popular ou científico da espécie"},{"name":"usuario","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome do usuário"},{"name":"lote","in":"query","schema":{"type":"string"},"description":"Filtrar pelo código do lote"},{"name":"destinatario","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome do destinatário"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["ENTRADA","SAIDA","MORTALIDADE","EXPEDICAO","AJUSTE"]},"description":"Filtrar por tipo"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date"},"description":"Data início"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date"},"description":"Data fim"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MovimentacaoPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/mortalidade/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de mortalidade","description":"Gera e baixa o relatório de mortalidade em **PDF** ou **Excel**. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"especie","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome popular ou científico da espécie"},{"name":"data_inicio","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Data início (obrigatório)"},{"name":"data_fim","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Data fim (obrigatório)"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-mortalidade.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/mortalidade":{"get":{"tags":["Relatórios"],"summary":"Relatório de mortalidade","description":"Lista registros de mortalidade por período. **Requer data_inicio e data_fim.** Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"especie","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome popular ou científico da espécie"},{"name":"data_inicio","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Data início (obrigatório)"},{"name":"data_fim","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Data fim (obrigatório)"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MovimentacaoPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/especies/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de espécies","description":"Gera e baixa o relatório de espécies em **PDF** ou **Excel**. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar por nome popular ou científico"},{"name":"categoria","in":"query","schema":{"type":"string","enum":["ARBOREA","FRUTIFERA","ORNAMENTAL","NATIVA","EXOTICA"]},"description":"Filtrar por categoria"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["SEMENTE","MUDA"]},"description":"Filtrar por tipo"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-especies.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/especies":{"get":{"tags":["Relatórios"],"summary":"Relatório de espécies","description":"Lista espécies com filtros. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar por nome científico (busca parcial)"},{"name":"categoria","in":"query","schema":{"type":"string","enum":["ARBOREA","FRUTIFERA","ORNAMENTAL","NATIVA","EXOTICA"]},"description":"Filtrar por categoria"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["SEMENTE","MUDA"]},"description":"Filtrar por tipo (SEMENTE ou MUDA)"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EspeciePaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/estufas/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de estufas","description":"Gera e baixa o relatório de estufas em **PDF** ou **Excel**. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"busca","in":"query","schema":{"type":"string"},"description":"Busca por código ou localização"},{"name":"localizacao_estufa","in":"query","schema":{"type":"string"},"description":"Filtrar por localização da estufa"},{"name":"localizacao_barraca","in":"query","schema":{"type":"string"},"description":"Filtrar por localização da barraca"},{"name":"localizacao_posicao","in":"query","schema":{"type":"string"},"description":"Filtrar por posição"},{"name":"status","in":"query","schema":{"type":"string","enum":["Livre","Ocupada","Indisponível","Manutenção","Inativo"]},"description":"Filtrar por status"},{"name":"capacidade_minima","in":"query","schema":{"type":"integer"},"description":"Capacidade mínima"},{"name":"capacidade_maxima","in":"query","schema":{"type":"integer"},"description":"Capacidade máxima"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-estufas.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/estufas":{"get":{"tags":["Relatórios"],"summary":"Relatório de estufas","description":"Lista estufas com filtros. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"busca","in":"query","schema":{"type":"string"},"description":"Busca por código ou localização"},{"name":"localizacao_estufa","in":"query","schema":{"type":"string"},"description":"Filtrar por localização da estufa"},{"name":"localizacao_barraca","in":"query","schema":{"type":"string"},"description":"Filtrar por localização da barraca"},{"name":"localizacao_posicao","in":"query","schema":{"type":"string"},"description":"Filtrar por posição"},{"name":"status","in":"query","schema":{"type":"string","enum":["Livre","Ocupada","Indisponível","Manutenção","Inativo"]},"description":"Filtrar por status"},{"name":"capacidade_minima","in":"query","schema":{"type":"integer"},"description":"Capacidade mínima"},{"name":"capacidade_maxima","in":"query","schema":{"type":"integer"},"description":"Capacidade máxima"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EstufaPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/usuarios/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de usuários","description":"Gera e baixa o relatório de usuários em **PDF** ou **Excel**. Disponível apenas para **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome"},{"name":"cpf","in":"query","schema":{"type":"string"},"description":"Filtrar pelo CPF"},{"name":"cargo","in":"query","schema":{"type":"string","enum":["ADMINISTRADOR","OPERADOR"]},"description":"Filtrar pelo cargo"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO","PENDENTE"]},"description":"Filtrar pelo status"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-usuarios.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/usuarios":{"get":{"tags":["Relatórios"],"summary":"Relatório de usuários","description":"Lista usuários com filtros. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar por nome (busca parcial)"},{"name":"cpf","in":"query","schema":{"type":"string"},"description":"Filtrar por CPF"},{"name":"cargo","in":"query","schema":{"type":"string","enum":["ADMINISTRADOR","OPERADOR"]},"description":"Filtrar por cargo"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO","PENDENTE"]},"description":"Filtrar por status"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/UsuarioPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/destinatarios/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de destinatários","description":"Gera e baixa o relatório de destinatários em **PDF** ou **Excel**. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome"},{"name":"email","in":"query","schema":{"type":"string"},"description":"Filtrar pelo e-mail"},{"name":"documento","in":"query","schema":{"type":"string"},"description":"Filtrar pelo CPF/CNPJ"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["FISICA","JURIDICA"]},"description":"Filtrar pelo tipo"},{"name":"categoria","in":"query","schema":{"type":"string","enum":["PUBLICA","PRIVADA","SOCIAL"]},"description":"Filtrar pela categoria"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar pelo status"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-destinatarios.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/destinatarios":{"get":{"tags":["Relatórios"],"summary":"Relatório de destinatários","description":"Lista destinatários com filtros. Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar por nome (busca parcial)"},{"name":"email","in":"query","schema":{"type":"string"},"description":"Filtrar por e-mail"},{"name":"documento","in":"query","schema":{"type":"string"},"description":"Filtrar por CPF/CNPJ"},{"name":"tipo","in":"query","schema":{"type":"string","enum":["FISICA","JURIDICA"]},"description":"Filtrar por tipo (FISICA ou JURIDICA)"},{"name":"categoria","in":"query","schema":{"type":"string","enum":["PUBLICA","PRIVADA","SOCIAL"]},"description":"Filtrar por categoria"},{"name":"status","in":"query","schema":{"type":"string","enum":["ATIVO","INATIVO"]},"description":"Filtrar por status"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DestinatarioPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/auditoria/exportar":{"get":{"tags":["Relatórios"],"summary":"Exportar relatório de auditoria","description":"Gera e baixa o relatório de auditoria em **PDF** ou **Excel**. Disponível apenas para **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"formato","in":"query","schema":{"type":"string","enum":["pdf","excel"],"default":"pdf"},"description":"Formato do arquivo exportado"},{"name":"usuario","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome do usuário"},{"name":"acao","in":"query","schema":{"type":"string","enum":["CRIAR_ESPECIE","ATUALIZAR_ESPECIE","INATIVAR_ESPECIE","CRIAR_MOVIMENTACAO","ESTORNAR_MOVIMENTACAO","CRIAR_LOTE","ATUALIZAR_FASE_LOTE","TRANSFERIR_LOTE","CANCELAR_LOTE","REGISTRAR_MORTALIDADE","CRIAR_ESTUFA","ATUALIZAR_ESTUFA","INATIVAR_ESTUFA","CRIAR_USUARIO","ATUALIZAR_USUARIO","INATIVAR_USUARIO","LOGIN","LOGOUT","ATIVAR_CONTA","RESETAR_SENHA","CRIAR_DESTINATARIO","ATUALIZAR_DESTINATARIO","INATIVAR_DESTINATARIO","EXPEDIR_LOTE"]},"description":"Filtrar pela ação"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data início (ISO 8601)"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data fim (ISO 8601)"}],"responses":{"200":{"description":"Relatório gerado com sucesso.","headers":{"Content-Disposition":{"description":"Nome do arquivo para download.","schema":{"type":"string","example":"attachment; filename=\"relatorio-auditoria.pdf\""}}},"content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/relatorios/auditoria":{"get":{"tags":["Relatórios"],"summary":"Relatório de auditoria","description":"Lista logs de auditoria do sistema. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"usuario","in":"query","schema":{"type":"string"},"description":"Filtrar pelo nome do usuário"},{"name":"acao","in":"query","schema":{"type":"string","enum":["CRIAR_ESPECIE","ATUALIZAR_ESPECIE","INATIVAR_ESPECIE","CRIAR_MOVIMENTACAO","ESTORNAR_MOVIMENTACAO","CRIAR_LOTE","ATUALIZAR_FASE_LOTE","TRANSFERIR_LOTE","CANCELAR_LOTE","REGISTRAR_MORTALIDADE","CRIAR_ESTUFA","ATUALIZAR_ESTUFA","INATIVAR_ESTUFA","CRIAR_USUARIO","ATUALIZAR_USUARIO","INATIVAR_USUARIO","LOGIN","LOGOUT","ATIVAR_CONTA","RESETAR_SENHA","CRIAR_DESTINATARIO","ATUALIZAR_DESTINATARIO","INATIVAR_DESTINATARIO","EXPEDIR_LOTE"]},"description":"Filtrar por ação"},{"name":"data_inicio","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data início (ISO 8601)"},{"name":"data_fim","in":"query","schema":{"type":"string","format":"date-time"},"description":"Data fim (ISO 8601)"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":20},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LogAuditoriaPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/usuarios":{"post":{"tags":["Usuários"],"summary":"Cadastrar novo usuário","description":"Cria um novo usuário no sistema. Apenas **Administrador**. O usuário receberá um e-mail para confirmar o cadastro e definir sua senha.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsuarioPost"},"examples":{"administrador":{"summary":"Criar Administrador","value":{"nome":"João Silva","cpf":"123.456.789-00","email":"joao@viveiro.com","telefone":"(11) 99999-0000","cargo":"ADMINISTRADOR"}},"operador":{"summary":"Criar Operador","value":{"nome":"Maria Souza","cpf":"987.654.321-00","email":"maria@viveiro.com","cargo":"OPERADOR"}}}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usuario"},"message":{"type":"string","example":"Recurso criado com sucesso"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"409":{"description":"Conflito com o estado atual do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Conflito com o estado atual do servidor"},"errors":{"type":"array","example":[{"message":"Conflito com o estado atual do servidor"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"get":{"tags":["Usuários"],"summary":"Listar usuários com filtros e paginação","description":"Retorna lista paginada de usuários. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"nome","in":"query","schema":{"type":"string"},"description":"Filtrar por nome (busca parcial)"},{"name":"email","in":"query","schema":{"type":"string","format":"email"},"description":"Filtrar por e-mail exato"},{"name":"ativo","in":"query","schema":{"type":"string","enum":["true","false"]},"description":"Filtrar por status ativo"},{"name":"page","in":"query","schema":{"type":"integer","default":1},"description":"Página"},{"name":"limite","in":"query","schema":{"type":"integer","default":10},"description":"Itens por página (máx 100)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/UsuarioPaginado"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/usuarios/perfil":{"patch":{"tags":["Usuários"],"summary":"Atualizar o próprio perfil","description":"O usuário autenticado atualiza seus próprios dados (nome, e-mail, telefone, senha). Disponível para **Administrador** e **Operador**.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AtualizarPerfilPatch"},"examples":{"exemplo":{"summary":"Atualizar nome e telefone","value":{"nome":"João da Silva Sauro","telefone":"(11) 98888-7777"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usuario"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}},"/usuarios/{id}":{"get":{"tags":["Usuários"],"summary":"Buscar usuário por ID","description":"Retorna os dados de um usuário específico. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do usuário (UUID)"}],"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usuario"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"patch":{"tags":["Usuários"],"summary":"Atualizar dados de um usuário","description":"Atualiza dados, cargo ou status de um usuário. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do usuário (UUID)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsuarioUpdatePatch"},"examples":{"exemplo":{"summary":"Alterar cargo e status","value":{"cargo":"OPERADOR","status":"ATIVO"}}}}}},"responses":{"200":{"description":"Requisição bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usuario"},"message":{"type":"string","example":"Requisição bem-sucedida"},"errors":{"type":"array","example":[]}}}}}},"400":{"description":"Requisição com sintaxe incorreta","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Requisição com sintaxe incorreta"},"errors":{"type":"array","example":[{"message":"Requisição com sintaxe incorreta"}]}}}}}},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}},"delete":{"tags":["Usuários"],"summary":"Inativar usuário (soft delete)","description":"Marca o usuário como inativo sem remover do banco. Apenas **Administrador**.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"ID do usuário (UUID)"}],"responses":{"200":{"description":"Usuário inativado com sucesso"},"401":{"description":"Não autorizado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Não autorizado"},"errors":{"type":"array","example":[{"message":"Não autorizado"}]}}}}}},"403":{"description":"Proibido","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Proibido"},"errors":{"type":"array","example":[{"message":"Proibido"}]}}}}}},"404":{"description":"Recurso não encontrado","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Recurso não encontrado"},"errors":{"type":"array","example":[{"message":"Recurso não encontrado"}]}}}}}},"500":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{},"example":[]},"message":{"type":"string","example":"Erro interno do servidor"},"errors":{"type":"array","example":[{"message":"Erro interno do servidor"}]}}}}}}}}}},"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Better Auth session token"}},"schemas":{"LogAuditoria":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID do log de auditoria"},"usuario_id":{"type":"string","format":"uuid","description":"ID do usuário que realizou a ação"},"acao":{"type":"string","enum":["CRIAR_ESPECIE","ATUALIZAR_ESPECIE","INATIVAR_ESPECIE","CRIAR_MOVIMENTACAO","ESTORNAR_MOVIMENTACAO","CRIAR_LOTE","ATUALIZAR_FASE_LOTE","TRANSFERIR_LOTE","CANCELAR_LOTE","REGISTRAR_MORTALIDADE","CRIAR_ESTUFA","ATUALIZAR_ESTUFA","INATIVAR_ESTUFA","CRIAR_USUARIO","ATUALIZAR_USUARIO","INATIVAR_USUARIO","LOGIN","LOGOUT","ATIVAR_CONTA","RESETAR_SENHA","CRIAR_DESTINATARIO","ATUALIZAR_DESTINATARIO","INATIVAR_DESTINATARIO","EXPEDIR_LOTE"],"description":"Ação realizada"},"detalhes_mudanca":{"type":"object","description":"Detalhes das mudanças realizadas","example":{"campo":"valor antigo -> valor novo"}},"data_registro":{"type":"string","format":"date-time","description":"Data e hora do registro"}}},"LogAuditoriaPaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/LogAuditoria"}},"totalDocs":{"type":"integer","example":150},"limit":{"type":"integer","example":20},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":8},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"LoginPost":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","format":"password"}},"example":{"email":"admin@viveiro.com","password":"Admin@123!"}},"RespostaLogin":{"type":"object","properties":{"redirect":{"type":"boolean"},"token":{"type":"string","description":"Token de sessão do Better Auth"},"user":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"cpf":{"type":"string"},"telefone":{"type":"string","nullable":true},"cargo":{"type":"string"},"status":{"type":"string"}}}}},"SessaoAuth":{"type":"object","properties":{"session":{"type":"object"},"user":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"cpf":{"type":"string"},"telefone":{"type":"string","nullable":true},"cargo":{"type":"string"},"status":{"type":"string"}}}}},"MetricasEspecie":{"type":"object","properties":{"total":{"type":"integer","example":45},"ativos":{"type":"integer","example":42},"inativos":{"type":"integer","example":3},"quantidade_total":{"type":"integer","example":12500}}},"MetricasLote":{"type":"object","properties":{"total":{"type":"integer","example":28},"ativos":{"type":"integer","example":25},"por_fase":{"type":"object","properties":{"SEMEADURA":{"type":"integer","example":5},"GERMINACAO":{"type":"integer","example":8},"PRODUCAO":{"type":"integer","example":10},"PRONTO":{"type":"integer","example":2},"FINALIZADO":{"type":"integer","example":3}}}}},"MetricasEsqufa":{"type":"object","properties":{"total":{"type":"integer","example":12},"livres":{"type":"integer","example":3},"ocupadas":{"type":"integer","example":8},"indisponiveis":{"type":"integer","example":1},"taxa_ocupacao":{"type":"number","format":"float","example":66.67}}},"MetricasMovimentacao":{"type":"object","properties":{"total_mes":{"type":"integer","example":156},"entradas":{"type":"integer","example":45},"saidas":{"type":"integer","example":38},"expedições":{"type":"integer","example":52},"ajustes":{"type":"integer","example":21}}},"DashboardGeral":{"type":"object","properties":{"especies":{"$ref":"#/components/schemas/MetricasEspecie"},"lotes":{"$ref":"#/components/schemas/MetricasLote"},"estufas":{"$ref":"#/components/schemas/MetricasEsqufa"},"movimentacoes":{"$ref":"#/components/schemas/MetricasMovimentacao"},"data_atualizacao":{"type":"string","format":"date-time"}}},"Destinatario":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID do destinatário"},"nome":{"type":"string","description":"Nome ou razão social do destinatário"},"tipo":{"type":"string","enum":["FISICA","JURIDICA"],"description":"Tipo de pessoa"},"email":{"type":"string","format":"email","description":"E-mail"},"telefone":{"type":"string","nullable":true,"description":"Telefone (opcional)"},"categoria":{"type":"string","enum":["PUBLICA","PRIVADA","SOCIAL"],"description":"Categoria do destinatário"},"documento":{"type":"string","description":"CPF (pessoa física) ou CNPJ (pessoa jurídica)"},"responsavel":{"type":"string","nullable":true,"description":"Nome do responsável (opcional)"},"endereco":{"type":"string","description":"Endereço completo"},"status":{"type":"string","enum":["ATIVO","INATIVO"],"description":"Status do destinatário"},"data_registro":{"type":"string","format":"date-time","description":"Data de criação"},"data_att":{"type":"string","format":"date-time","description":"Data da última atualização"}}},"DestinatarioPost":{"type":"object","required":["nome","tipo","email","categoria","documento","endereco"],"properties":{"nome":{"type":"string","description":"Nome ou razão social"},"tipo":{"type":"string","enum":["FISICA","JURIDICA"],"description":"Tipo de pessoa"},"email":{"type":"string","format":"email","description":"E-mail"},"telefone":{"type":"string","description":"Telefone (opcional)"},"categoria":{"type":"string","enum":["PUBLICA","PRIVADA","SOCIAL"],"description":"Categoria"},"documento":{"type":"string","description":"CPF ou CNPJ"},"responsavel":{"type":"string","description":"Responsável (opcional, recomendado para pessoa jurídica)"},"endereco":{"type":"string","description":"Endereço completo"}},"example":{"nome":"Secretaria Municipal de Meio Ambiente","tipo":"JURIDICA","email":"meioambiente@prefeitura.gov.br","telefone":"(11) 3333-4444","categoria":"PUBLICA","documento":"12.345.678/0001-99","responsavel":"Dra. Ana Paula Ferreira","endereco":"Av. das Árvores, 500 — São Paulo/SP"}},"DestinatarioPatch":{"type":"object","properties":{"nome":{"type":"string","description":"Nome ou razão social (opcional)"},"email":{"type":"string","format":"email","description":"E-mail (opcional)"},"telefone":{"type":"string","description":"Telefone (opcional)"},"responsavel":{"type":"string","description":"Responsável (opcional)"},"endereco":{"type":"string","description":"Endereço (opcional)"},"status":{"type":"string","enum":["ATIVO","INATIVO"],"description":"Status (opcional)"}},"example":{"telefone":"(11) 98765-4321","endereco":"Rua Nova, 200 — São Paulo/SP"}},"DestinatarioPaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Destinatario"}},"totalDocs":{"type":"integer","example":42},"limit":{"type":"integer","example":10},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":5},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"Especie":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID da espécie"},"nome_popular":{"type":"string","description":"Nome popular da espécie"},"nome_cientifico":{"type":"string","nullable":true,"description":"Nome científico (opcional)"},"variedade":{"type":"string","nullable":true,"description":"Variedade (opcional)"},"tipo":{"type":"string","enum":["SEMENTE","MUDA"],"description":"Tipo de propagação"},"categoria":{"type":"string","enum":["ARBOREA","FRUTIFERA","ORNAMENTAL","NATIVA","EXOTICA"],"description":"Categoria da espécie"},"quantidade_atual":{"type":"integer","minimum":0,"description":"Quantidade atual em estoque"},"status":{"type":"string","enum":["ATIVO","INATIVO"],"description":"Status da espécie"},"anotacoes":{"type":"string","description":"Anotações sobre a espécie"},"data_registro":{"type":"string","format":"date-time","description":"Data de criação"},"data_att":{"type":"string","format":"date-time","description":"Data da última atualização"}}},"EspeciePost":{"type":"object","required":["nome_popular","tipo","categoria"],"properties":{"nome_popular":{"type":"string","description":"Nome popular da espécie"},"nome_cientifico":{"type":"string","description":"Nome científico (opcional)"},"variedade":{"type":"string","description":"Variedade (opcional)"},"tipo":{"type":"string","enum":["SEMENTE","MUDA"],"description":"Tipo de propagação"},"categoria":{"type":"string","enum":["ARBOREA","FRUTIFERA","ORNAMENTAL","NATIVA","EXOTICA"],"description":"Categoria da espécie"},"quantidade_inicial":{"type":"integer","minimum":0,"default":0,"description":"Saldo inicial contabilizado por uma movimentação automática de entrada"},"anotacoes":{"type":"string","description":"Anotações (opcional)"}},"example":{"nome_popular":"Ipê Amarelo","nome_cientifico":"Handroanthus albus","variedade":"Albus","categoria":"ARBOREA","tipo":"MUDA","quantidade_inicial":100,"anotacoes":"Espécie nativa do cerrado"}},"EspeciePatch":{"type":"object","properties":{"nome_popular":{"type":"string","description":"Nome popular (opcional)"},"nome_cientifico":{"type":"string","description":"Nome científico (opcional)"},"variedade":{"type":"string","description":"Variedade (opcional)"},"categoria":{"type":"string","enum":["ARBOREA","FRUTIFERA","ORNAMENTAL","NATIVA","EXOTICA"],"description":"Categoria (opcional)"},"status":{"type":"string","enum":["ATIVO","INATIVO"],"description":"Status (opcional)"},"anotacoes":{"type":"string","description":"Anotações (opcional)"}},"example":{"nome_popular":"Ipê Amarelo Atualizado","anotacoes":"Espécie com alta demanda"}},"EspeciePaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Especie"}},"totalDocs":{"type":"integer","example":45},"limit":{"type":"integer","example":10},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":5},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"Estufa":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID da estufa"},"codigo_identificador":{"type":"string","description":"Código único da estufa"},"localizacao_estufa":{"type":"string","description":"Local/nome da estufa"},"localizacao_barraca":{"type":"string","description":"Barraca onde está localizada"},"localizacao_posicao":{"type":"string","description":"Posição/fileira dentro da barraca"},"capacidade_total":{"type":"integer","minimum":0,"description":"Capacidade total de plantas/mudas"},"status":{"type":"string","enum":["Livre","Ocupada","Indisponível","Manutenção","Inativo"],"description":"Status da estufa"},"data_registro":{"type":"string","format":"date-time","description":"Data de criação"},"data_att":{"type":"string","format":"date-time","description":"Data da última atualização"}}},"EstufaPost":{"type":"object","required":["localizacao_estufa","localizacao_barraca","localizacao_posicao","capacidade_total"],"properties":{"localizacao_estufa":{"type":"string","description":"Local/nome da estufa"},"localizacao_barraca":{"type":"string","description":"Barraca onde está localizada"},"localizacao_posicao":{"type":"string","description":"Posição/fileira dentro da barraca"},"capacidade_total":{"type":"integer","minimum":1,"description":"Capacidade total de plantas/mudas"}},"example":{"localizacao_estufa":"Estufa A","localizacao_barraca":"Barraca 01","localizacao_posicao":"Fileira 3","capacidade_total":500}},"EstufaPatch":{"type":"object","properties":{"localizacao_estufa":{"type":"string","description":"Local/nome da estufa (opcional)"},"localizacao_barraca":{"type":"string","description":"Barraca (opcional)"},"localizacao_posicao":{"type":"string","description":"Posição (opcional)"},"capacidade_total":{"type":"integer","minimum":1,"description":"Capacidade total (opcional)"},"status":{"type":"string","enum":["Livre","Ocupada","Indisponível","Manutenção","Inativo"],"description":"Status (opcional)"}},"example":{"status":"Manutenção"}},"EstufaPaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Estufa"}},"totalDocs":{"type":"integer","example":12},"limit":{"type":"integer","example":10},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":2},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"ItensEspecie":{"type":"object","properties":{"especie_id":{"type":"string","format":"uuid","description":"ID da espécie"},"quantidade_inicial":{"type":"integer","minimum":1,"description":"Quantidade inicial plantada"},"quantidade_atual":{"type":"integer","minimum":0,"description":"Quantidade atual"}}},"Lote":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID do lote"},"codigo":{"type":"string","description":"Código único do lote"},"fase":{"type":"string","enum":["SEMEADURA","GERMINAÇÃO","PRODUÇÃO","PRONTO","FINALIZADO"],"description":"Fase atual do lote"},"status":{"type":"string","enum":["ATIVO","INATIVO"],"description":"Status do lote"},"estufa_id":{"type":"string","format":"uuid","nullable":true,"description":"ID da estufa onde está localizado"},"itens_especies":{"type":"array","items":{"$ref":"#/components/schemas/ItensEspecie"},"description":"Espécies contidas no lote"},"data_inicio":{"type":"string","format":"date-time","description":"Data de início da produção"},"data_registro":{"type":"string","format":"date-time","description":"Data de criação do lote"},"data_att":{"type":"string","format":"date-time","description":"Data da última atualização"}}},"LotePost":{"type":"object","required":["estufa_id","itens_especies"],"properties":{"estufa_id":{"type":"string","format":"uuid","description":"ID da estufa"},"itens_especies":{"type":"array","minItems":1,"items":{"type":"object","required":["especie_id","quantidade_inicial"],"properties":{"especie_id":{"type":"string","format":"uuid","description":"ID da espécie"},"quantidade_inicial":{"type":"integer","minimum":1,"description":"Quantidade inicial"}}}}},"example":{"estufa_id":"7b77b153-24fe-4a61-82dd-24a230468965","itens_especies":[{"especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade_inicial":200},{"especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade_inicial":100}]}},"LoteDelecao":{"type":"object","required":["justificativa"],"properties":{"justificativa":{"type":"string","description":"Justificativa do descarte"}},"example":{"justificativa":"Lote contaminado por praga. Descarte sanitário obrigatório."}},"LotePaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Lote"}},"totalDocs":{"type":"integer","example":87},"limit":{"type":"integer","example":15},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":6},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"Movimentacao":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID da movimentação"},"tipo":{"type":"string","enum":["ENTRADA","SAIDA","MORTALIDADE","EXPEDICAO","AJUSTE","ESTORNO"],"description":"Tipo de movimentação"},"especie_id":{"type":"string","format":"uuid","description":"ID da espécie movimentada"},"lote_id":{"type":"string","format":"uuid","nullable":true,"description":"ID do lote (obrigatório para PERDA, EXPEDICAO, MORTALIDADE)"},"quantidade":{"type":"integer","description":"Quantidade movimentada"},"justificativa":{"type":"string","description":"Motivo da movimentação"},"usuario_id":{"type":"string","format":"uuid","description":"ID do usuário que realizou a movimentação"},"destinatario_id":{"type":"string","format":"uuid","nullable":true,"description":"ID do destinatário (obrigatório para EXPEDICAO)"},"data_registro":{"type":"string","format":"date-time","description":"Data e hora da movimentação"},"data_att":{"type":"string","format":"date-time","description":"Data da última atualização"}}},"MovimentacaoPost":{"type":"object","required":["tipo","especie_id","quantidade","justificativa"],"properties":{"tipo":{"type":"string","enum":["ENTRADA","SAIDA","MORTALIDADE","EXPEDICAO","AJUSTE"],"description":"Tipo de movimentação"},"especie_id":{"type":"string","format":"uuid","description":"ID da espécie"},"lote_id":{"type":"string","format":"uuid","description":"ID do lote (obrigatório para PERDA, EXPEDICAO, MORTALIDADE)"},"quantidade":{"type":"integer","not":{"const":0},"description":"Quantidade movimentada. Aceita valor negativo somente quando tipo for AJUSTE"},"justificativa":{"type":"string","description":"Motivo da movimentação"},"destinatario_id":{"type":"string","format":"uuid","description":"ID do destinatário (obrigatório para EXPEDICAO)"},"retorno_ao_viveiro":{"type":"boolean","default":false,"description":"Em EXPEDICAO, devolve as mudas ao estoque como tipo MUDA e dispensa destinatário"}},"example":{"tipo":"ENTRADA","especie_id":"7b77b153-24fe-4a61-82dd-24a230468965","quantidade":300,"justificativa":"Recebimento de doação da prefeitura regional.","retorno_ao_viveiro":false}},"MovimentacaoPaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Movimentacao"}},"totalDocs":{"type":"integer","example":234},"limit":{"type":"integer","example":15},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":16},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"RelatorioPaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"type":"object"},"description":"Resultados da busca (pode conter Lotes, Movimentações, etc)"},"totalDocs":{"type":"integer","example":120},"limit":{"type":"integer","example":10},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":12},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}},"Usuario":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"ID do usuário"},"nome":{"type":"string","description":"Nome completo do usuário"},"cpf":{"type":"string","pattern":"^\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}$","description":"CPF do usuário"},"email":{"type":"string","format":"email","description":"E-mail do usuário"},"telefone":{"type":"string","description":"Telefone do usuário (opcional)"},"cargo":{"type":"string","enum":["ADMINISTRADOR","OPERADOR"],"description":"Cargo do usuário"},"status":{"type":"string","enum":["ATIVO","INATIVO","PENDENTE"],"description":"Status da conta"},"data_registro":{"type":"string","format":"date-time","description":"Data de criação"},"data_att":{"type":"string","format":"date-time","description":"Data da última atualização"}}},"UsuarioPost":{"type":"object","required":["nome","cpf","email","cargo"],"properties":{"nome":{"type":"string","description":"Nome completo do usuário"},"cpf":{"type":"string","pattern":"^\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}$","description":"CPF do usuário"},"email":{"type":"string","format":"email","description":"E-mail do usuário"},"telefone":{"type":"string","description":"Telefone do usuário (opcional)"},"cargo":{"type":"string","enum":["ADMINISTRADOR","OPERADOR"],"description":"Cargo do usuário"}},"example":{"nome":"João Silva","cpf":"123.456.789-00","email":"joao@viveiro.com","telefone":"(11) 99999-0000","cargo":"OPERADOR"}},"AtualizarPerfilPatch":{"type":"object","properties":{"nome":{"type":"string","description":"Nome completo (opcional)"},"email":{"type":"string","format":"email","description":"E-mail (opcional)"},"telefone":{"type":"string","description":"Telefone (opcional)"},"senha_atual":{"type":"string","format":"password","description":"Senha atual (obrigatório se mudar senha)"},"senha_nova":{"type":"string","format":"password","description":"Nova senha (opcional)"}},"example":{"nome":"João da Silva Sauro","telefone":"(11) 98888-7777"}},"UsuarioUpdatePatch":{"type":"object","properties":{"nome":{"type":"string","description":"Nome completo (opcional)"},"email":{"type":"string","format":"email","description":"E-mail (opcional)"},"telefone":{"type":"string","description":"Telefone (opcional)"},"cargo":{"type":"string","enum":["ADMINISTRADOR","OPERADOR"],"description":"Cargo (opcional)"},"status":{"type":"string","enum":["ATIVO","INATIVO","PENDENTE"],"description":"Status (opcional)"}},"example":{"cargo":"OPERADOR","status":"ATIVO"}},"UsuarioPaginado":{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Usuario"}},"totalDocs":{"type":"integer","example":25},"limit":{"type":"integer","example":10},"page":{"type":"integer","example":1},"pages":{"type":"integer","example":3},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false},"nextPage":{"type":"integer","nullable":true,"example":2},"prevPage":{"type":"integer","nullable":true,"example":null}}}}}}