Você está na página 1de 28

CREATE OR REPLACE PROCEDURE USISTEMA.

GERA_SUBSTITUICAO ( P_REF_ANOMES IN NUMBER


, P_ID_AUX IN NUMBER
, P_CDG_ORGAO IN NUMBER
, P_CDG_ORDEM IN NUMBER
, P_CDG_FUNCIONAL IN NUMBER
, P_ODM_ATUALIZACAO IN NUMBER)
AS
TYPE L_VETOR_VALORES IS RECORD ( VALOR NUMBER(13, 2)
, VALOR_MES NUMBER(13, 2)
, QUANTIDADE NUMBER);

TYPE tVETOR IS TABLE OF L_VETOR_VALORES;

VETOR_11280 tVETOR;
VETOR_11281 tVETOR;
VETOR_11284 tVETOR;
VETOR_11287 tVETOR;
P_REF_ANOMES_INICIO NUMBER;
P_REF_ANOMES_FIM NUMBER;
L_DTA_INICIO DATE;
L_DTA_FIM DATE;
L_TIP_SUBSTITUICAO NUMBER;
L_CDG_CARGOEFETIVO NUMBER;
L_CDG_CARGOEXT NUMBER;
L_CDG_FUNCAO NUMBER;
L_CLASSE VARCHAR(25);
L_NIVEL VARCHAR(25);
L_CDG_ORDEM_SUBST NUMBER;
L_CDG_FUNCIONAL_SUBST NUMBER;
L_ID_CARGO NUMBER;
L_CDG_FUNCAOEXT NUMBER;
L_VLR_AUXILIAR FLOAT;
L_ID_CH_CARGO NUMBER;
L_CH_CARGO NUMBER;
L_ID_CH_FUNCAO NUMBER;
L_CH_FUNCAO NUMBER;
L_VALOR FLOAT;
L_VLR_REPRESENTACAO FLOAT;
L_VLR_SUBSTITUICAO_FUNCAO FLOAT;
L_CDG_GRU_CARGO VARCHAR(3);
L_QTD_DIAS_SUBST NUMBER;
L_QTD_DIAS_SUBST_ORIGINAL NUMBER;
L_VLR_CARGOEXT FLOAT;
L_VLR_VENC_COMISSAO FLOAT;
L_VLR_VENCIMENTO FLOAT;
L_VLR_VENC_COM_SUBST FLOAT;
L_VLR_FUNC_COM_SUBST FLOAT;
L_VLR_DEV_ALT FLOAT;
L_QTDDIAS_DEV_ALT FLOAT;
L_CDG_GRU_CARGO_FUNC VARCHAR(3);
L_CLASSE_FUNC VARCHAR(25);
L_NIVEL_FUNC VARCHAR(5);
L_CDG_CARREIRA_FUNC NUMBER;
L_VLR_CARGO FLOAT;
L_CUMULACAO FLOAT;
L_CARGO FLOAT;
L_CLASSE_SERVIDOR VARCHAR(25);
L_NIVEL_SERVIDOR VARCHAR(25);
L_VLR_TOTAL_CUMULACAO FLOAT;
L_RECEBE_ULTIMO_DIA FLOAT;
I INTEGER;
J INTEGER;
K INTEGER;
IND_VET INTEGER;
L_EXISTE INTEGER;
L_CDG_TIP_EVENTO NUMBER;
L_CDG_UNIDADE_SUBST VARCHAR(50);
L_DTA_SUBSTITUICAO DATE;
L_VALOR_CARGO FLOAT;
L_VALOR_CARGO_2 FLOAT;
L_VLR_CHEIO_VENCIMENTO NUMBER;
L_VLR_CHEIO_REPRESENTACAO NUMBER;
L_VALOR_DIA NUMBER;
L_MAIOR_VALOR_11280 NUMBER;
L_MAIOR_VALOR_11281 NUMBER;
L_MAIOR_VALOR_11284 NUMBER;
L_MAIOR_VALOR_11287 NUMBER;
L_VLR_CARGO_SERVIDOR NUMBER;
L_VLR_CARGOEXT_SERVIDOR NUMBER;
L_VLR_REPRESENTACAO_SERVIDOR NUMBER;
L_VLR_FUNCAO_SERVIDOR NUMBER;
L_VLR_COMPLEMENTO_SERVIDOR NUMBER;
L_VLR_CARGO_SERV_DIA NUMBER;
L_VLR_CARGOEXT_SERV_DIA NUMBER;
L_VLR_REPRESENTACAO_SERV_DIA NUMBER;
L_VLR_FUNCAO_SERV_DIA NUMBER;
L_VLR_COMPLEMENTO_SERV_DIA NUMBER;
L_VLR_CORTE_CUMULACAO NUMBER;
L_VLR_LIMITE_CUMULACAO NUMBER;
L_VLR_TOTAL_FUNCAO NUMBER;
L_VLR_LIMITE_FUNCAO NUMBER;
L_30_DIAS_CUMULACAO NUMBER;
L_OBSERVACAO VARCHAR(40);
L_VALOR_TOT_CUMULACAO NUMBER;
TOT_VETOR_11284 NUMBER;
L_TOT_FIM NUMBER;

CURSOR CURSOR_SUBSTITUICAO IS
SELECT S.DTA_INI_EVENTO
, SL.DTA_TERMINO
, SL.CDG_CARGOEFETIVO
, SL.CDG_CARGOEXT
, SL.CDG_FUNCAO
, SL.CLASSE
, SL.NIVEL
, SL.CDG_ORDEM_SUBST
, SL.CDG_FUNCIONAL_SUBST
, SL.CUMULACAO_CARGO
, SL.RECEBE_ULTIMO_DIA
, (SELECT C.CDG_CARGO
FROM USISTEMA.TBDCARGO DC
, USISTEMA.TBCARGO C
WHERE DC.CDG_ORGAO = P_CDG_ORGAO
AND DC.CDG_ORDEM = P_CDG_ORDEM
AND DC.CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND DC.ID_CARGO = 1
AND DC.DTA_INI_CARGO = (SELECT MAX(DC2.DTA_INI_CARGO)
FROM USISTEMA.TBDCARGO DC2
WHERE DC2.CDG_ORGAO = DC.CDG_ORGAO
AND DC2.CDG_ORDEM = DC.CDG_ORDEM
AND DC2.CDG_FUNCIONAL =
DC.CDG_FUNCIONAL
AND TO_CHAR(DC2.DTA_INI_CARGO,
'YYYYMM') <= P_REF_ANOMES)
AND C.CDG_ORGAO = DC.CDG_ORGAO
AND C.CDG_CARGO = DC.CDG_CARGO
AND C.DTA_INI_CARGO = (SELECT MAX(C2.DTA_INI_CARGO)
FROM USISTEMA.TBCARGO C2
WHERE C2.CDG_ORGAO = C.CDG_ORGAO
AND C2.CDG_CARGO = C.CDG_CARGO
AND TO_CHAR(C2.DTA_INI_CARGO, 'YYYYMM')
<= P_REF_ANOMES)) AS CARGO
, (SELECT DC.CLASSE
FROM USISTEMA.TBDCARGO DC
, USISTEMA.TBCARGO C
WHERE DC.CDG_ORGAO = P_CDG_ORGAO
AND DC.CDG_ORDEM = P_CDG_ORDEM
AND DC.CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND DC.ID_CARGO = 1
AND DC.DTA_INI_CARGO = (SELECT MAX(DC2.DTA_INI_CARGO)
FROM USISTEMA.TBDCARGO DC2
WHERE DC2.CDG_ORGAO = DC.CDG_ORGAO
AND DC2.CDG_ORDEM = DC.CDG_ORDEM
AND DC2.CDG_FUNCIONAL =
DC.CDG_FUNCIONAL
AND TO_CHAR(DC2.DTA_INI_CARGO,
'YYYYMM') <= P_REF_ANOMES)
AND C.CDG_ORGAO = DC.CDG_ORGAO
AND C.CDG_CARGO = DC.CDG_CARGO
AND C.DTA_INI_CARGO = (SELECT MAX(C2.DTA_INI_CARGO)
FROM USISTEMA.TBCARGO C2
WHERE C2.CDG_ORGAO = C.CDG_ORGAO
AND C2.CDG_CARGO = C.CDG_CARGO
AND TO_CHAR(C2.DTA_INI_CARGO, 'YYYYMM')
<= P_REF_ANOMES)) AS CLASSE
, (SELECT DC.NIVEL
FROM USISTEMA.TBDCARGO DC
, USISTEMA.TBCARGO C
WHERE DC.CDG_ORGAO = P_CDG_ORGAO
AND DC.CDG_ORDEM = P_CDG_ORDEM
AND DC.CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND DC.ID_CARGO = 1
AND DC.DTA_INI_CARGO = (SELECT MAX(DC2.DTA_INI_CARGO)
FROM USISTEMA.TBDCARGO DC2
WHERE DC2.CDG_ORGAO = DC.CDG_ORGAO
AND DC2.CDG_ORDEM = DC.CDG_ORDEM
AND DC2.CDG_FUNCIONAL =
DC.CDG_FUNCIONAL
AND TO_CHAR(DC2.DTA_INI_CARGO,
'YYYYMM') <= P_REF_ANOMES)
AND C.CDG_ORGAO = DC.CDG_ORGAO
AND C.CDG_CARGO = DC.CDG_CARGO
AND C.DTA_INI_CARGO = (SELECT MAX(C2.DTA_INI_CARGO)
FROM USISTEMA.TBCARGO C2
WHERE C2.CDG_ORGAO = C.CDG_ORGAO
AND C2.CDG_CARGO = C.CDG_CARGO
AND TO_CHAR(C2.DTA_INI_CARGO, 'YYYYMM')
<= P_REF_ANOMES)) AS NIVEL
, SL.CDG_UNIDADE
, S.CDG_TIP_EVENTO
FROM USISTEMA.TBDDESIGNACAO S
, USISTEMA.TBDESIGNACAO_LOTACAO SL
WHERE S.CDG_ORGAO = P_CDG_ORGAO
AND S.CDG_ORDEM = P_CDG_ORDEM
AND S.CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND S.ID_DEFERIDO = 1
AND SL.GERA_FINANCEIRO = 1
AND S.CDG_DESIG_LOTACAO = SL.CDG_DESIG_LOTACAO
AND S.CDG_ORGAO = SL.CDG_ORGAO
AND S.DTA_INI_EVENTO <= L_DTA_SUBSTITUICAO
AND ((SL.DTA_TERMINO IS NULL)
OR (SL.DTA_TERMINO >= L_DTA_SUBSTITUICAO))
--AND TO_DATE(L_DTA_SUBSTITUICAO) >= S.DTA_INI_EVENTO
--AND ((SL.DTA_TERMINO IS NULL)
--OR (TO_DATE(L_DTA_SUBSTITUICAO) <= SL.DTA_TERMINO))
AND S.REF_ANOMES <= P_REF_ANOMES
AND (CASE WHEN (NVL(P_ID_AUX,0) = -4)
THEN S.REF_ANOMES_INCLUSAO
ELSE 0
END) < (CASE WHEN (NVL(P_ID_AUX,0) = -4)
THEN P_REF_ANOMES
ELSE 1
END)
AND S.CDG_TIP_EVENTO <> 777
--AND TO_NUMBER(S.DTA_INI_EVENTO, 'YYYYMM') <= P_REF_ANOMES
--AND ((SL.DTA_TERMINO IS NULL)
--OR (TO_NUMBER(SL.DTA_TERMINO, 'YYYYMM') >= P_REF_ANOMES))
--AND S.DTA_INI_EVENTO = TO_DATE('11/03/2016','DD/MM/YYYY')
ORDER BY 3 DESC;

CURSOR CURSOR_DIAS_MES_SUBST IS
SELECT TO_DATE(P_REF_ANOMES || '01', 'YYYYMMDD') + LEVEL - 1 AS DIA
FROM DUAL
CONNECT BY LEVEL <= ((LAST_DAY(TO_DATE(P_REF_ANOMES || '01', 'YYYYMMDD')) -
TO_DATE(P_REF_ANOMES || '01', 'YYYYMMDD')) + 1)
ORDER BY 1 ASC;

CURSOR BUSCA_VALORES_SERVIDOR IS
SELECT USISTEMA.GERA_SUBST_DIA_CARGO_PRINC ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, L_DTA_SUBSTITUICAO) AS VLR_CARGO
, USISTEMA.GERA_SUBST_DIA_CARGO_COMISS_V ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, L_DTA_SUBSTITUICAO) AS
VLR_CARGO_COMISS
, USISTEMA.GERA_SUBST_DIA_CARGO_COMISS_F ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, L_DTA_SUBSTITUICAO) AS
VLR_REPRESENTACAO
, USISTEMA.GERA_SUBST_DIA_FUNCAO ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, L_DTA_SUBSTITUICAO) AS VLR_FUNCAO
, USISTEMA.GERA_SUBST_DIA_COMPLEM_COMISS ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, L_DTA_SUBSTITUICAO) AS
VLR_COMPLEMENTO
FROM DUAL;

CURSOR EXISTE_SUBST IS
SELECT COUNT(*)
FROM USISTEMA.TBDDESIGNACAO S
, USISTEMA.TBDESIGNACAO_LOTACAO SL
WHERE (S.CDG_ORGAO = P_CDG_ORGAO)
AND (S.CDG_ORDEM = P_CDG_ORDEM)
AND (S.CDG_FUNCIONAL = P_CDG_FUNCIONAL)
AND (S.ID_DEFERIDO = 1)
AND (SL.GERA_FINANCEIRO = 1)
AND (S.CDG_DESIG_LOTACAO = SL.CDG_DESIG_LOTACAO)
AND (S.CDG_ORGAO = SL.CDG_ORGAO)
AND (TO_NUMBER(TO_CHAR(S.DTA_INI_EVENTO,'YYYYMM')) <= P_REF_ANOMES)
AND S.REF_ANOMES <= P_REF_ANOMES
AND (CASE WHEN (NVL(P_ID_AUX, 0) = -4)
THEN S.REF_ANOMES_INCLUSAO
ELSE 0
END) < (CASE WHEN (NVL(P_ID_AUX, 0) = -4)
THEN P_REF_ANOMES
ELSE 1
END)
AND ((SL.DTA_TERMINO IS NULL)
OR (TO_NUMBER(TO_CHAR(SL.DTA_TERMINO, 'YYYYMM')) >= P_REF_ANOMES))
AND S.CDG_TIP_EVENTO <> 777;
BEGIN
DELETE FROM USISTEMA.TB_CALCULO_SUBSTITUICAO
WHERE REF_ANOMES = P_REF_ANOMES
AND CDG_ORGAO = P_CDG_ORGAO
AND ID_AUX = P_ID_AUX
AND CDG_ORDEM = P_CDG_ORDEM
AND CDG_FUNCIONAL = P_CDG_FUNCIONAL;

L_EXISTE := 0;
L_VALOR_TOT_CUMULACAO := 0;

OPEN EXISTE_SUBST;

FETCH EXISTE_SUBST
INTO L_EXISTE;

CLOSE EXISTE_SUBST;
L_EXISTE := NVL(L_EXISTE, 0);

IF (L_EXISTE = 0) THEN
RETURN;
END IF;

VETOR_11280 := tVETOR();
VETOR_11281 := tVETOR();
VETOR_11284 := tVETOR();
VETOR_11287 := tVETOR();

I := 1;

OPEN CURSOR_DIAS_MES_SUBST; --CURSOR QUE BUSCA OS DIAS DO MÊS DO PRIMEIRO AO


ULTIMO DIA
LOOP
L_DTA_SUBSTITUICAO := NULL;

FETCH CURSOR_DIAS_MES_SUBST
INTO L_DTA_SUBSTITUICAO; --DIA A DIA

