Você está na página 1de 138

CREATE OR REPLACE PACKAGE BODY GESTAOCARGAS.

MOTOR_DE_REGRAS AS

FAILURE_IN_FORALL EXCEPTION;
P_DML_ERROR EXCEPTION;
PRAGMA EXCEPTION_INIT(P_DML_ERROR, -24381);

V_USR_KROTON CONSTANT VARCHAR2(6) := 'KROTON';


V_ST_PROCESSAMENTO CONSTANT NUMBER(1) := 1;

/***************************************************************
// Campo DT_PROCESSAMENTO
// 1 - Aguardando Processamento
// 0 - Processado OK
// demais valores erro
***************************************************************/

PROCEDURE GRAVAR_LOG_VALIDACAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.LOGVALIDACAO.ID_PROCESSAMENTO%TYPE,
P_IDREGISTRO IN
GESTAOCARGAS.LOGVALIDACAO.ID_REGISTRO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.LOGVALIDACAO.IDREGRA%TYPE,
P_IDTIPOINFORMACAO IN
GESTAOCARGAS.LOGVALIDACAO.IDTIPOINFORMACAO%TYPE,
P_TIPOVALIDACAO IN
GESTAOCARGAS.LOGVALIDACAO.TIPOVALIDACAO%TYPE,
P_CRITICIDADE IN
GESTAOCARGAS.LOGVALIDACAO.CRITICIDADE%TYPE,
P_FILTROUSADO IN
GESTAOCARGAS.LOGVALIDACAO.FILTROUSADO%TYPE,
P_COMMIT IN CHAR DEFAULT 'N') AS
BEGIN

BEGIN
INSERT INTO GESTAOCARGAS.LOGVALIDACAO
(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
VALUES
(P_IDPROCESSAMENTO,
P_IDREGISTRO,
P_IDREGRA,
P_IDTIPOINFORMACAO,
P_TIPOVALIDACAO,
P_CRITICIDADE,
P_FILTROUSADO);
EXCEPTION
WHEN OTHERS THEN
RETURN;
END;

IF P_COMMIT = 'S' THEN


COMMIT;
END IF;
END GRAVAR_LOG_VALIDACAO;

FUNCTION GET_IDTIPOINFORMACAO(P_CDTIPOINFORMACAO IN
GESTAOCARGAS.TIPOINFORMACAO.CDTIPOINFORMACAO%TYPE)
RETURN GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE AS
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
BEGIN
BEGIN
SELECT IDTIPOINFORMACAO
INTO V_IDTIPOINFORMACAO
FROM GESTAOCARGAS.TIPOINFORMACAO
WHERE CDTIPOINFORMACAO = P_CDTIPOINFORMACAO
AND IC_ATIVO = 'S';
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_IDTIPOINFORMACAO := NULL;
END;
RETURN V_IDTIPOINFORMACAO;
END GET_IDTIPOINFORMACAO;

PROCEDURE SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.LOGPROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.LOGPROCESSAMENTO.IDREGRA%TYPE,
P_DTINICIO IN
GESTAOCARGAS.LOGPROCESSAMENTO.DTINICIO%TYPE,
P_STATUSPROCESSAMENTO IN
GESTAOCARGAS.LOGPROCESSAMENTO.STATUSPROCESSAMENTO%TYPE,
P_DESCRICAO IN
GESTAOCARGAS.LOGPROCESSAMENTO.DESCRICAO%TYPE,
P_COMMIT IN VARCHAR2,
P_IDLOG OUT
GESTAOCARGAS.LOGPROCESSAMENTO.IDLOGPROCESSAMENTO%TYPE,
P_OK OUT VARCHAR2,
P_RETORNO OUT VARCHAR2) IS
v_idlog GESTAOCARGAS.LOGPROCESSAMENTO.IDLOGPROCESSAMENTO%TYPE;
begin
v_idlog := GESTAOCARGAS.SEQ_LOGPROCESSO.NEXTVAL;
insert into GESTAOCARGAS.LOGPROCESSAMENTO
(IDLOGPROCESSAMENTO,
IDPROCESSAMENTO,
IDREGRA,
DTINICIO,
STATUSPROCESSAMENTO,
DESCRICAO)
VALUES
(v_idlog,
P_IDPROCESSAMENTO,
P_IDREGRA,
P_DTINICIO,
P_STATUSPROCESSAMENTO,
P_DESCRICAO);

P_IDLOG := v_idlog;
if P_COMMIT = 'S' then
commit;
end if;
exception
when others then
P_OK := 'N';
P_RETORNO := 'Erro ao gravar log: ' || sqlerrm;
end SP_LOG_INICIO_PROCESSO;

PROCEDURE SP_LOG_TERMINO_PROCESSO(P_IDLOG IN
GESTAOCARGAS.LOGPROCESSAMENTO.IDLOGPROCESSAMENTO%TYPE,
P_DTFIM IN
GESTAOCARGAS.LOGPROCESSAMENTO.DTINICIO%TYPE,
P_STATUSPROCESSAMENTO IN
GESTAOCARGAS.LOGPROCESSAMENTO.STATUSPROCESSAMENTO%TYPE,
P_COMMIT IN VARCHAR2,
P_OK OUT VARCHAR2,
P_RETORNO OUT VARCHAR2) IS
begin
UPDATE GESTAOCARGAS.LOGPROCESSAMENTO A
SET A.DTFIM = P_DTFIM, A.STATUSPROCESSAMENTO = P_STATUSPROCESSAMENTO
WHERE A.IDLOGPROCESSAMENTO = P_IDLOG;
if P_COMMIT = 'S' then
commit;
end if;
exception
when others then
P_OK := 'N';
P_RETORNO := 'Erro ao gravar log: ' || sqlerrm;
end SP_LOG_TERMINO_PROCESSO;

FUNCTION GET_CLIENTE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT GESTAOCARGAS.TP_CLIENTE_STG(ID_REGISTRO => A.ID_REGISTRO,
ID_PROCESSAMENTO => A.ID_PROCESSAMENTO,
SIS_ORIGEM => A.SIS_ORIGEM,
ID_CLIENTE => NVL(C.ID_CLIENTE,
A.SIS_ORIGEM || '-' || GESTAOCARGAS.SEQ_ID_CLIENTE.NEXTVAL),
ID_CLIENTE_ORIGEM => A.ID_CLIENTE_ORIGEM,
NM_CLIENTE => A.NM_CLIENTE,
TP_PESSOA => A.TP_PESSOA,
NO_CPFCNPJ => A.NO_CPFCNPJ,
DT_NASCIMENTO => A.DT_NASCIMENTO,
DT_CADASTRO => A.DT_CADASTRO,
IC_SEXO => A.IC_SEXO,
NO_RG => A.NO_RG,
IC_ESTADOCIVIL => A.IC_ESTADOCIVIL,
NM_PAI => A.NM_PAI,
NM_MAE => A.NM_MAE,
DS_NACIONALIDADE => A.DS_NACIONALIDADE,
DS_NATURALIDADE => A.DS_NATURALIDADE,
DT_MODIFICACAO => A.DT_MODIFICACAO,
US_CRIACAO => A.US_CRIACAO,
US_MODIFICACAO => A.US_MODIFICACAO)
FROM GESTAOCARGAS.CLIENTES_INT A
LEFT JOIN GESTAOCARGAS.GC_CUSTOMER C ON A.ID_CLIENTE_ORIGEM =
C.ID_CLIENTE_ORIGEM
and C.ID_CLIENTE like SIS_ORIGEM||'%'
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
RETURN V_CURSOR;
END GET_CLIENTE;

FUNCTION GET_CONTRATOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT GESTAOCARGAS.TP_CONTRATO_STG(ID_REGISTRO =>
A.ID_REGISTRO,
ID_PROCESSAMENTO =>
A.ID_PROCESSAMENTO,
SIS_ORIGEM => A.SIS_ORIGEM,
ID_CLIENTE_ORIGEM =>
A.ID_CLIENTE_ORIGEM,
ID_CLIENTE => C.ID_CLIENTE,
ID_CONTRATO_ORIGEM =>
A.ID_CONTRATO_ORIGEM,
ID_CONTRATO =>
NVL(ACT.ID_CONTRATO, A.SIS_ORIGEM || '-' ||

GESTAOCARGAS.SEQ_ID_CONTRATO.NEXTVAL),
NM_PRODUTO_PEP =>
A.NM_PRODUTO_PEP,
IC_FINU => A.IC_FINU,
IC_FIES => A.IC_FIES,
DT_INICIO_CURSO =>
A.DT_INICIO_CURSO,
DT_FIM_CURSO =>
A.DT_FIM_CURSO,
DT_INICIO_MATRICULA =>
A.DT_INICIO_MATRICULA,
DT_FIM_MATRICULA =>
A.DT_FIM_MATRICULA,
TP_CURSO => A.TP_CURSO,
COD_CURSO => A.COD_CURSO,
NM_CURSO => A.NM_CURSO,
TP_MATRICULA =>
A.TP_MATRICULA,
COD_MODALIDADE_MATRICULA =>
A.COD_MODALIDADE_MATRICULA,
COD_FILIAL => A.COD_FILIAL,
DS_NOME_FILIAL =>
A.DS_NOME_FILIAL,
CNPJ_FILIAL =>
A.CNPJ_FILIAL,
END_FILIAL_LOGRADOURO =>
A.END_FILIAL_LOGRADOURO,
END_FILIAL_BAIRRO =>
A.END_FILIAL_BAIRRO,
END_FILIAL_CIDADE =>
A.END_FILIAL_CIDADE,
END_FILIAL_UF =>
A.END_FILIAL_UF,
END_FILIAL_CEP =>
A.END_FILIAL_CEP,
DS_MATRIZ => A.DS_MATRIZ,
CNPJ_MATRIZ =>
A.CNPJ_MATRIZ,
END_COMPLETO_MATRIZ =>
A.END_COMPLETO_MATRIZ,
ST_CONTRATO =>
DECODE(A.SIS_ORIGEM,'SAP',NVL(A.ST_CONTRATO,'A'),A.ST_CONTRATO) ,
TP_MARCA_CONTRATO =>
A.TP_MARCA_CONTRATO,
COD_SERIE_ACADEMICA =>
A.COD_SERIE_ACADEMICA,
VL_SALDO_CREDITO =>
A.VL_SALDO_CREDITO,
DT_CADASTRO =>
A.DT_CADASTRO,
DT_CRIACAO => A.DT_CRIACAO,
US_CRIACAO => A.US_CRIACAO,
DT_MODIFICACAO =>
A.DT_MODIFICACAO,
US_MODIFICACAO =>
A.US_MODIFICACAO,
NM_RESPONSAVEL =>
A.NM_RESPONSAVEL,
NO_CPFRESPONSAVEL =>
A.NO_CPFRESPONSAVEL,
CNPJ_PRINCIPAL =>
A.CNPJ_MATRIZ,
DESC_PRINCIPAL => A.DS_MATRIZ,
POLITICA_PADRAO_S_EMPAC => NULL,
POLITICA_N1_S_EMPAC => NULL,
POLITICA_N2_S_EMPAC => NULL,
POLITICA_N3_S_EMPAC => NULL,
POLITICA_PADRAO_C_EMPAC => NULL,
POLITICA_N1_C_EMPAC => NULL,
POLITICA_N2_C_EMPAC => NULL,
POLITICA_N3_C_EMPAC => NULL,
DS_ST_CONTRATO => NULL,
CD_EMPRESA => A.CD_EMPRESA,
ID_SERVICE_NOW => NULL,
NM_FANTASIA_UNIDADE => NULL,
BP_ALUNO_SAP =>
A.BP_ALUNO_SAP,
IBGE_UF => A.IBGE_UF,
IBGE_MUNICIPIO =>
A.IBGE_MUNICIPIO,
CD_CONTA_CONTRATO =>
A.CD_CONTA_CONTRATO,
CD_EMPRESA_SAP =>
A.CD_EMPRESA_SAP,
CD_DIVISAO => A.CD_DIVISAO,
CD_CENTRO_LUCRO =>
A.CD_CENTRO_LUCRO
)
FROM GESTAOCARGAS.CONTRATOS_INT A
INNER JOIN GESTAOCARGAS.GC_CUSTOMER C ON A.ID_CLIENTE_ORIGEM =
C.ID_CLIENTE_ORIGEM
AND c.ID_CLIENTE like SIS_ORIGEM||'%'
LEFT JOIN GESTAOCARGAS.GC_ACCOUNT ACT ON A.ID_CONTRATO_ORIGEM =
ACT.ID_CONTRATO_ORIGEM
AND A.ID_CLIENTE_ORIGEM = ACT.ID_CLIENTE_ORIGEM
AND ACT.ID_CONTRATO like SIS_ORIGEM||'%'
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
RETURN V_CURSOR;
END GET_CONTRATOS;

FUNCTION GET_CONTATO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
open V_CURSOR for
select GESTAOCARGAS.TP_CONTATO_STG(ID_REGISTRO => a.id_registro,
ID_PROCESSAMENTO => a.id_processamento,
SIS_ORIGEM => a.sis_origem,
ID_CLIENTE_ORIGEM =>
a.ID_CLIENTE_ORIGEM,
ID_CLIENTE => C.Id_Cliente,
ST_CONTATO => CASE
WHEN P.NU_TELEFONE
IS NOT NULL
THEN CASE
WHEN
UPPER(A.ST_CONTATO) = 'INATIVO' THEN 'INATIVO'
WHEN
UPPER(P.NO_EVENTO) = 'BLOQUEADO' THEN 'BLOQUEADO'
ELSE
'ATIVO'
END
ELSE
A.ST_CONTATO
END,
TP_CONTATO => a.tp_contato,
PF_CONTATO => a.pf_contato,
END_LOGRADOURO => a.end_logradouro,
END_COMPLEMENTO => a.end_complemento,
END_BAIRRO => a.end_bairro,
END_CIDADE => a.end_cidade,
END_UF => a.end_uf,
END_CEP => a.end_cep,
DS_EMAIL => a.ds_email,
NO_TELEFONE_FIXO => a.no_telefone_fixo,
NO_TELEFONE_CELULAR =>
a.no_telefone_celular,
DT_CRIACAO => a.dt_criacao,
US_CRIACAO => a.us_criacao,
DT_MODIFICACAO => a.dt_modificacao,
US_MODIFICACAO => a.us_modificacao,
FL_CRITICIDADE => NULL,
DS_CRITICIDADE => NULL,
IBGE_UF => a.ibge_uf,
IBGE_MUNICIPIO => a.ibge_municipio)

from GESTAOCARGAS.CONTATOS_INT A
INNER JOIN GESTAOCARGAS.GC_CUSTOMER C ON A.ID_CLIENTE_ORIGEM =
C.ID_CLIENTE_ORIGEM
and c.ID_CLIENTE like SIS_ORIGEM||'%'
LEFT JOIN GESTAOCARGAS.GC_PROCON_CONTATOS_BLOQUEADOS P ON
(REGEXP_REPLACE(A.NO_TELEFONE_FIXO, '[^0-9]', '') = P.NU_TELEFONE OR
REGEXP_REPLACE(A.NO_TELEFONE_CELULAR, '[^0-9]', '')= P.NU_TELEFONE)
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
RETURN V_CURSOR;
END GET_CONTATO;

FUNCTION GET_FATURA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
open V_CURSOR for
select GESTAOCARGAS.TP_TITULO_STG(ID_REGISTRO => A.ID_REGISTRO,
ID_PROCESSAMENTO =>
A.ID_PROCESSAMENTO,
SIS_ORIGEM => A.SIS_ORIGEM,
ID_FATURA => A.SIS_ORIGEM ||
'-' || CASE
WHEN
A.SIS_ORIGEM = 'SAP' AND A.TP_NATUREZA_TITULO = 'AP' THEN
'ACORDO RAID'
WHEN
A.SIS_ORIGEM = 'SAP' AND A.TP_NATUREZA_TITULO != 'AP' THEN
'FA'
ELSE

A.TP_NATUREZA_TITULO
END || '-' ||
A.NU_TITULO ||
'-' ||
NVL(A.NO_PARCELA,
1),
ID_FATURA_ORIGEM => A.ID_FATURA,
ID_CONTRATO => ACT.ID_CONTRATO,
ID_CONTRATO_ORIGEM => A.ID_CONTRATO,
ID_CLIENTE => C.ID_CLIENTE,
ID_CLIENTE_ORIGEM =>
TO_CHAR(A.ID_CLIENTE),
NU_TITULO => A.NU_TITULO,
TP_NATUREZA_TITULO => CASE WHEN
A.SIS_ORIGEM = 'SAP' AND A.TP_NATUREZA_TITULO = 'AP' THEN
'ACORDO RAID'
WHEN
A.SIS_ORIGEM = 'SAP' AND A.TP_NATUREZA_TITULO != 'AP' THEN
'FA'
ELSE

A.TP_NATUREZA_TITULO
END,
DS_NATUREZA_TITULO =>
A.DS_NATUREZA_TITULO,
NR_MES_COMPETENCIA =>
A.NR_MES_COMPETENCIA,
NR_ANO_COMPETENCIA =>
A.NR_ANO_COMPETENCIA,
VL_LIQUIDO => A.VL_LIQUIDO,
VL_BRUTO => A.VL_BRUTO,
DT_VENCIMENTO => A.DT_VENCIMENTO,
NO_PARCELA =>
DECODE(A.SIS_ORIGEM,'SAP',A.NO_PARCELA,NULL),
ID_PARCELAMENTO =>
DECODE(A.SIS_ORIGEM,'SAP',A.ID_PARCELAMENTO,NULL),
DT_EMISSAO => A.DT_EMISSAO,
IC_NATUREZAREMAT =>
A.IC_NATUREZAREMAT,
DT_PAGAMENTO => A.DT_PAGAMENTO,
VL_PAGAMENTO => A.VL_PAGAMENTO,
ST_FATURA =>
DECODE(A.SIS_ORIGEM,'SAP',NVL(A.ST_FATURA,'ABERTO'),A.ST_FATURA),
DT_CADASTRO => A.DT_CADASTRO,
DT_MODIFICACAO => A.DT_MODIFICACAO,
ST_PROCESSAMENTO =>
A.ST_PROCESSAMENTO,
DT_PROCESSAMENTO =>
A.DT_PROCESSAMENTO,
US_CRIACAO => A.US_CRIACAO,
US_MODIFICACAO => A.US_MODIFICACAO,
VL_PONTUALIDADE =>
DECODE(A.SIS_ORIGEM,
'SAP',

ABS(A.VL_PONTUALIDADE),

A.VL_PONTUALIDADE),
DT_PONTUALIDADE =>
A.DT_PONTUALIDADE,
IC_CARTEIRAVERTIA =>
A.IC_CARTEIRAVERTIA,
NO_PARCELA_ACADEMICO => CASE
WHEN
TRIM(A.NO_PARCELA_ACADEMICO) IS NULL THEN

NVL(A.NO_PARCELA, 1)
ELSE

A.NO_PARCELA_ACADEMICO
END,
NO_MATRICULA_ACADEMICO =>
A.NO_MATRICULA_ACADEMICO)
from GESTAOCARGAS.TITULOS_INT A
INNER JOIN GESTAOCARGAS.GC_CUSTOMER C
ON NVL(A.Id_Cliente, A.ID_CLIENTE_ORIGEM) = C.ID_CLIENTE_ORIGEM
and c.ID_CLIENTE like SIS_ORIGEM || '%'
INNER JOIN GESTAOCARGAS.GC_ACCOUNT ACT
ON A.ID_CONTRATO = ACT.ID_CONTRATO_ORIGEM
and NVL(A.Id_Cliente, A.ID_CLIENTE_ORIGEM) = ACT.ID_CLIENTE_ORIGEM
and ACT.ID_CONTRATO like SIS_ORIGEM || '%'
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.TITULOS_STG T
WHERE T.ID_REGISTRO = A.ID_REGISTRO
AND T.ID_PROCESSAMENTO = A.ID_PROCESSAMENTO);
RETURN V_CURSOR;
END GET_FATURA;

FUNCTION GET_ACERTO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
open V_CURSOR for
select GESTAOCARGAS.TP_ACERTO_STG(ID_REGISTRO =>
A.ID_REGISTRO,
ID_PROCESSAMENTO =>
A.ID_PROCESSAMENTO,
SIS_ORIGEM =>
SUBSTR(A.ID_CLIENTE,0, INSTR(A.ID_CLIENTE,'-',1)-1),
ID_CLIENTE => A.ID_CLIENTE,
ID_CLIENTE_ORIGEM =>
REPLACE(ACT.ID_CLIENTE_ORIGEM,'X',''),
ID_CONTRATO =>
A.ID_CONTRATO,
ID_CONTRATO_ORIGEM =>
REPLACE(ACT.ID_CONTRATO_ORIGEM,'X',''),
ID_PARCELAMENTO =>
A.ID_PARCELAMENTO,
TP_PARCELAMENTO =>
A.TP_PARCELAMENTO,
QTDE_PARCELAS =>
A.QTDE_PARCELAS,
VL_TOTAL => A.VL_TOTAL,
VL_DIVIDA => A.VL_DIVIDA,
VL_PRINCIPAL =>
A.VL_PRINCIPAL,
VL_DESC_PRINCIPAL =>
A.VL_DESC_PRINCIPAL,
VL_MULTA => A.VL_MULTA,
VL_DESC_MULTA =>
A.VL_DESC_MULTA,
VL_JUROS_MORA =>
A.VL_JUROS_MORA,
VL_DESC_JUROS_MORA =>
A.VL_DESC_JUROS_MORA,
VL_JUROS_FINANC =>
A.VL_JUROS_FINANC,
VL_DESC_JUROS_FINANC =>
A.VL_DESC_JUROS_FINANC,
VL_CORRECAO_MONETARIA =>
A.VL_CORRECAO_MONETARIA,
VL_DESC_CORRECAO_MONETARIA =>
A.VL_DESC_CORRECAO_MONETARIA,
VL_TAXA_NEGOCIACAO =>
A.VL_TAXA_NEGOCIACAO,
VL_DESC_TAXA_NEGOCIACAO =>
A.VL_DESC_TAXA_NEGOCIACAO,
DT_CANCELAMENTO =>
A.DT_CANCELAMENTO,
ST_PARCELAMENTO =>
A.ST_PARCELAMENTO,
ST_PROCESSAMENTO =>
V_ST_PROCESSAMENTO,
US_CRIACAO_PARCELAMENTO =>
A.US_CRIACAO_PARCELAMENTO,
DT_CRIACAO_PARCELAMENTO =>
A.DT_CRIACAO_PARCELAMENTO,
GRUPO_USUARIO =>
A.GRUPO_USUARIO,
AGENCIA_EXTERNA =>
A.AGENCIA_EXTERNA,
ID_PAGAMENTO_ENTRADA =>
A.ID_PAGAMENTO_ENTRADA,
DT_CRIACAO => A.DT_CRIACAO,
US_CRIACAO => A.US_CRIACAO,
DT_MODIFICACAO =>
A.DT_MODIFICACAO,
US_MODIFICACAO =>
A.US_MODIFICACAO,
CD_FILIAL =>
ACT.CD_FILIAL,
ST_CANCELAMENTO =>
A.ST_CANCELAMENTO,
BP_ALUNO_SAP =>
ACT.BP_ALUNO_SAP,
CD_CONTA_CONTRATO =>
ACT.CD_CONTA_CONTRATO,
CD_EMPRESA_SAP =>
ACT.CD_EMPRESA_SAP,
CD_DIVISAO =>
ACT.CD_DIVISAO,
CD_CENTRO_LUCRO =>
ACT.CD_CENTRO_LUCRO,
CD_CURSO => ACT.CD_CURSO)
FROM GESTAOCARGAS.GC_AGREEMENT_INT A
LEFT JOIN GESTAOCARGAS.GC_ACCOUNT ACT
ON A.ID_CLIENTE = ACT.ID_CLIENTE
AND A.ID_CONTRATO = ACT.ID_CONTRATO
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

RETURN V_CURSOR;
END GET_ACERTO;

FUNCTION GET_NOVAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
open V_CURSOR for
select GESTAOCARGAS.TP_NOVAS_STG(ID_REGISTRO => A.ID_REGISTRO,
ID_PROCESSAMENTO =>
A.ID_PROCESSAMENTO,
SIS_ORIGEM =>
SUBSTR(A.ID_CLIENTE,0, INSTR(A.ID_CLIENTE,'-',1)-1),
ID_CLIENTE => A.ID_CLIENTE,
ID_CLIENTE_ORIGEM =>
REPLACE(ACT.ID_CLIENTE_ORIGEM,'X',''),
ID_CONTRATO => A.ID_CONTRATO,
ID_CONTRATO_ORIGEM =>
REPLACE(ACT.ID_CONTRATO_ORIGEM,'X',''),
ID_PARCELAMENTO =>
A.ID_PARCELAMENTO,
ID_PARCELA => A.ID_PARCELA,
ID_PAGAMENTO_ENTRADA =>
A.ID_PAGAMENTO_ENTRADA,
DT_VENCIMENTO =>
A.DT_VENCIMENTO,
VL_PARCELA => A.VL_PARCELA,
VL_PRINCIPAL =>
A.VL_PRINCIPAL,
VL_DESC_PRINCIPAL =>
A.VL_DESC_PRINCIPAL,
VL_MULTA => A.VL_MULTA,
VL_DESC_MULTA =>
A.VL_DESC_MULTA,
VL_JUROS_MORA =>
A.VL_JUROS_MORA,
VL_DESC_JUROS_MORA =>
A.VL_DESC_JUROS_MORA,
VL_JUROS_FINANC =>
A.VL_JUROS_FINANC,
VL_DESC_JUROS_FINANC =>
A.VL_DESC_JUROS_FINANC,
VL_CORRECAO_MONETARIA =>
A.VL_CORRECAO_MONETARIA,
VL_DESC_CORRECAO_MONETARIA =>
A.VL_DESC_CORRECAO_MONETARIA,
VL_TAXA_NEGOCIACAO =>
A.VL_TAXA_NEGOCIACAO,
VL_DESC_TAXA_NEGOCIACAO =>
A.VL_DESC_TAXA_NEGOCIACAO,
ST_PROCESSAMENTO =>
V_ST_PROCESSAMENTO,
DT_CRIACAO => A.DT_CRIACAO,
US_CRIACAO => A.US_CRIACAO,
DT_MODIFICACAO =>
A.DT_MODIFICACAO,
US_MODIFICACAO =>
A.US_MODIFICACAO)
from GESTAOCARGAS.GC_AGREEMENT_DETAIL_INT A
LEFT JOIN GESTAOCARGAS.GC_ACCOUNT ACT
ON A.ID_CLIENTE = ACT.ID_CLIENTE
AND A.ID_CONTRATO = ACT.ID_CONTRATO
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
RETURN V_CURSOR;
END GET_NOVAS;

FUNCTION GET_ORIGINAIS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
open V_CURSOR for
select GESTAOCARGAS.TP_ORIGINAIS_STG(ID_REGISTRO =>
A.ID_REGISTRO,
ID_PROCESSAMENTO =>
A.ID_PROCESSAMENTO,
SIS_ORIGEM =>
SUBSTR(A.ID_CLIENTE,0, INSTR(A.ID_CLIENTE,'-',1)-1),
ID_CLIENTE =>
A.ID_CLIENTE,
ID_CLIENTE_ORIGEM =>
REPLACE(ACT.ID_CLIENTE_ORIGEM,'X',''),
ID_CONTRATO =>
A.ID_CONTRATO,
ID_CONTRATO_ORIGEM =>
REPLACE(ACT.ID_CONTRATO_ORIGEM,'X',''),
ID_PARCELAMENTO =>
A.ID_PARCELAMENTO,
ID_TITULO =>
A.ID_TITULO,
NU_TITULO =>
B.NO_TITULO,
TP_NATUREZA_TITULO =>
B.NATUREZA_TITULO,
DS_NATUREZA_TITULO =>
B.DESC_NATUREZA_TITULO,
NR_MES_COMPETENCIA =>
B.MES_COMPETENCIA,
NR_ANO_COMPETENCIA =>
B.ANO_COMPETENCIA,
VL_TITULO =>
A.VL_TITULO,
VL_PRINCIPAL =>
A.VL_PRINCIPAL,
VL_DESC_PRINCIPAL =>
A.VL_DESC_PRINCIPAL,
VL_MULTA =>
A.VL_MULTA,
VL_DESC_MULTA =>
A.VL_DESC_MULTA,
VL_JUROS_MORA =>
A.VL_JUROS_MORA,
VL_DESC_JUROS_MORA =>
A.VL_DESC_JUROS_MORA,
VL_CORRECAO_MONETARIA =>
A.VL_CORRECAO_MONETARIA,
VL_DESC_CORRECAO_MONETARIA =>
A.VL_DESC_CORRECAO_MONETARIA,
ST_PROCESSAMENTO =>
V_ST_PROCESSAMENTO,
DT_CRIACAO =>
A.DT_CRIACAO,
US_CRIACAO =>
A.US_CRIACAO,
DT_MODIFICACAO =>
A.DT_MODIFICACAO,
US_MODIFICACAO =>
A.US_MODIFICACAO,
VL_DESC_PONTUALIDADE =>
A.VL_DESC_PONTUALIDADE)
FROM GESTAOCARGAS.GC_AGREEMENT_BILL_INT A
LEFT JOIN GESTAOCARGAS.GC_ACCOUNT ACT
ON A.ID_CLIENTE = ACT.ID_CLIENTE
AND A.ID_CONTRATO = ACT.ID_CONTRATO
LEFT JOIN GESTAOCARGAS.GC_BILL B
ON A.ID_TITULO = B.ID_TITULO
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
RETURN V_CURSOR;
END GET_ORIGINAIS;

FUNCTION GET_PAGAMENTOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
open V_CURSOR for
select GESTAOCARGAS.TP_PAGAMENTOS_STG(id_registro =>
ID_REGISTRO,
id_processamento =>
ID_PROCESSAMENTO,
sis_origem =>
SIS_ORIGEM,
id_parcelamento =>
ID_PARCELAMENTO,
no_parcela =>
NO_PARCELA,
tp_pagamento =>
TP_PAGAMENTO,
t_01_cd_banco_compensa =>
T_01_CD_BANCO_COMPENSA,
t_02_no_lote_retorno =>
T_02_NO_LOTE_RETORNO,
t_03_tp_registro_retorno =>
T_03_TP_REGISTRO_RETORNO,
t_04_nr_seq_lote_retorno =>
T_04_NR_SEQ_LOTE_RETORNO,
t_05_cd_segmento_detalhe =>
T_05_CD_SEGMENTO_DETALHE,
t_06_ds_reservado =>
T_06_DS_RESERVADO,
t_07_cd_movimento =>
T_07_CD_MOVIMENTO,
t_08_cd_ag_benefiriciario =>
T_08_CD_AG_BENEFIRICIARIO,
t_09_cd_digito_ag_beneficiario =>
T_09_CD_DIGITO_AG_BENEFICIARIO,
t_10_nr_conta_corrente =>
T_10_NR_CONTA_CORRENTE,
t_11_cd_digito_conta =>
T_11_CD_DIGITO_CONTA,
t_12_ds_reservado =>
T_12_DS_RESERVADO,
t_13_nr_id_titulo_bnco =>
T_13_NR_ID_TITULO_BNCO,
t_14_cd_carteira =>
T_14_CD_CARTEIRA,
t_15_nr_documento_cobranca =>
T_15_NR_DOCUMENTO_COBRANCA,
t_16_dt_vencimeno =>
T_16_DT_VENCIMENO,
t_17_vl_nominal_titulo =>
T_17_VL_NOMINAL_TITULO,
t_18_nr_banco_cobradora =>
T_18_NR_BANCO_COBRADORA,
t_19_cod_ag_cobradora =>
T_19_COD_AG_COBRADORA,
t_20_cd_digito_ag_cedente =>
T_20_CD_DIGITO_AG_CEDENTE,
t_21_nr_titulo_empresa =>
T_21_NR_TITULO_EMPRESA,
t_22_cd_moeda =>
T_22_CD_MOEDA,
t_23_tp_inscricao_pagador =>
T_23_TP_INSCRICAO_PAGADOR,
t_24_nr_inscricao_pagador =>
T_24_NR_INSCRICAO_PAGADOR,
t_25_nm_pagador =>
T_25_NM_PAGADOR,
t_26_cd_conta_cobranca =>
T_26_CD_CONTA_COBRANCA,
t_27_vl_tarifa_custas =>
T_27_VL_TARIFA_CUSTAS,
t_28_id_operacao =>
T_28_ID_OPERACAO,
t_29_ds_reservado =>
T_29_DS_RESERVADO,
u_01_cd_banco_compensacao =>
U_01_CD_BANCO_COMPENSACAO,
u_02_lt_servico =>
U_02_LT_SERVICO,
u_03_tp_registtro_servico =>
U_03_TP_REGISTTRO_SERVICO,
u_04_nr_seq_lote =>
U_04_NR_SEQ_LOTE,
u_05_cd_segmento_detalhe =>
U_05_CD_SEGMENTO_DETALHE,
u_06_ds_reservado =>
U_06_DS_RESERVADO,
u_07_cd_movimento_ocorrencia =>
U_07_CD_MOVIMENTO_OCORRENCIA,
u_08_vl_juro_multa_encargo =>
U_08_VL_JURO_MULTA_ENCARGO,
u_09_vl_desconto_concediro =>
U_09_VL_DESCONTO_CONCEDIRO,
u_10_vl_abatido =>
U_10_VL_ABATIDO,
u_11_vl_iof_recolhido =>
U_11_VL_IOF_RECOLHIDO,
u_12_vl_pago_pagador =>
U_12_VL_PAGO_PAGADOR,
u_13_vl_liquito_creditado =>
U_13_VL_LIQUITO_CREDITADO,
u_14_vl_outras_despesas =>
U_14_VL_OUTRAS_DESPESAS,
u_15_vl_outros_creditos =>
U_15_VL_OUTROS_CREDITOS,
u_16_dt_ocorrencia =>
U_16_DT_OCORRENCIA,
u_17_dt_efetivacao_credito =>
U_17_DT_EFETIVACAO_CREDITO,
u_18_cd_ocorrencia_pagador =>
U_18_CD_OCORRENCIA_PAGADOR,
u_19_dt_ocorrencia_pagador =>
U_19_DT_OCORRENCIA_PAGADOR,
u_20_vl_ocorrencia_pagador =>
U_20_VL_OCORRENCIA_PAGADOR,
u_21_ds_complemento_pagador =>
U_21_DS_COMPLEMENTO_PAGADOR,
u_22_cd_banco_compensacao =>
U_22_CD_BANCO_COMPENSACAO,
u_23_ds_reservado =>
U_23_DS_RESERVADO,
st_processamento =>
V_ST_PROCESSAMENTO,
dt_criacao =>
DT_CRIACAO,
us_criacao =>
US_CRIACAO,
dt_modificacao =>
DT_MODIFICACAO,
us_modificacao =>
US_MODIFICACAO,
id_vendor =>
ID_VENDOR,
vl_cartao_1 =>
VL_CARTAO_1,
nm_adquerente_1 =>
NM_ADQUERENTE_1,
nr_tid_1 =>
NR_TID_1,
nr_nsu_1 =>
NR_NSU_1,
nr_authcode_1 =>
NR_AUTHCODE_1,
vl_cartao_2 =>
VL_CARTAO_2,
nm_adquerente_2 =>
NM_ADQUERENTE_2,
nr_tid_2 =>
NR_TID_2,
nr_nsu_2 =>
NR_NSU_2,
nr_authcode_2 =>
NR_AUTHCODE_2,
QT_parcelas =>
QT_parcelas,
cd_order_reference =>
cd_order_reference,
fl_duplicidade => 'N',
DS_CHANNEL_ID =>
DS_CHANNEL_ID,
DS_CHANNEL_NAME =>
DS_CHANNEL_NAME,
DS_STORE_ID =>
DS_STORE_ID,
NM_ARQUIVO_ORIGEM =>
NM_ARQUIVO_ORIGEM,
QR_CODE =>
QR_CODE,
QR_CODE_URL =>
QR_CODE_URL,
VENDOR_TRANSACTION_ID =>
VENDOR_TRANSACTION_ID,
TRANSACTION_ID =>
TRANSACTION_ID)
from GESTAOCARGAS.GC_PAYMENT_BILLING_INT A
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (A.T_07_CD_MOVIMENTO IN (06,17) OR A.TP_PAGAMENTO in
('Credit','Debit','Pix'));
RETURN V_CURSOR;
END GET_PAGAMENTOS;
FUNCTION GET_PAGAMENTOS_CREDITO(P_ID_PROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT AC.SIS_ORIGEM,
AC.ID_PARCELAMENTO,
AC.TP_PARCELAMENTO,
AC.DT_CRIACAO_PARCELAMENTO,
AC.US_CRIACAO,
AC.DT_MODIFICACAO,
AC.US_MODIFICACAO,
AC.ST_PARCELAMENTO,
AC.ST_PROCESSAMENTO,
PN.VL_PARCELA,
PN.ID_PARCELA
FROM GESTAOCARGAS.ACERTO_OUT AC, GESTAOCARGAS.Gc_Agreement_Detail_Int PN
WHERE AC.ID_PARCELAMENTO = PN.ID_PARCELAMENTO
AND AC.TP_PARCELAMENTO = 'Back Office'
AND AC.ST_PARCELAMENTO IN ('Payment', 'Approved')
AND PN.ID_PARCELA = 1
AND AC.ID_PARCELAMENTO IN (SELECT ID_PARCELAMENTO FROM
GESTAOCARGAS.ACERTO_STG WHERE ID_PROCESSAMENTO = P_ID_PROCESSAMENTO)
AND NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.PAGAMENTOS_OUT PG
WHERE PG.ID_PARCELAMENTO = AC.ID_PARCELAMENTO
AND PG.NO_PARCELA = 1)
AND NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT ATC
WHERE ATC.ID_PARCELAMENTO = AC.ID_PARCELAMENTO);
RETURN V_CURSOR;
END GET_PAGAMENTOS_CREDITO;

FUNCTION GET_PAGAMENTOS_DUPLICADOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;

BEGIN

OPEN V_CURSOR FOR


SELECT A.ROWID,
A.ID_REGISTRO,
GC_BILL.NO_PARCELA,
A.ID_PARCELAMENTO
FROM GESTAOCARGAS.PAGAMENTOS_STG A
LEFT JOIN (
SELECT C.ID_PARCELAMENTO, MIN(NO_PARCELA) NO_PARCELA
FROM GESTAOCARGAS.GC_BILL C
WHERE C.ST_TITULO = 'ABERTO'
AND NOT EXISTS
(SELECT 0
FROM GESTAOCARGAS.PAGAMENTOS_STG D
WHERE D.ID_PARCELAMENTO = C.ID_PARCELAMENTO
AND D.NO_PARCELA = C.NO_PARCELA)
AND NOT EXISTS (SELECT 1 FROM GESTAOCARGAS.PAGAMENTOS_OUT POUT
WHERE POUT.NO_PARCELA = C.NO_PARCELA
AND POUT.ID_PARCELAMENTO = C.ID_PARCELAMENTO)
AND NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT ATC
WHERE ATC.ID_PARCELAMENTO = C.ID_PARCELAMENTO)
GROUP BY C.ID_PARCELAMENTO
) GC_BILL ON GC_BILL.ID_PARCELAMENTO = A.ID_PARCELAMENTO
WHERE A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND A.FL_DUPLICIDADE = 'S'
AND A.ST_PROCESSAMENTO = 1
AND EXISTS (SELECT 1 FROM GESTAOCARGAS.configuracao WHERE chave =
'GET_PAGAMENTOS_DUPLICADOS')
AND GC_BILL.ID_PARCELAMENTO IS NOT NULL
AND EXISTS (SELECT 0
FROM GESTAOCARGAS.GC_BILL B
WHERE B.ID_PARCELAMENTO = A.ID_PARCELAMENTO
AND B.NO_PARCELA > A.NO_PARCELA);
RETURN V_CURSOR;
END GET_PAGAMENTOS_DUPLICADOS;

