Estudo Sobre os Scripts SQL Utilizados Para o Fechamento da Folha de Pagamento
Data de elaboração | 23/08/2023 |
---|---|
Responsável pelo estudo |
Ádrian Rabelo Mendes (Assessor) |
Equipe do estudo | CAOS |
Alvo |
Sistema Governa |
Origem |
Scripts SQL utilizados pela SEGEP para o fechamento da folha de pagamento |
Objetivo | Para verificar a possibilidade de implementação e execução automatizada desses scripts SQL em funcionalidades do Governa após processamento da folha de pagamento. |
Glossário
API - Application Programming Interface (em português Interface de Programação de Aplicação)
HTTP - Hypertext Transfer Protocol (em português Protocolo de Transferência de Hipertexto)
SQL - Structured Query Language (em português Linguagem de Consulta Estruturada)
1. Introdução
...
1.1 O Problema
...
2. Referencial Teórico
Este capítulo introduz a base teórica deste estudo. São brevemente descritos conceitos de arquitetura de software. Especificamente das arquiteturas monolítica e microsserviços, cujos conceitos forma a base estrutural do sistema Governa e tornar-se-á base da possível solução para o objeto do estudo, respectivamente. Por fim, também são apresentadas as ferramentas e tecnologias que podem ser utilizadas no desenvolvimento da aplicação solução do objeto do estudo.
2.1 Arquitetura de Software
A arquitetura de software especifica como um sistema deve ser organizado e estruturado, compreendendo o conjunto de componentes do sistema, suas relações entre si, relacionamento com outros softwares e os princípios que regem sua evolução. A arquitetura destaca uma série de decisões de projeto e fornece mecanismos para considerar os benefícios de estruturas alternativas do sistema.
Vários estilos de arquitetura encontram-se à disposição dos engenheiros de software que podem ser aplicadas à uma arquitetura específica para um software valendo destacar microsserviços e arquitetura monolítica em termos de desenvolvimento web.
2.1.1 Arquitetura Monolítica
Uma aplicação web típica é executada em um computador remoto, denominado servidor, cuja interface de usuário é acessada por meio de um navegador (browser) no computador cliente. A aplicação é dita ser monolítica (ou monólito), quando toda a sua lógica é executada em uma única máquina, compartilhando memória, arquivos e recursos de processamento.
Apesar das principais linguagens de desenvolvimento de aplicações oferecerem abstrações para fragmentar a complexidade dos sistemas em módulos, ainda são projetadas para a criação de um único executável, no qual toda a modularização utilizada é executada numa mesma máquina compartilhando seus recursos.
Uma aplicação em arquitetura monolítica típica pode ser representada pela Figura 1 a seguir, onde todas as suas funções estão implementadas e são executadas em um único processo.
Figura 1 – Representação de uma aplicação monolítica
É este único executável lógico que manipula solicitações HTTP, executa lógicas de domínio, recupera e atualiza dados do banco de dados, e constrói visualizações HTML a serem enviadas ao navegador.
2.1.2 Arquitetura de Microsserviços
O termo "Arquitetura de Microsserviços" surgiu nos últimos anos para descrever uma maneira particular de projetar aplicativos de software como suítes de serviços independentemente implantáveis. Trata-se de uma abordagem para o desenvolvimento de aplicações através da decomposição de suas funcionalidades em serviços discretos, cada um executando em seu próprio processo e se comunicando com mecanismos leves, tal como uma API de recursos HTTP.
A proposta da arquitetura de microsserviços é possibilitar o desenvolvimento de aplicações de maneira mais flexível, escaláveis e com manutenção mais simples em relação às aplicações em arquiteturas monolíticas. Como a aplicação é criada com pequenos serviços independentes, cada serviço pode funcionar ou falhar individualmente sem comprometer os demais. A Figura 2 representa um esquema de uma aplicação em arquitetura de microsserviços.
Figura 2 – Representação de microsserviços em uma aplicação
Um serviço é desenvolvido para solucionar um problema específico e pode ser implantado, atualizado e escalado de forma independente, mantendo sua disponibilidade e funcionamento. Como os processos da aplicação são executados como serviços que se comunicam por meio de APIs, estes não necessitam ser desenvolvidas em uma linguagem de programação específica.
2.2 Spring Framework
O Spring é um framework que facilita a criação de aplicativos corporativos. Fornece tudo o que o desenvolvedor necessita para adotar a linguagem de programação Java em um ambiente corporativo, e com a flexibilidade de criar muitas tipos de arquiteturas dependendo das necessidades de um aplicativo. É de código aberto e possui uma comunidade amplamente ativa que fornece feedback contínuo com base em uma gama diversificada de casos de uso do mundo real.
O Spring é dividido em módulos. Os aplicativos podem escolher quais módulos precisam. No centro estão os módulos do contêiner principal, incluindo um modelo de configuração e um mecanismo de injeção de dependência. Além disso, fornece suporte para diferentes arquiteturas de aplicativos, incluindo mensagens, dados transacionais e persistência e web.
3. Possível Solução
Embora o Governa seja um sistema monolítico, não há impedimento para uma abordagem híbrida utilizando microsserviços para possíveis soluções de processamentos específicos, como é o caso do objeto desse estudo. Um microsserviço possibilitará a automação dos scripts de forma independente do Governa, permitido que esses scripts sejam executados de diversas formas distintas e em qualquer momento oportuno. Vale ressaltar a facilidade de manutenção dessa solução, devido ao desacoplamento, e ainda a desoneração dos recursos já escassos do Governa durante as execuções de cálculos cruciais presentes neste.
4. Conclusão
Após análise básica dos scripts, observou-se uma premissa geral. Caso as consultas não retornem resultados significa que os dados estão corretos, havendo retorno, os registros devem sofrer alterações ou exclusão. No mínimo, as duas histórias a seguir serão necessárias para dar início aos trabalhos.
História |
O quê: Implementar, no Governa, funcionalidade para chamada à API externa Por quê: Para possibilitar a comunicação entre o Governa e o microsserviço |
Regras e Validações | -- |
Pontuação | 5 |
História |
O quê: Criar projeto do microsserviço, configurar e adicionar ao gitlab da SETIC Por quê: Para desenvolvimento, manutenção e versionamento do código-fonte |
Regras e Validações |
|
Pontuação | 5 |
Essas histórias possibilitarão que o Governa realize chamadas à APIs e ao início do desenvolvimento do microsserviço. Ainda será necessária a criação de uma história para cada script, visto que cada um possui suas particularidades e precisam ser compreendidos para correta implementação.
5. Referências
...
Visão geral do Spring Framework :: Spring Framework
ANEXO I
Scripts SQL utilizados pela SEGEP:
1- ANTES DA ANÁLISE verificando valor da verba 85 que não esta na financeiro mensal
use governa
---executar antes da análise
declare
@mesref int = 202305
select ltc.codigo, vba.valor, bse.auxilio_doenca_valor, srv.matricula, bse.id_pensionista_vitalicio,bse.abono_salario_familia_valor, vba.valor, bse.id_vinculo_empregaticio, bse.id_classificacao_funcional,
bse.abono_salario_familia_tipo
--update rh.financeiro_mensal set auxilio_doenca_valor = vba.valor
from rh.financeiro_mensal bse, rh.servidor_mensal mns, rh.financeiro_mensal_verba vba, rh.lotacao ltc, rh.lotacao_mensal lms, rh.verba inc, rh.verba_rotina rot, rh.servidor srv
where bse.id_servidor_mensal = mns.id
and mns.mes_referencia = 202305
and bse.id = vba.id_financeiro_mensal
and mns.mes_referencia = lms.mes_referencia
and bse.id_lotacao_mensal = lms.id
and ltc.id = lms.id_lotacao
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and srv.id = mns.id_servidor
--and id_pensionista_vitalicio is not null
and rot.rotina in ('FOL')
and rot.rotina = bse.rotina
and inc.codigo in (85,86)
and bse.auxilio_doenca_valor <> vba.valor
select ltc.codigo,vba.valor, srv.matricula, bse.id_pensionista_vitalicio,bse.abono_salario_familia_valor, bse.salario_maternidade_valor, bse.id_vinculo_empregaticio, bse.id_classificacao_funcional,
bse.abono_salario_familia_tipo
--update rh.financeiro_mensal set salario_maternidade_valor = vba.valor
from rh.financeiro_mensal bse, rh.servidor_mensal mns, rh.financeiro_mensal_verba vba, rh.lotacao ltc, rh.lotacao_mensal lms, rh.verba inc, rh.verba_rotina rot, rh.servidor srv
where bse.id_servidor_mensal = mns.id
and mns.mes_referencia = 202305
and bse.id = vba.id_financeiro_mensal
and mns.mes_referencia = lms.mes_referencia
and bse.id_lotacao_mensal = lms.id
and ltc.id = lms.id_lotacao
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and srv.id = mns.id_servidor
--and id_pensionista_vitalicio is not null
and rot.rotina in ('FOL')
and inc.codigo in (81)--10,82)
and rot.rotina = bse.rotina
and bse.salario_maternidade_valor <> vba.valor
select ltc.codigo,vba.valor, srv.matricula, bse.id_pensionista_vitalicio,bse.abono_salario_familia_valor, bse.salario_maternidade_valor, bse.id_vinculo_empregaticio, bse.id_classificacao_funcional,
bse.abono_salario_familia_tipo
--update rh.financeiro_mensal set salario_maternidade_valor = salario_maternidade_valor + vba.valor
--update rh.financeiro_mensal set salario_maternidade_valor = vba.valor
from rh.financeiro_mensal bse, rh.servidor_mensal mns, rh.financeiro_mensal_verba vba, rh.lotacao ltc, rh.lotacao_mensal lms, rh.verba inc, rh.verba_rotina rot, rh.servidor srv
where bse.id_servidor_mensal = mns.id
and mns.mes_referencia = 202305
and bse.id = vba.id_financeiro_mensal
and mns.mes_referencia = lms.mes_referencia
and bse.id_lotacao_mensal = lms.id
and ltc.id = lms.id_lotacao
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and srv.id = mns.id_servidor
--and id_pensionista_vitalicio is not null
and rot.rotina in ('FOL')
and inc.codigo in (9)--10,82)
and bse.rotina = rot.rotina
and bse.salario_maternidade_valor <> vba.valor
select ltc.codigo,vba.valor, srv.matricula, bse.id_pensionista_vitalicio,bse.abono_salario_familia_valor, bse.salario_maternidade_valor, bse.id_vinculo_empregaticio, bse.id_classificacao_funcional,
bse.abono_salario_familia_tipo
--update rh.financeiro_mensal set salario_maternidade_valor = salario_maternidade_valor + vba.valor
--update rh.financeiro_mensal set salario_maternidade_valor = vba.valor
from rh.financeiro_mensal bse, rh.servidor_mensal mns, rh.financeiro_mensal_verba vba, rh.lotacao ltc, rh.lotacao_mensal lms, rh.verba inc, rh.verba_rotina rot, rh.servidor srv
where bse.id_servidor_mensal = mns.id
and mns.mes_referencia = 202305
and bse.id = vba.id_financeiro_mensal
and mns.mes_referencia = lms.mes_referencia
and bse.id_lotacao_mensal = lms.id
and ltc.id = lms.id_lotacao
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and srv.id = mns.id_servidor
--and id_pensionista_vitalicio is not null
and rot.rotina in ('FOL')
and inc.codigo in (9)--10,82)
and bse.salario_maternidade_valor <> vba.valor
2 - ANTES DA ANÁLISE verificando abono sem salvar na financeiro_mensal
use governa
--executar antes da analise
declare
@mesref int = 202305
select srv.matricula, bse.abono_salario_familia_valor, vba.valor, bse.id_vinculo_empregaticio, bse.id_classificacao_funcional,
bse.abono_salario_familia_tipo
--delete rh.financeiro_mensal_verba
--update rh.financeiro_mensal set abono_salario_familia_valor = vba.valor, abono_salario_familia_tipo = 'SAF'
from rh.financeiro_mensal bse, rh.servidor_mensal mns, rh.financeiro_mensal_verba vba, rh.lotacao ltc, rh.lotacao_mensal lms, rh.verba inc, rh.verba_rotina rot, rh.servidor srv
where bse.id_servidor_mensal = mns.id
and mns.mes_referencia = @mesref
and bse.id = vba.id_financeiro_mensal
and mns.mes_referencia = lms.mes_referencia
and bse.id_lotacao_mensal = lms.id
and ltc.id = lms.id_lotacao
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and srv.id = mns.id_servidor
and rot.rotina in ('FOL')
and inc.codigo in (51)
AND vba.valor <> bse.abono_salario_familia_valor
and abono_salario_familia_tipo <> 'SAF'
select srv.matricula, bse.abono_salario_familia_valor, vba.valor, bse.id_vinculo_empregaticio, bse.id_classificacao_funcional,
bse.abono_salario_familia_tipo, ltc.codigo
--delete rh.financeiro_mensal_verba
--update rh.financeiro_mensal set abono_salario_familia_valor = vba.valor, abono_salario_familia_tipo = 'SAF'
from rh.financeiro_mensal bse, rh.servidor_mensal mns, rh.financeiro_mensal_verba vba, rh.lotacao ltc, rh.lotacao_mensal lms, rh.verba inc, rh.verba_rotina rot, rh.servidor srv
where bse.id_servidor_mensal = mns.id
and mns.mes_referencia = @mesref
and bse.id = vba.id_financeiro_mensal
and mns.mes_referencia = lms.mes_referencia
and bse.id_lotacao_mensal = lms.id
and ltc.id = lms.id_lotacao
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and srv.id = mns.id_servidor
and rot.rotina in ('FOL')
and inc.codigo in (53)
AND vba.valor <> bse.abono_salario_familia_valor
And abono_salario_familia_tipo <> 'ABF'
3 - ANTES DA ANALISE verificando diferença de consignação
use governa
--executar antes da análise
declare
@mesref int = 202305
drop table #financeiro_csg
select srv.matricula, inc.codigo, sum(avb.valor) 'valor', avb.id into #financeiro_csg
from rh.financeiro_mensal_averbacao avb,
rh.financeiro_mensal bse,
rh.averbacao aver,
rh.verba inc,
rh.servidor_mensal mns,
rh.servidor srv,
rh.lotacao ltc,
rh.lotacao_mensal lms
where avb.id_financeiro_mensal = bse.id
and avb.id_averbacao = aver.id
and aver.id_verba = inc.id
and bse.id_servidor_mensal = mns.id
and bse.mes_referencia = mns.mes_referencia
and mns.mes_referencia = avb.mes_referencia
and aver.id_servidor = srv.id
and ltc.id = lms.id_lotacao
and lms.mes_referencia = mns.mes_referencia
and lms.id = bse.id_lotacao_mensal
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
group by srv.matricula, inc.codigo,avb.id
drop table ##ver
select srv.matricula, inc.codigo, SUM(vba.valor) 'valor_folha' into ##ver
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.id in (select id_verba from rh.param_verba_consignacao where compulsorio = 0)
group by srv.matricula, inc.codigo
select * from #financeiro_csg csg, ##ver ver
where csg.matricula = ver.matricula
and csg.codigo = ver.codigo
and csg.valor <> ver.valor_folha
and csg.valor - ver.valor_folha > 0.01
select * from #financeiro_csg csg left join ##ver ver
on csg.matricula = ver.matricula
and csg.codigo = ver.codigo
where ver.matricula is null
/* quando tiver analise critica duplicada
select *
--delete rh.ANALISE_CRITICA_DETALHE
From rh.ANALISE_CRITICA_DETALHE ana, rh.averbacao avb, rh.servidor srv
where mes_referencia = 202108
and ana.id_averbacao = avb.id
and avb.id_servidor = srv.id
and srv.matricula in (300003039)
and ana.id = 50372092
*/
4 - sp_gerar_auxilio_saude - GERAR APENAS NA PREVIA
USE [Governa]
GO
/****** Object: StoredProcedure [rh].[sp_gerar_auxilio_saude] Script Date: 25/10/2018 07:25:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--CREATE PROCEDURE [rh].[sp_gerar_auxilio_saude]
--verificar cadastro de servidor afastado com consignacao e outra matricula exemplo matricula 300156490 matricula nova
DECLARE
@MesReferencia VARCHAR(6) = '202305'
,@MenorMatricula VARCHAR(9) = '100000000'
,@MenorLotacao VARCHAR(6) = '001'
,@MenorVerba VARCHAR(6) = '5000'
,@AuxilioSaude VARCHAR(6) = '2060'
,@Condicional VARCHAR(6) = '2260'
,@MoedaAuxilio int = '357'
,@MoedaCondicona int = '371'
,@Rotina VARCHAR(3) = 'FOL'
,@LotacaoDefenso VARCHAR(6) = '110'
--AS
DECLARE
@ID_VERBA_ROTINA_AUXILIO_SAUDE INT
,@ID_VERBA_ROTINA_AUXILIO_SAUDE_CONDICIONAL INT
-- PEGA A VERBA rotina DO AUXILIO SAÚDE
SET @ID_VERBA_ROTINA_AUXILIO_SAUDE = (SELECT rot.ID FROM rh.verba_rotina rot, rh.verba vba
WHERE rot.rotina = @Rotina AND vba.codigo = Convert(int,@AuxilioSaude)
AND rot.id_verba = vba.id)
-- PEGA A VERBA ROTINA DO AUXILIO SAÚDE CONDICIONAL
SET @ID_VERBA_ROTINA_AUXILIO_SAUDE_CONDICIONAL = (SELECT rot.ID FROM rh.verba_rotina rot, rh.verba vba
WHERE rot.rotina = @Rotina AND vba.codigo = Convert(int,@Condicional)
AND rot.id_verba = vba.id)
-- CARREGA TODOS OS SERVIDORES DO MÊS
SELECT DISTINCT
'ServidorId' = ser.id
,'ServidorMensalId' = sMensal.id
,'Matricula' = ser.matricula
,'Cpf' = pes.cpf
,'CargoId' = sMensal.id_cargo
,'ClassificacaoId' = sMensal.id_classificacao_funcional
,'Situacao' = sMensal.situacao
,'CargoCodigo' = carg.codigo
,'GrauSalarialId' = isnull(sMensal.id_grau_salarial,'391')
,'LotacaoId' = lot.id
,'LotacaoCodigo' = lot.codigo
INTO #Servidores
FROM rh.servidor ser
,Admin.pessoa_fisica pes
,rh.servidor_mensal sMensal
,rh.cargo carg
,rh.servidor_local sLoc
,rh.local_trabalho loc
,rh.lotacao lot
WHERE ser.id_pessoa = pes.id
AND sMensal.id_servidor = ser.id
AND carg.id = sMensal.id_cargo
AND sLoc.id_servidor_mensal = sMensal.id
AND loc.id = sLoc.id_local_trabalho
AND lot.id = loc.id_lotacao
AND sMensal.situacao IN ('AFA','ATV')
and carg.descricao not like 'cargo p%'
and carg.descricao not like '%estag%'
and carg.codigo not in (51318)
AND sMensal.mes_referencia = Convert(int,@MesReferencia)
and sMensal.id_classificacao_funcional not in (select clffnc from dbflh.dbo.TbClfAuxSau)
and lot.codigo not in (1892,1896) --acrescentado essa linha em 26/04/2022, solicitado por Vanessa
SELECT
'Matricula' = ser.matricula
,'Cpf' = ser.cpf
INTO #temp1
FROM #Servidores ser
,rh.averbacao avb
,rh.verba vba
WHERE avb.id_servidor = ser.servidorId
AND vba.id = avb.id_verba
AND ser.matricula > Convert(int,@MenorMatricula)
AND avb.situacao IN ('ATV','RED')
and ser.ServidorId not in (select id_servidor from rh.servidor_afastamento where remunerado = 0 and fim >= GETDATE())
--verificar cadastro de servidor afastado com consignacao e outra matricula exemplo matricula 300156490,300156638,300147014 matricula nova
-- AND vba.codigo IN (SELECT CodVba FROM DBTEMPS..TbVbaAuxSau)
and vba.id in (select id_verba from rh.param_verba_consignacao where id_tipo_facultativo in (3))
AND ser.matricula NOT IN (SELECT mtcfnc FROM dbtemps..tbmtcfnnaoauxsau) --tabela de matriculas que não deverao receber aux saude
AND ser.ClassificacaoId NOT IN (SELECT ClfFnc FROM dbtemps..TbClfAuxSau)
AND ser.cargoCodigo NOT IN (SELECT codFun FROM dbtemps..TbCargoNaoAuxSau)
AND ser.LotacaoCodigo NOT IN (SELECT codltc FROM dbtemps..TbLotNaoAuxSau)
--select *
--delete [192.168.10.14].dbflh.dbo.tbmtcfnnaoauxsau
--FROM [192.168.10.14].dbflh.dbo.tbmtcfnnaoauxsau where mtcfnc in (100085395,100085597,100088244,100089133,100067890)
-- CASO TENHA MAIS DE UMA MATRICULA (POR CPF), SELECIONA A MAIOR MATRICULA E LANCA A VERBA.
SELECT
'Matricula' = MAX(ser.matricula)
INTO #MatriculaEfetivas
FROM #Servidores ser
WHERE ser.matricula > Convert(int,@MenorMatricula)
AND ser.situacao = 'ATV'
AND ser.matricula NOT IN (SELECT clffnc FROM dbtemps..TbClfAuxSau)
AND ser.cargoCodigo NOT IN (SELECT codFun FROM dbtemps..TbCargoNaoAuxSau)
AND ser.LotacaoCodigo NOT IN (SELECT codltc FROM dbtemps..TbLotNaoAuxSau)
AND ser.matricula NOT IN (SELECT mtcfnc FROM dbtemps..tbmtcfnnaoauxsau)
AND ser.GrauSalarialId NOT IN (SELECT id FROM rh.grau_salarial WHERE grau in ('9900',''))
GROUP BY ser.cpf
HAVING COUNT(ser.matricula) >= 1
SELECT
'Matricula' = ser.matricula
,'Cpf' = ser.cpf
INTO #temp2
FROM #Servidores ser
WHERE ser.cpf NOT IN (SELECT Cpf FROM #temp1)
AND ser.matricula IN (SELECT Matricula FROM #MatriculaEfetivas)
-- MATRICULAS QUE TEM CDS
SELECT 'Matricula' = Max(ser.matricula)
INTO #MatriculasCDS
FROM #Servidores ser
WHERE ser.matricula > Convert(int,@MenorMatricula)
AND ser.grauSalarialId IN (SELECT id FROM rh.grau_salarial WHERE grau in ('9900',''))
AND ser.situacao = 'ATV'
AND ser.cargoId NOT IN (SELECT codFun FROM dbtemps..TbCargoNaoAuxSau)
AND ser.matricula NOT IN (SELECT clffnc FROM dbtemps..TbClfAuxSau)
AND ser.matricula NOT IN (SELECT mtcfnc FROM dbtemps..tbmtcfnnaoauxsau)
AND ser.LotacaoCodigo NOT IN (SELECT codltc FROM dbtemps..TbLotNaoAuxSau)
GROUP BY ser.cpf
HAVING COUNT(ser.matricula) >= 1
INSERT INTO #temp2
SELECT
'Matricula' = ser.matricula
,'Cpf' = ser.cpf
FROM #Servidores ser
WHERE ser.cpf NOT IN (SELECT Cpf FROM #temp1)
AND ser.cpf NOT IN (SELECT Cpf FROM #temp2)
AND ser.matricula IN (SELECT Matricula FROM #MatriculasCDS)
-- INSERIR MATRICULAS AFASTADAS COM ONUS PARA O ESTADO, LICENÇA MATERNIDADE E AUXILIO DOENÇA
INSERT INTO #TEMP2
SELECT
'Matricula' = MIN(ser.matricula)
,'Cpf' = ser.cpf
FROM #Servidores ser
,rh.servidor_afastamento afa
,rh.motivo_afastamento cauAfa
WHERE afa.id_servidor = ser.servidorId
AND afa.id_motivo_afastamento = cauAfa.id
AND ser.Cpf NOT IN (SELECT Cpf FROM #temp1)
AND ser.Cpf NOT IN (SELECT Cpf FROM #temp2)
AND ser.cargoCodigo NOT IN (SELECT codFun FROM dbtemps..TbCargoNaoAuxSau)
AND ser.classificacaoId NOT IN (SELECT ClfFnc FROM dbtemps..TbClfAuxSau)
AND ser.matricula NOT IN (SELECT mtcfnc FROM dbtemps..tbmtcfnnaoauxsau)
AND ser.matricula > Convert(int,@MenorMatricula)
AND ser.situacao = 'AFA'
AND cauAfa.id IN (21,22,27,2,29,34,37,38,36,35,34,33)
AND ser.LotacaoCodigo NOT IN (SELECT codltc FROM dbtemps..TbLotNaoAuxSau)
GROUP BY ser.cpf
-- RETIRA DA TABELA OS LANCAMENTOS EFETUADOS NA VERBAS EVENTUAIS
BEGIN
DELETE FROM #temp1
WHERE Cpf IN (SELECT ser.cpf
FROM rh.verba_eventual vba
,#Servidores ser
,rh.verba_rotina vRot
,rh.verba vINc
WHERE mes_referencia = Convert(int,@MesReferencia)
AND vba.id_servidor = ser.servidorId
AND vRot.id = vba.id_verba_rotina
AND vRot.rotina = @Rotina
AND vINc.id = vRot.id_verba
AND vINc.codigo IN (Convert(int,@AuxilioSaude),Convert(int,@Condicional)))
DELETE FROM #temp2
WHERE Cpf IN (SELECT ser.cpf
FROM rh.verba_eventual vba
,#Servidores ser
,rh.verba_rotina vRot
,rh.verba vINc
WHERE mes_referencia = Convert(int,@MesReferencia)
AND vba.id_servidor = ser.servidorId
AND vRot.id = vba.id_verba_rotina
AND vRot.rotina = @Rotina
AND vINc.id = vRot.id_verba
AND vINc.codigo IN (Convert(int,@AuxilioSaude), Convert(int,@Condicional)))
END
-- RETIRA DA TABELA OS LANCAMENTOS EFETUADOS NA VERBAS PERIODICA
BEGIN
DELETE #temp1
WHERE Cpf IN (SELECT ser.cpf
FROM rh.verba_periodica vPer
,#Servidores ser
,rh.verba vba
WHERE INicio <= CONVERT(DATETIME, (CONVERT(CHAR(06) , Convert(int,@MesReferencia)) + '01'))
AND fim >= CONVERT(DATETIME,(CONVERT(CHAR(06),Convert(int,@MesReferencia)) + '28'))
AND ser.servidorId = vPer.id_servidor
AND vPer.id_verba = vba.id
AND vba.codigo IN(Convert(int,@AuxilioSaude),Convert(int,@Condicional)))
DELETE #temp2
WHERE Cpf IN (SELECT ser.cpf
FROM rh.verba_periodica vPer
,#Servidores ser
,rh.verba vba
WHERE Inicio <= CONVERT(DATETIME, (CONVERT(CHAR(06) , Convert(int,@MesReferencia)) + '01'))
AND fim >= CONVERT(DATETIME,(CONVERT(CHAR(06),Convert(int,@MesReferencia)) + '28'))
AND ser.servidorId = vPer.id_servidor
AND vPer.id_verba = vba.id
AND vba.codigo IN(Convert(int,@AuxilioSaude),Convert(int,@Condicional)))
END
-- RETIRA DA TABELA OS LANCAMENTOS EFETUADOS NA VERBAS PERIODICA SEM DATA DE FIM
BEGIN
DELETE #temp1
WHERE Cpf IN (SELECT ser.cpf
FROM rh.verba_periodica vPer
,#Servidores ser
,rh.verba vba
WHERE Inicio <= CONVERT(DATETIME, (CONVERT(CHAR(06) , Convert(int,@MesReferencia)) + '01'))
AND fim is null
AND ser.servidorId = vPer.id_servidor
AND vPer.id_verba = vba.id
AND vba.codigo IN(Convert(int,@AuxilioSaude),Convert(int,@Condicional)))
DELETE #temp2
WHERE Cpf IN (SELECT ser.cpf
FROM rh.verba_periodica vPer
,#Servidores ser
,rh.verba vba
WHERE Inicio <= CONVERT(DATETIME, (CONVERT(CHAR(06) , Convert(int,@MesReferencia)) + '01'))
AND fim is null
AND ser.servidorId = vPer.id_servidor
AND vPer.id_verba = vba.id
AND vba.codigo IN(Convert(int,@AuxilioSaude),Convert(int,@Condicional)))
END
-- INSERE AUXILIO SAUDE CONDICIONAL PARA VERBAS VARIAVEIS
BEGIN
INSERT INTO RH.VERBA_EVENTUAL
SELECT NEXT VALUE FOR rh.s_verba_eventual, Convert(int,@MesReferencia), ser.servidorId
,@ID_VERBA_ROTINA_AUXILIO_SAUDE_CONDICIONAL, mMensal.valor_moeda, 1.00, 30.00, NULL, NULL, ser.Matricula,null,null,null,null,null
FROM #temp1 a
,rh.moeda moe
,rh.moeda_mensal mMensal
,#Servidores ser
WHERE ser.matricula = a.matricula
AND moe.id = mMensal.id_moeda
AND mMensal.mes_referencia = Convert(int,@MesReferencia)
AND moe.codigo = @MoedaCondicona
and ser.ServidorId not in (select id_servidor from rh.verba_eventual eve where eve.id_servidor = ser.ServidorId and eve.mes_referencia = @MesReferencia and eve.id_verba_rotina = @ID_VERBA_ROTINA_AUXILIO_SAUDE_CONDICIONAL)
END
BEGIN
INSERT INTO RH.VERBA_EVENTUAL
SELECT NEXT VALUE FOR rh.s_verba_eventual, Convert(int,@MesReferencia), ser.servidorId
,@ID_VERBA_ROTINA_AUXILIO_SAUDE, mMensal.valor_moeda, 1.00, 30.00, NULL, NULL, ser.Matricula,null,null,null,null,null
FROM #temp2 a
,rh.moeda moe
,rh.moeda_mensal mMensal
,#Servidores ser
WHERE ser.matricula = a.matricula
AND moe.id = mMensal.id_moeda
AND mMensal.mes_referencia = Convert(int,@MesReferencia)
AND moe.codigo = @MoedaAuxilio
and ser.ServidorId not in (select id_servidor from rh.verba_eventual eve where eve.id_servidor = ser.ServidorId and eve.mes_referencia = @MesReferencia and eve.id_verba_rotina = @ID_VERBA_ROTINA_AUXILIO_SAUDE)
and ser.ServidorId not in (select id_servidor from rh.verba_eventual eve where eve.id_servidor = ser.ServidorId and eve.mes_referencia = @MesReferencia and eve.id_verba_rotina = @ID_VERBA_ROTINA_AUXILIO_SAUDE_CONDICIONAL)
END
-- ATUALIZANDO VALOR DO VALE PARA DEFENSORIA PUBLICA PARA 100 REAIS
BEGIN
UPDATE RH.VERBA_EVENTUAL
SET valor = 100.00
FROM RH.VERBA_EVENTUAL B
,RH.VERBA A
,RH.verba_rotina C
,#Servidores ser
WHERE A.ID = C.id_verba
AND C.id = B.id_verba_rotina
AND ser.ServidorId = b.id_servidor
AND ser.LotacaoCodigo in (@LotacaoDefenso)
AND C.id = @ID_VERBA_ROTINA_AUXILIO_SAUDE
AND b.mes_referencia = Convert(int,@MesReferencia)
AND valor = 50.0
END
-- ATUALIZANDO VALOR DO VALE PARA DEFENSORIA PUBLICA PARA 200 REAIS
BEGIN
UPDATE RH.VERBA_EVENTUAL
SET valor = 200.00
FROM RH.VERBA_EVENTUAL B
,RH.VERBA A
,RH.verba_rotina C
,#Servidores ser
WHERE A.ID = C.id_verba
AND C.id = B.id_verba_rotina
AND ser.ServidorId = b.id_servidor
AND ser.LotacaoCodigo in (@LotacaoDefenso)
AND c.id = @ID_VERBA_ROTINA_AUXILIO_SAUDE_CONDICIONAL
AND B.mes_referencia = Convert(int,@MesReferencia)
AND valor = 150.00
END
DROP TABLE #temp1
DROP TABLE #temp2
DROP TABLE #MatriculaEfetivas
DROP TABLE #MatriculasCDS
DROP TABLE #Servidores
GO
5 - verificar servidores sem verba de vencimento
use governa
declare
@mesref int = 202304,
@mesant int = 202305
drop table #sem
select mns.matricula, mns.id_cargo into #sem
from rh.servidor_mensal mns, rh.grau_salarial gra
where mes_referencia = @mesref
and id_verba_vencimento is null
and isnull(mns.id_grau_salarial,0) = gra.id
and gra.grau not in ('9900','AL/PM')
and mns.situacao not in ('DSL')
drop table #retornar
select mns.matricula, mns.id_cargo, mns.id_verba_vencimento into #retornar
from rh.servidor_mensal mns, rh.grau_salarial gra, #sem sem
where mes_referencia = @mesant
and id_verba_vencimento is not null
and isnull(mns.id_grau_salarial,0) = gra.id
and mns.matricula = sem.matricula
and mns.id_cargo = sem.id_cargo
select mns.matricula, mns.id_verba_vencimento, rto.id_verba_vencimento, ltc.codigo, lms.descricao
--update rh.servidor_mensal set id_verba_vencimento = rto.id_verba_vencimento
from rh.servidor_mensal mns, rh.grau_salarial gra, #retornar rto, rh.lotacao ltc, rh.lotacao_mensal lms
where mns.mes_referencia = 202305
and mns.id_verba_vencimento is null
and isnull(mns.id_grau_salarial,0) = gra.id
and mns.matricula = rto.matricula
and mns.id_cargo = rto.id_cargo
and mns.id_lotacao_mensal = lms.id
and lms.id_lotacao = ltc.id
and lms.mes_referencia = mns.mes_referencia
--and ltc.codigo not in (822)
--order by ltc.codigo
6 - verificando saldo negativo
use governa
declare
@mesref int = 202305
select srv.matricula, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.servidor srv,
rh.servidor_mensal mns,
rh.verba inc,
rh.verba_rotina rot,
rh.lotacao ltc,
rh.lotacao_mensal lms
where bse.id = vba.id_financeiro_mensal
and bse.id_servidor_mensal = mns.id
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and mns.id_servidor = srv.id
and ltc.id = lms.id_lotacao
and lms.mes_referencia = mns.mes_referencia
and bse.id_lotacao_mensal = lms.id
and mns.mes_referencia = @mesref
and inc.codigo in (400)
and bse.rotina = 'FOL'
order by ltc.codigo
--select *
----update rh.servidor_mensal set situacao = 'ATV'
--from rh.servidor srv, rh.servidor_mensal mns
--where srv.id = mns.id_servidor
--and mes_referencia = 202110
--and srv.matricula in (300117397,300062142)
7 - verificando servidores admitidos 06112018 prevcom
use Governa
declare
@mesref int = 202305
select matricula, cargoId,convert(char(10),admissao,103) 'Admissão',cargoDescricao , classificacaoFuncionalId, classificacao_funcional
from FinanceiroMensal
where mesreferencia = @mesref
and admissao >= '20181106'
and classificacaoFuncionalId in (4,65)
and cargoId not in (1896,1895,1891,1877,1876,1231,1250,1962,1221,2384,3341,2204,2011,1939,2552,487,2113,3565,1963,3566)
and grauSalarial <> '9900'
and matricula >= 300000000
and matricula not in (300156208,300168976,300170916,300169929,300171739,300168958,300188247)
order by cargoDescricao
select bse.matricula, bse.admissao, SUM(vba.verbaValor)'Total_Verbas_Contribuicao'
from FinanceiroMensal bse, FinanceiroMensalVerba vba, rh.verba inc, rh.verba_rotina rot
where bse.mesreferencia = @mesref
and bse.admissao >= '20181106'
and bse.classificacaoFuncionalId in (83)
and bse.cargoId not in (1896,1895,1891,1877,1876,1231,1250,1962,1221,2384,3341,2204,2011,1939)
and bse.financeiroMensalId = vba.idFinanceiroMensal
and vba.verbaId = inc.id
and inc.id = rot.id_verba
and bse.rotina = vba.rotina
and bse.rotina = rot.rotina
and rot.rotina = 'FOL'
and rot.incide_rpps = 1
and inc.classificacao <> 'DIF'
and inc.codigo < 5000
and bse.servidorId not in (select id_servidor from rh.verba_periodica where id_verba = 7646)
and bse.matricula not in (300161214,300169053,300172954,300176406,300181912,300182823,300182453,300188247)
group by bse.matricula, bse.admissao
having SUM(vba.verbaValor) > 7507.49
8 - verificando lotações novas
use governa
declare
@mesref int = 202305,
@mesant int = 202302
select distinct lotacaoCodigo, lotacaoMensalDescricao
from FinanceiroMensal
where mesReferencia = @mesref
and lotacaoCodigo not in (select distinct lotacaoCodigo from FinanceiroMensal
where mesReferencia = @mesant)
order by lotacaoCodigo
select matricula,lotacaoCodigo, lotacaoMensalDescricao from FinanceiroMensal
where lotacaoCodigo in (select distinct lotacaoCodigo
from FinanceiroMensal
where mesReferencia = @mesref
and lotacaoCodigo not in (select distinct lotacaoCodigo from FinanceiroMensal
where mesReferencia = @mesant))
and mesReferencia = @mesref
order by lotacaoCodigo
9 - verificando afastamentos IPERON em servidor não IPERON
use governa
declare
@mesref int = 202305
select srv.matricula, clf.descricao ,mot.descricao
From rh.servidor_afastamento afa,
rh.servidor srv,
rh.motivo_afastamento mot,
rh.servidor_mensal mns,
rh.param_previdencia par,
rh.classificacao_funcional clf
where afa.id_servidor = srv.id
and afa.id_motivo_afastamento = mot.id
and afa.fim >= SUBSTRING(convert(char(6),@mesref), 1, 6) + '01'
and afa.id_motivo_afastamento in (27,29,34,38)
and srv.id = mns.id_servidor
and mns.mes_referencia = @mesref
and mns.mes_referencia = par.mes_referencia
and par.id_classificacao_funcional = mns.id_classificacao_funcional
and par.id_vinculo_empregaticio = mns.id_vinculo_empregaticio
and clf.id = par.id_classificacao_funcional
and par.tipo <> 'OUT'
and mns.situacao <> 'DSL'
10 - Checar Afastamento Salário Maternidade Errado
use governa
declare
@mesref int = 202305
drop table #maternidade
select srv.matricula into #maternidade
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
rh.param_previdencia par
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and inc.codigo in (81,82)
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and mns.mes_referencia = @mesref
and mns.mes_referencia = par.mes_referencia
and mns.id_vinculo_empregaticio = par.id_vinculo_empregaticio
and mns.id_classificacao_funcional = par.id_classificacao_funcional
and par.id_orgao_previdenciario <> 1
insert into #maternidade
select srv.matricula
from rh.servidor_mensal mns,
rh.servidor srv,
rh.param_previdencia par,
rh.servidor_afastamento afa,
rh.verba inc,
rh.verba_rotina rot
where mns.id_servidor = srv.id
and afa.id_servidor = srv.id
and afa.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and inc.codigo = 81
and ((afa.fim is null) or (afa.fim > getdate()))
and mns.mes_referencia = par.mes_referencia
and mns.id_vinculo_empregaticio = par.id_vinculo_empregaticio
and mns.id_classificacao_funcional = par.id_classificacao_funcional
and par.id_orgao_previdenciario <> 1
and mns.mes_referencia = @mesref
and mns.situacao <> 'DSL'
select srv.matricula
from rh.servidor_mensal mns,
rh.servidor srv,
rh.param_previdencia par,
rh.servidor_afastamento afa,
rh.motivo_afastamento mtv,
rh.verba inc,
rh.verba_rotina rot
where mns.id_servidor = srv.id
and afa.id_servidor = srv.id
and afa.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and ((afa.fim is null) or (afa.fim > getdate()))
and mns.mes_referencia = par.mes_referencia
and mns.id_vinculo_empregaticio = par.id_vinculo_empregaticio
and mns.id_classificacao_funcional = par.id_classificacao_funcional
and srv.matricula in (select matricula from #maternidade)
and par.id_orgao_previdenciario <> 1
and mns.mes_referencia = @mesref
and afa.id_motivo_afastamento = mtv.id
and mtv.id = 27
and mns.situacao <> 'DSL'
union
select srv.matricula
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
rh.param_previdencia par
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and inc.codigo in (81,82,9)
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and mns.mes_referencia = @mesref
and mns.mes_referencia = par.mes_referencia
and mns.id_vinculo_empregaticio = par.id_vinculo_empregaticio
and mns.id_classificacao_funcional = par.id_classificacao_funcional
and ((par.id_orgao_previdenciario <> 1) and (par.id_orgao_previdenciario <> 2))
and mns.situacao <> 'DSL'
union
select srv.matricula
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
rh.param_previdencia par
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and inc.codigo in (9)
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and mns.mes_referencia = @mesref
and mns.mes_referencia = par.mes_referencia
and mns.id_vinculo_empregaticio = par.id_vinculo_empregaticio
and mns.id_classificacao_funcional = par.id_classificacao_funcional
and par.id_orgao_previdenciario = 1
and mns.situacao <> 'DSL'
union
select srv.matricula
from rh.servidor_afastamento afa, rh.servidor srv, rh.servidor_mensal mns
where id_motivo_afastamento in (27,38)
and afa.id_servidor in (select id_servidor from rh.servidor_afastamento where id_motivo_afastamento in (2,37) and ((fim is null) or (fim > getdate())))
and ((fim is null) or (fim > getdate()))
and afa.id_servidor = srv.id
and srv.id = mns.id_servidor
and mns.mes_referencia = @mesref
and mns.situacao <> 'DSL'
union
select srv.matricula
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
rh.param_previdencia par
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and inc.codigo in (81)
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and mns.mes_referencia = @mesref
and mns.mes_referencia = par.mes_referencia
and mns.id_vinculo_empregaticio = par.id_vinculo_empregaticio
and mns.id_classificacao_funcional = par.id_classificacao_funcional
and par.id_orgao_previdenciario = 2
drop table #maternidade
11 - checando FGTS
use governa
declare
@mesref int = 202305
begin
print 'Não INSS com FGTS'
select fis.cpf, srv.matricula, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and isnull(bse.fgts_servidor_valor,0) <> .0000
and isnull(bse.previ_tipo,'0') <> 'INS'
end
begin
print 'Celetista sem FGTS'
select fis.cpf, srv.matricula, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and bse.id_vinculo_empregaticio = 2
and bse.id_classificacao_funcional in (1,14)
and isnull(bse.fgts_servidor_valor,0) <> .0000
end
begin
print 'celetista sem FGTS'
select srv.matricula, fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and bse.id_vinculo_empregaticio = 1
and bse.id_classificacao_funcional NOT in (5,6,31,33,27,12)
and isnull(bse.fgts_servidor_valor,0) = .0000
and mns.processa_fgts = 0
end
begin
print 'Nao Celetista com FGTS'
select fis.cpf, bse.matricula, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and bse.id_vinculo_empregaticio = 2
and bse.id_classificacao_funcional NOT in (1,14)
and isnull(bse.fgts_servidor_valor,0) <> .0000
end
begin
print 'Celetista sem FGTS'
select srv.matricula,fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and bse.id_vinculo_empregaticio = 2
and bse.id_classificacao_funcional in (1,14)
and isnull(bse.fgts_servidor_valor,0) = .0000
end
begin
print 'Base de FGTS Diferente da base Previdencia'
select srv.matricula, fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, bse.previ_folha_base, bse.fgts_folha_base, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and isnull(bse.fgts_folha_base,0) <> isnull(bse.previ_folha_base,0)
and isnull(bse.fgts_servidor_valor,0) <> 0
end
begin
print 'Sem valor de previdencia na base e com verba de previdencia'
select srv.matricula, fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, bse.previ_folha_base, bse.fgts_folha_base, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and inc.codigo in (6004,6002)
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and isnull(bse.previ_folha_valor,0) = 0
end
begin
print 'Valor do FGTS diferente'
select srv.matricula, fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, bse.previ_folha_base, bse.fgts_folha_base, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and inc.id = rot.id_verba
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and inc.codigo in (6004)
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and round((bse.fgts_folha_base*8)/100,2) - bse.fgts_servidor_valor >=0.02
end
begin
print 'Celetista com Classificacao Diferente'
select fis.cpf, bse.matricula, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and bse.id_vinculo_empregaticio = 1
and bse.id_classificacao_funcional NOT in (1,4,13,14,30,35)
and isnull(bse.fgts_servidor_valor,0) <> .0000
end
begin
print 'Servidor com ocorrencia 05'
select fis.cpf, bse.matricula, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, ltc.codigo, lms.descricao_reduzida_lotacao
from rh.financeiro_mensal bse,
rh.servidor srv,
rh.servidor_mensal mns,
rh.lotacao ltc,
rh.lotacao_mensal lms,
admin.pessoa_fisica fis
where bse.id_servidor_mensal = mns.id
and srv.id_pessoa = fis.id
and mns.id_servidor = srv.id
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and ltc.id = lms.id_lotacao
and mns.mes_referencia = @mesref
and bse.rotina = 'FOL'
and mns.ocorrencia_especial_sefip in ('05','5')
--colocar ainda para verificar verba fixa 9005
end
--print 'Servidor com ocorrencia 05'
--select fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor
--from rh.financeiro_mensal bse,
-- rh.servidor srv,
-- rh.servidor_mensal mns,
-- admin.pessoa_fisica fis
--where bse.id_servidor_mensal = mns.id
-- and srv.id_pessoa = fis.id
-- and mns.id_servidor = srv.id
-- and mns.mes_referencia = 201904
-- and bse.rotina = 'FOL'
-- and mns.ocorrencia_especial_sefip in ('05','5')
--colocar ainda para verificar verba fixa 6004
--union
--select 'mtcfnc' = bse.mtcfnc, 'Nomfnc' = 'Nome'
--from tbrhpssmns mns,
-- tbrhfinbse bse
--where mns.mesref = @MesRef
-- and mns.mesref = bse.mesref
-- and mns.mtcfnc = bse.mtcfnc
-- and bse.tiprotcal = 4
-- and mns.CodOcoSefip in ('05','5')
-- and mns.CalFgts = 'S'
--group by bse.mtcfnc,bse.numseqpns,bse.codltc,BseCalFgtsFin ,bse.vlrfgtsfin
--select fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor
--from rh.financeiro_mensal bse,
-- rh.servidor srv,
-- rh.servidor_mensal mns,
-- admin.pessoa_fisica fis
--where bse.id_servidor_mensal = mns.id
-- and srv.id_pessoa = fis.id
-- and mns.id_servidor = srv.id
-- and mns.mes_referencia = 201904
-- and bse.rotina = 'FOL'
-- and mns.ocorrencia_especial_sefip in ('05','5')
--colocar ainda para verificar verba fixa 6004
--union
--select 'mtcfnc' = bse.mtcfnc, 'Nomfnc' = 'Nome'
--from tbrhpssmns mns,
-- tbrhfinbse bse
--where mns.mesref = @MesRef
-- and mns.mesref = bse.mesref
-- and mns.mtcfnc = bse.mtcfnc
-- and bse.tiprotcal = 4
-- and ((mns.CodOcoSefip is null) or (mns.CodOcoSefip = ''))
-- and mns.MtcFnc in (select MtcFnc from TbRhVbaFix where CodVba = 9005 and ((DatFimVbaFix >= GETDATE()) or (DatFimVbaFix is null)))
--group by bse.mtcfnc,bse.numseqpns,bse.codltc ,BseCalFgtsFin,bse.vlrfgtsfin
--select srv.matricula, fis.cpf, bse.salario_bruto_valor 'Valor Bruto', previ_tipo, fgts_servidor_valor, bse.previ_folha_base, bse.fgts_folha_base
--from rh.financeiro_mensal bse,
-- rh.servidor srv,
-- rh.servidor_mensal mns,
-- admin.pessoa_fisica fis
--where bse.id_servidor_mensal = mns.id
-- and srv.id_pessoa = fis.id
-- and mns.id_servidor = srv.id
-- and mns.mes_referencia = 201904
-- and bse.rotina = 'FOL'
-- and round(bse.fgts_folha_base*0.08,2) <> bse.fgts_servidor_valor
12 - verifica servidores sem vencimento no mês
-- verifica servidores sem vencimento no mês
use governa
select mns.matricula, mns.id_verba_vencimento, ltc.codigo, lms.descricao, mns.id_cargo, mns.id_classificacao_funcional
from rh.servidor_mensal mns, rh.grau_salarial gra, rh.lotacao ltc, rh.lotacao_mensal lms, rh.financeiro_mensal fmn
where mns.mes_referencia = 202305
and mns.id_verba_vencimento is null
and isnull(mns.id_grau_salarial,0) = gra.id
and mns.id_cargo not in (1877,1935,1896,2552,1939,2213,2204,2011,1876)
and mns.id_classificacao_funcional not in (2,17,16,21,13)
and mns.id_lotacao_mensal = lms.id
--and mns.id_verba_vencimento = 314
and fmn.id_servidor_mensal = mns.id
and lms.id_lotacao = ltc.id
and lms.mes_referencia = mns.mes_referencia
and ltc.codigo not in (104)
13 - VERIFICANDO SERVIDORES COM INSALUBRIDADE E PERICULOSIDADE
use governa
declare
@mesref int = 202305
select srv.matricula, bse.salario_bruto_valor
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.descricao like '%INSALU%'
and inc.codigo < 5000
and srv.matricula in (select srv.matricula
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.descricao like '%pericu%'
and inc.codigo < 5000)
14 - verificando hora extra errada
use governa
declare
@mesref int = 202305
--verifica servidor com verba de medico 20h
select srv.matricula, pes.nome
from rh.verba vba,
rh.verba_rotina rot,
rh.verba_eventual vra,
rh.servidor srv,
rh.servidor_mensal mns,
rh.financeiro_mensal bse,
admin.pessoa pes,
rh.cargo fun,
rh.cargo_mensal crm
where vba.id = rot.id_verba
and rot.id = vra.id_verba_rotina
and vra.id_servidor = srv.id
and srv.id = mns.id_servidor
and mns.id = bse.id_servidor_mensal
and vra.mes_referencia = mns.mes_referencia
and mns.mes_referencia = crm.mes_referencia
and pes.id = srv.id_pessoa
and rot.rotina = 'FOL'
and vba.codigo in (1059,1060)
and mns.id_cargo = crm.id_cargo
and crm.id_cargo = fun.id
and fun.codigo not in (642)
and vra.mes_referencia = @mesref
--verifica medico 20h com verba errada
select srv.matricula, pes.nome, fun.descricao, vba.codigo as verba
from rh.verba vba,
rh.verba_rotina rot,
rh.verba_eventual vra,
rh.servidor srv,
rh.servidor_mensal mns,
rh.financeiro_mensal bse,
admin.pessoa pes,
rh.cargo fun,
rh.cargo_mensal crm
where vba.id = rot.id_verba
and rot.id = vra.id_verba_rotina
and vra.id_servidor = srv.id
and srv.id = mns.id_servidor
and mns.id = bse.id_servidor_mensal
and vra.mes_referencia = mns.mes_referencia
and mns.mes_referencia = crm.mes_referencia
and pes.id = srv.id_pessoa
and rot.rotina = 'FOL'
and vba.codigo in (1057,1058)
and mns.id_cargo = crm.id_cargo
and crm.id_cargo = fun.id
and fun.codigo in (642)
and vra.mes_referencia = @mesref
15 - Altera verba 709 763 para 303 de quem está na TABSAL PCIVIL
use governa
declare
@mesref int = 202305
select srv.matricula, ltc.codigo, inc.codigo, evt.valor
--update rh.verba_eventual set id_verba_rotina = 638
from rh.servidor srv,
rh.servidor_mensal mns,
rh.servidor_local lcl,
rh.local_trabalho loc,
rh.lotacao ltc,
rh.verba_eventual evt,
rh.verba_rotina vms,
rh.verba inc,
rh.cargo crg,
rh.cargo_mensal crm,
rh.nivel_salarial niv
where srv.id = mns.id_servidor
and mns.id = lcl.id_servidor_mensal
and lcl.id_local_trabalho = loc.id
and loc.id_lotacao = ltc.id
and evt.id_servidor = srv.id
and evt.id_verba_rotina = vms.id
and vms.id_verba = inc.id
and evt.mes_referencia = mns.mes_referencia
and mns.id_cargo = crg.id
and crg.id = crm.id_cargo
and mns.mes_referencia = crm.mes_referencia
and crm.id_nivel_salarial = niv.id
and niv.nivel = 'PCIVIL'
and inc.codigo in (709,363)
and vms.rotina = 'FOL'
and mns.mes_referencia = 202305
--order by ltc.codigo
--select * from rh.verba_rotina rot, rh.verba inc where rot.id_verba = inc.id and rot.rotina = 'FOL' and inc.codigo = 303
16 - checando gozo com varias datas de pagamento para mesmo período aquisitivo
use governa
declare
@mesref int = 202305
select srv.matricula, fer.inicio, fer.fim, mns.id_cargo,crg.descricao, count(distinct data_pagamento) 'Qde_data' into #temp
from rh.servidor_ferias fer, rh.servidor_ferias_gozo goz, rh.servidor srv, rh.servidor_mensal mns, rh.cargo crg
where fer.id = goz.id_servidor_ferias
and fer.id_servidor = srv.id
and srv.id = mns.id_servidor
and mns.id_cargo = crg.id
and mns.mes_referencia = @mesref
and goz.data_pagamento is not null
and goz.data_pagamento >= SUBSTRING(convert(char(6),@mesref), 1, 6) + '01'
and mns.id_cargo not in (select fca.id_cargo from rh.param_ferias_especiais_cargo fca, rh.param_ferias_especiais esp where fca.id_param_ferias_especiais = esp.id and esp.quantidade_pagamento = 2)
group by srv.matricula, fer.inicio, fer.fim, mns.id_cargo,crg.descricao
having count(distinct data_pagamento) > 1
select tmp.matricula, pes.nome, tmp.descricao, tmp.inicio, tmp.fim, lms.codigo, lms.descricao, goz.data_pagamento
from #temp tmp, rh.servidor srv, admin.pessoa pes, rh.servidor_mensal mns, rh.lotacao_mensal lms, rh.servidor_ferias_gozo goz, rh.servidor_ferias fer
where srv.id_pessoa = pes.id
and srv.matricula = tmp.matricula
and goz.id_servidor_ferias = fer.id
and fer.inicio = tmp.inicio
and fer.fim = tmp.fim
and fer.id_servidor = srv.id
and srv.id = mns.id_servidor
and mns.id_lotacao_mensal = lms.id
and mns.mes_referencia = lms.mes_referencia
and mns.mes_referencia = @mesref
and goz.data_pagamento >= SUBSTRING(convert(char(6),@mesref), 1, 6) + '01'
order by goz.data_pagamento
drop table #temp
17 - checando quem tem averbação duplicada
-- Confere quem tem averbação duplicada
use governa
select avb.codigo, count(*) 'qde' into #temp
from rh.averbacao avb, rh.servidor srv
where avb.id_servidor = srv.id
group by avb.codigo
having count(*) > 1
select tmp.codigo, max(id) 'deletar' into #deletar
from #temp tmp, rh.averbacao avb
where tmp.codigo = avb.codigo
group by tmp.codigo
--PRIMEIRO APAGA O FINANCEIRO DA AVERBAÇÃO
select *
--delete rh.financeiro_mensal_averbacao
from rh.financeiro_mensal_averbacao fma, #deletar del
where mes_referencia = 202305
and del.deletar = fma.id_averbacao
--SEGUNDO APAGA NA TABELA DE AVERBAÇÃO
select *
--delete rh.averbacao
From #deletar del, rh.averbacao avb, rh.servidor srv
where del.deletar = avb.id
and srv.id = avb.id_servidor
--drop table #temp
--drop table #deletar
-- CHECANDO QUEM ESTÁ COM AVERBAÇÃO DE PLANO DE SAÚDE ZERADA
select matricula,*
--update rh.averbacao set situacao = 'SUS'
from rh.averbacao ave, rh.servidor srv
where srv.id = ave.id_servidor
and situacao = 'atv'
and valor_parcela = 0.00
and id_verba in (2019,2009,2012,1913,2160,2159,1736,1518,1715,7548,2075,1568,2077,2036,2039,7692,1504,2037,2038,7642,7674,1488,1874,1689,1622,1572,2015,1499,1753,1752,1757)
18 - Checando Recebimento Cumulativo das Verbas 165. 2013 e 2015
use governa
declare
@mesref int = 202305
select srv.matricula, bse.salario_bruto_valor
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.codigo = 165
and srv.matricula in (select srv.matricula
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.codigo in (2013, 2015))
select srv.matricula, bse.salario_bruto_valor
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.codigo = 2013
and srv.matricula in (select srv.matricula
from rh.financeiro_mensal bse,
rh.financeiro_mensal_verba vba,
rh.verba inc,
rh.verba_rotina rot,
rh.servidor_mensal mns,
rh.servidor srv,
admin.pessoa_fisica fis
where bse.id = vba.id_financeiro_mensal
and vba.id_verba_rotina = rot.id
and rot.id_verba = inc.id
and rot.rotina = 'FOL'
and bse.id_servidor_mensal = mns.id
and mns.id_servidor = srv.id
and srv.id_pessoa = fis.id
and mns.mes_referencia = @mesref
and inc.codigo in (2015))
19 - Checar SEJUS com verba de adicional noturno errado 719
use governa
declare
@mesref int = 202305
select srv.matricula, ltc.codigo, inc.codigo, evt.valor
--update rh.verba_eventual set id_verba_rotina = 1389
from rh.servidor srv,
rh.servidor_mensal mns,
rh.servidor_local lcl,
rh.local_trabalho loc,
rh.lotacao ltc,
rh.verba_eventual evt,
rh.verba_rotina vms,
rh.verba inc,
rh.cargo crg,
rh.cargo_mensal crm,
rh.nivel_salarial niv
where srv.id = mns.id_servidor
and mns.id = lcl.id_servidor_mensal
and lcl.id_local_trabalho = loc.id
and loc.id_lotacao = ltc.id
and evt.id_servidor = srv.id
and evt.id_verba_rotina = vms.id
and vms.id_verba = inc.id
and evt.mes_referencia = mns.mes_referencia
and mns.id_cargo = crg.id
and crg.id = crm.id_cargo
and mns.mes_referencia = crm.mes_referencia
and crm.id_nivel_salarial = niv.id
and inc.codigo in (709,363,303)
and vms.rotina = 'FOL'
and mns.mes_referencia = 202305
and srv.matricula in (300117240,300116567,300117236,300087537,300088222,300116555,300117152,300118201,300088168,300097844,300087534,300093063,
300117156,300093240,300117209,300117115,300117156,300097551,300098884,300117142,300097767,300117117,300116391,300117663,
300097802,300099905,300117128,300116396,300084204,300088740,300098848,300098865,300093102,300137150)
order by ltc.codigo
select codigo, rot.id from rh.verba inc, rh.verba_rotina rot
where inc.id = rot.id_verba
and codigo = 719
and rotina = 'FOL'
20 - Checar SEJUS com verba de adicional noturno errado. 783
use governa
declare
@mesref int = 202305
select srv.matricula, ltc.codigo, inc.codigo, evt.valor
--update rh.verba_eventual set id_verba_rotina = 1546
from rh.servidor srv,
rh.servidor_mensal mns,
rh.servidor_local lcl,
rh.local_trabalho loc,
rh.lotacao ltc,
rh.verba_eventual evt,
rh.verba_rotina vms,
rh.verba inc,
rh.cargo crg,
rh.cargo_mensal crm,
rh.nivel_salarial niv
where srv.id = mns.id_servidor
and mns.id = lcl.id_servidor_mensal
and lcl.id_local_trabalho = loc.id
and loc.id_lotacao = ltc.id
and evt.id_servidor = srv.id
and evt.id_verba_rotina = vms.id
and vms.id_verba = inc.id
and evt.mes_referencia = mns.mes_referencia
and mns.id_cargo = crg.id
and crg.id = crm.id_cargo
and mns.mes_referencia = crm.mes_referencia
and crm.id_nivel_salarial = niv.id
and inc.codigo in (785,719,709,363,303)
and vms.rotina = 'FOL'
and mns.mes_referencia = 202305
and srv.matricula in (300099974,300118201)
order by ltc.codigo
select codigo, rot.id from rh.verba inc, rh.verba_rotina rot
where inc.id = rot.id_verba
and codigo = 783
and rotina = 'FOL'