EXIT WHEN CURSOR_DIAS_MES_SUBST%NOTFOUND;

L_MAIOR_VALOR_11280 := 0;
L_MAIOR_VALOR_11281 := 0;
L_MAIOR_VALOR_11284 := 0;
L_MAIOR_VALOR_11287 := 0;

L_VLR_CARGO_SERVIDOR := 0;
L_VLR_CARGOEXT_SERVIDOR := 0;
L_VLR_REPRESENTACAO_SERVIDOR := 0;
L_VLR_FUNCAO_SERVIDOR := 0;
L_VLR_COMPLEMENTO_SERVIDOR := 0;

OPEN BUSCA_VALORES_SERVIDOR;

FETCH BUSCA_VALORES_SERVIDOR
INTO L_VLR_CARGO_SERVIDOR
, L_VLR_CARGOEXT_SERVIDOR
, L_VLR_REPRESENTACAO_SERVIDOR
, L_VLR_FUNCAO_SERVIDOR
, L_VLR_COMPLEMENTO_SERVIDOR;

CLOSE BUSCA_VALORES_SERVIDOR;

L_VLR_CARGO_SERV_DIA := TRUNC(NVL(L_VLR_CARGO_SERVIDOR, 0) / 30, 2);


L_VLR_CARGOEXT_SERV_DIA := TRUNC(NVL(L_VLR_CARGOEXT_SERVIDOR, 0) / 30, 2);
L_VLR_REPRESENTACAO_SERV_DIA := TRUNC(NVL(L_VLR_REPRESENTACAO_SERVIDOR, 0) /
30, 2);
L_VLR_FUNCAO_SERV_DIA := TRUNC(NVL(L_VLR_FUNCAO_SERVIDOR, 0) / 30, 2);
L_VLR_COMPLEMENTO_SERV_DIA := TRUNC(NVL(L_VLR_COMPLEMENTO_SERVIDOR, 0) / 30,
2);

IF (NOT VETOR_11280.EXISTS(I)) THEN


VETOR_11280.EXTEND;
VETOR_11280(I).VALOR := 0;
VETOR_11280(I).VALOR_MES := 0;
VETOR_11280(I).QUANTIDADE := 0;
END IF;
IF (NOT VETOR_11281.EXISTS(I)) THEN
VETOR_11281.EXTEND;
VETOR_11281(I).VALOR := 0;
VETOR_11281(I).VALOR_MES := 0;
VETOR_11281(I).QUANTIDADE := 0;
END IF;

IF (NOT VETOR_11284.EXISTS(I)) THEN


VETOR_11284.EXTEND;
VETOR_11284(I).VALOR := 0;
VETOR_11284(I).VALOR_MES := 0;
VETOR_11284(I).QUANTIDADE := 0;
END IF;

IF (NOT VETOR_11287.EXISTS(I)) THEN


VETOR_11287.EXTEND;
VETOR_11287(I).VALOR := 0;
VETOR_11287(I).VALOR_MES := 0;
VETOR_11287(I).QUANTIDADE := 0;
END IF;

OPEN CURSOR_SUBSTITUICAO;
LOOP
L_CDG_CARGOEFETIVO := 0;
L_CDG_CARGOEXT := 0;
L_CDG_FUNCAO := 0;
L_CLASSE := '000000';
L_NIVEL := '000000';
L_TIP_SUBSTITUICAO := 0;
L_CDG_ORDEM_SUBST := 0;
L_CDG_FUNCIONAL_SUBST := 0;
L_CLASSE_SERVIDOR := '000000';
L_NIVEL_SERVIDOR := '000000';

FETCH CURSOR_SUBSTITUICAO
INTO L_DTA_INICIO
, L_DTA_FIM
, L_CDG_CARGOEFETIVO
, L_CDG_CARGOEXT
, L_CDG_FUNCAO
, L_CLASSE
, L_NIVEL
, L_CDG_ORDEM_SUBST
, L_CDG_FUNCIONAL_SUBST
, L_CUMULACAO
, L_RECEBE_ULTIMO_DIA
, L_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_CDG_UNIDADE_SUBST
, L_CDG_TIP_EVENTO;

EXIT WHEN CURSOR_SUBSTITUICAO%NOTFOUND;

if P_REF_ANOMES = 202010 then


EXIT ;
end if;
L_VALOR := 0;
L_VLR_TOTAL_CUMULACAO := 0;
L_VLR_SUBSTITUICAO_FUNCAO := 0;
L_QTD_DIAS_SUBST := 0;
L_VLR_AUXILIAR := 0;

IF (L_CDG_TIP_EVENTO IN (577, 905)) THEN


L_CDG_CARGOEFETIVO := 0;
L_CDG_CARGOEXT := 0;
L_CDG_FUNCAO := 0;
L_CLASSE := NULL;
L_NIVEL := NULL;
END IF;

L_CDG_CARGOEFETIVO := NVL(L_CDG_CARGOEFETIVO, 0);


L_CDG_CARGOEXT := NVL(L_CDG_CARGOEXT, 0);
L_CDG_FUNCAO := NVL(L_CDG_FUNCAO, 0);
L_CLASSE := NVL(L_CLASSE,'000000');
L_NIVEL := NVL(L_NIVEL,'000000');
L_TIP_SUBSTITUICAO := NVL(L_TIP_SUBSTITUICAO, 0);
L_CDG_ORDEM_SUBST := NVL(L_CDG_ORDEM_SUBST, 0);
L_CDG_FUNCIONAL_SUBST := NVL(L_CDG_FUNCIONAL_SUBST, 0);
L_CLASSE_SERVIDOR := NVL(L_CLASSE_SERVIDOR,'000000');
L_NIVEL_SERVIDOR := NVL(L_NIVEL_SERVIDOR,'000000');
L_RECEBE_ULTIMO_DIA := NVL(L_RECEBE_ULTIMO_DIA, 0);
L_CDG_TIP_EVENTO := NVL(L_CDG_TIP_EVENTO, 0);

IF (L_CDG_CARGOEFETIVO <> 0) THEN


L_TIP_SUBSTITUICAO := 0;
END IF;

IF (L_CDG_CARGOEXT <> 0) THEN


L_TIP_SUBSTITUICAO := 2;
END IF;

IF (L_CDG_FUNCAO <> 0) THEN


L_TIP_SUBSTITUICAO := 1;
END IF;

L_QTD_DIAS_SUBST := USISTEMA.QTD_DIAS_NO_MES_SUBST_SUSP ( P_CDG_ORGAO


, P_REF_ANOMES
, P_ID_AUX
, L_DTA_SUBSTITUICAO
, L_DTA_SUBSTITUICAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, L_CDG_ORDEM_SUBST
,
L_CDG_FUNCIONAL_SUBST
, L_CDG_TIP_EVENTO
, L_CDG_UNIDADE_SUBST
, L_CUMULACAO
, P_REF_ANOMES_INICIO
, P_REF_ANOMES_FIM
,
L_QTD_DIAS_SUBST_ORIGINAL);

--L_QTD_DIAS_SUBST := 1;
IF (L_QTD_DIAS_SUBST = 0) THEN
L_TIP_SUBSTITUICAO := -1;
L_CUMULACAO := -1;
END IF;

IF (TO_NUMBER(TO_CHAR(L_DTA_SUBSTITUICAO, 'DD')) = 31) THEN


IF (L_DTA_FIM IS NULL) THEN
L_TIP_SUBSTITUICAO := -1;
END IF;
END IF;

IF (L_DTA_SUBSTITUICAO = L_DTA_FIM) THEN --LAST_DAY(TO_DATE('01/'||


SUBSTR(P_REF_ANOMES,5,2)||'/'||SUBSTR(P_REF_ANOMES,1,4))) THEN
--FICOU INVERTIDO NO CADASTRO A NOMENCLATURA ... 1 FICOU PARA NAO RECEBER O
ULTIMO DIA E 0 FICOU PRA RECEBER O ULTIMO DIA
IF (L_RECEBE_ULTIMO_DIA = 1) THEN
L_TIP_SUBSTITUICAO := -1;
END IF;
END IF;

