TFS_ANTIGUO/PrendarioDavivienda/ESTRUCTURA_BD/ESTRUCTURA_BPMDATA.txt

2366 lines
170 KiB
Text
Raw Permalink Normal View History

<EFBFBD><EFBFBD>USE [BPMDATA]
GO
/****** Object: Table [Parametros].[WFShockTipoCambio] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Parametros].[WFShockTipoCambio]') AND type in (N'U'))
DROP TABLE [Parametros].[WFShockTipoCambio]
GO
/****** Object: Table [Parametros].[WFShockTasaInteres] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Parametros].[WFShockTasaInteres]') AND type in (N'U'))
DROP TABLE [Parametros].[WFShockTasaInteres]
GO
/****** Object: Table [Parametros].[WFGradualidadCobertura] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Parametros].[WFGradualidadCobertura]') AND type in (N'U'))
DROP TABLE [Parametros].[WFGradualidadCobertura]
GO
/****** Object: UserDefinedFunction [dbo].[F_pmt] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[F_pmt]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[F_pmt]
GO
/****** Object: UserDefinedFunction [dbo].[F_getCuotaDTI] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[F_getCuotaDTI]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[F_getCuotaDTI]
GO
/****** Object: StoredProcedure [dbo].[usp_wf_sensibilizacion_deudas] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_wf_sensibilizacion_deudas]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[usp_wf_sensibilizacion_deudas]
GO
/****** Object: StoredProcedure [dbo].[usp_wf_riesgocambiario_CSD] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_wf_riesgocambiario_CSD]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[usp_wf_riesgocambiario_CSD]
GO
/****** Object: StoredProcedure [dbo].[usp_wf_generador_moneda] Script Date: 16/02/2018 10:43:05 a.m. ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_wf_generador_moneda]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[usp_wf_generador_moneda]
GO
/****** Object: StoredProcedure [dbo].[usp_wf_generador_moneda] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_wf_generador_moneda]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
------------------------------------------------------------------------------
-- Ultimus LA
-- Nombre SP: usp_wf_generador_moneda
-- Proceso Utiliza: PrestamoPrendario
-- Creado Por: Byron Madrigal
-- Fecha Creaci<00>n: 22/11/2016
------------------------------------------------------------------------------
-- Modif. Por: Andres Leon R
-- Modif. Fecha : 24/10/2017
-- Modif. Detalle:Nuevos ajuste Proyecto Actualizaci<00>n
------------------------------------------------------------------------------
/*
exec [usp_wf_generador_moneda]
@i_opcion = 1,
@i_incidente = 109,
@i_solicitud = 145,
@i_idcliente = 180,
@i_identificacion = ''01-1288-0438'',
@i_proceso = ''PrestamoPrendario'',
@i_ingreso_brut_col = 1652000.00,
@i_ingreso_brut_dol = 0,
@i_tipo_cambio = 542,
@i_fecha_solicitud = ''2016-07-05''
exec [usp_wf_generador_moneda]
@i_opcion = 1,
@i_incidente = 217,
@i_solicitud = 253,
@i_idcliente = 293,
@i_identificacion = ''02-0726-0237'',
@i_proceso = ''PrestamoPrendario'',
@i_ingreso_brut_col = 1348310.0000,
@i_ingreso_brut_dol = 1753.5500,
@i_tipo_cambio = 562.75,
@i_fecha_solicitud = ''2017-03-23''
*/
CREATE PROCEDURE [dbo].[usp_wf_generador_moneda]
@i_opcion INT,
@i_incidente INT = 0,
@i_solicitud INT = 0,
@i_proceso VARCHAR(50) = '''',
@i_idcliente INT = NULL,
@i_identificacion VARCHAR(30) = '''',
@i_ingreso_brut_col FLOAT = NULL,
@i_ingreso_brut_dol FLOAT = NULL,
@i_tipo_cambio FLOAT = NULL,
@i_fecha_solicitud VARCHAR(10) = NULL
AS
DECLARE @o_res_code INT,
@o_res_message NVARCHAR(MAX),
@o_res_err_procedure NVARCHAR(MAX),
@o_res_err_line INT,
@o_tipo_generador INT,
@o_desc_tipo_generador NVARCHAR(100),
@MonedaIngresos CHAR(1) = '''',
@MonedaDeudaActual CHAR(1) = '''', -- C = Colones, D = Dolares, T = Todas
@SumaCuotasCIC FLOAT = 0,
@SumaCuotasFSN FLOAT = 0,
@SumaTotal FLOAT = 0,
@DeudaActualColones INT = 0,
@DeudaActualDolares INT = 0,
@Cobertura CHAR(1) = '''', -- C = Cubre, N = No Cubre
@PuntoCorte FLOAT,
@CSDCliente FLOAT,
@Riesgo NVARCHAR(50)
IF @i_opcion = 1
BEGIN
BEGIN TRY
BEGIN TRAN T1
SET @i_fecha_solicitud = ISNULL(@i_fecha_solicitud, '''')
SELECT @i_ingreso_brut_col = ISNULL(@i_ingreso_brut_col,0),
@i_ingreso_brut_dol = ISNULL(@i_ingreso_brut_dol,0),
@i_tipo_cambio = ISNULL(@i_tipo_cambio,1),
@i_fecha_solicitud = CONVERT(DATE,CONVERT(VARCHAR(20),ISNULL(@i_fecha_solicitud, GETDATE()),105)),
@o_tipo_generador = 0,
@o_desc_tipo_generador = ''''
BEGIN -- Moneda Ingreso
SELECT @i_ingreso_brut_col = ISNULL(@i_ingreso_brut_col,0),
@i_ingreso_brut_dol = ISNULL(@i_ingreso_brut_dol,0),
@i_tipo_cambio = ISNULL(@i_tipo_cambio,1)
IF @i_ingreso_brut_col > 0 AND @i_ingreso_brut_dol > 0
BEGIN
SET @MonedaIngresos = ''T''
END ELSE IF @i_ingreso_brut_col > 0 AND @i_ingreso_brut_dol = 0
BEGIN
SET @MonedaIngresos = ''C''
END ELSE IF @i_ingreso_brut_dol > 0 AND @i_ingreso_brut_col = 0
BEGIN
SET @MonedaIngresos = ''D''
END
ELSE
BEGIN
SET @MonedaIngresos = ''N''
END
END
BEGIN -- Moneda Deudas Actuales
SELECT @DeudaActualColones = COUNT(*)
FROM [BPMPRENDARIO].[Prendario].[SituacionActual]
WHERE IdSolicitud = @i_solicitud
--and sa_saldo != ''0.0000''
and Moneda = ''N - COLONES O UNIDADES DE DESARROLLO''
SELECT @DeudaActualDolares = COUNT(*)
FROM [BPMPRENDARIO].[Prendario].[SituacionActual]
WHERE IdSolicitud = @i_solicitud
--and sa_saldo != ''0.0000''
and Moneda = ''E - DIVISA EXTRANJERA''
IF @DeudaActualColones > 0 AND @DeudaActualDolares > 0
BEGIN
SET @MonedaDeudaActual = ''T''
END ELSE IF @DeudaActualColones > 0 AND @DeudaActualDolares = 0
BEGIN
SET @MonedaDeudaActual = ''C''
END ELSE IF @DeudaActualDolares > 0 AND @DeudaActualColones = 0
BEGIN
SET @MonedaDeudaActual = ''D''
END ELSE IF @DeudaActualDolares = 0 AND @DeudaActualColones = 0
BEGIN
SET @MonedaDeudaActual = ''N''
END
END
BEGIN -- SumaCuotasCIC - SumaCuotasFSN
SELECT @SumaCuotasCIC = CONVERT(FLOAT,ISNULL(CargaMensualCSD,''0'')),
@SumaCuotasFSN = CONVERT(FLOAT,ISNULL(CuotasNoReguladasCSD,''0''))
FROM [BPMPRENDARIO].[Global].[InformacionIngresosCliente]
WHERE IdCliente = @i_idcliente
SET @SumaTotal = ((@SumaCuotasCIC/@i_tipo_cambio)+(@SumaCuotasFSN/@i_tipo_cambio))
END
BEGIN --Cobertura
IF(@SumaTotal<@i_ingreso_brut_dol)
BEGIN
SET @Cobertura = ''C''
END ELSE
BEGIN
SET @Cobertura = ''N''
END
END
--Obtiene el Punto de Corte CSD
BEGIN
SELECT @PuntoCorte = PorcentajePuntoCorteCSD
FROM [BPMPRENDARIO].[Catalogos].[PuntoCorteCSD] WHERE IdPuntoCorteCSD = 1
END
--Obtiene el CSD del Cliente
BEGIN
SELECT @CSDCliente = CoberturaSobreDeuda
FROM [BPMPRENDARIO].[Global].[Cliente] WHERE IdCliente = @i_idcliente
END
--Riesgo
BEGIN
IF(@CSDCliente>(@PuntoCorte*100))
BEGIN
SET @Riesgo = ''DE ALTO RIESGO''
END
ELSE
BEGIN
SET @Riesgo = ''DE BAJO RIESGO''
END
END
--@MonedaIngresos = ''T''
--@MonedaDeudaActual = ''C''
--@Cobertura = ''C''
--select @MonedaIngresos
--select @MonedaDeudaActual
--select @Cobertura
IF ((@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''D'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''C'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''C'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''T'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''C'' AND @MonedaDeudaActual = ''N'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''N'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''N'' AND @Cobertura = ''C''))
OR (@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''T'' AND @Cobertura = ''C'')
BEGIN
SET @o_tipo_generador = 1
END ELSE IF ((@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''D'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''C'' AND @MonedaDeudaActual = ''C'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''C'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''D'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''C'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''T'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''T'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''C'' AND @MonedaDeudaActual = ''T'' AND @Cobertura = ''C'')
OR (@MonedaIngresos = ''C'' AND @MonedaDeudaActual = ''T'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''C'' AND @MonedaDeudaActual = ''C'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''C'' AND @MonedaDeudaActual = ''N'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''D'' AND @MonedaDeudaActual = ''N'' AND @Cobertura = ''N'')
OR (@MonedaIngresos = ''T'' AND @MonedaDeudaActual = ''N'' AND @Cobertura = ''N''))
BEGIN
SET @o_tipo_generador = 2
END
ELSE
BEGIN
SET @o_tipo_generador = 3
END
SET @o_desc_tipo_generador = CASE @o_tipo_generador
WHEN 1 THEN ''GENERADOR DE MONEDA EXTRANJERA''
WHEN 2 THEN ''NO GENERADOR DE MONEDA EXTRANJERA''+'' ''+ @Riesgo
WHEN 3 THEN ''NO GENERADOR DE MONEDA EXTRANJERA''
END
SELECT @o_res_code = 0,
@o_res_message = ''EXITOSO''
COMMIT TRAN T1
END TRY
BEGIN CATCH
ROLLBACK TRAN T1
SELECT @o_res_code = ERROR_NUMBER(),
@o_res_message = ERROR_MESSAGE(),
@o_res_err_procedure = ERROR_PROCEDURE(),
@o_res_err_line = ERROR_LINE()
END CATCH
SELECT res_cod_generador = @o_tipo_generador,
res_des_generador = @o_desc_tipo_generador,
res_code = @o_res_code,
res_message = @o_res_message,
res_err_procedure = @o_res_err_procedure,
res_err_line = @o_res_err_line
END
'
END
GO
/****** Object: StoredProcedure [dbo].[usp_wf_riesgocambiario_CSD] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_wf_riesgocambiario_CSD]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
------------------------------------------------------------------------------
-- Ultimus LA
-- Nombre SP: usp_wf_riesgocambiario_CSD
-- Proceso Utiliza: PrestamoPrendario
-- Creado Por: Andr<00>s Le<00>n
-- Fecha Creaci<00>n: 17/10/2017
------------------------------------------------------------------------------
-- Modif. Por:
-- Modif. Fecha :
-- Modif. Detalle:
------------------------------------------------------------------------------
/*
exec [usp_wf_riesgocambiario_CSD]
@i_opcion = 1,
@i_incidente = 109,
@i_solicitud = 145,
@i_idcliente = 180,
@i_identificacion = ''01-1288-0438'',
@i_proceso = ''PrestamoPrendario'',
@i_ingreso_neto_col = 1652000.00,
@i_ingreso_neto_dol = 0,
@i_tipo_cambio = 542,
@i_fecha_solicitud = ''2016-07-05''
exec [usp_wf_riesgocambiario_CSD]
@i_opcion = 2,
@i_incidente = 251,
@i_solicitud = 301,
@i_idcliente = 336,
@i_identificacion = ''01-0782-0379'',
@i_proceso = ''PrestamoPrendario'',
@i_ingreso_neto_col = 1652000.00,
@i_ingreso_neto_dol = 0,
@i_tipo_cambio = 542,
@i_fecha_solicitud = ''2016-07-05''
*/
CREATE PROCEDURE [dbo].[usp_wf_riesgocambiario_CSD]
@i_opcion INT,
@i_incidente INT = 0,
@i_solicitud INT = 0,
@i_proceso VARCHAR(50) = '''',
@i_idcliente INT = NULL,
@i_identificacion VARCHAR(30) = '''',
@i_ingreso_neto_col FLOAT = NULL,
@i_ingreso_neto_dol FLOAT = NULL,
@i_ingreso_bruto_col FLOAT = NULL,
@i_ingreso_bruto_dol FLOAT = NULL,
@i_tipo_cambio FLOAT = NULL,
@i_fecha_solicitud VARCHAR(10) = NULL
AS
DECLARE @o_res_code INT,
@o_res_message NVARCHAR(MAX),
@o_res_err_procedure NVARCHAR(MAX),
@o_res_err_line INT,
@MonedaIngresos CHAR(1) = '''', -- C = Colones, D = Dolares, T = Todas
@MonedaDeudaActual CHAR(1) = '''', -- C = Colones, D = Dolares, T = Todas
@DeudaActualColones INT = 0,
@DeudaActualDolares INT = 0,
@SumaCuotasCIC_COLONES FLOAT = 0,
@SumaCuotasCIC_DOLARES FLOAT = 0,
@SumaCuotasCIC FLOAT = 0,
@SumaCuotasFSN FLOAT = 0,
@NuevaCuota FLOAT = 0,
@NuevaDeuda CHAR(1) = ''D'', -- C = Colones, D = Dolares, T = Todas
@RiesgoCambiario FLOAT = 0,
@DesRiesgoCambiario VARCHAR(50)= '''',
@CodRiesgoCambiario CHAR(1) = '''',
@PuntoCorte FLOAT,
@CSD FLOAT = 0
BEGIN TRY
IF @i_opcion = 1
BEGIN
BEGIN -- Moneda Ingreso
SELECT @i_ingreso_neto_col = ISNULL(@i_ingreso_neto_col,0),
@i_ingreso_neto_dol = ISNULL(@i_ingreso_neto_dol,0),
@i_tipo_cambio = ISNULL(@i_tipo_cambio,1)
IF @i_ingreso_neto_col > 0 AND @i_ingreso_neto_dol > 0
BEGIN
SET @MonedaIngresos = ''T''
END ELSE IF @i_ingreso_neto_col > 0 AND @i_ingreso_neto_dol = 0
BEGIN
SET @MonedaIngresos = ''C''
END ELSE IF @i_ingreso_neto_dol > 0 AND @i_ingreso_neto_col = 0
BEGIN
SET @MonedaIngresos = ''D''
END
ELSE
BEGIN
SET @MonedaIngresos = ''N''
END
END
BEGIN -- Moneda Deudas Actuales
SELECT @DeudaActualColones = COUNT(*)
FROM [BPMPRENDARIO].[Prendario].[SituacionActual]
WHERE IdSolicitud = @i_solicitud
--and sa_saldo != ''0.0000''
and Moneda = ''N - COLONES O UNIDADES DE DESARROLLO''
SELECT @DeudaActualDolares = COUNT(*)
FROM [BPMPRENDARIO].[Prendario].[SituacionActual]
WHERE IdSolicitud = @i_solicitud
--and sa_saldo != ''0.0000''
and Moneda = ''E - DIVISA EXTRANJERA''
IF @DeudaActualColones > 0 AND @DeudaActualDolares > 0
BEGIN
SET @MonedaDeudaActual = ''T''
END ELSE IF @DeudaActualColones > 0 AND @DeudaActualDolares = 0
BEGIN
SET @MonedaDeudaActual = ''C''
END ELSE IF @DeudaActualDolares > 0 AND @DeudaActualColones = 0
BEGIN
SET @MonedaDeudaActual = ''D''
END
END
BEGIN -- SumaCuotasFSN
SELECT --@SumaCuotasCIC = CONVERT(FLOAT,ISNULL(CargaMensualCSD,''0'')),
@SumaCuotasFSN = (CONVERT(FLOAT,ISNULL(CuotasNoReguladasCSD,''0''))/@i_tipo_cambio)
FROM [BPMPRENDARIO].[Global].[InformacionIngresosCliente]
WHERE IdCliente = @i_idcliente
END
BEGIN-- SumaCuotasCIC
SELECT @SumaCuotasCIC_COLONES =ISNULL(SUM(CONVERT(FLOAT,ISNULL(REPLACE(so_cuota_esc_normal ,'','',''''),''0''))),0) FROM [BPMPRENDARIO].[Prendario].[SensibilizacionOperacion]
WHERE so_solicitud =@i_solicitud
AND so_co_moneda = 0
and so_id_operacion != ''Operacion del Tramite Actual''
SELECT
@SumaCuotasCIC_DOLARES =ISNULL(SUM(CONVERT(FLOAT,ISNULL(REPLACE(so_cuota_esc_normal ,'','',''''),''0''))),0) FROM [BPMPRENDARIO].[Prendario].[SensibilizacionOperacion]
WHERE so_solicitud =@i_solicitud
AND so_co_moneda = 1
and so_id_operacion != ''Operacion del Tramite Actual''
SET @SumaCuotasCIC = @SumaCuotasCIC_COLONES + (@SumaCuotasCIC_DOLARES*@i_tipo_cambio)
END
BEGIN -- Nueva Cuota
SELECT @NuevaCuota = so_cuota_esc_normal
FROM [BPMPRENDARIO].[Prendario].[SensibilizacionOperacion]
WHERE so_id_operacion = ''Operacion del Tramite Actual''
AND so_solicitud = @i_solicitud
END
BEGIN -- No Aplica
IF (@MonedaIngresos = @MonedaDeudaActual and @MonedaDeudaActual = @NuevaDeuda)
BEGIN
SET @DesRiesgoCambiario = ''No Aplica''
SET @CodRiesgoCambiario = ''0''
END
END
IF (@CodRiesgoCambiario != ''0'')
BEGIN
IF (@MonedaIngresos = ''C'' and @MonedaDeudaActual = ''C'' and @NuevaDeuda = ''C'')
BEGIN
SELECT ''0'' as IdRiesgoCambiarioDeudor,
''No Aplica'' as DescripcionRiesgoCambiarioDeudor
END
-- Para Ingreso en Colones / Deudas en Colones / Nueva deuda D<00>lares:
IF (@MonedaIngresos = ''C'' and @MonedaDeudaActual = ''C'' and @NuevaDeuda = ''D'')
BEGIN
SELECT @RiesgoCambiario = (@SumaCuotasCIC + @SumaCuotasFSN + (@NuevaCuota * @i_tipo_cambio)) / @i_ingreso_neto_col
END
-- Para Ingreso en Colones / Deudas en D<00>lares / Nueva deuda D<00>lares:
-- Para Ingreso en Colones / Deudas en D<00>lares / Nueva deuda Colones:
-- Para Ingreso en Colones / Deudas Ambas Monedas / Nueva deuda D<00>lares:
-- Para Ingreso en Colones / Deudas Ambas Monedas / Nueva deuda Colones:
IF ((@MonedaIngresos = ''C'' and @MonedaDeudaActual = ''D'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''C'' and @MonedaDeudaActual = ''D'' and @NuevaDeuda = ''C'') OR
(@MonedaIngresos = ''C'' and @MonedaDeudaActual = ''T'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''C'' and @MonedaDeudaActual = ''T'' and @NuevaDeuda = ''C''))
BEGIN
SELECT @RiesgoCambiario = (@SumaCuotasCIC + (@SumaCuotasFSN * @i_tipo_cambio) + (@NuevaCuota * @i_tipo_cambio)) / @i_ingreso_neto_col
END
-- Para Ingreso en D<00>lares / Deudas en Colones / Nueva deuda D<00>lares:
-- Para Ingreso en D<00>lares / Deudas en Colones / Nueva deuda Colones:
-- Para Ingreso en D<00>lares / Deudas en D<00>lares / Nueva deuda Colones:
IF ((@MonedaIngresos = ''D'' and @MonedaDeudaActual = ''C'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''D'' and @MonedaDeudaActual = ''C'' and @NuevaDeuda = ''C'') OR
(@MonedaIngresos = ''D'' and @MonedaDeudaActual = ''D'' and @NuevaDeuda = ''C''))
BEGIN
SELECT @RiesgoCambiario = (@SumaCuotasCIC + @SumaCuotasFSN + (@NuevaCuota * @i_tipo_cambio)) / (@i_ingreso_neto_dol* @i_tipo_cambio)
END
-- Para Ingreso en D<00>lares / Deudas Ambas Monedas / Nueva deuda D<00>lares:
-- Para Ingreso en D<00>lares / Deudas Ambas Monedas / Nueva deuda Colones:
-- Para Ingreso Ambas Monedas / Deudas en colones / Nueva deuda Colones:
-- Para Ingreso Ambas Monedas / Deudas en D<00>lares / Nueva deuda Colones:
-- Para Ingreso Ambas Monedas / Deudas en D<00>lares / Nueva deuda D<00>lares:
-- Para Ingreso Ambas Monedas / Deudas en Colones / Nueva deuda D<00>lares:
-- Para Ingreso Ambas Monedas / Deudas en Ambas Monedas / Nueva deuda D<00>lares:
-- Para Ingreso Ambas Monedas / Deudas en Ambas Monedas / Nueva deuda Colones:
IF ((@MonedaIngresos = ''D'' and @MonedaDeudaActual = ''T'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''D'' and @MonedaDeudaActual = ''T'' and @NuevaDeuda = ''C'') OR
(@MonedaIngresos = ''T'' and @MonedaDeudaActual = ''D'' and @NuevaDeuda = ''C'') OR
(@MonedaIngresos = ''T'' and @MonedaDeudaActual = ''D'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''T'' and @MonedaDeudaActual = ''C'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''T'' and @MonedaDeudaActual = ''T'' and @NuevaDeuda = ''D'') OR
(@MonedaIngresos = ''T'' and @MonedaDeudaActual = ''T'' and @NuevaDeuda = ''C''))
BEGIN
SELECT @RiesgoCambiario = (@SumaCuotasCIC + (@SumaCuotasFSN * @i_tipo_cambio) + (@NuevaCuota * @i_tipo_cambio)) / ((@i_ingreso_neto_dol * @i_tipo_cambio) + @i_ingreso_neto_col)
END
-- Para Ingreso Ambas Monedas / Deudas en colones / Nueva deuda Colones:
IF (@MonedaIngresos = ''T'' and @MonedaDeudaActual = ''C'' and @NuevaDeuda = ''C'')
BEGIN
SELECT @RiesgoCambiario = (@SumaCuotasCIC + @SumaCuotasFSN + (@NuevaCuota * @i_tipo_cambio)) / ((@i_ingreso_neto_dol * @i_tipo_cambio) + @i_ingreso_neto_col)
END
select @PuntoCorte = PorcentajePuntoCorteCSD
from [BPMPRENDARIO].[Catalogos].[PuntoCorteCSD] where IdPuntoCorteCSD = 1
IF (@RiesgoCambiario <= @PuntoCorte)
BEGIN
SET @DesRiesgoCambiario = ''Deudor con Bajo Riesgo Cambiario''
SET @CodRiesgoCambiario = ''1''
END
ELSE IF (@RiesgoCambiario > @PuntoCorte)
BEGIN
SET @DesRiesgoCambiario = ''Deudor con Alto Riesgo Cambiario''
SET @CodRiesgoCambiario = ''2''
END
END
SELECT @o_res_code = 0,
@o_res_message = ''EXITOSO''
SELECT res_riesgo_cambiario = @DesRiesgoCambiario,
res_cod_riesgo_cambiario = @CodRiesgoCambiario,
res_code = @o_res_code,
res_message = @o_res_message,
res_err_procedure = @o_res_err_procedure,
res_err_line = @o_res_err_line
END
IF @i_opcion = 2
BEGIN
BEGIN -- SumaCuotasFSN
SELECT --@SumaCuotasCIC = CONVERT(FLOAT,ISNULL(CargaMensualCSD,''0'')),
@SumaCuotasFSN = (CONVERT(FLOAT,ISNULL(CuotasNoReguladasCSD,''0''))/@i_tipo_cambio)
FROM [BPMPRENDARIO].[Global].[InformacionIngresosCliente]
WHERE IdCliente = @i_idcliente
END
BEGIN -- SumaCuotasCIC
SELECT @SumaCuotasCIC_COLONES =ISNULL(SUM(CONVERT(FLOAT,ISNULL(REPLACE(so_cuota_esc_severo ,'','',''''),''0''))),0) FROM [BPMPRENDARIO].[Prendario].[SensibilizacionOperacion]
WHERE so_solicitud =@i_solicitud
AND so_co_moneda = 0
and so_id_operacion != ''Operacion del Tramite Actual''
SELECT
@SumaCuotasCIC_DOLARES =ISNULL(SUM(CONVERT(FLOAT,ISNULL(REPLACE(so_cuota_esc_severo ,'','',''''),''0''))),0) FROM [BPMPRENDARIO].[Prendario].[SensibilizacionOperacion]
WHERE so_solicitud =@i_solicitud
AND so_co_moneda = 1
and so_id_operacion != ''Operacion del Tramite Actual''
SET @SumaCuotasCIC = ((@SumaCuotasCIC_COLONES)/@i_tipo_cambio) + (@SumaCuotasCIC_DOLARES)
END
BEGIN -- Nueva Cuota
SELECT @NuevaCuota = so_cuota_esc_severo
FROM [BPMPRENDARIO].[Prendario].[SensibilizacionOperacion]
WHERE so_id_operacion = ''Operacion del Tramite Actual''
AND so_solicitud = @i_solicitud
END
Set @CSD = ((@SumaCuotasCIC + @SumaCuotasFSN + @NuevaCuota) / ((@i_ingreso_bruto_col/ @i_tipo_cambio) + @i_ingreso_bruto_dol))
--SELECT @CSD =((@SumaCuotasCIC + @SumaCuotasFSN + @NuevaCuota) / ((@i_ingreso_bruto_dol * @i_tipo_cambio) + @i_ingreso_bruto_col)) * 100
--select @CSD
SELECT @o_res_code = 0,
@o_res_message = ''EXITOSO''
SELECT CSD = @CSD,
res_code = @o_res_code,
res_message = @o_res_message,
res_err_procedure = @o_res_err_procedure,
res_err_line = @o_res_err_line
END
END TRY
BEGIN CATCH
SELECT @o_res_code = ERROR_NUMBER(),
@o_res_message = ERROR_MESSAGE(),
@o_res_err_procedure = ERROR_PROCEDURE(),
@o_res_err_line = ERROR_LINE()
END CATCH
'
END
GO
/****** Object: StoredProcedure [dbo].[usp_wf_sensibilizacion_deudas] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_wf_sensibilizacion_deudas]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
------------------------------------------------------------------------------
-- Ultimus LA
-- Nombre SP: usp_wf_sensibilizacion_deudas
-- Proceso Utiliza: PRESTAMO PRENDARIO
-- Creado Por: Byron Madrigal
-- Fecha Creaci<00>n: 21/11/2016
------------------------------------------------------------------------------
-- Modif. Por:
-- Modif. Fecha :
-- Modif. Detalle:
------------------------------------------------------------------------------
/*
exec [usp_wf_sensibilizacion_deudas]
@i_opcion = 1,
@i_incidente = 226,
@i_idsolicitud = 268,
@i_idcliente = 306,
@i_identificacion = ''01-0790-0113'',
@i_co_tipoparticipante = 1,
@i_proceso = ''PrestamoPrendario'',
@i_ingreso_neto_col = 4677350,
@i_ingreso_neto_dol = 3268.49,
@i_tipo_cambio = 562.75,
@i_cuota = 1102.7118179391582,
@i_tasa = 8.71,
@i_tipo_tasa = ''V'',
@i_co_moneda = 1,
@i_plazo_meses = 96,
@i_monto = 73022.81,
@i_seguros = 81.09
*/
CREATE PROCEDURE [dbo].[usp_wf_sensibilizacion_deudas]
@i_opcion INT,
@i_incidente INT = 0,
@i_idsolicitud INT = 0,
@i_proceso VARCHAR(50) = '''',
@i_idcliente INT = 0,
@i_identificacion VARCHAR(30) = '''',
@i_co_tipoparticipante BIT = 1,
@i_ingreso_neto_col FLOAT = NULL,
@i_ingreso_neto_dol FLOAT = NULL,
@i_tipo_cambio FLOAT = NULL,
@i_cuota FLOAT = 0,
@i_tasa FLOAT = 0,
@i_tipo_tasa VARCHAR(10) = ''F'', --F=Fija, V=Variable
@i_co_moneda INT = 0, --0=Colones, 1=Dolares
@i_plazo_meses INT = 0,
@i_monto FLOAT = 0,
@i_seguros FLOAT = 0
AS
DECLARE @o_res_code INT,
@o_res_message NVARCHAR(MAX),
@o_res_err_procedure NVARCHAR(MAX),
@o_res_err_line INT,
@i_incidente_corte INT
IF @i_opcion = 1
BEGIN
BEGIN TRY
BEGIN TRAN T1
Set @i_incidente_corte = 227;
--ALR 09052017(Se cambia la forma de sensibilizacion dependeiendo de la fecha del incidente)
IF(@i_incidente >= @i_incidente_corte)
BEGIN
--INICIO DE SENSIBILIZACION DE INCIDENTES MAYORES AL 18-04-2017
SELECT @i_ingreso_neto_col = ISNULL(@i_ingreso_neto_col,0),
@i_ingreso_neto_dol = ISNULL(@i_ingreso_neto_dol,0),
@i_tipo_cambio = ISNULL(@i_tipo_cambio,1)
---Crea la estructura estandar para el temporal de situacion actual
CREATE TABLE #Temp_Situacion_Actual
(
[IdSituacionActual] [int] NOT NULL,
[IdSolicitud] [int] NULL,
[IdCliente] [int] NULL,
[Incidente] [int] NULL,
[Proceso] [nchar](48) NULL,
[Identificacion] [varchar](30) NULL,
[EsDeudor] [bit] NULL,
[Estado] [char](1) NULL,
[IdOperacion] [varchar](30) NULL,
[Moneda] [varchar](50) NULL,
[FecVencimiento] [varchar](15) NULL,
[TipoOperacion] [varchar](50) NULL,
[Condicion] [varchar](50) NULL,
[EstadoOperacion] [varchar](50) NULL,
[DiasAtraso] [int] NULL,
[EntidadAcreedora] [varchar](50) NULL,
[Saldo] [varchar](20) NULL,
[CuotasEquivalente] [varchar](20) NULL,
[MontoOriginal] [varchar](20) NULL,
[FecInicio] [varchar](10) NULL,
[MontoNoDesembolsado] [varchar](50) NULL,
[Cancela] [int] NULL,
[CuotaPrincipal] [decimal](18, 2) NULL,
[CuotaIntereses] [decimal](18, 2) NULL,
[TipoTasa] [varchar](50) NULL,
[TasaNominal] [decimal](18, 2) NULL,
[DTI_MiniEndeudamiento] [decimal](18, 2) NULL,
[CuotaCertificada] [varchar](20) NULL,
)
---Crea la estructura estandar para el temporal de situacion actual
CREATE TABLE #Temp_Sensibilizacion_Operacion
(
so_incidente int NOT NULL,
so_solicitud int NOT NULL,
so_proceso varchar(30) NOT NULL,
so_idcliente int NOT NULL,
so_identificacion varchar(30) NOT NULL,
so_esdeudor bit NOT NULL,
so_estado char(1) NOT NULL,
so_id_operacion varchar(50) NOT NULL,
so_refinancia bit NULL,
so_meses_plazo_restante float NULL,
so_producto varchar(20) NULL,
so_cuota_generada float NULL,
so_cuota_sin_seguro float NULL,
so_cuota_seguro float NULL,
---Cuota Estresada
so_cuota_esc_normal float NULL,
so_cuota_esc_leve float NULL,
so_cuota_esc_moderado float NULL,
so_cuota_esc_severo float NULL,
---Cuota MiniEndeudamiento
so_dti_esc_normal float NULL,
so_dti_esc_leve float NULL,
so_dti_esc_moderado float NULL,
so_dti_esc_severo float NULL,
so_co_moneda int NULL,
---Tipo Cambio Devaluacion
so_tip_camb_deval_esc_normal float NULL,
so_tip_camb_deval_esc_leve float NULL,
so_tip_camb_deval_esc_moderado float NULL,
so_tip_camb_deval_esc_servero float NULL,
---Tipo Cambio Revaluacion
so_tip_camb_reval_esc_normal float NULL,
so_tip_camb_reval_esc_leve float NULL,
so_tip_camb_reval_esc_moderado float NULL,
so_tip_camb_reval_esc_servero float NULL,
---Ingresos Colones
so_ingreso_col_esc_normal float NULL,
so_ingreso_col_esc_leve float NULL,
so_ingreso_col_esc_moderado float NULL,
so_ingreso_col_esc_severo float NULL,
---Ingresos Colones
so_ingreso_dol_esc_normal float NULL,
so_ingreso_dol_esc_leve float NULL,
so_ingreso_dol_esc_moderado float NULL,
so_ingreso_dol_esc_severo float NULL,
)
CREATE TABLE #Temp_Sensibilizacion_Resumen
(
[sr_incidente] [int] NOT NULL,
[sr_solicitud] [int] NOT NULL,
[sr_proceso] [varchar](30) NOT NULL,
[sr_idcliente] int NOT NULL,
[sr_identificacion] [varchar](30) NOT NULL,
[sr_cuota_esc_normal] [float] NULL,
[sr_cuota_esc_leve] [float] NULL,
[sr_cuota_esc_moderado] [float] NULL,
[sr_cuota_esc_severo] [float] NULL,
[sr_co_moneda] [int] NOT NULL,
[sr_endeuda_esc_normal] [float] NULL,
[sr_endeuda_esc_leve] [float] NULL,
[sr_endeuda_esc_moderado] [float] NULL,
[sr_endeuda_esc_severo] [float] NULL
)
---Obtiene la configuracion de los parametros de shock de Tipo de Cambio
SELECT [st_codigo],
[st_esc_normal],
[st_esc_leve],
[st_esc_moderado],
[st_esc_severo],
[st_cod_moneda],
[st_estado]
INTO #Temp_Parametrizacion_Shock_Tipo_Cambio
FROM BPMDATA.Parametros.WFShockTipoCambio
WHERE st_estado = 1
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tipo_Cambio))
THROW 51000, ''No existe parametrizaci<00>n vigente para el shock de tipo de cambio '', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tipo_Cambio WHERE st_cod_moneda = 0))
THROW 51001, ''No existe parametrizaci<00>n vigente para el shock de tipo de cambio para la moneda colones'', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tipo_Cambio WHERE st_cod_moneda = 1))
THROW 51002, ''No existe parametrizaci<00>n vigente para el shock de tipo de cambio para la moneda dolares'', 1;
---Obtiene la configuracion de los parametros de shock de tasa de interes
SELECT [st_codigo],
[st_esc_normal],
[st_esc_leve],
[st_esc_moderado],
[st_esc_severo],
[st_cod_moneda],
[st_estado]
INTO #Temp_Parametrizacion_Shock_Tasa_Interes
FROM BPMDATA.Parametros.WFShockTasaInteres
WHERE st_estado = 1
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tasa_Interes))
THROW 51003, ''No existe parametrizaci<00>n para el shock de tasa de interes '', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tasa_Interes WHERE st_cod_moneda = 0))
THROW 51004, ''No existe parametrizaci<00>n para el shock de tasa de interes para la moneda colones '', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tasa_Interes WHERE st_cod_moneda = 1))
THROW 51005, ''No existe parametrizaci<00>n para el shock de tasa de interes para la moneda dolares'', 1;
---Obtiene la Situacion Actual del Cliente
IF(CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0)
INSERT INTO #Temp_Situacion_Actual
SELECT *
FROM BPMPRENDARIO.Prendario.SituacionActual
WHERE IdSolicitud = @i_idsolicitud
AND Proceso = @i_proceso
AND IdCliente = @i_idcliente
INSERT INTO #Temp_Situacion_Actual( [IdSituacionActual],
[IdSolicitud],
[IdCliente],
[Incidente],
[Proceso],
[Identificacion],
[EsDeudor],
[Estado],
[IdOperacion],
[Moneda],
[FecVencimiento],
[TipoOperacion],
[Condicion],
[EstadoOperacion],
[DiasAtraso],
[EntidadAcreedora],
[Saldo],
[CuotasEquivalente],
[MontoOriginal],
[FecInicio],
[MontoNoDesembolsado],
[Cancela],
[CuotaPrincipal],
[CuotaIntereses],
[TipoTasa],
[TasaNominal],
[DTI_MiniEndeudamiento]
)
SELECT [IdSituacionActual] = ISNULL((SELECT MAX([IdSituacionActual])+1 FROM BPMPRENDARIO.Prendario.SituacionActual ),1),
[IdSolicitud] = @i_idsolicitud,
[IdCliente] = @i_idcliente,
[Incidente] = @i_incidente,
[Proceso] = @i_proceso,
[Identificacion] = @i_identificacion,
[EsDeudor] = 1,
[Estado] = ''C'',
[IdOperacion] = ''Operacion del Tramite Actual'',
[Moneda] = @i_co_moneda,
[FecVencimiento] = CONVERT(VARCHAR,DATEADD(DAY, (@i_plazo_meses * 30), GETDATE()),103),
[TipoOperacion] = CASE WHEN CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0 THEN ''1''
WHEN CHARINDEX(''TARJETA'', @i_proceso, 0) > 0 THEN ''3''
END,
[Condicion] = ''DEUDOR'',
[EstadoOperacion] = ''VIGENTE'',
[DiasAtraso] = 0,
[EntidadAcreedora] = ''Banco Davivienda (Costa Rica)'',
[Saldo] = @i_monto,
[CuotasEquivalente] = 0,
[MontoOriginal] = @i_monto,
[FecInicio] = CONVERT(VARCHAR,GETDATE(),103),
[MontoNoDesembolsado] = @i_monto,
[Cancela] = 0,
[CuotaPrincipal] = 0,
[CuotaIntereses] = 0,
[TipoTasa] = @i_tipo_tasa,
[TasaNominal] = @i_tasa,
[DTI_MiniEndeudamiento] = 0
---Obtiene el c<00>digo del tipo de operacion
UPDATE #Temp_Situacion_Actual
SET TipoOperacion = RTRIM(SUBSTRING(TipoOperacion,0, CHARINDEX(''-'',TipoOperacion)))
---Carga la temporal de sensibilizacion operacion con la informacion base de la Situacion Actual
INSERT INTO #Temp_Sensibilizacion_Operacion(so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
so_esdeudor,
so_estado,
so_id_operacion,
so_refinancia,
so_meses_plazo_restante,
so_co_moneda)
SELECT Incidente,
IdSolicitud,
Proceso,
IdCliente,
Identificacion,
EsDeudor,
Estado,
IdOperacion,
Refinancia = CASE Cancela
WHEN 1 THEN 1
ELSE 0
END,
MesesPlazoRestante = CASE
WHEN TipoTasa IN (''F'') OR TipoOperacion IN (3,6) THEN 0
ELSE DATEDIFF(DAY, CONVERT(DATETIME, FecInicio, 103), CONVERT(DATETIME, FecVencimiento, 103))
END,
Moneda = CASE Moneda
WHEN ''E - DIVISA EXTRANJERA'' THEN 1
WHEN ''N - COLONES O UNIDADES DE DESARROLLO'' THEN 0
WHEN 1 THEN 1
ELSE 0
END
FROM #Temp_Situacion_Actual
---Calcula los escenarios de devaluacion del tipo de cambio
UPDATE #Temp_Sensibilizacion_Operacion
SET so_tip_camb_deval_esc_normal = @i_tipo_cambio * ((st_esc_normal/100)+1),
so_tip_camb_deval_esc_leve = @i_tipo_cambio * ((st_esc_leve/100)+1),
so_tip_camb_deval_esc_moderado = @i_tipo_cambio * ((st_esc_moderado/100)+1),
so_tip_camb_deval_esc_servero = @i_tipo_cambio * ((st_esc_severo/100)+1)
FROM #Temp_Parametrizacion_Shock_Tipo_Cambio
WHERE st_cod_moneda = 0
---Calcula los escenarios de revaluacion del tipo de cambio
UPDATE #Temp_Sensibilizacion_Operacion
SET so_tip_camb_reval_esc_normal = @i_tipo_cambio * ((st_esc_normal/100)+1),
so_tip_camb_reval_esc_leve = @i_tipo_cambio * ((st_esc_leve/100)+1),
so_tip_camb_reval_esc_moderado = @i_tipo_cambio * ((st_esc_moderado/100)+1),
so_tip_camb_reval_esc_servero = @i_tipo_cambio * ((st_esc_severo/100)+1)
FROM #Temp_Parametrizacion_Shock_Tipo_Cambio
WHERE st_cod_moneda = 1
---Calcula los escenarios los ingresos con tipo de cambio revaluado o devaluado segun la moneda
UPDATE #Temp_Sensibilizacion_Operacion
SET so_ingreso_col_esc_normal = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_normal),
so_ingreso_col_esc_leve = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_leve),
so_ingreso_col_esc_moderado = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_moderado),
so_ingreso_col_esc_severo = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_servero),
so_ingreso_dol_esc_normal = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_normal),
so_ingreso_dol_esc_leve = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_leve),
so_ingreso_dol_esc_moderado = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_moderado),
so_ingreso_dol_esc_severo = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_servero)
FROM #Temp_Parametrizacion_Shock_Tipo_Cambio
---Determina cual es el producto asociado
UPDATE #Temp_Sensibilizacion_Operacion
SET so_producto = CASE WHEN (so_meses_plazo_restante/30) > 96 THEN ''HVI''
WHEN (so_meses_plazo_restante/30) > 60 AND (so_meses_plazo_restante/30) < 84 AND CONVERT(FLOAT,B.Saldo) > 15000000 THEN ''AUTO''
WHEN (so_meses_plazo_restante/30) > 1 AND (so_meses_plazo_restante/30) < 96 AND CONVERT(FLOAT,B.Saldo) < 15000000 THEN ''CP''
ELSE NULL
END
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_incidente = B.Incidente
AND A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_identificacion = B.Identificacion
AND A.so_id_operacion = B.IdOperacion
-------------------Determina la cuota generada-------------------
--Si la Cuota Certidficada es cero o nulo
UPDATE A
SET A.so_cuota_generada = ROUND([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''),
ISNULL(B.TasaNominal,0),
0,
CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30,
ISNULL(B.Saldo,0),
B.TipoOperacion,
0),2)
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE B.CuotaCertificada IS NULL
OR B.CuotaCertificada = ''0''
--Si la Cuota Certidficada no es cero ni nulo
UPDATE A
SET A.so_cuota_generada = ROUND(CONVERT(FLOAT,B.CuotaCertificada),2)
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE B.CuotaCertificada IS NOT NULL
AND B.CuotaCertificada != ''0''
-------------------Calcula la cuota sin seguro y la cuota del seguro-------------------
--Si la Cuota Certidficada es cero o nulo
UPDATE A
SET A.so_cuota_sin_seguro = A.so_cuota_generada,
A.so_cuota_seguro = CASE A.so_producto
WHEN ''HVI''THEN ROUND((A.so_cuota_generada * 0.1),2)
WHEN ''AUTO''THEN ROUND((A.so_cuota_generada * 0.35),2)
ELSE 0
END
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE A.so_id_operacion != ''Operacion del Tramite Actual''
AND (B.CuotaCertificada IS NULL
OR B.CuotaCertificada = ''0'')
--Si la Cuota Certidficada NO es cero ni es nulo
UPDATE A
SET A.so_cuota_sin_seguro = A.so_cuota_generada,
A.so_cuota_seguro = 0
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE A.so_id_operacion != ''Operacion del Tramite Actual''
AND B.CuotaCertificada IS NOT NULL
AND B.CuotaCertificada != ''0''
--Si es la operacion del Tramite actual
UPDATE #Temp_Sensibilizacion_Operacion
SET so_cuota_sin_seguro = so_cuota_generada,
so_cuota_seguro = ISNULL(@i_seguros,0)
WHERE so_id_operacion = ''Operacion del Tramite Actual''
-------------------Calcula las cuotas seg<00>n el escenario de estres-------------------
--Si la Cuota Certidficada es cero o nulo
UPDATE A
SET A.so_cuota_esc_normal = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_leve = CASE
WHEN B.TipoTasa IN (''V'',''FV'', ''VF'')THEN ROUND(([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''), ISNULL(B.TasaNominal,0), ISNULL(C.st_esc_leve,0), CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30, ISNULL(B.Saldo,0), B.TipoOperacion, 1) + A.so_cuota_seguro),2)
WHEN B.TipoTasa IN (''F'') THEN (A.so_cuota_sin_seguro + A.so_cuota_seguro)
ELSE (A.so_cuota_sin_seguro + A.so_cuota_seguro)
END,
A.so_cuota_esc_moderado = CASE
WHEN B.TipoTasa IN (''V'',''FV'', ''VF'')THEN ROUND(([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''),ISNULL(B.TasaNominal,0), ISNULL(C.st_esc_moderado,0), CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30, ISNULL(B.Saldo,0), B.TipoOperacion, 2) + A.so_cuota_seguro),2)
WHEN B.TipoTasa IN (''F'') THEN (A.so_cuota_sin_seguro + A.so_cuota_seguro)
ELSE (A.so_cuota_sin_seguro + A.so_cuota_seguro)
END,
A.so_cuota_esc_severo = CASE
WHEN B.TipoTasa IN (''V'',''FV'', ''VF'')THEN ROUND(([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''),ISNULL(B.TasaNominal,0), ISNULL(C.st_esc_severo,0), CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30, ISNULL(B.Saldo,0), B.TipoOperacion, 3) + A.so_cuota_seguro),2)
WHEN B.TipoTasa IN (''F'') THEN (A.so_cuota_sin_seguro + A.so_cuota_seguro)
ELSE (A.so_cuota_sin_seguro + A.so_cuota_seguro)
END
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
INNER JOIN #Temp_Parametrizacion_Shock_Tasa_Interes C
ON (A.so_co_moneda = C.st_cod_moneda)
WHERE B.CuotaCertificada IS NULL
OR B.CuotaCertificada = ''0''
--Si la Cuota Certidficada NO es cero ni es nulo
UPDATE A
SET A.so_cuota_esc_normal = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_leve = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_moderado = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_severo = (A.so_cuota_sin_seguro + A.so_cuota_seguro)
FROM #Temp_Sensibilizacion_Operacion A
INNER JOIN #Temp_Situacion_Actual B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
INNER JOIN #Temp_Parametrizacion_Shock_Tasa_Interes C
ON (A.so_co_moneda = C.st_cod_moneda)
WHERE B.CuotaCertificada IS NOT NULL
AND B.CuotaCertificada != ''0''
-------------------Calcula los mini-endeudamientos seg<00>n el escenario de estres-------------------
UPDATE #Temp_Sensibilizacion_Operacion
SET so_dti_esc_normal = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_normal/ so_ingreso_col_esc_normal)
WHEN 1 THEN (so_cuota_esc_normal/ so_ingreso_dol_esc_normal)
END,
so_dti_esc_leve = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_leve/ so_ingreso_col_esc_leve)
WHEN 1 THEN (so_cuota_esc_leve/ so_ingreso_dol_esc_leve)
END,
so_dti_esc_moderado = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_moderado/ so_ingreso_col_esc_moderado)
WHEN 1 THEN (so_cuota_esc_moderado/ so_ingreso_dol_esc_moderado)
END,
so_dti_esc_severo = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_severo/ so_ingreso_col_esc_severo)
WHEN 1 THEN (so_cuota_esc_severo/ so_ingreso_dol_esc_severo)
END
INSERT INTO #Temp_Sensibilizacion_Resumen
SELECT so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
SUM(so_cuota_esc_normal),
SUM(so_cuota_esc_leve),
SUM(so_cuota_esc_moderado),
SUM(so_cuota_esc_severo),
so_co_moneda,
0,
0,
0,
0
FROM #Temp_Sensibilizacion_Operacion
GROUP BY so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
so_co_moneda
UPDATE #Temp_Sensibilizacion_Resumen
SET sr_endeuda_esc_normal = A.sr_endeuda_esc_normal,
sr_endeuda_esc_leve = A.sr_endeuda_esc_leve,
sr_endeuda_esc_moderado = A.sr_endeuda_esc_moderado,
sr_endeuda_esc_severo = A.sr_endeuda_esc_severo
FROM (SELECT sr_endeuda_esc_normal = SUM(so_dti_esc_normal),
sr_endeuda_esc_leve = SUM(so_dti_esc_leve),
sr_endeuda_esc_moderado = SUM(so_dti_esc_moderado),
sr_endeuda_esc_severo = SUM(so_dti_esc_severo)
FROM #Temp_Sensibilizacion_Operacion)A
IF(CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0)
BEGIN
DELETE BPMPRENDARIO.Prendario.SensibilizacionOperacion
WHERE
--so_incidente = @i_incidente
so_solicitud = @i_idsolicitud
AND so_proceso = @i_proceso
AND so_idcliente = @i_idcliente
--AND so_identificacion = @i_identificacion
DELETE BPMPRENDARIO.Prendario.SensibilizacionResumen
WHERE --sr_incidente = @i_incidente
sr_solicitud = @i_idsolicitud
AND sr_proceso = @i_proceso
AND sr_idcliente = @i_idcliente
--AND sr_identificacion = @i_identificacion
INSERT INTO BPMPRENDARIO.Prendario.SensibilizacionOperacion
SELECT * FROM #Temp_Sensibilizacion_Operacion
INSERT INTO BPMPRENDARIO.Prendario.SensibilizacionResumen
SELECT * FROM #Temp_Sensibilizacion_Resumen
END
SELECT @o_res_code = 0,
@o_res_message = ''EXITOSO''
--FIN DE SENSIBILIZACION DE INCIDENTES MAYORES AL 18-04-2017
END
ELSE
BEGIN
--INICIO DE SENSIBILIZACION DE INCIDENTES MENORES AL 18-04-2017
SELECT @i_ingreso_neto_col = ISNULL(@i_ingreso_neto_col,0),
@i_ingreso_neto_dol = ISNULL(@i_ingreso_neto_dol,0),
@i_tipo_cambio = ISNULL(@i_tipo_cambio,1)
---Crea la estructura estandar para el temporal de situacion actual
CREATE TABLE #Temp_Situacion_Actual1
(
[IdSituacionActual] [int] NOT NULL,
[IdSolicitud] [int] NULL,
[IdCliente] [int] NULL,
[Incidente] [int] NULL,
[Proceso] [nchar](48) NULL,
[Identificacion] [varchar](30) NULL,
[EsDeudor] [bit] NULL,
[Estado] [char](1) NULL,
[IdOperacion] [varchar](30) NULL,
[Moneda] [varchar](50) NULL,
[FecVencimiento] [varchar](15) NULL,
[TipoOperacion] [varchar](50) NULL,
[Condicion] [varchar](50) NULL,
[EstadoOperacion] [varchar](50) NULL,
[DiasAtraso] [int] NULL,
[EntidadAcreedora] [varchar](50) NULL,
[Saldo] FLOAT NULL,
[CuotasEquivalente] FLOAT NULL,
[MontoOriginal] [varchar](20) NULL,
[FecInicio] [varchar](10) NULL,
[MontoNoDesembolsado] FLOAT NULL,
[Cancela] [int] NULL,
[CuotaPrincipal] [decimal](18, 2) NULL,
[CuotaIntereses] [decimal](18, 2) NULL,
[TipoTasa] [varchar](50) NULL,
[TasaNominal] [decimal](18, 2) NULL,
[DTI_MiniEndeudamiento] [decimal](18, 2) NULL,
[CuotaCertificada] [varchar](20) NULL,
)
---Crea la estructura estandar para el temporal de situacion actual
CREATE TABLE #Temp_Sensibilizacion_Operacion1
(
so_incidente int NOT NULL,
so_solicitud int NOT NULL,
so_proceso varchar(30) NOT NULL,
so_idcliente int NOT NULL,
so_identificacion varchar(30) NOT NULL,
so_esdeudor bit NOT NULL,
so_estado char(1) NOT NULL,
so_id_operacion varchar(50) NOT NULL,
so_refinancia bit NULL,
so_meses_plazo_restante float NULL,
so_producto varchar(20) NULL,
so_cuota_generada float NULL,
so_cuota_sin_seguro float NULL,
so_cuota_seguro float NULL,
---Cuota Estresada
so_cuota_esc_normal float NULL,
so_cuota_esc_leve float NULL,
so_cuota_esc_moderado float NULL,
so_cuota_esc_severo float NULL,
---Cuota MiniEndeudamiento
so_dti_esc_normal float NULL,
so_dti_esc_leve float NULL,
so_dti_esc_moderado float NULL,
so_dti_esc_severo float NULL,
so_co_moneda int NULL,
---Tipo Cambio Devaluacion
so_tip_camb_deval_esc_normal float NULL,
so_tip_camb_deval_esc_leve float NULL,
so_tip_camb_deval_esc_moderado float NULL,
so_tip_camb_deval_esc_servero float NULL,
---Tipo Cambio Revaluacion
so_tip_camb_reval_esc_normal float NULL,
so_tip_camb_reval_esc_leve float NULL,
so_tip_camb_reval_esc_moderado float NULL,
so_tip_camb_reval_esc_servero float NULL,
---Ingresos Colones
so_ingreso_col_esc_normal float NULL,
so_ingreso_col_esc_leve float NULL,
so_ingreso_col_esc_moderado float NULL,
so_ingreso_col_esc_severo float NULL,
---Ingresos Colones
so_ingreso_dol_esc_normal float NULL,
so_ingreso_dol_esc_leve float NULL,
so_ingreso_dol_esc_moderado float NULL,
so_ingreso_dol_esc_severo float NULL,
)
CREATE TABLE #Temp_Sensibilizacion_Resumen1
(
[sr_incidente] [int] NOT NULL,
[sr_solicitud] [int] NOT NULL,
[sr_proceso] [varchar](30) NOT NULL,
[sr_idcliente] int NOT NULL,
[sr_identificacion] [varchar](30) NOT NULL,
[sr_cuota_esc_normal] [float] NULL,
[sr_cuota_esc_leve] [float] NULL,
[sr_cuota_esc_moderado] [float] NULL,
[sr_cuota_esc_severo] [float] NULL,
[sr_co_moneda] [int] NOT NULL,
[sr_endeuda_esc_normal] [float] NULL,
[sr_endeuda_esc_leve] [float] NULL,
[sr_endeuda_esc_moderado] [float] NULL,
[sr_endeuda_esc_severo] [float] NULL
)
---Obtiene la configuracion de los parametros de shock de Tipo de Cambio
SELECT [st_codigo],
[st_esc_normal],
[st_esc_leve],
[st_esc_moderado],
[st_esc_severo],
[st_cod_moneda],
[st_estado]
INTO #Temp_Parametrizacion_Shock_Tipo_Cambio1
FROM BPMDATA.Parametros.WFShockTipoCambio
WHERE st_estado = 1
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tipo_Cambio1))
THROW 51000, ''No existe parametrizaci<00>n vigente para el shock de tipo de cambio '', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tipo_Cambio1 WHERE st_cod_moneda = 0))
THROW 51001, ''No existe parametrizaci<00>n vigente para el shock de tipo de cambio para la moneda colones'', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tipo_Cambio1 WHERE st_cod_moneda = 1))
THROW 51002, ''No existe parametrizaci<00>n vigente para el shock de tipo de cambio para la moneda dolares'', 1;
---Obtiene la configuracion de los parametros de shock de tasa de interes
SELECT [st_codigo],
[st_esc_normal],
[st_esc_leve],
[st_esc_moderado],
[st_esc_severo],
[st_cod_moneda],
[st_estado]
INTO #Temp_Parametrizacion_Shock_Tasa_Interes1
FROM BPMDATA.Parametros.WFShockTasaInteres
WHERE st_estado = 1
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tasa_Interes1))
THROW 51003, ''No existe parametrizaci<00>n para el shock de tasa de interes '', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tasa_Interes1 WHERE st_cod_moneda = 0))
THROW 51004, ''No existe parametrizaci<00>n para el shock de tasa de interes para la moneda colones '', 1;
IF(NOT EXISTS(SELECT TOP 1 st_codigo FROM #Temp_Parametrizacion_Shock_Tasa_Interes1 WHERE st_cod_moneda = 1))
THROW 51005, ''No existe parametrizaci<00>n para el shock de tasa de interes para la moneda dolares'', 1;
---Obtiene la Situacion Actual del Cliente
IF(CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0)
INSERT INTO #Temp_Situacion_Actual1( [IdSituacionActual],
[IdSolicitud],
[IdCliente],
[Incidente],
[Proceso],
[Identificacion],
[EsDeudor],
[Estado],
[IdOperacion],
[Moneda],
[FecVencimiento],
[TipoOperacion],
[Condicion],
[EstadoOperacion],
[DiasAtraso],
[EntidadAcreedora],
[Saldo],
[CuotasEquivalente],
[MontoOriginal],
[FecInicio],
[MontoNoDesembolsado],
[Cancela],
[CuotaPrincipal],
[CuotaIntereses],
[TipoTasa],
[TasaNominal],
[DTI_MiniEndeudamiento],
[CuotaCertificada]
)
SELECT [IdSituacionActual],
[IdSolicitud],
[IdCliente],
[Incidente],
[Proceso],
[Identificacion],
[EsDeudor],
[Estado],
[IdOperacion],
[Moneda],
[FecVencimiento],
[TipoOperacion],
[Condicion],
[EstadoOperacion],
[DiasAtraso],
[EntidadAcreedora],
CASE [Moneda]
WHEN ''E - DIVISA EXTRANJERA'' THEN (convert(float,[Saldo]) /@i_tipo_cambio)
WHEN ''N - COLONES O UNIDADES DE DESARROLLO'' THEN convert(float,[Saldo])
ELSE convert(float,[Saldo])
END,
CASE [Moneda]
WHEN ''E - DIVISA EXTRANJERA'' THEN (convert(float,[CuotasEquivalente])/@i_tipo_cambio)
WHEN ''N - COLONES O UNIDADES DE DESARROLLO'' THEN convert(float,[CuotasEquivalente])
ELSE convert(float,[CuotasEquivalente])
END,
[MontoOriginal],
[FecInicio],
CASE [Moneda]
WHEN ''E - DIVISA EXTRANJERA'' THEN (convert(float,[MontoNoDesembolsado])/@i_tipo_cambio)
WHEN ''N - COLONES O UNIDADES DE DESARROLLO'' THEN convert(float,[MontoNoDesembolsado])
ELSE convert(float,[MontoNoDesembolsado])
END,
[Cancela],
[CuotaPrincipal],
[CuotaIntereses],
[TipoTasa],
[TasaNominal],
[DTI_MiniEndeudamiento],
[CuotaCertificada]
FROM BPMPRENDARIO.Prendario.SituacionActual
WHERE IdSolicitud = @i_idsolicitud
AND Proceso = @i_proceso
AND IdCliente = @i_idcliente
INSERT INTO #Temp_Situacion_Actual1( [IdSituacionActual],
[IdSolicitud],
[IdCliente],
[Incidente],
[Proceso],
[Identificacion],
[EsDeudor],
[Estado],
[IdOperacion],
[Moneda],
[FecVencimiento],
[TipoOperacion],
[Condicion],
[EstadoOperacion],
[DiasAtraso],
[EntidadAcreedora],
[Saldo],
[CuotasEquivalente],
[MontoOriginal],
[FecInicio],
[MontoNoDesembolsado],
[Cancela],
[CuotaPrincipal],
[CuotaIntereses],
[TipoTasa],
[TasaNominal],
[DTI_MiniEndeudamiento]
)
SELECT [IdSituacionActual] = ISNULL((SELECT MAX([IdSituacionActual])+1 FROM BPMPRENDARIO.Prendario.SituacionActual ),1),
[IdSolicitud] = @i_idsolicitud,
[IdCliente] = @i_idcliente,
[Incidente] = @i_incidente,
[Proceso] = @i_proceso,
[Identificacion] = @i_identificacion,
[EsDeudor] = 1,
[Estado] = ''C'',
[IdOperacion] = ''Operacion del Tramite Actual'',
[Moneda] = @i_co_moneda,
[FecVencimiento] = CONVERT(VARCHAR,DATEADD(DAY, (@i_plazo_meses * 30), GETDATE()),103),
[TipoOperacion] = CASE WHEN CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0 THEN ''1''
WHEN CHARINDEX(''TARJETA'', @i_proceso, 0) > 0 THEN ''3''
END,
[Condicion] = ''DEUDOR'',
[EstadoOperacion] = ''VIGENTE'',
[DiasAtraso] = 0,
[EntidadAcreedora] = ''Banco Davivienda (Costa Rica)'',
[Saldo] = @i_monto,
[CuotasEquivalente] = 0,
[MontoOriginal] = @i_monto,
[FecInicio] = CONVERT(VARCHAR,GETDATE(),103),
[MontoNoDesembolsado] = @i_monto,
[Cancela] = 0,
[CuotaPrincipal] = 0,
[CuotaIntereses] = 0,
[TipoTasa] = @i_tipo_tasa,
[TasaNominal] = @i_tasa,
[DTI_MiniEndeudamiento] = 0
---Obtiene el c<00>digo del tipo de operacion
UPDATE #Temp_Situacion_Actual1
SET TipoOperacion = RTRIM(SUBSTRING(TipoOperacion,0, CHARINDEX(''-'',TipoOperacion)))
---Carga la temporal de sensibilizacion operacion con la informacion base de la Situacion Actual
INSERT INTO #Temp_Sensibilizacion_Operacion1(so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
so_esdeudor,
so_estado,
so_id_operacion,
so_refinancia,
so_meses_plazo_restante,
so_co_moneda)
SELECT Incidente,
IdSolicitud,
Proceso,
IdCliente,
Identificacion,
EsDeudor,
Estado,
IdOperacion,
Refinancia = CASE Cancela
WHEN 1 THEN 1
ELSE 0
END,
MesesPlazoRestante = CASE
WHEN TipoTasa IN (''F'') AND TipoOperacion IN (3,6) THEN 0
ELSE DATEDIFF(DAY, CONVERT(DATETIME, FecInicio, 103), CONVERT(DATETIME, FecVencimiento, 103))
END,
Moneda = CASE Moneda
WHEN ''E - DIVISA EXTRANJERA'' THEN 1
WHEN ''N - COLONES O UNIDADES DE DESARROLLO'' THEN 0
WHEN 1 THEN 1
ELSE 0
END
FROM #Temp_Situacion_Actual1
---Calcula los escenarios de devaluacion del tipo de cambio
UPDATE #Temp_Sensibilizacion_Operacion1
SET so_tip_camb_deval_esc_normal = @i_tipo_cambio * ((st_esc_normal/100)+1),
so_tip_camb_deval_esc_leve = @i_tipo_cambio * ((st_esc_leve/100)+1),
so_tip_camb_deval_esc_moderado = @i_tipo_cambio * ((st_esc_moderado/100)+1),
so_tip_camb_deval_esc_servero = @i_tipo_cambio * ((st_esc_severo/100)+1)
FROM #Temp_Parametrizacion_Shock_Tipo_Cambio1
WHERE st_cod_moneda = 0
---Calcula los escenarios de revaluacion del tipo de cambio
UPDATE #Temp_Sensibilizacion_Operacion1
SET so_tip_camb_reval_esc_normal = @i_tipo_cambio * ((st_esc_normal/100)+1),
so_tip_camb_reval_esc_leve = @i_tipo_cambio * ((st_esc_leve/100)+1),
so_tip_camb_reval_esc_moderado = @i_tipo_cambio * ((st_esc_moderado/100)+1),
so_tip_camb_reval_esc_servero = @i_tipo_cambio * ((st_esc_severo/100)+1)
FROM #Temp_Parametrizacion_Shock_Tipo_Cambio1
WHERE st_cod_moneda = 1
---Calcula los escenarios los ingresos con tipo de cambio revaluado o devaluado segun la moneda
UPDATE #Temp_Sensibilizacion_Operacion1
SET so_ingreso_col_esc_normal = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_normal),
so_ingreso_col_esc_leve = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_leve),
so_ingreso_col_esc_moderado = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_moderado),
so_ingreso_col_esc_severo = @i_ingreso_neto_col + (@i_ingreso_neto_dol * so_tip_camb_deval_esc_servero),
so_ingreso_dol_esc_normal = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_normal),
so_ingreso_dol_esc_leve = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_leve),
so_ingreso_dol_esc_moderado = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_moderado),
so_ingreso_dol_esc_severo = @i_ingreso_neto_dol + (@i_ingreso_neto_col / so_tip_camb_reval_esc_servero)
FROM #Temp_Parametrizacion_Shock_Tipo_Cambio1
---Determina cual es el producto asociado
UPDATE #Temp_Sensibilizacion_Operacion1
SET so_producto = CASE WHEN (so_meses_plazo_restante/30) > 96 THEN ''HVI''
WHEN (so_meses_plazo_restante/30) > 60 THEN ''AUTO''
WHEN (so_meses_plazo_restante/30) > 1 THEN ''CP''
ELSE NULL
END
-------------------Determina la cuota generada-------------------
--Si la Cuota Certidficada es cero o nulo
UPDATE A
SET A.so_cuota_generada = ROUND([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''),
ISNULL(B.TasaNominal,0),
0,
CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30,
ISNULL(B.Saldo,0),
B.TipoOperacion,
0),2)
FROM #Temp_Sensibilizacion_Operacion1 A
INNER JOIN #Temp_Situacion_Actual1 B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE B.CuotaCertificada IS NULL
OR B.CuotaCertificada = ''0''
--Si la Cuota Certidficada no es cero ni nulo
UPDATE A
SET A.so_cuota_generada = ROUND(CONVERT(FLOAT,B.CuotaCertificada),2)
FROM #Temp_Sensibilizacion_Operacion1 A
INNER JOIN #Temp_Situacion_Actual1 B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE B.CuotaCertificada IS NOT NULL
AND B.CuotaCertificada != ''0''
-------------------Calcula la cuota sin seguro y la cuota del seguro-------------------
--Si la Cuota Certidficada es cero o nulo
UPDATE A
SET A.so_cuota_sin_seguro = A.so_cuota_generada,
A.so_cuota_seguro = CASE A.so_producto
WHEN ''HVI''THEN ROUND((A.so_cuota_generada * 0.1),2)
WHEN ''AUTO''THEN ROUND((A.so_cuota_generada * 0.35),2)
ELSE 0
END
FROM #Temp_Sensibilizacion_Operacion1 A
INNER JOIN #Temp_Situacion_Actual1 B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE A.so_id_operacion != ''Operacion del Tramite Actual''
AND (B.CuotaCertificada IS NULL
OR B.CuotaCertificada = ''0'')
--Si la Cuota Certidficada NO es cero ni es nulo
UPDATE A
SET A.so_cuota_sin_seguro = A.so_cuota_generada,
A.so_cuota_seguro = 0
FROM #Temp_Sensibilizacion_Operacion1 A
INNER JOIN #Temp_Situacion_Actual1 B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
WHERE A.so_id_operacion != ''Operacion del Tramite Actual''
AND B.CuotaCertificada IS NOT NULL
AND B.CuotaCertificada != ''0''
--Si es la operacion del Tramite actual
UPDATE #Temp_Sensibilizacion_Operacion1
SET so_cuota_sin_seguro = so_cuota_generada,
so_cuota_seguro = ISNULL(@i_seguros,0)
WHERE so_id_operacion = ''Operacion del Tramite Actual''
-------------------Calcula las cuotas seg<00>n el escenario de estres-------------------
--Si la Cuota Certidficada es cero o nulo
UPDATE A
SET A.so_cuota_esc_normal = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_leve = CASE
WHEN B.TipoTasa IN (''V'',''FV'', ''VF'')THEN ROUND(([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''), ISNULL(B.TasaNominal,0), ISNULL(C.st_esc_leve,0), CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30, ISNULL(B.Saldo,0), B.TipoOperacion, 1) + A.so_cuota_seguro),2)
WHEN B.TipoTasa IN (''F'') THEN (A.so_cuota_sin_seguro + A.so_cuota_seguro)
ELSE (A.so_cuota_sin_seguro + A.so_cuota_seguro)
END,
A.so_cuota_esc_moderado = CASE
WHEN B.TipoTasa IN (''V'',''FV'', ''VF'')THEN ROUND(([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''),ISNULL(B.TasaNominal,0), ISNULL(C.st_esc_moderado,0), CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30, ISNULL(B.Saldo,0), B.TipoOperacion, 2) + A.so_cuota_seguro),2)
WHEN B.TipoTasa IN (''F'') THEN (A.so_cuota_sin_seguro + A.so_cuota_seguro)
ELSE (A.so_cuota_sin_seguro + A.so_cuota_seguro)
END,
A.so_cuota_esc_severo = CASE
WHEN B.TipoTasa IN (''V'',''FV'', ''VF'')THEN ROUND(([BPMDATA].[dbo].[F_getCuotaDTI](ISNULL(B.Condicion, ''''),ISNULL(B.TasaNominal,0), ISNULL(C.st_esc_severo,0), CONVERT(FLOAT,ISNULL(A.so_meses_plazo_restante,0)) /30, ISNULL(B.Saldo,0), B.TipoOperacion, 3) + A.so_cuota_seguro),2)
WHEN B.TipoTasa IN (''F'') THEN (A.so_cuota_sin_seguro + A.so_cuota_seguro)
ELSE (A.so_cuota_sin_seguro + A.so_cuota_seguro)
END
FROM #Temp_Sensibilizacion_Operacion1 A
INNER JOIN #Temp_Situacion_Actual1 B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
INNER JOIN #Temp_Parametrizacion_Shock_Tasa_Interes1 C
ON (A.so_co_moneda = C.st_cod_moneda)
WHERE B.CuotaCertificada IS NULL
OR B.CuotaCertificada = ''0''
--Si la Cuota Certidficada NO es cero ni es nulo
UPDATE A
SET A.so_cuota_esc_normal = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_leve = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_moderado = (A.so_cuota_sin_seguro + A.so_cuota_seguro),
A.so_cuota_esc_severo = (A.so_cuota_sin_seguro + A.so_cuota_seguro)
FROM #Temp_Sensibilizacion_Operacion1 A
INNER JOIN #Temp_Situacion_Actual1 B
ON A.so_solicitud = B.IdSolicitud
AND A.so_proceso = B.Proceso
AND A.so_idcliente = B.IdCliente
AND A.so_id_operacion = B.IdOperacion
INNER JOIN #Temp_Parametrizacion_Shock_Tasa_Interes1 C
ON (A.so_co_moneda = C.st_cod_moneda)
WHERE B.CuotaCertificada IS NOT NULL
AND B.CuotaCertificada != ''0''
-------------------Calcula los mini-endeudamientos seg<00>n el escenario de estres-------------------
UPDATE #Temp_Sensibilizacion_Operacion1
SET so_dti_esc_normal = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_normal/ so_ingreso_col_esc_normal)
WHEN 1 THEN (so_cuota_esc_normal/ so_ingreso_dol_esc_normal)
END,
so_dti_esc_leve = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_leve/ so_ingreso_col_esc_leve)
WHEN 1 THEN (so_cuota_esc_leve/ so_ingreso_dol_esc_leve)
END,
so_dti_esc_moderado = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_moderado/ so_ingreso_col_esc_moderado)
WHEN 1 THEN (so_cuota_esc_moderado/ so_ingreso_dol_esc_moderado)
END,
so_dti_esc_severo = CASE so_co_moneda
WHEN 0 THEN (so_cuota_esc_severo/ so_ingreso_col_esc_severo)
WHEN 1 THEN (so_cuota_esc_severo/ so_ingreso_dol_esc_severo)
END
INSERT INTO #Temp_Sensibilizacion_Resumen1
SELECT so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
SUM(so_cuota_esc_normal),
SUM(so_cuota_esc_leve),
SUM(so_cuota_esc_moderado),
SUM(so_cuota_esc_severo),
so_co_moneda,
0,
0,
0,
0
FROM #Temp_Sensibilizacion_Operacion1
GROUP BY so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
so_co_moneda
UPDATE #Temp_Sensibilizacion_Resumen1
SET sr_endeuda_esc_normal = A.sr_endeuda_esc_normal,
sr_endeuda_esc_leve = A.sr_endeuda_esc_leve,
sr_endeuda_esc_moderado = A.sr_endeuda_esc_moderado,
sr_endeuda_esc_severo = A.sr_endeuda_esc_severo
FROM (SELECT sr_endeuda_esc_normal = SUM(so_dti_esc_normal),
sr_endeuda_esc_leve = SUM(so_dti_esc_leve),
sr_endeuda_esc_moderado = SUM(so_dti_esc_moderado),
sr_endeuda_esc_severo = SUM(so_dti_esc_severo)
FROM #Temp_Sensibilizacion_Operacion1)A
IF(CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0)
BEGIN
DELETE BPMPRENDARIO.Prendario.SensibilizacionOperacion
WHERE
--so_incidente = @i_incidente
so_solicitud = @i_idsolicitud
AND so_proceso = @i_proceso
AND so_idcliente = @i_idcliente
--AND so_identificacion = @i_identificacion
DELETE BPMPRENDARIO.Prendario.SensibilizacionResumen
WHERE --sr_incidente = @i_incidente
sr_solicitud = @i_idsolicitud
AND sr_proceso = @i_proceso
AND sr_idcliente = @i_idcliente
--AND sr_identificacion = @i_identificacion
INSERT INTO BPMPRENDARIO.Prendario.SensibilizacionOperacion
SELECT * FROM #Temp_Sensibilizacion_Operacion1
INSERT INTO BPMPRENDARIO.Prendario.SensibilizacionResumen
SELECT * FROM #Temp_Sensibilizacion_Resumen1
END
SELECT @o_res_code = 0,
@o_res_message = ''EXITOSO''
--FIN DE SENSIBILIZACION DE INCIDENTES MAYORES AL 18-04-2017
END
COMMIT TRAN T1
END TRY
BEGIN CATCH
ROLLBACK TRAN T1
SELECT @o_res_code = ERROR_NUMBER(),
@o_res_message = ERROR_MESSAGE(),
@o_res_err_procedure = ERROR_PROCEDURE(),
@o_res_err_line = ERROR_LINE()
END CATCH
SELECT res_code = @o_res_code,
res_message = @o_res_message,
res_err_procedure = @o_res_err_procedure,
res_err_line = @o_res_err_line
END
IF @i_opcion = 2
BEGIN
IF(CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0)
BEGIN
--[DataSet 1] - Calculo de Cuotas y DTI por Operacion y Moneda en cada Escenario
SELECT so_incidente,
so_solicitud,
so_proceso,
so_idcliente,
so_identificacion,
so_esdeudor,
so_estado,
so_id_operacion,
so_co_moneda,
so_simbolo_moneda_col = (SELECT TOP 1 Simbolo FROM BPMPRENDARIO.Catalogos.Moneda WHERE IdMoneda=0),
so_simbolo_moneda_dol = (SELECT TOP 1 Simbolo FROM BPMPRENDARIO.Catalogos.Moneda WHERE IdMoneda=1),
so_cuota_esc_normal_col = CASE so_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_normal AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_leve_col = CASE so_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_leve AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_moderado_col = CASE so_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_moderado AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_severo_col = CASE so_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_severo AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_normal_dol = CASE so_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_normal AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_leve_dol = CASE so_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_leve AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_moderado_dol = CASE so_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_moderado AS MONEY),1) ELSE ''0.00'' END,
so_cuota_esc_severo_dol = CASE so_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(so_cuota_esc_severo AS MONEY),1) ELSE ''0.00'' END
FROM BPMPRENDARIO.Prendario.SensibilizacionOperacion S
WHERE ---so_incidente = @i_incidente
so_solicitud = @i_idsolicitud
AND so_proceso = @i_proceso
AND so_idcliente = @i_idcliente
--AND so_identificacion = @i_identificacion
--[DataSet 2] - Resumen de Cuotas por moneda en cada Escenario
SELECT sr_etiqueta = ''Totales'',
A.sr_incidente,
A.sr_solicitud,
A.sr_proceso,
A.sr_idcliente,
A.sr_identificacion,
sr_cuota_esc_normal_col = CASE A.sr_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(A.sr_cuota_esc_normal AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_leve_col = CASE A.sr_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(A.sr_cuota_esc_leve AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_moderado_col = CASE A.sr_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(A.sr_cuota_esc_moderado AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_severo_col = CASE A.sr_co_moneda WHEN 0 THEN CONVERT(VARCHAR,CAST(A.sr_cuota_esc_severo AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_normal_dol = CASE B.sr_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(B.sr_cuota_esc_normal AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_leve_dol = CASE B.sr_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(B.sr_cuota_esc_leve AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_moderado_dol = CASE B.sr_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(B.sr_cuota_esc_moderado AS MONEY),1) ELSE ''0.00'' END,
sr_cuota_esc_severo_dol = CASE B.sr_co_moneda WHEN 1 THEN CONVERT(VARCHAR,CAST(B.sr_cuota_esc_severo AS MONEY),1) ELSE ''0.00'' END,
sr_simbolo_moneda_col = (SELECT TOP 1 Simbolo FROM BPMPRENDARIO.Catalogos.Moneda WHERE IdMoneda=0),
sr_simbolo_moneda_dol = (SELECT TOP 1 Simbolo FROM BPMPRENDARIO.Catalogos.Moneda WHERE IdMoneda=1)
FROM (
SELECT *
FROM BPMPRENDARIO.Prendario.SensibilizacionResumen
WHERE ---sr_incidente = @i_incidente
sr_solicitud = @i_idsolicitud
AND sr_proceso = @i_proceso
AND sr_idcliente = @i_idcliente
--AND sr_identificacion = @i_identificacion
AND sr_co_moneda = 1
)A
LEFT JOIN (
SELECT *
FROM BPMPRENDARIO.Prendario.SensibilizacionResumen
WHERE ---sr_incidente = @i_incidente
sr_solicitud = @i_idsolicitud
AND sr_proceso = @i_proceso
AND sr_idcliente = @i_idcliente
--AND sr_identificacion = @i_identificacion
AND sr_co_moneda = 0
)B
ON --A.sr_incidente = B.sr_incidente
A.sr_solicitud = B.sr_solicitud
AND A.sr_proceso = B.sr_proceso
AND A.sr_idcliente = B.sr_idcliente
AND A.sr_identificacion = B.sr_identificacion
--[DataSet 3] - DTI por moneda en cada Escenario
SELECT DISTINCT
sr_incidente,
sr_solicitud,
sr_proceso,
sr_idcliente,
sr_identificacion,
sr_endeuda_esc_normal = (CONVERT(VARCHAR,CAST((sr_endeuda_esc_normal*100) AS MONEY),1) + ''%''),
sr_endeuda_esc_leve = (CONVERT(VARCHAR,CAST((sr_endeuda_esc_leve*100) AS MONEY),1) + ''%''),
sr_endeuda_esc_moderado = (CONVERT(VARCHAR,CAST((sr_endeuda_esc_moderado*100) AS MONEY),1) + ''%''),
sr_endeuda_esc_severo = (CONVERT(VARCHAR,CAST((sr_endeuda_esc_severo*100) AS MONEY),1) + ''%'')
FROM BPMPRENDARIO.Prendario.SensibilizacionResumen
WHERE ---sr_incidente = @i_incidente
sr_solicitud = @i_idsolicitud
AND sr_proceso = @i_proceso
AND sr_idcliente = @i_idcliente
--AND sr_identificacion = @i_identificacion
END
END
IF @i_opcion = 3
BEGIN
IF(CHARINDEX(''PRENDARIO'', @i_proceso, 0) > 0)
BEGIN
SELECT DISTINCT
sr_incidente,
sr_solicitud,
sr_proceso,
sr_idcliente,
sr_identificacion,
sr_endeuda_esc_normal,
sr_endeuda_esc_leve,
sr_endeuda_esc_moderado,
sr_endeuda_esc_severo
FROM BPMPRENDARIO.Prendario.SensibilizacionResumen
WHERE ---sr_incidente = @i_incidente
sr_solicitud = @i_idsolicitud
AND sr_proceso = @i_proceso
AND sr_idcliente = @i_idcliente
--AND sr_identificacion = @i_identificacion
END
END
'
END
GO
/****** Object: UserDefinedFunction [dbo].[F_getCuotaDTI] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[F_getCuotaDTI]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'
/*
SELECT [dbo].[F_getCuotaDTI](''DEUDOR'',15, 0, 118.80, 980849.25,''1'')
SELECT [dbo].[F_getCuotaDTI](''DEUDOR'',0, 0, 0, 0,''1'')
*/
CREATE FUNCTION [dbo].[F_getCuotaDTI]
(@i_condicion VARCHAR(50) = ''DEUDOR'', --DEUDOR, CODEUDOR, FIADOR
@i_porc_tasa_nominal FLOAT = 0, --Porcentaje de Tasa Anual
@i_porc_shock_tasa FLOAT = 0, --Porcentaje de Incremento de Tasa
@i_plazo_meses FLOAT = 0, --Cantidad de Meses
@i_saldo_monto FLOAT = 0, --Saldo o Monto del Cr<00>dito
@i_tipo_operacion VARCHAR(50) = 0, --Tipo de Operacion de SUGEF
--1 - 98 DIRECTA
--3 - TARJETAS DE CR<00>DITO
--6 - L<00>NEA DE CR<00>DITO SIN COMPROMISO
@i_escenario INT = 0 --0 - NORMAL
--1 - LEVE
--2 - MODERADO
--3 - SEVERO
)
RETURNS FLOAT --float
AS
BEGIN
DECLARE @Value FLOAT
IF((@i_tipo_operacion = ''3'' OR @i_tipo_operacion = ''6''))---AND @i_escenario = 0)
SET @Value = (@i_saldo_monto * 0.04)
ELSE
SET @Value = (dbo.F_pmt(CONVERT(FLOAT,(@i_porc_tasa_nominal + @i_porc_shock_tasa))/12, @i_plazo_meses, (-1 * @i_saldo_monto), 0,0))
SET @Value = CASE
WHEN @i_condicion = ''DEUDOR'' THEN @Value
WHEN @i_condicion = ''FIADOR'' THEN 0
WHEN @i_condicion IN (''CODEUDOR'', ''CO-DEUDOR'') THEN @Value / 2
ELSE 0
END
RETURN @Value
END
'
END
GO
/****** Object: UserDefinedFunction [dbo].[F_pmt] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[F_pmt]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'
/*
declare @tasa float
select @tasa = CONVERT(FLOAT,15)/12
SELECT [dbo].[F_pmt](@tasa, 118.80, -980849.25,0,0)
SELECT [dbo].[F_pmt](0, 0, 0,0,0)
*/
CREATE FUNCTION [dbo].[F_pmt]
(@InterestRate FLOAT, --Rate is the interest rate per period.
@Nper FLOAT, --Nper is the total number of payment
--periods in an annuity.
@Pv FLOAT, --Pv is the present value, or the
--lump-sum amount that a series of
--future payments is worth right now.
--If pv is omitted, it is assumed to be
--0 (zero). PV must be entered as a
--negative number.
@Fv FLOAT, --Fv is the future value, or the
--lump-sum amount that a series of
--future payments is worth right now.
--If pv is omitted, it is assumed to
--be 0 (zero). PV must be entered as a
--negative number.
@Type BIT --Type is the number 0 or 1 and
--indicates when payments are due.
--If type is omitted, it is assumed
--to be 0 which represents at the end
--of the period.
--If payments are due at the beginning
--of the period, type should be 1.
)
RETURNS FLOAT --float
AS
BEGIN
DECLARE @Value FLOAT
IF(@Pv IS NULL OR @Pv = 0) --Si el monto es cero o nulo retorna cero
SET @Value = 0
ELSE IF(@Nper IS NULL OR @Nper = 0) -- Si el plazo es cero o nulo retorna cero
SET @Value = 0
ELSE IF (@InterestRate IS NULL OR @InterestRate = 0) -- Si el interes es cero o nulo retona monto entre plazo
SET @Value = ABS(@Pv / @Nper)
ELSE
BEGIN
DECLARE @w_interes FLOAT
SELECT @w_interes = Convert(float,@InterestRate) / 100
SELECT @Value = CASE
WHEN @Type=0
THEN
@w_interes
/((Power(1+@InterestRate/100,@Nper))-1)
*(-(@Pv*Power(1 + @InterestRate/100,@Nper)+@Fv))
WHEN @Type=1
THEN Convert(float,@InterestRate / 100) /
(Power(Convert(float,(1 + @InterestRate / 100)),@Nper)-1)
* -(@Pv*Power(Convert(float,(1 + @InterestRate / 100)),@Nper)
+@Fv)
/(1 + Convert(float,(@InterestRate / 100)))
END
END
RETURN @Value
END
'
END
GO
/****** Object: Table [Parametros].[WFGradualidadCobertura] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Parametros].[WFGradualidadCobertura]') AND type in (N'U'))
BEGIN
CREATE TABLE [Parametros].[WFGradualidadCobertura](
[gc_codigo] [int] NOT NULL,
[gc_anho] [int] NOT NULL,
[gc_tipo_credito] [nvarchar](50) NOT NULL,
[gc_porc_esc_normal] [float] NULL,
[gc_porc_esc_severo] [float] NULL,
[gc_estado] [bit] NULL,
CONSTRAINT [PK_WF_GRADUALIDAD_COBERTURA] PRIMARY KEY CLUSTERED
(
[gc_codigo] ASC,
[gc_anho] ASC,
[gc_tipo_credito] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO
/****** Object: Table [Parametros].[WFShockTasaInteres] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Parametros].[WFShockTasaInteres]') AND type in (N'U'))
BEGIN
CREATE TABLE [Parametros].[WFShockTasaInteres](
[st_codigo] [int] NOT NULL,
[st_esc_normal] [decimal](18, 2) NOT NULL,
[st_esc_leve] [decimal](18, 2) NOT NULL,
[st_esc_moderado] [decimal](18, 2) NOT NULL,
[st_esc_severo] [decimal](18, 2) NOT NULL,
[st_cod_moneda] [int] NOT NULL,
[st_estado] [bit] NOT NULL,
CONSTRAINT [PK_WF_SHOCK_TASA_INTERES] PRIMARY KEY CLUSTERED
(
[st_codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO
/****** Object: Table [Parametros].[WFShockTipoCambio] Script Date: 16/02/2018 10:43:05 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Parametros].[WFShockTipoCambio]') AND type in (N'U'))
BEGIN
CREATE TABLE [Parametros].[WFShockTipoCambio](
[st_codigo] [int] NOT NULL,
[st_esc_normal] [decimal](18, 2) NOT NULL,
[st_esc_leve] [decimal](18, 2) NOT NULL,
[st_esc_moderado] [decimal](18, 2) NOT NULL,
[st_esc_severo] [decimal](18, 2) NOT NULL,
[st_cod_moneda] [int] NOT NULL,
[st_estado] [bit] NOT NULL,
CONSTRAINT [PK_WF_SHOCK_TIPO_CAMBIO] PRIMARY KEY CLUSTERED
(
[st_codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO