Skip to content

Referência: quem chama o quê, eventos, erros ​

O que a API gerada não carrega: quem pode chamar cada verbo, quem recebe cada evento no , os três ids, as duas famílias de erro e o cadastro do . Tudo aqui vem do manifesto e da exposição; contrato jornada 1.0.0 e ocorrencia 1.0.0.

Modelo e status ​

: registrada → despachada → em_atendimento → controlada → encerrada, ou cancelada de qualquer status não terminal exceto controlada. O agregado traz id, versao (monotônica a partir de 1), criadoEm, atualizadoEm, registradaEm, status, os dados de negócio, referenciaExterna, e encerradaEm ou canceladaEm com motivoCancelamento no status correspondente.

: designado → aceito → em_deslocamento → no_local → encerrado, ou recusado e cancelado. Traz id, ocorrenciaId, recurso ({ tipo: 'guarnicao', guarnicaoId, <Termo id="t-052">viatura</Termo>, composicao, identificador } ou recurso avulso), instrucoes, um instante por marco e resultado no encerramento. Cancelar o último despacho aberto devolve a ocorrência a registrada.

: apresentada → iniciada → encerrada → liberada, com em_pausa entre. { id, usuario, status, versao } mais apresentadaEm, iniciadaEm e posto ({ modalidade, unidade?, descricao? }; a modalidade é id do catálogo do ), encerradaEm e pendencias nas terminais.

: constituida → disponivel → designada → em_deslocamento → no_local, com em_pausa, em_desmobilizacao, e as terminais desmobilizada e dissolvida. `{ id, viatura, composicao: [{ usuario,

}], ?, constituidaEm, status, versao }`. Postos:

comandante, motorista, patrulheiro. A guarnição acompanha o despacho, e o evento carrega o despachoId.

Pausa: tipos refeicao_principal, lanche, descanso_regulamentar, pessoal, medica, tecnica, administrativa, abastecimento, manutencao_emergencial; status em_curso, concluida, interrompida.

Todas as rotas ​

Sob /plugins, com Bearer. "Quem" é o papel que alcança o verbo; fora disso, 403 SEM_CAPACIDADE. Os caminhos de cada operação, os corpos e as respostas estão na API.

Ocorrênciaverboquem
POST /ocorrenciasregistrarOcorrencia, central
GET /ocorrenciaslistarOcorrenciasAbertasleitura
GET /ocorrencias/{id}obterOcorrencialeitura
PATCH /ocorrencias/{id}atualizarOcorrenciaCAD, central
POST /ocorrencias/{id}/controledeclararControladaCAD, central, no local
POST /ocorrencias/{id}/encerramentoencerrarOcorrenciaCAD, central, equipe no local
POST /ocorrencias/{id}/cancelamentocancelarOcorrenciaCAD, central
POST /ocorrencias/{ocorrenciaId}/despachosdespacharCAD,
GET /ocorrencias/{ocorrenciaId}/despachoslistarDespachosleitura
GET /ocorrencias/{ocorrenciaId}/registrolistarRegistroleitura
POST /ocorrencias/em-camporegistrarOcorrenciaEmCampoequipe
GET /despachos/{id}obterDespacholeitura
POST /despachos/{id}/cancelamentocancelarDespachoCAD, central
POST /despachos/{id}/aceite · /recusaaceitarDespacho · recusarDespachoequipe
POST /despachos/{id}/deslocamento · /chegadainiciarDeslocamento · registrarChegadaequipe
POST /despachos/{despachoId}/acoes · /situacoes · /apoiosregistrarAcao · atualizarSituacao · solicitarApoioequipe
POST /despachos/{id}/encerramentoencerrarDespachoequipe
GET /guarnicoes/{guarnicaoId}/despachoslistarDespachosDaGuarnicaoequipe, CAD
Jornadaverboquem
POST /policiais/{usuario}/apresentacaoregistrarApresentacaopolicial, CAD
POST /jornadas/{id}/inicio · /encerramentoiniciarJornada · encerrarJornadapolicial, CAD
POST /jornadas/{id}/liberacaoliberarPolicialsupervisor
POST /jornadas/{jornadaId}/pausasiniciarPausapolicial, supervisor
POST /pausas/{id}/encerramento · /interrupcaoencerrarPausa · interromperPausapolicial, supervisor
POST /guarnicoesconstituirGuarnicaosupervisor, CAD
GET /guarnicoeslistarGuarnicoesDisponiveisleitura
POST /guarnicoes/{id}/substituicoes · /dissolucaosubstituirIntegrante · dissolverGuarnicaosupervisor, CAD
POST /guarnicoes/{id}/comandoassumirComandocomandante, CAD
POST /guarnicoes/{id}/prontidao · /saida-de-prontidaodeclararProntidao · retirarDeProntidaocomandante, CAD
POST /guarnicoes/{id}/pausas · /desmobilizacao · /desmobilizacao-concluidainiciarPausaDaGuarnicao · solicitarDesmobilizacao · concluirDesmobilizacaocomandante, supervisor
GET /jornadas/{id} · /pausas/{id} · /guarnicoes/{id}obterJornada · obterPausa · obterGuarnicaoleitura
GET /policiais/{usuario}/jornada-ativa · /guarnicao · /guarnicao-disponivelobterJornadaAtiva · obterGuarnicaoDoUsuario · guarnicaoDisponivelDoUsuariopolicial, leitura
GET /viaturas/{viatura}/guarnicao · /guarnicao-disponivelobterGuarnicaoDaViatura · guarnicaoDisponivelNaViaturacentral, CAD