----------------- SUBSTITUICAO DE CARGO PRINCIPAL

IF (((L_TIP_SUBSTITUICAO = 0) OR (L_CDG_TIP_EVENTO IN (577, 905))) AND


(L_CUMULACAO = 0)) THEN
IF (L_CLASSE <> '000000') THEN
USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEFETIVO
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VLR_CARGOEXT
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);

L_VLR_CARGOEXT := 0;

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VALOR
, L_VLR_REPRESENTACAO);
ELSE
USISTEMA.INF_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEFETIVO
, L_ID_CH_CARGO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_CDG_FUNCAOEXT
, L_VALOR);

L_VALOR := NVL(L_VALOR, 0);

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VALOR
, L_VLR_REPRESENTACAO);
END IF;

L_VALOR_DIA := TRUNC((L_VALOR / 30), 2);

IF (L_VLR_CARGO_SERVIDOR > 0) THEN


IF (L_VLR_CARGO_SERVIDOR <= L_VALOR) THEN
L_VALOR_DIA := L_VALOR_DIA - L_VLR_CARGO_SERV_DIA;
ELSE
L_VALOR_DIA := 0;
END IF;
END IF;

IF (L_VALOR_DIA > VETOR_11280(I).VALOR) THEN


VETOR_11280(I).VALOR := L_VALOR_DIA;
VETOR_11280(I).VALOR_MES := L_VALOR;
L_OBSERVACAO := 'Cargo Efetivo';

UPDATE USISTEMA.TB_CALCULO_SUBSTITUICAO
SET DTA_INICIO_SUBST = L_DTA_INICIO
, DTA_FIM_SUBST = L_DTA_FIM
, VALOR = L_VALOR_DIA
, VLR_REF_CARGO_MES = TRUNC((L_VALOR / 30) , 2)
, VLR_REF_VENC_COMISS_MES = 0
, VLR_REF_REPR_COMISS_MES = 0
, VLR_REF_FUNC_MES = 0
, VLR_DED_CARGO = L_VLR_CARGO_SERV_DIA
, VLR_DED_VENC_COMISS = 0
, VLR_DED_REPR_COMISS = 0
, VLR_DED_FUNCAO = 0
, VLR_DED_COMPLEMENTO = 0
, OBSERVACAO = L_OBSERVACAO
WHERE REF_ANOMES = P_REF_ANOMES
AND CDG_ORGAO = P_CDG_ORGAO
AND ID_AUX = P_ID_AUX
AND CDG_ORDEM = P_CDG_ORDEM
AND CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND CDG_PROVDESC = 11280
AND DTA_ANALISE = L_DTA_SUBSTITUICAO;

IF (SQL%NOTFOUND) THEN
INSERT INTO USISTEMA.TB_CALCULO_SUBSTITUICAO
( CDG_ORGAO
, REF_ANOMES
, ID_AUX
, CDG_ORDEM
, CDG_FUNCIONAL
, CDG_PROVDESC
, DTA_INICIO_SUBST
, DTA_FIM_SUBST
, DTA_ANALISE
, VALOR
, VLR_REF_CARGO_MES
, VLR_REF_VENC_COMISS_MES
, VLR_REF_REPR_COMISS_MES
, VLR_REF_FUNC_MES
, VLR_DED_CARGO
, VLR_DED_VENC_COMISS
, VLR_DED_REPR_COMISS
, VLR_DED_FUNCAO
, VLR_DED_COMPLEMENTO
, OBSERVACAO)
VALUES
( P_CDG_ORGAO
, P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, 11280
, L_DTA_INICIO
, L_DTA_FIM
, L_DTA_SUBSTITUICAO
, L_VALOR_DIA
, TRUNC((L_VALOR / 30), 2)
, 0
, 0
, 0
, L_VLR_CARGO_SERV_DIA
, 0
, 0
, 0
, 0
, L_OBSERVACAO);
END IF;
END IF;
END IF;

----------------- SUBSTITUICAO DE CUMULAÇÃO

IF (((L_TIP_SUBSTITUICAO = 0) OR (L_CDG_TIP_EVENTO IN (577, 905))) AND


(L_CUMULACAO = 1)) THEN
IF (L_CLASSE <> '000000') THEN
USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEFETIVO
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VLR_CARGOEXT
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);

L_VLR_CARGOEXT := 0;

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VALOR
, L_VLR_REPRESENTACAO);
ELSE
USISTEMA.INF_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEFETIVO
, L_ID_CH_CARGO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_CDG_FUNCAOEXT
, L_VALOR);

L_VALOR := NVL(L_VALOR, 0);

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VALOR
, L_VLR_REPRESENTACAO);
END IF;

IF (L_CLASSE_SERVIDOR <> '000000') THEN


USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CARGO
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VALOR_CARGO
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);

L_VALOR_CARGO := 0;

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_VALOR_CARGO
, L_VALOR_CARGO_2);
ELSE
USISTEMA.INF_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CARGO
, L_ID_CH_CARGO
, L_CDG_GRU_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_CDG_FUNCAOEXT
, L_VALOR_CARGO);

L_VALOR_CARGO := NVL(L_VALOR_CARGO, 0);

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_VALOR_CARGO
, L_VALOR_CARGO_2);
END IF;

L_VLR_CORTE_CUMULACAO := L_VALOR_CARGO;

IF (NVL(L_VALOR_CARGO, 0) > 0) THEN


L_VALOR_DIA := L_VALOR / 60;

IF L_CDG_TIP_EVENTO IN (577, 905, 238, 456) THEN


L_VALOR := L_VALOR_CARGO;
L_VALOR_DIA := L_VALOR_CARGO / 60;
END IF;
END IF;

IF L_VALOR_DIA > VETOR_11284(I).VALOR THEN


VETOR_11284(I).VALOR := TRUNC(L_VALOR_DIA, 2);
VETOR_11284(I).VALOR_MES := L_VALOR_CARGO;
VETOR_11284(I).QUANTIDADE := 1;
L_OBSERVACAO := 'Cumulação';
K := 1;
L_VLR_TOTAL_CUMULACAO := 0;
-- L_VLR_LIMITE_CUMULACAO := TRUNC((L_VLR_CORTE_CUMULACAO * 0.15), 2);
--L_VLR_LIMITE_CUMULACAO := TRUNC((L_VLR_CORTE_CUMULACAO * 0.20), 2);
IF P_REF_ANOMES < 202205 THEN
L_VLR_LIMITE_CUMULACAO := TRUNC((L_VLR_CORTE_CUMULACAO * 0.15), 2);
ELSE
L_VLR_LIMITE_CUMULACAO := TRUNC((L_VLR_CORTE_CUMULACAO * 0.20), 2);
END IF;
L_VALOR_TOT_CUMULACAO := L_VLR_LIMITE_CUMULACAO;

WHILE (K <= I) LOOP


L_VLR_TOTAL_CUMULACAO := L_VLR_TOTAL_CUMULACAO + VETOR_11284(K).VALOR;

IF ((L_VLR_TOTAL_CUMULACAO = L_VLR_LIMITE_CUMULACAO) AND (K <> I)) THEN


VETOR_11284(I).VALOR := 0;
VETOR_11284(I).VALOR_MES := 0;
K := I + 1;
END IF;

IF ((L_VLR_TOTAL_CUMULACAO > L_VLR_LIMITE_CUMULACAO) AND (K <= I)) THEN


VETOR_11284(K).VALOR := L_VLR_LIMITE_CUMULACAO -
(L_VLR_TOTAL_CUMULACAO - VETOR_11284(K).VALOR);
VETOR_11284(K).VALOR_MES := 0;
L_30_DIAS_CUMULACAO := 1;

IF (I > K) THEN
VETOR_11284(I).VALOR := 0;
VETOR_11284(I).VALOR_MES := 0;
END IF;

K := I + 1;
END IF;

K := K + 1;
END LOOP;

IF (VETOR_11284(I).VALOR > 0) THEN


UPDATE USISTEMA.TB_CALCULO_SUBSTITUICAO
SET DTA_INICIO_SUBST = L_DTA_INICIO
, DTA_FIM_SUBST = L_DTA_FIM
, VALOR = L_VALOR_DIA
, VLR_REF_CARGO_MES = L_VALOR / 60
, VLR_REF_VENC_COMISS_MES = 0
, VLR_REF_REPR_COMISS_MES = 0
, VLR_REF_FUNC_MES = 0
, VLR_DED_CARGO = 0
, VLR_DED_VENC_COMISS = 0
, VLR_DED_REPR_COMISS = 0
, VLR_DED_FUNCAO = 0
, VLR_DED_COMPLEMENTO = 0
, OBSERVACAO = L_OBSERVACAO
WHERE REF_ANOMES = P_REF_ANOMES
AND CDG_ORGAO = P_CDG_ORGAO
AND ID_AUX = P_ID_AUX
AND CDG_ORDEM = P_CDG_ORDEM
AND CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND CDG_PROVDESC = 11284
AND DTA_ANALISE = L_DTA_SUBSTITUICAO;

IF (SQL%NOTFOUND) THEN
INSERT INTO USISTEMA.TB_CALCULO_SUBSTITUICAO
( CDG_ORGAO
, REF_ANOMES
, ID_AUX
, CDG_ORDEM
, CDG_FUNCIONAL
, CDG_PROVDESC
, DTA_INICIO_SUBST
, DTA_FIM_SUBST
, DTA_ANALISE
, VALOR
, VLR_REF_CARGO_MES
, VLR_REF_VENC_COMISS_MES
, VLR_REF_REPR_COMISS_MES
, VLR_REF_FUNC_MES
, VLR_DED_CARGO
, VLR_DED_VENC_COMISS
, VLR_DED_REPR_COMISS
, VLR_DED_FUNCAO
, VLR_DED_COMPLEMENTO
, OBSERVACAO)
VALUES
( P_CDG_ORGAO
, P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, 11284
, L_DTA_INICIO
, L_DTA_FIM
, L_DTA_SUBSTITUICAO
, VETOR_11284(I).VALOR
, L_VALOR / 60
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, L_OBSERVACAO);
END IF;
END IF;
END IF;

END IF;

----------------- SUBSTITUICAO DE CUMULAÇÃO

IF (((L_TIP_SUBSTITUICAO = 0) OR (L_CDG_TIP_EVENTO IN (1006,


1007,1008,1009,1010,1011))) AND (L_CUMULACAO = 1)
AND (VG.G_CDG_SITFUNC = 12) AND (VETOR_11284(I).VALOR = 0 ) ) THEN
IF (L_CLASSE <> '000000') THEN
USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEFETIVO
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VLR_CARGOEXT
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);

L_VLR_CARGOEXT := 0;

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VALOR
, L_VLR_REPRESENTACAO);
ELSE
USISTEMA.INF_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEFETIVO
, L_ID_CH_CARGO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_CDG_FUNCAOEXT
, L_VALOR);

L_VALOR := NVL(L_VALOR, 0);

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VALOR
, L_VLR_REPRESENTACAO);
END IF;
IF (L_CLASSE_SERVIDOR <> '000000') THEN
USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CARGO
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VALOR_CARGO
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);

L_VALOR_CARGO := 0;

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_VALOR_CARGO
, L_VALOR_CARGO_2);
ELSE
USISTEMA.INF_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CARGO
, L_ID_CH_CARGO
, L_CDG_GRU_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_CDG_FUNCAOEXT
, L_VALOR_CARGO);

L_VALOR_CARGO := NVL(L_VALOR_CARGO, 0);

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE_SERVIDOR
, L_NIVEL_SERVIDOR
, L_VALOR_CARGO
, L_VALOR_CARGO_2);
END IF;

L_VLR_CORTE_CUMULACAO := L_VALOR_CARGO;

IF (NVL(L_VALOR_CARGO, 0) > 0) THEN


L_VALOR_DIA := L_VALOR / 60;

IF L_CDG_TIP_EVENTO IN (1006, 1007,1008,1009,1010,1011) THEN


L_VALOR := L_VALOR_CARGO;
L_VALOR_DIA := L_VALOR_CARGO / 60;
END IF;
END IF;

IF L_VALOR_DIA > VETOR_11287(I).VALOR THEN


VETOR_11287(I).VALOR := TRUNC(L_VALOR_DIA, 2);
VETOR_11287(I).VALOR_MES := L_VALOR_CARGO;
VETOR_11287(I).QUANTIDADE := 1;
L_OBSERVACAO := 'Cumulação';
K := 1;
L_VLR_TOTAL_CUMULACAO := 0;
-- L_VLR_LIMITE_CUMULACAO := TRUNC((L_VLR_CORTE_CUMULACAO * 0.15), 2);
L_VLR_LIMITE_CUMULACAO := TRUNC((L_VLR_CORTE_CUMULACAO * 0.15), 2);

WHILE (K <= I) LOOP


L_VLR_TOTAL_CUMULACAO := L_VLR_TOTAL_CUMULACAO + VETOR_11287(K).VALOR;

IF ((L_VLR_TOTAL_CUMULACAO = L_VLR_LIMITE_CUMULACAO) AND (K <> I)) THEN


VETOR_11287(I).VALOR := 0;
VETOR_11287(I).VALOR_MES := 0;
K := I + 1;
END IF;

IF ((L_VLR_TOTAL_CUMULACAO > L_VLR_LIMITE_CUMULACAO) AND (K <= I)) THEN


VETOR_11287(K).VALOR := L_VLR_LIMITE_CUMULACAO -
(L_VLR_TOTAL_CUMULACAO - VETOR_11287(K).VALOR);
VETOR_11287(K).VALOR_MES := 0;
L_30_DIAS_CUMULACAO := 1;

IF (I > K) THEN
VETOR_11287(I).VALOR := 0;
VETOR_11287(I).VALOR_MES := 0;
END IF;

K := I + 1;
END IF;

K := K + 1;
END LOOP;

IF (VETOR_11287(I).VALOR > 0) THEN


UPDATE USISTEMA.TB_CALCULO_SUBSTITUICAO
SET DTA_INICIO_SUBST = L_DTA_INICIO
, DTA_FIM_SUBST = L_DTA_FIM
, VALOR = L_VALOR_DIA
, VLR_REF_CARGO_MES = L_VALOR / 60
, VLR_REF_VENC_COMISS_MES = 0
, VLR_REF_REPR_COMISS_MES = 0
, VLR_REF_FUNC_MES = 0
, VLR_DED_CARGO = 0
, VLR_DED_VENC_COMISS = 0
, VLR_DED_REPR_COMISS = 0
, VLR_DED_FUNCAO = 0
, VLR_DED_COMPLEMENTO = 0
, OBSERVACAO = L_OBSERVACAO
WHERE REF_ANOMES = P_REF_ANOMES
AND CDG_ORGAO = P_CDG_ORGAO
AND ID_AUX = P_ID_AUX
AND CDG_ORDEM = P_CDG_ORDEM
AND CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND CDG_PROVDESC = 11287
AND DTA_ANALISE = L_DTA_SUBSTITUICAO;

IF (SQL%NOTFOUND) THEN
INSERT INTO USISTEMA.TB_CALCULO_SUBSTITUICAO
( CDG_ORGAO
, REF_ANOMES
, ID_AUX
, CDG_ORDEM
, CDG_FUNCIONAL
, CDG_PROVDESC
, DTA_INICIO_SUBST
, DTA_FIM_SUBST
, DTA_ANALISE
, VALOR
, VLR_REF_CARGO_MES
, VLR_REF_VENC_COMISS_MES
, VLR_REF_REPR_COMISS_MES
, VLR_REF_FUNC_MES
, VLR_DED_CARGO
, VLR_DED_VENC_COMISS
, VLR_DED_REPR_COMISS
, VLR_DED_FUNCAO
, VLR_DED_COMPLEMENTO
, OBSERVACAO)
VALUES
( P_CDG_ORGAO
, P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, 11287
, L_DTA_INICIO
, L_DTA_FIM
, L_DTA_SUBSTITUICAO
, VETOR_11284(I).VALOR
, L_VALOR / 60
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, L_OBSERVACAO);
END IF;
END IF;
END IF;
END IF;
----------------- SUBSTITUICAO DE FUNÇÃO

IF (L_TIP_SUBSTITUICAO = 1) THEN
VG.G_POSSUI_SUBS_FUNC_CARGOEXT := 1;

USISTEMA.VLR_FUNCAO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_FUNCAO
, L_ID_CH_FUNCAO
, L_CH_FUNCAO
, L_CDG_GRU_CARGO_FUNC
, L_CLASSE_FUNC
, L_NIVEL_FUNC
, L_CDG_CARREIRA_FUNC
, L_VLR_SUBSTITUICAO_FUNCAO);

L_VALOR_DIA := NVL(L_VLR_SUBSTITUICAO_FUNCAO, 0) / 30;


IF (L_VLR_REPRESENTACAO_SERVIDOR + L_VLR_FUNCAO_SERVIDOR) > 0 THEN
IF L_VLR_SUBSTITUICAO_FUNCAO > L_VLR_FUNCAO_SERVIDOR THEN
L_VALOR_DIA := L_VALOR_DIA - L_VLR_REPRESENTACAO_SERV_DIA -
L_VLR_FUNCAO_SERV_DIA;
ELSE
L_VALOR_DIA := 0;
END IF;
END IF;

IF (L_VALOR_DIA > VETOR_11281(I).VALOR) THEN


VETOR_11281(I).VALOR := L_VALOR_DIA;
VETOR_11281(I).VALOR_MES := L_VLR_SUBSTITUICAO_FUNCAO;
L_OBSERVACAO := 'Função';

K := 1;
IND_VET := VETOR_11281.COUNT;

WHILE (IND_VET > 1) LOOP


IF (VETOR_11281(IND_VET - 1).VALOR_MES <> L_VLR_SUBSTITUICAO_FUNCAO)
THEN
K := IND_VET;
IND_VET := 1;
END IF;

IND_VET := IND_VET - 1;
END LOOP;

L_VLR_TOTAL_FUNCAO := 0;
L_VLR_LIMITE_FUNCAO := L_VLR_SUBSTITUICAO_FUNCAO;

WHILE (K <= I) LOOP


L_VLR_TOTAL_FUNCAO := L_VLR_TOTAL_FUNCAO + VETOR_11281(K).VALOR;

IF ((L_VLR_TOTAL_FUNCAO = L_VLR_LIMITE_FUNCAO) AND (K <> I)) THEN

VETOR_11281(I).VALOR := 0;
VETOR_11281(I).VALOR_MES := 0;
K := I + 1;
END IF;

IF ((L_VLR_TOTAL_FUNCAO > L_VLR_LIMITE_FUNCAO) AND (K <= I)) THEN


VETOR_11281(K).VALOR := L_VLR_LIMITE_FUNCAO - (L_VLR_TOTAL_FUNCAO -
VETOR_11281(K).VALOR);
VETOR_11281(K).VALOR_MES := 0;

IF (I > K) THEN
VETOR_11281(I).VALOR := 0;
VETOR_11281(I).VALOR_MES := 0;
END IF;

K := I + 1;
END IF;

K := K + 1;
END LOOP;

IF (VETOR_11281(I).VALOR > 0) THEN


UPDATE USISTEMA.TB_CALCULO_SUBSTITUICAO
SET DTA_INICIO_SUBST = L_DTA_INICIO
, DTA_FIM_SUBST = L_DTA_FIM
, VALOR = L_VALOR_DIA
, VLR_REF_CARGO_MES = 0
, VLR_REF_VENC_COMISS_MES = 0
, VLR_REF_REPR_COMISS_MES = 0
, VLR_REF_FUNC_MES = L_VLR_SUBSTITUICAO_FUNCAO / 30
, VLR_DED_CARGO = 0
, VLR_DED_VENC_COMISS = 0
, VLR_DED_REPR_COMISS = L_VLR_REPRESENTACAO_SERV_DIA
, VLR_DED_FUNCAO = L_VLR_FUNCAO_SERV_DIA
, VLR_DED_COMPLEMENTO = 0
, OBSERVACAO = L_OBSERVACAO
WHERE REF_ANOMES = P_REF_ANOMES
AND CDG_ORGAO = P_CDG_ORGAO
AND ID_AUX = P_ID_AUX
AND CDG_ORDEM = P_CDG_ORDEM
AND CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND CDG_PROVDESC = 11281
AND DTA_ANALISE = L_DTA_SUBSTITUICAO;

IF (SQL%NOTFOUND) THEN
INSERT INTO USISTEMA.TB_CALCULO_SUBSTITUICAO
( CDG_ORGAO
, REF_ANOMES
, ID_AUX
, CDG_ORDEM
, CDG_FUNCIONAL
, CDG_PROVDESC
, DTA_INICIO_SUBST
, DTA_FIM_SUBST
, DTA_ANALISE
, VALOR
, VLR_REF_CARGO_MES
, VLR_REF_VENC_COMISS_MES
, VLR_REF_REPR_COMISS_MES
, VLR_REF_FUNC_MES
, VLR_DED_CARGO
, VLR_DED_VENC_COMISS
, VLR_DED_REPR_COMISS
, VLR_DED_FUNCAO
, VLR_DED_COMPLEMENTO
, OBSERVACAO)
VALUES
( P_CDG_ORGAO
, P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, 11281
, L_DTA_INICIO
, L_DTA_FIM
, L_DTA_SUBSTITUICAO
, VETOR_11281(I).VALOR
, 0
, 0
, 0
, VETOR_11281(I).VALOR_MES / 30
, 0
, 0
, L_VLR_REPRESENTACAO_SERV_DIA
, L_VLR_FUNCAO_SERV_DIA
, 0
, L_OBSERVACAO);
END IF;
END IF;
END IF;
END IF;

----------------- SUBSTITUICAO DE CARGO EXTRA

IF (L_TIP_SUBSTITUICAO = 2) THEN
VG.G_POSSUI_SUBS_FUNC_CARGOEXT := 1;
L_VLR_CARGOEXT := 0;
L_VLR_REPRESENTACAO := 0;
L_VLR_VENCIMENTO := 0;
L_VLR_VENC_COMISSAO := 0;
L_VLR_VENC_COM_SUBST := 0;
L_VLR_FUNC_COM_SUBST := 0;

USISTEMA.INF_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEXT
, L_ID_CARGO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_CDG_FUNCAOEXT
, L_VLR_CARGO);

IF (L_CLASSE <> '000000') THEN


USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEXT
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VLR_CARGOEXT
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);

L_VLR_CARGOEXT := 0;

USISTEMA.VLR_CLASSE ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_GRU_CARGO
, L_CLASSE
, L_NIVEL
, L_VLR_CARGOEXT
, L_VLR_REPRESENTACAO);
ELSE
USISTEMA.VLR_CARGO ( P_REF_ANOMES
, P_CDG_ORGAO
, L_CDG_CARGOEXT
, L_ID_CH_CARGO
, L_CH_CARGO
, L_VLR_CARGOEXT
, L_CDG_GRU_CARGO
, L_VLR_DEV_ALT
, L_QTDDIAS_DEV_ALT);
END IF;

IF (L_VLR_COMPLEMENTO_SERVIDOR > 0) THEN


L_VLR_CARGOEXT_SERVIDOR := 0;
END IF;

-- CALCULANDO O VENCIMENTO CARGO COMISSIONADO


L_VLR_CHEIO_VENCIMENTO := NVL(L_VLR_CARGOEXT, 0);

