Ir para o conteúdo principal

Refatoração calculo financeiro sistema de folha de pagamento

Data: 19/08/22

Autores: 

  1. Diego Gonçalves de Almeida (Assessor)
  2. Erton D Avila Sotero (Assessor)
  3. Weslle Vinicius dos S. Lima (Assessor)
  4. Ádrian Rabelo Mendes (Assessor)

1. Objetivo

Realizar levantamento dena integraçrefatoração assíncronado calculo financeiro afim de Pessoaevitar eo Servidor,não entrecalculo e-Estadode xservidores Governa.por thread

2. Introdução

Afim de unificarevitar ea centralizarcorreção informaçãda falha na divisão de pessoade ethread, cadastroevitando o não calculo de servidor.servidores aleatório.

3. Desenvolvimento

IntegraçAo realizar o calculo da folha de pagamento, existe uma falha na divisão dos servidores por thread. A divisão das thread e feito total de servidores dividindo esse total por 10 (quantidade de thread simultâneo), neste calculo alguns servidores na divisão e montagem do quantitativo ficam de fora.

Se faz necessário a refatoração do método "processarParaleloCalculoFolha", melhorando a logica de divisão, deixando o resto no ultimo processamento.

Segue método atual e pontos a serem melhorados:

image.png

Na divisão atual o sistema pega o quantidade de servidores a serem calculado e divide por 10 (total de thread paralela), conforme demonstrado no exemplo abaixo:

Supondo que tenhamos um total de 2021 servidores a serem calculado.

Ex:

2021 / 10 = 202,1
como a variável "i" e do tipo inteiro o mesmo não calcula valores decimal, ficando os últimos servidores fora na lista ao adicionar na ultimo lote de processamento.

dentro do laço a variável "i" incrementa sempre mais 1 no totalizador de 202 e não o 202,1 a divisão ficaria da seguinte forma.

Ex:

10 thread cada uma com 202 -> servidores.
202 * 10 = 2020 servidores neste lote de processamento.

Neste caso o total de servidores retornado para ser realizadacalculado seria 2021 e o adicionado no lote para calculo ficaria 2020 ficando 1 servidor de fora do calculo.

image.png

Logica atual de como esta sendo calculado:

image.png

Atualmente todos os calculos efetuado pelo sistema "Governa", utiliza esta forma de montagem de lote para calculo, diate seria necessário realizar a refatoração dos seguintes calculo:

  • CadastroFolha complementar
  • Folha mensal
  • Folha de pessoa.ferias
  • CadastroFolha deDecimo documento.terceiro adiantamento
  • CadastroFolha deDecimo cidade.terceiro calculo final
  • CadastroFolha demensal bairro.lote
  • CadastroFolha decomplementar logradouro.lote
  • CadastroFolha deDecimo endereço.terceiro adiantamento lote
  • CadastroFolha deDecimo parentesco.
  • terceiro
  • Cadastrocalculo definal escolaridade.
  • Cadastro de especialização.
  • Cadastro de necessidade especial.
  • Cadastro de servidor.lote


 

  • Para integração de cadastro de pessoa, foi realizado os seguintes de-para entre cadastros auxiliares, sendo eles:
Tabela GovernaCampoGovernae-Estado
pessoa/pessoa_fisicasexoFEMINIMO("Feminino","FEM"),
MASCULINO("Masculino", "MAS");
FEMINIMO(2),
MASCULINO(1);

estado_civilSOLTEIRO("Solteiro(a)","SOL"),
CASADO("Casado(a)","CAS"),
AMASIADO("Amasiado(a)","AMA"),
DESQUITADO("Desquitado(a)","DES"),
DIVORCIADO("Divorciado(a)","DIV"),
VIUVO("Viúvo(a)","VIU"),
OUTROS("Outros","OUT"),
SOLTEIRO(2),
CASADO(1),
AMASIADO(7),
DESQUITADO(5),
DIVORCIADO(6),
VIUVO(4)

racaBRANCO("Branco","BRA"),
NEGRO("Negro","NEG"),
INDIGENA("Indígena","IND"),
PARDO("Pardo","PAR"),
MULATO("Mulato","MUL"),
CABOCLO("Caboclo","CAO"),
CAFUSO("Cafuso","CAF"),
CABRA("Cabra","CAR");
BRANCO(2),
NEGRO(4),
INDIGENA(3),
PARDO(5),
MULATO(4),
CABOCLO(4),
CAFUSO(5),
CABRA(1);

