| Data de elaboração | 24/02/2024 |
| Responsável pelo estudo | Ádrian Rabelo Mendes (Assessor), Diego Gonçalves de Almeida (Assessor), Jônatas Legal (Técnico em Tecnologia da Informação e Comunicação) (Assessor), Rodrigo Stefano Sales Nascimento (Assessor) |
| Equipe do estudo | CAOS |
| Alvo | Sistema Governa |
| Origem | Objetivo estratégico: viabilizar a integração com o eSocial PRO. |
| Objetivo | Para viabilizar a integração com o eSocial PRO |
| Documentação correlata | Tabela 03 - Natureza das Rubricas da Folha de Pagamento |
| Documentação correlata | MANUAL DE ORIENTAÇÃO DO eSOCIAL |
Este estudo técnico visa explorar soluções para a implementação da tabela de rubricas do eSocial atualizadas no banco de dados do sistema Governa, especificamente no módulo de Gestão de RH.
A tabela de rubricas é uma estrutura que detalha as verbas da folha de pagamento dos órgãos publicos, correlacionando-as à Tabela 3 – Natureza das Rubricas do eSocial.
Ela é essencial para a inclusão, alteração e exclusão de registros de rubricas, e suas informações são fundamentais para a validação dos eventos de remuneração transmitidos ao eSocial.
Para prestar as informações corretamente, os órgãos devem cadastrar as rubricas seguindo o leaute da versão S-1.0 do eSocial, informar os tipos de rubricas, correlacioná-las com a Tabela 3 do eSocial, e definir as incidências tributárias.
Segundo o manual de orientação do eSocial, em seu capítulo 8.3.1: - Ao enviar as informações de remuneração dos trabalhadores/servidores (folha de pagamento), as rubricas da folha devem constar da tabela de rubricas.
Atualmente, o sistema Governa Recursos Humanos não contempla a informação da rubrica no ato do cadastramento das verbas.
A implementação no Governa exigirá o mapeamento preciso das rubricas do eSocial para a estrutura do sistema, garantindo integridade e atualidade dos dados.
A tabela rubrica no eSocial é definida pela classe de S1010Rubrica.sql contida na pasta e-social-pro-2 / eSocial / ESocial.Infraestrutura.Database / dbo / Tables do projeto. Sua estrutura consiste na definição dos seguntes campos:
CREATE TABLE [dbo].[S1010Rubrica]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[IdEvento] NVARCHAR (36) NULL,
[StatusEvento] INT NOT NULL,
[TipoEvento] INT NOT NULL,
[EventoPai] INT NULL,
[Evento] NVARCHAR (MAX)NULL,
[DataCarga] DATETIME NULL,
[ProtocoloEnvio] NVARCHAR (MAX)NULL,
[NumeroRecibo] NVARCHAR (MAX)NULL,
[DataEnvio] DATETIME NULL,
[Erros] NVARCHAR (MAX)NULL,
[TipoInscricao] INT NOT NULL,
[NumeroInscricao] NVARCHAR(15) NOT NULL,
[CodigoRubrica] NVARCHAR(30) NULL,
[IdentificadorTabela] NVARCHAR(8) NULL,
[InicioValidade] DATETIME NULL,
[FimValidade] DATETIME NULL,
[DescricaoRubrica] NVARCHAR(100) NULL,
[NaturezaRubrica] INT NULL,
[TipoRubrica] INT NULL,
[IncidenciaContrPrevidenciaSocial] NVARCHAR(2) NULL,
[IncidenciaImpostoRenda] NVARCHAR(4) NULL,
[IncidenciaFGTS] NVARCHAR(2) NULL,
[IncidenciaContrRegimeProprioPrev] NVARCHAR(2) NULL,
[TetoRemuneratorio] CHAR NULL,
[Observacao] NVARCHAR(255) NULL,
[LoteId] INT NULL
CONSTRAINT [PK_Rubricas] PRIMARY KEY CLUSTERED ([Id] ASC)
)
GO
CREATE NONCLUSTERED INDEX [IX_Rubrica_StatusEvento_NumInscricao_LoteId] ON [dbo].[S1010Rubrica] ([StatusEvento], [NumeroInscricao], [LoteId]);
GO
CREATE NONCLUSTERED INDEX [IX_Rubrica_NumInscricao_InicioValidade_Id] ON [dbo].[S1010Rubrica] ([NumeroInscricao], [InicioValidade],[Id]) INCLUDE ([IdEvento], [StatusEvento], [TipoEvento], [EventoPai], [Evento], [DataCarga], [ProtocoloEnvio], [NumeroRecibo], [DataEnvio], [Erros], [TipoInscricao], [CodigoRubrica], [IdentificadorTabela], [FimValidade], [DescricaoRubrica], [NaturezaRubrica], [TipoRubrica], [IncidenciaContrPrevidenciaSocial], [IncidenciaImpostoRenda], [IncidenciaFGTS], [IncidenciaContrRegimeProprioPrev], [TetoRemuneratorio], [Observacao], [LoteId]);
GO
CREATE NONCLUSTERED INDEX [IX_Rubrica_StatusEvento_NumInscricao] ON [dbo].[S1010Rubrica] ([StatusEvento], [NumeroInscricao]);
GO
CREATE NONCLUSTERED INDEX [IX_Rubrica_StatusEvento_NumInscricao_TipoEvento] ON [dbo].[S1010Rubrica] ([StatusEvento], [NumeroInscricao],[TipoEvento]);
GO
CREATE NONCLUSTERED INDEX [IX_Rubrica_NumInscricao] ON [dbo].[S1010Rubrica] ([NumeroInscricao]) INCLUDE ([StatusEvento]);
GO
CREATE NONCLUSTERED INDEX [IX_S1010Rubrica_IdEvento] ON [dbo].[S1010Rubrica] ([IdEvento]);
GO
CREATE NONCLUSTERED INDEX [IX_S1010Rubrica_NumeroInscricao_CodigoRubrica_IdTabela_InicioValidade_Id]
ON [dbo].[S1010Rubrica] ([NumeroInscricao], [CodigoRubrica], [IdentificadorTabela], [InicioValidade],[Id]);
GO
Os índices não agrupados criados após a definição da tabela S1010Rubrica são projetados para otimizar as operações de busca no banco de dados, facilitando a recuperação rápida de dados baseada em critérios específicos como status do evento, numero de inscrição, tipo de evento, entre outros. Cada índice tem sua combinação unica de colunas, refletindo as consultas mais frequentes esperadas pela aplicação, o que ajuda a reduzir o tempo de resposta das consultas ao minimizar o numero de registros que precisam ser examinados.
Com objetivo de facilitar a integração, a tabela criada no Governa deverá incluir todos os campos contidos na tabela original, mantendo os tipos de dados e a semântica. Essa abordagem garante não apenas uma transição suave de dados, mas também uma gestão eficiente, otimizando a correspondência entre as tabelas do sistema Governa e do eSocial.

Figura 1 - Estrutura desejada
Esta abordagem propõe a criação de uma tabela de rubricas no banco de dados do governa juntamente com a inserção dos dados de acordo com a tabela de rubrica do eSocial, acompanhada do desenvolvimento das classes de repositório, para gestão dessas informações. Este abordagem visa facilitar a consulta e utilização das rubricas em diversas partes do sistema Governa, especialmente na gestão de verbas, promovendo assim uma maior flexibilidade e eficiência no uso desses dados.
A simplicidade deste modelo não apenas permite uma integração rápida com os dados da tabela de rubricas do eSocial, mas também garante a utilização das informações de rubricas em qualquer parte do sistema Governa. Além disso, essa abordagem facilita a manutenção e escalabilidade do sistema, visto que centraliza a gestão das rubricas em um unico local, reduzindo a complexidade.
Etapas da abordagem:
| Etapa | Descrição |
|---|---|
| Criar Tabela de Rubricas no Banco | Implementar no banco de dados a estrutura para as rubricas, seguindo o modelo do eSocial. |
| Desenvolver Modelo de Dados (Entity) | Criar a classe de entidade em JPA para mapear as rubricas. |
| Implementar Repositório (Repository) | Desenvolver o repositório JPA para operações CRUD das rubricas. |
| Exportar Dump da Tabela do eSocial | Exportar a estrutura e dados da tabela de rubricas do eSocial. |
| Popular Banco do Governa com o Dump do eSocial | Importar os dados do dump para o banco de dados do Governa, populando a tabela de rubricas. |
| Integrar Rubricas na Tela de Verba | Utilizar as rubricas na interface desejada. |
Critérios da abordagem:
| Critério | Detalhamento |
|---|---|
| Esforço | 6 a 10 cards de história |
| Tempo Estimado | 1 sprint |
Esta abordagem expande a solução apresentada no capítulo 3.1, incluindo a implementação completa do CRUD (Create, Read, Update, Delete) para a tabela de rubricas. Além da criação da tabela no banco e da integração dos dados do eSocial, esta proposta abrange o desenvolvimento de interfaces de usuário para listagem, edição, adição e exclusão das rubricas, assim como as classes de repositório, modelo, e DTOs necessárias para suportar estas operações no backend.
Considerando que as atualizações na tabela de rubricas são eventos raros, a implementação de um sistema CRUD completo pode não ser a solução mais eficiente em termos de tempo e esforço. Esta consideração leva em conta que, em face de eventuais mudanças na tabela de rubricas do eSocial federal, as modificações necessárias poderiam ser realizadas diretamente no banco de dados de maneira simples e rápida, sem a necessidade de uma interface de usuário complexa para tais operações.
Etapas da abordagem:
| Etapa | Descrição |
|---|---|
| Criar Tabela de Rubricas no Banco | Implementar no banco de dados a estrutura para as rubricas, seguindo o modelo do eSocial. |
| Desenvolver Modelo de Dados (Entity) | Criar a classe de entidade em JPA para mapear as rubricas. |
| Implementar Repositório (Repository) | Desenvolver o repositório JPA para operações CRUD das rubricas. |
| Desenvolver DTOs | Criar Data Transfer Objects para transferência de dados entre a camada de negócios e a interface de usuário. |
| Exportar Dump da Tabela do eSocial | Exportar a estrutura e dados da tabela de rubricas do eSocial. |
| Popular Banco do Governa com o Dump do eSocial | Importar os dados do dump para o banco de dados do Governa, populando a tabela de rubricas. |
| Integrar Rubricas na Tela de Verba | Utilizar as rubricas na interface de gestão de verbas. |
| Frontend - Listagem de Rubricas | Desenvolver a interface de usuário para listar as rubricas existentes. |
| Frontend - Adição de Rubrica | Criar a interface de usuário para adicionar novas rubricas ao sistema. |
| Frontend - Edição de Rubrica | Implementar a interface de usuário para editar rubricas existentes. |
| Frontend - Visualização de Rubrica | Desenvolver a página de visualização de detalhes de cada rubrica. |
|
Critérios da abordagem:
| Critério | Detalhamento |
|---|---|
| Esforço | 11 a 15 cards de história |
| Tempo Estimado | 2 ou 3 sprints |
Esta abordagem incorpora todas as funcionalidades das anteriores somadas com a necessidade de criação de uma camada de integração entre o eSocial e o sistema Governa através do serviço de messageria RabbitMQ. A complexidade desta solução reside na necessidade de modificar o sistema eSocial para enviar eventos de criação, edição e exclusão de rubricas para o RabbitMQ, além da necessidade de desenvolvimento de um sistema novo em Spring Boot que escute estas mensagens e atualize o sistema Governa de acordo com as mensagens recebidas.
As etapas abaixo contemplam a integração de informações da tabela de rubrica do eSocial para o sistema Governa, garantindo que alterações no eSocial se reflitam automaticamente no Governa. No entanto, surgem desafios relacionados à consistência dos dados quando as rubricas são editadas diretamente no Governa. Isso pode criar discrepâncias entre os sistemas, resultando em potenciais inconsistências que comprometem a integridade dos dados. A solução requer mecanismos adicionais de sincronização ou políticas de gestão de dados que assegurem a uniformidade das informações em ambos os sistemas.
Etapas da abordagem:
| Etapa | Descrição |
|---|---|
| Criar Tabela de Rubricas no Banco | Implementar no banco de dados a estrutura para as rubricas, seguindo o modelo do eSocial. |
| Desenvolver Modelo de Dados (Entidade) | Criar a classe de entidade para mapear as rubricas. |
| Implementar Repositório (Repositorio) | Desenvolver o repositório JPA para operações CRUD das rubricas. |
| Desenvolver DTOs | Criar Data Transfer Objects para transferência de dados entre a camada de negócios e a interface de usuário. |
| Exportar Dump da Tabela do eSocial | Exportar a estrutura e dados da tabela de rubricas do eSocial. |
| Popular Banco do Governa com o Dump do eSocial | Importar os dados do dump para o banco de dados do Governa, populando a tabela de rubricas. |
| Integrar Rubricas na Tela de Verba | Utilizar as rubricas na interface desejada. |
| Frontend - Listagem de Rubricas | Desenvolver a interface de usuário para listar as rubricas existentes. |
| Frontend - Adição de Rubrica | Criar a interface de usuário para adicionar novas rubricas ao sistema. |
| Frontend - Edição de Rubrica | Implementar a interface de usuário para editar rubricas existentes. |
| Frontend - Visualização de Rubrica | Desenvolver a página de visualização de detalhes de cada rubrica. |
| Modificar eSocial para Envio ao RabbitMQ | Adaptar o eSocial para enviar eventos de rubricas ao RabbitMQ. |
| Criar Queue no RabbitMQ | Configurar as filas no RabbitMQ para receber os eventos. |
| Desenvolver Sistema de Integração em Spring Boot | Criar um serviço em Spring Boot para escutar e processar as mensagens do RabbitMQ. |
| Espelhar Eventos no Governa | Atualizar o sistema Governa com as informações recebidas, refletindo as alterações das rubricas do eSocial. |
Critérios da abordagem:
| Critério | Detalhamento |
|---|---|
| Esforço | 15 a 30 cards de história |
| Tempo Estimado | Para quantificar, seria necessário consultar ambas as equipes (Governa e eSocial). |
A solução apresentada no capítulo 3.1, destaca-se pela sua eficiência e praticidade, focando na criação da tabela de rubricas no banco de dados do Governa bem como o desenvolvimento de classes de repositório e persistência. Este método não só simplifica a integração com o eSocial, mas também promove uma gestão de dados centralizada e de fácil manutenção, sendo ideal para este departamento, pois o mesmo busca agilidade sem comprometer a precisão dos dados. Considerando sua implementação rápida e o custo-benefício, a solução 1 é a escolha acertada para otimizar processos e garantir a conformidade com o eSocial.