PROCEDURE INSERIR_CLIENTES(P_LISTA_CLIENTES IN GESTAOCARGAS.TL_CLIENTES_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.CLIENTES_STG%ROWTYPE;
V_LISTA_CLIENTES TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_CLIENTE,
NM_CLIENTE,
TP_PESSOA,
NO_CPFCNPJ,
DT_NASCIMENTO,
DT_CADASTRO,
IC_SEXO,
NO_RG,
IC_ESTADOCIVIL,
NM_PAI,
NM_MAE,
DS_NACIONALIDADE,
DS_NATURALIDADE,
DT_MODIFICACAO,
US_CRIACAO,
US_MODIFICACAO,
ID_CLIENTE_ORIGEM
BULK COLLECT
INTO V_LISTA_CLIENTES
FROM TABLE(P_LISTA_CLIENTES) A;

FORALL I IN INDICES OF P_LISTA_CLIENTES SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.CLIENTES_STG VALUES V_LISTA_CLIENTES (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Aluno
STG: ' || P_LISTA_CLIENTES(sql%bulk_exceptions(i).error_index).ID_CLIENTE_ORIGEM ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_CLIENTES(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_CLIENTES(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_CLIENTES;

PROCEDURE INSERIR_CONTRATOS(P_LISTA_CONTRATOS IN GESTAOCARGAS.TL_CONTRATOS_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.CONTRATOS_STG%ROWTYPE;
V_LISTA_CONTRATOS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT *
BULK COLLECT
INTO V_LISTA_CONTRATOS
FROM TABLE(P_LISTA_CONTRATOS) A;

FORALL I IN INDICES OF P_LISTA_CONTRATOS SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.CONTRATOS_STG VALUES V_LISTA_CONTRATOS (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Contrato
STG: ' || P_LISTA_CONTRATOS(sql%bulk_exceptions(i).error_index).ID_CONTRATO_ORIGEM
||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_CONTRATOS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_CONTRATOS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;

END INSERIR_CONTRATOS;

PROCEDURE INSERIR_CONTATOS(P_LISTA_CONTATOS IN GESTAOCARGAS.TL_CONTATOS_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.CONTATOS_STG%ROWTYPE;
V_LISTA_CONTATOS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_CLIENTE,
ST_CONTATO,
TP_CONTATO,
PF_CONTATO,
END_LOGRADOURO,
END_COMPLEMENTO,
END_BAIRRO,
END_CIDADE,
END_UF,
END_CEP,
DS_EMAIL,
NO_TELEFONE_FIXO,
NO_TELEFONE_CELULAR,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO,
NULL,
NULL,
ID_CLIENTE_ORIGEM,
IBGE_UF,
IBGE_MUNICIPIO
BULK COLLECT
INTO V_LISTA_CONTATOS
FROM TABLE(P_LISTA_CONTATOS) A;
FORALL I IN INDICES OF P_LISTA_CONTATOS SAVE EXCEPTIONS
INSERT INTO GESTAOCARGAS.CONTATOS_STG VALUES V_LISTA_CONTATOS (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Aluno
STG: ' || P_LISTA_CONTATOS(sql%bulk_exceptions(i).error_index).ID_CLIENTE_ORIGEM ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_CONTATOS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_CONTATOS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_CONTATOS;

PROCEDURE INSERIR_FATURAS(P_LISTA_FATURAS IN GESTAOCARGAS.TL_TITULOS_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.TITULOS_STG%ROWTYPE;
V_LISTA_FATURAS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_FATURA,
ID_FATURA_ORIGEM,
ID_CONTRATO,
ID_CONTRATO_ORIGEM,
ID_CLIENTE,
NU_TITULO,
TP_NATUREZA_TITULO,
DS_NATUREZA_TITULO,
NR_MES_COMPETENCIA,
NR_ANO_COMPETENCIA,
VL_LIQUIDO,
VL_BRUTO,
DT_VENCIMENTO,
NO_PARCELA,
ID_PARCELAMENTO,
DT_EMISSAO,
IC_NATUREZAREMAT,
DT_PAGAMENTO,
VL_PAGAMENTO,
ST_FATURA,
DT_CADASTRO,
DT_MODIFICACAO,
ST_PROCESSAMENTO,
DT_PROCESSAMENTO,
US_CRIACAO,
US_MODIFICACAO,
VL_PONTUALIDADE,
DT_PONTUALIDADE,
IC_CARTEIRAVERTIA,
NO_PARCELA_ACADEMICO,
NO_MATRICULA_ACADEMICO,
ID_CLIENTE_ORIGEM
BULK COLLECT
INTO V_LISTA_FATURAS
FROM TABLE(P_LISTA_FATURAS) A;

FORALL I IN INDICES OF P_LISTA_FATURAS SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.TITULOS_STG VALUES V_LISTA_FATURAS (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Fatura
STG ID_FATURA: ' || P_LISTA_FATURAS(sql
%bulk_exceptions(i).error_index).ID_FATURA_ORIGEM ||
'ID_CLIENTE : ' ||
P_LISTA_FATURAS(sql%bulk_exceptions(i).error_index).ID_CLIENTE ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_FATURAS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_FATURAS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_FATURAS;

PROCEDURE INSERIR_ACERTOS(P_LISTA_ACERTOS IN GESTAOCARGAS.TL_ACERTO_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.ACERTO_STG%ROWTYPE;
V_LISTA_ACERTOS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT *
BULK COLLECT
INTO V_LISTA_ACERTOS
FROM TABLE(P_LISTA_ACERTOS) A;
FORALL I IN INDICES OF P_LISTA_ACERTOS SAVE EXCEPTIONS
INSERT INTO GESTAOCARGAS.ACERTO_STG VALUES V_LISTA_ACERTOS (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Acerto
STG: ' || P_LISTA_ACERTOS(sql%bulk_exceptions(i).error_index).ID_PARCELAMENTO ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_ACERTOS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_ACERTOS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_ACERTOS;

PROCEDURE INSERIR_NOVAS(P_LISTA_NOVAS IN GESTAOCARGAS.TL_NOVAS_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.NOVAS_STG%ROWTYPE;
V_LISTA_NOVAS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_CLIENTE,
ID_CONTRATO,
ID_CONTRATO_ORIGEM,
ID_PARCELAMENTO,
ID_PARCELA,
ID_PAGAMENTO_ENTRADA,
DT_VENCIMENTO,
VL_PARCELA,
VL_PRINCIPAL,
VL_DESC_PRINCIPAL,
VL_MULTA,
VL_DESC_MULTA,
VL_JUROS_MORA,
VL_DESC_JUROS_MORA,
VL_JUROS_FINANC,
VL_DESC_JUROS_FINANC,
VL_CORRECAO_MONETARIA,
VL_DESC_CORRECAO_MONETARIA,
VL_TAXA_NEGOCIACAO,
VL_DESC_TAXA_NEGOCIACAO,
ST_PROCESSAMENTO,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO,
ID_CLIENTE_ORIGEM
BULK COLLECT
INTO V_LISTA_NOVAS
FROM TABLE(P_LISTA_NOVAS) A;

FORALL I IN INDICES OF P_LISTA_NOVAS SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.NOVAS_STG VALUES V_LISTA_NOVAS (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Parcelas
Novas STG: ' || P_LISTA_NOVAS(sql%bulk_exceptions(i).error_index).ID_PARCELAMENTO
||
' - ' || 'ID_PARCELA: '
|| P_LISTA_NOVAS(sql%bulk_exceptions(i).error_index).ID_PARCELA ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_NOVAS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_NOVAS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_NOVAS;

PROCEDURE INSERIR_ORIGINAIS(P_LISTA_ORIGINAIS IN GESTAOCARGAS.TL_ORIGINAIS_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.ORIGINAIS_STG%ROWTYPE;
V_LISTA_ORIGINAIS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_CLIENTE,
ID_CONTRATO,
ID_CONTRATO_ORIGEM,
ID_PARCELAMENTO,
ID_TITULO,
NU_TITULO,
TP_NATUREZA_TITULO,
DS_NATUREZA_TITULO,
NR_MES_COMPETENCIA,
NR_ANO_COMPETENCIA,
VL_TITULO,
VL_PRINCIPAL,
VL_DESC_PRINCIPAL,
VL_MULTA,
VL_DESC_MULTA,
VL_JUROS_MORA,
VL_DESC_JUROS_MORA,
VL_CORRECAO_MONETARIA,
VL_DESC_CORRECAO_MONETARIA,
ST_PROCESSAMENTO,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO,
VL_DESC_PONTUALIDADE,
ID_CLIENTE_ORIGEM
BULK COLLECT
INTO V_LISTA_ORIGINAIS
FROM TABLE(P_LISTA_ORIGINAIS) A;

FORALL I IN INDICES OF P_LISTA_ORIGINAIS SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.ORIGINAIS_STG VALUES V_LISTA_ORIGINAIS (I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir Parcelas
Originais STG: ' || P_LISTA_ORIGINAIS(sql
%bulk_exceptions(i).error_index).ID_PARCELAMENTO ||
' - ' || 'ID_TITULO: ' ||
P_LISTA_ORIGINAIS(sql%bulk_exceptions(i).error_index).ID_TITULO ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_ORIGINAIS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_ORIGINAIS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_ORIGINAIS;

PROCEDURE INSERIR_PAGAMENTOS(P_LISTA_PAGAMENTOS IN GESTAOCARGAS.TL_PAGAMENTOS_STG,


P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.PAGAMENTOS_STG%ROWTYPE;
V_LISTA_PAGAMENTOS TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT *
BULK COLLECT
INTO V_LISTA_PAGAMENTOS
FROM TABLE(P_LISTA_PAGAMENTOS) A;

FORALL I IN INDICES OF P_LISTA_PAGAMENTOS SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.PAGAMENTOS_STG VALUES V_LISTA_PAGAMENTOS(I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir
Pagamento STG: ' || P_LISTA_PAGAMENTOS(sql
%bulk_exceptions(i).error_index).ID_PARCELAMENTO ||
' - ' || 'ID_REGISTRO: '
|| P_LISTA_PAGAMENTOS(sql%bulk_exceptions(i).error_index).ID_REGISTRO ||
' - ' ||
'ID_PROCESSAMENTO: ' || P_LISTA_PAGAMENTOS(sql
%bulk_exceptions(i).error_index).ID_PROCESSAMENTO ||
' - ' || sqlerrm(-(sql
%bulk_exceptions(i).error_code)),
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END LOOP;
END INSERIR_PAGAMENTOS;

PROCEDURE INSERIR_PAGAMENTOS_CREDITO(P_LISTA_PAGAMENTOS IN LIST_DADOS_PGTO) IS

V_INDICE INT;
V_LISTA_PAGAMENTOS LIST_DADOS_PGTO := LIST_DADOS_PGTO();
V_LIBERADO_OLIMPO VARCHAR2(50);
V_LIBERADO_COLABORAR VARCHAR2(50);
V_LIBERADO_SAP VARCHAR2(50);

BEGIN
SELECT VALOR INTO V_LIBERADO_OLIMPO FROM GESTAOCARGAS.CONFIGURACAO WHERE CHAVE
= 'GERA_PAGAMENTO_BACKOFFICE_OLIMPO';
SELECT VALOR INTO V_LIBERADO_COLABORAR FROM GESTAOCARGAS.CONFIGURACAO WHERE
CHAVE = 'GERA_PAGAMENTO_BACKOFFICE_COLABORAR';
SELECT VALOR INTO V_LIBERADO_SAP FROM gestaocargas.CONFIGURACAO WHERE CHAVE =
'GERA_PAGAMENTO_BACKOFFICE_SAP';

SELECT *
BULK COLLECT
INTO V_LISTA_PAGAMENTOS
FROM TABLE(P_LISTA_PAGAMENTOS) A;

IF V_LISTA_PAGAMENTOS IS NOT NULL THEN

V_INDICE := V_LISTA_PAGAMENTOS.FIRST;

WHILE V_INDICE IS NOT NULL LOOP

IF ((UPPER(TRIM(V_LISTA_PAGAMENTOS(V_INDICE).SIS_ORIGEM)) = 'OLIMPO' AND


UPPER(V_LIBERADO_OLIMPO) = 'TRUE')
OR (UPPER(TRIM(V_LISTA_PAGAMENTOS(V_INDICE).SIS_ORIGEM)) = 'COLABORAR' AND
UPPER(V_LIBERADO_COLABORAR) = 'TRUE')
OR (UPPER(TRIM(V_LISTA_PAGAMENTOS(V_INDICE).SIS_ORIGEM)) = 'SAP' AND
UPPER(V_LIBERADO_SAP) = 'TRUE')) THEN

INSERT INTO GESTAOCARGAS.PAGAMENTOS_OUT


(SIS_ORIGEM,
ID_PARCELAMENTO,
NO_PARCELA,
TP_PAGAMENTO,
U_12_VL_PAGO_PAGADOR,
U_16_DT_OCORRENCIA,
U_17_DT_EFETIVACAO_CREDITO,
ST_PROCESSAMENTO,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO,
FL_DUPLICIDADE)
VALUES
(V_LISTA_PAGAMENTOS(V_INDICE).SIS_ORIGEM,
V_LISTA_PAGAMENTOS(V_INDICE).ID_PARCELAMENTO,
1,
V_LISTA_PAGAMENTOS(V_INDICE).TP_PARCELAMENTO,
V_LISTA_PAGAMENTOS(V_INDICE).VL_PARCELA,
TO_CHAR(V_LISTA_PAGAMENTOS(V_INDICE).DT_CRIACAO_PARCELAMENTO,
'ddmmrrrr'),
TO_CHAR(V_LISTA_PAGAMENTOS(V_INDICE).DT_CRIACAO_PARCELAMENTO,
'ddmmrrrr'),
1,
V_LISTA_PAGAMENTOS(V_INDICE).DT_CRIACAO_PARCELAMENTO,
V_LISTA_PAGAMENTOS(V_INDICE).US_CRIACAO,
V_LISTA_PAGAMENTOS(V_INDICE).DT_MODIFICACAO,
V_LISTA_PAGAMENTOS(V_INDICE).US_MODIFICACAO,
'N');

ELSE
INSERT INTO GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT I
(ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_PARCELAMENTO,
ST_PROCESSAMENTO,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO)
VALUES
(1,
V_LISTA_PAGAMENTOS(V_INDICE).SIS_ORIGEM,
V_LISTA_PAGAMENTOS(V_INDICE).ID_PARCELAMENTO,
1,
SYSDATE,
'BACKOFFICE',
SYSDATE,
'KROTON');

END IF;

COMMIT;
V_INDICE := V_LISTA_PAGAMENTOS.NEXT(V_INDICE);

END LOOP;
END IF;

EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20000,
'Não foi possível gerar o pagamento por crédito - '
||
SQLERRM);

END INSERIR_PAGAMENTOS_CREDITO;

PROCEDURE CONTROLADORA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE) IS
v_procedure varchar2(100);
v_idRegra number;
v_idlog number;
v_idsistema number;
v_idprocessamento number;
v_idtipoinformacao number;
v_ok char(1);
v_retorno varchar2(100);
CURSOR C_PARAM(p_idsistema number, p_idtipoinformacao number) IS

SELECT R.NMPROCEDURE, R.IDREGRA


FROM GESTAOCARGAS.SISTEMAORIGEM SO
INNER JOIN GESTAOCARGAS.SISTEMATIPOINFORMACAO STI
ON STI.IDSISTEMA = SO.IDSISTEMA
INNER JOIN GESTAOCARGAS.TIPOINFORMACAO TI
ON TI.IDTIPOINFORMACAO = STI.IDTIPOINFORMACAO
INNER JOIN GESTAOCARGAS.PROCESSOREGRASISTEMA PRS
ON PRS.IDSISTEMA = SO.IDSISTEMA
INNER JOIN GESTAOCARGAS.PROCESSO P
ON P.IDPROCESSO = PRS.IDPROCESSO
INNER JOIN GESTAOCARGAS.REGRA R
ON R.IDREGRA = PRS.IDREGRA
AND R.IDTIPOINFORMACAO = TI.IDTIPOINFORMACAO
WHERE SO.IDSISTEMA = p_idsistema
and TI.IDTIPOINFORMACAO = p_idtipoinformacao
AND SO.IC_ATIVO = 'S'
AND TI.IC_ATIVO = 'S'
AND PRS.IC_ATIVO = 'S'
AND P.IC_ATIVO = 'S'
AND R.IC_ATIVO = 'S'
ORDER BY P.NOORDEM,R.IDREGRA;
begin
begin
select a.idsistema, c.idtipoinformacao
into v_idsistema, v_idtipoinformacao
from GESTAOCARGAS.PROCESSAMENTO P
inner join GESTAOCARGAS.SISTEMAORIGEM A
on (p.idsistema = a.idsistema)
inner join GESTAOCARGAS.sistematipoinformacao b
on (b.idsistema = a.idsistema and
p.idtipoinformacao = b.idtipoinformacao)
inner join GESTAOCARGAS.Tipoinformacao c
on (c.idtipoinformacao = b.idtipoinformacao)
where p.idprocessamento = P_IDPROCESSAMENTO;
EXCEPTION
WHEN NO_DATA_FOUND THEN
SELECT MIN(A.IDREGRA)
INTO v_idRegra
FROM GESTAOCARGAS.REGRA A;
SELECT MIN(A.IDPROCESSAMENTO)
INTO v_idprocessamento
FROM GESTAOCARGAS.PROCESSAMENTO A;
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => v_idprocessamento,
P_IDREGRA => v_idRegra,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'CONTROLADORA',
P_DESCRICAO => 'ERRO NA CONTROLADORA:
IDPROCESSAMENTO INEXISTENTE ('
|| P_IDPROCESSAMENTO || ')
-' || sqlerrm,
P_COMMIT => 'S',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
RETURN;
end;
OPEN C_PARAM(v_idsistema, v_idtipoinformacao);
LOOP
FETCH C_PARAM
INTO v_procedure, v_idRegra;
EXIT WHEN C_PARAM%notfound;
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => v_idRegra,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'PROCESSANDO',
P_DESCRICAO => 'EXECUÇÃO DA ' ||
v_procedure ||
' (Processo: ' ||
P_IDPROCESSAMENTO ||
' - Regra: ' ||
v_idRegra,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
COMMIT;
EXECUTE IMMEDIATE ('BEGIN ' || 'GESTAOCARGAS.motor_de_regras.' ||
v_procedure || '(' || P_IDPROCESSAMENTO || ',' ||
V_IDREGRA || ')' || '; END;');
SP_LOG_TERMINO_PROCESSO(P_IDLOG => v_idlog,
P_DTFIM => sysdate,
P_STATUSPROCESSAMENTO => 'FINALIZADO',
P_COMMIT => 'N',
P_OK => v_ok,
P_RETORNO => v_retorno);
COMMIT;
END LOOP;
CLOSE C_PARAM;
exception
when others then
SELECT MIN(A.IDREGRA)
INTO v_idRegra
FROM GESTAOCARGAS.REGRA A;
SELECT MIN(A.IDPROCESSAMENTO)
INTO v_idprocessamento
FROM GESTAOCARGAS.PROCESSAMENTO A;
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => v_idprocessamento,
P_IDREGRA => v_idRegra,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'CONTROLADORA',
P_DESCRICAO => 'ERRO NA CONTROLADORA:
IDPROCESSAMENTO INEXISTENTE ('
|| P_IDPROCESSAMENTO || ')
-' || sqlerrm,
P_COMMIT => 'S',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
end CONTROLADORA;

PROCEDURE SP_INT_CLIENTE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_CURSOR_INT TCURSOR;
V_LISTA_INT GESTAOCARGAS.TL_CLIENTES_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN
V_CURSOR_INT := GET_CLIENTE(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_INT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_INT.COUNT = 0;
INSERIR_CLIENTES(P_LISTA_CLIENTES => V_LISTA_INT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
CLIENTE_INT -> CLIENTE_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_CLIENTE;

PROCEDURE SP_INT_CONTRATO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
V_CURSOR_INT TCURSOR;
V_LISTA_CON GESTAOCARGAS.TL_CONTRATOS_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
begin
BEGIN

V_CURSOR_INT := GET_CONTRATOS(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);


LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_CON LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_CON.COUNT = 0;

INSERIR_CONTRATOS(P_LISTA_CONTRATOS => V_LISTA_CON,


P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
CONTRATOS_INT -> CONTRATOS_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
end SP_INT_CONTRATO;
PROCEDURE SP_INT_CONTATO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_CURSOR_INT TCURSOR;
V_LISTA_INT GESTAOCARGAS.TL_CONTATOS_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN

V_CURSOR_INT := GET_CONTATO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);


LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_INT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_INT.COUNT = 0;

INSERIR_CONTATOS(P_LISTA_CONTATOS => V_LISTA_INT,


P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);

END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
CONTATO_INT -> CONTATO_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_CONTATO;

PROCEDURE SP_INT_FATURA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_CURSOR_TIT TCURSOR;
V_LISTA_TIT GESTAOCARGAS.TL_TITULOS_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN
V_CURSOR_TIT := GET_FATURA(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_TIT BULK COLLECT
INTO V_LISTA_TIT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_TIT.COUNT = 0;
INSERIR_FATURAS(P_LISTA_FATURAS => V_LISTA_TIT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
TITULOS_INT -> TITULOS_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_FATURA;

PROCEDURE SP_INT_PEP(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS

V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

INSERT INTO GESTAOCARGAS.PEP_STG


(SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
CD_UNIDADE,
CD_ALUNO,
CD_ESPECIALIDADE,
RA_COB,
DS_BOLETAGEM,
CD_ORIGEM_PEP,
NM_SAFRA,
CD_PRODUTO,
CD_SISTEMA_ORIGEM,
IC_CONTRATO_ASSINADO,
IC_PAGAMENTO_POS_FORMATURA,
CD_STATUS,
DS_DEFINICAO,
IC_ACEITE,
NM_MES_EVASAO,
CD_SITUACAO_ALUNO,
IC_MGP_EVADIDO,
DT_INCLUSAO,
DT_ATUALIZACAO
FROM GESTAOCARGAS.PEP_INT
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO);

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
PEP_INT -> PEP_STG: ' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_INT_PEP;

PROCEDURE SP_INT_ACERTO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_CURSOR_INT TCURSOR;
V_LISTA_INT GESTAOCARGAS.TL_ACERTO_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN
V_CURSOR_INT := GET_ACERTO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_INT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_INT.COUNT = 0;
INSERIR_ACERTOS(P_LISTA_ACERTOS => V_LISTA_INT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
GC_AGREEMENT_INT -> ACERTO_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_ACERTO;

PROCEDURE SP_INT_NOVAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_CURSOR_INT TCURSOR;
V_LISTA_INT GESTAOCARGAS.TL_NOVAS_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN
V_CURSOR_INT := GET_NOVAS(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_INT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_INT.COUNT = 0;
INSERIR_NOVAS(P_LISTA_NOVAS => V_LISTA_INT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
GC_AGREEMENT_DETAIL_INT -> NOVAS_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_NOVAS;

PROCEDURE SP_INT_ORIGINAIS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
V_CURSOR_INT TCURSOR;
V_LISTA_INT GESTAOCARGAS.TL_ORIGINAIS_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN
V_CURSOR_INT := GET_ORIGINAIS(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_INT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_INT.COUNT = 0;
INSERIR_ORIGINAIS(P_LISTA_ORIGINAIS => V_LISTA_INT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
GC_AGREEMENT_BILL_INT -> ORIGINAIS_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_ORIGINAIS;

PROCEDURE SP_INT_PAGAMENTOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
V_CURSOR_INT TCURSOR;
V_LISTA_INT GESTAOCARGAS.TL_PAGAMENTOS_STG;
v_ok varchar2(1);
v_retorno varchar2(100);
v_idlog number;
BEGIN
BEGIN
V_CURSOR_INT := GET_PAGAMENTOS(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LISTA_INT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_INT.COUNT = 0;
INSERIR_PAGAMENTOS(P_LISTA_PAGAMENTOS => V_LISTA_INT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
GC_PAYMENT_BILLING_INT -> PAGAMENTOS_STG: ' ||
sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END;
END SP_INT_PAGAMENTOS;

PROCEDURE SP_COMP_CLIENTECPF(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) IS
v_procedure varchar2(100);
BEGIN
select 'SP_COMP_CLIENTECPF' into v_procedure from dual;
dbms_output.put_line(v_procedure || ' - ' || P_IDPROCESSAMENTO ||
' - ' || p_idregra);
END SP_COMP_CLIENTECPF;

PROCEDURE SP_VAL_CLIENTECHAVE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) IS
v_procedure varchar2(100);
BEGIN
select 'SP_VAL_CLIENTECHAVE' into v_procedure from dual;
dbms_output.put_line(v_procedure || ' - ' || P_IDPROCESSAMENTO ||
' - ' || p_idregra);
END SP_VAL_CLIENTECHAVE;

PROCEDURE SP_ATU_CLIENTE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;
BEGIN
MERGE INTO GESTAOCARGAS.GC_CUSTOMER CUS
USING (SELECT CL.ID_REGISTRO,
CL.ID_PROCESSAMENTO,
CL.SIS_ORIGEM,
CL.ID_CLIENTE,
CL.ID_CLIENTE_ORIGEM,
CL.NM_CLIENTE,
CL.TP_PESSOA,
CL.NO_CPFCNPJ,
CL.DT_NASCIMENTO,
CL.DT_CADASTRO,
CL.IC_SEXO,
SUBSTR(CL.NO_RG,0,20) NO_RG,
CL.IC_ESTADOCIVIL,
CL.NM_PAI,
CL.NM_MAE,
CL.DS_NACIONALIDADE,
CL.DS_NATURALIDADE,
CL.DT_MODIFICACAO
FROM GESTAOCARGAS.CLIENTES_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = CL.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = CL.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)) CLI
ON (CLI.ID_CLIENTE = CUS.ID_CLIENTE)
WHEN MATCHED THEN
UPDATE
SET CUS.NM_CLIENTE = CLI.NM_CLIENTE,
CUS.TP_PESSOA = CLI.TP_PESSOA,
CUS.CPF_CNPJ = CLI.NO_CPFCNPJ,
CUS.DT_NASCIMENTO = CLI.DT_NASCIMENTO,
CUS.DT_CADASTRO = CLI.DT_CADASTRO,
CUS.SEXO = CLI.IC_SEXO,
CUS.RG = CLI.NO_RG,
CUS.ESTADO_CIVIL = CLI.IC_ESTADOCIVIL,
CUS.NM_PAI = CLI.NM_PAI,
CUS.NM_MAE = CLI.NM_MAE,
CUS.NACIONALIDADE = CLI.DS_NACIONALIDADE,
CUS.NATURALIDADE = CLI.DS_NATURALIDADE,
CUS.DT_MODIFICACAO_ORIGEM = CLI.DT_MODIFICACAO,
CUS.ID_CLIENTE_ORIGEM = CLI.ID_CLIENTE_ORIGEM,
CUS.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
CUS.DT_MODIFICACAO = SYSDATE,
CUS.US_MODIFICACAO = V_USR_KROTON

WHERE CUS.ID_CLIENTE = CLI.ID_CLIENTE


WHEN NOT MATCHED THEN
INSERT
(CUS.ID_CLIENTE,
CUS.NM_CLIENTE,
CUS.TP_PESSOA,
CUS.CPF_CNPJ,
CUS.DT_NASCIMENTO,
CUS.DT_CADASTRO,
CUS.SEXO,
CUS.RG,
CUS.ESTADO_CIVIL,
CUS.NM_PAI,
CUS.NM_MAE,
CUS.NACIONALIDADE,
CUS.NATURALIDADE,
CUS.DT_MODIFICACAO_ORIGEM,
CUS.ST_PROCESSAMENTO,
CUS.DT_CRIACAO,
CUS.US_CRIACAO,
CUS.DT_MODIFICACAO,
CUS.US_MODIFICACAO,
CUS.ID_CLIENTE_ORIGEM)
VALUES
(CLI.ID_CLIENTE,
CLI.NM_CLIENTE,
CLI.TP_PESSOA,
CLI.NO_CPFCNPJ,
CLI.DT_NASCIMENTO,
CLI.DT_CADASTRO,
CLI.IC_SEXO,
CLI.NO_RG,
CLI.IC_ESTADOCIVIL,
CLI.NM_PAI,
CLI.NM_MAE,
CLI.DS_NACIONALIDADE,
CLI.DS_NATURALIDADE,
CLI.DT_MODIFICACAO,
V_ST_PROCESSAMENTO,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON,
CLI.ID_CLIENTE_ORIGEM);
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
GC_CUSTOMER ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_CLIENTE;

PROCEDURE SP_ATU_CONTATO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

TYPE V_TL_GC_CONTACT IS TABLE OF GC_CONTACT%ROWTYPE;


V_LIST_GC_CONTACT V_TL_GC_CONTACT;

CURSOR C1 IS
SELECT COT.ID_CLIENTE,
COT.ID_REGISTRO,
COT.TP_CONTATO,
COT.ST_CONTATO,
COT.END_LOGRADOURO,
COT.END_COMPLEMENTO,
COT.END_BAIRRO,
COT.END_CIDADE,
COT.END_UF,
COT.END_CEP,
COT.DS_EMAIL,
COT.NO_TELEFONE_FIXO,
COT.NO_TELEFONE_CELULAR,
SYSDATE DT_CADASTRO,
COT.DT_MODIFICACAO DT_MODIFICACAO_ORIGEM,
V_ST_PROCESSAMENTO ST_PROCESSAMENTO,
SYSDATE DT_CRIACAO,
V_USR_KROTON US_CRIACAO,
SYSDATE DT_MODIFICACAO,
V_USR_KROTON US_MODIFICACAO,
COT.PF_CONTATO,
COT.IBGE_UF,
COT.IBGE_MUNICIPIO
FROM GESTAOCARGAS.CONTATOS_STG COT
WHERE COT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (COT.FL_CRITICIDADE != ERRO_VALIDACAO OR COT.FL_CRITICIDADE IS NULL)
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_CONTACT GC
WHERE GC.ID_CLIENTE = COT.ID_CLIENTE
AND GC.TP_CONTATO = COT.TP_CONTATO
AND GC.ST_CONTATO = COT.ST_CONTATO
AND GC.PF_CONTATO = COT.PF_CONTATO
AND NVL(GC.LOGRADOURO,' ') = NVL(COT.END_LOGRADOURO,' ')
AND NVL(GC.COMPLEMENTO,' ') = NVL(COT.END_COMPLEMENTO,' ')
AND NVL(GC.BAIRRO,' ') = NVL(COT.END_BAIRRO,' ')
AND NVL(GC.CIDADE,' ') = NVL(COT.END_CIDADE,' ')
AND NVL(GC.UF,' ') = NVL(COT.END_UF,' ')
AND NVL(GC.CEP,' ') = NVL(COT.END_CEP,' ')
AND NVL(GC.EMAIL,' ') = NVL(COT.DS_EMAIL,' ')
AND NVL(GC.TELEFONE_FIXO,' ') = NVL(COT.NO_TELEFONE_FIXO,' ')
AND NVL(GC.TELEFONE_CELULAR,' ')= NVL(COT.NO_TELEFONE_CELULAR,' ')
AND NVL(GC.IBGE_UF,' ') = NVL(COT.IBGE_UF,' ')
AND NVL(GC.IBGE_MUNICIPIO,' ') = NVL(COT.IBGE_MUNICIPIO,' '));

BEGIN

OPEN C1;
LOOP
-- the following statement fetches 10 rows or less in each iteration
FETCH C1 BULK COLLECT
INTO V_LIST_GC_CONTACT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LIST_GC_CONTACT.COUNT = 0;

FORALL I IN INDICES OF V_LIST_GC_CONTACT


INSERT INTO GESTAOCARGAS.GC_CONTACT VALUES V_LIST_GC_CONTACT (I);
COMMIT;
END LOOP;
CLOSE C1;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR GC_CONTACT '
||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);

END SP_ATU_CONTATO;

PROCEDURE SP_ATU_PEP(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS

V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

MERGE INTO GESTAOCARGAS.GC_ACCOUNT AC


USING (SELECT DISTINCT PS.DS_BOLETAGEM,
PS.CD_ORIGEM_PEP,
PS.NM_SAFRA,
PS.IC_CONTRATO_ASSINADO,
PS.IC_PAGAMENTO_POS_FORMATURA,
PS.CD_STATUS,
PS.DS_DEFINICAO,
PS.IC_ACEITE,
PS.NM_MES_EVASAO,
PS.IC_MGP_EVADIDO,
PS.CD_PRODUTO,
SYSDATE AS DT_MODIFICACAO,
GC1.ID_CONTRATO,
GC1.ID_CLIENTE
FROM GESTAOCARGAS.PEP_STG PS
INNER JOIN GESTAOCARGAS.GC_ACCOUNT GC1
ON GC1.ID_CONTRATO_ORIGEM = LPAD(PS.CD_ALUNO, 10, 0) ||
LPAD(PS.CD_ESPECIALIDADE, 6, 0)
AND GC1.ID_CLIENTE_ORIGEM = TO_CHAR(PS.CD_ALUNO)
AND GC1.CD_FILIAL = TO_CHAR(PS.CD_UNIDADE)
WHERE PS.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = PS.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = PS.ID_REGISTRO
AND LP.CRITICIDADE = 'E')) ACT
ON (AC.ID_CLIENTE = ACT.ID_CLIENTE AND AC.ID_CONTRATO = ACT.ID_CONTRATO)
WHEN MATCHED THEN
UPDATE
SET AC.BOLETAGEM = ACT.DS_BOLETAGEM,
AC.ORIGEM = ACT.CD_ORIGEM_PEP,
AC.SAFRA = ACT.NM_SAFRA,
AC.IC_ASSINATURA_CONTRATO = ACT.IC_CONTRATO_ASSINADO,
AC.IC_PGTO_TITULO_POS_FORMADO = ACT.IC_PAGAMENTO_POS_FORMATURA,
AC.ST_PEP = ACT.CD_STATUS,
AC.DEFINICAO_ACAO = ACT.DS_DEFINICAO,
AC.IC_ACEITE = ACT.IC_ACEITE,
AC.MES_EVASAO = ACT.NM_MES_EVASAO,
AC.MGP_EVADIDO = ACT.IC_MGP_EVADIDO,
AC.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
AC.DT_MODIFICACAO = SYSDATE,
AC.PRODUTO_PEP = ACT.CD_PRODUTO,
AC.US_MODIFICACAO = V_USR_KROTON;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'ERRO NA ATUALIZAÇÃO DE
CONTRATO PEP: ' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END SP_ATU_PEP;

PROCEDURE SP_ATU_FATURA_ABERTO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
V_OK VARCHAR2(10);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
V_COUNT NUMBER;
BEGIN
-- Processo de atualização da tabela GESTAOCARGAS.GC_BILL
FOR TI IN (SELECT TIT.*
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA = 'ABERTO'
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = TIT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = TIT.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO)) LOOP
-- Verifica se o registro já existe na tabela GESTAOCARGAS.GC_BILL
SELECT COUNT(*)
INTO V_COUNT
FROM GESTAOCARGAS.GC_BILL BIL
WHERE BIL.ID_TITULO = TI.ID_FATURA;

IF V_COUNT > 0 THEN


-- Atualiza o registro na tabela GESTAOCARGAS.GC_BILL se houver diferenças
nos campos desejados

UPDATE GESTAOCARGAS.GC_BILL BIL


SET BIL.NO_TITULO = TI.NU_TITULO,
BIL.NATUREZA_TITULO = TI.TP_NATUREZA_TITULO,
BIL.DESC_NATUREZA_TITULO = TI.DS_NATUREZA_TITULO,
BIL.MES_COMPETENCIA = TI.NR_MES_COMPETENCIA,
BIL.ANO_COMPETENCIA = TI.NR_ANO_COMPETENCIA,
BIL.VL_LIQUIDO = TI.VL_LIQUIDO,
BIL.VL_SEM_DESC_PONTUAL = TI.VL_BRUTO,
BIL.DT_VENCIMENTO = TI.DT_VENCIMENTO,
BIL.DT_EMISSAO = TI.DT_EMISSAO,
BIL.NATUREZA_REMATRICULA = TI.IC_NATUREZAREMAT,
BIL.ST_TITULO = TI.ST_FATURA,
BIL.DT_CADASTRO = TI.DT_CADASTRO,
BIL.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO,
BIL.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
BIL.IC_CARTEIRAVERTIA = TI.IC_CARTEIRAVERTIA,
BIL.DT_MODIFICACAO = SYSDATE,
BIL.US_MODIFICACAO = V_USR_KROTON,
BIL.DT_PAGAMENTO = NULL,
BIL.VL_PAGAMENTO = NULL
WHERE BIL.ID_TITULO = TI.ID_FATURA
AND (NVL(BIL.MES_COMPETENCIA,0) != NVL(TI.NR_MES_COMPETENCIA,0)

OR NVL(BIL.ANO_COMPETENCIA,0) != NVL(TI.NR_ANO_COMPETENCIA,0)
OR NVL(BIL.VL_LIQUIDO,0) != NVL(TI.VL_LIQUIDO,0)
OR NVL(BIL.VL_SEM_DESC_PONTUAL,0) != NVL(TI.VL_BRUTO,0)
OR NVL(BIL.NATUREZA_REMATRICULA,' ') != NVL(TI.IC_NATUREZAREMAT,' ')
OR NVL(BIL.ST_TITULO,' ') != NVL(TI.ST_FATURA,' ')
OR NVL(TO_CHAR(BIL.DT_VENCIMENTO,'MM/DD/YYYY'),' ') !=
NVL(TO_CHAR(TI.DT_VENCIMENTO,'MM/DD/YYYY'),' ')
);

-- Adicione mais atualizações para outros campos conforme necessário


ELSE
-- Insere o novo registro na tabela GESTAOCARGAS.GC_BILL
INSERT INTO GESTAOCARGAS.GC_BILL BIL
(BIL.ID_TITULO,
BIL.ID_CONTRATO,
BIL.ID_CLIENTE,
BIL.NO_TITULO,
BIL.NATUREZA_TITULO,
BIL.DESC_NATUREZA_TITULO,
BIL.MES_COMPETENCIA,
BIL.ANO_COMPETENCIA,
BIL.VL_LIQUIDO,
BIL.VL_SEM_DESC_PONTUAL,
BIL.DT_VENCIMENTO,
BIL.NO_PARCELA,
BIL.ID_PARCELAMENTO,
BIL.DT_EMISSAO,
BIL.NATUREZA_REMATRICULA,
BIL.ST_TITULO,
BIL.DT_CADASTRO,
BIL.DT_MODIFICACAO_ORIGEM,
BIL.ST_PROCESSAMENTO,
BIL.DT_CRIACAO,
BIL.US_CRIACAO,
BIL.DT_MODIFICACAO,
BIL.US_MODIFICACAO,
BIL.NO_MANUTENCAO_NEGATIVACAO,
BIL.IC_CARTEIRAVERTIA)
VALUES
(TI.ID_FATURA,
TI.ID_CONTRATO,
TI.ID_CLIENTE,
TI.NU_TITULO,
TI.TP_NATUREZA_TITULO,
TI.DS_NATUREZA_TITULO,
TI.NR_MES_COMPETENCIA,
TI.NR_ANO_COMPETENCIA,
TI.VL_LIQUIDO,
TI.VL_BRUTO,
TI.DT_VENCIMENTO,
TI.NO_PARCELA,
TI.ID_PARCELAMENTO,
TI.DT_EMISSAO,
TI.IC_NATUREZAREMAT,
TI.ST_FATURA,
TI.DT_CADASTRO,
TI.DT_MODIFICACAO,
V_ST_PROCESSAMENTO,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON,
GESTAOCARGAS.SEQ_MANUTENCAO_NEGATIVACAO.NEXTVAL,
---TI.NU_TITULO,
TI.IC_CARTEIRAVERTIA);

END IF;

END LOOP;

-- Processo de atualização da tabela GESTAOCARGAS.GC_BILL_DETAIL


FOR TI IN (SELECT TIT.*
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA = 'ABERTO'
/*
AND TIT.ID_REGISTRO =
(SELECT MAX(ID_REGISTRO)
FROM GESTAOCARGAS.TITULOS_STG TIT2
WHERE TIT2.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ID_FATURA = TIT2.ID_FATURA)
*/
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = TIT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = TIT.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO)) LOOP
-- Verifica se o registro já existe na tabela GESTAOCARGAS.GC_BILL_DETAIL
DECLARE
V_COUNT NUMBER;

BEGIN
SELECT COUNT(*)
INTO V_COUNT
FROM GESTAOCARGAS.GC_BILL_DETAIL BILL
WHERE BILL.ID_TITULO = TI.ID_FATURA;

IF V_COUNT > 0 THEN


UPDATE GESTAOCARGAS.GC_BILL_DETAIL BILL
SET BILL.ID_OPEN_ITEM = TI.TP_NATUREZA_TITULO,
BILL.VL_LIQUIDO = TI.VL_LIQUIDO,
BILL.VL_PAGAMENTO = 0,
BILL.DT_CADASTRO = TI.DT_CADASTRO,
BILL.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO,
BILL.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
BILL.DT_MODIFICACAO = SYSDATE,
BILL.US_MODIFICACAO = V_USR_KROTON,
BILL.VL_PONTUALIDADE = TI.VL_PONTUALIDADE,
BILL.DT_PONTUALIDADE = TI.DT_PONTUALIDADE
WHERE BILL.ID_TITULO = TI.ID_FATURA;

-- Adicione mais atualizações para outros campos conforme necessário


ELSE
-- Insere o novo registro na tabela GESTAOCARGAS.GC_BILL_DETAIL
INSERT INTO GESTAOCARGAS.GC_BILL_DETAIL BILL
(BILL.ID_TITULO,
BILL.ID_OPEN_ITEM,
BILL.VL_LIQUIDO,
BILL.VL_PAGAMENTO,
BILL.DT_CADASTRO,
BILL.DT_MODIFICACAO_ORIGEM,
BILL.ST_PROCESSAMENTO,
BILL.DT_CRIACAO,
BILL.US_CRIACAO,
BILL.DT_MODIFICACAO,
BILL.US_MODIFICACAO,
BILL.VL_PONTUALIDADE,
BILL.DT_PONTUALIDADE)
VALUES
(TI.ID_FATURA,
TI.TP_NATUREZA_TITULO,
TI.VL_LIQUIDO,
0,
TI.DT_CADASTRO,
TI.DT_MODIFICACAO,
V_ST_PROCESSAMENTO,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON,
TI.VL_PONTUALIDADE,
TI.DT_PONTUALIDADE);

END IF;

END;

END LOOP;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
SP_ATU_FATURA_ABERTO GC_BILL ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END SP_ATU_FATURA_ABERTO;

PROCEDURE SP_ATU_FATURA_BAIXA_CANC(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO % TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
% TYPE) AS

V_OK VARCHAR2(10);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
V_COUNT NUMBER;

BEGIN
-- Processo de atualização da tabela GESTAOCARGAS.GC_BILL
FOR TI IN (SELECT TIT.*,
PAG.ID_PAGAMENTO,
PAG.TP_PAGAMENTO,
CASE
WHEN UPPER(PAG.TP_PAGAMENTO) = 'BOLETO' THEN
PAG.t_15_nr_documento_cobranca
WHEN UPPER(PAG.TP_PAGAMENTO) = 'PIX' THEN
PAG.Transaction_Id
ELSE
PAG.NR_TID_1
END NR_DOCUMENTO
FROM GESTAOCARGAS.TITULOS_STG TIT
LEFT JOIN GESTAOCARGAS.PAGAMENTOS_OUT PAG
ON TIT.ID_PARCELAMENTO = PAG.ID_PARCELAMENTO
AND TIT.NO_PARCELA = PAG.NO_PARCELA
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA <> 'ABERTO'
/*
AND TIT.ID_REGISTRO =
(SELECT MAX(ID_REGISTRO)
FROM GESTAOCARGAS.TITULOS_STG TIT2
WHERE TIT2.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ID_FATURA = TIT2.ID_FATURA)
*/
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = TIT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = TIT.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO)) LOOP
-- Verifica se o registro já existe na tabela GESTAOCARGAS.GC_BILL
SELECT COUNT(*)
INTO V_COUNT
FROM GESTAOCARGAS.GC_BILL BIL
WHERE BIL.ID_TITULO = TI.ID_FATURA;

IF V_COUNT > 0 THEN


-- Atualiza o registro na tabela GESTAOCARGAS.GC_BILL se houver diferenças
nos campos desejados
UPDATE GESTAOCARGAS.GC_BILL BIL
SET BIL.DT_PAGAMENTO = TI.DT_PAGAMENTO,
BIL.VL_PAGAMENTO = TI.VL_PAGAMENTO,
BIL.VL_LIQUIDO = 0,
BIL.NO_TITULO = TI.NU_TITULO,
BIL.NATUREZA_TITULO = TI.TP_NATUREZA_TITULO,
BIL.DESC_NATUREZA_TITULO = TI.DS_NATUREZA_TITULO,
BIL.MES_COMPETENCIA = TI.NR_MES_COMPETENCIA,
BIL.ANO_COMPETENCIA = TI.NR_ANO_COMPETENCIA,
BIL.VL_SEM_DESC_PONTUAL = DECODE(TI.SIS_ORIGEM,
'SAP',
BIL.VL_SEM_DESC_PONTUAL,
TI.VL_BRUTO),
BIL.DT_VENCIMENTO = DECODE(TI.DT_VENCIMENTO,
NULL,
BIL.DT_VENCIMENTO,
TI.DT_VENCIMENTO),
BIL.DT_EMISSAO = TI.DT_EMISSAO,
BIL.NATUREZA_REMATRICULA = TI.IC_NATUREZAREMAT,
BIL.ST_TITULO = CASE
WHEN TI.TP_NATUREZA_TITULO != 'ACORDO
RAID' THEN
TI.ST_FATURA
WHEN TI.TP_NATUREZA_TITULO = 'ACORDO
RAID' AND TI.ST_FATURA = 'CANCELADO' THEN
TI.ST_FATURA
WHEN TI.TP_NATUREZA_TITULO = 'ACORDO
RAID' AND BIL.ST_TITULO = 'ABERTO' THEN
TI.ST_FATURA
ELSE
BIL.ST_TITULO
END,
-- SE FOR ACORDO RAID, SÓ MUDA O STATUS SE FOR PARA CANCELAR
BIL.DT_CADASTRO = TI.DT_CADASTRO,
BIL.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO,
BIL.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
BIL.DT_MODIFICACAO = SYSDATE,
BIL.US_MODIFICACAO = V_USR_KROTON,
BIL.ID_PAGAMENTO = NVL(BIL.ID_PAGAMENTO, TI.ID_PAGAMENTO),
BIL.TP_PAGAMENTO = NVL(BIL.TP_PAGAMENTO, TI.TP_PAGAMENTO),
BIL.NR_DOCUMENTO = NVL(BIL.TP_PAGAMENTO, TI.NR_DOCUMENTO)
WHERE BIL.ID_TITULO = TI.ID_FATURA
AND (NVL(TO_CHAR(BIL.DT_PAGAMENTO,'MM/DD/YYYY'),' ') !=
NVL(TO_CHAR(TI.DT_PAGAMENTO,'MM/DD/YYYY'),' ')
OR NVL(BIL.VL_PAGAMENTO,0) != NVL(TI.VL_PAGAMENTO,0)
OR NVL(BIL.MES_COMPETENCIA,0) != NVL(TI.NR_MES_COMPETENCIA,0)
OR NVL(BIL.ANO_COMPETENCIA,0) != NVL(TI.NR_ANO_COMPETENCIA,0)
OR NVL(BIL.VL_SEM_DESC_PONTUAL,0) !=
NVL(DECODE(TI.SIS_ORIGEM,'SAP',BIL.VL_SEM_DESC_PONTUAL,TI.VL_BRUTO), 0)
OR NVL(TO_CHAR(BIL.DT_VENCIMENTO,'MM/DD/YYYY'),' ') !=
NVL(DECODE(TI.DT_VENCIMENTO,NULL,TO_CHAR(BIL.DT_VENCIMENTO,'MM/DD/
YYYY'),TO_CHAR(TI.DT_VENCIMENTO,'MM/DD/YYYY')),' ')
OR NVL(BIL.NATUREZA_REMATRICULA,' ') != NVL(TI.IC_NATUREZAREMAT,' ')
OR NVL(BIL.ST_TITULO,' ') != NVL(CASE
WHEN
TI.TP_NATUREZA_TITULO != 'ACORDO RAID' THEN
TI.ST_FATURA
WHEN TI.TP_NATUREZA_TITULO
= 'ACORDO RAID' AND TI.ST_FATURA = 'CANCELADO' THEN
TI.ST_FATURA
WHEN TI.TP_NATUREZA_TITULO
= 'ACORDO RAID' AND BIL.ST_TITULO = 'ABERTO' THEN
TI.ST_FATURA
ELSE
BIL.ST_TITULO
END,' ')-- SE FOR ACORDO
RAID, SÓ MUDA O STATUS SE FOR PARA CANCELAR
OR NVL(BIL.ID_PAGAMENTO,0) != NVL(NVL(BIL.ID_PAGAMENTO,
TI.ID_PAGAMENTO),0)
OR NVL(BIL.TP_PAGAMENTO,' ') != NVL(NVL(BIL.TP_PAGAMENTO,
TI.TP_PAGAMENTO),' ')
OR NVL(BIL.NR_DOCUMENTO,' ') != NVL(NVL(BIL.TP_PAGAMENTO,
TI.NR_DOCUMENTO),' '));

-- Adicione mais atualizações para outros campos conforme necessário


ELSE
-- Insere o novo registro na tabela GESTAOCARGAS.GC_BILL
INSERT INTO GESTAOCARGAS.GC_BILL BIL
(BIL.ID_TITULO,
BIL.ID_CONTRATO,
BIL.ID_CLIENTE,
BIL.NO_TITULO,
BIL.NATUREZA_TITULO,
BIL.DESC_NATUREZA_TITULO,
BIL.MES_COMPETENCIA,
BIL.ANO_COMPETENCIA,
BIL.VL_LIQUIDO,
BIL.VL_SEM_DESC_PONTUAL,
BIL.DT_VENCIMENTO,
BIL.NO_PARCELA,
BIL.ID_PARCELAMENTO,
BIL.DT_EMISSAO,
BIL.NATUREZA_REMATRICULA,
BIL.DT_PAGAMENTO,
BIL.VL_PAGAMENTO,
BIL.ST_TITULO,
BIL.DT_CADASTRO,
BIL.DT_MODIFICACAO_ORIGEM,
BIL.ST_PROCESSAMENTO,
BIL.DT_CRIACAO,
BIL.US_CRIACAO,
BIL.DT_MODIFICACAO,
BIL.US_MODIFICACAO,
BIL.ID_PAGAMENTO,
BIL.TP_PAGAMENTO,
BIL.NR_DOCUMENTO
--,BIL.NO_MANUTENCAO_NEGATIVACAO
)
VALUES
(TI.ID_FATURA,
TI.ID_CONTRATO,
TI.ID_CLIENTE,
TI.NU_TITULO,
TI.TP_NATUREZA_TITULO,
TI.DS_NATUREZA_TITULO,
TI.NR_MES_COMPETENCIA,
TI.NR_ANO_COMPETENCIA,
0,
TI.VL_BRUTO,
TI.DT_VENCIMENTO,
TI.NO_PARCELA,
TI.ID_PARCELAMENTO,
TI.DT_EMISSAO,
TI.IC_NATUREZAREMAT,
TI.DT_PAGAMENTO,
TI.VL_PAGAMENTO,
TI.ST_FATURA,
TI.DT_CADASTRO,
TI.DT_MODIFICACAO,
V_ST_PROCESSAMENTO,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON,
TI.ID_PAGAMENTO,
TI.TP_PAGAMENTO,
TI.NR_DOCUMENTO
--,TI.NU_TITULO
);

END IF;

END LOOP;

FOR TI IN (SELECT TIT.*


FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA <> 'ABERTO'
/*
AND TIT.ID_REGISTRO =
(SELECT MAX(ID_REGISTRO)
FROM GESTAOCARGAS.TITULOS_STG TIT2
WHERE TIT2.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ID_FATURA = TIT2.ID_FATURA) */
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = TIT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = TIT.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO)) LOOP
-- Verifica se o registro já existe na tabela GESTAOCARGAS.GC_BILL_DETAIL
DECLARE
V_COUNT NUMBER;

BEGIN
SELECT COUNT(*)
INTO V_COUNT
FROM GESTAOCARGAS.GC_BILL_DETAIL BILL
WHERE BILL.ID_TITULO = TI.ID_FATURA;

IF V_COUNT > 0 THEN


UPDATE GESTAOCARGAS.GC_BILL_DETAIL BILL
SET BILL.ID_OPEN_ITEM = TI.TP_NATUREZA_TITULO,
BILL.VL_LIQUIDO = 0,
BILL.VL_PAGAMENTO = TI.VL_PAGAMENTO,
BILL.DT_CADASTRO = TI.DT_CADASTRO,
BILL.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO,
BILL.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
BILL.DT_MODIFICACAO = SYSDATE,
BILL.US_MODIFICACAO = V_USR_KROTON,
BILL.VL_PONTUALIDADE = TI.VL_PONTUALIDADE,
BILL.DT_PONTUALIDADE = TI.DT_PONTUALIDADE
WHERE BILL.ID_TITULO = TI.ID_FATURA; -- Adicione mais atualizações para
outros campos conforme necessário
ELSE -- Insere o novo registro na tabela GESTAOCARGAS.GC_BILL_DETAIL
INSERT INTO GESTAOCARGAS.GC_BILL_DETAIL
BILL(BILL.ID_TITULO,
BILL.ID_OPEN_ITEM,
BILL.VL_LIQUIDO,
BILL.VL_PAGAMENTO,
BILL.DT_CADASTRO,
BILL.DT_MODIFICACAO_ORIGEM,
BILL.ST_PROCESSAMENTO,
BILL.DT_CRIACAO,
BILL.US_CRIACAO,
BILL.DT_MODIFICACAO,
BILL.US_MODIFICACAO,
BILL.VL_PONTUALIDADE,
BILL.DT_PONTUALIDADE)
VALUES
(TI.ID_FATURA,
TI.TP_NATUREZA_TITULO,
0,
--TI.VL_LIQUIDO,
TI.VL_PAGAMENTO,
TI.DT_CADASTRO,
TI.DT_MODIFICACAO,
V_ST_PROCESSAMENTO,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON,
TI.VL_PONTUALIDADE,
TI.DT_PONTUALIDADE);

END IF;

END;

END LOOP;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
SP_ATU_FATURA_BAIXA_CANC GC_BILL ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END SP_ATU_FATURA_BAIXA_CANC;

PROCEDURE SP_ATU_FATURA_SERV_OLIMPO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_OK VARCHAR2(10);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

FOR TI IN (SELECT REPLACE(TIT.ID_FATURA, 'SERV', 'SERV_PARC')


ID_TITULO_GC_BILL,
TIT.*
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TP_NATUREZA_TITULO IN ('SERVICO')
AND EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_BILL B
WHERE B.ID_TITULO =
REPLACE(TIT.ID_FATURA, 'SERV', 'SERV_PARC'))
AND SIS_ORIGEM = 'OLIMPO'
UNION
SELECT REPLACE(TIT.ID_FATURA, 'SERV_PARC', 'SERV')
ID_TITULO_GC_BILL,
TIT.*
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TP_NATUREZA_TITULO IN ('SERVICO PARCELAMENTO')
AND EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_BILL B
WHERE B.ID_TITULO =
REPLACE(TIT.ID_FATURA, 'SERV_PARC', 'SERV'))
AND SIS_ORIGEM = 'OLIMPO') LOOP
BEGIN
UPDATE GESTAOCARGAS.GC_BILL BIL
SET BIL.DT_PAGAMENTO = TI.DT_PAGAMENTO,
BIL.VL_PAGAMENTO = TI.VL_PAGAMENTO,
BIL.VL_LIQUIDO = TI.VL_LIQUIDO,
BIL.NO_TITULO = TI.NU_TITULO,
BIL.NATUREZA_TITULO = TI.TP_NATUREZA_TITULO,
BIL.DESC_NATUREZA_TITULO = TI.DS_NATUREZA_TITULO,
BIL.MES_COMPETENCIA = TI.NR_MES_COMPETENCIA,
BIL.ANO_COMPETENCIA = TI.NR_ANO_COMPETENCIA,
BIL.VL_SEM_DESC_PONTUAL = TI.VL_BRUTO,
BIL.DT_VENCIMENTO = DECODE(TI.DT_VENCIMENTO,
NULL,
BIL.DT_VENCIMENTO,
TI.DT_VENCIMENTO),
BIL.DT_EMISSAO = TI.DT_EMISSAO,
BIL.NATUREZA_REMATRICULA = TI.IC_NATUREZAREMAT,
BIL.ST_TITULO = TI.ST_FATURA,
BIL.DT_CADASTRO = TI.DT_CADASTRO,
BIL.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO,
BIL.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
BIL.DT_MODIFICACAO = SYSDATE,
BIL.US_MODIFICACAO = V_USR_KROTON
WHERE BIL.ID_TITULO = TI.ID_TITULO_GC_BILL
AND (NVL(BIL.DT_PAGAMENTO,' ') != NVL(TI.DT_PAGAMENTO,' ')
OR NVL(BIL.VL_PAGAMENTO,' ') != NVL(TI.VL_PAGAMENTO,' ')
OR NVL(BIL.VL_LIQUIDO,' ') != NVL(TI.VL_LIQUIDO,' ')
OR NVL(BIL.MES_COMPETENCIA,' ') != NVL(TI.NR_MES_COMPETENCIA,' ')
OR NVL(BIL.ANO_COMPETENCIA,' ') != NVL(TI.NR_ANO_COMPETENCIA,' ')
OR NVL(BIL.VL_SEM_DESC_PONTUAL,' ') != NVL(TI.VL_BRUTO,' ')
OR NVL(BIL.DT_VENCIMENTO,' ') !=
NVL(DECODE(TI.DT_VENCIMENTO,NULL,BIL.DT_VENCIMENTO,TI.DT_VENCIMENTO),' ')
OR NVL(BIL.NATUREZA_REMATRICULA,' ') != NVL(TI.IC_NATUREZAREMAT,' ')
OR NVL(BIL.ST_TITULO,' ') != NVL(TI.ST_FATURA,' '));

UPDATE GESTAOCARGAS.GC_BILL_DETAIL BILL


SET BILL.ID_OPEN_ITEM = TI.TP_NATUREZA_TITULO,
BILL.VL_LIQUIDO = TI.VL_LIQUIDO,
BILL.VL_PAGAMENTO = TI.VL_PAGAMENTO,
BILL.DT_CADASTRO = TI.DT_CADASTRO,
BILL.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO,
BILL.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
BILL.DT_MODIFICACAO = SYSDATE,
BILL.US_MODIFICACAO = V_USR_KROTON,
BILL.VL_PONTUALIDADE = TI.VL_PONTUALIDADE,
BILL.DT_PONTUALIDADE = TI.DT_PONTUALIDADE
WHERE BILL.ID_TITULO = TI.ID_TITULO_GC_BILL;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'ERRO AO ATUALIZAR
SP_ATU_FATURA_SERV_OLIMPO: ' ||
TI.ID_TITULO_GC_BILL ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END;
END LOOP;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
SP_ATU_FATURA_SERV_OLIMPO GC_BILL ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END SP_ATU_FATURA_SERV_OLIMPO;

PROCEDURE SP_ATU_CONTRATO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;
V_COUNT NUMBER;
BEGIN
FOR TI IN (SELECT *
FROM GESTAOCARGAS.CONTRATOS_STG CT
WHERE CT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = CT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = CT.ID_REGISTRO
AND LV.CRITICIDADE =
ERRO_VALIDACAO)) LOOP

SELECT COUNT(*)
INTO V_COUNT
FROM GESTAOCARGAS.GC_ACCOUNT AC
WHERE AC.ID_CONTRATO = TI.ID_CONTRATO AND AC.ID_CLIENTE = TI.ID_CLIENTE;
IF V_COUNT > 0 THEN
UPDATE GESTAOCARGAS.GC_ACCOUNT AC
SET AC.IC_FNU = TI.IC_FINU,
AC.IC_FIES = TI.IC_FIES,
AC.DT_INICIO_CURSO = TI.DT_INICIO_CURSO,
AC.DT_FIM_CURSO = TI.DT_FIM_CURSO,
AC.DT_INICIO_MATRICULA = TI.DT_INICIO_MATRICULA,
AC.DT_FIM_MATRICULA = TI.DT_FIM_MATRICULA,
AC.TP_CURSO = TI.TP_CURSO,
AC.CD_CURSO = TI.COD_CURSO,
AC.NM_CURSO = TI.NM_CURSO,
AC.TP_MATRICULA = TI.TP_MATRICULA,
AC.MODALIDADE_MATRICULA = TI.COD_MODALIDADE_MATRICULA,
AC.CD_FILIAL = TI.COD_FILIAL,
AC.DESC_FILIAL = TI.DS_NOME_FILIAL,
AC.CNPJ_FILIAL = TI.CNPJ_FILIAL,
AC.ENDERECO_FILIAL = TI.END_FILIAL_LOGRADOURO,
AC.BAIRRO_FILIAL = TI.END_FILIAL_BAIRRO,
AC.CIDADE_FILIAL = TI.END_FILIAL_CIDADE,
AC.UF_FILIAL = TI.END_FILIAL_UF,
AC.CEP_FILIAL = TI.END_FILIAL_CEP,
AC.DESC_MATRIZ = TI.DS_MATRIZ,
AC.CNPJ_MATRIZ = TI.CNPJ_MATRIZ,
AC.ENDERECO_MATRIZ = TI.END_COMPLETO_MATRIZ,
AC.SITUACAO_CONTRATO = TI.ST_CONTRATO,
AC.MARCA_CONTRATO = TI.TP_MARCA_CONTRATO,
AC.SERIE_ACADEMICA = TI.COD_SERIE_ACADEMICA,
AC.SALDO_CREDITO = TI.VL_SALDO_CREDITO,
AC.DT_CADASTRO = TI.DT_CADASTRO,
AC.SISTEMA_ORIGEM = TI.SIS_ORIGEM,
AC.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
AC.DT_MODIFICACAO = SYSDATE,
AC.US_MODIFICACAO = V_USR_KROTON,
AC.NM_RESPONSAVEL = TI.NM_RESPONSAVEL,
AC.CPF_RESPONSAVEL = TI.NO_CPFRESPONSAVEL,
AC.CNPJ_PRINCIPAL = TI.CNPJ_PRINCIPAL,
AC.DESC_PRINCIPAL = TI.DESC_PRINCIPAL,
AC.ID_CLIENTE_ORIGEM = TI.ID_CLIENTE_ORIGEM,
AC.ID_CONTRATO_ORIGEM = TI.ID_CONTRATO_ORIGEM,
AC.DESC_SITUACAO_CONTRATO = TI.DS_ST_CONTRATO,
AC.ID_SERVICE_NOW = TI.ID_SERVICE_NOW,
AC.NM_FANTASIA_UNIDADE = TI.NM_FANTASIA_UNIDADE,
AC.BP_ALUNO_SAP = TI.BP_ALUNO_SAP,
AC.IBGE_UF = TI.IBGE_UF,
AC.IBGE_MUNICIPIO = TI.IBGE_MUNICIPIO,
AC.CD_CONTA_CONTRATO = TI.CD_CONTA_CONTRATO,
AC.CD_EMPRESA_SAP = TI.CD_EMPRESA_SAP,
AC.CD_DIVISAO = TI.CD_DIVISAO,
AC.CD_CENTRO_LUCRO = TI.CD_CENTRO_LUCRO
WHERE AC.ID_CONTRATO = TI.ID_CONTRATO
AND AC.ID_CLIENTE = TI.ID_CLIENTE;
ELSE
INSERT INTO GESTAOCARGAS.GC_ACCOUNT AC
(AC.ID_CLIENTE,
AC.ID_CONTRATO,
AC.PRODUTO_PEP,
AC.IC_FNU,
AC.IC_FIES,
AC.DT_INICIO_CURSO,
AC.DT_FIM_CURSO,
AC.DT_INICIO_MATRICULA,
AC.DT_FIM_MATRICULA,
AC.TP_CURSO,
AC.CD_CURSO,
AC.NM_CURSO,
AC.TP_MATRICULA,
AC.MODALIDADE_MATRICULA,
AC.CD_FILIAL,
AC.DESC_FILIAL,
AC.CNPJ_FILIAL,
AC.ENDERECO_FILIAL,
AC.BAIRRO_FILIAL,
AC.CIDADE_FILIAL,
AC.UF_FILIAL,
AC.CEP_FILIAL,
AC.DESC_MATRIZ,
AC.CNPJ_MATRIZ,
AC.ENDERECO_MATRIZ,
AC.CLASSE_DEBITO,
AC.SCORE_COLLECTION,
AC.SCORE_GLOBAL,
AC.SCORE_ENGAJAMENTO,
AC.DESC_CLUSTER,
AC.SITUACAO_CONTRATO,
AC.MARCA_CONTRATO,
AC.SERIE_ACADEMICA,
AC.SALDO_CREDITO,
AC.DT_CADASTRO,
AC.SISTEMA_ORIGEM,
AC.BOLETAGEM,
AC.ORIGEM,
AC.SAFRA,
AC.IC_ASSINATURA_CONTRATO,
AC.IC_PGTO_TITULO_POS_FORMADO,
AC.ST_PEP,
AC.DEFINICAO_ACAO,
AC.IC_ACEITE,
AC.MES_EVASAO,
AC.MGP_EVADIDO,
AC.DT_MODIFICACAO_ORIGEM,
AC.ST_PROCESSAMENTO,
AC.DT_CRIACAO,
AC.US_CRIACAO,
AC.DT_MODIFICACAO,
AC.US_MODIFICACAO,
AC.NM_RESPONSAVEL,
AC.CPF_RESPONSAVEL,
AC.CNPJ_PRINCIPAL,
AC.DESC_PRINCIPAL,
AC.ID_CLIENTE_ORIGEM,
AC.ID_CONTRATO_ORIGEM,
AC.DESC_SITUACAO_CONTRATO,
AC.ID_SERVICE_NOW,
AC.NM_FANTASIA_UNIDADE,
AC.BP_ALUNO_SAP,
AC.IBGE_UF,
AC.IBGE_MUNICIPIO,
AC.CD_CONTA_CONTRATO,
AC.CD_EMPRESA_SAP,
AC.CD_DIVISAO,
AC.CD_CENTRO_LUCRO)
VALUES
(TI.ID_CLIENTE,
TI.ID_CONTRATO,
TI.NM_PRODUTO_PEP,
TI.IC_FINU,
TI.IC_FIES,
TI.DT_INICIO_CURSO,
TI.DT_FIM_CURSO,
TI.DT_INICIO_MATRICULA,
TI.DT_FIM_MATRICULA,
TI.TP_CURSO,
TI.COD_CURSO,
TI.NM_CURSO,
TI.TP_MATRICULA,
TI.COD_MODALIDADE_MATRICULA,
TI.COD_FILIAL,
TI.DS_NOME_FILIAL,
TI.CNPJ_FILIAL,
TI.END_FILIAL_LOGRADOURO,
TI.END_FILIAL_BAIRRO,
TI.END_FILIAL_CIDADE,
TI.END_FILIAL_UF,
TI.END_FILIAL_CEP,
TI.DS_MATRIZ,
TI.CNPJ_MATRIZ,
TI.END_COMPLETO_MATRIZ,
NULL,
NULL,
NULL,
NULL,
NULL,
TI.ST_CONTRATO,
TI.TP_MARCA_CONTRATO,
TI.COD_SERIE_ACADEMICA,
TI.VL_SALDO_CREDITO,
TI.DT_CADASTRO,
TI.SIS_ORIGEM,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
V_ST_PROCESSAMENTO,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON,
TI.NM_RESPONSAVEL,
TI.NO_CPFRESPONSAVEL,
TI.CNPJ_PRINCIPAL,
TI.DESC_PRINCIPAL,
TI.ID_CLIENTE_ORIGEM,
TI.ID_CONTRATO_ORIGEM,
TI.DS_ST_CONTRATO,
TI.ID_SERVICE_NOW,
TI.NM_FANTASIA_UNIDADE,
TI.BP_ALUNO_SAP,
TI.IBGE_UF,
TI.IBGE_MUNICIPIO,
TI.CD_CONTA_CONTRATO,
TI.CD_EMPRESA_SAP,
TI.CD_DIVISAO,
TI.CD_CENTRO_LUCRO
);

END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR GC_ACCOUNT
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_ATU_CONTRATO;

PROCEDURE SP_ATU_CONTRATO_POLITICAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

BEGIN
UPDATE GESTAOCARGAS.GC_ACCOUNT AC
SET POLITICA_PADRAO_S_EMPAC = NULL,
POLITICA_N1_S_EMPAC = NULL,
POLITICA_N2_S_EMPAC = NULL,
POLITICA_N3_S_EMPAC = NULL,
POLITICA_PADRAO_C_EMPAC = NULL,
POLITICA_N1_C_EMPAC = NULL,
POLITICA_N2_C_EMPAC = NULL,
POLITICA_N3_C_EMPAC = NULL
WHERE NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.POLICY_FILE_DATA PD,
GESTAOCARGAS.POLICY_FILE PF
WHERE PD.ID_ARQUIVO = PF.ID_ARQUIVO
AND PF.DT_PROCESSAMENTO =
(SELECT MAX(DT_PROCESSAMENTO) FROM GESTAOCARGAS.POLICY_FILE)
AND AC.ID_CONTRATO_ORIGEM = PD.ID_CONTRATO)
AND (POLITICA_N1_S_EMPAC IS NOT NULL OR
POLITICA_N2_S_EMPAC IS NOT NULL OR
POLITICA_N3_S_EMPAC IS NOT NULL OR
POLITICA_PADRAO_C_EMPAC IS NOT NULL OR
POLITICA_N1_C_EMPAC IS NOT NULL OR
POLITICA_N2_C_EMPAC IS NOT NULL OR
POLITICA_N3_C_EMPAC IS NOT NULL);

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao
SP_ATU_CONTRATO_POLITICAS ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_ATU_CONTRATO_POLITICAS;

PROCEDURE SP_ATU_ACERTO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;
BEGIN

MERGE INTO GESTAOCARGAS.ACERTO_OUT ACO


USING (SELECT ACS.*
FROM GESTAOCARGAS.ACERTO_STG ACS
WHERE ACS.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = ACS.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = ACS.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)) ACE
ON (ACO.ID_PARCELAMENTO = ACE.ID_PARCELAMENTO)
WHEN MATCHED THEN
UPDATE
SET ACO.SIS_ORIGEM = ACE.SIS_ORIGEM,
ACO.ID_CLIENTE = ACE.ID_CLIENTE,
ACO.ID_CLIENTE_ORIGEM = ACE.ID_CLIENTE_ORIGEM,
ACO.ID_CONTRATO = ACE.ID_CONTRATO,
ACO.ID_CONTRATO_ORIGEM = ACE.ID_CONTRATO_ORIGEM,
ACO.TP_PARCELAMENTO = ACE.TP_PARCELAMENTO,
ACO.QTDE_PARCELAS = ACE.QTDE_PARCELAS,
ACO.VL_TOTAL = ACE.VL_TOTAL,
ACO.VL_DIVIDA = ACE.VL_DIVIDA,
ACO.VL_PRINCIPAL = ACE.VL_PRINCIPAL,
ACO.VL_DESC_PRINCIPAL = ACE.VL_DESC_PRINCIPAL,
ACO.VL_MULTA = ACE.VL_MULTA,
ACO.VL_DESC_MULTA = ACE.VL_DESC_MULTA,
ACO.VL_JUROS_MORA = ACE.VL_JUROS_MORA,
ACO.VL_DESC_JUROS_MORA = ACE.VL_DESC_JUROS_MORA,
ACO.VL_JUROS_FINANC = ACE.VL_JUROS_FINANC,
ACO.VL_DESC_JUROS_FINANC = ACE.VL_DESC_JUROS_FINANC,
ACO.VL_CORRECAO_MONETARIA = ACE.VL_CORRECAO_MONETARIA,
ACO.VL_DESC_CORRECAO_MONETARIA = ACE.VL_DESC_CORRECAO_MONETARIA,
ACO.DT_CANCELAMENTO = ACE.DT_CANCELAMENTO,
ACO.ST_PARCELAMENTO = ACE.ST_PARCELAMENTO,
ACO.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
ACO.US_CRIACAO_PARCELAMENTO = ACE.US_CRIACAO_PARCELAMENTO,
ACO.DT_CRIACAO_PARCELAMENTO = ACE.DT_CRIACAO_PARCELAMENTO,
ACO.GRUPO_USUARIO = ACE.GRUPO_USUARIO,
ACO.AGENCIA_EXTERNA = ACE.AGENCIA_EXTERNA,
ACO.ID_PAGAMENTO_ENTRADA = ACE.ID_PAGAMENTO_ENTRADA,
ACO.DT_CRIACAO = ACE.DT_CRIACAO,
ACO.US_CRIACAO = ACE.US_CRIACAO,
ACO.DT_MODIFICACAO = ACE.DT_MODIFICACAO,
ACO.US_MODIFICACAO = V_USR_KROTON,
ACO.VL_TAXA_NEGOCIACAO = ACE.VL_TAXA_NEGOCIACAO,
ACO.VL_DESC_TAXA_NEGOCIACAO = ACE.VL_DESC_TAXA_NEGOCIACAO,
ACO.ST_PROMESSA = V_ST_PROCESSAMENTO,
ACO.ST_CANCELAMENTO = ACE.ST_CANCELAMENTO,
ACO.BP_ALUNO_SAP = ACE.BP_ALUNO_SAP,
ACO.CD_CONTA_CONTRATO = ACE.CD_CONTA_CONTRATO,
ACO.CD_EMPRESA_SAP = ACE.CD_EMPRESA_SAP,
ACO.CD_DIVISAO = ACE.CD_DIVISAO,
ACO.CD_CENTRO_LUCRO = ACE.CD_CENTRO_LUCRO,
ACO.CD_CURSO = ACE.CD_CURSO
WHERE ACO.ID_PARCELAMENTO = ACE.ID_PARCELAMENTO
WHEN NOT MATCHED THEN
INSERT
(ACO.SIS_ORIGEM,
ACO.ID_CLIENTE,
ACO.ID_CLIENTE_ORIGEM,
ACO.ID_CONTRATO,
ACO.ID_CONTRATO_ORIGEM,
ACO.ID_PARCELAMENTO,
ACO.TP_PARCELAMENTO,
ACO.QTDE_PARCELAS,
ACO.VL_TOTAL,
ACO.VL_DIVIDA,
ACO.VL_PRINCIPAL,
ACO.VL_DESC_PRINCIPAL,
ACO.VL_MULTA,
ACO.VL_DESC_MULTA,
ACO.VL_JUROS_MORA,
ACO.VL_DESC_JUROS_MORA,
ACO.VL_JUROS_FINANC,
ACO.VL_DESC_JUROS_FINANC,
ACO.VL_CORRECAO_MONETARIA,
ACO.VL_DESC_CORRECAO_MONETARIA,
ACO.DT_CANCELAMENTO,
ACO.ST_PARCELAMENTO,
ACO.ST_PROCESSAMENTO,
ACO.US_CRIACAO_PARCELAMENTO,
ACO.DT_CRIACAO_PARCELAMENTO,
ACO.GRUPO_USUARIO,
ACO.AGENCIA_EXTERNA,
ACO.ID_PAGAMENTO_ENTRADA,
ACO.DT_CRIACAO,
ACO.US_CRIACAO,
ACO.DT_MODIFICACAO,
ACO.US_MODIFICACAO,
ACO.CD_FILIAL,
ACO.VL_TAXA_NEGOCIACAO,
ACO.VL_DESC_TAXA_NEGOCIACAO,
ACO.ST_CANCELAMENTO,
ACO.BP_ALUNO_SAP,
ACO.CD_CONTA_CONTRATO,
ACO.CD_EMPRESA_SAP,
ACO.CD_DIVISAO,
ACO.CD_CENTRO_LUCRO,
ACO.CD_CURSO)
VALUES
(ACE.SIS_ORIGEM,
ACE.ID_CLIENTE,
ACE.ID_CLIENTE_ORIGEM,
ACE.ID_CONTRATO,
ACE.ID_CONTRATO_ORIGEM,
ACE.ID_PARCELAMENTO,
ACE.TP_PARCELAMENTO,
ACE.QTDE_PARCELAS,
ACE.VL_TOTAL,
ACE.VL_DIVIDA,
ACE.VL_PRINCIPAL,
ACE.VL_DESC_PRINCIPAL,
ACE.VL_MULTA,
ACE.VL_DESC_MULTA,
ACE.VL_JUROS_MORA,
ACE.VL_DESC_JUROS_MORA,
ACE.VL_JUROS_FINANC,
ACE.VL_DESC_JUROS_FINANC,
ACE.VL_CORRECAO_MONETARIA,
ACE.VL_DESC_CORRECAO_MONETARIA,
ACE.DT_CANCELAMENTO,
ACE.ST_PARCELAMENTO,
V_ST_PROCESSAMENTO,
ACE.US_CRIACAO_PARCELAMENTO,
ACE.DT_CRIACAO_PARCELAMENTO,
ACE.GRUPO_USUARIO,
ACE.AGENCIA_EXTERNA,
ACE.ID_PAGAMENTO_ENTRADA,
ACE.DT_CRIACAO,
V_USR_KROTON,
ACE.DT_MODIFICACAO,
V_USR_KROTON,
ACE.CD_FILIAL,
ACE.VL_TAXA_NEGOCIACAO,
ACE.VL_DESC_TAXA_NEGOCIACAO,
ACE.ST_CANCELAMENTO,
ACE.BP_ALUNO_SAP,
ACE.CD_CONTA_CONTRATO,
ACE.CD_EMPRESA_SAP,
ACE.CD_DIVISAO,
ACE.CD_CENTRO_LUCRO,
ACE.CD_CURSO);

UPDATE GESTAOCARGAS.PAGAMENTOS_OUT P
SET FL_DUPLICIDADE = 'S'
WHERE EXISTS (SELECT 1
FROM GESTAOCARGAS.ACERTO_STG A
WHERE UPPER(A.ST_PARCELAMENTO) = 'CANCELLED'
AND P.ID_PARCELAMENTO = A.ID_PARCELAMENTO
AND A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO)
AND P.ST_PROCESSAMENTO = 1
AND P.NO_PARCELA = 1 -- DEAG-11426 - Comentado pois todo pagamento deve
descer para os acadêmicos, cancelado ou não
AND P.TP_PAGAMENTO != 'Back Office';

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR ACERTO_OUT
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_ACERTO;

PROCEDURE SP_ATU_NOVAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;
BEGIN

MERGE INTO GESTAOCARGAS.NOVAS_OUT NOO


USING (SELECT NOS.*
FROM GESTAOCARGAS.NOVAS_STG NOS
WHERE NOS.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = NOS.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = NOS.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)) NOV
ON (NOO.ID_PARCELAMENTO = NOV.ID_PARCELAMENTO
AND NOO.ID_PARCELA = NOV.ID_PARCELA)
WHEN MATCHED THEN
UPDATE
SET NOO.SIS_ORIGEM = NOV.SIS_ORIGEM,
NOO.ID_CLIENTE = NOV.ID_CLIENTE,
NOO.ID_CLIENTE_ORIGEM = NOV.ID_CLIENTE_ORIGEM,
NOO.ID_CONTRATO = NOV.ID_CONTRATO,
NOO.ID_CONTRATO_ORIGEM = NOV.ID_CONTRATO_ORIGEM,
NOO.ID_PAGAMENTO_ENTRADA = NOV.ID_PAGAMENTO_ENTRADA,
NOO.DT_VENCIMENTO = NOV.DT_VENCIMENTO,
NOO.VL_PARCELA = NOV.VL_PARCELA,
NOO.VL_PRINCIPAL = NOV.VL_PRINCIPAL,
NOO.VL_DESC_PRINCIPAL = NOV.VL_DESC_PRINCIPAL,
NOO.VL_MULTA = NOV.VL_MULTA,
NOO.VL_DESC_MULTA = NOV.VL_DESC_MULTA,
NOO.VL_JUROS_MORA = NOV.VL_JUROS_MORA,
NOO.VL_DESC_JUROS_MORA = NOV.VL_DESC_JUROS_MORA,
NOO.VL_JUROS_FINANC = NOV.VL_JUROS_FINANC,
NOO.VL_DESC_JUROS_FINANC = NOV.VL_DESC_JUROS_FINANC,
NOO.VL_CORRECAO_MONETARIA = NOV.VL_CORRECAO_MONETARIA,
NOO.VL_DESC_CORRECAO_MONETARIA = NOV.VL_DESC_CORRECAO_MONETARIA,
NOO.VL_TAXA_NEGOCIACAO = NOV.VL_TAXA_NEGOCIACAO,
NOO.VL_DESC_TAXA_NEGOCIACAO = NOV.VL_DESC_TAXA_NEGOCIACAO,
NOO.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
NOO.DT_CRIACAO = NOV.DT_CRIACAO,
NOO.US_CRIACAO = V_USR_KROTON,
NOO.DT_MODIFICACAO = NOV.DT_MODIFICACAO,
NOO.US_MODIFICACAO = V_USR_KROTON
WHERE NOO.ID_PARCELAMENTO = NOV.ID_PARCELAMENTO
AND NOO.ID_PARCELA = NOV.ID_PARCELA
WHEN NOT MATCHED THEN
INSERT
(NOO.SIS_ORIGEM,
NOO.ID_CLIENTE,
NOO.ID_CLIENTE_ORIGEM,
NOO.ID_CONTRATO,
NOO.ID_CONTRATO_ORIGEM,
NOO.ID_PARCELAMENTO,
NOO.ID_PARCELA,
NOO.ID_PAGAMENTO_ENTRADA,
NOO.DT_VENCIMENTO,
NOO.VL_PARCELA,
NOO.VL_PRINCIPAL,
NOO.VL_DESC_PRINCIPAL,
NOO.VL_MULTA,
NOO.VL_DESC_MULTA,
NOO.VL_JUROS_MORA,
NOO.VL_DESC_JUROS_MORA,
NOO.VL_JUROS_FINANC,
NOO.VL_DESC_JUROS_FINANC,
NOO.VL_CORRECAO_MONETARIA,
NOO.VL_DESC_CORRECAO_MONETARIA,
NOO.VL_TAXA_NEGOCIACAO,
NOO.VL_DESC_TAXA_NEGOCIACAO,
NOO.ST_PROCESSAMENTO,
NOO.DT_CRIACAO,
NOO.US_CRIACAO,
NOO.DT_MODIFICACAO,
NOO.US_MODIFICACAO)
VALUES
(NOV.SIS_ORIGEM,
NOV.ID_CLIENTE,
NOV.ID_CLIENTE_ORIGEM,
NOV.ID_CONTRATO,
NOV.ID_CONTRATO_ORIGEM,
NOV.ID_PARCELAMENTO,
NOV.ID_PARCELA,
NOV.ID_PAGAMENTO_ENTRADA,
NOV.DT_VENCIMENTO,
NOV.VL_PARCELA,
NOV.VL_PRINCIPAL,
NOV.VL_DESC_PRINCIPAL,
NOV.VL_MULTA,
NOV.VL_DESC_MULTA,
NOV.VL_JUROS_MORA,
NOV.VL_DESC_JUROS_MORA,
NOV.VL_JUROS_FINANC,
NOV.VL_DESC_JUROS_FINANC,
NOV.VL_CORRECAO_MONETARIA,
NOV.VL_DESC_CORRECAO_MONETARIA,
NOV.VL_TAXA_NEGOCIACAO,
NOV.VL_DESC_TAXA_NEGOCIACAO,
V_ST_PROCESSAMENTO,
NOV.DT_CRIACAO,
V_USR_KROTON,
NOV.DT_MODIFICACAO,
V_USR_KROTON);
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR NOVAS_OUT
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_NOVAS;

PROCEDURE SP_ATU_ORIGINAIS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS
V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;
BEGIN

MERGE INTO GESTAOCARGAS.ORIGINAIS_OUT ORO


USING (SELECT ORS.*
FROM GESTAOCARGAS.ORIGINAIS_STG ORS
WHERE ORS.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = ORS.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = ORS.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)) ORV
ON (ORO.ID_PARCELAMENTO = ORV.ID_PARCELAMENTO
AND ORO.ID_TITULO = ORV.ID_TITULO)
WHEN MATCHED THEN
UPDATE
SET ORO.SIS_ORIGEM = ORV.SIS_ORIGEM,
ORO.ID_CLIENTE = ORV.ID_CLIENTE,
ORO.ID_CLIENTE_ORIGEM = ORV.ID_CLIENTE_ORIGEM,
ORO.ID_CONTRATO = ORV.ID_CONTRATO,
ORO.ID_CONTRATO_ORIGEM = ORV.ID_CONTRATO_ORIGEM,
ORO.NU_TITULO = ORV.NU_TITULO,
ORO.TP_NATUREZA_TITULO = ORV.TP_NATUREZA_TITULO,
ORO.DS_NATUREZA_TITULO = ORV.DS_NATUREZA_TITULO,
ORO.NR_MES_COMPETENCIA = ORV.NR_MES_COMPETENCIA,
ORO.NR_ANO_COMPETENCIA = ORV.NR_ANO_COMPETENCIA,
ORO.VL_TITULO = ORV.VL_TITULO,
ORO.VL_PRINCIPAL = ORV.VL_PRINCIPAL,
ORO.VL_DESC_PRINCIPAL = ORV.VL_DESC_PRINCIPAL,
ORO.VL_MULTA = ORV.VL_MULTA,
ORO.VL_DESC_MULTA = ORV.VL_DESC_MULTA,
ORO.VL_JUROS_MORA = ORV.VL_JUROS_MORA,
ORO.VL_DESC_JUROS_MORA = ORV.VL_DESC_JUROS_MORA,
ORO.VL_CORRECAO_MONETARIA = ORV.VL_CORRECAO_MONETARIA,
ORO.VL_DESC_CORRECAO_MONETARIA = ORV.VL_DESC_CORRECAO_MONETARIA,
ORO.ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
ORO.DT_CRIACAO = ORV.DT_CRIACAO,
ORO.US_CRIACAO = ORV.US_CRIACAO,
ORO.DT_MODIFICACAO = ORV.DT_MODIFICACAO,
ORO.US_MODIFICACAO = V_USR_KROTON,
ORO.VL_DESC_PONTUALIDADE = ORV.VL_DESC_PONTUALIDADE
WHERE ORO.ID_PARCELAMENTO = ORV.ID_PARCELAMENTO
AND ORO.ID_TITULO = ORV.ID_TITULO
WHEN NOT MATCHED THEN
INSERT
(ORO.SIS_ORIGEM,
ORO.ID_CLIENTE,
ORO.ID_CLIENTE_ORIGEM,
ORO.ID_CONTRATO,
ORO.ID_CONTRATO_ORIGEM,
ORO.ID_PARCELAMENTO,
ORO.ID_TITULO,
ORO.NU_TITULO,
ORO.TP_NATUREZA_TITULO,
ORO.DS_NATUREZA_TITULO,
ORO.NR_MES_COMPETENCIA,
ORO.NR_ANO_COMPETENCIA,
ORO.VL_TITULO,
ORO.VL_PRINCIPAL,
ORO.VL_DESC_PRINCIPAL,
ORO.VL_MULTA,
ORO.VL_DESC_MULTA,
ORO.VL_JUROS_MORA,
ORO.VL_DESC_JUROS_MORA,
ORO.VL_CORRECAO_MONETARIA,
ORO.VL_DESC_CORRECAO_MONETARIA,
ORO.ST_PROCESSAMENTO,
ORO.DT_CRIACAO,
ORO.US_CRIACAO,
ORO.DT_MODIFICACAO,
ORO.US_MODIFICACAO,
ORO.VL_DESC_PONTUALIDADE)
VALUES
(ORV.SIS_ORIGEM,
ORV.ID_CLIENTE,
ORV.ID_CLIENTE_ORIGEM,
ORV.ID_CONTRATO,
ORV.ID_CONTRATO_ORIGEM,
ORV.ID_PARCELAMENTO,
ORV.ID_TITULO,
ORV.NU_TITULO,
ORV.TP_NATUREZA_TITULO,
ORV.DS_NATUREZA_TITULO,
ORV.NR_MES_COMPETENCIA,
ORV.NR_ANO_COMPETENCIA,
ORV.VL_TITULO,
ORV.VL_PRINCIPAL,
ORV.VL_DESC_PRINCIPAL,
ORV.VL_MULTA,
ORV.VL_DESC_MULTA,
ORV.VL_JUROS_MORA,
ORV.VL_DESC_JUROS_MORA,
ORV.VL_CORRECAO_MONETARIA,
ORV.VL_DESC_CORRECAO_MONETARIA,
V_ST_PROCESSAMENTO,
ORV.DT_CRIACAO,
V_USR_KROTON,
ORV.DT_MODIFICACAO,
V_USR_KROTON,
ORV.VL_DESC_PONTUALIDADE);
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
ORIGINAIS_OUT ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_ORIGINAIS;

PROCEDURE SP_ATU_PERMUTA_CLIENTE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

CURSOR C1 IS
SELECT CL.ID_CLIENTE_ORIGEM,
CL.ST_PROCESSAMENTO,
CL.DT_MODIFICACAO,
CL.US_MODIFICACAO,
CL.ID_CLIENTE,
P.ID_CLIENTE_NOVO
FROM GESTAOCARGAS.GC_CUSTOMER CL
,GESTAOCARGAS.PERMUTA_INT P
WHERE CL.ID_CLIENTE_ORIGEM = TO_CHAR(P.ID_CLIENTE_ANTIGO)
AND P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND P.ST_PROCESSAMENTO = 2
AND CL.ID_CLIENTE LIKE 'OLIMPO%'
AND P.DATA_PERMUTA =
(SELECT MAX(DATA_PERMUTA)
FROM GESTAOCARGAS.PERMUTA_INT P1
WHERE P1.ID_CLIENTE_ANTIGO = P.ID_CLIENTE_ANTIGO
AND P1.ID_PROCESSAMENTO = P.ID_PROCESSAMENTO)
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = P.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = P.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)
ORDER BY P.DATA_PERMUTA;

Reg_Cli C1%Rowtype;
BEGIN
OPEN C1;
LOOP
FETCH C1
INTO Reg_Cli;
EXIT WHEN
C1%NotFound;
UPDATE GESTAOCARGAS.GC_CUSTOMER
SET ID_CLIENTE_ORIGEM = TO_CHAR(Reg_Cli.ID_CLIENTE_NOVO),
ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
DT_MODIFICACAO = SYSDATE,
US_MODIFICACAO = V_USR_KROTON
WHERE ID_CLIENTE = Reg_Cli.ID_CLIENTE;
COMMIT;
END LOOP;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR GC_CONTACT ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_PERMUTA_CLIENTE;

PROCEDURE SP_ATU_PERMUTA_CONTRATO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

CURSOR C1 IS
SELECT PI.ID_CLIENTE_ANTIGO,
PI.ID_CLIENTE_NOVO,
PI.CD_CURSO_NOVO,
PI.CD_FILIAL_NOVO,
PI.SIS_ORIGEM,
A.ID_CLIENTE,
A.ID_CONTRATO,
PI.ID_REGISTRO
FROM GESTAOCARGAS.PERMUTA_INT PI,GESTAOCARGAS.GC_ACCOUNT A
WHERE TO_CHAR(PI.ID_CLIENTE_ANTIGO) = A.ID_CLIENTE_ORIGEM
AND LPAD(PI.ID_CLIENTE_ANTIGO,10,'0')||LPAD(PI.CD_CURSO_ANTIGO,6,'0') =
A.ID_CONTRATO_ORIGEM
AND PI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND A.ID_CLIENTE LIKE 'OLIMPO%'
AND PI.DATA_PERMUTA =
(SELECT MAX(DATA_PERMUTA)
FROM GESTAOCARGAS.PERMUTA_INT P1
WHERE P1.ID_CLIENTE_ANTIGO = PI.ID_CLIENTE_ANTIGO
AND P1.ID_PROCESSAMENTO = PI.ID_PROCESSAMENTO)
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = PI.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = PI.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)
ORDER BY PI.DATA_PERMUTA;
Reg_Cli C1%Rowtype;
BEGIN
OPEN C1;
LOOP
FETCH C1
INTO Reg_Cli;
EXIT WHEN
C1%NotFound;

UPDATE GESTAOCARGAS.GC_ACCOUNT
SET ID_CLIENTE_ORIGEM = TO_CHAR(Reg_Cli.ID_CLIENTE_NOVO),
ID_CONTRATO_ORIGEM = LPAD(Reg_Cli.ID_CLIENTE_NOVO, 10,0)||
lPAD(Reg_Cli.CD_CURSO_NOVO,6,0),
CD_FILIAL = Reg_Cli.CD_FILIAL_NOVO,
CD_CURSO = Reg_Cli.CD_CURSO_NOVO,
ID_SERVICE_NOW = Reg_Cli.SIS_ORIGEM || '-' ||
Reg_Cli.CD_FILIAL_NOVO || '-' || Reg_Cli.ID_CLIENTE_NOVO || '-' ||
Reg_Cli.CD_CURSO_NOVO,
ST_PROCESSAMENTO = V_ST_PROCESSAMENTO,
DT_MODIFICACAO = SYSDATE,
US_MODIFICACAO = V_USR_KROTON
WHERE ID_CLIENTE = Reg_Cli.ID_CLIENTE
AND ID_CONTRATO = Reg_Cli.ID_CONTRATO;

END LOOP;
COMMIT;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR GC_CONTACT ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_PERMUTA_CONTRATO;

PROCEDURE SP_ATU_PERMUTA_OUT(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

CURSOR C1 IS
SELECT PI.ID_CLIENTE_ANTIGO,
PI.ID_CLIENTE_NOVO,
PI.CD_CURSO_NOVO,
PI.CD_FILIAL_NOVO,
PI.SIS_ORIGEM,
A.ID_CLIENTE,
A.ID_CONTRATO,
PI.ID_REGISTRO
FROM GESTAOCARGAS.PERMUTA_INT PI
INNER JOIN GESTAOCARGAS.ACERTO_OUT A ON A.ID_CLIENTE_ORIGEM =
TO_CHAR(PI.ID_CLIENTE_ANTIGO)
AND LPAD(PI.ID_CLIENTE_ANTIGO,10,'0')||LPAD(PI.CD_CURSO_ANTIGO,6,'0') =
A.ID_CONTRATO_ORIGEM
INNER JOIN GESTAOCARGAS.NOVAS_OUT N ON N.ID_CLIENTE_ORIGEM =
TO_CHAR(PI.ID_CLIENTE_ANTIGO)
AND LPAD(PI.ID_CLIENTE_ANTIGO,10,'0')||LPAD(PI.CD_CURSO_ANTIGO,6,'0') =
N.ID_CONTRATO_ORIGEM
INNER JOIN GESTAOCARGAS.ORIGINAIS_OUT O ON O.ID_CLIENTE_ORIGEM =
TO_CHAR(PI.ID_CLIENTE_ANTIGO)
AND LPAD(PI.ID_CLIENTE_ANTIGO,10,'0')||LPAD(PI.CD_CURSO_ANTIGO,6,'0') =
O.ID_CONTRATO_ORIGEM
WHERE TO_CHAR(PI.ID_CLIENTE_ANTIGO) = A.ID_CLIENTE_ORIGEM
AND PI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND PI.DATA_PERMUTA =
(SELECT MAX(DATA_PERMUTA)
FROM GESTAOCARGAS.PERMUTA_INT P1
WHERE P1.ID_CLIENTE_ANTIGO = PI.ID_CLIENTE_ANTIGO
AND P1.ID_PROCESSAMENTO = PI.ID_PROCESSAMENTO)
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LP
WHERE LP.ID_PROCESSAMENTO = PI.ID_PROCESSAMENTO
AND LP.ID_REGISTRO = PI.ID_REGISTRO
AND LP.CRITICIDADE = ERRO_VALIDACAO)
ORDER BY PI.DATA_PERMUTA;
Reg_Cli C1%Rowtype;
BEGIN
OPEN C1;
LOOP
FETCH C1
INTO Reg_Cli;
EXIT WHEN
C1%NotFound;

UPDATE GESTAOCARGAS.ACERTO_OUT
SET ID_CLIENTE_ORIGEM = TO_CHAR(Reg_Cli.ID_CLIENTE_NOVO),
ID_CONTRATO_ORIGEM = LPAD(Reg_Cli.ID_CLIENTE_NOVO, 10,0)||
lPAD(Reg_Cli.CD_CURSO_NOVO,6,0),
CD_FILIAL = Reg_Cli.CD_FILIAL_NOVO,
DT_MODIFICACAO = SYSDATE,
US_MODIFICACAO = V_USR_KROTON
WHERE ID_CLIENTE = Reg_Cli.ID_CLIENTE
AND ID_CONTRATO = Reg_Cli.ID_CONTRATO;

UPDATE GESTAOCARGAS.NOVAS_OUT
SET ID_CLIENTE_ORIGEM = TO_CHAR(Reg_Cli.ID_CLIENTE_NOVO),
ID_CONTRATO_ORIGEM = LPAD(Reg_Cli.ID_CLIENTE_NOVO, 10,0)||
lPAD(Reg_Cli.CD_CURSO_NOVO,6,0),
DT_MODIFICACAO = SYSDATE,
US_MODIFICACAO = V_USR_KROTON
WHERE ID_CLIENTE = Reg_Cli.ID_CLIENTE
AND ID_CONTRATO = Reg_Cli.ID_CONTRATO;

UPDATE GESTAOCARGAS.ORIGINAIS_OUT
SET ID_CLIENTE_ORIGEM = TO_CHAR(Reg_Cli.ID_CLIENTE_NOVO),
ID_CONTRATO_ORIGEM = LPAD(Reg_Cli.ID_CLIENTE_NOVO, 10,0)||
lPAD(Reg_Cli.CD_CURSO_NOVO,6,0),
DT_MODIFICACAO = SYSDATE,
US_MODIFICACAO = V_USR_KROTON
WHERE ID_CLIENTE = Reg_Cli.ID_CLIENTE
AND ID_CONTRATO = Reg_Cli.ID_CONTRATO;

UPDATE GESTAOCARGAS.PERMUTA_INT
SET ST_PROCESSAMENTO = 3
WHERE ID_REGISTRO = Reg_Cli.ID_REGISTRO;

END LOOP;
COMMIT;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR GC_CONTACT ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_ATU_PERMUTA_OUT;

PROCEDURE SP_ATU_PAGAMENTO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

BEGIN
INSERT INTO GESTAOCARGAS.PAGAMENTOS_OUT
(sis_origem,
id_parcelamento,
no_parcela,
tp_pagamento,
t_01_cd_banco_compensa,
t_02_no_lote_retorno,
t_03_tp_registro_retorno,
t_04_nr_seq_lote_retorno,
t_05_cd_segmento_detalhe,
t_06_ds_reservado,
t_07_cd_movimento,
t_08_cd_ag_benefiriciario,
t_09_cd_digito_ag_beneficiario,
t_10_nr_conta_corrente,
t_11_cd_digito_conta,
t_12_ds_reservado,
t_13_nr_id_titulo_bnco,
t_14_cd_carteira,
t_15_nr_documento_cobranca,
t_16_dt_vencimeno,
t_17_vl_nominal_titulo,
t_18_nr_banco_cobradora,
t_19_cod_ag_cobradora,
t_20_cd_digito_ag_cedente,
t_21_nr_titulo_empresa,
t_22_cd_moeda,
t_23_tp_inscricao_pagador,
t_24_nr_inscricao_pagador,
t_25_nm_pagador,
t_26_cd_conta_cobranca,
t_27_vl_tarifa_custas,
t_28_id_operacao,
t_29_ds_reservado,
u_01_cd_banco_compensacao,
u_02_lt_servico,
u_03_tp_registtro_servico,
u_04_nr_seq_lote,
u_05_cd_segmento_detalhe,
u_06_ds_reservado,
u_07_cd_movimento_ocorrencia,
u_08_vl_juro_multa_encargo,
u_09_vl_desconto_concediro,
u_10_vl_abatido,
u_11_vl_iof_recolhido,
u_12_vl_pago_pagador,
u_13_vl_liquito_creditado,
u_14_vl_outras_despesas,
u_15_vl_outros_creditos,
u_16_dt_ocorrencia,
u_17_dt_efetivacao_credito,
u_18_cd_ocorrencia_pagador,
u_19_dt_ocorrencia_pagador,
u_20_vl_ocorrencia_pagador,
u_21_ds_complemento_pagador,
u_22_cd_banco_compensacao,
u_23_ds_reservado,
st_processamento,
dt_criacao,
us_criacao,
dt_modificacao,
us_modificacao,
id_vendor,
vl_cartao_1,
nm_adquerente_1,
nr_tid_1,
nr_nsu_1,
nr_authcode_1,
vl_cartao_2,
nm_adquerente_2,
nr_tid_2,
nr_nsu_2,
nr_authcode_2,
QT_parcelas,
cd_order_reference,
fl_duplicidade,
ds_channel_id ,
ds_channel_name,
ds_store_id,
NM_ARQUIVO_ORIGEM,
QR_CODE,
QR_CODE_URL,
VENDOR_TRANSACTION_ID,
TRANSACTION_ID)
SELECT sis_origem,
id_parcelamento,
no_parcela,
tp_pagamento,
t_01_cd_banco_compensa,
t_02_no_lote_retorno,
t_03_tp_registro_retorno,
t_04_nr_seq_lote_retorno,
t_05_cd_segmento_detalhe,
t_06_ds_reservado,
t_07_cd_movimento,
t_08_cd_ag_benefiriciario,
t_09_cd_digito_ag_beneficiario,
t_10_nr_conta_corrente,
t_11_cd_digito_conta,
t_12_ds_reservado,
t_13_nr_id_titulo_bnco,
t_14_cd_carteira,
t_15_nr_documento_cobranca,
t_16_dt_vencimeno,
t_17_vl_nominal_titulo,
t_18_nr_banco_cobradora,
t_19_cod_ag_cobradora,
t_20_cd_digito_ag_cedente,
t_21_nr_titulo_empresa,
t_22_cd_moeda,
t_23_tp_inscricao_pagador,
t_24_nr_inscricao_pagador,
t_25_nm_pagador,
t_26_cd_conta_cobranca,
t_27_vl_tarifa_custas,
t_28_id_operacao,
t_29_ds_reservado,
u_01_cd_banco_compensacao,
u_02_lt_servico,
u_03_tp_registtro_servico,
u_04_nr_seq_lote,
u_05_cd_segmento_detalhe,
u_06_ds_reservado,
u_07_cd_movimento_ocorrencia,
u_08_vl_juro_multa_encargo,
u_09_vl_desconto_concediro,
u_10_vl_abatido,
u_11_vl_iof_recolhido,
u_12_vl_pago_pagador,
u_13_vl_liquito_creditado,
u_14_vl_outras_despesas,
u_15_vl_outros_creditos,
u_16_dt_ocorrencia,
u_17_dt_efetivacao_credito,
u_18_cd_ocorrencia_pagador,
u_19_dt_ocorrencia_pagador,
u_20_vl_ocorrencia_pagador,
u_21_ds_complemento_pagador,
u_22_cd_banco_compensacao,
u_23_ds_reservado,
st_processamento,
dt_criacao,
us_criacao,
dt_modificacao,
us_modificacao,
id_vendor,
vl_cartao_1,
nm_adquerente_1,
nr_tid_1,
nr_nsu_1,
nr_authcode_1,
vl_cartao_2,
nm_adquerente_2,
nr_tid_2,
nr_nsu_2,
nr_authcode_2,
QT_parcelas,
cd_order_reference,
fl_duplicidade,
ds_channel_id ,
ds_channel_name,
ds_store_id,
NM_ARQUIVO_ORIGEM,
QR_CODE,
QR_CODE_URL,
VENDOR_TRANSACTION_ID,
PG1.TRANSACTION_ID
FROM GESTAOCARGAS.PAGAMENTOS_STG PG1
WHERE PG1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = PG1.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = PG1.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO);
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
PAGAMENTOS_OUT ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_ATU_PAGAMENTO;

PROCEDURE SP_ATU_PAGAMENTO_COLCHAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) IS

V_OK VARCHAR(10);
V_RETORNO VARCHAR(1010);
V_IDLOG NUMBER;

BEGIN

INSERT INTO GESTAOCARGAS.PAGAMENTOS_OUT PT


(PT.sis_origem,
PT.id_parcelamento,
PT.no_parcela,
PT.tp_pagamento,
PT.t_01_cd_banco_compensa,
PT.t_02_no_lote_retorno,
PT.t_03_tp_registro_retorno,
PT.t_04_nr_seq_lote_retorno,
PT.t_05_cd_segmento_detalhe,
PT.t_06_ds_reservado,
PT.t_07_cd_movimento,
PT.t_08_cd_ag_benefiriciario,
PT.t_09_cd_digito_ag_beneficiario,
PT.t_10_nr_conta_corrente,
PT.t_11_cd_digito_conta,
PT.t_12_ds_reservado,
PT.t_13_nr_id_titulo_bnco,
PT.t_14_cd_carteira,
PT.t_15_nr_documento_cobranca,
PT.t_16_dt_vencimeno,
PT.t_17_vl_nominal_titulo,
PT.t_18_nr_banco_cobradora,
PT.t_19_cod_ag_cobradora,
PT.t_20_cd_digito_ag_cedente,
PT.t_21_nr_titulo_empresa,
PT.t_22_cd_moeda,
PT.t_23_tp_inscricao_pagador,
PT.t_24_nr_inscricao_pagador,
PT.t_25_nm_pagador,
PT.t_26_cd_conta_cobranca,
PT.t_27_vl_tarifa_custas,
PT.t_28_id_operacao,
PT.t_29_ds_reservado,
PT.u_01_cd_banco_compensacao,
PT.u_02_lt_servico,
PT.u_03_tp_registtro_servico,
PT.u_04_nr_seq_lote,
PT.u_05_cd_segmento_detalhe,
PT.u_06_ds_reservado,
PT.u_07_cd_movimento_ocorrencia,
PT.u_08_vl_juro_multa_encargo,
PT.u_09_vl_desconto_concediro,
PT.u_10_vl_abatido,
PT.u_11_vl_iof_recolhido,
PT.u_12_vl_pago_pagador,
PT.u_13_vl_liquito_creditado,
PT.u_14_vl_outras_despesas,
PT.u_15_vl_outros_creditos,
PT.u_16_dt_ocorrencia,
PT.u_17_dt_efetivacao_credito,
PT.u_18_cd_ocorrencia_pagador,
PT.u_19_dt_ocorrencia_pagador,
PT.u_20_vl_ocorrencia_pagador,
PT.u_21_ds_complemento_pagador,
PT.u_22_cd_banco_compensacao,
PT.u_23_ds_reservado,
PT.st_processamento,
PT.dt_criacao,
PT.us_criacao,
PT.dt_modificacao,
PT.us_modificacao,
PT.id_vendor,
PT.vl_cartao_1,
PT.nm_adquerente_1,
PT.nr_tid_1,
PT.nr_nsu_1,
PT.nr_authcode_1,
PT.vl_cartao_2,
PT.nm_adquerente_2,
PT.nr_tid_2,
PT.nr_nsu_2,
PT.nr_authcode_2,
PT.QT_parcelas,
PT.cd_order_reference,
PT.fl_duplicidade,
PT.ds_channel_id,
PT.ds_channel_name,
PT.ds_store_id,
PT.TRANSACTION_ID)
SELECT P.sis_origem,
P.id_parcelamento,
MC.ADIC_NUMERO_PARC,
P.tp_pagamento,
P.t_01_cd_banco_compensa,
P.t_02_no_lote_retorno,
P.t_03_tp_registro_retorno,
P.t_04_nr_seq_lote_retorno,
P.t_05_cd_segmento_detalhe,
P.t_06_ds_reservado,
P.t_07_cd_movimento,
P.t_08_cd_ag_benefiriciario,
P.t_09_cd_digito_ag_beneficiario,
P.t_10_nr_conta_corrente,
P.t_11_cd_digito_conta,
P.t_12_ds_reservado,
P.t_13_nr_id_titulo_bnco,
P.t_14_cd_carteira,
P.t_15_nr_documento_cobranca,
P.t_16_dt_vencimeno,
MC.adic_vr_parc,
P.t_18_nr_banco_cobradora,
P.t_19_cod_ag_cobradora,
P.t_20_cd_digito_ag_cedente,
P.t_21_nr_titulo_empresa,
P.t_22_cd_moeda,
P.t_23_tp_inscricao_pagador,
P.t_24_nr_inscricao_pagador,
P.t_25_nm_pagador,
P.t_26_cd_conta_cobranca,
P.t_27_vl_tarifa_custas,
P.t_28_id_operacao,
P.t_29_ds_reservado,
P.u_01_cd_banco_compensacao,
P.u_02_lt_servico,
P.u_03_tp_registtro_servico,
P.u_04_nr_seq_lote,
P.u_05_cd_segmento_detalhe,
P.u_06_ds_reservado,
P.u_07_cd_movimento_ocorrencia,
P.u_08_vl_juro_multa_encargo,
P.u_09_vl_desconto_concediro,
P.u_10_vl_abatido,
P.u_11_vl_iof_recolhido,
MC.adic_vr_parc,
MC.adic_vr_parc,
P.u_14_vl_outras_despesas,
P.u_15_vl_outros_creditos,
P.u_16_dt_ocorrencia,
P.u_17_dt_efetivacao_credito,
P.u_18_cd_ocorrencia_pagador,
P.u_19_dt_ocorrencia_pagador,
P.u_20_vl_ocorrencia_pagador,
P.u_21_ds_complemento_pagador,
P.u_22_cd_banco_compensacao,
P.u_23_ds_reservado,
V_ST_PROCESSAMENTO,
P.dt_criacao,
P.us_criacao,
P.dt_modificacao,
P.us_modificacao,
id_vendor,
P.vl_cartao_1,
P.nm_adquerente_1,
P.nr_tid_1,
P.nr_nsu_1,
P.nr_authcode_1,
P.vl_cartao_2,
P.nm_adquerente_2,
P.nr_tid_2,
P.nr_nsu_2,
P.nr_authcode_2,
P.QT_parcelas,
P.cd_order_reference,
P.fl_duplicidade,
P.ds_channel_id,
P.ds_channel_name,
P.ds_store_id,
P.TRANSACTION_ID
FROM GESTAOCARGAS.PAGAMENTOS_STG P
INNER JOIN GESTAOCARGAS.GC_MIGRA_COLCHAO MC
ON P.ID_PARCELAMENTO = MC.LAY_ID_NUMERO_ACORDO
AND P.NO_PARCELA + 1 = MC.ADIC_NUMERO_PARC
AND MC.PARCELA_DESCONTO = 'Y'
WHERE P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = P.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = P.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO);
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
PAGAMENTOS_OUT - SP_ATU_PAGAMENTO_COLCHAO ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_ATU_PAGAMENTO_COLCHAO;

PROCEDURE SP_ATU_PAGAMENTOS_CREDITO(P_ID_PROCESSAMENTO IN
GESTAOCARGAS.ACERTO_STG.ID_PROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS

V_CURSOR_INT TCURSOR;
V_IDLOG NUMBER;
V_ID_PROCESSAMENTO INT;
V_RETORNO VARCHAR2(100);
V_OK VARCHAR2(1);

V_LIST_DADOS_PGTO LIST_DADOS_PGTO := LIST_DADOS_PGTO();

BEGIN
BEGIN

V_CURSOR_INT := GET_PAGAMENTOS_CREDITO(P_ID_PROCESSAMENTO =>


P_ID_PROCESSAMENTO);

LOOP
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LIST_DADOS_PGTO LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LIST_DADOS_PGTO.COUNT = 0;

INSERIR_PAGAMENTOS_CREDITO(P_LISTA_PAGAMENTOS => V_LIST_DADOS_PGTO);

END LOOP;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA GERAÇÃO DE
PAGAMENTO POR CRÉDITO: ' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END;
END SP_ATU_PAGAMENTOS_CREDITO;

FUNCTION RET_IDPROCESSAMENTO(P_NMSISTEMA IN
GESTAOCARGAS.SISTEMAORIGEM.NMSISTEMA%TYPE,
P_CDTIPOINFORMACAO IN
GESTAOCARGAS.TIPOINFORMACAO.CDTIPOINFORMACAO%TYPE,
P_NMPROCESSO IN
GESTAOCARGAS.PROCESSO.NMPROCESSO%TYPE)
RETURN NUMBER IS
v_idprocessamento GESTAOCARGAS.PROCESSO.IDPROCESSO%type;
BEGIN
SELECT P.IDPROCESSO
INTO v_idprocessamento
FROM GESTAOCARGAS.SISTEMAORIGEM SO
INNER JOIN GESTAOCARGAS.SISTEMATIPOINFORMACAO STI
ON STI.IDSISTEMA = SO.IDSISTEMA
INNER JOIN GESTAOCARGAS.TIPOINFORMACAO TI
ON TI.IDTIPOINFORMACAO = STI.IDTIPOINFORMACAO
INNER JOIN GESTAOCARGAS.PROCESSOREGRASISTEMA PRS
ON PRS.IDSISTEMA = SO.IDSISTEMA
INNER JOIN GESTAOCARGAS.PROCESSO P
ON P.IDPROCESSO = PRS.IDPROCESSO
INNER JOIN GESTAOCARGAS.REGRA R
ON R.IDREGRA = PRS.IDREGRA
AND R.IDTIPOINFORMACAO = TI.IDTIPOINFORMACAO
WHERE SO.NMSISTEMA = P_NMSISTEMA
AND TI.CDTIPOINFORMACAO = P_CDTIPOINFORMACAO
AND P.NMPROCESSO = P_NMPROCESSO
AND SO.IC_ATIVO = 'S'
AND TI.IC_ATIVO = 'S'
AND PRS.IC_ATIVO = 'S'
AND P.IC_ATIVO = 'S'
AND R.IC_ATIVO = 'S';
return v_idprocessamento;
exception
when others then
return 0;
END RET_IDPROCESSAMENTO;

PROCEDURE SP_INTEGRA_SISTEMA(P_CDSISTEMA IN VARCHAR2,


P_CD_TIPOINFORMACAO IN VARCHAR2,
P_DTINTEGRACAO IN DATE,
P_IDPROCESSAMENTO OUT NUMBER) IS
v_idsistema number;
v_idtipoinformacao number;
begin
select a.idsistema, c.idtipoinformacao
into v_idsistema, v_idtipoinformacao
from GESTAOCARGAS.SISTEMAORIGEM A
inner join GESTAOCARGAS.sistematipoinformacao b
on (b.idsistema = a.idsistema)
inner join GESTAOCARGAS.Tipoinformacao c
on (c.idtipoinformacao = b.idtipoinformacao)
where a.nmsistema = p_cdsistema
and c.cdtipoinformacao = p_cd_tipoinformacao;

insert into GESTAOCARGAS.processamento


(idsistema,
idtipoinformacao,
dtintegracao,
dtinicio,
statusprocessamento)
values
(v_idsistema,
v_idtipoinformacao,
P_DTINTEGRACAO,
sysdate,
'SOLICITADO')
RETURNING idprocessamento INTO P_IDPROCESSAMENTO;

COMMIT;

end SP_INTEGRA_SISTEMA;

-----------------------------------------------------------------------------------
-----------------------
-- REGION : COMPLEMENTACAO
-- OBJETIVO: SUBSISTEMA RAID
-- EQUIPE : EAGLES - PI10.SP03

-----------------------------------------------------------------------------------
-----------------------
PROCEDURE SP_COMP_CLIENTE_MASCARAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
UPDATE GESTAOCARGAS.CLIENTES_STG
SET NO_CPFCNPJ = LPAD(REGEXP_REPLACE(NO_CPFCNPJ, '[^0-9]', ''),11,'0'),
NO_RG = REGEXP_REPLACE(NO_RG, '[^0-9]', '')
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
CLIENTES_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CLIENTE_MASCARAS;

PROCEDURE SP_COMP_CLIENTE_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
UPDATE GESTAOCARGAS.CLIENTES_STG CLI
SET IC_SEXO = NVL((SELECT SEX.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG SEX
WHERE UPPER(CLI.IC_SEXO) = UPPER(SEX.CONTEUDO)
AND ROWNUM = 1
AND SEX.DOMINIO = 'SEXO_CLIENTE'),
IC_SEXO),
TP_PESSOA = NVL((SELECT PES.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG PES
WHERE UPPER(CLI.TP_PESSOA) = UPPER(PES.CONTEUDO)
AND ROWNUM = 1
AND PES.DOMINIO = 'TIPO_PESSOA'),
TP_PESSOA),
IC_ESTADOCIVIL = NVL((SELECT PES.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG PES
WHERE UPPER(CLI.IC_ESTADOCIVIL) =
UPPER(PES.CONTEUDO)
AND CLI.SIS_ORIGEM = PES.SIS_ORIGEM
AND ROWNUM = 1
AND PES.DOMINIO = 'ESTADO_CIVIL'),
IC_ESTADOCIVIL)
WHERE CLI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
CLIENTES_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CLIENTE_NORMALIZA;

PROCEDURE SP_COMP_CONTATO_MASCARAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
UPDATE GESTAOCARGAS.CONTATOS_STG
SET END_CEP = REGEXP_REPLACE(END_CEP, '[^0-9]', ''),
NO_TELEFONE_FIXO = REGEXP_REPLACE(NO_TELEFONE_FIXO, '[^0-9]', ''),
NO_TELEFONE_CELULAR = REGEXP_REPLACE(NO_TELEFONE_CELULAR, '[^0-9]', '')
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
CONTATOS_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CONTATO_MASCARAS;

PROCEDURE SP_COMP_CONTATO_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
UPDATE GESTAOCARGAS.CONTATOS_STG CON
SET ST_CONTATO = NVL((SELECT TIC.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG TIC
WHERE UPPER(NVL(CON.ST_CONTATO,' ')) =
UPPER(TIC.CONTEUDO)
AND ROWNUM = 1
AND TIC.DOMINIO = 'SITUACAO_CONTATO'),
ST_CONTATO),
TP_CONTATO = NVL((SELECT TIC.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG TIC
WHERE UPPER(CON.TP_CONTATO) =
UPPER(TIC.CONTEUDO)
AND CON.SIS_ORIGEM = TIC.SIS_ORIGEM
AND ROWNUM = 1
AND TIC.DOMINIO = 'TIPO_CONTATO'),
TP_CONTATO),
PF_CONTATO = NVL((SELECT PEC.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG PEC
WHERE UPPER(DECODE(CON.SIS_ORIGEM,
'OLIMPO',
CON.PF_CONTATO,
CON.TP_CONTATO)) =
UPPER(PEC.CONTEUDO)
AND PEC.SIS_ORIGEM = CON.SIS_ORIGEM
AND ROWNUM = 1
AND PEC.DOMINIO = 'PERFIL_CONTATO'),
PF_CONTATO)
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao NORMALIZAR
CONTATOS_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CONTATO_NORMALIZA;

PROCEDURE SP_COMP_FATURA_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
UPDATE GESTAOCARGAS.TITULOS_STG TIT
SET ST_FATURA = NVL(CASE
WHEN TP_NATUREZA_TITULO IN ('NP', 'DP','CH') THEN
(SELECT SIT.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG SIT
WHERE UPPER(TIT.TP_NATUREZA_TITULO ||
TIT.ST_FATURA) =
UPPER(SIT.CONTEUDO)
AND TIT.SIS_ORIGEM = SIT.SIS_ORIGEM
AND ROWNUM = 1
AND SIT.DOMINIO = 'SITUACAO_TITULO')
ELSE
(SELECT SIT.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG SIT
WHERE UPPER(TIT.ST_FATURA) = UPPER(SIT.CONTEUDO)
AND TIT.SIS_ORIGEM = SIT.SIS_ORIGEM
AND ROWNUM = 1
AND SIT.DOMINIO = 'SITUACAO_TITULO')
END,
ST_FATURA),
TP_NATUREZA_TITULO = NVL((SELECT NAT.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NAT
WHERE UPPER(TIT.TP_NATUREZA_TITULO) =
UPPER(NAT.CONTEUDO)
AND ROWNUM = 1
AND TIT.SIS_ORIGEM = NAT.SIS_ORIGEM
AND NAT.DOMINIO = 'NATUREZA_TITULO'),
TP_NATUREZA_TITULO),
DS_NATUREZA_TITULO = NVL((SELECT NAT.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NAT
WHERE UPPER(TIT.DS_NATUREZA_TITULO) =
UPPER(NAT.CONTEUDO)
AND ROWNUM = 1
AND TIT.SIS_ORIGEM = NAT.SIS_ORIGEM
AND NAT.DOMINIO =
'DESCRICAO_NATUREZA_TITULO'),
TIT.DS_NATUREZA_TITULO),
IC_NATUREZAREMAT = NVL((SELECT NAT.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NAT
WHERE UPPER(TIT.IC_NATUREZAREMAT) =
UPPER(NAT.CONTEUDO)
AND ROWNUM = 1
AND TIT.SIS_ORIGEM = NAT.SIS_ORIGEM
AND NAT.DOMINIO = 'NATUREZA_REMATRICULA'),
TIT.IC_NATUREZAREMAT)

WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;


EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao NORMALIZAR
TITULOS_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_FATURA_NORMALIZA;

PROCEDURE SP_COMP_CONTRATO_MASCARAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

UPDATE GESTAOCARGAS.CONTRATOS_STG S
SET CNPJ_FILIAL = LPAD(REGEXP_REPLACE(CNPJ_FILIAL, '[^0-9]',
''),14,'0'),
CNPJ_MATRIZ = LPAD(REGEXP_REPLACE(CNPJ_MATRIZ, '[^0-9]',
''),14,'0'),
NO_CPFRESPONSAVEL = REGEXP_REPLACE(NO_CPFRESPONSAVEL,
'[^0-9]',
''),
END_FILIAL_CEP = REGEXP_REPLACE(REGEXP_REPLACE(END_FILIAL_CEP, '[^0-9]',
''),
'([0-9]{5})([0-9]{3})', '\1-\2')
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
CONTRATOS_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CONTRATO_MASCARAS;

PROCEDURE SP_COMP_CONTRATO_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

UPDATE GESTAOCARGAS.CONTRATOS_STG CTR


SET CTR.TP_CURSO = NVL((SELECT NST.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NST
WHERE UPPER(CTR.TP_CURSO) =
UPPER(NST.CONTEUDO)
AND NST.DOMINIO =
'TIPO_CURSO'
AND CTR.SIS_ORIGEM =
NST.SIS_ORIGEM
AND ROWNUM = 1),
CTR.TP_CURSO),
CTR.TP_MATRICULA = NVL((SELECT NST.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NST
WHERE UPPER(CTR.TP_MATRICULA) =
UPPER(NST.CONTEUDO)
AND ROWNUM = 1
AND CTR.SIS_ORIGEM =
NST.SIS_ORIGEM
AND NST.DOMINIO =
'TIPO_MATRICULA'),
CTR.TP_MATRICULA),
CTR.COD_MODALIDADE_MATRICULA = NVL((SELECT NST.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NST
WHERE
UPPER(CTR.COD_MODALIDADE_MATRICULA) =
UPPER(NST.CONTEUDO)
AND CTR.SIS_ORIGEM =
NST.SIS_ORIGEM
AND ROWNUM = 1
AND NST.DOMINIO =
'MODALIDADE_MATRICULA'),
CTR.COD_MODALIDADE_MATRICULA),
CTR.DS_ST_CONTRATO = NVL((SELECT NST.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NST
WHERE UPPER(CTR.ST_CONTRATO) =
UPPER(NST.CONTEUDO)
AND ROWNUM = 1
AND CTR.SIS_ORIGEM =
NST.SIS_ORIGEM
AND NST.DOMINIO =
'SITUACAO_CONTRATO'),
CTR.ST_CONTRATO),
CTR.TP_MARCA_CONTRATO = NVL((SELECT NST.PADRAO
FROM GESTAOCARGAS.NORMATIZA_STG NST
WHERE UPPER(CTR.TP_MARCA_CONTRATO) =
UPPER(NST.CONTEUDO)
AND ROWNUM = 1
AND NST.DOMINIO =
'MARCA_CONTRATO'),
CTR.TP_MARCA_CONTRATO),
CTR.ID_SERVICE_NOW = CASE
WHEN CTR.SIS_ORIGEM = 'OLIMPO' THEN
CTR.SIS_ORIGEM || '-' ||
CTR.COD_FILIAL || '-' || CTR.ID_CLIENTE_ORIGEM || '-' || CTR.COD_CURSO
WHEN CTR.SIS_ORIGEM = 'COLABORAR' THEN
CTR.SIS_ORIGEM || '-' ||
CTR.CD_EMPRESA || '-' || CTR.ID_CONTRATO_ORIGEM || '-' || CTR.COD_CURSO
ELSE
null
END
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao NORMALIZAR
CONTRATOS_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CONTRATO_NORMALIZA;

PROCEDURE SP_COMP_CONTRATO_CNPJ(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
V_NMSISTEMA GESTAOCARGAS.SISTEMAORIGEM.NMSISTEMA%TYPE;
BEGIN
SELECT NMSISTEMA
INTO V_NMSISTEMA
FROM GESTAOCARGAS.PROCESSAMENTO P, GESTAOCARGAS.SISTEMAORIGEM S
WHERE P.IDSISTEMA = S.IDSISTEMA
AND IDPROCESSAMENTO = P_IDPROCESSAMENTO;

IF (V_NMSISTEMA = 'COLABORAR') THEN

UPDATE GESTAOCARGAS.CONTRATOS_STG STG


SET (CNPJ_MATRIZ,
DS_MATRIZ,
CNPJ_PRINCIPAL,
DESC_PRINCIPAL,
CNPJ_FILIAL) =
(SELECT NR_CNPJ_MANTENEDORA,
DS_MANTENEDORA,
NR_CNPJ_PRINCIPAL,
DS_PRINCIPAL,
NR_CNPJ_MANTENEDORA
FROM GESTAOCARGAS.GC_CNPJS CNPJ
WHERE LPAD(STG.COD_FILIAL, 10, '0') =
LPAD(CNPJ.CD_FILIAL, 10, '0')
AND ROWNUM = 1),
NM_FANTASIA_UNIDADE = STG.DS_NOME_FILIAL
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND STG.SIS_ORIGEM = 'COLABORAR';
END IF;

IF (V_NMSISTEMA = 'OLIMPO') THEN

UPDATE GESTAOCARGAS.CONTRATOS_STG STG


SET (CNPJ_MATRIZ,
DS_MATRIZ,
CNPJ_PRINCIPAL,
DESC_PRINCIPAL,
NM_FANTASIA_UNIDADE) =
(SELECT NR_CNPJ_MANTENEDORA,
DS_MANTENEDORA,
NR_CNPJ_PRINCIPAL,
DS_PRINCIPAL,
CNPJ.NM_FANTASIA_UNIDADE
FROM GESTAOCARGAS.GC_CNPJS CNPJ
WHERE LPAD(STG.COD_FILIAL, 10, '0') =
LPAD(CNPJ.CD_FILIAL, 10, '0')
AND ROWNUM = 1)
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

END IF;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro SP_COMP_CONTRATO_CNPJ '
||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CONTRATO_CNPJ;

PROCEDURE SP_COMP_CONTRATO_POLITICAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

UPDATE GESTAOCARGAS.CONTRATOS_STG STG


SET (POLITICA_PADRAO_S_EMPAC,
POLITICA_N1_S_EMPAC,
POLITICA_N2_S_EMPAC,
POLITICA_N3_S_EMPAC,
POLITICA_PADRAO_C_EMPAC,
POLITICA_N1_C_EMPAC,
POLITICA_N2_C_EMPAC,
POLITICA_N3_C_EMPAC) =
(SELECT POLITICA_PADRAO_S_EMPAC,
POLITICA_N1_S_EMPAC,
POLITICA_N2_S_EMPAC,
POLITICA_N3_S_EMPAC,
POLITICA_PADRAO_C_EMPAC,
POLITICA_N1_C_EMPAC,
POLITICA_N2_C_EMPAC,
POLITICA_N3_C_EMPAC
FROM GESTAOCARGAS.POLICY_FILE_DATA PD, GESTAOCARGAS.POLICY_FILE PF
WHERE PD.ID_ARQUIVO = PF.ID_ARQUIVO
AND STG.ID_CONTRATO_ORIGEM = PD.ID_CONTRATO
AND PF.DT_PROCESSAMENTO = (SELECT MAX(DT_PROCESSAMENTO) FROM
POLICY_FILE))
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro
SP_COMP_CONTRATO_POLITICAS ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_CONTRATO_POLITICAS;

PROCEDURE SP_COMP_ACORDO_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
UPDATE GESTAOCARGAS.ACERTO_STG ACT
SET --ACT.ID_CONTRATO = LTRIM(TRANSLATE(ACT.ID_CONTRATO,
TRANSLATE(ACT.ID_CONTRATO, '1234567890', ' ') , ' ')),
--ACT.ID_CLIENTE = LTRIM(TRANSLATE(ACT.ID_CLIENTE,
TRANSLATE(ACT.ID_CLIENTE, '1234567890', ' ') , ' ')),

ACT.ST_PARCELAMENTO = CASE WHEN UPPER(ACT.ST_PARCELAMENTO) = 'APPROVED'


THEN 'APROVADO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO) = 'PAYMENT'
THEN 'FORMA DE PAGAMENTO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO) =
'EXPIRED' THEN 'EXPIRADO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO) =
'CANCELLED' THEN 'CANCELADO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO) =
'ANTICIPATED' THEN 'ANTECIPADO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO) =
'RENEGOTIATED' THEN 'RENEGO CIADO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO) =
'CONCLUDED' THEN 'CONCLUIDO' ELSE
CASE WHEN UPPER(ACT.ST_PARCELAMENTO)
= 'DEACTIVATED' THEN 'DESATIVADO'
ELSE '' END END END END END END END END
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao NORMALIZAR
ACERTO_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_ACORDO_NORMALIZA;

PROCEDURE SP_COMP_NOVAS_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
/*
UPDATE GESTAOCARGAS.NOVAS_STG NVT
SET NVT.ID_CONTRATO = LTRIM(TRANSLATE(NVT.ID_CONTRATO,
TRANSLATE(NVT.ID_CONTRATO, '1234567890', ' ') , ' ')),
NVT.ID_CLIENTE = LTRIM(TRANSLATE(NVT.ID_CLIENTE,
TRANSLATE(NVT.ID_CLIENTE, '1234567890', ' ') , ' '))
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
*/
NULL;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao NORMALIZAR NOVAS_STG
' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_NOVAS_NORMALIZA;

PROCEDURE SP_COMP_ORIGINAIS_NORMALIZA(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
/*
UPDATE GESTAOCARGAS.ORIGINAIS_STG NVT
SET NVT.ID_CONTRATO = LTRIM(TRANSLATE(NVT.ID_CONTRATO,
TRANSLATE(NVT.ID_CONTRATO, '1234567890', ' ') , ' ')),

NVT.ID_CLIENTE = LTRIM(TRANSLATE(NVT.ID_CLIENTE,
TRANSLATE(NVT.ID_CLIENTE, '1234567890', ' ') , ' '))
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO;
*/
NULL;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'COMPLEMENTADOR',
P_DESCRICAO => 'Erro ao NORMALIZAR
ORIGINAIS_STG ' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_COMP_ORIGINAIS_NORMALIZA;

-----------------------------------------------------------------------------------
-----------------------
-- ENDREGION : COMPLEMENTACAO
-- OBJETIVO: SUBSISTEMA RAID
-- EQUIPE : EAGLES - PI10.SP03
-----------------------------------------------------------------------------------
-----------------------

-----------------------------------------------------------------------------------
-----------------------
-- REGION : VALIDACAO
-- OBJETIVO: SUBSISTEMA RAID
-- EQUIPE : EAGLES - PI10.SP03

-----------------------------------------------------------------------------------
-----------------------

PROCEDURE SP_VAL_CLIENTE_OBRIGATORIEDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
V_OK VARCHAR(100);
V_RETORNO VARCHAR(2000);
V_IDLOG NUMBER;
BEGIN

V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('CLIENTE');

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
CL.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'ID_REGISTRO IS NULL OR SIS_ORIGEM IS NULL OR
ID_CLIENTE_ORIGEM IS NULL OR NM_CLIENTE IS NULL'
FROM GESTAOCARGAS.CLIENTES_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (ID_REGISTRO IS NULL OR SIS_ORIGEM IS NULL OR
ID_CLIENTE_ORIGEM IS NULL OR NM_CLIENTE IS NULL)
UNION
-- VALIDA CAMPOS VAZIOS, MAS N?O OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
CL.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_OBRIGATORIEDADE,
ALERTA_VALIDACAO,
'CL.NO_CPFCNPJ IS NULL'
FROM GESTAOCARGAS.CLIENTES_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND CL.NO_CPFCNPJ IS NULL;
EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação dos dados de clientes';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CLIENTES_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_VAL_CLIENTE_OBRIGATORIEDADE;

PROCEDURE SP_VAL_CLIENTE_DUPLICIDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
V_OK := 'S';
V_RETORNO := '';

V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('CLIENTE');

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
CL.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_DUPLICACAO,
ERRO_VALIDACAO,
'INNER JOIN (SELECT CL1.ID_PROCESSAMENTO,
CL1.ID_CLIENTE_ORIGEM,
MAX(CL1.ID_REGISTRO) AS ID_REGISTRO
FROM GESTAOCARGAS.CLIENTES_INT CL1
GROUP BY CL1.ID_PROCESSAMENTO,
CL1.ID_CLIENTE_ORIGEM
HAVING COUNT(1) > 1) CL2 ON CL2.ID_PROCESSAMENTO =
CL.ID_PROCESSAMENTO
AND CL2.ID_CLIENTE_ORIGEM =
CL.ID_CLIENTE_ORIGEM
AND CL.ID_REGISTRO <>
CL2.ID_REGISTRO
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO'
FROM GESTAOCARGAS.CLIENTES_STG CL
INNER JOIN (SELECT CL1.ID_PROCESSAMENTO,
CL1.ID_CLIENTE_ORIGEM,
MAX(CL1.ID_REGISTRO) AS ID_REGISTRO
FROM GESTAOCARGAS.CLIENTES_STG CL1
WHERE CL1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY CL1.ID_PROCESSAMENTO, CL1.ID_CLIENTE_ORIGEM
HAVING COUNT(1) > 1) CL2
ON CL2.ID_PROCESSAMENTO = CL.ID_PROCESSAMENTO
AND CL2.ID_CLIENTE_ORIGEM = CL.ID_CLIENTE_ORIGEM
AND CL.ID_REGISTRO <> CL2.ID_REGISTRO
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação dos dados de clientes';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CLIENTES_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_VAL_CLIENTE_DUPLICIDADE;

PROCEDURE SP_VAL_CLIENTE_DOMINIOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;

V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
V_OK := 'S';
V_RETORNO := '';

V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('CLIENTE');

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
CL.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_DOMINIO,
ALERTA_VALIDACAO,
'NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.IC_SEXO
AND NOR.CAMPO = ''IC_SEXO'') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.IC_ESTADOCIVIL
AND NOR.CAMPO = ''IC_ESTADOCIVIL'') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.TP_PESSOA
AND NOR.CAMPO = ''TP_PESSOA'')'
FROM GESTAOCARGAS.CLIENTES_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.IC_SEXO
AND NOR.CAMPO = 'IC_SEXO') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.IC_ESTADOCIVIL
AND NOR.CAMPO = 'IC_ESTADOCIVIL') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.TP_PESSOA
AND NOR.CAMPO = 'TP_PESSOA'));

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação dos dados de clientes';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CLIENTES_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_VAL_CLIENTE_DOMINIOS;

PROCEDURE SP_VAL_CONTATO_OBRIGATORIEDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

TYPE TAB_ROWID IS TABLE OF ROWID;


TP_TAB TAB_ROWID;

CURSOR C1 IS
SELECT CL.ROWID
FROM GESTAOCARGAS.CONTATOS_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (ID_REGISTRO IS NULL OR ID_PROCESSAMENTO IS NULL OR
SIS_ORIGEM IS NULL OR ID_CLIENTE_ORIGEM IS NULL OR
ST_CONTATO IS NULL OR TP_CONTATO IS NULL OR
PF_CONTATO IS NULL);

CURSOR C2 IS
SELECT CL.ROWID
FROM GESTAOCARGAS.CONTATOS_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND ((CL.TP_CONTATO = 'E-MAIL' AND CL.DS_EMAIL IS NULL) OR
(CL.TP_CONTATO = 'TELEFONE' AND
(CL.NO_TELEFONE_FIXO IS NULL AND
CL.NO_TELEFONE_CELULAR IS NULL)) OR
(CL.TP_CONTATO = 'ENDERECO' AND
(END_LOGRADOURO IS NULL OR END_BAIRRO IS NULL OR
END_CIDADE IS NULL OR END_UF IS NULL OR END_CEP IS NULL)));

BEGIN
P_OK := 'S';
P_RETORNO := '';

OPEN C1;
LOOP
FETCH C1 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = ERRO_VALIDACAO,
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' - SP_VAL_CONTATO_OBRIGATORIEDADE C1'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C1;

OPEN C2;
LOOP
FETCH C2 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = DECODE(FL_CRITICIDADE,
NULL,
ALERTA_VALIDACAO,
FL_CRITICIDADE),
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' - SP_VAL_CONTATO_OBRIGATORIEDADE C2'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C2;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contato';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
CONTATOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTATO_OBRIGATORIEDADE;

PROCEDURE SP_VAL_CONTATO_DUPLICIDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

TYPE TAB_CURSOR IS TABLE OF ROWID;


TP_TAB TAB_CURSOR;

CURSOR C1 IS
SELECT C1.ROWID
FROM GESTAOCARGAS.CONTATOS_STG C1,
(SELECT ID_CLIENTE_ORIGEM,
NO_TELEFONE_FIXO,
MAX(ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.CONTATOS_STG C2
WHERE C2.TP_CONTATO = 'TELEFONE'
AND C2.ID_PROCESSAMENTO+0 = P_IDPROCESSAMENTO
GROUP BY ID_CLIENTE_ORIGEM, NO_TELEFONE_FIXO
HAVING COUNT(1) > 1) C3
WHERE C1.ID_PROCESSAMENTO+0 = P_IDPROCESSAMENTO -- +0 utilizado para não
utilizar indice neste ponto
AND C1.ID_CLIENTE_ORIGEM = C3.ID_CLIENTE_ORIGEM
AND C1.NO_TELEFONE_FIXO = C3.NO_TELEFONE_FIXO
AND C1.ID_REGISTRO <> C3.ID_REGISTRO
AND C1.TP_CONTATO = 'TELEFONE';

CURSOR C2 IS
SELECT C1.ROWID
FROM GESTAOCARGAS.CONTATOS_STG C1,
(SELECT ID_CLIENTE_ORIGEM,
DS_EMAIL,
MAX(ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.CONTATOS_STG C2
WHERE C2.TP_CONTATO = 'E-MAIL'
AND C2.ID_PROCESSAMENTO+0 = P_IDPROCESSAMENTO
GROUP BY ID_CLIENTE_ORIGEM, DS_EMAIL
HAVING COUNT(1) > 1) C3
WHERE C1.ID_PROCESSAMENTO+0 = P_IDPROCESSAMENTO -- +0 utilizado para não
utilizar indice neste ponto
AND C1.ID_CLIENTE_ORIGEM = C3.ID_CLIENTE_ORIGEM
AND C1.DS_EMAIL = C3.DS_EMAIL
AND C1.ID_REGISTRO <> C3.ID_REGISTRO
AND C1.TP_CONTATO = 'E-MAIL';

CURSOR C3 IS
SELECT C1.ROWID
FROM GESTAOCARGAS.CONTATOS_STG C1,
(SELECT ID_CLIENTE_ORIGEM,
END_LOGRADOURO,
MAX(ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.CONTATOS_STG C2
WHERE C2.TP_CONTATO = 'ENDERECO'
AND C2.ID_PROCESSAMENTO+0 = P_IDPROCESSAMENTO
GROUP BY ID_CLIENTE_ORIGEM, END_LOGRADOURO
HAVING COUNT(1) > 1) C3
WHERE C1.ID_PROCESSAMENTO+0 = P_IDPROCESSAMENTO -- +0 utilizado para não
utilizar indice neste ponto
AND C1.ID_CLIENTE_ORIGEM = C3.ID_CLIENTE_ORIGEM
AND C1.END_LOGRADOURO = C3.END_LOGRADOURO
AND C1.ID_REGISTRO <> C3.ID_REGISTRO
AND C1.TP_CONTATO = 'ENDERECO';

BEGIN
P_OK := 'S';
P_RETORNO := '';

OPEN C1;
LOOP
FETCH C1 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = ERRO_VALIDACAO,
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' - SP_VAL_CONTATO_DUPLICIDADE TELEFONE'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C1;

OPEN C2;
LOOP
FETCH C2 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = ERRO_VALIDACAO,
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' - SP_VAL_CONTATO_DUPLICIDADE E-MAIL'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C2;

OPEN C3;
LOOP
FETCH C3 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = ERRO_VALIDACAO,
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' - SP_VAL_CONTATO_DUPLICIDADE ENDERECO'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C3;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contato';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CONTATOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTATO_DUPLICIDADE;

PROCEDURE SP_VAL_CONTATO_DOMINIOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

TYPE TAB_CURSOR IS TABLE OF ROWID;


TP_TAB TAB_CURSOR;

CURSOR C1 IS
SELECT CL.ROWID
FROM GESTAOCARGAS.CONTATOS_STG CL
WHERE CL.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.TP_CONTATO
AND NOR.CAMPO = 'TP_CONTATO') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CL.PF_CONTATO
AND NOR.CAMPO = 'PF_CONTATO'));

BEGIN
P_OK := 'S';
P_RETORNO := '';
OPEN C1;
LOOP
FETCH C1 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = DECODE(FL_CRITICIDADE,
NULL,
ALERTA_VALIDACAO,
FL_CRITICIDADE),
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' SP_VAL_CONTATO_DOMINIOS TP_CONTATO / PF_CONTATO'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contato';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CONTATOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTATO_DOMINIOS;

PROCEDURE SP_VAL_CONTATO_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

TYPE TAB_CURSOR IS TABLE OF ROWID;


TP_TAB TAB_CURSOR;

CURSOR C1 IS
SELECT CO.ROWID
FROM GESTAOCARGAS.CONTATOS_STG CO
WHERE CO.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_CUSTOMER CL
WHERE CL.ID_CLIENTE = CO.ID_CLIENTE);
BEGIN
P_OK := 'S';
P_RETORNO := '';
OPEN C1;
LOOP
FETCH C1 BULK COLLECT
INTO TP_TAB LIMIT FL_BULK_LIMIT;
EXIT WHEN TP_TAB.COUNT = 0;

FORALL X IN TP_TAB.FIRST .. TP_TAB.LAST


UPDATE GESTAOCARGAS.CONTATOS_STG
SET FL_CRITICIDADE = ERRO_VALIDACAO,
DS_CRITICIDADE = DS_CRITICIDADE || CHR(13) || P_IDREGRA ||
' - SP_VAL_CONTATO_ORFAO CLIENTE'
WHERE ROWID = TP_TAB(X);
COMMIT;
END LOOP;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contato';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CONTATOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTATO_ORFAO;

PROCEDURE SP_VAL_CONTRATO_OBRIGATORIEDAD(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
CT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('CONTRATO'),
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(CT.ID_REGISTRO IS NULL OR CT.ID_PROCESSAMENTO IS NULL OR
CT.SIS_ORIGEM IS NULL OR CT.ID_CLIENTE_ORIGEM IS NULL OR
CT.ID_CONTRATO_ORIGEM IS NULL OR CT.COD_CURSO IS NULL OR
CT.ST_CONTRATO IS NULL OR CT.CNPJ_MATRIZ IS NULL OR
CT.DS_MATRIZ IS NULL OR
CT.CNPJ_PRINCIPAL IS NULL OR
CT.DESC_PRINCIPAL IS NULL )'
FROM GESTAOCARGAS.CONTRATOS_STG CT
WHERE CT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (CT.ID_REGISTRO IS NULL OR CT.ID_PROCESSAMENTO IS NULL OR
CT.SIS_ORIGEM IS NULL OR CT.ID_CLIENTE_ORIGEM IS NULL OR
CT.ID_CONTRATO_ORIGEM IS NULL OR CT.COD_CURSO IS NULL OR
CT.ST_CONTRATO IS NULL OR
CT.CNPJ_MATRIZ IS NULL OR
CT.DS_MATRIZ IS NULL OR
CT.CNPJ_PRINCIPAL IS NULL OR
CT.DESC_PRINCIPAL IS NULL);
EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contrato';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
CONTRATOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTRATO_OBRIGATORIEDAD;

PROCEDURE SP_VAL_CONTRATO_DUPLICIDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
CT1.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('CONTRATO'),
TP_VAL_DUPLICACAO,
ERRO_VALIDACAO,
'WHERE CT1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND CT1.SIS_ORIGEM = CT2.SIS_ORIGEM
AND CT1.ID_CLIENTE_ORIGEM = CT2.ID_CLIENTE_ORIGEM
AND CT1.ID_CONTRATO_ORIGEM = CT2.ID_CONTRATO_ORIGEM'
FROM GESTAOCARGAS.CONTRATOS_STG CT1,
(SELECT CT.SIS_ORIGEM,
CT.ID_CLIENTE_ORIGEM,
CT.ID_CONTRATO_ORIGEM,
MAX(ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.CONTRATOS_STG CT
WHERE CT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY CT.SIS_ORIGEM,
CT.ID_CLIENTE_ORIGEM,
CT.ID_CONTRATO_ORIGEM
HAVING COUNT(1) > 1) CT2
WHERE CT1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND CT1.SIS_ORIGEM = CT2.SIS_ORIGEM
AND CT1.ID_CLIENTE_ORIGEM = CT2.ID_CLIENTE_ORIGEM
AND CT1.ID_CONTRATO_ORIGEM = CT2.ID_CONTRATO_ORIGEM
AND CT1.ID_REGISTRO <> CT2.ID_REGISTRO;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contrato';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
CONTRATOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTRATO_DUPLICIDADE;

PROCEDURE SP_VAL_CONTRATO_DOMINIOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
CT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('CONTRATO'),
TP_VAL_DOMINIO,
ALERTA_VALIDACAO,
'(NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CT.TP_CURSO
AND NOR.CAMPO = ''TP_CURSO'')
OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CT.TP_MATRICULA
AND NOR.CAMPO = ''TP_MATRICULA''))'
FROM GESTAOCARGAS.CONTRATOS_STG CT
WHERE CT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CT.TP_CURSO
AND NOR.CAMPO = 'TP_CURSO') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = CT.TP_MATRICULA
AND NOR.CAMPO = 'TP_MATRICULA'));

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de contratos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR CONTATOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTRATO_DOMINIOS;

PROCEDURE SP_VAL_CONTRATO_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
BEGIN
P_OK := 'S';
P_RETORNO := '';

V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('CONTATO');

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
CO.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'AND NOT EXISTS (SELECT 1 FROM GC_CONTACT CL WHERE CL.ID_CLIENTE =
CO.ID_CLIENTE)'
FROM GESTAOCARGAS.CONTRATOS_STG CO
WHERE CO.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GC_CUSTOMER CL
WHERE CL.ID_CLIENTE = CO.ID_CLIENTE);

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validacao dos dados de contratos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
CONTRATOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_CONTRATO_ORFAO;

PROCEDURE SP_VAL_FATURA_OBRIGATORIEDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
-- 1) TITULOS EM ABERTO
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(ID_REGISTRO IS NULL OR
ID_PROCESSAMENTO IS NULL OR
SIS_ORIGEM IS NULL OR
ID_FATURA_ORIGEM IS NULL OR
ID_CONTRATO_ORIGEM IS NULL OR
ID_CLIENTE_ORIGEM IS NULL OR
NU_TITULO IS NULL OR
TP_NATUREZA_TITULO IS NULL OR
DS_NATUREZA_TITULO IS NULL OR
VL_LIQUIDO IS NULL OR VL_LIQUIDO <= 0
VL_BRUTO IS NULL OR
DT_VENCIMENTO IS NULL OR
ST_FATURA IS NULL)'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA = 'ABERTO'
AND (TIT.ID_REGISTRO IS NULL OR TIT.ID_PROCESSAMENTO IS NULL OR
TIT.SIS_ORIGEM IS NULL OR TIT.ID_FATURA_ORIGEM IS NULL OR
TIT.ID_CONTRATO_ORIGEM IS NULL OR
TIT.ID_CLIENTE_ORIGEM IS NULL OR TIT.NU_TITULO IS NULL OR
TIT.TP_NATUREZA_TITULO IS NULL OR
TIT.DS_NATUREZA_TITULO IS NULL OR TIT.VL_LIQUIDO IS NULL OR
(TIT.VL_LIQUIDO IS NULL OR TIT.VL_LIQUIDO <= 0) OR
TIT.VL_BRUTO IS NULL OR
TIT.DT_VENCIMENTO IS NULL OR TIT.ST_FATURA IS NULL)
UNION
-- 2) TITULOS PAGOs, BAIXADOS OU CANCELADOS
-- N?O VALIDA DT_VENCIMENTO, VL_BRUTO E VL_LIQUIDO
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(ID_REGISTRO IS NULL OR
ID_PROCESSAMENTO IS NULL OR
SIS_ORIGEM IS NULL OR
ID_FATURA_ORIGEM IS NULL OR
ID_CONTRATO_ORIGEM IS NULL OR
ID_CLIENTE_ORIGEM IS NULL OR
NU_TITULO IS NULL OR
TP_NATUREZA_TITULO IS NULL OR
DS_NATUREZA_TITULO IS NULL OR
ST_FATURA IS NULL)'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA <> 'ABERTO'
AND (TIT.ID_REGISTRO IS NULL OR TIT.ID_PROCESSAMENTO IS NULL OR
TIT.SIS_ORIGEM IS NULL OR TIT.ID_FATURA_ORIGEM IS NULL OR
TIT.ID_CONTRATO_ORIGEM IS NULL OR
TIT.ID_CLIENTE_ORIGEM IS NULL OR TIT.NU_TITULO IS NULL OR
TIT.TP_NATUREZA_TITULO IS NULL OR
TIT.DS_NATUREZA_TITULO IS NULL OR
TIT.ST_FATURA IS NULL)
UNION
-- VALIDA NATUREZA DE REMATRICULA PARA MENSALIDADE
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_OBRIGATORIEDADE,
ALERTA_VALIDACAO,
'(IC_NATUREZAREMAT IS NULL)'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.TP_NATUREZA_TITULO = 'MENSALIDADE'
AND TIT.IC_NATUREZAREMAT IS NULL
UNION
-- CASO N?O SEJA MENSALIDADE, ALERTA SE NATUREZA REMATRICULA VIER DIFERENTE
DE 'N' OU NULL
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_OBRIGATORIEDADE,
ALERTA_VALIDACAO,
'(IC_NATUREZAREMAT IS NULL)'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.TP_NATUREZA_TITULO <> 'MENSALIDADE'
AND COALESCE(TIT.IC_NATUREZAREMAT, 'N') <> 'N';

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação da obrigatoriedade dos dados de t?tulos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR TITULOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => P_OK,
P_RETORNO => P_RETORNO);
END SP_VAL_FATURA_OBRIGATORIEDADE;