tipo_sanguineoA("A"), 
B("B"), 
AB("AB"), 
O("O");
A(4,5), 
B(7,8), 
AB(3,6), 
O(1,2);

escolaridadeANALFABETO("Analfabeto","ANA",1),
ATE_QUINTO_ANO_INCOMP_FUNDAMENAL("Até o 5º Ano Incompleto","5AI",2),
QUINTO_ANO_COMPLETO_FUNDAMENTAL("5º Ano Completo","5AC",3),
SEXTO_ANO_AO_NONO_ANO_INCOMP_FUNDAMENTAL("Do 6º Ao 9º Ao Incompleto","69I",3),
FUNDAMENTAL_COMPLETO("Fundamental Completo","FUC",4),
MEDIO_INCOMPLETO("Médio Incompleto","MEI",4),
MEDIO_COMPLETO("Médio Completo","MEC",5),
SUPERIOR_INCOMPLETO("Superior Incompleto","SUI",5),
SUPERIOR_COMPLETO("Superior Completo","SUC",6),
MESTRADO("Mestrado","MES",7),
DOUTORADO("Doutorado","DOU",8);
ANALFABETO(2),
ATE_QUINTO_ANO_INCOMP_FUNDAMENAL(3),
QUINTO_ANO_COMPLETO_FUNDAMENTAL(3),
SEXTO_ANO_AO_NONO_ANO_INCOMP_FUNDAMENTAL(3),
FUNDAMENTAL_COMPLETO(3),
MEDIO_INCOMPLETO(4),
MEDIO_COMPLETO(4),
SUPERIOR_INCOMPLETO(5),
SUPERIOR_COMPLETO(6),
MESTRADO(8),
DOUTORADO(9);
pessoa_documentotipo_documentoCPF("Cadastro Pessoa Física", "CPF", "Número", null, 10, 2, null), 
CNH("Carteira Nacional de Habilitação", "CNH", "Categoria", null, 10, 2, null), 
CTPS("Carteira de Trabalho Previdência Social", "CTP", "Série", null, 7, 5, null), 
TITULO_ELEITOR("Título de Eleitor", "TE", "Zona", "Seção", 20, 5, 5), 
CONSELHO_PROFISSIONAL("Órgão de Classe", "CRP", null, null, 20, 10, null), 
PIS_PASEP_NIT("PIS/PASEP/NIT", "NIT", null, null, 11, null, null), 
CEI("Cadastro Específico de INSS", "CEI", null, null, 20, null, null), 
PASSAPORTE("Passaporte", "PAS", null, null, 20, null, null), 
CERTIDAO_NASCIMENTO("Certidão de Nascimento", "CER", "Livro", "Folha", 50, 10, 10), 
CERTIDAO_CASAMENTO("Certidão de Casamento", "CAS", "Livro", "Folha", 50, 10, 10), 
CERTIFICADO_DISPENSA_INCORPORACAO("Certificado de Dispensa de Incorporação", "CDI", null, null, 50, null, null), 
DOCUMENTO_ESTRANGEIRO("Documento Estrangeiro", "DES", null, null, 50, null, null),
CERTIDAO_MILITAR("Certidão Militar", "CEM", "Série", null, 7, 10, null);
CPF(21), 
CNH(5), 
CTPS(8), 
TITULO_ELEITOR(3), 
CONSELHO_PROFISSIONAL(19), 
PIS_PASEP_NIT(11), 
CEI(null), 
PASSAPORTE(1), 
CERTIDAO_NASCIMENTO(4), 
CERTIDAO_CASAMENTO(18), 
CERTIFICADO_DISPENSA_INCORPORACAO(10), 
DOCUMENTO_ESTRANGEIRO(1),
CERTIDAO_MILITAR(10);
tipo_logradourodescricaoRUATodo cadastro de rua, realizar input na integração como tipo "RUA".
pessoa_enderecotipoDOMICILIO("Domicílio", "DOM"),
CORRESPONDENCIA("Correspondência", "COR");
Todo cadastro de origem deste sistema realizar input como "DOMICILIO".

