Está en la página 1de 10

create or replace PACKAGE BODY PR_RS_CALCULAR

AS

FUNCTION F_DES_DIAGNOSTICO
(
p_nCodDiagnostico IN DIAGNOSTICO.COD_DIAGNOSTICO%TYPE,
p_nDato
IN NUMBER
)
RETURN CHAR IS
p_cDescripcion
p_cDes_Resumida
p_cDesTip
p_cCodGrupoDiagnostico
p_cNivel
BEGIN
SELECT
INTO
o, p_cNivel
FROM
WHERE

DIAGNOSTICO.DESCRIPCION%type;
DIAGNOSTICO.DES_RESUMIDA%type;
DIAGNOSTICO.DES_TIP%type;
DIAGNOSTICO.COD_GRUPO_DIAGNOSTICO%type;
DIAGNOSTICO.NIVEL%type;

DESCRIPCION, DES_RESUMIDA, DES_TIP, COD_GRUPO_DIAGNOSTICO, NIVEL


p_cDescripcion, p_cDes_Resumida, p_cDesTip, p_cCodGrupoDiagnostic
DIAGNOSTICO
cod_diagnostico = p_nCodDiagnostico;

IF p_nDato = 1 THEN
RETURN p_cDescripcion;
END IF;
IF p_nDato = 2 THEN
RETURN p_cDes_Resumida;
END IF;
IF p_nDato = 3 THEN
RETURN p_cDesTip;
END IF;
IF p_nDato = 4 THEN
RETURN p_cCodGrupoDiagnostico;
END IF;
IF p_nDato = 5 THEN
RETURN p_cNivel;
END IF;
END F_DES_DIAGNOSTICO;
FUNCTION F_PARAMETRO_USUARIO
(
p_nCodParametro PARAMETRO.COD_PARAMETRO%TYPE,
p_cDescripcion PARAMETRO.DESCRIPCION%TYPE
)
RETURN NUMERIC
IS
li_count NUMBER;
BEGIN
li_count :=0 ;
SELECT COUNT(*) INTO li_count FROM PARAMETRO
WHERE COD_PARAMETRO = p_nCodParametro and UPPER(DESCRIPCION) LIKE '%
'|| UPPER(p_cDescripcion)||'%';

IF li_count = NULL THEN


li_count := 0 ;
END IF;
RETURN li_count;
END F_PARAMETRO_USUARIO;
FUNCTION F_DES_BENEFICIO
(
p_cCodBeneficio TABLA_BENEFICIO.COD_BENEFICIO%TYPE,
p_nDato
NUMBER
)
RETURN CHAR
IS
cDescripcion TABLA_BENEFICIO.DESCRIPCION%TYPE;
cDesResumida TABLA_BENEFICIO.DES_RESUMIDA%TYPE;
cDesTip
TABLA_BENEFICIO.DES_TIP%TYPE;
BEGIN
BEGIN
SELECT
DESCRIPCION,
DES_RESUMIDA,
DES_TIP
INTO cDescripcion ,
cDesResumida,
cDesTip
FROM tabla_beneficio
WHERE cod_beneficio = p_cCodBeneficio;
EXCEPTION WHEN no_data_found THEN
RETURN NULL;
END;
IF p_nDato = 1 THEN
RETURN cDescripcion;
ELSIF p_nDato = 2 THEN
RETURN cDesResumida;
ELSE
RETURN cDesTip;
END IF;
END F_DES_BENEFICIO;
PROCEDURE SP_REF_SIGUIENTE_DESTINO
(
p_nTipoEntidadSalud
IN DOCUMENTO.TIPO_ENTIDAD_SALUD%TYPE,
P_nCodEntidadSalud
IN DOCUMENTO.COD_ENTIDAD_SALUD%TYPE,
p_nCodSeguimientoDoc
IN DOCUMENTO.COD_SEGUIMIENTO_DOC%TYPE,
p_nNroSecuenciaSeguimiento IN DOCUMENTO.NRO_SECUENCIA_SEGUIMIENTO%TYP
E,
p_cCodDestino
p_subDestino
p_nRetorno
)
IS