-- ZERAR O VALOR DO VENCIMENTO COMISSIONADO DO SUBSTITUIDO PARA CASO DE


SUBSTITUICAO DE MILITAR -- MANTIS 21641
IF (VG.G_CDG_SITFUNC = 13) THEN
L_VLR_CHEIO_VENCIMENTO := 0;
END IF;

IF (L_VLR_CHEIO_VENCIMENTO > (L_VLR_COMPLEMENTO_SERVIDOR +


L_VLR_CARGO_SERVIDOR)) THEN
L_VALOR_DIA := NVL(L_VLR_CHEIO_VENCIMENTO, 0) / 30;
L_VLR_VENC_COM_SUBST := L_VALOR_DIA - L_VLR_COMPLEMENTO_SERV_DIA -
L_VLR_CARGO_SERV_DIA;
ELSE
L_VLR_VENC_COM_SUBST := 0;
END IF;

-- CALCULANDO A REPRESENTACAO CARGO COMISSIONADO


L_VLR_CHEIO_REPRESENTACAO := NVL(L_VLR_REPRESENTACAO, 0);

IF (L_VLR_CHEIO_REPRESENTACAO > (L_VLR_REPRESENTACAO_SERVIDOR +


L_VLR_FUNCAO_SERVIDOR)) THEN
L_VALOR_DIA := NVL(L_VLR_CHEIO_REPRESENTACAO, 0) / 30;
L_VLR_FUNC_COM_SUBST := L_VALOR_DIA - L_VLR_REPRESENTACAO_SERV_DIA -
L_VLR_FUNCAO_SERV_DIA;
ELSE
L_VLR_FUNC_COM_SUBST := 0;
END IF;

L_VALOR_DIA := L_VLR_VENC_COM_SUBST + L_VLR_FUNC_COM_SUBST;

IF (L_VALOR_DIA > VETOR_11281(I).VALOR) THEN


VETOR_11281(I).VALOR := L_VALOR_DIA;
VETOR_11281(I).VALOR_MES := L_VLR_CHEIO_VENCIMENTO +
L_VLR_CHEIO_REPRESENTACAO;
L_OBSERVACAO := 'Comissionado';

UPDATE USISTEMA.TB_CALCULO_SUBSTITUICAO
SET DTA_INICIO_SUBST = L_DTA_INICIO
, DTA_FIM_SUBST = L_DTA_FIM
, VALOR = L_VALOR_DIA
, VLR_REF_CARGO_MES = 0
, VLR_REF_VENC_COMISS_MES = L_VLR_CHEIO_VENCIMENTO / 30
, VLR_REF_REPR_COMISS_MES = L_VLR_CHEIO_REPRESENTACAO / 30
, VLR_REF_FUNC_MES = 0
, VLR_DED_CARGO = L_VLR_CARGO_SERV_DIA
, VLR_DED_VENC_COMISS = L_VLR_CARGOEXT_SERV_DIA
, VLR_DED_REPR_COMISS = L_VLR_REPRESENTACAO_SERV_DIA
, VLR_DED_FUNCAO = L_VLR_FUNCAO_SERV_DIA
, VLR_DED_COMPLEMENTO = L_VLR_COMPLEMENTO_SERV_DIA
, OBSERVACAO = L_OBSERVACAO
WHERE REF_ANOMES = P_REF_ANOMES
AND CDG_ORGAO = P_CDG_ORGAO
AND ID_AUX = P_ID_AUX
AND CDG_ORDEM = P_CDG_ORDEM
AND CDG_FUNCIONAL = P_CDG_FUNCIONAL
AND CDG_PROVDESC = 11281
AND DTA_ANALISE = L_DTA_SUBSTITUICAO;

IF (SQL%NOTFOUND) THEN
INSERT INTO USISTEMA.TB_CALCULO_SUBSTITUICAO
( CDG_ORGAO
, REF_ANOMES
, ID_AUX
, CDG_ORDEM
, CDG_FUNCIONAL
, CDG_PROVDESC
, DTA_INICIO_SUBST
, DTA_FIM_SUBST
, DTA_ANALISE
, VALOR
, VLR_REF_CARGO_MES
, VLR_REF_VENC_COMISS_MES
, VLR_REF_REPR_COMISS_MES
, VLR_REF_FUNC_MES
, VLR_DED_CARGO
, VLR_DED_VENC_COMISS
, VLR_DED_REPR_COMISS
, VLR_DED_FUNCAO
, VLR_DED_COMPLEMENTO
, OBSERVACAO)
VALUES
( P_CDG_ORGAO
, P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, 11281
, L_DTA_INICIO
, L_DTA_FIM
, L_DTA_SUBSTITUICAO
, VETOR_11281(I).VALOR
, 0
, TRUNC(L_VLR_CHEIO_VENCIMENTO / 30, 2)
, TRUNC(L_VLR_CHEIO_REPRESENTACAO / 30, 2)
, 0
, L_VLR_CARGO_SERV_DIA
, 0
, L_VLR_REPRESENTACAO_SERV_DIA
, L_VLR_FUNCAO_SERV_DIA
, L_VLR_COMPLEMENTO_SERV_DIA
, L_OBSERVACAO);
END IF;
END IF;
END IF; -- FIM DO TESTE SE EXISTE SUBST POR CARGO EXTRA
END LOOP;

CLOSE CURSOR_SUBSTITUICAO;

L_DTA_SUBSTITUICAO := L_DTA_SUBSTITUICAO + 1;
I := I + 1;
END LOOP;

CLOSE CURSOR_DIAS_MES_SUBST;

IF ((P_REF_ANOMES = 201802) AND (L_DTA_INICIO < TO_DATE('01/02/2018',


'DD/MM/YYYY')) AND
((L_DTA_FIM IS NULL) OR (L_DTA_FIM > TO_DATE('28/02/2018','DD/MM/YYYY'))))
THEN
I := 29;

IF (NOT VETOR_11280.EXISTS(I)) THEN


VETOR_11280.EXTEND;
VETOR_11280(I).VALOR := VETOR_11280(I - 1).VALOR;
VETOR_11280(I).VALOR_MES := VETOR_11280(I - 1).VALOR_MES;
VETOR_11280(I).QUANTIDADE := VETOR_11280(I - 1).QUANTIDADE;
END IF;

IF (NOT VETOR_11281.EXISTS(I)) THEN


VETOR_11281.EXTEND;
VETOR_11281(I).VALOR := VETOR_11281(I - 1).VALOR;
VETOR_11281(I).VALOR_MES := VETOR_11281(I - 1).VALOR_MES;
VETOR_11281(I).QUANTIDADE := VETOR_11281(I - 1).QUANTIDADE;
END IF;

IF (NOT VETOR_11284.EXISTS(I)) THEN


VETOR_11284.EXTEND;
VETOR_11284(I).VALOR := VETOR_11284(I - 1).VALOR;
VETOR_11284(I).VALOR_MES := VETOR_11284(I - 1).VALOR_MES;
VETOR_11284(I).QUANTIDADE := VETOR_11284(I - 1).QUANTIDADE;
END IF;

IF (L_CDG_TIP_EVENTO = 233) OR (L_CDG_TIP_EVENTO = 239) THEN


I := 31;
ELSE
I := 30;
END IF;

IF (NOT VETOR_11280.EXISTS(I)) THEN


VETOR_11280.EXTEND;
VETOR_11280(I).VALOR := VETOR_11280(I - 1).VALOR;
VETOR_11280(I).VALOR_MES := VETOR_11280(I - 1).VALOR_MES;
VETOR_11280(I).QUANTIDADE := VETOR_11280(I - 1).QUANTIDADE;
END IF;

IF (NOT VETOR_11281.EXISTS(I)) THEN


VETOR_11281.EXTEND;
VETOR_11281(I).VALOR := VETOR_11281(I - 1).VALOR;
VETOR_11281(I).VALOR_MES := VETOR_11281(I - 1).VALOR_MES;
VETOR_11281(I).QUANTIDADE := VETOR_11281(I - 1).QUANTIDADE;
END IF;

IF (NOT VETOR_11284.EXISTS(I)) THEN


VETOR_11284.EXTEND;
VETOR_11284(I).VALOR := VETOR_11284(I - 1).VALOR;
VETOR_11284(I).VALOR_MES := VETOR_11284(I - 1).VALOR_MES;
VETOR_11284(I).QUANTIDADE := VETOR_11284(I - 1).QUANTIDADE;
END IF;
END IF;

-------------------------------- GERANDO O 11280

I := 1;
J := 0;
VG.G_VALOR := 0;
VG.G_QUANTIDADE := 0;
VG.G_OBSERVACAO := '';

IF (L_CDG_TIP_EVENTO = 233) OR (L_CDG_TIP_EVENTO = 239) THEN


WHILE (I <= VETOR_11280.COUNT) LOOP
IF ((J < 30) AND (VETOR_11280(I).VALOR > 0)) THEN
VG.G_VALOR := VG.G_VALOR + VETOR_11280(I).VALOR;
J := J + 1;
END IF;

I := I + 1;
END LOOP;
else
WHILE (I <= VETOR_11280.COUNT) LOOP
IF ((J < 30) AND (VETOR_11280(I).VALOR > 0)) THEN
VG.G_VALOR := VG.G_VALOR + VETOR_11280(I).VALOR;
J := J + 1;
END IF;

I := I + 1;
END LOOP;

END IF;
IF (VG.G_VALOR > 0) THEN
VG.G_FORMULA := 999;
VG.G_PRAZO_INI := 1;
VG.G_PRAZO_FIM := 1;
VG.G_OPERACAO := 4;
VG.G_CALCULADO := 1;
VG.G_CDG_PROVDESC := 11280;
VG.G_QUANTIDADE := J;

USISTEMA.GRAVA_FINANCEIROCOMP ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, VG.G_CDG_PROVDESC
, VG.G_FORMULA
, VG.G_PRAZO_INI
, VG.G_PRAZO_FIM
, VG.G_QUANTIDADE
, VG.G_VALOR
, VG.G_OPERACAO
, P_ODM_ATUALIZACAO
, VG.G_CALCULADO
, VG.G_OBSERVACAO);
END IF;

-------------------------------- GERANDO O 11281

I := 1;
J := 0;
VG.G_VALOR := 0;
VG.G_QUANTIDADE := 0;
VG.G_OBSERVACAO := '';

IF (L_CDG_TIP_EVENTO = 233) OR (L_CDG_TIP_EVENTO = 239) THEN


WHILE (I <= VETOR_11281.COUNT) LOOP
IF ((J < 31) AND (VETOR_11281(I).VALOR > 0)) THEN
VG.G_VALOR := VG.G_VALOR + VETOR_11281(I).VALOR;
J := J + 1;
END IF;

I := I + 1;
END LOOP;

else
WHILE (I <= VETOR_11281.COUNT) LOOP
IF ((J < 30) AND (VETOR_11281(I).VALOR > 0)) THEN
VG.G_VALOR := VG.G_VALOR + VETOR_11281(I).VALOR;
J := J + 1;
END IF;

I := I + 1;
END LOOP;

END IF;
IF ((P_REF_ANOMES = 201802) AND (P_CDG_ORDEM = 17019)) THEN
VG.G_VALOR := 5492.94;
END IF;

IF ((P_REF_ANOMES = 201802) AND (P_CDG_ORDEM = 25879)) THEN


VG.G_VALOR := 1854.20;
END IF;

IF (VG.G_VALOR > 0) THEN


VG.G_FORMULA := 999;
VG.G_PRAZO_INI := 1;
VG.G_PRAZO_FIM := 1;
VG.G_OPERACAO := 4;
VG.G_CALCULADO := 1;
VG.G_CDG_PROVDESC := 11281;
VG.G_QUANTIDADE := J;
--VG.G_OBSERVACAO := VETOR_11281(I).VALOR_MES;

USISTEMA.GRAVA_FINANCEIROCOMP ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, VG.G_CDG_PROVDESC
, VG.G_FORMULA
, VG.G_PRAZO_INI
, VG.G_PRAZO_FIM
, VG.G_QUANTIDADE
, VG.G_VALOR
, VG.G_OPERACAO
, P_ODM_ATUALIZACAO
, VG.G_CALCULADO
, VG.G_OBSERVACAO);
END IF;

-------------------------------- GERANDO O 11284

I := 1;
VG.G_VALOR := 0;
VG.G_QUANTIDADE := 0;
VG.G_OBSERVACAO := '';
TOT_VETOR_11284 := 0;

WHILE (I <= VETOR_11284.COUNT) LOOP


VG.G_VALOR := VG.G_VALOR + VETOR_11284(I).VALOR;
TOT_VETOR_11284 := TOT_VETOR_11284 + VETOR_11284(I).VALOR;
VG.G_QUANTIDADE := VG.G_QUANTIDADE + VETOR_11284(I).QUANTIDADE;
I := I + 1;
END LOOP;

IF VG.G_VALOR > 0 THEN


VG.G_FORMULA := 999;
VG.G_PRAZO_INI := 1;
VG.G_PRAZO_FIM := 1;
VG.G_OPERACAO := 4;
VG.G_CALCULADO := 1;
VG.G_CDG_PROVDESC := 11284;

USISTEMA.GRAVA_FINANCEIROCOMP ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, VG.G_CDG_PROVDESC
, VG.G_FORMULA
, VG.G_PRAZO_INI
, VG.G_PRAZO_FIM
, VG.G_QUANTIDADE
, VG.G_VALOR
, VG.G_OPERACAO
, P_ODM_ATUALIZACAO
, VG.G_CALCULADO
, VG.G_OBSERVACAO);
END IF;

IF VETOR_11287.COUNT > 0 THEN


I := 1;
VG.G_VALOR := 0;
VG.G_QUANTIDADE := 0;
VG.G_OBSERVACAO := '';

WHILE (I <= VETOR_11287.COUNT) LOOP


VG.G_VALOR := VG.G_VALOR + VETOR_11287(I).VALOR;
VG.G_QUANTIDADE := VG.G_QUANTIDADE + VETOR_11287(I).QUANTIDADE;
I := I + 1;
END LOOP;
L_TOT_FIM := VG.G_VALOR;
IF NVL(TOT_VETOR_11284,0) <> 0 THEN

IF TOT_VETOR_11284 = L_VALOR_TOT_CUMULACAO THEN

VG.G_VALOR := 0;
VG.G_QUANTIDADE := 0;

END IF;

IF TOT_VETOR_11284 < L_VALOR_TOT_CUMULACAO THEN


IF (TOT_VETOR_11284 + VG.G_VALOR) > L_VALOR_TOT_CUMULACAO THEN
VG.G_VALOR := VG.G_VALOR - ((TOT_VETOR_11284 + VG.G_VALOR) -
L_VALOR_TOT_CUMULACAO);
END IF;
END IF;
END IF;

IF VG.G_VALOR > 0 THEN


VG.G_FORMULA := 999;
VG.G_PRAZO_INI := 1;
VG.G_PRAZO_FIM := 1;
VG.G_OPERACAO := 4;
VG.G_CALCULADO := 1;
VG.G_CDG_PROVDESC := 11287;

USISTEMA.GRAVA_FINANCEIROCOMP ( P_REF_ANOMES
, P_ID_AUX
, P_CDG_ORGAO
, P_CDG_ORDEM
, P_CDG_FUNCIONAL
, VG.G_CDG_PROVDESC
, VG.G_FORMULA
, VG.G_PRAZO_INI
, VG.G_PRAZO_FIM
, VG.G_QUANTIDADE
, VG.G_VALOR
, VG.G_OPERACAO
, P_ODM_ATUALIZACAO
, VG.G_CALCULADO
, VG.G_OBSERVACAO);
END IF;
END IF;

RETURN;
END;

Você também pode gostar