SlideShare a Scribd company logo
1 of 39
Projeto de Motor 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
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
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
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
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
Mecanismo de criação de Objetos de Tipo Cálculo
Tipos de Cálculo são
armazenados em DLLs
independentes
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
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
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
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
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
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
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
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
Mecanismo de Especialização de Verbas
Mecanismo de Especialização de Verbas
Tabela de Verbas
Motor de Cálculo é composto por 90 objetos
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
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
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
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
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
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
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
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
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
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
Exemplo de Cálculo da Folha de Pagamento
Executado à partir do Excel.
Os objetos de cálculos estão
Hospedados como Web Services
Exemplo de Cálculo da Folha de Pagamento
Executado à partir do SAP Business One
Menu da folha de pagamento criado
no SAP Business One
Inicio do desenvolvimento do Front-End da
Folha de Pagamento em
SAP Business One
Tabelas da folha de pagamento criadas
no SAP Business One
Inicio do desenvolvimento do
cadastro de Funcionários
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
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.
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
• 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
• 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

More Related Content

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

Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Fluxograma de atividades
Fluxograma de atividadesFluxograma de atividades
Fluxograma de atividadesVanessa Barbosa
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Fluxograma de atividades
Fluxograma de atividadesFluxograma de atividades
Fluxograma de atividadesLauren Goulart
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdfssuser382e50
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxaronoliveira3
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo TextoCaio Lima
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Usando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para phpUsando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para phpbrunocf007
 

Similar to Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto (20)

Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Fluxograma de atividades
Fluxograma de atividadesFluxograma de atividades
Fluxograma de atividades
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Fluxograma de atividades
Fluxograma de atividadesFluxograma de atividades
Fluxograma de atividades
 
14 patterns-curso gxxbr
14 patterns-curso gxxbr14 patterns-curso gxxbr
14 patterns-curso gxxbr
 
#{GCODE}
#{GCODE}#{GCODE}
#{GCODE}
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdf
 
Access
AccessAccess
Access
 
11 data providers-cursogxxbr
11 data providers-cursogxxbr11 data providers-cursogxxbr
11 data providers-cursogxxbr
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo Texto
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
apostila matlab
apostila matlabapostila matlab
apostila matlab
 
Hardware
HardwareHardware
Hardware
 
Cap07
Cap07Cap07
Cap07
 
Cap07
Cap07Cap07
Cap07
 
Usando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para phpUsando o i report como gerador de relatórios para php
Usando o i report como gerador de relatórios para php
 

More from Marcos Tito de Pardo Marques

More from Marcos Tito de Pardo Marques (8)

Vantagens do Bi9 Reports para o Totvs RM
Vantagens do Bi9 Reports para o Totvs RM Vantagens do Bi9 Reports para o Totvs RM
Vantagens do Bi9 Reports para o Totvs RM
 
MDB Bi9 Reports - 1.8.0.4 (para Gerador de Relatórios RM Reports)
MDB Bi9 Reports - 1.8.0.4 (para Gerador de Relatórios RM Reports)MDB Bi9 Reports - 1.8.0.4 (para Gerador de Relatórios RM Reports)
MDB Bi9 Reports - 1.8.0.4 (para Gerador de Relatórios RM Reports)
 
TFC - Global Payroll Engine - v6
TFC - Global Payroll Engine - v6TFC - Global Payroll Engine - v6
TFC - Global Payroll Engine - v6
 
Caso de Sucesso Lorenge e TOTVS RM
Caso de Sucesso Lorenge e TOTVS RMCaso de Sucesso Lorenge e TOTVS RM
Caso de Sucesso Lorenge e TOTVS RM
 
Caso de Sucesso Hospital Nossa Senhora das Graças e Totvs
Caso de Sucesso Hospital Nossa Senhora das Graças e TotvsCaso de Sucesso Hospital Nossa Senhora das Graças e Totvs
Caso de Sucesso Hospital Nossa Senhora das Graças e Totvs
 
Tecnologia totvs rm rev.8
Tecnologia totvs rm   rev.8Tecnologia totvs rm   rev.8
Tecnologia totvs rm rev.8
 
TOTVS FULL RM
TOTVS FULL RMTOTVS FULL RM
TOTVS FULL RM
 
Introdução Ao Microsoft Dynamics Ax
Introdução Ao Microsoft Dynamics AxIntrodução Ao Microsoft Dynamics Ax
Introdução Ao Microsoft Dynamics Ax
 

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
  • 19. Motor de Cálculo é composto por 90 objetos
  • 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
  • 33. Tabelas da folha de pagamento criadas no SAP Business One
  • 34. Inicio do desenvolvimento do cadastro de Funcionários
  • 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