OUT DOCUMENTO.COD_DESTINO%TYPE,
OUT DOCUMENTO.COD_SUB_DESTINO%TYPE,
OUT INTEGER

nCodSeguimientoDoc
IENTO_DOC%TYPE;
nNroSecuenciaSeguimiento
cia_Seguimiento%TYPE;
nDivisoria
TYPE;
cCodDestino
o%TYPE;
cCodSubDestino
stino%TYPE;

SEGUIMIENTO_DOCUMENTARIO_DEST.COD_SEGUIM
SEGUIMIENTO_DOCUMENTARIO_DEST.Nro_Secuen
SEGUIMIENTO_DOCUMENTARIO_DEST.Divisoria%
SEGUIMIENTO_DOCUMENTARIO_DEST.Cod_Destin
SEGUIMIENTO_DOCUMENTARIO_DEST.Cod_Sub_De

BEGIN
p_nRetorno := 1;
BEGIN
SELECT COD_SEGUIMIENTO_DOC,
NRO_SECUENCIA_SEGUIMIENTO,
DIVISORIA,
COD_DESTINO,
COD_SUB_DESTINO
INTO

nCodSeguimientoDoc,
nNroSecuenciaSeguimiento,
nDivisoria,
cCodDestino,
cCodSubDestino

FROM SEGUIMIENTO_DOCUMENTARIO_DEST
WHERE ( TIPO_ENTIDAD_SALUD
=
AND ( COD_ENTIDAD_SALUD
=
AND ( COD_SEGUIMIENTO_DOC
=
AND ( NRO_SECUENCIA_SEGUIMIENTO =
AND ( STATUS_REGISTRO
=

p_nTipoEntidadSalud
)
p_nCodEntidadSalud
)
p_nCodSeguimientoDoc
)
p_nNroSecuenciaSeguimiento)
'V'
);

EXCEPTION WHEN NO_DATA_FOUND THEN


p_nRetorno
:= 0;
cCodDestino
:= NULL;
cCodSubDestino := NULL;
END;
p_cCodDestino := cCodDestino;
p_subDestino
:= cCodSubDestino;
END SP_REF_SIGUIENTE_DESTINO;
PROCEDURE SP_OF_SIGUIENTE_DESTINO
(
p_nTipoEntidadSalud
AFILIADO_PRODUCTO.TIPO_ENTIDAD_SALUD%TYPE,
p_nCodEntidadSalud
AFILIADO_PRODUCTO.COD_ENTIDAD_SALUD%TYPE,
p_nCodAfiliado
AFILIADO_PRODUCTO.COD_AFILIADO%TYPE,
p_nAnoDocumento
DOCUMENTO.ANO_DOCUMENTO%TYPE,
p_nNroDocumento
DOCUMENTO.NRO_DOCUMENTO%TYPE,
p_cCodProducto
AFILIADO_PRODUCTO.COD_PRODUCTO%TYPE,
p_cFormaReclamo
TABLA_SEGUIMIENTO_DOCUMENTARIO.FORMA_RECLA
MO%TYPE,
p_cCodSubDestinoSiguiente DOCUMENTO.COD_SUB_DESTINO_SIGUIENTE%TYPE,

p_cCodUsuarioUpdate
p_cCodDestino
p_cCodSubDestino
p_cObservaciones
) IS
ll_item
p_nCodCliente
p_cTipoAfiliado
ls_y
ls_vip
ls_x
p_nCodSeguimientoDoc
%TYPE;
p_cCodDestinoSiguiente
p_dToday
p_cMsgError
p_nNumError

DOCUMENTO.COD_USUARIO_UPDATE%TYPE,
DOCUMENTO_MOVIMIENTO.COD_DESTINO%TYPE,
DOCUMENTO_MOVIMIENTO.COD_SUB_DESTINO%TYPE,
DOCUMENTO_MOVIMIENTO.OBSERVACIONES%TYPE

