Ir para o conteúdo principal

Estudo Técnico sobre a Integração do e-Estado com o Sistema Governa. Aba Informação

Data de elaboração XX/28/06/2023
Responsável pelo estudo

Ádrian Rabelo Mendes (Assessor)
Diego Gonçalves de Almeida (Assessor)
Jônatas Legal (Assessor)
Rodrigo Stefano Sales Nascimento (Assessor)

Equipe do estudo CAOS

Alvo

Sistema Governa

Origem
  • Objetivo estratégico: Realizar levantamento de integração assíncrona do cadastro de servidor, entre os sistemas e-Estado e Governa.
Objetivo para que seja possível realizar a inserção de informações recebidas pelo e-Estado e integre com o governa, reduzindo o retrabalho e informações desiguais nos sistemas
Glossário

AMQP - Advanced Message Queuing Protocol
RabbitMQ - É um servidor de mensageria de código aberto
Acknowledgment – Confirmação de entrega de mensagem
QoS – Quality of Service

1. Introdução

O presente estudo técnico tem como propósito analisar e apresentar propostas para a integração da tela "Novo Servidor" do e-Estado com a tela "Servidor -> Cadastro de Servidor -> Novo - Aba "Informação" do Governa. No momento, essas duas telas operam de maneira independente, o que requer a inserção repetida de informações e pode resultar em inconsistências nos dados. O objetivo é realizar uma integração eficiente entre as informações dos sistemas, eliminando a redundância e aprimorando a qualidade dos dados registrados no Governa.

O estudo também aborda a utilização do protocolo AMQP em conjunto com o RabbitMQ. O RabbitMQ é um sistema de mensageria de código aberto que implementa o protocolo AMQP, permitindo a troca eficiente de mensagens entre diferentes sistemas e componentes.

2. Desenvolvimento

2.1 Protocolo AMQP

O protocolo AMQP (Advanced Message Queuing Protocol) é um protocolo de mensagens assíncronas, utilizado para comunicação entre sistemas distribuídos. Ele foi desenvolvido para facilitar a troca de mensagens entre aplicativos e serviços de forma eficiente e confiável.

O AMQP foi projetado para ser independente de plataforma, permitindo a comunicação entre diferentes sistemas e linguagens de programação. Ele define um conjunto de regras e formatos para enviar, rotear e receber mensagens, garantindo que elas sejam entregues de maneira ordenada e confiável.

Uma das principais características do AMQP é a utilização de filas de mensagens. As mensagens são publicadas em filas e podem ser consumidas por um ou mais consumidores, de acordo com um modelo de pub/sub (publicação/assinatura). Isso permite que os aplicativos enviem e recebam mensagens de forma assíncrona, desacoplando o produtor da mensagem do consumidor.

Além das filas, o AMQP também define trocas (exchanges) e vinculações (bindings) para rotear as mensagens para as filas corretas. As trocas recebem mensagens dos produtores e as encaminham para as filas com base em regras de roteamento específicas. As vinculações são utilizadas para definir a relação entre as trocas e as filas.

O AMQP suporta diferentes modelos de entrega de mensagens, como confirmação de entrega (acknowledgment), que garante que as mensagens sejam entregues com sucesso, e qualidade de serviço (QoS), que permite definir níveis de prioridade para as mensagens.

O protocolo AMQP é amplamente utilizado em sistemas distribuídos e arquiteturas orientadas a mensagens, como em aplicações de mensageria, Internet das Coisas (IoT), sistemas financeiros e sistemas de notificação em tempo real.

Em resumo, o protocolo AMQP é um protocolo de mensagens assíncronas que facilita a comunicação entre sistemas distribuídos, oferecendo confiabilidade, flexibilidade e escalabilidade. Ele utiliza filas, trocas e vinculações para rotear as mensagens de forma eficiente e suporta diferentes modelos de entrega e qualidade de serviço.

Figura 1: Protocolo AMQP

2.2 RabbitMQ

O RabbitMQ é um software de mensagem assíncrona de código aberto, que implementa o protocolo AMQP (Advanced Message Queuing Protocol). Ele é amplamente utilizado como um intermediário de mensagens entre diferentes sistemas e serviços distribuídos.

O RabbitMQ fornece uma plataforma robusta para a troca de mensagens, permitindo que aplicativos e serviços se comuniquem de maneira eficiente e confiável. Ele utiliza filas de mensagens para armazenar e entregar as mensagens entre os produtores e consumidores, garantindo a entrega ordenada e controlada.

Uma das principais vantagens do RabbitMQ é sua flexibilidade e escalabilidade. Ele suporta uma variedade de padrões de troca de mensagens, como pub/sub (publicação/assinatura), roteamento direto e tópicos, permitindo que os dados sejam encaminhados de maneira adequada às necessidades específicas de cada aplicativo.

Além disso, o RabbitMQ oferece recursos avançados, como confirmações de entrega (acknowledgment), que garantem que as mensagens sejam processadas com sucesso, e recursos de persistência, que permitem que as mensagens sejam armazenadas de forma durável mesmo em caso de falhas.

Para obter mais informações sobre o RabbitMQ e como o disponibilizar para múltiplos consumidores, consulte o estudo técnico disponível no seguinte link:

 https://documentos.sistemas.ro.gov.br/books/spikes-estudos-tecnicos/page/como-disponibilizar-o-rabbitmq-para-multiplos-consumos.

2.3 GovernaTelas -em Servidor - Aba Informaçõesquestão

image.pngimage.png



image.png

2.4 RabbitMQObjeto -JSON 

O objeto JSON recebido pelo serviço de mensageria RabbitMQ é proveniente de ações realizadas na entidade "Servidor" no sistema e-Estado. Dentre as ações inclui-se: criação, atualização de dados e exclusão.

O objeto JSON contém diversos campos que representam os dados do servidor, como identificação, matrícula, tipo de vínculo, data de admissão, entre outros. Essas informações são cruciais para acompanhar e registrar o histórico dos servidores no sistema. Abaixo pode-se conferir o objeto de retorno do serviço rabbitMQ.

{
  "id": 215349,
  "matricula": 600003369,
  "tipo_vinculo_id": 7,
  "data_admissao": "15/12/2022",
  "concurso_id": null,
  "numero_decreto": null,
  "data_decreto": null,
  "numero_diario_oficial": null,
  "data_diario_oficial": null,
  "data_posse": null,
  "data_efetivo_exercicio": null,
  "cargo_efetivo_id": null,
  "cargo_cds_id": null,
  "funcao_id": null,
  "unidade_vinculo_id": 2,
  "previdencia_id": null,
  "vinculo_original_id": null,
  "estado_id": null,
  "municipio_id": null,
  "poder_id": null,
  "regime_id": null,
  "conta_fgts": null,
  "unidade_pagamento_id": null,
  "conta_pagamento_id": null,
  "padrao_id": null,
  "horas_semanais": null,
  "horas_extras": null,
  "registro_ponto_id": null,
  "pessoa_id": 1758202,
  "plantonista": null,
  "habilidade_cargo_efetivo_id": null,
  "inscricao_concurso": null,
  "nota_final_concurso": null,
  "classificacao_concurso": null,
  "pcd": null,
  "negro": null,
  "processo_judicial": null,
  "ocupa_cargo_publico": null,
  "processo_sei": null,
  "oficio_apresentacao": null,
  "municipio_concurso_lotacao_id": null,
  "data_desligamento": null,
  "siape": null,
  "atividade_privativa_cargo": null,
  "matricula_antiga": null,
  "matricula_nome": "600003369 - Lucas Teste",
  "estado": null,
  "municipio": null,
  "departamento_id": "",
  "cargo_efetivo": null,
  "cargo_cds": null,
  "concurso": null,
  "funcao": null,
  "padrao": null,
  "pessoa": {
    "id": 1758202,
    "nome": "Lucas Teste",
    "data": "2023-06-23T08:34:21.500402"
  },
  "pessoa_fisica": {
    "pessoa_id": 1758202,
    "estado_civil_id": 2,
    "sexo_id": 1,
    "escolaridade_id": null,
    "tipo_sanguineo_id": null,
    "cpf": "22794276050",
    "data_nascimento": "2003-05-10",
    "falecimento": null,
    "raca": null,
    "pcd": null,
    "tipo_nacionalidade": null,
    "nacionalidade": null,
    "pais": null,
    "estado": null,
    "naturalidade": null,
    "data_entrada": "2003-05-10",
    "pis_pasep": null,
    "email": "sorkazekna@gufum.com",
    "doador_de_sangue": null,
    "raca_id": 5,
    "tipo_nacionalidade_id": 2,
    "pais_id": 1,
    "nacionalidade_id": 1,
    "estado_id": 21,
    "naturalidade_id": 5582
  },
  "poder": null,
  "previdencia": null,
  "regime": null,
  "registro_ponto": null,
  "tipo_vinculo": {
    "id": 7,
    "nome": "Estagiário",
    "grupo": null
  },
  "unidade_vinculo": {
    "id": 2,
    "instituicao_id": 1,
    "unidade_id": null,
    "responsavel_id": 1744688,
    "nome": "Superintendência Estadual de Tecnologia da Informação e Comunicação",
    "sigla": "SETIC",
    "gestora": 1,
    "orcamentaria": 1,
    "administrativa": 1,
    "cnpj": "17.900.001/0001-95",
    "id_departamento_sinvrea": null,
    "tipo_normatizacao_id": 2,
    "numero_normatizacao": "27.577",
    "staff": null,
    "colegiada": null,
    "codigo_orcamentario": "110007",
    "data_normatizacao": "2022-11-04",
    "extincao_organograma_id": null,
    "endereco_id": 49685,
    "departamento_id": null,
    "orgao_sei_id": 73,
    "unidade_sei_id": null,
    "data_criacao": null
  },
  "unidade_pagamento": null,
  "vinculo_original": null,
  "nome": "Lucas Teste"
}

2.4 Campos Integrados

Os seguintes campos podem refletir-se em ambos os sistemas:

Tabela GovernaCampoGovernae-Estado

Obs

rh.servidorMatrículamatriculamatricula 
--Data de Admissão
admissao
objeto servidor.data_admissao 
--Data do Efetivo Exercício
data_efetivo_exercicio
objeto servidor.data_efetivo_exercicio 
--Data de Progressão
data_progressao
não existe campo que possa ser utilizado no objeto de retorno 
--Tipo de Admissão
tipo_admissao
[Admissão primeiro emprego,
Admissão com emprego anterior,
Transf. com ônus para cedente,
Transf. sem ônus para cedente,
Outros]
não existe campo que possa ser utilizado no objeto de retorno 
--tempo de serviço Federal
tempo_anterior_federal
 não existe campo que possa ser utilizado no objeto de retorno 
--tempo de serviço Estadual
tempo_anterior_estadual
 não existe campo que possa ser utilizado no objeto de retorno 
--tempo de serviço Municipal
tempo_anterior_municipal
 não existe campo que possa ser utilizado no objeto de retorno 
--tempo de serviço Afastamento
tempo_anterior_afastamento
 não existe campo que possa ser utilizado no objeto de retorno 
rh.servidor_desligamentoData do Desligamentodata_desligamentoobjeto servidor.data_desligamento 
rh.lotacao_mensalLotação de Contratação
 (id, descricao)
descricao objeto servidor.municipio_concurso_lotacao_id 
admin.pessoa_fisicaPessoa
(id, nome)
nomeobjeto servidor.pessoa
campos pessoa.id e pessoa.nome
propriedade nome = Protected - Precisa usar getNome(id) ou setNome(nome)
--CPFcpfobjeto servidor.pessoa_fisica.cpf 
--RGrgnão existe campo que possa ser utilizado no objeto de retorno 
--data de Nascimentodata_nascimentoobjeto servidor.pessoa_fisica.data_nascimento 
3. Incluir possíPossíveis soluçSoluções

Para os campos que não existem no objeto JSON de retorno do serviço RabbitMQ, a seguinte solução pode ser considerada:

  • Verificar se os campos existem no banco do e-Estado e adicioná-los ao objeto JSON caso existam
4. Incluir possíveis problemas
5. Implementação e histórias de usuários
6. Conclusão

Lorem ipsum dolor sit amet, consectetur adipisci elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur.

7.5. Referências