PROCEDURE SP_VAL_FATURA_DUPLICIDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
V_OK := 'S';
V_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
TI1.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_DUPLICACAO,
ERRO_VALIDACAO,
'TI1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TI1.SIS_ORIGEM = TI2.SIS_ORIGEM
AND TI1.NU_TITULO = TI2.NU_TITULO
AND TI1.TP_NATUREZA_TITULO = TI2.TP_NATUREZA_TITULO
AND TI1.ID_CONTRATO_ORIGEM = TI2.ID_CONTRATO_ORIGEM'
FROM GESTAOCARGAS.TITULOS_STG TI1,
(SELECT TI.SIS_ORIGEM,
TI.NU_TITULO,
TI.TP_NATUREZA_TITULO,
MAX(TI.ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.TITULOS_STG TI
WHERE TI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY TI.SIS_ORIGEM,
TI.NU_TITULO,
TI.TP_NATUREZA_TITULO
HAVING COUNT(1) > 1) TI2
WHERE TI1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TI1.SIS_ORIGEM = TI2.SIS_ORIGEM
AND TI1.NU_TITULO = TI2.NU_TITULO
AND TI1.TP_NATUREZA_TITULO = TI2.TP_NATUREZA_TITULO
AND TI1.ID_REGISTRO <> TI2.ID_REGISTRO;

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação de duplicidade dos dados de t?tulos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR TITULOS_STG
' ||
' - ' || sqlerrm,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_VAL_FATURA_DUPLICIDADE;

PROCEDURE SP_VAL_FATURA_DOMINIOS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_DOMINIO,
ALERTA_VALIDACAO,
'(NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = TIT.TP_NATUREZA_TITULO
AND NOR.CAMPO = ''TP_NATUREZA_TITULO'')
OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = TIT.IC_NATUREZAREMAT
AND NOR.CAMPO = ''IC_NATUREZAREMAT'')
OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = TIT.ST_FATURA
AND NOR.CAMPO = ''ST_FATURA''))'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = TIT.TP_NATUREZA_TITULO
AND NOR.CAMPO = 'TP_NATUREZA_TITULO') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = TIT.IC_NATUREZAREMAT
AND NOR.CAMPO = 'IC_NATUREZAREMAT') OR NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NORMATIZA_STG NOR
WHERE NOR.PADRAO = TIT.ST_FATURA
AND NOR.CAMPO = 'ST_FATURA'));

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dom?nios de dados de t?tulos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR TITULOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_FATURA_DOMINIOS;