principalcampo 1 ou nullaplicar esta forma no cadastro de endereço de pessoa
pessoa_contatotipo_contatoEMAIL("Email", "EML", "", "60"),
RESIDENCIAL("Telefone Residencial", "RES", "(99) 9999-9999?9", "20"),
COMERCIAL("Telefone Comercial", "COM", "(99) 9999-9999?9", "20"),
CELULAR("Telefone Celular", "CEL", "(99) 9999-9999?9", "20"),
FAX("Fax", "FAX", "(99) 9999-9999?9", "20"),
RECADO("Telefone para Recado", "REC", "(99) 9999-9999?9", "20");
EMAIL(3),
RESIDENCIAL(4),
COMERCIAL(1),
CELULAR(2),
FAX(8),
RECADO(6);
pessoa_parentescotipo_parentescoPAI("Pai", "PAI", 1),
MAE("Mãe", "MAE", 1),
CONJUGE("Cônjuge", "CON", 1),
FILHO("Filho(a)", "FIL", 1),
IRMAO("Irmão(ã)", "IRM", 2),
AVO("Avô(ó)", "AVO", 2),
NETO("Neto(a)", "NET", 2),
TIO("Tio(a)", "TIO", 3),
SOBRINHO("Sobrinho(a)", "SOB", 3),
BISAVO("Bisavô(ó)", "BIV", 3),
BISNETO("Bisneto(a)", "BIN", 3),
TRISAVO("Trisavô(ó)", "TRV", 4),
TRINETO("Trineto(o)", "TRN", 4),
PRIMO("Primo(a)", "PRI", 4),
SOGRO("Sogro(a)", "SOG", 1),
GENRO("Genro", "GEN", 1),
NORA("Nora", "NOR", 1),
CUNHADO("Cunhado(a)", "CUN", 2),
PADRASTO("Padrasto", "PAD", 1),
MADRASTO("Madrasta", "MAD", 1),
ENTEADO("Enteado(a)", "ENT", 1),
FILHOGEMEO("Filho(a) Gemeo(a)", "FGM", 1),
OUTROS("Outros", "OUT", 2);
PAI(3),
MAE(4),
CONJUGE(1),
FILHO(2),
IRMAO(10),
AVO(5),
NETO(11),
SOBRINHO(13),
BISAVO(14),
BISNETO(12),
SOGRO(8),
ENTEADO(9),
OUTROS(6);
pessoa_necessidade_especialnome_necessidade1 - Doença
2 - Deficiência
3 - Distúrbio
4 - Deficiência permanente
5 - Incapacidade (deficiência transitória)
6 - Deficiência física
7 - Deficiências sensoriais
8 - Deficiência mental
9 - Superdotação/superdotados
10 -    Menosvalia
11 -    Doença mental
12 -    Surdos
2 - (2,4)
11 - (3)
12 – (5)
servidortipo_adminissaoADMISSAO_PRIMEIRO_EMPREGO("Admissão primeiro emprego.","APE"),
ADMISSAO_EMPREGO_ANTERIOR("Admissão com emprego anterior.","AEA"),
TRANSFERENCIA_COM_ONUS_CEDENTE("Transf. com ônus para cedente.","TCO"),
TRANSFERENCIA_SEM_ONUS_CEDENTE("Transf. som ônus para cedente.","TSO"),
OUTROS("Outros","OUT");
Toda integração de servidor, realizar o input do tipo de admissão como "ADMISSAO_PRIMEIRO_EMPREGO".
  • Tabelas entre o sistema que devera conter na integração:
Governae-EstadoObservação
admin.pessoa / admin.pessoa_fisicacadastro_geral.pessoa / cadastro_geral.pessoa_fisica
admin.pessoa_documentocadastro_geral.pessoa_documento / configuracoes.metadata / configuracoes.metakey e configuracoes.metakey_registro
admin.cidadecadastro_geral.cidade
admin.bairrocadastro_geral.pessoa_endereco
admin.tipo_logradourocadastro_geral.pessoa_endereco
admin.logradourocadastro_geral.pessoa_endereco
admin.localizacaocadastro_geral.pessoa_endereco
admin.pessoa_enderecocadastro_geral.pessoa_endereco
admin.pessoa_contatocadastro_geral.pessoa_contato
admin.pessoa_parentescocadastro_geral.pessoa_fisica_parentescoEm ambos o sistema para se tornar um parente precisa esta cadastrada como pessoa, então a integração deve conter este cadastro e vinculo com a pessoa.
admin.necessidade_especialcadastro_geral.pessoa_fisica_deficiencia
rh.servidorrecursos_humanos.servidorapos realizar o input dos dados de pessoa, realizar o vinculo da pessoa ao servidor.
4. Conclusão

Realizar uma inputrefatoração da logica de um cadastrodivisão de pessoa e vinculado a um servidor nopor e-Estado, e esta criação ou manutenção refletir no sistemalote de "Recursosprocessamento Humanosparalelo, -assim Governa".evitando o não calulo de servidores aleatoriamente conforme demonstrado acima.