As tabelas ALCANCE_DO_INTEGRADOR_NA_OCORRENCIA e ALCANCE_DO_INTEGRADOR_NA_JORNADA da exposição são a fonte do que o integrador alcança. Entre os papéis humanos, o despachante despacha; o operador de central registra e consulta mas não despacha; o supervisor operacional não tem capacidade de ocorrência.

Todos os eventos ​

tipoquandopayloadquem recebe no webhook
ocorrencia:registradaa ocorrência nasceu{ ocorrencia }, o agregado inteiroo integrador originador
ocorrencia:atualizadadados de negócio mudaram{ id, alteracoes, versao }o integrador originador
ocorrencia:mudou-statusa ocorrência mudou de status{ id, de, para, motivo?, versao }o integrador originador
ocorrencia:despachadaum foi empenhado{ despacho }o integrador originador
ocorrencia:despacho-mudou-statusum despacho mudou: aceito, em , no local, encerrado{ id, ocorrenciaId, de, para, motivo?, resultado? }o integrador originador
ocorrencia:registro-adicionadoação, situação ou pedido de apoio na narrativa{ ocorrenciaId, entrada }o integrador originador
jornada:registradapolicial se apresentou{ jornada }todo integrador ativo
jornada:mudou-statusentrou em serviço, pausou, encerrou{ id, de, para, posto?, versao }todo integrador ativo
jornada:guarnicao-constituidaguarnição montada numa viatura{ guarnicao }todo integrador ativo
jornada:guarnicao-composicao-mudou de integrantea composição novatodo integrador ativo
jornada:comando-assumidocomandante assumiu{ id, comandante, versao }todo integrador ativo
jornada:guarnicao-mudou-statusentrou no pool, foi designada, chegou{ id, de, para, despachoId?, versao }todo integrador ativo
jornada:pausa-registrada · jornada:pausa-mudou-statuspausa de pessoa ou de equipe{ pausa } · { id, de, para, motivo? }todo integrador ativo
integracao:solicitacao-aceita · -rejeitadao desfecho de cada comando, pelo segundo caminho{ solicitacaoId, ocorrenciaId?, despachoId? } · { solicitacaoId, codigo, motivo? }o integrador que mandou o comando

Os três ids ​

idquem cunhapara quê
solicitacaoIdo cliente, um por comando (UUIDv7); vai em x-solicitacao-id
origem.solicitacaoo , copiando o seucorrelacionar o evento com o comando que o causou
id do o Geohub, um por eventodeduplicação na entrega; vai no corpo e em X-Geohub-Evento-Id

Uma solicitação em andamento expira em 5 min; se o comando explodiu, a chave é liberada e volta a valer para o mesmo comando. A deduplicação pelo protocolo do integrador (referenciaExterna) é outra camada, do domínio.

Erros ​

Recusa de protocolo — defeito do cliente. Trate como .

códigostatuso que é
NAO_AUTENTICADO401token ausente ou inválido
SEM_CAPACIDADE403o papel não alcança o verbo (faltando[])
AUTORIA_FORJADA403o x-autoria não é o da sessão
CORPO_INVALIDO400a entrada não cumpre o contrato (detalhes[]); campo desconhecido também
SOLICITACAO_AUSENTE400comando de integrador sem x-solicitacao-id
SOLICITACAO_INVALIDA400o x-solicitacao-id não é um UUID
SOLICITACAO_EM_ANDAMENTO409repita depois do Retry-After, com a mesma chave
SOLICITACAO_REUSADA422a chave já foi de outro comando
VERBO_DESCONHECIDO404verbo fora da tabela de exposição

Falha de negócio — resposta normal. Trate na tela.

códigostatuso que é
ocorrencia-inexistente · despacho-inexistente · jornada-inexistente · guarnicao-inexistente · pausa-inexistente404o id não existe
transicao-invalida409o verbo não vale no status atual
referencia-externa-ja-registrada409o id da existente vem em contexto.ocorrenciaId
jornada-ja-ativa · viatura-ja-tem-guarnicao409
comando-nao-assumido · jornada-nao-iniciada · sem-posto-de-comandante409a ordem da jornada
viatura-sem-guarnicao-disponivel · integrante-ausente · qualquer outro422a requisição valia; o domínio recusou
GUARDA_DE_DOMINIO403o objeto não é seu (o despacho é de outra guarnição), guarnição não disponível, integrador sem referenciaExterna: é resposta, não incidente, e o exemplo a trata como desfecho

Cadastro do integrador e tradução de ids ​

Configuração do ambiente, feita pelo com o admin.

Usuário de serviço com o papel Integração - Sistema de despacho, token estático configurado por deployment (INTEGRADOR_DESPACHO_STATIC_TOKEN).

Coleção integrador:

  • usuario: o usuário de serviço (único). A sessão só assina como integrador se esta linha existir; sem ela, assina como usuario.
  • nome, ativo (inativo não recebe: o outbox nem grava a linha para ele).
  • callback_url: HTTPS público, porta 443 salvo quando a allowlist traz a porta.
  • hosts_permitidos: hosts exatos, porta opcional, sem curinga. O validador recusa loopback, link-local, faixas privadas, CGNAT e host sem DNS, no cadastro e a cada envio. GEOHUB_WEBHOOK_PERMITE_REDE_LOCAL=true é só para teste.
  • segredo_do_webhook: o segredo do HMAC, mascarado no painel.

Coleção integrador_identidade, uma linha por policial:

  • integrador: o id do usuário de serviço.
  • tipo: policial (o único que o tradutor usa).
  • id_externo: a matrícula no sistema do CAD.
  • id_geohub: o UsuarioId.

A tradução roda na exposição, nas posições marcadas meta({ id: 'UsuarioId' }) nos contratos. Só o admin escreve; o integrador lê a própria tabela. Empate: vence a primeira cadastrada. Sem a linha, o comando que cita policial volta integrante-ausente. A viatura viaja pelo prefixo (RP-1207), sem tradução; ocorrência e despacho pelos ids do Geohub, com referenciaExterna para o CAD reconhecer a sua.

Outbox e log de entrega: integrador_evento (status pendente, entregue, falhou, descartado; tentativas, próxima tentativa, último HTTP status). Idempotência: integrador_solicitacao. O isolamento entre integradores é de permissão de leitura: originador = $CURRENT_USER.