Arquitetura de uma máquina de cálculo de folha de pagamento 100% orientada à objeto, desenvolvida em .NET, SOA, com alto desempenho, e capacidade de customização, podendo ser plugada em qualquer software de gestão.
Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto
1. Projeto de Motor de Cálculo de Folha de
Pagamento Orientado a Objeto
2. 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
3. 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
4. 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
5. 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
6. 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
7. Mecanismo de criação de Objetos de Tipo Cálculo
Tipos de Cálculo são
armazenados em DLLs
independentes
8. 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
9. 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
10. 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
11. 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
12. 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
13. 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
14. 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
15. 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
20. 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
21. 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
22. 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
23. 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
24. 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
25. 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
26. 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
27. Objetos de Cálculo
Objetos de Cálculo
Objetos de Cálculo
Máquina de Cálculo: DLL: FolhaBásica.dll
Web
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
28. Objetos de Cálculo
Objetos de Cálculo
Objetos de Cálculo
Máquina de Cálculo: DLL: FolhaBásica.dll
Portugal
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
29. 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
30. Exemplo de Cálculo da Folha de Pagamento
Executado à partir do Excel.
Os objetos de cálculos estão
Hospedados como Web Services
31. Exemplo de Cálculo da Folha de Pagamento
Executado à partir do SAP Business One
32. Menu da folha de pagamento criado
no SAP Business One
Inicio do desenvolvimento do Front-End da
Folha de Pagamento em
SAP Business One
35. 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
36. 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.
37. 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
38. • 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
39. • Marcos Tito de Pardo Marques
mrctito@gmail.com
https://br.linkedin.com/in/mrctito
• Eliane Vieira Sá
eliane_vieira_sa@yahoo.com.br
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