Ir para o conteúdo principal

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)
Diego Gonçalves de Almeida (Assessor)
Jônatas Legal (Técnico em Tecnologia da Informação e Comunicação) (Assessor)
Rodrigo Stefano Sales Nascimento (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 monolito.PNG

É 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 microsservicos.PNG

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
  • Configurar como API com Spring Framework em Java
  • Configurar versionamento e ambientes de Development, Staging e Production na esteira do gitlab
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'