NUMBER;
AFILIADO_PRODUCTO.COD_CLIENTE%TYPE;
DOCUMENTO.TIPO_AFILIADO%TYPE;
VARCHAR2(5);
VARCHAR2(1);
VARCHAR2(10);
TABLA_SEGUIMIENTO_DOCUMENTARIO.COD_SEGUIMIENTO_DOC
DOCUMENTO.COD_DESTINO_SIGUIENTE%TYPE;
DATE;
VARCHAR(5000);
NUMBER;

BEGIN
ll_item := 0;
SELECT
o FROM DOCUMENTO
WHERE
AND
AND
AND

COD_CLIENTE, TIPO_AFILIADO INTO p_nCodCliente, p_cTipoAfiliad


TIPO_ENTIDAD_SALUD
COD_ENTIDAD_SALUD
ANO_DOCUMENTO
NRO_DOCUMENTO

=
=
=
=

p_nTipoEntidadSalud
p_nCodEntidadSalud
p_nAnoDocumento
p_nNroDocumento;

SELECT INDICADOR_VIP INTO ls_vip FROM AFILIADO_PRODUCTO


WHERE TIPO_ENTIDAD_SALUD = p_nTipoEntidadSalud
AND COD_ENTIDAD_SALUD = p_nCodEntidadSalud
AND COD_AFILIADO = p_nCodAfiliado
AND COD_CLIENTE = p_nCodCliente
AND COD_PRODUCTO = p_cCodProducto
AND TIPO_AFILIADO = p_cTipoAfiliado;
IF p_cCodProducto = 'S' THEN
ls_y := 'SALUD';
ELSIF p_cCodProducto = 'S' THEN
ls_y := 'AUS' ;
ELSE
ls_y := 'SCTR';
END IF;
IF p_cFormaReclamo = 'C' THEN
ls_x := 'CREDITO';
ELSE
ls_x := 'REEMBOLSO';
END IF;
SELECT COD_SEGUIMIENTO_DOC INTO p_nCodSeguimientoDoc FROM TABLA_SEGU
IMIENTO_DOCUMENTARIO
WHERE FORMA_RECLAMO = p_cFormaReclamo AND COD_PRODUCTO = p_cCodProdu
cto;
IF SQL%ROWCOUNT >0 THEN
p_cMsgError := 'Atencin, No se ha definido un cdigo de SEGUIMIENTO
DOCUMENTARIO para' || ls_x || '/' || ls_y ||'Sirvase revisar';

p_nNumError := -2;
END IF;
--select SP_REF_SIGUIENTE_DESTINO(1,4,37,2) into ls_destino_siguient
e from dual ;
IF p_cCodDestinoSiguiente = NULL THEN
p_cMsgError := 'Atencin, No se ha encontrado ningun registro de s
eguimiento para las caracteristicas de este documento... Sirvase Coordinar con e
l area de sistemas, llevando una copia de la informacion de la pnatalla. Presion
e cualquier tecla para terminar...!!!';
p_nNumError := -2;
END IF;
SELECT SYSDATE INTO p_dToday from dual;
UPDATE DOCUMENTO SET
COD_DESTINO_SIGUIENTE
COD_SUB_DESTINO_SIGUIENTE
STATUS_CONTROL_DOC
COD_USUARIO_UPDATE
FEC_UPDATE
WHERE TIPO_ENTIDAD_SALUD
AND COD_ENTIDAD_SALUD
AND ANO_DOCUMENTO
AND NRO_DOCUMENTO

=
=
=
=
=
=
=
=
=

p_cCodDestinoSiguiente,
p_cCodSubDestinoSiguiente,
71,
p_cCodUsuarioUpdate,
p_dToday
p_nTipoEntidadSalud
p_nCodEntidadSalud
p_nAnoDocumento
p_nNroDocumento;

SELECT MAX(NRO_ITEM_MOVIMIENTO) into ll_item FROM DOCUMENTO_MOVIMIENT


O
WHERE
AND
AND
AND

TIPO_ENTIDAD_SALUD
COD_ENTIDAD_SALUD
ANO_DOCUMENTO
NRO_DOCUMENTO

=
=
=
=

p_nTipoEntidadSalud
p_nCodEntidadSalud
p_nAnoDocumento
p_nNroDocumento;

IF ll_item = NULL THEN


ll_item := 0;
ll_item := ll_item + 1;
END IF;
INSERT INTO DOCUMENTO_MOVIMIENTO ( TIPO_ENTIDAD_SALUD, COD_ENTIDAD_SAL
UD, ANO_DOCUMENTO, NRO_DOCUMENTO,
NRO_ITEM_MOVIMIENTO, FEC_MOVIMIENTO
, COD_DESTINO, COD_SUB_DESTINO, OBSERVACIONES, STATUS_CONTROL_DOC,
COD_USUARIO_CREADOR, FEC_CREACION,
COD_USUARIO_UPDATE, FEC_UPDATE)
VALUES ( p_nTipoEntidadSalud, p_nCodEntidadS
alud, p_nAnoDocumento, p_nNroDocumento,
ll_item, p_dToday, p_cCodDestino, p
_cCodSubDestino, p_cObservaciones, '71',
p_cCodUsuarioUpdate, p_dToday, p_c
CodUsuarioUpdate, p_dToday);
IF SQL%ROWCOUNT <> 0 THEN
p_cMsgError := 'Error insertando en documento movimiento' || ' Err
or' || SQLERRM;
END IF;
IF PR_PAQUETE_FC.F_GET_PARAMETRO(782,1) = 'S' THEN
PR_SINIESTRO_RS.ACTUALIZA_FACTURA(1,4,5,7923);

END IF;
END SP_OF_SIGUIENTE_DESTINO;

PROCEDURE SP_CALCULO_AUDITORIA(
D%TYPE,

p_nTipoEntidad IN DOCUMENTO.TIPO_ENTIDAD_SALU
p_nCodEntidad IN DOCUMENTO.COD_ENTIDAD_SALUD

%TYPE,
p_nAnoDoc

IN DOCUMENTO.ANO_DOCUMENTO%TYP

P_nNroDoc

IN DOCUMENTO.NRO_DOCUMENTO%TYP

p_Usuario
p_nNumError
p_cMsgError

IN VARCHAR2,
OUT NUMBER,
OUT VARCHAR2) IS

E,
E,

nCount
cGetParametro
dToday
nRows
nRetorno
cFormaReclamo
cCodStatusDoc
cCodProducto
cInd_Fact_Glo
nCod_Proveedor
nImp_Pagar_Afiliado
cTexto
nRet_Envio
nNumError
cMsgError

NUMBER;
VARCHAR2(20);
DATE;
NUMBER;
NUMBER;
DOCUMENTO.FORMA_RECLAMO%TYPE;
DOCUMENTO.COD_STATUS_DOCUMENTO%TYPE;
DOCUMENTO.COD_PRODUCTO%TYPE;
DOCUMENTO.ind_factura_global%TYPE;
DOCUMENTO.COD_PROVEEDOR%TYPE;
DOCUMENTO.IMP_PAGAR_AFILIADO%tYPE;
VARCHAR2(20);
NUMBER;
NUMBER := 0;
VARCHAR2(20000) := '';

BEGIN
p_nNumError := 0;
p_cMsgError := '';
BEGIN
PR_RS_CALCULAR.SP_GET_VALIDA_OBLIGACION(p_nTipoEntidad,
p_nCodEntidad,
p_nAnoDoc,
P_nNroDoc,
nNumError,
cMsgError);
IF nNumError < 0 THEN
p_nNumError := nNumError;
p_cMsgError := cMsgError;
RETURN;
END IF;
END;
nCount := 0;
SELECT F_GET_PARAMETRO(422, 1) INTO cGetParametro FROM DUAL;
IF cGetParametro = 'S' AND nCount = 0 THEN
BEGIN
UPDATE pre_liquidacion
SET cod_status_pre_liquidacion = 'A' -- Anulado
WHERE tipo_entidad_salud = p_nTipoEntidad

AND
AND
AND
AND
AND

cod_entidad_salud = p_nCodEntidad
ano_documento = p_nAnoDoc
nro_documento = P_nNroDoc
nro_correlativo_liq > 1
cod_status_pre_liquidacion = 'V'; -- Vigente

EXCEPTION
WHEN OTHERS THEN
p_nNumError := -2;
p_cMsgError := p_cMsgError || ' ' || SQLERRM;
END;
END IF;

IF p_nAnoDoc > 0 AND P_nNroDoc > 0 THEN


SELECT SYSDATE INTO dToday from dual;
SELECT
INTO
FROM
WHERE
and
and
and
and

count(1)
nRows
PRE_LIQUIDACION_PROCEDIMIENTO, PRE_LIQUIDACION
PRE_LIQUIDACION.TIPO_ENTIDAD_SALUD =
PRE_LIQUIDACION_PROCEDIMIENTO.TIPO_ENTIDAD_SALUD
PRE_LIQUIDACION.COD_ENTIDAD_SALUD =
PRE_LIQUIDACION_PROCEDIMIENTO.COD_ENTIDAD_SALUD
PRE_LIQUIDACION.ANO_DOCUMENTO =
PRE_LIQUIDACION_PROCEDIMIENTO.ANO_DOCUMENTO
PRE_LIQUIDACION.NRO_DOCUMENTO =
PRE_LIQUIDACION_PROCEDIMIENTO.NRO_DOCUMENTO
PRE_LIQUIDACION.NRO_CORRELATIVO_LIQ =
PRE_LIQUIDACION_PROCEDIMIENTO.NRO_CORRELATIVO_LIQ
PRE_LIQUIDACION_PROCEDIMIENTO.NRO_CORRELATIVO_LIQ > 1
PRE_LIQUIDACION.TIPO_ENTIDAD_SALUD = p_nTipoEntidad
PRE_LIQUIDACION.COD_ENTIDAD_SALUD = p_nCodEntidad
PRE_LIQUIDACION.ANO_DOCUMENTO = p_nAnoDoc
PRE_LIQUIDACION.NRO_DOCUMENTO = P_nNroDoc
PRE_LIQUIDACION.COD_STATUS_PRE_LIQUIDACION = 'V';

and
AND
and
and
and
and
END IF;
IF nRows > 0 THEN
BEGIN
usp_calculo_indiv(p_nTipoEntidad,
p_nCodEntidad,
p_nAnoDoc,
P_nNroDoc,
dToday,
nRetorno);
EXCEPTION
WHEN OTHERS THEN
p_nNumError := -1;
p_cMsgError := SQLCODE || ' ' || SQLERRM;
NULL;
END;
ELSE

p_cMsgError := 'Error en Proceso de Clculo No hay PRE LIQUIDACIONES generad


as';

p_nNumError := -2;
RETURN;
END IF;
IF nRetorno > 0 OR SQLCODE <> 0 THEN
IF SQLCODE <> 0 THEN
p_cMsgError := 'Error en Proceso de Calculo' || 'Error' || SQLERRM;
UPDATE documento
SET cod_status_documento = '2', ind_auditoria = 0
WHERE tipo_entidad_salud = p_nTipoEntidad
AND cod_entidad_salud = p_nCodEntidad
AND ano_documento = p_nAnoDoc
AND nro_documento = P_nNroDoc;
ELSE
SELECT forma_reclamo
INTO cFormaReclamo
FROM documento
WHERE tipo_entidad_salud = p_nTipoEntidad
AND cod_entidad_salud = p_nCodEntidad
AND ano_documento = p_nAnoDoc
AND nro_documento = P_nNroDoc;
IF cFormaReclamo = 'C' THEN
cTexto := 'CRDITO';
ELSE
cTexto := 'REEMBOLSO';
END IF;
UPDATE documento
SET ind_auditoria = 0
WHERE tipo_entidad_salud = p_nTipoEntidad
AND cod_entidad_salud = p_nCodEntidad
AND ano_documento = p_nAnoDoc
AND nro_documento = P_nNroDoc;
p_cMsgError := 'Clculo de Documento ENVIAR DOCUMENTO AL AREA DE DEVOLUCIO
NES; ' ||
cTexto;
p_nNumError := 0;
END IF;
ELSE
If SQLCODE <> 0 THEN
UPDATE documento
SET cod_status_documento = '2', ind_auditoria = 0
WHERE tipo_entidad_salud = p_nTipoEntidad
AND cod_entidad_salud = p_nCodEntidad
AND ano_documento = p_nAnoDoc
AND nro_documento = P_nNroDoc;
p_cMsgError := 'Error en Proceso de Calculo' || SQLERRM;
p_nNumError := -2;
RETURN;
ELSE
BEGIN
SP_VALIDA_CALCULO(p_nTipoEntidad,
p_nCodEntidad,
p_nAnoDoc,
P_nNroDoc,
nNumError,
cMsgError);
IF nNumError < 0 THEN

UPDATE
SET
WHERE
AND
AND
AND

documento
cod_status_documento = '2', ind_auditoria = 0
tipo_entidad_salud = p_nTipoEntidad
cod_entidad_salud = p_nCodEntidad
ano_documento = p_nAnoDoc
nro_documento = P_nNroDoc;

p_cMsgError := cMsgError || SQLERRM;


p_nNumError := nNumError;
RETURN;
END IF;
END;
SELECT
INTO
FROM
WHERE
AND
AND
AND

cod_status_documento, forma_reclamo, cod_producto


cCodStatusDoc, cFormaReclamo, cCodProducto
documento
tipo_entidad_salud = p_nTipoEntidad
cod_entidad_salud = p_nCodEntidad
ano_documento = p_nAnoDoc
nro_documento = P_nNroDoc;

IF TRIM(p_Usuario) <> 'NOVATEST' THEN


SELECT F_GET_PARAMETRO(318, 1) INTO cGetParametro FROM DUAL;
IF cFormaReclamo = 'R' AND cGetParametro = 'S' THEN
IF cCodStatusDoc = '3' AND cCodProducto <> 'P' THEN
UPDATE documento
SET cod_status_documento = 'V'
WHERE tipo_entidad_salud = p_nTipoEntidad
AND cod_entidad_salud = p_nCodEntidad
AND ano_documento = p_nAnoDoc
AND nro_documento = P_nNroDoc;
END IF;
END IF;
END IF;
SELECT
INTO
FROM
WHERE
AND
AND
AND

forma_reclamo, ind_factura_global
cFormaReclamo, cInd_Fact_Glo
documento
tipo_entidad_salud = p_nTipoEntidad
cod_entidad_salud = p_nCodEntidad
ano_documento = p_nAnoDoc
nro_documento = P_nNroDoc;

IF cInd_Fact_Glo = 'S' THEN


p_cMsgError := p_cMsgError ||
'Clculo de Documento, El documento debe regresar a crdito
s para culminar el proceso de la Facturacin Global';
p_nNumError := 0;
END IF;
IF cFormaReclamo = 'C' THEN
nRet_Envio := 0;
IF nRet_Envio = 0 THEN
NULL;
ELSE
p_cMsgError := 'Error en envio de Liquidaciones a Finanzas Error ' |
|
TO_CHAR(nRet_Envio);
p_nNumError := -2;
END IF;

END IF;
SELECT
INTO
FROM
WHERE
AND
AND
AND

cod_proveedor, imp_pagar_afiliado
nCod_Proveedor, nImp_Pagar_Afiliado
documento
tipo_entidad_salud = p_nTipoEntidad
cod_entidad_salud = p_nCodEntidad
ano_documento = p_nAnoDoc
nro_documento = P_nNroDoc;

IF nCod_Proveedor = 624 AND nImp_Pagar_Afiliado > 0 THEN


BEGIN
usp_fuerza_controles_fasa(p_nAnoDoc, P_nNroDoc, nRet_Envio);
EXCEPTION
WHEN OTHERS THEN
p_nNumError := -1;
p_cMsgError := p_cMsgError || ' ' || SQLERRM;
END;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
p_nNumError := -1;
p_cMsgError := SQLCODE || '-' || SQLERRM;
END SP_CALCULO_AUDITORIA;

END PR_RS_CALCULAR;

También podría gustarte