PROCEDURE SP_VAL_FATURA_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),

TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_ACCOUNT ACC
WHERE ACC.ID_CONTRATO = TIT.ID_CONTRATO)'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_CUSTOMER COS
WHERE COS.ID_CLIENTE = TIT.ID_CLIENTE)
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_ACCOUNT ACC
WHERE ACC.ID_CONTRATO = TIT.ID_CONTRATO)
UNION
--VALIDA TÍTULOS CANCELADOS QUE NÃO POSSUEM ORIGINAIS NA GC_BILL
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'AND NOT EXISTS (SELECT 1 FROM GESTAOCARGAS.GC_BILL B
WHERE B.ID_TITULO = TIT.ID_FATURA);'
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ST_FATURA = 'CANCELADO'
AND NOT EXISTS (SELECT 1 FROM GESTAOCARGAS.GC_BILL B
WHERE B.ID_TITULO = TIT.ID_FATURA);

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação de registros orfãos de t?tulos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR TITULOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_FATURA_ORFAO;

PROCEDURE SP_VAL_PEP_OBRIGATORIEDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS

P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
P.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('CONTRATOPEP'),
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(P.CD_UNIDADE IS NULL OR
P.CD_ALUNO IS NULL OR
P.CD_ESPECIALIDADE IS NULL)'
FROM GESTAOCARGAS.PEP_STG P
WHERE P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (P.CD_UNIDADE IS NULL OR P.CD_ALUNO IS NULL OR
P.CD_ESPECIALIDADE IS NULL);
EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de clientes';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR PEP_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_PEP_OBRIGATORIEDADE;

