Last active
December 20, 2018 16:56
-
-
Save JRGGRoberto/a4426c470f0cf116d482b13940ed476e to your computer and use it in GitHub Desktop.
Oracle SQL -2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select | |
'.config' doc, | |
case when af.dtliberacao >= t.tp_prms then 1 else 0 end Imprime | |
from tb_prms_glob t, | |
assistfinanc af | |
where | |
t.nm_prms = 'KIT_IMPRESSAO' | |
and af.numcontratoemp = :NUMCONTRATO | |
union | |
select * from | |
(select | |
f.doc, f.Imprime | |
from | |
assistfinanc af | |
inner join averbadora av on af.idaverbadora = av.idaverbadora | |
inner join afprodutor t on af.numcontratoemp = t.numcontratoemp | |
inner join (select col1 Nov_Par, col2 OrgGrupo, col3 Imprime, cd_cod1 Doc, dtini, dtfim | |
from faixas f where f.idtabela = 2103) f on | |
(case av.idgrupo | |
when 1 then 1 | |
when 2 then 2 | |
when 3 then 3 | |
else 5 end ) = f.OrgGrupo | |
where | |
(case t.flgtpvenda | |
when 2 then 1 | |
when 4 then 1 | |
when 3 then 2 | |
end ) = f.Nov_Par and | |
af.numcontratoemp = :NUMCONTRATO and | |
af.dtliberacao between f.dtini and f.dtfim | |
order by f.doc); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE PACKAGE PKG_EPHARMA is | |
-- Author : Roberto Gomes | |
-- Created : 19/10/2018 | |
-- Purpose : Package para exportar dados para envio a E-Pharma | |
Procedure Cria_Registros(V_qntR OUT number); | |
Procedure Apagar_Registros(Id in out number); | |
Procedure Monta_RegsBenef(idReg in number, nomeArq OUT varchar2); | |
Procedure Monta_RegsEnder(idReg in number, nomeArq OUT varchar2); | |
Procedure MontaArquivos(idReg in number, | |
nomeArqB OUT varchar2, | |
nomeArqE OUT varchar2, | |
nomeArqC OUT varchar2); | |
Procedure MarcarComoEnviado(idReg in number); | |
end PKG_EPHARMA; --a | |
/ | |
CREATE OR REPLACE PACKAGE BODY PKG_EPHARMA is | |
codCliente CONSTANT varchar2(6) := '003563'; --'001042'; | |
NomeArq varchar2(21); | |
function PAD (P_Campo varchar2, P_Mask varchar2, P_Tam pls_integer) return varchar2 is | |
Temp varchar2(1500);--(1024); | |
begin | |
if P_Mask = '9' then | |
Temp:= lpad(P_Campo, P_Tam, '0'); | |
else | |
Temp:= RPAD(P_Campo, P_Tam); --Fnc_ColocaBranco(P_Campo, P_Tam); | |
end if; | |
return Temp; | |
end; | |
function dt_formt(P_dt in number) return varchar2 is | |
vn_dtform varchar2(8); | |
begin | |
select REPLACE(FLCN_TO_DATE(P_dt,'YYYYMMDD'),'/', '') into vn_dtform from dual; | |
return vn_dtform; | |
end dt_formt; | |
Function Monta_Header(V_DtArq in varchar2, V_HArq in varchar2 ) | |
RETURN varchar2 is | |
V_LINHA VARCHAR2(160) := ''; | |
seq_Arq number; | |
Begin | |
-- Des cric?es : NomeCampo In Fin Tp Siz Obr Conteudo | |
V_LINHA := '00' || -- 1 Tipo Registro 1 2 9 2 s 00: | |
'0310' || -- 2 Vers?o 3 6 9 4 s constante '0310' | |
'002944' || -- 3 Codigo agregador 7 12 9 6 s constante '002103' | |
seq_Arq || -- 4 Sequencial do arq 13 18 9 6 s | |
V_DtArq || -- 5 Data d Gerac arq 19 28 X 10 s DD/MM/AAAA | |
V_HArq || -- 6 Hora d Gerac arq 29 33 X 5 s HH:MM | |
'C' || -- 7 Tip de Carga 34 34 X 1 s Constante 'C' | |
PAD(' ','X',126) || -- 8 Filer 35 154 X 120 s | |
-- PAD(V_NReg,'9',6) -- 9 Num registro 155 160 9 6 s N seq do reg do arquivo - iniciando em 000001 | |
PAD(1,'9',6) -- 9 Num registro 155 160 9 6 s N seq do reg do arquivo - iniciando em 000001 | |
; | |
return V_LINHA; | |
End; | |
Function Monta_Trailer(V_TotalReg in number)-- , V_NReg in number) | |
RETURN varchar2 is | |
V_LINHA VARCHAR2(160) := ''; | |
Begin | |
-- Des cric?es : NomeCampo In Fin Tp Siz Obr Conteudo | |
V_LINHA := '99' || -- 1 Tipo Registro 1 2 9 2 s Constante '99' | |
PAD(V_TotalReg + 1, '9', 6) || -- 2 Total reg+Head+Tra 3 8 9 6 s Total de registro incluindo Header e Trailer | |
PAD(' ','X',146) || -- 3 Filer 9 154 X 146 s -- vazio | |
PAD(V_TotalReg + 1, '9', 6) -- 4 N seq do reg arq 155 160 9 6 s Numero sequencial do registro no arquivo - | |
; | |
return V_LINHA; | |
End; | |
Procedure Monta_RegsBenef (idReg in number, nomeArq OUT varchar2) is | |
cursor RCursor is | |
select | |
distinct(par.cpf), | |
trim(par.nome) as nome, | |
TO_DATE(par.dtnascimento, 'YYYYMMDD') DTNASC, | |
trim(par.sexo) as sexo, | |
eph.matphar | |
from ta_epharma eph | |
left join participante par on eph.idparticipante = par.idparticipante | |
where | |
eph.ativo = 1 and | |
eph.id_thpharma = idReg | |
; | |
V_LINHA VARCHAR2(255) := ''; | |
V_ARQUIVO UTL_FILE.FILE_TYPE; | |
Y number; | |
dtInicio VARCHAR2(10); | |
V_hora varchar2(5); | |
Begin | |
select | |
to_char(sysdate, 'DD/MM/YYYY'), To_char(sysdate,'hh24:mi') | |
into dtInicio, V_hora | |
from dual; | |
Y := 1; | |
NomeArq := 'P' || codCliente || lpad(idReg, 6, '0') || '.002.txt'; | |
V_ARQUIVO := UTL_FILE.FOPEN('ARQUIVOS', NomeArq, 'W'); | |
--Header | |
V_LINHA := Monta_Header(dtInicio, V_hora); | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
--Conteudo | |
for R in RCursor loop | |
Y := Y + 1; | |
-- Descric?es : NomeCampo In Fin Tp Siz Obr Conteudo | |
V_LINHA := '01' || --01 Tipo Registro 1 2 9 2 s 01 | |
'I' || --02 Ac?o 3 3 X 1 s I inclus?o / A Alterac?o /R Readminss?o | |
codCliente || --03 Codigo cliente 4 9 9 6 s constante 001042 | |
'054501' || --04 Codigo beneficio 10 15 9 6 s zeros a esquerda Constante - '008980' | |
PAD(r.nome,'X',50) || --05 Nome do cliente 16 65 X 50 s | |
PAD(r.matphar,'X',20) ||-- 06 Num da matricula 66 85 X 20 s | |
'00' || --07 Cod d beneficiario 86 87 9 2 s - '00' constante | |
r.dtnasc || --08 Data de nascimento 88 97 X 10 s DD/MM/AAAA | |
' ' || --09 Cod estrutura org 98 111 X 14 n branco | |
r.sexo || --10 sexo 112 112 X 1 s | |
dtInicio || --11 Inicio de vig 113 122 X 10 s Data de envio do arquivo | |
' ' || --12 Termino de vig 123 132 X 10 n branco | |
r.cpf || --13 CPF do benef 133 143 9 11 n | |
' ' || --14 Filer 144 154 X 11 s | |
PAD(Y,'9',6) --15 Num Seq 155 160 9 6 s | |
; | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
end loop; | |
--Fim conteudo | |
--Trailer | |
V_LINHA := Monta_Trailer(Y);--, idReg); | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
UTL_FILE.FCLOSE(V_ARQUIVO); | |
end; | |
--------------------------------------------- | |
Procedure Monta_RegsCancelados(idReg in number, nomeArq OUT varchar2) is | |
cursor RCursor is | |
select | |
epa.matphar | |
from | |
ta_epharma epa | |
where | |
epa.ativo = 0 | |
and epa.id_thpharma = idReg; | |
V_LINHA VARCHAR2(255) := ''; | |
V_ARQUIVO UTL_FILE.FILE_TYPE; | |
Y number; | |
dtInicio VARCHAR2(10); | |
V_hora varchar2(5); | |
Begin | |
select | |
to_char(sysdate, 'DD/MM/YYYY'), To_char(sysdate,'hh24:mi') | |
into dtInicio, V_hora | |
from dual; | |
Y := 1; | |
NomeArq := 'P' || codCliente || lpad(idReg, 6, '0') || '.006.txt'; | |
V_ARQUIVO := UTL_FILE.FOPEN('ARQUIVOS', NomeArq, 'W'); | |
--Header | |
V_LINHA := Monta_Header(dtInicio, V_hora); | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
--Conteudo | |
for R in RCursor loop | |
Y := Y + 1; | |
-- Descric?es : NomeCampo In Fin Tp Siz Obr Conteudo | |
V_LINHA := '06' || --01 Tipo Registro 1 2 9 2 s 01 | |
codCliente || --03 Codigo cliente 3 8 9 6 s constante 001042 | |
'054501' || --04 Codigo beneficio 9 14 9 6 s zeros a esquerda Constante - '008980' | |
PAD(r.matphar,'X',20) ||-- 06 Num da matricula 15 34 X 20 s | |
dtInicio || --08 Data de cancelament 35 44 X 10 s DD/MM/AAAA | |
PAD(' ','X',110) || --14 Filer 45 154 X 110 s | |
PAD(Y,'9',6) --15 Num Seq 155 160 9 6 s | |
; | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
end loop; | |
--Fim conteudo | |
--Trailer | |
V_LINHA := Monta_Trailer(Y);--, idReg); | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
UTL_FILE.FCLOSE(V_ARQUIVO); | |
end; | |
-------------------------------------------------- | |
Procedure Monta_RegsEnder(idReg in number, nomeArq OUT varchar2) is | |
cursor RCursor is | |
select | |
ta.matphar, | |
FNC_SIMPLIFICA_TEXTO(enr.endereco) endereco, | |
nvl(enr.numero,0) numero, | |
decode(enr.complemento,null,' ',FNC_SIMPLIFICA_TEXTO(enr.complemento)) complemento, | |
FNC_SIMPLIFICA_TEXTO(enr.bairro) bairro, | |
cid.descricao cidade, uf.codigo uf, enr.cep | |
from | |
ta_epharma ta | |
left join enderecos enr on ta.idparticipante = enr.idparticipante and enr.flgativo = 1 and enr.flgcorresp = 1 | |
left join municipio cid on enr.idmunicipio = cid.idmunicipio | |
left join tabgerais uf on cid.uf = uf.idtabela and uf.idtptabela = 1 | |
where | |
ta.ativo = 1 and | |
ta.id_thpharma = idReg | |
; | |
V_LINHA VARCHAR2(160) := ''; | |
V_ARQUIVO UTL_FILE.FILE_TYPE; | |
Y number; | |
dtInicio VARCHAR2(10); | |
V_hora varchar2(5); | |
Begin | |
select | |
to_char(sysdate, 'DD/MM/YYYY'), To_char(sysdate,'hh24:mi') | |
into dtInicio, V_hora | |
from dual; | |
Y := 1; | |
NomeArq := 'P' || codCliente || lpad(idReg, 6, '0') || '.003.txt'; | |
V_ARQUIVO := UTL_FILE.FOPEN('ARQUIVOS', NomeArq, 'W'); | |
--Header | |
V_LINHA := Monta_Header(dtInicio, V_hora); | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
--Conteudo | |
for R in RCursor loop | |
Y := Y + 1; | |
-- Descric?es : NomeCampo In Fin Tp Siz Obr Conteudo | |
V_LINHA := '02' || --01 Tipo Registro 1 2 9 2 s 02 | |
codCliente || --02 Codigo cliente 3 8 9 6 s Preenchido com zeros, informado pela e-Pharma | |
'054501' || --03 Codigo Benefi 9 14 9 6 s Preenchido com zeros, informado pela e-Pharma ? | |
PAD(r.matphar,'X',20) || --04 Mat do titular 15 34 X 20 s | |
PAD(r.endereco,'X',40) || --05 Endereco do client 35 74 X 40 s | |
PAD(r.Numero,'X', 5) || --06 Numero 75 79 X 5 s | |
PAD(r.Complemento,'X',10) || --07 Complemento 80 89 X 10 s | |
PAD(r.bairro,'X',20) || --08 Bairro 90 109 X 20 s | |
PAD(r.cidade,'X',30) || --09 Cidade 110 139 X 30 s | |
r.uf || --10 UF 140 141 X 2 s | |
r.cep || --11 CEP 142 149 X 8 s | |
' ' || --12 Filer 150 154 X 5 s | |
PAD(Y,'9',6) --13 Num Seq 155 160 9 6 s | |
; | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
end loop; | |
--Fim conteudo | |
--Trailer | |
V_LINHA := Monta_Trailer(Y); --, idReg); | |
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA); | |
UTL_FILE.FCLOSE(V_ARQUIVO); | |
end; | |
Procedure Cria_Registros(V_qntR OUT number) is | |
-- | |
V_Seq number; | |
V_Hora varchar2(5); | |
V_Data varchar2(10); | |
v_qnt number; | |
v_enviado number; | |
begin | |
select count(1) into v_qnt from th_epharma; | |
if v_qnt > 0 then | |
select nvl(ep.dt_envio, -1) into v_enviado | |
from th_epharma ep | |
where ep.id_thpharma = (select max(a.id_thpharma) from th_epharma a); | |
if v_enviado = -1 then | |
V_qntR := -1; | |
return; | |
end if; | |
end if; | |
select nvl(max(id_thpharma),0) + 1, | |
to_char(sysdate,'hh24:mi'), | |
to_char(sysdate, 'DD/MM/YYYY') | |
into V_Seq, V_Hora, V_Data | |
from th_epharma; | |
-- | |
V_seq := V_Seq; | |
-- | |
insert into th_epharma (id_thpharma) values (V_seq); | |
insert into tmp_acomp(id) values (0); | |
--Insert Proprosta ativas | |
insert into TT_EPHARMA(id_part, tp_cont, contrat, Ativo) | |
select | |
par.idparticipante, 'pro' tipo, max(pro.numproposta) numproposta, 1 as ativo | |
from | |
proposta pro | |
inner join participante par on pro.idparticipante = par.idparticipante | |
inner join v_regagagrup v on pro.idregiao = v.IDS | |
inner join regiao reg on v.IDS = reg.idregiao | |
where | |
pro.motivocanc = 1 and | |
reg.codigo in (1, 3, 16) -- / 1 RJ, 3 SP, 16 Recife | |
and par.flgsituacao not in (1395, 1396) -- SUSPENSO POR ÓBITO / -- CANCELADO POR ÓBITO | |
and not exists (select 1 from tb_epharma e where e.idparticipante = par.idparticipante) | |
group by par.idparticipante, par.cpf, par.nome, 'tipo' ; | |
--Insert AF ativas | |
insert into TT_EPHARMA(id_part, tp_cont, contrat, Ativo) | |
select | |
par.idparticipante, 'af' tipo, max(asf.numcontrato) numproposta, 1 as ativo | |
from | |
assistfinanc asf | |
inner join PARTICIPANTE par on asf.idparticipante = par.idparticipante | |
inner join v_regagagrup v on asf.idregiao = v.IDS | |
inner join regiao reg on v.IDS = reg.idregiao | |
where | |
asf.motivocanc = 1 | |
and par.flgsituacao not in (1395, 1396) | |
and reg.codigo in (1, 3, 16) -- / 1 RJ, 3 SP, 16 Recife | |
AND NOT EXISTS | |
(SELECT 1 FROM TT_EPHARMA t where t.id_part = par.idparticipante ) | |
and not exists (select 1 from tb_epharma e where e.idparticipante = par.idparticipante) | |
and exists | |
(select 1 | |
from AMORTIZACAO amrt | |
where | |
amrt.numcontratoemp = asf.numcontratoemp and | |
amrt.dtrecebimento >= 20171101) | |
group by par.idparticipante, par.cpf, par.nome, 'tipo' ; | |
--Insert canceladas Af e Propostas | |
--Insere cancelamentos Proposta | |
insert into TT_EPHARMA(id_part, tp_cont, contrat, Ativo) | |
select | |
tb.idparticipante, tb.tp_cont, tb.contrato, 0 | |
from | |
tb_epharma tb | |
where | |
not exists (select 1 from proposta pro | |
where | |
pro.idparticipante = tb.idparticipante | |
and tb.tp_cont = 'pro' | |
and pro.motivocanc = 1 ) | |
and not exists (select 1 from assistfinanc asf | |
where | |
asf.idparticipante = tb.idparticipante | |
and tb.tp_cont = 'af' | |
and asf.motivocanc = 1 ) | |
and tb.flg_ativo = 1 | |
; | |
for R in ( select | |
lpad(par.codparticipante, 7,'0') || '-' || lpad(par.idparticipante, 5,'0') matphar, | |
par.idparticipante, ep.tp_cont, ep.contrat, ep.ativo | |
from | |
TT_EPHARMA ep | |
inner join participante par on ep.id_part = par.idparticipante | |
) LOOP | |
insert into ta_epharma | |
(id_thpharma, matphar, idparticipante, ativo, tp_cont, contrato) | |
values | |
(V_seq, r.matphar, r.idparticipante, r.ativo, r.tp_cont, r.contrat); | |
end Loop R; | |
-- | |
-- | |
select count(1) | |
into V_qntR | |
from ta_epharma | |
where id_thpharma = V_seq; | |
-- | |
if nvl(V_qntR,0) > 0 then | |
update th_epharma th | |
set th.qnt_reg = V_qntR | |
where th.id_thpharma = V_seq; | |
-- | |
commit; | |
else | |
rollback; | |
end if; | |
end; | |
Procedure Apagar_Registros(Id in out number) is | |
V_qnt number; | |
Begin | |
select count(1) into V_qnt | |
from th_epharma | |
where Id = (select max(id_thpharma) from th_epharma); | |
if V_qnt > 0 then | |
delete ta_epharma where id_thpharma = Id; | |
delete th_epharma where id_thpharma = Id; | |
commit; | |
end if; | |
Id := V_qnt; | |
end; | |
Procedure MontaArquivos(idReg in number, | |
nomeArqB OUT varchar2, | |
nomeArqE OUT varchar2, | |
nomeArqC OUT varchar2) | |
is | |
Begin | |
Monta_RegsBenef(idReg, nomeArqB); | |
Monta_RegsEnder(idReg, nomeArqE); | |
Monta_RegsCancelados(idReg, nomeArqC); | |
end; | |
Procedure MarcarComoEnviado(idReg in number) is | |
V_DtEnv number; | |
begin | |
V_dtEnv:= Pkg_FuncGerais.SysDate_Int; | |
for R in ( select | |
ep.matphar, ep.idparticipante, ep.ativo, ep.tp_cont, ep.contrato | |
from | |
ta_epharma ep | |
where ep.id_thpharma = idReg | |
) LOOP | |
if r.ativo = 1 then | |
insert into tb_epharma | |
(idparticipante, flg_ativo, dt_inclusao, tp_cont, contrato) | |
values (r.idparticipante, 1, V_DtEnv, r.tp_cont, r.contrato); | |
else | |
update tb_epharma set | |
flg_ativo = 0, | |
dt_alteracao = V_DtEnv | |
where idparticipante = r.idparticipante; | |
end if; | |
end Loop R; | |
update th_epharma aa set | |
aa.dt_envio = V_DtEnv | |
where aa.id_thpharma = idReg; | |
commit; | |
end; | |
END PKG_EPHARMA; | |
/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE PACKAGE PKG_PASS_SEG is | |
-- Author : Roberto Gomes | |
-- Created : 09:15 08/05/2018 | |
-- Purpose : Package com conjunto de operac?es para gerar arquivos de envio para seguradora | |
-- Cria massa de movimentac?o | |
Procedure CRIAR_MASSA( P_MES_VIT IN VARCHAR, | |
P_IDUSUARIO IN NUMBER, | |
P_TP_SEG IN VARCHAR, | |
P_QTDREGS OUT NUMBER, | |
P_IDSEGURADORA IN NUMBER); | |
-- Exclui registros de movimentac?o | |
procedure APAGAR_MASSA(P_IDHST_PASS in number); | |
-- Exclui registros de pagamento | |
procedure APAGAR_MASSA_PAG(P_IDSEGPGTO in number); | |
procedure GERA_ADSAO_ENVIO(P_IDHST_PASS in number); | |
-- Ler arq retorno [MOV e PAG] depende header | |
-- Procedure LER_ARQUIVO(P_IDHST_PASS in number, l_filename in varchar2, P_TeveErro out number); | |
Procedure LER_ARQUIVO_03(P_IDHST_PASS in number, l_filename in varchar2, P_TeveErro out number); | |
Procedure LER_ARQUIVO_11(P_IDHST_PASS in number, l_filename in varchar2, P_TeveErro out number); | |
-- Cria massa de pagamentos | |
Procedure Cria_Massa_financ(P_IDHST_PASS in number, P_IDUSUARIO IN NUMBER); | |
procedure GERA_PAG_ENVIO(P_IDHST_PASS in number); | |
--cria a massa inconsistente de pagamento | |
Procedure Cria_Massa_financ2(P_IDHST_PASS in number, P_IDUSUARIO IN NUMBER); | |
end PKG_PASS_SEG; | |
/ | |
CREATE OR REPLACE PACKAGE BODY PKG_PASS_SEG is | |
Vs_MensagErros varchar2(4096); | |
function PAD (P_Campo varchar2, P_Mask varchar2, P_Tam pls_integer) return varchar2 is | |
Temp varchar2(1500);--(1024); | |
begin | |
if P_Mask = '9' then | |
Temp:= lpad(P_Campo, P_Tam, '0'); | |
else | |
Temp:= RPAD(P_Campo, P_Tam); --Fnc_ColocaBranco(P_Campo, P_Tam); | |
end if; | |
return Temp; | |
end; | |
Procedure ESCREVE_ARQUIVO(P_clob CLOB, P_filename varchar2, P_type Char) is | |
l_file UTL_FILE.FILE_TYPE; | |
l_buffer VARCHAR2(32767); | |
l_amount BINARY_INTEGER := 32767; | |
l_pos INTEGER := 1; | |
JRGG varchar2(32767); | |
BEGIN | |
l_file := UTL_FILE.fopen('ARQUIVOS', P_filename, P_type, 32767); | |
LOOP | |
DBMS_LOB.read (P_clob, l_amount, l_pos, l_buffer); | |
JRGG := utl_raw.cast_to_varchar2(utl_raw.cast_to_raw(l_buffer)); | |
UTL_FILE.put(l_file, JRGG); | |
l_pos := l_pos + l_amount; | |
END LOOP; | |
EXCEPTION | |
WHEN NO_DATA_FOUND THEN | |
UTL_FILE.fclose(l_file); | |
WHEN OTHERS THEN | |
UTL_FILE.fclose(l_file); | |
RAISE; | |
UTL_FILE.fclose(l_file); | |
END; | |
function dt_formt(P_dt in number) return varchar2 is | |
vn_dtform varchar2(8); | |
begin | |
select REPLACE(FLCN_TO_DATE(P_dt,'YYYYMMDD'),'/', '') into vn_dtform from dual; | |
return vn_dtform; | |
end dt_formt; | |
-- Cria massa de movimentac?o | |
procedure CRIAR_MASSA (P_MES_VIT IN VARCHAR, | |
P_IDUSUARIO IN NUMBER, | |
P_TP_SEG IN VARCHAR, | |
P_QTDREGS OUT NUMBER, | |
P_IDSEGURADORA IN NUMBER) IS | |
/* | |
Junho 2018 | |
Roberto Gomes | |
Este procedimento foi baseado no PRC_SEGURADORA, com altereac?o | |
do filtro MES_VIG no lugar do MESREF. | |
*/ | |
V_grupos varchar2(8); | |
CURSOR C_SEG(P_MES_VIT IN VARCHAR, P_IDSEGURADORA IN NUMBER, V_grupos IN VARCHAR) IS | |
select | |
IDPROPOSTA, IDPROPCOBERT, NUMPROPOSTA, NU_CERT, CPF, | |
VLRECEBIDO, VLPREMIO, VLCAPITAL, | |
IDPARTICIPANTE, IDGRUPO, IDPLANOCOM, CODIGO, ID2, | |
TABCALCCOBERT, DTNASCIMENTO, flgsituacao | |
from | |
tt_pass_seg; | |
-- vlrecebido, | |
-- vlpremio, | |
-- CURSORES | |
RC_SEG C_SEG%ROWTYPE; | |
-- CONTROLES DE EXECUCAO | |
V_INSTRUCAO VARCHAR2(4096); | |
V_FLGEXECUCAO PLS_INTEGER; | |
V_IDCONTPROC PLS_INTEGER; | |
V_TAXA number; | |
V_DTCALC PLS_INTEGER; | |
V_VLCAPITAL number; | |
V_ARQV VARCHAR2(35); | |
V_SERIAL NUMBER; | |
V_IDHST_PASS_SEG NUMBER; | |
PROCEDURE INSERETABSEGURO IS | |
BEGIN | |
INSERT INTO TA_PASS_SEG ( | |
idth_pass_seg, | |
numproposta, | |
nu_cert, | |
cpf, | |
vlrecebido, | |
vlpremio, | |
vlcapital, | |
idgrupo, | |
codigo, | |
idparticipante, | |
tp_operacao, | |
idpropcobert, | |
Flgsituacao | |
) | |
VALUES ( | |
V_IDHST_PASS_SEG, | |
RC_SEG.NUMPROPOSTA, | |
RC_SEG.NU_CERT, | |
RC_SEG.CPF, | |
RC_SEG.VLRECEBIDO, | |
RC_SEG.VLPREMIO, | |
V_VLCAPITAL, | |
RC_SEG.IDGRUPO, | |
RC_SEG.CODIGO, | |
RC_SEG.IDPARTICIPANTE, | |
RC_SEG.ID2, | |
RC_SEG.IDPROPCOBERT, | |
RC_SEG.Flgsituacao | |
); | |
END INSERETABSEGURO; | |
-- PROCEDURE CALCULA | |
PROCEDURE CALCULOSDOSEGURO IS | |
BEGIN | |
V_DTCALC:= FNC_INCMES(P_MES_VIT, 1) || '01'; | |
-- CALCULO DE PREMIO, TAXA E VALOR DO CAPITAL DO SEGURADO | |
IF (RC_SEG.ID2 = 'AL') or (RC_SEG.ID2 = '__') | |
or (RC_SEG.ID2 = 'CA')THEN-- SO PEGA VALORES DAS ALTERAC?ES | |
V_TAXA := FNC_BUSCATAXASEGUR(RC_SEG.IDPROPOSTA, RC_SEG.TABCALCCOBERT, RC_SEG.DTNASCIMENTO, V_DTCALC); | |
V_VLCAPITAL:= ROUND(((RC_SEG.VLPREMIO * 1000)/V_TAXA), 2); | |
ELSE | |
V_VLCAPITAL := RC_SEG.VLCAPITAL; | |
END IF; | |
-- FIM CALCULO | |
END CALCULOSDOSEGURO; | |
-- ROTINA PRINCIPAL | |
BEGIN | |
IF P_TP_SEG = 'AP' THEN | |
V_grupos := '549'; | |
ELSE | |
V_grupos := '547, 548'; | |
END IF; | |
-- limpa a tabela // apesar de ser um tt oracle, esta com a configurac?o | |
-- on commit preserve rows; | |
PRC_TRUNCATE('TT_PASS_SEG'); | |
--alimenta tabela temporaria | |
insert into TT_PASS_SEG | |
select -- INCLUS?O INICIO | |
mov.idproposta, mov.idpropcobert, | |
pro.numproposta, null nu_cert, PAR.CPF, | |
mov.vlpgto vlrecebido, | |
mov.vlprev vlpremio, | |
tar.vlcobert vlcapital, | |
pro.idparticipante, pla.idgrupo, pro.idplanocom, pla.codigo, | |
'IN' id2, pcb.tabcalccobert, par.dtnascimento, mov.flgsituacao | |
from | |
proposta pro | |
inner join planocomercial pla on pro.idplanocom = pla.idplanocom | |
inner join propcobert ppc on pro.idproposta = ppc.idproposta | |
inner join cobertura cob on ppc.idcobertura = cob.idcobertura | |
inner join participante par on pro.idparticipante = par.idparticipante | |
inner join movcontrib_atual mov on ppc.idpropcobert = mov.idpropcobert and mov.mes_vig = P_MES_VIT | |
inner join tarifa tar on ppc.idpropcobert = tar.idpropcobert | |
INNER JOIN PRODCOBERT PCB ON ( PPC.IDPRODUTO = PCB.IDPRODUTO | |
AND PPC.IDCOBERTURA = PCB.IDCOBERTURA) | |
where | |
cob.flgespecial = 1 | |
and pro.mescancelamento = 999999 | |
and substr(pro.dtinicobertura,1,6) = P_MES_VIT --< | |
and mov.mes_vig||'01' = pro.dtinicobertura | |
and not exists (select r.id_propcobt | |
from tb_repasspara r | |
where r.nu_cert is not null | |
and r.id_propcobt = ppc.idpropcobert | |
) | |
and tar.flgmotivo = 1 | |
AND ( | |
(P_TP_SEG='AP' AND (PLA.idgrupo = 549)) OR | |
(P_TP_SEG='VG' AND (PLA.idgrupo in (547, 548)) ) | |
) | |
-- INCLUS?O FIM | |
; | |
INSERT INTO TT_PASS_SEG -- INSERE TODO O RESTO PARA DEPOIS CLASSIFICAR | |
SELECT | |
PPC.IDPROPOSTA, R.ID_PROPCOBT, PRO.NUMPROPOSTA, R.NU_CERT,PAR.CPF, | |
mov.vlpgto VLRECEBIDO, mov.vlprev VLPREMIO, | |
R.VLCAPITAL, PAR.IDPARTICIPANTE, | |
R.IDGRUPO, PRO.IDPLANOCOM, PLA.CODIGO, | |
'__' id2, pcb.tabcalccobert, par.dtnascimento, mov.flgsituacao | |
FROM | |
TB_REPASSPARA R | |
INNER JOIN PROPCOBERT PPC ON R.ID_PROPCOBT = PPC.IDPROPCOBERT | |
INNER JOIN PROPOSTA PRO ON PPC.IDPROPOSTA = PRO.IDPROPOSTA | |
INNER JOIN PARTICIPANTE PAR ON PRO.IDPARTICIPANTE = PAR.IDPARTICIPANTE | |
INNER JOIN PLANOCOMERCIAL PLA ON PRO.IDPLANOCOM = PLA.IDPLANOCOM | |
INNER JOIN PRODCOBERT PCB ON ( PPC.IDPRODUTO = PCB.IDPRODUTO | |
AND PPC.IDCOBERTURA = PCB.IDCOBERTURA) | |
inner join movcontrib_atual mov on ppc.idpropcobert = mov.idpropcobert | |
WHERE | |
R.TP_PLA = P_TP_SEG | |
AND R.FLG_ATIVO = 1 -- LISTA AS PROPOSTAS QUE EST?O NA BASE QUE N?O FORAM CANCELADAS | |
AND MOV.MES_VIG = (SELECT MAX(AUX.MES_VIG) | |
FROM MOVCONTRIB_ATUAL AUX | |
WHERE AUX.MES_VIG <= P_MES_VIT | |
AND AUX.IDPROPCOBERT = PPC.IDPROPCOBERT); | |
-- CONTA QUANTIDADE DE REGISTRO PROCESSADOS | |
select count(1) into P_QTDREGS from TT_PASS_SEG; | |
V_INSTRUCAO:= ' SELECT '||P_QTDREGS ||' from dual '; | |
V_IDCONTPROC := PKG_CTRLPROC.INICIALIZA(1, V_INSTRUCAO, P_IDUSUARIO,P_QTDREGS, 'PASSE PARA SEGURADORA'); --TIPOPROC,SQLCOUNT,IDUSUARIO,QTDREGS | |
IF P_QTDREGS = 0 THEN | |
RETURN; | |
END IF; | |
-- FIM CONTA | |
--- CLASSIFICA OS REGISTROS | |
for CANC1 in ( | |
select | |
c.nu_cert, | |
case pro.motivocanc | |
when '20' then 'CA' | |
when '3' then 'CA' | |
when '4' then 'CA' | |
when '8' then 'CI' | |
else 'CA' | |
end id2 | |
from | |
tb_repasspara c | |
inner join propcobert ppc on c.id_propcobt = ppc.idpropcobert | |
inner join proposta pro on ppc.idproposta = pro.idproposta | |
inner join cobertura cob on ppc.idcobertura = cob.idcobertura | |
inner join planocomercial pla on pro.idplanocom = pla.idplanocom | |
where | |
c.nu_cert is not null | |
and c.flg_ativo = 1 | |
and exists (select 1 from | |
movcontrib_atual mov | |
where | |
ppc.idpropcobert = mov.idpropcobert | |
and mov.mes_vig <= P_MES_VIT --< DESTA MANEIRA LISTA OS CANCELADOS QUE FORAM MARCADOS DEPOIS DO ENVIO DO MES ANTERIO | |
and mov.mes_vig >= 201805 -- Data inicio | |
and mov.flgsituacao in (4,5) | |
) | |
and c.tp_pla = P_TP_SEG | |
) | |
LOOP | |
UPDATE TT_PASS_SEG | |
SET ID2 = CANC1.ID2 | |
WHERE NU_CERT = CANC1.NU_CERT; | |
END LOOP; | |
-------------------------- | |
for CANC2 in ( | |
select | |
c.nu_cert, | |
case pro.motivocanc | |
when '20' then 'CA' | |
when '3' then 'CA' | |
when '4' then 'CA' | |
when '8' then 'CI' | |
else 'CA' | |
end id2 | |
from | |
tb_repasspara c | |
inner join propcobert ppc on c.id_propcobt = ppc.idpropcobert | |
inner join proposta pro on ppc.idproposta = pro.idproposta | |
where | |
c.nu_cert is not null | |
and c.flg_ativo = 1 | |
and ppc.flgsituacao = 2 | |
and ppc.mesexcfip <= P_MES_VIT | |
and P_MES_VIT > (select max (aux.mes_vig) | |
from movcontrib_atual aux | |
where aux.idpropcobert = ppc.idpropcobert) | |
and exists (select 1 from | |
movcontrib_atual mov | |
where | |
ppc.idpropcobert = mov.idpropcobert | |
and mov.mes_vig < P_MES_VIT --< DESTA MANEIRA LISTA OS CANCELADOS QUE FORAM MARCADOS DEPOIS DO ENVIO DO MES ANTERIO | |
and mov.mes_vig >= 201805 -- Data inicio | |
and mov.flgsituacao not in (4,5) | |
) | |
and c.tp_pla = P_TP_SEG | |
) | |
LOOP | |
UPDATE TT_PASS_SEG SET ID2 = CANC2.ID2 WHERE NU_CERT = CANC2.NU_CERT; | |
END LOOP; | |
----------------------------------------------- | |
for ALTERADOS in ( | |
select | |
rep.nu_cert | |
from | |
tb_repasspara rep | |
inner join propcobert ppc on rep.id_propcobt = ppc.idpropcobert | |
inner join prodcobert pcb on ( ppc.idproduto = pcb.idproduto | |
and ppc.idcobertura = pcb.idcobertura) | |
inner join tarifa tar on ppc.idpropcobert = tar.idpropcobert | |
inner join movcontrib_atual mov on ppc.idpropcobert = mov.idpropcobert | |
inner join cobertura cob on ppc.idcobertura = cob.idcobertura | |
where | |
rep.nu_cert is not null | |
and rep.flg_ativo = 1 | |
and cob.flgespecial = 1 | |
and mov.mes_vig = P_MES_VIT -- <----- | |
and tar.situacao <> 5 | |
and mov.mesref between tar.mesinitarifa and tar.mesfimtarifa | |
and mov.flgsituacao not in (4,5) | |
-- and rep.vlpremio <> tar.vlcontrib | |
and rep.vlpremio <> mov.vlprev | |
and rep.tp_pla = P_TP_SEG | |
) | |
LOOP | |
UPDATE TT_PASS_SEG SET ID2 = 'AL' WHERE NU_CERT = ALTERADOS.NU_CERT; | |
END LOOP; | |
-- !! Veja isso!!! | |
UPDATE TT_PASS_SEG | |
SET VLPREMIO = VLRECEBIDO | |
WHERE | |
FLGSITUACAO = 2 or | |
(FLGSITUACAO in( 4 , 5) and VLRECEBIDO > 0); | |
-- ARQUIVO DE MOVIMENTO - PARA OS PAGOS, VALOR PREVISTO DEVE SER IGUAL AO PAGO | |
--- FIM DA CLASSIFICAC?O DOS RESGISTROS | |
V_IDHST_PASS_SEG := LEULTSEQUENCIA('IDTH_PASS_SEG'); | |
insert into TH_PASS_SEG( | |
IDTH_PASS_SEG, MES_VIG, DTSIMULACAO, TP_SEG, IDSEGURADORA, IDUSUARIO) | |
VALUES(V_IDHST_PASS_SEG, P_MES_VIT, tO_CHAR(SYSDATE,'YYYYMMDD'), P_TP_SEG, P_IDSEGURADORA, P_IDUSUARIO); | |
-- PROCESSAMENTO INTERNO | |
OPEN C_SEG(P_MES_VIT, P_IDSEGURADORA, V_grupos); | |
FETCH C_SEG INTO RC_SEG; | |
IF C_SEG%FOUND THEN | |
LOOP | |
CALCULOSDOSEGURO; | |
INSERETABSEGURO; | |
FETCH C_SEG INTO RC_SEG; | |
PKG_CTRLPROC.VERIFICA_STATUS(V_IDCONTPROC,C_SEG%NOTFOUND,V_FLGEXECUCAO); | |
EXIT WHEN V_FLGEXECUCAO > 0; | |
END LOOP; | |
COMMIT; | |
END IF; | |
CLOSE C_SEG; | |
PKG_CTRLPROC.FINALIZA(V_IDCONTPROC,V_FLGEXECUCAO); | |
V_ARQV := '01PROSEG' || P_TP_SEG; | |
V_SERIAL := LEULTSEQUENCIA(V_ARQV); | |
UPDATE TH_PASS_SEG | |
SET ARQUIVO = V_ARQV || '_' || DTSIMULACAO || '_' || lpad(V_SERIAL,10, '0') || '.TXT', | |
QTDREGPROC = P_QTDREGS | |
WHERE IDTH_PASS_SEG = V_IDHST_PASS_SEG; | |
COMMIT; | |
-- FIM PROCESSAMENTO | |
END; | |
-- Exclui registros de movimentac?o | |
procedure APAGAR_MASSA(P_IDHST_PASS in number) is | |
vTpSeg varchar2(2); | |
Begin | |
SELECT TP_SEG INTO vTpSeg | |
FROM TH_PASS_SEG | |
WHERE IDTH_PASS_SEG = P_IDHST_PASS; | |
DELETE TA_PASS_SEG WHERE IDTH_PASS_SEG = P_IDHST_PASS; | |
DELETE TH_PASS_SEG WHERE IDTH_PASS_SEG = P_IDHST_PASS; | |
UPDATE SEQUENCIAL | |
SET IDSEQUENCIA = IDSEQUENCIA - 1 | |
WHERE NOME = '01PROSEG' || vTpSeg; | |
COMMIT; | |
END; | |
-- Exclui registros de pagamento | |
procedure APAGAR_MASSA_PAG(P_IDSEGPGTO in number) is | |
vTpSeg varchar2(2); | |
Begin | |
SELECT TP_SEG INTO vTpSeg | |
FROM TH_PASS_SEGPGTO | |
WHERE ID_SEGPGTO = P_IDSEGPGTO; | |
DELETE FROM TA_PASS_SEGFINAC WHERE ID_SEGPGTO = P_IDSEGPGTO; | |
DELETE FROM TH_PASS_SEGPGTO WHERE ID_SEGPGTO = P_IDSEGPGTO; | |
UPDATE SEQUENCIAL | |
SET IDSEQUENCIA = IDSEQUENCIA - 1 | |
WHERE NOME = '10PROSEG' || vTpSeg; | |
COMMIT; | |
END; | |
procedure GERA_ADSAO_ENVIO(P_IDHST_PASS in number) is | |
cursor C_ADSAO_ENV is | |
select | |
pro.idproposta, pro.numproposta, ta.cpf, par.nome, par.dtnascimento, par.sexo, | |
ta.vlcapital, (ta.vlpremio * 100) vlpremio, | |
case | |
when (trep.nu_cert is null) then pro.dtinicobseguro | |
else to_number(trep.dt_env_inic || '01') | |
end dtinscricao, | |
pro.dtconfirmacao, pro.dtinicobseguro, | |
pro.dtsituacao, pla.codigo, pla.idplanocom, FNC_SIMPLIFICA_TEXTO(enr.endereco) endereco, | |
nvl(enr.numero,0) numero, | |
decode(enr.complemento,null,' ',FNC_SIMPLIFICA_TEXTO(enr.complemento)) complemento, | |
FNC_SIMPLIFICA_TEXTO(enr.bairro) bairro, | |
cid.descricao cidade, uf.codigo uf, enr.cep, nvl(enr.email,' ') email, | |
(nvl(dpg.salario,0) * 100) salario, | |
nvl(trep.nu_cert, 0) certf, | |
CASE ta.idgrupo | |
WHEN 547 THEN 1267942 --1267470 --1251589 547 - Planos Antigos VG | |
WHEN 548 THEN 1267942 --1267470 --1251589 548 - Planos Novos VG | |
WHEN 549 THEN 1267464 --1251717 549 - Planos 70 AP | |
END id28, | |
--De: 1267942 Para: 1267470 Email alfa 4julho2018 | |
-- CASE ta.idgrupo | |
-- WHEN 547 THEN 2 | |
-- WHEN 548 THEN 1 | |
-- WHEN 549 THEN 1 | |
-- END | |
1 id29, -- ficou como constante (Inf. e-mail Gilza 22junho) | |
case ta.tp_operacao | |
when 'IN' then | |
CASE ta.idgrupo | |
WHEN 548 THEN -- aplicado apenas para planos NOVOS | |
CASE | |
WHEN (pkg_funcgerais.calc_idade(par.dtnascimento, to_char(last_day(to_date(thp.mes_vig || '01', 'yyyymmdd')),'yyyymmdd')) < 14) THEN 1 | |
WHEN (pkg_funcgerais.calc_idade(par.dtnascimento, to_char(last_day(to_date(thp.mes_vig || '01', 'yyyymmdd')),'yyyymmdd')) < 66) THEN 2 | |
ELSE 3 END | |
ELSE 1 | |
END | |
ELSE | |
(select a.id30 from tb_repasspara a where a.id_propcobt = ppc.idpropcobert ) | |
end id30, | |
/* valido para apenas para o primeiro envio, depois, valido o bloco de cima | |
CASE ta.idgrupo | |
WHEN 547 THEN 1 -- 'VG' 547 - Planos Antigos VG | |
WHEN 548 THEN 2 -- 'VG' 548 - Planos Novos VG | |
WHEN 549 THEN 1 -- 'AP' 549 - Planos 70 | |
END id30, | |
*/ | |
CASE ta.idgrupo | |
WHEN 547 THEN 'VG' | |
WHEN 548 THEN 'VG' | |
WHEN 549 THEN 'AP' | |
END id25, | |
decode(tp_operacao, '__','AL',tp_operacao) op | |
from | |
ta_pass_seg ta | |
inner join propcobert ppc on ta.idpropcobert = ppc.idpropcobert | |
inner join proposta pro on ppc.idproposta = pro.idproposta | |
inner join participante par on ta.idparticipante = par.idparticipante | |
inner join planocomercial pla on pro.idplanocom = pla.idplanocom | |
left join enderecos enr on ta.idparticipante = enr.idparticipante and enr.flgativo = 1 and enr.flgcorresp = 1 | |
left join municipio cid on enr.idmunicipio = cid.idmunicipio | |
left join tabgerais uf on cid.uf = uf.idtabela and uf.idtptabela = 1 | |
inner join pagproposta pgp on pgp.idproposta = pro.idproposta | |
inner join dadospagador dpg on dpg.iddadospagador = pgp.iddadospagador | |
inner join th_pass_seg thp on ta.idth_pass_seg = thp.idth_pass_seg | |
left join tb_repasspara trep on ta.idpropcobert = trep.id_propcobt | |
where | |
ta.idth_pass_seg = P_IDHST_PASS | |
and ta.cod_err not in (-2, 0) | |
; | |
Content cLob; | |
V_Total_Regs number(8); | |
V_data varchar2(8); | |
V_ddmmaa varchar2(8); | |
V_ddmmaaaa varchar2(8); | |
V_seq number; | |
V_filename varchar2(15); | |
begin | |
SELECT IDSEQUENCIA , to_char(sysdate,'yyyymmdd'), to_char(sysdate,'ddmmyy'), to_char(sysdate,'ddmmyyyy') | |
INTO V_seq, V_data, V_ddmmaa, V_ddmmaaaa | |
FROM SEQUENCIAL | |
WHERE NOME = '01PROSEG' || (select tp_seg from th_pass_seg where idth_pass_seg = P_IDHST_PASS); | |
-- V_filename := '01PROSEG_' || V_data || '_' || pad(V_seq,'9',10) || '.TXT'; | |
V_filename := 'ARQUIVO_'; | |
-- HEADER INICO | |
Content := | |
-- ID CAMPO TIPO TAM INI FIM | |
'H'|| -- 1 R IDENTIFICAC?O DO REGISTRO C 001 001 001 | |
pad(V_seq,'9',10) || -- 2 R NUMERO SEQUENCIAL DO ARQUIVO N 010 002 011 ** criar func?o get_seq | |
'01' || -- 3 R IDENTIFICAC?O DO LAYOUT N 002 012 013 | |
V_ddmmaaaa || -- 4 R DATA GERAC?O DO ARQUIVO D 008 014 021 | |
PAD(777,'9',10) || -- 5 R CODIGO DO PARCEIRO DEFN PELA SEGURAD N 010 022 031 N? CONTRATO ** | |
pad('PROSEG','X',30) || -- 6 R NOME DO PARCEIRO (ESTIPULANTE) C 030 032 061 ****** | |
pad(' ','X',1439); -- 7 O FILLER C 1439 062 1500 | |
ESCREVE_ARQUIVO(Content || chr(10), V_filename, 'w'); | |
V_Total_Regs := 0; | |
for R in C_ADSAO_ENV loop | |
Content := | |
'D' || -- 1 R D C 1 1 1 | |
r.op || -- 2 R Tipo operac?o C 2 2 3 ******** QRY | |
'F' || -- 3 R Tipo de cliente C 1 4 4 | |
pad(r.cpf,'9', 15) || -- 4 R CPF N 15 5 19 | |
pad(r.nome,'X', 40) || -- 5 R NOME CLIENTE C 40 20 59 | |
pad(' ', 'X', 10) || -- 6 O FILLER C 10 60 69 ********* | |
dt_formt(r.dtnascimento)|| -- 7 R DT NASCIMENTO D 8 70 77 | |
r.sexo || -- 8 R SEXO C 1 78 78 | |
pad(r.endereco,'X',40) || -- 9 O ENDERECO C 40 79 118 Rpad(*e.endereco,40, ' ') | |
pad(' ','X',10) || -- 10 O FILLER C 10 119 128 ********* | |
pad(r.numero,'9', 5) || -- 11 O NUMERO N 5 129 133 ** Lpad(e.numero,5, '0') | |
pad(r.complemento,'X',30)||-- 12 O COMPLEMENTO C 30 134 163 **** e.complemento | |
pad(r.bairro,'X',20) || -- 13 O BAIRRO C 20 164 183 -- e.bairro | |
pad(' ','X',20) || -- 14 O FILLER C 20 184 203 ********* | |
pad(r.cidade,'X',40) || -- 15 O CIDADE C 40 204 243 mu.descricao | |
pad(r.uf,'X', 2) || -- 16 O UF C 2 244 245 tu.codigo | |
pad(r.cep,'9', 8) || -- 17 O CEP N 8 246 253 e.cep | |
pad(0,'9', 2) || -- 18 O DDD CELULAR N 2 254 255 - GET 2 FIRST REPLACE(e.telefone,' ', '') || | |
pad(0,'9', 8) || -- 19 O CELULAR N 8 256 263 - REPLACE(e.telefone,' ', '') || | |
pad(0,'9', 2) || -- 20 O DDD TEL RESID N 2 264 265 - GET 2 FIRST REPLACE(e.telefone,' ', '') || | |
pad(0,'9', 8) || -- 21 O TEL RESID N 8 266 273 - REPLACE(e.telefone,' ', '') || | |
pad(0,'9', 2) || -- 22 O DDD TEL COMERC N 2 274 275 - GET 2 FIRST REPLACE(e.telefone,' ', '') || | |
pad(0,'9', 8) || -- 23 O TEL COMERC N 8 276 283 - REPLACE(e.telefone,' ', '') || | |
pad(' ','X',50) || -- 24 O EMAL C 50 284 333 - e.email | |
r.id25 || -- 25 R CATEGORIA SEG C 2 334 335 - *** REALIZAR A QUERY!!!! | |
pad(' ','X',5) || -- 26 R UTILIZAR D-PARA C 5 336 340 - DEIXAR EM BRANCO ? sim | |
pad(r.vlcapital * 100,'9', 12)|| -- 27 --> | |
-- 27 R FAIXA DO SEGURO N 12 341 352 - ok!!! | |
pad(r.id28,'9', 20) || -- 28 R N.CONTRATO N 20 353 372 - ALFA X ESTIPULANTE **** ONDE PEGO ISSO??? | |
pad(r.id29,'9', 20) || -- 29 R N.Sub CONTRATO N 20 373 392 - *** ONDE PEGO ISSO??? | |
pad(r.id30,'9', 20)|| -- 30 R N. DO PLANO N 20 393 412 - ***DEFINIDO PLELA SEGURADORA/ COD DE REF UTILIZADO PELA SEGURADORA COMO REF PARA ESTE SEGURO | |
pad(r.vlpremio,'9', 12) || -- 31 R VALOR DO PREMIO N 12 413 424 | |
dt_formt(r.dtinscricao) || -- 32 R DATA ADSAO SEG D 8 425 432 -- | |
-- '01052018' || -- 32 R DATA ADSAO SEG D 8 425 432 -- | |
'M' || -- 33 R Peridiocidade C 1 433 433 - M mensal / B Bimestral / T Trimestral / S semanal / A anual | |
pad(' ','X',559) || -- 34 O FILLER C 559 434 992 ********* | |
pad(r.certf ,'9', 10) || -- 35 R CODIG CERTIF N 10 993 1002 - *** IDENTIFICADOR UNICO DA SEGURADORA - PEDIR PARA ALFA | |
pad(' ','X',30) || -- 36 O COD DE SORTEIO C 30 1003 1032 - *** COD PRODUTO DE SORTEIO | |
pad('0','9', 10) || -- 37 O N SERIE LOTERIA N 10 1033 1042 - * NUMERO DE SERIE DA LOTERIA N/A | |
pad('0','9', 10) || -- 38 O NUMERO SORTEIO N 10 1043 1052 - * NUMERO DE SERIE DA LOTERIA N/A | |
-- pad(r.numproposta,'9', 10)||-- 39 R ID UNIC PARC N 10 1053 1062 - * Informado pela Critiane em 17/05/2018 / numcContrato informado pelo Zodra em 29/05/2018 | |
--remoc?o do Filler e aumento do tamanho no n?proposta - Solicitac?o Zodra via Mail em 6NOV2018 | |
pad(r.numproposta,'9', 25)||-- 39 R ID UNIC PARC N 10 1053 1062 - * Informado pela Critiane em 17/05/2018 / numcContrato informado pelo Zodra em 29/05/2018 | |
-- pad(' ','X',15) || -- 40 R FILLER C 15 1063 1077 ***** | |
dt_formt(r.dtinscricao) || -- 41 R DATA VENDA D 8 1078 1085 -- dt venda | |
V_ddmmaaaa || -- 42 R DATA OPERC?O D 8 1086 1093 -- dt DA OPRAC?O, DATA QUE HOUVE INTERAC?O DESTE REGISTRO ??????? | |
'N' || -- 43 O CONSUGUE S/N C 1 1094 1094 | |
pad(' ','X',40) || -- 44 O NOME DO CONJUGUE C 40 1095 1134 | |
pad(' ','X',15) || -- 45 O CPF DO CONJUGUE N 15 1135 1149 | |
'01011901' || -- 46 O DT NASC DO CONJU N 8 1150 1157 | |
pad(' ','X',82) || -- 47 O FILLER C 82 1158 1239 | |
pad(' ','X',15) || -- 48 O CPF VENDEDOR C 15 1240 1254 | |
pad(' ','X',50) || -- 49 O NOME VENDEDOR C 50 1255 1304 | |
pad(' ','X',70) || -- 50 O FILLER C 70 1305 1374 | |
'01052018' || -- 51 R DT INIC VIG SEG D 8 1375 1382 | |
'30042019'|| -- 52 R DT FINAL VIG SEG D 8 1383 1390 | |
pad(' ','X',10) || -- 53 O NUM PASSAPORTE C 10 1391 1400 | |
'000' || -- 54 O PESO DO TITULAR N 3 1401 1403 --2 CASAS SEM VIRGULA | |
'000' || -- 55 O PESO DO CONJUGUE N 3 1404 1406 | |
'000' || -- 56 O ALTURA DO TITULAR N 3 1407 1409 -- EM CM SEM VIRGULA | |
'000' || -- 57 O ALTURA DO CONJUGU N 3 1410 1412 -- EM CM SEM VIRGULA | |
'N' || -- 58 O DSP - S/N C 1 1413 1413 -- ***?? | |
pad(' ','X', 12) || -- 59 O COD CBO PROFISS N 12 1414 1425 ***** | |
pad(r.salario, '9', 10) || -- 60 O RENDA TITULAR N 10 1426 1435 ***** | |
'N' || -- 61 O ERROR PREENCHIMEN C 1 1436 1436 --- S/ N | |
'01011901' || -- 62 R DATA INIC VIG FAT D 8 1437 1444 *************???? | |
'01011901' || -- 63 O DATA FIM VIG FATU D 8 1445 1452 *************???? | |
pad('0','9', 15) || -- 64 O NOSSO NUMERO FATU N 15 1453 1467 | |
pad(' ','X',33) || -- 65 O FILLER C 33 1468 1500 | |
chr(10); -- carriage return line feed | |
ESCREVE_ARQUIVO(Content, V_filename, 'a'); | |
V_Total_Regs := V_Total_Regs + 1; | |
end loop; | |
-- TRAILLER | |
Content := 'T'|| Lpad(V_Total_Regs, 8, '0') || Rpad(' ',1491,' '); | |
ESCREVE_ARQUIVO(Content, V_filename, 'a'); | |
END; | |
-- Cria massa de pagamentos | |
Procedure Cria_Massa_financ(P_IDHST_PASS in number, P_IDUSUARIO IN NUMBER) is -- procedure interna | |
v_sequenc number; | |
v_TpSeg VARCHAR2(2); | |
v_MESVIG NUMBER; | |
v_DT number; | |
v_total number; | |
V_ARQV VARCHAR2(35); | |
V_SERIAL NUMBER; | |
Begin | |
-- Pega os dados da tabela de movimentac?o | |
SELECT T.MES_VIG, T.TP_SEG | |
INTO v_MESVIG, v_TpSeg | |
FROM TH_PASS_SEG T | |
WHERE T.IDTH_PASS_SEG = P_IDHST_PASS; | |
v_DT := to_number(to_char(sysdate, 'YYYYMMDD')); | |
v_sequenc := LEULTSEQUENCIA('ID_SEGPGTO'); | |
INSERT INTO TH_PASS_SEGPGTO (ID_SEGPGTO, MES_VIG, TP_SEG, DTGERACAO, IDUSUARIO, PASSO) | |
VALUES (v_sequenc, v_MESVIG, v_TpSeg, v_DT, P_IDUSUARIO, 0); | |
-- Inclus?o dos pagamentos | |
INSERT INTO TA_PASS_SEGFINAC | |
(id_segpgto, NU_CERT, NUMPROPOSTA,VLRECEBIDO, | |
VLCAPITAL, DTPGTO, TP_OPERACAO, n_parc) | |
Select | |
v_sequenc | |
,r.nu_cert | |
,pro.numproposta | |
,mov.vlpgto as vlrecebido | |
,r.vlcapital | |
,mov.dtpgto | |
,3 as tp_operacao -- Repasse | |
,c.nu_parc_coseg as n_parc | |
from | |
tb_repasspara r | |
inner join movcontrib_atual mov on r.id_propcobt = mov.idpropcobert | |
inner join tb_movi_coseg c on mov.idmovcontrib = c.id_movicntb | |
inner join proposta pro on mov.idproposta = pro.idproposta | |
where ( (r.flg_ativo = 1) | |
-- Propostas canceladas na Alfa, mas que o pagamento precisa ser informado por conta do | |
-- pagamento de beneficio. | |
-- Sempre que houver a mesma necessidade, basta descomentar o codigo abaixo e informar as propostas. | |
/* | |
OR ( r.flg_ativo = 0 | |
and pro.numproposta in (296157,254557,162394)) | |
*/ | |
) | |
and r.nu_cert is not null | |
and mov.mes_vig <= v_MESVIG | |
and nvl(mov.dtpgto,0) > 0 -- E para considerar a data de pagamento e n?o a de classificac?o | |
and mov.flgsituacao in (2, 3) | |
and c.flg_env_pgto = 0 | |
and r.tp_pla = v_TpSeg; | |
-- Inclus?o dos estornos | |
/* INSERT INTO TA_PASS_SEGFINAC | |
(id_segpgto, NU_CERT, NUMPROPOSTA,VLRECEBIDO, | |
VLCAPITAL, DTPGTO, TP_OPERACAO, n_parc) | |
Select | |
v_sequenc | |
,r.nu_cert | |
,pro.numproposta | |
,mov.vlpgto as vlrecebido | |
,r.vlcapital | |
,mov.dtpgto | |
,2 as tp_operacao -- Estorno | |
,c.nu_parc_coseg as n_parc | |
from | |
tb_repasspara r | |
inner join movcontrib_atual mov on (r.id_propcobt = mov.idpropcobert) | |
inner join tb_movi_coseg c on (mov.idmovcontrib = c.id_movicntb) | |
inner join proposta pro on (mov.idproposta = pro.idproposta) | |
where r.flg_ativo = 0 | |
and r.nu_cert is not null | |
and r.tp_pla = v_TpSeg | |
and c.flg_env_pgto = 1 | |
and pro.motivocanc = '4' -- Situac?o de obito | |
and mov.mes_vig > pro.mescancelamento | |
and mov.mes_vig <= v_MESVIG | |
and nvl(mov.dtpgto,0) > 0 -- E para considerar a data de pagamento e n?o a de classificac?o | |
and mov.flgsituacao in (4,5); | |
*/ | |
SELECT COUNT(1) INTO V_TOTAL | |
FROM TA_PASS_SEGFINAC | |
WHERE ID_SEGPGTO = V_SEQUENC; | |
V_ARQV := '10PROSEG' || v_TpSeg; | |
V_SERIAL := LEULTSEQUENCIA(V_ARQV); | |
UPDATE TH_PASS_SEGPGTO | |
SET QTDREG = V_TOTAL, | |
ARQUIVO = V_ARQV || '_' || DTGERACAO || '_' || LPAD(V_SERIAL, 10, '0') || '.TXT' | |
WHERE ID_SEGPGTO = V_SEQUENC; | |
COMMIT; | |
end; | |
Procedure LER_ARQUIVO_11(P_IDHST_PASS in number, l_filename in varchar2, P_TeveErro out number) is | |
V_ARQUIVO UTL_FILE.FILE_TYPE; | |
l_location VARCHAR2(100) := 'ARQUIVOS'; | |
V_LINHA VARCHAR2(32767) := ''; | |
V_tp_lay char(2); | |
V_1CARAC CHAR; | |
v_COD_SEG varchar2(15); | |
v_NU_CERT varchar2(15); | |
v_COD_RET varchar2(3); | |
v_MSG_IMP varchar2(50); | |
v_DT_IMPO varchar2(8); | |
v_NUM_PARC NUMBER; | |
v_NU_LOTE NUMBER; | |
v_QntReg number; | |
v_QNT_INF number; | |
v_TP_TRAN VARCHAR(1); | |
-- v_RETORN_ACEIT VARCHAR(1); | |
BEGIN | |
V_ARQUIVO := UTL_FILE.fopen(l_location, l_filename, 'R', 32767); | |
UTL_FILE.get_line(V_ARQUIVO, V_LINHA, 32767); -- LER 1? LINHA | |
V_tp_lay := SUBSTR(V_LINHA,12,2); -- VERIFICA O TIPO DE LAYOUT 3 MOVIMENTAC?O / 11 PAGAMENTOS | |
v_QntReg := 0; | |
IF V_tp_lay = '11' THEN | |
PRC_TRUNCATE('TA_ARQ_RECB_LAYT_PGTO'); | |
LOOP | |
UTL_FILE.get_line(V_ARQUIVO, V_LINHA, 32767); | |
V_1CARAC := SUBSTR(V_LINHA,1,1); | |
IF V_1CARAC = 'D' THEN -- VERIFICA SE E A LINHA DE TRAILLER, SE N?O FOR... | |
-- alterar para a tabela TA_ARQ_RECB_LAYT_PGTO | |
v_COD_SEG := SUBSTR(V_LINHA, 2, 15); -- COD DE SEGURO - PARCEIRO | |
v_NU_CERT := SUBSTR(V_LINHA, 17, 15); -- NUM CERTIFICADO | |
v_NUM_PARC := SUBSTR(V_LINHA, 32, 5); -- NUM PARCELA | |
v_COD_RET := SUBSTR(V_LINHA, 37, 3); -- COD RETORNO IMPORTACAO | |
v_MSG_IMP := SUBSTR(V_LINHA, 40, 50); -- MSG DE RETORNO | |
v_DT_IMPO := SUBSTR(V_LINHA, 90, 8); -- DT IMPORT | |
v_NU_LOTE := SUBSTR(V_LINHA, 136, 10); -- NUM LOTE PARCEIRO | |
v_TP_TRAN := SUBSTR(V_LINHA, 146, 1); -- TIPO DE TRANSAC?O | |
-- v_RETORN_ACEIT := SUBSTR(V_LINHA, 162, 3); -- TIP RETORNO AUTOMATICO - SOMENTOA PARA AUTOMATICO | |
INSERT into | |
TA_ARQ_RECB_LAYT_PGTO | |
(COD_SEG, NU_CERT, NUM_PARC, COD_RET, MSG_IMP, DT_IMPO, NU_LOTE, TP_TRAN, RETORN_ACEIT) | |
values (v_COD_SEG, v_NU_CERT, v_NUM_PARC, v_COD_RET, v_MSG_IMP, v_DT_IMPO, v_NU_LOTE, v_TP_TRAN, 0);--v_RETORN_ACEIT); | |
v_QntReg := v_QntReg + 1; | |
ELSIF V_1CARAC = 'T' THEN | |
v_QNT_INF := SUBSTR(V_LINHA, 2, 8); -- validac?o reforcada, | |
IF v_QNT_INF = v_QntReg THEN | |
COMMIT; | |
EXIT; | |
ELSE | |
ROLLBACK; | |
EXIT; | |
END IF; | |
END IF; | |
END LOOP; | |
For y in ( | |
Select | |
ta.nu_cert, ta.num_parc, ta.cod_ret, ta.msg_imp | |
from | |
TA_ARQ_RECB_LAYT_PGTO ta | |
) Loop | |
update | |
ta_pass_segfinac z | |
set | |
z.cod_ret = y.cod_ret, | |
z.msg_imp = y.msg_imp | |
where | |
z.nu_cert = y.nu_cert and | |
z.n_parc = y.num_parc and | |
z.id_segpgto = P_IDHST_PASS; | |
End Loop; | |
for R in ( | |
select mov.id_propcobt | |
,pg.num_parc | |
,mov.idmovicoseg | |
,tfn.tp_operacao | |
from ta_arq_recb_layt_pgto pg | |
inner join ta_pass_segfinac tfn on ( pg.nu_cert = tfn.nu_cert | |
and pg.num_parc = tfn.n_parc) | |
inner join TB_REPASSPARA rp on (tfn.nu_cert = rp.nu_cert) | |
inner join tb_movi_coseg mov on ( rp.id_propcobt = mov.id_propcobt | |
and pg.num_parc = mov.nu_parc_coseg) | |
where tfn.id_segpgto = P_IDHST_PASS | |
and tfn.tp_operacao in (2,3) -- Estorno ou Repasse do pagamento | |
and tfn.cod_ret = 0 | |
) | |
loop | |
UPDATE TB_MOVI_COSEG | |
SET FLG_ENV_PGTO = CASE R.TP_OPERACAO | |
WHEN 2 THEN 2 -- Pagamento estornado | |
WHEN 3 THEN 1 -- Pagamento enviado | |
END | |
WHERE IDMOVICOSEG = R.IDMOVICOSEG; | |
end loop; | |
update th_pass_segpgto th | |
set th.processado = 1, | |
th.qtdregok = (select count(1) | |
from ta_pass_segfinac ta | |
where ta.id_segpgto = P_IDHST_PASS | |
and ta.id_segpgto = th.id_segpgto | |
and ta.cod_ret = 0) | |
where th.id_segpgto = P_IDHST_PASS; | |
select sum(p.cod_ret) into P_TeveErro from ta_pass_segfinac p where p.id_segpgto = P_IDHST_PASS; | |
IF P_TeveErro > 0 THEN | |
P_TeveErro := 1; | |
update th_pass_segpgto set passo = 1 where id_segpgto = P_IDHST_PASS; | |
ELSE | |
update th_pass_segpgto set passo = 2 where id_segpgto = P_IDHST_PASS; | |
END IF; | |
COMMIT; | |
ELSE | |
DBMS_OUTPUT.put_line('LAYOUT NAO REGISTRADO'); | |
END IF; | |
UTL_FILE.fclose(V_ARQUIVO); | |
exception | |
when Utl_File.Invalid_Operation THEN | |
Vs_MensagErros := 'Operac?o invalida no arquivo'; | |
Utl_File.Fclose(V_ARQUIVO); | |
rollback; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Utl_File.Write_Error THEN | |
Vs_MensagErros := 'Erro de gravac?o no arquivo'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Utl_File.Invalid_Path THEN | |
Vs_MensagErros := 'Diretorio invalido'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Utl_File.Invalid_Mode THEN | |
Vs_MensagErros := 'Modo de acesso invalido'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Others then | |
Vs_MensagErros := 'Problemas na gerac?o do arquivo'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
END; | |
Procedure GERA_PAG_ENVIO(P_IDHST_PASS in number) is | |
cursor C_PAG_ENV is | |
select * | |
from ta_pass_segfinac | |
where id_segpgto = P_IDHST_PASS; | |
Content cLob; | |
V_Total_Regs number(8); | |
V_data varchar2(8); | |
V_ddmmyyyy varchar2(8); | |
V_seq number; | |
V_filename varchar2(15); | |
begin | |
SELECT IDSEQUENCIA , to_char(sysdate,'yyyymmdd'), to_char(sysdate,'ddmmyyyy') | |
INTO V_seq, V_data, V_ddmmyyyy | |
FROM SEQUENCIAL | |
WHERE NOME = (Select '10PROSEG' || t.tp_seg from th_pass_segpgto t where t.id_segpgto = P_IDHST_PASS); | |
V_filename := 'ARQ_pgto'; | |
-- HEADER INICO | |
Content := | |
-- ID CAMPO TIPO TAM INI FIM | |
'H'|| -- 1 R IDENTIFICAC?O DO REGISTRO C 01 001 001 | |
'0000000777' || -- 2 R ID EMPRESA - ID CONTRATO C 10 002 011 ??? | |
'0000000777' || -- 3 R ID SISTEMA - ID CONTRATO C 10 012 021 ??? | |
V_ddmmyyyy || -- 4 R DT DO LOTE/MOVIMENTO D 08 022 029 | |
'1' || -- 5 R OPERAC?O - 1 RETORNO DE OPERACOES C 01 030 030 | |
PAD(V_seq,'9',8) || -- 6 R N LOTE - UNICO SEQUENCIAL N 08 031 038 | |
'10' || -- 7 R ID LAYOUT = 10 - CONSTANT N 02 039 040 | |
PAD(1,'9',10) || -- 8 R CODIGO DE ORIGEM N 10 041 050 ????? | |
pad('PROSEG','X',30)|| -- 9 R NOME DA ORIGEM - CONST 'PREVIMIL' C 30 051 080 | |
pad(' ','X',920); -- 10 O FILLER C 920 081 1000 | |
ESCREVE_ARQUIVO(Content || chr(10), V_filename, 'w'); | |
V_Total_Regs := 0; | |
for R in C_PAG_ENV loop | |
Content := | |
-- id desc tp L ini fim | |
'D'|| -- 1 R IDENT DO REG C 1 1 1 | |
r.tp_operacao || -- 2 R TIPO DE OPERAC?O C 1 2 2 - Opc?es 1 Cobranca \2 Estorno \ 3 Repasse \ 4 Credito \ 5 Fatura | |
'1' || -- 3 R TIPO COBRANCA C 1 3 3 - Opc?es 1 Debito em conta / 2 Cart?o de Credito *** N?O E NECESSARIO PREENCHMIENTO | |
PAD(r.nu_cert,'9',30)|| -- 4 R ID ALFASEG (NUM CERTIFICADO) N 30 4 33 ?????? | |
PAD(r.numproposta,'9',30)||-- 5 R ID ALFASEG (NUM CONTRATO) N 30 34 063 ?????? | |
pad(r.n_parc ,'9',5) || -- 6 R PARCELA EXECUTADa 1 5 64 68 - p/ tp seg VG numro da fatura. p/ demais, n parcela | |
-- dt_formt(r.dtinscricao)||-- 7 O DT PAGAMENTO (SE HOUVE) D 8 69 76 ********* | |
dt_formt(r.dtpgto) || -- 7 O DT PAGAMENTO (SE HOUVE) D 8 69 76 ********* | |
pad(' ','X',10) || -- 8 R COD RETORNO -TB ERRO 1 C 10 77 86 | |
pad(' ','X',50) || -- 9 R MENSAGEM RETORNO - TB ERRO 1 C 50 87 136 | |
pad(' ','X',30) || -- 10 O COD DO PRODUTO- NUM REF C 30 137 166 | |
pad(' ','X',30) || -- 11 O NOME PRODUTO - NOM ABREV C 30 167 196 | |
pad(' ','X',30) || -- 12 O COD EMPRESA DO PRODUTO /N?R# C 30 197 226 | |
pad('PROSEG','X',30) || -- 13 O NOME DA EMPRESA / ABREVIA C 30 227 256 | |
dt_formt(r.dtpgto) || -- 14 O DT DE REPASSE C 8 257 264 | |
pad(r.vlcapital * 100,'9', 15) || --15 | |
-- 15 O VALOR DA OPERAC?O N 15 256 279 | |
pad(r.vlrecebido * 100,'9', 15) || --16 | |
-- 16 O VALOR DO REPASSE N 15 280 294 | |
dt_formt(r.dtpgto) || -- 17 O DT DE VENCIMENTO D 8 295 302 | |
dt_formt(r.dtpgto) || -- 18 O DT DE CREDITO D 8 303 310 | |
pad(1,'9', 20) || -- 19 O P/ VG COD DO SUB EST. ** N 20 311 330 PARA OS DEMAIS - DO ESTIPULANTE | |
'01052018' || -- 20 O TP SEG VG = DT INICIO D 8 331 338 DE VIGENCIA DA FATURA. P/ OS DEMAIS, NULO | |
'30042019' || -- 21 O TP SEG VG = DT FIM D 8 339 346 DE VIGENCIA DA FATURA. P/ OS DEMAIS, NULO | |
PAD(0,'9',15) || -- 22 O NOSSO NUMERO N 15 347 361 **** | |
PAD(' ','X',20) || -- 23 O CODIGO CONTRATO N 20 362 381 | |
pad(' ','X',619) || -- 24 O FILLER C 619 382 1000 | |
chr(10); -- carriage return line feed | |
ESCREVE_ARQUIVO(Content, V_filename, 'a'); | |
V_Total_Regs := V_Total_Regs + 1; | |
end loop; | |
-- TRAILLER | |
Content := 'T'|| Lpad(V_Total_Regs, 8, '0') || Rpad(' ',991,' '); | |
ESCREVE_ARQUIVO(Content, V_filename, 'a'); | |
END; | |
Procedure LER_ARQUIVO_03(P_IDHST_PASS in number, l_filename in varchar2, P_TeveErro out number) is | |
V_ARQUIVO UTL_FILE.FILE_TYPE; | |
l_location VARCHAR2(100) := 'ARQUIVOS'; | |
V_LINHA VARCHAR2(32767) := ''; | |
V_tp_lay char(2); | |
V_1CARAC CHAR; | |
v_COD_SEG varchar2(15); | |
v_NU_CERT varchar2(15); | |
v_COD_RET varchar2(3); | |
v_MSG_IMP varchar2(50); | |
v_DT_IMPO varchar2(8); | |
v_ID30 NUMBER; | |
V_DTNASC NUMBER; | |
v_QntReg number; | |
v_QNT_INF number; | |
V_TP_PLA VARCHAR2(2); -- AP ou VG | |
BEGIN | |
V_ARQUIVO := UTL_FILE.fopen(l_location, l_filename, 'R', 32767); | |
UTL_FILE.get_line(V_ARQUIVO, V_LINHA, 32767); -- LER 1? LINHA | |
V_tp_lay := SUBSTR(V_LINHA,12,2); -- VERIFICA O TIPO DE LAYOUT 3 MOVIMENTAC?O / 11 PAGAMENTOS | |
v_QntReg := 0; | |
IF V_tp_lay = '03' THEN | |
PRC_TRUNCATE('TA_ARQ_RECB_LAYT_MOV'); | |
LOOP | |
UTL_FILE.get_line(V_ARQUIVO, V_LINHA, 32767); | |
V_1CARAC := SUBSTR(V_LINHA,1,1); | |
IF V_1CARAC = 'D' THEN -- VERIFICA SE E A LINHA DE TRAILLER, SE N?O FOR... | |
v_COD_SEG := SUBSTR(V_LINHA, 2, 15); -- COD DE SEGURO - PARCEIRO | |
v_NU_CERT := SUBSTR(V_LINHA,17, 15); -- NUM CERTIFICADO | |
v_COD_RET := SUBSTR(V_LINHA,37, 3); -- COD RETORNO IMPORTACAO | |
v_MSG_IMP := SUBSTR(V_LINHA,40, 50); -- MSG DE RETORNO | |
v_DT_IMPO := SUBSTR(V_LINHA,90, 8); -- DT IMPORT | |
IF (trim(v_MSG_IMP) = 'OK') THEN | |
v_COD_RET := 0; | |
END IF; | |
INSERT into | |
TA_ARQ_RECB_LAYT_MOV | |
(COD_SEG, NU_CERT, COD_RET, MSG_IMP, DT_IMPO) | |
values (v_COD_SEG, v_NU_CERT, v_COD_RET, v_MSG_IMP, v_DT_IMPO); | |
v_QntReg := v_QntReg + 1; | |
ELSIF V_1CARAC = 'T' THEN | |
v_QNT_INF := SUBSTR(V_LINHA, 2, 8); | |
IF v_QNT_INF = v_QntReg THEN | |
COMMIT; | |
EXIT; | |
ELSE | |
ROLLBACK; | |
EXIT; | |
END IF; | |
END IF; | |
END LOOP; | |
for R in (SELECT T.*, P.IDPROPOSTA, C.IDPROPCOBERT, TA.TP_OPERACAO, TH.MES_VIG, | |
TA.VLRECEBIDO, TA.VLPREMIO, TA.VLCAPITAL, | |
TH.IDSEGURADORA, TA.IDGRUPO, TA.IDPARTICIPANTE | |
FROM TA_ARQ_RECB_LAYT_MOV T | |
INNER JOIN PROPOSTA P ON (P.NUMPROPOSTA = T.COD_SEG) | |
INNER JOIN PROPCOBERT C ON (C.IDPROPOSTA = P.IDPROPOSTA) | |
INNER JOIN TA_PASS_SEG TA ON ( TA.NUMPROPOSTA = P.NUMPROPOSTA | |
AND TA.IDPROPCOBERT = C.IDPROPCOBERT | |
AND TA.IDTH_PASS_SEG = P_IDHST_PASS) | |
INNER JOIN TH_PASS_SEG TH ON (TA.IDTH_PASS_SEG = TH.IDTH_PASS_SEG)) | |
LOOP | |
UPDATE TA_PASS_SEG S | |
SET S.COD_ERR = R.COD_RET, | |
S.MSG_IMP = R.MSG_IMP | |
WHERE S.NUMPROPOSTA = R.COD_SEG | |
AND S.IDTH_PASS_SEG = P_IDHST_PASS; | |
UPDATE TH_COBT_COSEG C | |
SET C.NU_CERT = R.NU_CERT | |
WHERE C.ID_PROPCOBT = R.IDPROPCOBERT; | |
IF R.TP_OPERACAO = 'IN' THEN -- INCLUS?O | |
SELECT P.DTNASCIMENTO INTO V_DTNASC FROM PARTICIPANTE P WHERE P.IDPARTICIPANTE = R.IDPARTICIPANTE; | |
IF (R.IDGRUPO = 548) THEN -- aplicado apenas para planos NOVOS | |
IF (pkg_funcgerais.calc_idade(V_DTNASC, to_char(last_day(to_date(R.MES_VIG || '01', 'yyyymmdd')),'yyyymmdd')) < 14) THEN | |
v_ID30 := 1; | |
ELSIF (pkg_funcgerais.calc_idade(V_DTNASC, to_char(last_day(to_date(R.MES_VIG || '01', 'yyyymmdd')),'yyyymmdd')) < 66) THEN | |
v_ID30 := 2; | |
END IF; | |
ELSE | |
v_ID30 := 1; | |
END IF; | |
SELECT TP_SEG INTO V_TP_PLA FROM TH_PASS_SEG WHERE IDTH_PASS_SEG = P_IDHST_PASS; | |
INSERT INTO TB_REPASSPARA | |
(ID_PROPCOBT, ID_SEG, NU_CERT, VLRECEBIDO, VLPREMIO, VLCAPITAL, | |
DT_ENV, FLG_ATIVO, ID30, IDGRUPO, DT_ENV_INIC, TP_PLA) | |
VALUES | |
(R.IDPROPCOBERT, R.IDSEGURADORA, R.NU_CERT, R.VLRECEBIDO, R.VLPREMIO, R.VLCAPITAL, | |
R.MES_VIG, 1, v_ID30, R.IDGRUPO, R.MES_VIG, V_TP_PLA); | |
ELSIF R.TP_OPERACAO IN ('AL', '__') THEN -- ALTERAC?O | |
UPDATE TB_REPASSPARA T | |
SET | |
T.VLRECEBIDO = R.VLRECEBIDO, | |
T.VLPREMIO = R.VLPREMIO, | |
T.VLCAPITAL = R.VLCAPITAL, | |
T.DT_ENV = R.MES_VIG | |
WHERE | |
T.NU_CERT = R.NU_CERT; | |
ELSIF R.TP_OPERACAO IN ('CA', 'CI') THEN -- CANCELAMENTO | |
UPDATE TB_REPASSPARA T | |
SET | |
T.DT_ENV = R.MES_VIG, | |
T.FLG_ATIVO = 0 | |
WHERE | |
T.NU_CERT = R.NU_CERT; | |
END IF; | |
END LOOP; | |
update th_pass_seg th | |
set th.processado = 1, | |
th.qtdregok = (select count(1) | |
from ta_pass_seg ta | |
where ta.idth_pass_seg = P_IDHST_PASS | |
and ta.idth_pass_seg = th.idth_pass_seg | |
and ta.cod_err = 0) | |
where th.idth_pass_seg = P_IDHST_PASS; | |
Select sum(cod_err) into P_TeveErro from ta_pass_seg p where p.idth_pass_seg = P_IDHST_PASS; | |
IF P_TeveErro > 0 THEN | |
P_TeveErro := 1; | |
update th_pass_seg set passo = 1 where idth_pass_seg = P_IDHST_PASS; | |
commit; | |
ELSE | |
update th_pass_seg set passo = 2 where idth_pass_seg = P_IDHST_PASS; | |
END IF; | |
COMMIT; | |
ELSE | |
DBMS_OUTPUT.put_line('Arquivo errado'); | |
END IF; | |
UTL_FILE.fclose(V_ARQUIVO); | |
exception | |
when Utl_File.Invalid_Operation THEN | |
Vs_MensagErros := 'Operac?o invalida no arquivo'; | |
Utl_File.Fclose(V_ARQUIVO); | |
rollback; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Utl_File.Write_Error THEN | |
Vs_MensagErros := 'Erro de gravac?o no arquivo'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Utl_File.Invalid_Path THEN | |
Vs_MensagErros := 'Diretorio invalido'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Utl_File.Invalid_Mode THEN | |
Vs_MensagErros := 'Modo de acesso invalido'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
when Others then | |
Vs_MensagErros := 'Problemas na gerac?o do arquivo'; | |
Utl_File.Fclose(V_ARQUIVO); | |
ROLLBACK; | |
RAISE_APPLICATION_ERROR(-20001, Vs_MensagErros || ' : ' || SQLERRM); | |
END; | |
Procedure Cria_Massa_financ2(P_IDHST_PASS in number, P_IDUSUARIO IN NUMBER) is -- procedure interna | |
v_sequenc number; | |
V_TPplan VARCHAR2(2); | |
v_MESVIG NUMBER; | |
v_DT number; | |
v_total number; | |
Begin | |
PRC_TRUNCATE('TA_PASS_SEGF_ERR'); | |
insert into TA_PASS_SEGF_ERR(nu_cert) | |
select nu_cert from ta_pass_segfinac t where t.id_segpgto = P_IDHST_PASS; | |
commit; | |
select | |
max (p.id_segpgto) + 1, | |
to_number(to_char(sysdate, 'YYYYMMDD')) | |
into | |
v_sequenc, v_DT | |
from th_pass_segpgto p; | |
SELECT T.MES_VIG, T.TP_SEG | |
INTO v_MESVIG, V_TPplan | |
FROM TH_PASS_SEG T | |
WHERE T.IDTH_PASS_SEG = P_IDHST_PASS; | |
insert into th_pass_segpgto (id_segpgto, mes_vig, tp_seg, dtgeracao, idusuario, passo) values | |
(v_sequenc, v_MESVIG, V_TPplan, v_DT, P_IDUSUARIO, 0); | |
INSERT INTO -- insert de pagamentos | |
ta_pass_segfinac | |
(id_segpgto, NU_CERT, NUMPROPOSTA,VLRECEBIDO, | |
VLCAPITAL, DTPGTO, TP_OPERACAO, n_parc) | |
Select | |
v_sequenc, | |
r.nu_cert, | |
pro.numproposta, | |
mov.vlpgto vlrecebido, | |
r.vlcapital, | |
mov.dtpgto, 3 tp_cobranca, -- 3 = repasse | |
c.nu_parc_coseg n_parc | |
from | |
tb_repasspara r | |
inner join movcontrib_atual mov on r.id_propcobt = mov.idpropcobert | |
inner join tb_movi_coseg c on mov.idmovcontrib = c.id_movicntb | |
inner join proposta pro on mov.idproposta = pro.idproposta | |
-- APENA OS INCONSISTENTES | |
INNER JOIN TA_PASS_SEGF_ERR ERR ON r.nu_cert = ERR.Nu_Cert | |
where | |
r.flg_ativo = 1 | |
and r.nu_cert is not null | |
and mov.mes_vig <= v_MESVIG | |
and nvl(mov.dtpgto,0) > 0 -- E para considerar a data de pagamento e n?o a de classificac?o | |
and mov.flgsituacao in (2, 3) | |
and c.flg_env_pgto = 0 | |
and r.tp_pla = V_TPplan; | |
select count(1) into v_total from ta_pass_segfinac where id_segpgto = v_sequenc; | |
update th_pass_segpgto | |
set qtdreg = v_total, | |
arquivo = '10PROSEG' || V_TPplan || '_' || v_DT || '_' || lpad(v_sequenc, 10, '0') || '.TXT' | |
where id_segpgto = v_sequenc; | |
commit; | |
end; | |
END PKG_PASS_SEG; | |
/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment