Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

39
Projeto de Motor de Cálculo de Folha de Pagamento Orientado a Objeto

Transcript of Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Page 1: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Projeto de Motor de Cálculo de Folha de Pagamento Orientado a Objeto

Page 2: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Projeto de Motor de Cálculo de Folha de Pagamento Orientado a Objeto

1. Folha de pagamento não é a atividade fim da maioria das empresas. Porém, TODAS as empresas possuem, logo o mercado é grande

2. Precisa ter bom desempenho

3. Precisa ser flexível e altamente customizável

4. Legislação é muito complexa, tendendo a produzir código fonte complexo e confuso

Page 3: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

public class VerbaAvisoPrevio: VerbaBase

{

public VerbaAvisoPrevio(CalculoBase calculoBase):base(calculoBase)

{

}

public override void DoCalcula()

{

this.Valor = 0;

Log.Append("Dias de Aviso: "+Funcionario.Rescisao.DiasAviso.ToString());

if (Funcionario.Rescisao.DiasAviso > 0)

this.Valor = Funcionario.Rescisao.DiasAviso *

Funcionario.SalarioDiarioCalculado(true, ConsIncSalario);

Log.Append("Valor do Aviso Prévio: "+valor.ToString());

}

}

Exemplo: Verba de Aviso Prévio

Objetivo final da arquitetura é alcançar o máximo de clareza no código fonte

Todas as regras da folha são

desenvolvidas como mostrado

no trecho acima em negrito

Page 4: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

public class VerbaAvisoPrevioNova: VerbaAvisoPrevio

{

public VerbaAvisoPrevioNova(CalculoBase calculoBase):base(calculoBase)

{

}

protected override void DoCalcula()

{

this.Valor = 0;

Log.Append("Dias de Aviso: "+Funcionario.Rescisao.DiasAviso.ToString());

if (Funcionario.Rescisao.DiasAviso > 10)

this.Valor = (Base.DoCalcula() * 2);

}

}

Exemplo: Customização da Verba de Aviso Prévio

Objetivo final da arquitetura é permitir alto nível de customização

Dentro da nova classe de verba

descendente temos acesso à todos os

objetos de cálculo, permitindo a criação de

regras de cálculo descendentes

Page 5: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Cálculo Base

Cálculo FériasCálculo Folha Normal Cálculo 13º. Cálculo Rescisão

• Os vários tipos de cálculos

são objetos que descendem de

um ancestral único.

• Este ancestral implementa

coleções de objetos comuns,

como por exemplo Funcionários

• Cada cálculo é identificado por um ID.

• Quando um cálculo é solicitado um objeto

responsável por iniciar a execução cria

dinâmicamente a classe de cálculo correspondente

de acordo com parâmetros cadastrados no banco

de dados

Diagrama de classes por tipo de cálculo

Page 6: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Solicitação de

execução do Cálculo

“FOLHANORMAL”

Cria Classe

CalculoFolhaNormal

e dispara

execução

ID “FOLHANORMAL” é:

Classe:

“CalculoFolhaNormal”

Assembly:

FolhaBrasil.dll

ID Classe,

Assembly

Este é o primeiro ponto onde é

possível customização: Podemos

trocar um tipo de cálculo inteiro

por outro bastando alterar suas

informações de criação no banco

de dados.

Executa

Mecanismo de criação de Objetos de Tipo Cálculo

Page 7: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Mecanismo de criação de Objetos de Tipo Cálculo

Tipos de Cálculo são

armazenados em DLLs

independentes

Page 8: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

CalculoFolhaNormal

iniciado

Classe de cálculo ancestral carrega os objetos de

cálculo dinâmicamente à partir de seus IDs.

ID “FUNCOBJ” é:

Classe:

“Funcionario”

Assembly:

FolhaBrasil.dll

ID Classe,

Assembly

Objeto Funcionário

Criado e carregado

Objeto Sindicato

Criado e carregado

Etc...

Cada objeto de cálculo tem seu próprio ID e é

carregado de acordo com parâmetros do banco de

dados.

Mecanismo de criação de Objetos de Cálculo

Page 9: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Cálculo de Folha Normal

Sindicato

Afastamentos

Dependentes

Cargo

Vale Transporte

Pensionistas

Verbas

Outros...

Ao final da inicialização teremos toda a

árvove de objetos de cálculo criada

dinâmicamente.

Este é o segundo ponto onde é possível

customização: Podemos trocar qualquer

objeto de cálculo por outros bastando alterar

suas informações de criação no banco de

dados.

Funcionarios

Tabela INSS

Tabela IR

CalculoMedia

Outros...

Funcionário

Mecanismo de criação de Objetos de Cálculo

Page 10: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Classe Funcionario

Original

Class Funcionario

Descendente

Por exemplo para customizar o objeto Funcionário,

devemos descender da classe Funcionário e fazer

“override” nos métodos desejados

ID “FUNCOBJ” é:

Classe:

“FuncionarioDesc”

Assembly:

FolhaBrasilCustom.dll

Criamos nova DLL e cadastramos no Banco de

Dados. O executor de cálculos irá agora criar esta

nova classe e não a original.

Isso vale para qualquer objeto de cálculo.

Mecanismo de Customização de Objetos de Cálculo

Page 11: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Cálculo de Folha Normal

Sindicato

Afastamentos

Dependentes

Cargo

Vale Transporte

Pensionistas

Verbas

Outros...

Funcionarios

Tabela INSS

Tabela IR

CalculoMedia

Outros...

FuncionárioDescendente

O novo objeto de negócio é carregado e encaixado

na árvore de objetos de negócio de forma

transparente.

Isso vale para qualquer objeto de cálculo.

Mecanismo de Customização de Objetos de Cálculo

Page 12: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Cálculo de Folha Normal Funcionarios Funcionário

Verbas Envelope

VerbaHorasTrabalhadas

VerbaInssFolha

VerbaFgts

VerbaInsalubridade

Verbas Automaticas

VerbaX

VerbaY

VerbaZ

Cada Verba é também um objeto.

Cada tipo de cálculo pode possuir uma coleção de verbas a serem lançadas para todos os

funcionários.

Cada Funcionário possui sua própria coleção de verbas que deverão ser calculadas para ele.

Cada Verba possui programado dentro de si o cálculo correspondente.

Objetos de Cálculo especiais: Verbas

Page 13: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Funcionário.Calcula();

Resultado da execução da Verba X

+/-

Resultado da execução da Verba Y

+/-

Resultado da execução da Verba Z

=

Resultado

VerbaX.Calcula();

VerbaY.Calcula();

VerbaZ.Calcula();

A máquina de cálculo trabalha apenas

chamando o método “Calcula” de cada Verba

lançada.

Mecanismo de Lançamento de Verbas

Page 14: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Cálculo de Folha Normal Funcionarios Funcionário

Verbas Envelope

VerbaHorasTrabalhadas

VerbaInssFolha

Nova Verba Horas Extras

Nova VerbaInsalubridade

Verbas Automaticas

Nova VerbaX

Nova VerbaY

VerbaZ

Para customizar um cálculo devemos substrituir

inteiramente uma verba por outra descendente e

implementar as novas funcionalidades.

Mecanismo de Customização de Verbas

Page 15: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

VerbaInssBase

VerbaInssFolha VerbaInss13 VerbaInss13Rescisão

VerbaBase

Todas as verbas são criadas dentro de uma estrutura de classes seguindo

uma hierarquia lógica, com encapsulamento e reaproveitamento de

programação. Já existem 46 verbas programadas na lib que compõem o

cálculo de folha básico.

Para customizar os cálculos novas verbas podem ser criadas, e outras

substituídas.

Dessa forma é possivel evitar programação do tipo “if parâmetro then”.

A utilização de parâmetros fica restrita aos casos onde a legislação exige

que se mexa no código básico.

VerbaInssFolha X

Mecanismo de Especialização de Verbas

Page 16: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Mecanismo de Especialização de Verbas

Page 17: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Mecanismo de Especialização de Verbas

Page 18: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Tabela de Verbas

Page 19: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Motor de Cálculo é composto por 90 objetos

Page 20: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Cálculo de Folha Normal

Sindicato

Outros...

FuncionárioDescendente

Todos os objetos possuem o acesso a dados centralizado.

Toda a programação é baseada nas propriedades dos objetos e não

em colunas de tabelas.

Fazendo override em alguns métodos é possível utilizar outros bancos

de dados com a mesma máquina de cálculo, pois toda a programação

é sobre as propriedades dos objetos.

LoadData()

LoadData()

LoadData()

LoadData()SaveData()

Acesso a Dados

Page 21: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Objetos de Cálculo

Objetos de Cálculo

Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaTFC.dll

Banco de Dados

TFC

Novos Objetos de Cálculo

Novos Objetos de Cálculo

Novos Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaSAP.dll

Banco de Dados

SAP/R3

Herança dos objetos

de cálculo

e registro no banco

de dados

LoadData()

LoadData()

Apenas os métodos

LoadData() e

SaveData() são

reescritos

Os novos objetos continuam com o mesmo cálculo de folha

programado, mas agora leem e gravam de tabelas do banco

SAP/R3

Trabalhando com Outros Bancos de Dados

Page 22: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Objetos de Cálculo

Objetos de Cálculo

Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaBrasil.dll

Novos Objetos de Cálculo

Novos Objetos de Cálculo

Novos Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaPortugal.dll

Novos Objetos de Cálculo

Novos Objetos de Cálculo

Novos Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaMexico.dll

Desenvolver outras folhas de pagamento

para outros países não significa apenas

alterar alguns parâmetros, e sim escrever

todos os objetos de cálculo e verbas que

aquela determinada legislação exige.

Não existe outra maneira de se fazer isso,

entretanto esta biblioteca auxilia a tarefa do

seguinte modo:

1- Fornece a máquina de cálculo com todos

os seus recursos;

2- Fornece as classes básicas e a

metodologia necessária para guiar o

desenvolvimento acelerado e organizado;

É um esquema muito parecido com o

mecanismo fornecido pelo SAP/R3 para a

localização de sua folha de pagamento para

os diversos países.

Folha de Pagamento para Outros Países

Page 23: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Férias para empresa X

13º. Para empresa X

Férias para empresa Z

A máquina de cálculo é 100% Thread-Safe, sendo possível a

execução de cálculos paralelos para diferentes bancos,

empresas, funcionários, tipos, etc...

Em um mesmo computador podem ser executados diversos

cálculos de folha ao mesmo tempo.

Folha Normal para empresa W

Cálculos em Paralelo

Page 24: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Férias para empresa X

13º. Para empresa X

Férias para empresa Z

A máquina de cálculo oferece serviço de geração de LOG

pelo programador, muito útil para geração de logs “memória

de cálculo”.

Não há necessidade de se preocupar onde gravar um log

nem qual o nome do mesmo. A Máquina de Cálculo se

encarrega de alocar um espaço exclusivo para cada

execução garantindo que não haverá conflitos de acesso.

Estes Logs podem ser facilmente acessados posteriormente

para conferência dos valores calculados.

Folha Normal para empresa W

LOG

Log de Dados

Page 25: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Férias para empresa X

13º. Para empresa X

Férias para empresa Z

A Máquina de Cálculo está preparada para ser executada em

“batch”, podendo ser disparada por um scheduler qualquer.

(*) Um componente de scheduler está sendo desenvolvido para a

biblioteca.

Folha Normal para empresa W

Agendamento de Cálculos

Page 26: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Objetos de Cálculo

Objetos de Cálculo

Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaBásica.dll

Um cálculo de folha de pagamento bem

desenvolvido utilizando essa biblioteca e

seguindo sua metodologia permite:

1- Desenvolvimento de versões de uma

mesma Folha de Pagamento para

trabalharem com a base de dados do

PeopleSoft, SAP/R3, outros...

PeopleSoft

SAP/R3

Outos

Motor de Cálculo como componente de outros produtos

Page 27: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Objetos de Cálculo

Objetos de Cálculo

Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaBásica.dllWeb

Win32

WinForms

SAP Business One

Um cálculo de folha de pagamento bem

desenvolvido utilizando essa biblioteca e

seguindo sua metodologia permite:

2- Utilização do mesmo módulo de Cálculo

com diferentes Front-End

Microsoft Office

Motor de Cálculo como componente de outros produtos

Page 28: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Objetos de Cálculo

Objetos de Cálculo

Objetos de Cálculo

Máquina de Cálculo: DLL: FolhaBásica.dllPortugal

Mexico

Argentina

Espanha

Com esta biblioteca poderíamos:

3- Licenciar a biblioteca para que parceiros

pelo mundo afora desenvolvam folhas de

pagamento para seus respectivos países e se

integrem por exemplo ao SAP Busines One

ou Microsoft Small Office Accounting

Itália

Motor de Cálculo como componente de outros produtos

Page 29: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Exemplo de Cálculo da Folha de Pagamento

Executado à partir de um programa

Windows - “WinForms”.

Os objetos de cálculos estão

Hospedados como Web Services

Page 30: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Exemplo de Cálculo da Folha de Pagamento

Executado à partir do Excel.

Os objetos de cálculos estão

Hospedados como Web Services

Page 31: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Exemplo de Cálculo da Folha de Pagamento

Executado à partir do SAP Business One

Page 32: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Menu da folha de pagamento criado

no SAP Business One

Inicio do desenvolvimento do Front-End da

Folha de Pagamento em

SAP Business One

Page 33: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Tabelas da folha de pagamento criadas

no SAP Business One

Page 34: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Inicio do desenvolvimento do

cadastro de Funcionários

Page 35: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Salário Maternidade

Verbas Automáticas

Pgto. do Adiantamento

Desconto IRRF

Os processos são customizados pelo usuário, com

verbas automáticas, previamente cadastradas.

E no momento da execução, ainda é possível lançar

outras verbas manualmente.

Em um mesmo recibo de pagamento, são acumulados

quantos processos forem necessários.

Cada processo pode possuir verbas calculadas automáticamente

Lançamento de VT

VerbaX

VerbaY

Verbas Automáticas

Salário Maternidade

Desconto INSS

Desconto IRRF

VerbaX

Verbas Automáticas

Desconto de VT

Total entregue de VT

VerbaX

VerbaY

Adiantamento Quinzenal

Page 36: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Valor Férias

Adicional 1/3

Abono Pecuniário

Férias

Férias Vencidas

Férias Proporcionais

13o. Indenizado

Rescisão

2ª.Parcela

Adiantamento 1a.Parc.

INSS 13o.

13º. Salário

Processos podem ter verbas fixadas pelo sistema

Verba X

Verba Y

Verba X

Verba Y

Multa 40% FGTS

Verba X

Alguns tipos de cálculo tem a Legislação específica

para determinar as verbas que devem ser pagas ao

Funcionário, como Férias, 13º e Rescisão.

Além das verbas já fixadas pelo sistema, nestes

processos ainda é possível o usuário selecionar

outras verbas customizadas para o lançamento.

Page 37: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

Folha Mensal

15 Dias Trabalhados

INSS

IRRF

Podem ser criados vários envelopes de um mesmo processo

em um mesmo mês.

Isto é necessário, por exemplo, para funcionários com

recebimento semanal ou quinzenal.

As verbas automáticas do mesmo processo podem ser

agrupadas por período de movimentação.

Podem ser criados vários envelopes do mesmo processo

Folha Mensal

15 Dias Trabalhados

Hora Extra

Vale Refeição

INSS

IRRF

Page 38: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

• Esta biblioteca já está em ponto de utilização, entretanto ainda está em evolução.

• Este produto é resultado de 24 meses de pesquisa e trabalho e de muitos anos de

experiência.

• Não existe nesse produto nenhum código genial que qualquer pessoa inteligente não

consiga reproduzir. O valor está no que ele representa: A solução para o

desenvolvimento de uma folha de pagamento muito poderosa e flexível, de forma

simples e rápida.

Considerações Finais

Page 39: Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto

• Marcos Tito de Pardo Marques

[email protected]

https://br.linkedin.com/in/mrctito

• Eliane Vieira Sá

[email protected]

Contatos

Marcos Tito, Eliane Vieira e Sérgio Gontijo são autores do primeiro

livro em português sobre o desenvolvimento e customização de

aplicações com Microsoft Dynamics AX, pela editora Brasport.

http://www.slideshare.net/mrctito/IntroducaoaoMicrosoftDynamicsAX