PROCEDURE SP_VAL_PEP_DUPLICIDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
TYPE V_TL_LOG IS TABLE OF GESTAOCARGAS.LOGVALIDACAO%ROWTYPE;
V_LIST_LOG V_TL_LOG;
CURSOR C1 IS
SELECT P_IDPROCESSAMENTO,
PS1.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('CONTRATOPEP'),
SYSDATE,
TP_VAL_DUPLICACAO,
ERRO_VALIDACAO,
'PS1.ID_PROCESSAMENTO =
AND PS1.CD_UNIDADE = TI2.CD_UNIDADE
AND PS1.CD_ALUNO = TI2.CD_ALUNO
AND PS1.CD_ESPECIALIDADE = TI2.CD_ESPECIALIDADE'
FROM (SELECT PS.CD_UNIDADE,
PS.CD_ALUNO,
PS.CD_ESPECIALIDADE,
MAX(PS.ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.PEP_STG PS
WHERE PS.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY PS.CD_UNIDADE, PS.CD_ALUNO, PS.CD_ESPECIALIDADE
HAVING COUNT(1) > 1) PS2,
GESTAOCARGAS.PEP_STG PS1
WHERE PS2.CD_UNIDADE || '-' || PS2.CD_ALUNO ||'-'|| PS2.CD_ESPECIALIDADE =
PS1.CD_UNIDADE|| '-' || PS1.CD_ALUNO ||'-'|| PS1.CD_ESPECIALIDADE
AND PS1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND PS2.ID_REGISTRO <> PS1.ID_REGISTRO;
BEGIN
V_OK := 'S';
V_RETORNO := '';

OPEN C1;
LOOP
FETCH C1 BULK COLLECT
INTO V_LIST_LOG LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LIST_LOG.COUNT = 0;

FORALL I IN INDICES OF V_LIST_LOG


INSERT INTO GESTAOCARGAS.LOGVALIDACAO VALUES V_LIST_LOG (I);
COMMIT;
END LOOP;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação de duplicidade dos dados de t?tulos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR TITULOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_VAL_PEP_DUPLICIDADE;

PROCEDURE SP_VAL_PEP_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA%TYPE)
AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

TYPE V_TL_LOG IS TABLE OF GESTAOCARGAS.LOGVALIDACAO%ROWTYPE;


V_LIST_LOG V_TL_LOG;

CURSOR C1 IS
SELECT P_IDPROCESSAMENTO,
PS.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('CONTRATOPEP'),
SYSDATE,
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_ACCOUNT AC
WHERE AC.CD_FILIAL = TO_CHAR(PS.CD_UNIDADE)
AC.ID_CONTRATO = LPAD(PS.CD_ALUNO, 10, 0) || LPAD(PS.CD_ESPECIALIDADE,
6, 0))'
FROM GESTAOCARGAS.PEP_STG PS
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_ACCOUNT AC
WHERE AC.CD_FILIAL = TO_CHAR(PS.CD_UNIDADE)
AND AC.ID_CONTRATO_ORIGEM = LPAD(PS.CD_ALUNO, 10, 0) ||
LPAD(PS.CD_ESPECIALIDADE, 6, 0));
BEGIN
P_OK := 'S';
P_RETORNO := '';
OPEN C1;
LOOP
FETCH C1 BULK COLLECT
INTO V_LIST_LOG LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LIST_LOG.COUNT = 0;

FORALL I IN INDICES OF V_LIST_LOG


INSERT INTO GESTAOCARGAS.LOGVALIDACAO VALUES V_LIST_LOG (I);
COMMIT;
END LOOP;
CLOSE C1;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação de registros orfãos de PEP';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR TITULOS_STG
' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => P_OK,
P_RETORNO => P_RETORNO);
END SP_VAL_PEP_ORFAO;

PROCEDURE SP_VAL_ACERTO_OBRIGATORIEDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
V_OK VARCHAR(100);
V_RETORNO VARCHAR(2000);
V_IDLOG NUMBER;
BEGIN

V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('PARCELAMENTO');

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
AC.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(US_CRIACAO_PARCELAMENTO IS NULL OR DT_CRIACAO_PARCELAMENTO IS NULL
OR
ID_PARCELAMENTO IS NULL OR QTDE_PARCELAS IS NULL OR
VL_TOTAL IS NULL)'
FROM GESTAOCARGAS.ACERTO_STG AC
WHERE AC.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (US_CRIACAO_PARCELAMENTO IS NULL OR DT_CRIACAO_PARCELAMENTO IS NULL OR
ID_PARCELAMENTO IS NULL OR QTDE_PARCELAS IS NULL OR
VL_TOTAL IS NULL);

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação dos dados de acertos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR ACERTO_STG '
||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_VAL_ACERTO_OBRIGATORIEDADE;

PROCEDURE SP_VAL_ACERTO_QTD_PARCELAS(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
--V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
V_OK VARCHAR(100);
V_RETORNO VARCHAR(2000);
V_IDLOG NUMBER;
BEGIN

--V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('PARCELAMENTO');
V_OK := '';

/*
INSERT INTO GESTAOCARGAS.LOGVALIDACAO
(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
AC.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(SELECT COUNT(1)
FROM ACERTO_STG
WHERE ID_PARCELAMENTO = AC.ID_PARCELAMENTO)'
FROM GESTAOCARGAS.ACERTO_STG AC
WHERE AC.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND AC.QTDE_PARCELAS <> (SELECT COUNT(1)
FROM NOVAS_STG
WHERE ID_PARCELAMENTO = AC.ID_PARCELAMENTO);
*/

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação dos dados de acertos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR ACERTO_STG '
||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_VAL_ACERTO_QTD_PARCELAS;

PROCEDURE SP_VAL_NOVAS_OBRIGATORIEDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_IDTIPOINFORMACAO GESTAOCARGAS.TIPOINFORMACAO.IDTIPOINFORMACAO%TYPE;
V_OK VARCHAR(100);
V_RETORNO VARCHAR(2000);
V_IDLOG NUMBER;
BEGIN

V_IDTIPOINFORMACAO := GET_IDTIPOINFORMACAO('FATURAPARCELAMENTO');

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
NO.ID_REGISTRO,
P_IDREGRA,
V_IDTIPOINFORMACAO,
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(DT_VENCIMENTO IS NULL OR VL_PARCELA IS NULL)'
FROM GESTAOCARGAS.NOVAS_STG NO
WHERE NO.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (DT_VENCIMENTO IS NULL OR VL_PARCELA IS NULL);

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação dos dados de novas parcelas';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR NOVAS_STG '
||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => v_ok,
P_RETORNO => v_retorno);
END SP_VAL_NOVAS_OBRIGATORIEDADE;

PROCEDURE SP_VAL_NOVAS_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
NO.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURAPARCELAMENTO'),
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'(SELECT 1
FROM GESTAOCARGAS.ACERTO_STG AC
WHERE AC.ID_PARCELAMENTO = NO.ID_PARCELAMENTO)'
FROM GESTAOCARGAS.NOVAS_STG NO
WHERE NO.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.ACERTO_STG AC
WHERE AC.ID_PARCELAMENTO = NO.ID_PARCELAMENTO);

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de novas parcelas';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR NOVAS_STG '
||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_NOVAS_ORFAO;

PROCEDURE SP_VAL_ORIGINAIS_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
ORI.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('PARCELA'),
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'(SELECT 1
FROM GESTAOCARGAS.ACERTO_STG AC
WHERE AC.ID_PARCELAMENTO = ORI.ID_PARCELAMENTO)'
FROM GESTAOCARGAS.ORIGINAIS_STG ORI
WHERE ORI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.ACERTO_STG AC
WHERE AC.ID_PARCELAMENTO = ORI.ID_PARCELAMENTO);

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de parcelas originais';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
ORIGINAIS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_ORIGINAIS_ORFAO;

PROCEDURE SP_VAL_PAGAMENTO_OBRIGATORI(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
-- VALIDA CAMPOS OBRIGATORIOS
SELECT P_IDPROCESSAMENTO,
ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('PAGAMENTO'),
TP_VAL_OBRIGATORIEDADE,
ERRO_VALIDACAO,
'(ID_PARCELAMENTO IS NULL OR NO_PARCELA IS NULL OR
U_12_VL_PAGO_PAGADOR IS NULL OR U_16_DT_OCORRENCIA IS NULL)'
FROM GESTAOCARGAS.PAGAMENTOS_STG
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (ID_PARCELAMENTO IS NULL OR
NO_PARCELA IS NULL OR
U_12_VL_PAGO_PAGADOR IS NULL OR
U_16_DT_OCORRENCIA IS NULL);
EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de Pagamentos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
PAGAMENTOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_PAGAMENTO_OBRIGATORI;

PROCEDURE SP_VAL_PAGAMENTO_DUPLICIDADE(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

V_CURSOR_INT TCURSOR;
V_LIST_DADOS_DUPLICADOS LIST_PAGAMENTOS_DUPLICADOS :=
LIST_PAGAMENTOS_DUPLICADOS();
V_INDICE INT;
V_LIMITE NUMBER := 500;
V_QTD_PAGAMENTOS INT;

BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
PG1.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('PAGAMENTO'),
TP_VAL_DUPLICACAO,
ALERTA_VALIDACAO,
' FROM GESTAOCARGAS.PAGAMENTOS_STG PG1,
(SELECT PG2.NO_PARCELA,
PG2.ID_PARCELAMENTO,
MAX(TI.ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.PAGAMENTOS_STG PG2
WHERE TI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY PG2.SIS_ORIGEM,
PG2.ID_PARCELAMENTO,
HAVING COUNT(1) > 1) TI2
WHERE PG1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND PG1.NO_PARCELA = PG2.NO_PARCELA
AND PG1.ID_PARCELAMENTO = PG2.ID_PARCELAMENTO'
FROM GESTAOCARGAS.PAGAMENTOS_STG PG1,
(SELECT ID_PARCELAMENTO,
NO_PARCELA,
MAX(ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.PAGAMENTOS_STG PG2
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY NO_PARCELA, ID_PARCELAMENTO
HAVING COUNT(1) > 1) PG2
WHERE PG1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND PG1.NO_PARCELA = PG2.NO_PARCELA
AND PG1.ID_PARCELAMENTO = PG2.ID_PARCELAMENTO
AND PG1.ID_REGISTRO <> PG2.ID_REGISTRO;

UPDATE (SELECT PG1.ID_REGISTRO,


PG1.FL_DUPLICIDADE,
PG1.ST_PROCESSAMENTO,
PG1.TP_PAGAMENTO,
case
when PG1.T_02_NO_LOTE_RETORNO =
(select T_02_NO_LOTE_RETORNO
from GESTAOCARGAS.PAGAMENTOS_STG p3
where p3.id_registro = PG2.id_registro) then
1
else
0
end as Duplicado
FROM GESTAOCARGAS.PAGAMENTOS_STG PG1,
(SELECT NO_PARCELA,
ID_PARCELAMENTO,
MAX(ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.PAGAMENTOS_STG PG2
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY NO_PARCELA, ID_PARCELAMENTO
HAVING COUNT(1) > 1) PG2
WHERE PG1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND PG1.NO_PARCELA = PG2.NO_PARCELA
AND PG1.ID_PARCELAMENTO = PG2.ID_PARCELAMENTO
AND PG1.ID_REGISTRO <> PG2.ID_REGISTRO)
SET FL_DUPLICIDADE = 'S',
ST_PROCESSAMENTO = CASE
WHEN UPPER(TP_PAGAMENTO) = 'CREDIT' THEN
-1
WHEN Duplicado = 1 THEN
90
ELSE
ST_PROCESSAMENTO
END;

UPDATE (SELECT PG1.ID_REGISTRO,


PG1.FL_DUPLICIDADE,
PG1.ST_PROCESSAMENTO,
PG1.TP_PAGAMENTO,
case
when PG1.T_02_NO_LOTE_RETORNO = PG2.T_02_NO_LOTE_RETORNO then
1
else
0
end as Duplicado
FROM GESTAOCARGAS.PAGAMENTOS_STG PG1,
GESTAOCARGAS.PAGAMENTOS_OUT PG2
WHERE PG1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND PG1.NO_PARCELA = PG2.NO_PARCELA
AND PG1.ID_PARCELAMENTO = PG2.ID_PARCELAMENTO)
SET FL_DUPLICIDADE = 'S',
ST_PROCESSAMENTO = CASE
WHEN UPPER(TP_PAGAMENTO) = 'CREDIT' THEN
-1
WHEN Duplicado = 1 THEN
90
ELSE
ST_PROCESSAMENTO
END;

COMMIT;

V_CURSOR_INT := GET_PAGAMENTOS_DUPLICADOS(P_IDPROCESSAMENTO =>


P_IDPROCESSAMENTO);

-- Percorrendo o cursor
FETCH V_CURSOR_INT BULK COLLECT
INTO V_LIST_DADOS_DUPLICADOS LIMIT V_LIMITE;

IF V_LIST_DADOS_DUPLICADOS.COUNT > 0 THEN


FOR V_INDICE IN V_LIST_DADOS_DUPLICADOS.FIRST .. V_LIST_DADOS_DUPLICADOS.LAST
LOOP

SELECT COUNT(1) INTO V_QTD_PAGAMENTOS FROM GESTAOCARGAS.PAGAMENTOS_STG P


WHERE P.ID_PARCELAMENTO = V_LIST_DADOS_DUPLICADOS(V_INDICE).ID_PARCELAMENTO
AND P.NO_PARCELA = V_LIST_DADOS_DUPLICADOS(V_INDICE).NO_PARCELA;

IF V_QTD_PAGAMENTOS = 0 THEN
UPDATE GESTAOCARGAS.PAGAMENTOS_STG T1
SET T1.NO_PARCELA = V_LIST_DADOS_DUPLICADOS(V_INDICE).NO_PARCELA,
T1.FL_DUPLICIDADE = 'N',
T1.ST_PROCESSAMENTO = 1,
T1.DT_MODIFICACAO = SYSDATE,
T1.US_MODIFICACAO = 'KROTON'
WHERE ROWID = V_LIST_DADOS_DUPLICADOS(V_INDICE).ROW_ID;

COMMIT;
ELSE
DELETE FROM GESTAOCARGAS.PAGAMENTOS_STG P
WHERE ROWID = V_LIST_DADOS_DUPLICADOS(V_INDICE).ROW_ID;

UPDATE GESTAOCARGAS.GC_PAYMENT_BILLING_INT GC
SET GC.ST_PROCESSAMENTO = 1,
GC.DT_MODIFICACAO = SYSDATE,
GC.US_MODIFICACAO = 'KROTON'
WHERE GC.ID_REGISTRO = V_LIST_DADOS_DUPLICADOS(V_INDICE).ID_REGISTRO;

COMMIT;
END IF;
END LOOP;
END IF;

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de Pagamentos';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
PAGAMENTOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_PAGAMENTO_DUPLICIDADE;

PROCEDURE SP_ATU_PAGAMENTO_CANCELADO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';
UPDATE GESTAOCARGAS.PAGAMENTOS_OUT P
SET FL_DUPLICIDADE = 'S'
WHERE EXISTS (SELECT 1
FROM GESTAOCARGAS.ACERTO_OUT A
WHERE UPPER(A.ST_PARCELAMENTO) = 'CANCELLED'
AND P.ID_PARCELAMENTO = A.ID_PARCELAMENTO)
AND P.TP_PAGAMENTO != 'Back Office'
AND (ID_PARCELAMENTO, NO_PARCELA) IN
(SELECT ID_PARCELAMENTO, NO_PARCELA
FROM GESTAOCARGAS.PAGAMENTOS_STG
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO);

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação dos dados de Pagamentos Canelados';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
SP_ATU_PAGAMENTO_CANCELADO ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_ATU_PAGAMENTO_CANCELADO;

PROCEDURE SP_VAL_PAGAMENTO_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
P_OK VARCHAR2(1);
P_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
P_OK := 'S';
P_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
TIT.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('PAGAMENTO'),
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_INT ACC
WHERE ACC.ID_PARCELAMENTO = TIT.ID_PARCELAMENTO)'
FROM GESTAOCARGAS.PAGAMENTOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_INT ACC
WHERE ACC.ID_PARCELAMENTO = TIT.ID_PARCELAMENTO);

EXCEPTION
WHEN OTHERS THEN
P_OK := 'N';
P_RETORNO := 'Erro na validação de registros orfãos de PAGAMENTOS';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => sysdate,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
PAGAMENTOS_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => v_idlog,
P_OK => p_ok,
P_RETORNO => p_retorno);
END SP_VAL_PAGAMENTO_ORFAO;

-----------------------------------------------------------------------------------
-----------------------
-- ENDREGION : VALIDACAO
-- OBJETIVO: SUBSISTEMA RAID
-- EQUIPE : EAGLES - PI10.SP03

-----------------------------------------------------------------------------------
-----------------------

PROCEDURE PROCESSA_RETORNO_RAID IS
V_ID_PROCESSAMENTO INT;
V_ID_LOG INT;
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_ID_REGRA INT;
V_QTD NUMBER(10);
BEGIN

SP_INTEGRA_SISTEMA(P_CDSISTEMA => 'RAID',


P_CD_TIPOINFORMACAO => 'PARCELA',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

SELECT IDREGRA
INTO V_ID_REGRA
FROM GESTAOCARGAS.REGRA
WHERE NMPROCEDURE = 'SP_INT_ACERTO';

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.GC_AGREEMENT_DETAIL_INT
WHERE ST_PROCESSAMENTO = 1;
IF (V_QTD > 0) THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO,
P_IDREGRA => V_ID_REGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'PROCESSANDO',
P_DESCRICAO => 'EXECUÇÃO DA
PROCESSA_RETORNO_RAID',
P_COMMIT => 'N',
P_IDLOG => V_ID_LOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

UPDATE GESTAOCARGAS.GC_AGREEMENT_DETAIL_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, ST_PROCESSAMENTO = 0
WHERE ST_PROCESSAMENTO = 1;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.GC_AGREEMENT_BILL_INT
WHERE ST_PROCESSAMENTO = 1;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => 'RAID',
P_CD_TIPOINFORMACAO => 'FATURAPARCELAMENTO',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.GC_AGREEMENT_BILL_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, ST_PROCESSAMENTO = 0
WHERE ST_PROCESSAMENTO = 1;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.GC_AGREEMENT_INT
WHERE ST_PROCESSAMENTO = 1;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => 'RAID',
P_CD_TIPOINFORMACAO => 'PARCELAMENTO',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.GC_AGREEMENT_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, ST_PROCESSAMENTO = 0
WHERE ST_PROCESSAMENTO = 1;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.GC_PAYMENT_BILLING_INT
WHERE ST_PROCESSAMENTO = 1;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => 'KROTONPAY',
P_CD_TIPOINFORMACAO => 'PAGAMENTO',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.GC_PAYMENT_BILLING_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, ST_PROCESSAMENTO = 0
WHERE ST_PROCESSAMENTO = 1;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.PEP_INT
WHERE ID_PROCESSAMENTO IS NULL;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => 'CONVENIOPEP',
P_CD_TIPOINFORMACAO => 'CONTRATOPEP',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.PEP_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, DT_ATUALIZACAO = SYSDATE
WHERE ID_PROCESSAMENTO IS NULL;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;
-- CASO EXISTA ALGUM ACORDO QUE NÃO CHEGOU NAS TAELAS OUT, MARCA PARA PROXIMO
PROCESSAMENTO;
FOR REG IN (SELECT ID_PARCELAMENTO
FROM GESTAOCARGAS.GC_AGREEMENT_INT G
WHERE ID_PROCESSAMENTO IS NOT NULL
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.ACERTO_OUT A
WHERE A.ID_PARCELAMENTO = G.ID_PARCELAMENTO)) LOOP

UPDATE GESTAOCARGAS.GC_AGREEMENT_BILL_INT G
SET ID_PROCESSAMENTO = NULL, ST_PROCESSAMENTO = 1
WHERE ID_PARCELAMENTO = REG.ID_PARCELAMENTO;

END LOOP;
COMMIT;

FOR REG IN (SELECT ID_PARCELAMENTO


FROM GESTAOCARGAS.GC_AGREEMENT_DETAIL_INT G
WHERE ID_PROCESSAMENTO IS NOT NULL
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.NOVAS_OUT A
WHERE A.ID_PARCELAMENTO = G.ID_PARCELAMENTO)) LOOP

UPDATE GESTAOCARGAS.GC_AGREEMENT_DETAIL_INT G
SET ID_PROCESSAMENTO = NULL, ST_PROCESSAMENTO = 1
WHERE ID_PARCELAMENTO = REG.ID_PARCELAMENTO;

END LOOP;
COMMIT;

FOR REG IN (SELECT ID_PARCELAMENTO


FROM GESTAOCARGAS.GC_AGREEMENT_BILL_INT G
WHERE ID_PROCESSAMENTO IS NOT NULL
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.ORIGINAIS_OUT A
WHERE A.ID_PARCELAMENTO = G.ID_PARCELAMENTO)) LOOP

UPDATE GESTAOCARGAS.GC_AGREEMENT_BILL_INT G
SET ID_PROCESSAMENTO = NULL, ST_PROCESSAMENTO = 1
WHERE ID_PARCELAMENTO = REG.ID_PARCELAMENTO;

END LOOP;
COMMIT;

DECLARE
BEGIN
FOR REG IN (SELECT G.ID_PARCELAMENTO
FROM GESTAOCARGAS.GC_AGREEMENT_INT G,
GESTAOCARGAS.ACERTO_OUT A
WHERE ID_PROCESSAMENTO IS NOT NULL
AND A.ID_PARCELAMENTO = G.ID_PARCELAMENTO
AND G.ST_PARCELAMENTO != A.ST_PARCELAMENTO) LOOP

UPDATE GESTAOCARGAS.GC_AGREEMENT_INT G
SET ID_PROCESSAMENTO = NULL, ST_PROCESSAMENTO = 1
WHERE ID_PARCELAMENTO = REG.ID_PARCELAMENTO;
END LOOP;
COMMIT;
END;

SP_LOG_TERMINO_PROCESSO(P_IDLOG => V_ID_LOG,


P_DTFIM => SYSDATE,
P_STATUSPROCESSAMENTO => 'FINALIZADO',
P_COMMIT => 'N',
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END PROCESSA_RETORNO_RAID;

PROCEDURE SP_INSERE_PEP_INT(P_ID_PROCESSAMENTO IN
GESTAOCARGAS.PEP_INT.ID_PROCESSAMENTO%TYPE,
P_CD_UNIDADE IN
GESTAOCARGAS.PEP_INT.CD_UNIDADE%TYPE,
P_CD_ALUNO IN
GESTAOCARGAS.PEP_INT.CD_ALUNO%TYPE,
P_CD_ESPECIALIDADE IN
GESTAOCARGAS.PEP_INT.CD_ESPECIALIDADE%TYPE,
P_RA_COB IN
GESTAOCARGAS.PEP_INT.RA_COB%TYPE,
P_DS_BOLETAGEM IN
GESTAOCARGAS.PEP_INT.DS_BOLETAGEM%TYPE,
P_CD_ORIGEM_PEP IN
GESTAOCARGAS.PEP_INT.CD_ORIGEM_PEP%TYPE,
P_NM_SAFRA IN
GESTAOCARGAS.PEP_INT.NM_SAFRA%TYPE,
P_CD_PRODUTO IN
GESTAOCARGAS.PEP_INT.CD_PRODUTO%TYPE,
P_CD_SISTEMA_ORIGEM IN
GESTAOCARGAS.PEP_INT.CD_SISTEMA_ORIGEM%TYPE,
P_IC_CONTRATO_ASSINADO IN
GESTAOCARGAS.PEP_INT.IC_CONTRATO_ASSINADO%TYPE,
P_IC_PAGAMENTO_POS_FORMATURA IN
GESTAOCARGAS.PEP_INT.IC_PAGAMENTO_POS_FORMATURA%TYPE,
P_CD_STATUS IN
GESTAOCARGAS.PEP_INT.CD_STATUS%TYPE,
P_DS_DEFINICAO IN
GESTAOCARGAS.PEP_INT.DS_DEFINICAO%TYPE,
P_IC_ACEITE IN
GESTAOCARGAS.PEP_INT.IC_ACEITE%TYPE,
P_NM_MES_EVASAO IN
GESTAOCARGAS.PEP_INT.NM_MES_EVASAO%TYPE,
P_CD_SITUACAO_ALUNO IN
GESTAOCARGAS.PEP_INT.CD_SITUACAO_ALUNO%TYPE,
P_IC_MGP_EVADIDO IN
GESTAOCARGAS.PEP_INT.IC_MGP_EVADIDO%TYPE,
P_DT_INCLUSAO IN
GESTAOCARGAS.PEP_INT.DT_INCLUSAO%TYPE,
P_DT_ATUALIZACAO IN
GESTAOCARGAS.PEP_INT.DT_ATUALIZACAO%TYPE) IS
BEGIN

INSERT INTO GESTAOCARGAS.PEP_INT


(ID_PROCESSAMENTO,
CD_UNIDADE,
CD_ALUNO,
CD_ESPECIALIDADE,
RA_COB,
DS_BOLETAGEM,
CD_ORIGEM_PEP,
NM_SAFRA,
CD_PRODUTO,
CD_SISTEMA_ORIGEM,
IC_CONTRATO_ASSINADO,
IC_PAGAMENTO_POS_FORMATURA,
CD_STATUS,
DS_DEFINICAO,
IC_ACEITE,
NM_MES_EVASAO,
CD_SITUACAO_ALUNO,
IC_MGP_EVADIDO,
DT_INCLUSAO,
DT_ATUALIZACAO)
VALUES
(P_ID_PROCESSAMENTO,
P_CD_UNIDADE,
P_CD_ALUNO,
P_CD_ESPECIALIDADE,
P_RA_COB,
P_DS_BOLETAGEM,
P_CD_ORIGEM_PEP,
P_NM_SAFRA,
P_CD_PRODUTO,
P_CD_SISTEMA_ORIGEM,
P_IC_CONTRATO_ASSINADO,
P_IC_PAGAMENTO_POS_FORMATURA,
P_CD_STATUS,
P_DS_DEFINICAO,
P_IC_ACEITE,
P_NM_MES_EVASAO,
P_CD_SITUACAO_ALUNO,
P_IC_MGP_EVADIDO,
P_DT_INCLUSAO,
P_DT_ATUALIZACAO);

END SP_INSERE_PEP_INT;

-----------------------------------------------------------------------------------
------------------------
-- Atualiza a natureza de rematricula para colaborar
--
PROCEDURE SP_ATU_FATURA_NATUREZA_REMAT(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE)
AS
V_OK VARCHAR2(10);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

TYPE TL_ALUNOS_TITULOS IS TABLE OF GESTAOCARGAS.GC_BILL_COMPLEMENTARY


%ROWTYPE;
LISTA_ALUNOS_TITULOS TL_ALUNOS_TITULOS;

CURSOR C_ATUALIZAR_TITULOS IS
WITH TITULOS
AS
(SELECT
TIT.ID_FATURA,
TIT.NO_PARCELA_ACADEMICO,
TIT.NO_MATRICULA_ACADEMICO
FROM GESTAOCARGAS.TITULOS_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.TP_NATUREZA_TITULO = 'MENSALIDADE'
AND TIT.ST_FATURA = 'ABERTO'
AND TIT.SIS_ORIGEM = 'COLABORAR'
AND NOT EXISTS(SELECT 1 FROM GESTAOCARGAS.GC_BILL_COMPLEMENTARY BC
WHERE BC.ID_TITULO = TIT.ID_FATURA)
AND TIT.ID_REGISTRO =
(SELECT MAX(ID_REGISTRO)
FROM GESTAOCARGAS.TITULOS_STG TIT2
WHERE TIT2.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TIT.ID_FATURA = TIT2.ID_FATURA)
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = TIT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = TIT.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO)
)
SELECT * FROM TITULOS;
BEGIN
OPEN C_ATUALIZAR_TITULOS;
LOOP
FETCH C_ATUALIZAR_TITULOS BULK COLLECT
INTO LISTA_ALUNOS_TITULOS LIMIT 10000;
EXIT WHEN LISTA_ALUNOS_TITULOS.COUNT = 0;

BEGIN
FORALL IDX IN INDICES OF LISTA_ALUNOS_TITULOS SAVE EXCEPTIONS
INSERT INTO GESTAOCARGAS.GC_BILL_COMPLEMENTARY VALUES
LISTA_ALUNOS_TITULOS(IDX);

COMMIT;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
SP_ATU_FATURA_NATUREZA_REMAT GC_BILL_COMPLEMENTARY ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END;

END LOOP;

END SP_ATU_FATURA_NATUREZA_REMAT;

PROCEDURE SP_VAL_ACORDO_TEMPORARIO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN

INSERT INTO GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT


(ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_PARCELAMENTO,
ST_PROCESSAMENTO,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO)
SELECT DISTINCT 1,
A.SIS_ORIGEM,
A.ID_PARCELAMENTO,
1,
SYSDATE,
'TEMPORARIO',
SYSDATE,
'KROTON'
FROM GESTAOCARGAS.ACERTO_STG A
WHERE A.ST_PARCELAMENTO IN ('Temporary', 'Approved')
AND A.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND EXISTS
(SELECT 1
FROM GESTAOCARGAS.ACERTO_OUT AC
INNER JOIN GESTAOCARGAS.PAGAMENTOS_OUT P ON AC.ID_PARCELAMENTO =
P.ID_PARCELAMENTO
WHERE P.ST_PROCESSAMENTO IN (1, 0, 70, 2)
AND AC.ID_CONTRATO = A.ID_CONTRATO
AND AC.ID_PARCELAMENTO != A.ID_PARCELAMENTO
AND AC.ST_PARCELAMENTO IN ('Temporary', 'Approved'))
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT C
WHERE A.ID_PARCELAMENTO = C.ID_PARCELAMENTO);

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO
SP_VAL_ACORDO_TEMPORARIO' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_VAL_ACORDO_TEMPORARIO;

PROCEDURE SP_VAL_PAGAMENTO_TEMPORARIO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;

V_TABLE T_TABLE_PAGTO_DUPLICADO;
V_IDS_PARCELAMENTO T_TABLE_ID_PARCELAMENTO;
V_IDS_UPDATE T_TABLE_ID_PARCELAMENTO;
V_INDICE INT;
BEGIN
BEGIN

-- MARCA PAGAMENTOS DUPLICADOS DE ACORDOS TEMPORARY E APPROVED NO MESMO


PROCESSAMENTO PARA GERAÇÃO DE CREDITO
SELECT A_STATUS.ID_CONTRATO,
P.ID_PARCELAMENTO ID_PARCELAMENTO,
DECODE(C.ID_PARCELAMENTO, NULL, 'N', 'S') FL_CANCELADO
BULK COLLECT
INTO V_TABLE
FROM GESTAOCARGAS.PAGAMENTOS_STG P
INNER JOIN GESTAOCARGAS.GC_AGREEMENT_INT A_STATUS
ON A_STATUS.ID_PARCELAMENTO = P.ID_PARCELAMENTO
AND A_STATUS.ST_PARCELAMENTO IN ('Temporary', 'Approved')
LEFT JOIN GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT C
ON P.ID_PARCELAMENTO = C.ID_PARCELAMENTO
WHERE P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_INT A_CONTRATO,
GESTAOCARGAS.PAGAMENTOS_STG P2
WHERE P2.ID_PROCESSAMENTO = P.ID_PROCESSAMENTO
AND A_CONTRATO.ID_CONTRATO = A_STATUS.ID_CONTRATO
AND P2.ID_PARCELAMENTO = A_CONTRATO.ID_PARCELAMENTO
AND A_CONTRATO.ST_PARCELAMENTO IN ('Temporary', 'Approved')
AND A_STATUS.ID_PARCELAMENTO <> A_CONTRATO.ID_PARCELAMENTO);

SELECT MIN(ID_PARCELAMENTO)
BULK COLLECT
INTO V_IDS_PARCELAMENTO
FROM TABLE(V_TABLE) T
WHERE T.FL_CANCELADO <> 'S'
GROUP BY ID_CONTRATO;

SELECT ID_PARCELAMENTO
BULK COLLECT
INTO V_IDS_UPDATE
FROM TABLE(V_TABLE) T
WHERE ID_PARCELAMENTO NOT IN
(SELECT ID_PARCELAMENTO FROM TABLE(V_IDS_PARCELAMENTO));

IF V_IDS_UPDATE.COUNT > 0 THEN


FOR V_INDICE IN V_IDS_UPDATE.FIRST .. V_IDS_UPDATE.LAST LOOP
UPDATE GESTAOCARGAS.PAGAMENTOS_STG
SET FL_DUPLICIDADE = 'S'
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND ID_PARCELAMENTO = V_IDS_UPDATE(V_INDICE).ID_PARCELAMENTO;
END LOOP;
END IF;

-- MARCA PAGAMENTOS DE ACORDOS QUE FOI SOLICITADO CANCELAMENTO COMO "DUPLICADO"


PARA GERAÇÃO DE CREDITO
/* DEAG-11426 - Comentado pois todo pagamento deve descer para os acadêmicos,
cancelado ou não

UPDATE GESTAOCARGAS.PAGAMENTOS_STG P
SET FL_DUPLICIDADE = 'S'
WHERE ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT C
WHERE P.ID_PARCELAMENTO = C.ID_PARCELAMENTO);
*/

-- Se 1 parcela do acordo cancelado estiver paga marca como duplicado


UPDATE GESTAOCARGAS.PAGAMENTOS_STG P
SET FL_DUPLICIDADE = 'S'
WHERE P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND EXISTS (SELECT 1
FROM GESTAOCARGAS.ACERTO_OUT A
WHERE UPPER(A.ST_PARCELAMENTO) = 'CANCELLED'
AND P.ID_PARCELAMENTO = A.ID_PARCELAMENTO)
AND P.TP_PAGAMENTO != 'Back Office'
AND P.NO_PARCELA = 1
AND EXISTS (SELECT 1 FROM GESTAOCARGAS.PAGAMENTOS_OUT P_OUT
WHERE P_OUT.ID_PARCELAMENTO = P.ID_PARCELAMENTO
and P_OUT.NO_PARCELA = P.NO_PARCELA);

/*
-- Passa pagamento para a parcela aberta mais baixa
UPDATE (SELECT
(SELECT MIN(NO_PARCELA)
FROM GESTAOCARGAS.GC_BILL GC
WHERE GC.ID_PARCELAMENTO = P.ID_PARCELAMENTO
AND GC.ST_TITULO = 'ABERTO') MENOR_PARCELA_ABERTA,
P.NO_PARCELA PARCELA_SENDO_PAGA,
P.*
FROM GESTAOCARGAS.PAGAMENTOS_STG P
WHERE P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND P.FL_DUPLICIDADE = 'N'
AND EXISTS (SELECT 1
FROM GESTAOCARGAS.ACERTO_OUT A
WHERE UPPER(A.ST_PARCELAMENTO) IN ('CANCELLED', 'APPROVED',
'PAYMENT')
AND P.ID_PARCELAMENTO = A.ID_PARCELAMENTO)
AND P.TP_PAGAMENTO != 'Back Office'
AND P.NO_PARCELA > 1)
SET PARCELA_SENDO_PAGA = MENOR_PARCELA_ABERTA
WHERE MENOR_PARCELA_ABERTA IS NOT NULL
AND PARCELA_SENDO_PAGA <> MENOR_PARCELA_ABERTA;
*/

-- Passa pagamento para a parcela aberta mais baixa


FOR PAGAMENTO IN (SELECT *
FROM (SELECT (SELECT MAX(NO_PARCELA)
FROM GESTAOCARGAS.GC_BILL GC
WHERE GC.ID_PARCELAMENTO =
P.ID_PARCELAMENTO
AND GC.ST_TITULO = 'ABERTO')
MAIOR_PARCELA_ABERTA,
((SELECT MIN(NO_PARCELA)
FROM GESTAOCARGAS.GC_BILL GC
WHERE GC.ID_PARCELAMENTO =
P.ID_PARCELAMENTO
AND GC.ST_TITULO = 'ABERTO') +
(Dense_rank()
OVER(PARTITION BY P.ID_PARCELAMENTO ORDER BY
P.No_Parcela) - 1)) MENOR_PARCELA_ABERTA,
P.NO_PARCELA PARCELA_SENDO_PAGA,
P.*
FROM GESTAOCARGAS.PAGAMENTOS_STG P
WHERE P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND P.FL_DUPLICIDADE = 'N'
AND P.TP_PAGAMENTO != 'Back Office'
AND EXISTS (SELECT 1
FROM GESTAOCARGAS.ACERTO_OUT A
WHERE UPPER(A.ST_PARCELAMENTO) IN
('APPROVED', 'PAYMENT',
'CANCELLED')
AND P.ID_PARCELAMENTO =
A.ID_PARCELAMENTO)
AND P.NO_PARCELA > 1)
WHERE MENOR_PARCELA_ABERTA IS NOT NULL
AND MENOR_PARCELA_ABERTA <= MAIOR_PARCELA_ABERTA
AND PARCELA_SENDO_PAGA > MENOR_PARCELA_ABERTA) LOOP

UPDATE GESTAOCARGAS.PAGAMENTOS_STG
SET NO_PARCELA = PAGAMENTO.MENOR_PARCELA_ABERTA
WHERE ID_REGISTRO = PAGAMENTO.ID_REGISTRO;

END LOOP;

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO
SP_VAL_PAGAMENTO_TEMPORARIO' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END;

BEGIN

-- ENVIA PARA CANCELAMENTO DEMAIS ACORDOS DO MESMO CONTRATO QUE ESTÃO EM ABERTO
INSERT INTO GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT
(ID_PROCESSAMENTO,
SIS_ORIGEM,
ID_PARCELAMENTO,
ST_PROCESSAMENTO,
DT_CRIACAO,
US_CRIACAO,
DT_MODIFICACAO,
US_MODIFICACAO)
SELECT DISTINCT 1,
A_CONTRATO.SIS_ORIGEM,
A_CONTRATO.ID_PARCELAMENTO,
1,
SYSDATE,
'TEMPORARIO2',
SYSDATE,
'KROTON'
FROM GESTAOCARGAS.PAGAMENTOS_STG P
JOIN GESTAOCARGAS.GC_AGREEMENT_INT A_STATUS
ON A_STATUS.ID_PARCELAMENTO = P.ID_PARCELAMENTO
JOIN GESTAOCARGAS.GC_AGREEMENT_INT A_CONTRATO
ON A_CONTRATO.ID_CONTRATO = A_STATUS.ID_CONTRATO
LEFT JOIN GESTAOCARGAS.PAGAMENTOS_STG P2
ON P2.ID_PARCELAMENTO = A_CONTRATO.ID_PARCELAMENTO
WHERE A_STATUS.ST_PARCELAMENTO IN ('Temporary', 'Approved')
AND A_CONTRATO.ST_PARCELAMENTO IN ('Temporary', 'Approved')
AND A_STATUS.ID_PARCELAMENTO <> A_CONTRATO.ID_PARCELAMENTO
AND P.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND (P2.ID_REGISTRO IS NULL OR P2.FL_DUPLICIDADE = 'S')
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.GC_AGREEMENT_TO_CANCEL_INT C
WHERE C.ID_PARCELAMENTO = P2.ID_PARCELAMENTO);

EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO AO CANCELAR PAGAMENTO
PAGAMENTOS_STG' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END;
END SP_VAL_PAGAMENTO_TEMPORARIO;

FUNCTION GET_TITULOS_DETAIL(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE)
RETURN TCURSOR IS
V_CURSOR TCURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT GESTAOCARGAS.TP_TITULOS_DETAIL_STG(ID_REGISTRO =>
TD.ID_REGISTRO,
ID_PROCESSAMENTO =>
TD.ID_PROCESSAMENTO,
ID_TITULO =>
T.ID_TITULO,
NU_TITULO =>
TD.NU_TITULO,
ID_ITEM =>
TD.ID_ITEM,
DS_ITEM => CASE
WHEN
REGEXP_SUBSTR(TD.DS_ITEM, '(\S*)(\s)+(\D)(\d)') = REGEXP_SUBSTR(TD.DS_ITEM, '(\S*)
(\s)+(\D)(\d)')
AND
LENGTH(REGEXP_SUBSTR(TD.DS_ITEM, '(\S*)(\s)+(\D)(\d)')) > 11 THEN

'Juros/Multa'
ELSE

TD.DS_ITEM
END,
VL_LIQUIDO =>
TD.VL_LIQUIDO,
DT_CADASTRO =>
TD.DT_CADASTRO,
DT_MODIFICACAO_ORIGEM =>
TD.DT_MODIFICACAO_ORIGEM,
ST_PROCESSAMENTO =>
TD.ST_PROCESSAMENTO,
US_CRIACAO =>
TD.US_CRIACAO,
US_MODIFICACAO =>
TD.US_MODIFICACAO,
DT_PROCESSAMENTO =>
TD.DT_PROCESSAMENTO,
SIS_ORIGEM =>
TD.SIS_ORIGEM,
VL_DEDUCOES =>
TD.VL_DEDUCOES,
DESC_DEDUCOES =>
TD.DESC_DEDUCOES)
FROM GESTAOCARGAS.TITULOS_DETAIL_INT TD
INNER JOIN GESTAOCARGAS.GC_BILL T
ON T.NO_TITULO = TD.NU_TITULO
AND T.ID_TITULO LIKE TD.SIS_ORIGEM || '%'
AND T.NATUREZA_TITULO != 'ACORDO RAID'
WHERE TD.ID_PROCESSAMENTO = P_IDPROCESSAMENTO;

RETURN V_CURSOR;
END GET_TITULOS_DETAIL;

PROCEDURE SP_INT_TITULOS_DETAIL(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) IS
V_CURSOR_TIT TCURSOR;
V_LISTA_TIT GESTAOCARGAS.TL_TITULOS_DETAIL_STG;
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
BEGIN
V_CURSOR_TIT := GET_TITULOS_DETAIL(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO);
LOOP
FETCH V_CURSOR_TIT BULK COLLECT
INTO V_LISTA_TIT LIMIT FL_BULK_LIMIT;
EXIT WHEN V_LISTA_TIT.COUNT = 0;
INSERIR_TITULOS_DETAIL(P_LISTA_TITULOS_DETAIL => V_LISTA_TIT,
P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'ERRO NA INTEGRAÇÃO DE
TITULOS_DETAIL_INT -> TITULOS_DETAIL_STG: ' ||
SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END;
END SP_INT_TITULOS_DETAIL;
PROCEDURE INSERIR_TITULOS_DETAIL(P_LISTA_TITULOS_DETAIL IN
GESTAOCARGAS.TL_TITULOS_DETAIL_STG,
P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) IS
TYPE TP_LISTA IS TABLE OF GESTAOCARGAS.TITULOS_DETAIL_STG%ROWTYPE;
V_LISTA_TITULOS_DETAIL TP_LISTA := TP_LISTA();
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
SELECT ID_REGISTRO,
ID_PROCESSAMENTO,
ID_TITULO,
ID_ITEM,
VL_LIQUIDO,
DT_CADASTRO,
DT_MODIFICACAO_ORIGEM,
ST_PROCESSAMENTO,
US_CRIACAO,
US_MODIFICACAO,
DT_PROCESSAMENTO,
SIS_ORIGEM,
NU_TITULO,
DS_ITEM,
VL_DEDUCOES,
DESC_DEDUCOES
BULK COLLECT
INTO V_LISTA_TITULOS_DETAIL
FROM TABLE(P_LISTA_TITULOS_DETAIL) A;

FORALL I IN INDICES OF P_LISTA_TITULOS_DETAIL SAVE EXCEPTIONS


INSERT INTO GESTAOCARGAS.TITULOS_DETAIL_STG
VALUES V_LISTA_TITULOS_DETAIL
(I);

COMMIT;
EXCEPTION
WHEN P_DML_ERROR THEN
FOR I IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
BEGIN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'INTEGRADOR',
P_DESCRICAO => 'Erro ao inserir
TITULOS_DETAIL_STG Id_Fatura: ' || P_LISTA_TITULOS_DETAIL(I).ID_TITULO ||
' ID_ITEM: ' ||
P_LISTA_TITULOS_DETAIL(I).ID_ITEM ||
' - ' || SQL
%BULK_EXCEPTIONS(I).ERROR_CODE ||
' - ' ||
SQLERRM(SQL
%BULK_EXCEPTIONS(I).ERROR_CODE) ||
' - ' || SQLERRM ||
CHR(13) || ' - ' ||

SYS.DBMS_UTILITY.FORMAT_CALL_STACK,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END;
END LOOP;
END INSERIR_TITULOS_DETAIL;

PROCEDURE SP_VAL_TITULOS_DETAIL_DUPLICID(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
V_OK := 'S';
V_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
TI1.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_DUPLICACAO,
ERRO_VALIDACAO,
'TI1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TI1.ID_ITEM = TI2.ID_ITEM
AND TI1.ID_TITULO = TI2.ID_TITULO
AND TI1.ID_REGISTRO <> TI2.ID_REGISTRO'
FROM GESTAOCARGAS.TITULOS_DETAIL_STG TI1,
(SELECT TI.ID_ITEM,
TI.ID_TITULO,
MAX(TI.ID_REGISTRO) ID_REGISTRO
FROM GESTAOCARGAS.TITULOS_DETAIL_STG TI
WHERE TI.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
GROUP BY TI.ID_ITEM, TI.ID_TITULO
HAVING COUNT(1) > 1) TI2
WHERE TI1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND TI1.ID_ITEM = TI2.ID_ITEM
AND TI1.ID_TITULO = TI2.ID_TITULO
AND TI1.ID_REGISTRO <> TI2.ID_REGISTRO;

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação de duplicidade dos detalhes dos titulos SAP';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
TITULOS_DETAIL_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_VAL_TITULOS_DETAIL_DUPLICID;

PROCEDURE SP_VAL_TITULOS_DETAIL_ORFAO(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN
GESTAOCARGAS.REGRA.IDREGRA%TYPE) AS
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_IDLOG NUMBER;
BEGIN
V_OK := 'S';
V_RETORNO := '';

INSERT INTO GESTAOCARGAS.LOGVALIDACAO


(ID_PROCESSAMENTO,
ID_REGISTRO,
IDREGRA,
IDTIPOINFORMACAO,
TIPOVALIDACAO,
CRITICIDADE,
FILTROUSADO)
SELECT P_IDPROCESSAMENTO,
TI1.ID_REGISTRO,
P_IDREGRA,
GET_IDTIPOINFORMACAO('FATURA'),
TP_VAL_REGISTRO_ORFAO,
ERRO_VALIDACAO,
'TI1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.GC_BILL GC
WHERE GC.NO_TITULO = TI1.ID_TITULO
AND GC.ID_CLIENTE LIKE ''SAP% '')'
FROM GESTAOCARGAS.TITULOS_DETAIL_STG TI1
WHERE TI1.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS (SELECT 1
FROM GESTAOCARGAS.GC_BILL GC
WHERE GC.ID_TITULO = TI1.ID_TITULO
AND GC.ID_CLIENTE LIKE 'SAP%');

EXCEPTION
WHEN OTHERS THEN
V_OK := 'N';
V_RETORNO := 'Erro na validação de duplicidade dos detalhes dos titulos SAP';
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'VALIDADOR',
P_DESCRICAO => 'Erro ao VALIDAR
TITULOS_DETAIL_STG ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

END SP_VAL_TITULOS_DETAIL_ORFAO;

PROCEDURE SP_ATU_TITULOS_DETAIL(P_IDPROCESSAMENTO IN
GESTAOCARGAS.PROCESSAMENTO.IDPROCESSAMENTO%TYPE,
P_IDREGRA IN GESTAOCARGAS.REGRA.IDREGRA
%TYPE) AS
V_OK VARCHAR2(10);
V_RETORNO VARCHAR2(2000);
V_IDLOG NUMBER;
BEGIN

MERGE INTO GESTAOCARGAS.GC_BILL_ITEM ITEM


USING (SELECT TIT.*
FROM GESTAOCARGAS.TITULOS_DETAIL_STG TIT
WHERE TIT.ID_PROCESSAMENTO = P_IDPROCESSAMENTO
AND NOT EXISTS
(SELECT 1
FROM GESTAOCARGAS.LOGVALIDACAO LV
WHERE LV.ID_PROCESSAMENTO = TIT.ID_PROCESSAMENTO
AND LV.ID_REGISTRO = TIT.ID_REGISTRO
AND LV.CRITICIDADE = ERRO_VALIDACAO)) TI
ON (ITEM.ID_TITULO = TI.ID_TITULO AND ITEM.ID_ITEM = TI.ID_ITEM)
WHEN MATCHED THEN
UPDATE
SET ITEM.DS_ITEM = TI.DS_ITEM,
ITEM.VL_LIQUIDO = TI.VL_LIQUIDO,
ITEM.NU_TITULO = TI.NU_TITULO,
ITEM.DT_CADASTRO = TI.DT_CADASTRO,
ITEM.DT_MODIFICACAO_ORIGEM = TI.DT_MODIFICACAO_ORIGEM,
ITEM.DT_MODIFICACAO = SYSDATE,
ITEM.US_MODIFICACAO = V_USR_KROTON
WHERE ITEM.ID_TITULO = TI.ID_TITULO
AND ITEM.ID_ITEM = TI.ID_ITEM
WHEN NOT MATCHED THEN
INSERT
(ITEM.ID_TITULO,
ITEM.NU_TITULO,
ITEM.ID_ITEM,
ITEM.DS_ITEM,
ITEM.VL_LIQUIDO,
ITEM.DT_CADASTRO,
ITEM.DT_MODIFICACAO_ORIGEM,
ITEM.DT_CRIACAO,
ITEM.US_CRIACAO,
ITEM.DT_MODIFICACAO,
ITEM.US_MODIFICACAO)
VALUES
(TI.ID_TITULO,
TI.NU_TITULO,
TI.ID_ITEM,
TI.DS_ITEM,
TI.VL_LIQUIDO,
TI.DT_CADASTRO,
TI.DT_MODIFICACAO_ORIGEM,
SYSDATE,
V_USR_KROTON,
SYSDATE,
V_USR_KROTON);
EXCEPTION
WHEN OTHERS THEN
SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => P_IDPROCESSAMENTO,
P_IDREGRA => P_IDREGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'ATUALIZADOR',
P_DESCRICAO => 'Erro ao ATUALIZAR
SP_ATU_TITULOS_DETAIL GC_BILL_ITEM ' ||
' - ' || SQLERRM,
P_COMMIT => 'N',
P_IDLOG => V_IDLOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);
END SP_ATU_TITULOS_DETAIL;

PROCEDURE ENVIO_RAID(SISTEMA IN VARCHAR2, RETORNO OUT VARCHAR2) IS


V_ID_PROCESSAMENTO INT;
V_ID_LOG INT;
V_OK VARCHAR2(1);
V_RETORNO VARCHAR2(100);
V_ID_REGRA INT;
V_QTD NUMBER(10);
BEGIN

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.CLIENTES_INT
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => SISTEMA,
P_CD_TIPOINFORMACAO => 'CLIENTE',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

SELECT IDREGRA
INTO V_ID_REGRA
FROM GESTAOCARGAS.REGRA
WHERE NMPROCEDURE = 'SP_INT_CLIENTE';

SP_LOG_INICIO_PROCESSO(P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO,


P_IDREGRA => V_ID_REGRA,
P_DTINICIO => SYSDATE,
P_STATUSPROCESSAMENTO => 'PROCESSANDO',
P_DESCRICAO => 'EXECUÇÃO DA ENVIO_RAID ' ||
SISTEMA,
P_COMMIT => 'N',
P_IDLOG => V_ID_LOG,
P_OK => V_OK,
P_RETORNO => V_RETORNO);

UPDATE GESTAOCARGAS.CLIENTES_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;
CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.CONTRATOS_INT
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => SISTEMA,
P_CD_TIPOINFORMACAO => 'CONTRATO',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.CONTRATOS_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.CONTATOS_INT
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => SISTEMA,
P_CD_TIPOINFORMACAO => 'CONTATO',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.CONTATOS_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.TITULOS_INT
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => SISTEMA,
P_CD_TIPOINFORMACAO => 'FATURA',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.TITULOS_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, ST_PROCESSAMENTO = 1
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;
CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

SELECT COUNT(1)
INTO V_QTD
FROM GESTAOCARGAS.TITULOS_DETAIL_INT
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

IF (V_QTD > 0) THEN


SP_INTEGRA_SISTEMA(P_CDSISTEMA => SISTEMA,
P_CD_TIPOINFORMACAO => 'DETALHEFATURA',
P_DTINTEGRACAO => SYSDATE,
P_IDPROCESSAMENTO => V_ID_PROCESSAMENTO);

UPDATE GESTAOCARGAS.TITULOS_DETAIL_INT
SET ID_PROCESSAMENTO = V_ID_PROCESSAMENTO, ST_PROCESSAMENTO = 1
WHERE SIS_ORIGEM LIKE '%' || SISTEMA || '%'
AND ID_PROCESSAMENTO IS NULL;

CONTROLADORA(V_ID_PROCESSAMENTO);
END IF;

FOR REG IN (SELECT T.CDTIPOINFORMACAO, P.IDPROCESSAMENTO


FROM GESTAOCARGAS.PROCESSAMENTO P
INNER JOIN GESTAOCARGAS.TIPOINFORMACAO T
ON T.IDTIPOINFORMACAO = P.IDTIPOINFORMACAO
INNER JOIN GESTAOCARGAS.SISTEMAORIGEM S ON S.IDSISTEMA = P.IDSISTEMA
WHERE P.DTINICIO > TRUNC(SYSDATE) - 2
AND S.NMSISTEMA = SISTEMA
AND P.IDTIPOINFORMACAO IN
(SELECT T1.IDTIPOINFORMACAO
FROM GESTAOCARGAS.TIPOINFORMACAO T1
WHERE T1.CDTIPOINFORMACAO IN
('CLIENTE',
'CONTATO',
'CONTRATO',
'FATURA',
'DETALHEFATURA'))
AND NOT EXISTS
/*Se o procedimento não tiver finalizado, processa o dia anterior
- DTFIM = NULL
- STATUSPROCESSAMENTO != 'FINALIZADO'
*/
(SELECT 1
FROM GESTAOCARGAS.LOGPROCESSAMENTO L
WHERE L.IDPROCESSAMENTO = P.IDPROCESSAMENTO
AND L.DTFIM IS NULL
AND L.STATUSPROCESSAMENTO != 'FINALIZADO')
ORDER BY P.IDSISTEMA, P.IDTIPOINFORMACAO, DTINTEGRACAO) LOOP
CONTROLADORA(REG.IDPROCESSAMENTO);

END LOOP;

SP_LOG_TERMINO_PROCESSO(P_IDLOG => V_ID_LOG,


P_DTFIM => SYSDATE,
P_STATUSPROCESSAMENTO => 'FINALIZADO',
P_COMMIT => 'N',
P_OK => V_OK,
P_RETORNO => V_RETORNO);
RETORNO := 'SUCESSO ' || SISTEMA;
EXCEPTION
WHEN OTHERS THEN
SP_LOG_TERMINO_PROCESSO(P_IDLOG => V_ID_LOG,
P_DTFIM => SYSDATE,
P_STATUSPROCESSAMENTO => 'ERRO',
P_COMMIT => 'N',
P_OK => V_OK,
P_RETORNO => V_RETORNO
);
RETORNO := 'ERRO ' || SISTEMA || '-' || SQLERRM;

END ENVIO_RAID;

END MOTOR_DE_REGRAS;

Você também pode gostar