Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
3| Name | Data Type | Length | Description |
|---|---|---|---|
| @accion | varchar | 100 | |
| @contraparte | int | 4 | |
| @p_user_id | int | 4 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
-- =============================================
-- Author: <María Inés Soria>
-- Create date: <06/04/2022>
-- Description: Cálculo de Scores de VRM BBVA
-- =============================================
EXEC [LN_scores_VRM] 'RA_SCORE_RA', 162668
EXEC [LN_scores_VRM] 'MA_conflictos_interes', 162668
EXEC [LN_scores_VRM] 'MA_Materialidad', 162668
EXEC [LN_scores_VRM] 'MA_Risk_Assessment', 162668
EXEC [LN_scores_VRM] 'VRM_SCORE_AML', 162668
EXEC [LN_scores_VRM] 'MA_SCORE_MA', 169241
EXEC [LN_scores_VRM] 'VRM_Score_RR' , 162668
EXEC [LN_scores_VRM] 'SOLICITAR_DDR_PENDIENTE' , 162668
EXEC [LN_scores_VRM] 'VRM_SCORE_IT_RISK',144822
EXEC [LN_scores_VRM] 'VRM_SCORE_PROT_CLIENTELA',168613
EXEC [LN_scores_VRM] 'CRP_Riesgo_Concentracion_Pais',169241
select * from ln_gestiones where contraparte = 169241
LN_indicadores_producto 169241,2095,181993
select * from ln_contraparte_datos_configuracion order by producto, indicador
update ln_contraparte_datos_configuracion set peso_indicador = null where producto = 2079
select * from ln_indicadores where clave_indicador = 'VRM_SCORE_AML'
select * from ln_productos where producto = 2079
select * from LN_check
select * from ln_indicadores where clave_indicador = 'VRM_SCORE_AML'
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador = 423
where contraparte in (select contraparte from ln_contrapartes where cliente = 1226057645 and activo = 1 and servicio_contratado = 47)
and lncheck != 'V'
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador >= 415
select * from ln_indicadores where indicador in ( 421,422,423)
exec LN_contrapartes_queue_ 'indicadores_vrm_score',NULL,162668
exec LN_dashboard_cliente 'indicadores_contraparte_gestion_vrm', null, null,
null, 162668,
NULL,
NULL,
null,
null,
null,
null,
1,
null,
0,
'2021-12-06'
*/
/*
declare @valores varchar(max) = (select item from dbo.DelimitedSplit8K((select opciones from ln_indicadores where indicador = 417), '^') where ItemNumber = 1)
declare @opciones varchar(max) = (select item from dbo.DelimitedSplit8K((select opciones from ln_indicadores where indicador = 417), '^') where ItemNumber = 2)
select * from dbo.DelimitedSplit8K( @valores,'|')
select * from dbo.DelimitedSplit8K( @opciones,'|')
*/
CREATE OR ALTER PROCEDURE dbo.LN_scores_VRM_05062022
@accion varchar(100),
@contraparte int,
@p_user_id int = 94437923
AS
BEGIN
SET NOCOUNT ON;
declare @score_datos decimal(10,2) = null
declare @score_memo varchar(100) = null
declare @cliente int = null
declare @gestion int = null
declare @familia int = null
declare @pais_contraparte varchar(10) = null
declare @indic_accion int = null
declare @total decimal(12,2) = 0
declare @puntos decimal(12,2)
declare @puntos_producto decimal(12,2)
declare @peso_indicador decimal(12,2)
declare @maximo decimal(12,2)
declare @cant int = 0
declare @valor_memo varchar(100) = null
declare @cuit varchar(20)
--select @accion
select @cliente = ln_contrapartes.cliente,
@gestion = LN_gestiones.gestion,
@familia = ln_contraparte_familias.familia,
@pais_contraparte = ln_contrapartes.country_code,
@cuit = identificacion
from ln_contrapartes
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
inner join LN_gestiones on LN_gestiones.contraparte = LN_contrapartes.contraparte
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = LN_contrapartes.contraparte
where ln_contrapartes.contraparte = @contraparte
AND LN_gestiones.desde <= GETDATE()
AND LN_gestiones.hasta >= GETDATE()
AND LN_gestiones.vigente = 1
if (@gestion is null or @cliente is null) return
declare @producto int = null
declare @indicador int = null
declare @valor varchar(100) = null
IF (@accion = 'RA_SCORE_RA' or @accion = 'MA_SCORE_MA' or @accion = 'DDR_SCORE_DDR')
BEGIN
select @producto = LN_productos.producto
from LN_productos
inner join ln_indicadores on LN_indicadores.producto = LN_productos.producto
where ln_indicadores.clave_indicador = @accion
if (@producto is null) return
-- select producto from ln_indicadores where clave_indicador ='RA_SCORE_RA'
-- select * from LN_contraparte_datos_configuracion where producto = 2085
-- select * from LN_indicadores where producto = 2085
-- RA_SCORE_RA: Tiene que tener todos los otros indicadores del producto cargados para poder calcularse
-- MA_SCORE_MA y DDR_SCORE_DDR: Si alguno de los otros indicadores del mismo producto es 1, ya el resultado es 1
set @cant =
(select COUNT(*) from ln_indicadores
where indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != @accion)
and not exists (select * from LN_contraparte_indicadores where LN_contraparte_indicadores.contraparte = @contraparte
and LN_contraparte_indicadores.gestion = @gestion
and LN_contraparte_indicadores.indicador = LN_indicadores.indicador
and (valor_numerico is not null or valor_texto is not null or valor_fecha is not null or valor_memo is not null)))
select @cant cantidad_sin_calcular
select indicador, nombre_indicador, clave_indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != @accion
if ((@cant = 0 and @accion = 'RA_SCORE_RA') or (@accion = 'DDR_SCORE_DDR' or @accion = 'MA_SCORE_MA'))
begin
DECLARE C_datos CURSOR FOR
SELECT indicador, valor_texto
FROM LN_contraparte_indicadores a
where a.contraparte = @contraparte
and a.gestion = @gestion
and indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != @accion)
-- select * from LN_contraparte_datos_configuracion
OPEN C_datos
FETCH NEXT FROM C_datos INTO @indicador, @valor
WHILE @@fetch_status = 0
BEGIN
select @puntos_producto = isnull(puntos_producto ,0), @peso_indicador = isnull(peso_indicador,0),
@puntos = isnull(puntos ,0), @maximo = isnull(maximo ,0)
from LN_contraparte_datos_configuracion
where cliente = @cliente
and producto = @producto
and indicador = @indicador
and valor_cargado = @valor
select @indicador as indicador, @puntos_producto as peso_producto, @peso_indicador as peso_indicador,
@puntos as puntos, @maximo as maximo, (@puntos / @maximo) * @peso_indicador as puntos_indicador
if (@accion = 'MA_SCORE_MA' and @score_datos is null) set @score_datos = 10 /* MA_SCORE_MA vale 1 o 10, con que uno de sus componentes sea 1, da 1 */
if ((@accion = 'MA_SCORE_MA' or @accion = 'DDR_SCORE_DDR') and @puntos = 1) set @score_datos = 1
IF (@accion = 'RA_SCORE_RA')
set @total = @total + ((@puntos / @maximo) * @peso_indicador)
FETCH NEXT FROM C_datos INTO @indicador, @valor
END
CLOSE C_datos
DEALLOCATE C_datos
IF (@accion = 'RA_SCORE_RA')
set @score_datos = @puntos_producto * (@total / 100)
-- Si es Score Modulo anticorrupción o Score DDR y por algo da 1, lo deja en 1
/* lo de abajo, lo sacamos */
-- Sino, si aun tiene indicadores de su producto sin calcular, sigue quedando sin calcular
--if ((@accion = 'MA_SCORE_MA' or @accion = 'DDR_SCORE_DDR') and @score_datos != 1 and @cant != 0) set @score_datos = null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @score_datos*10, format(@score_datos,'###.##'), GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @score_datos*10,
valor_texto = format(@score_datos,'###.##'),
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @score_datos as score
END
declare @valor_texto varchar(100) = null
declare @valor_numerico decimal(12,2) = null
--IF (@accion = 'MA_Worldcheck')
IF (@accion = 'AML_SCORE_Worldcheck') -- Es auntomatico, para que nazca como Verde.
-- y luego es dependiente del indicador de Worldcheck
BEGIN
declare @world varchar(100) = null
set @score_datos = null
set @valor_texto = null
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join LN_indicadores on LN_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'WORDCHK'
/* Se fijaba si alguno era distinto de V, 18/04/2022: Se fija lo que tiene el indicador Worldchek general */
/*if (select COUNT(*) from LN_check where contraparte = @contraparte and visible = 1 and ISNULL(lncheck,'V') != 'V') > 0*/
if (ISNULL(@valor_texto,'V') != 'V')
begin
set @valor_texto = 'A'
set @valor_numerico = 10
end
if (isnull(@valor_texto,'V') = 'V')
begin
set @valor_texto = 'B'
set @valor_numerico = 100
end
set @score_datos = @valor_numerico
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico as score, @valor_texto as valor, @valor_memo as memo
END
declare @solicitar_ddr varchar(20) = NULL
if ((@accion = 'MA_SCORE_MA' or @accion = 'AML_SCORE_Worldcheck' ) and @score_datos = 10)
begin
select @solicitar_ddr = valor_texto
from ln_contraparte_indicadores
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = 396
and visible = 1
if (isnull(@solicitar_ddr,'NO') = 'NO')
begin
SELECT 'DISPARAR AUTOMATICAMENTE DDR' as accion
EXEC LN_indicadores_manual_cliente @contraparte,'UPDATE', 396, 'PENDIENTE',null,'DISPARAR AUTOMATICAMENTE DDR',@p_user_id
end
end
/* -- Disparar DDR automaticamente
if ((@accion = 'MA_SCORE_MA' or @accion = 'VRM_SCORE_AML') and @score_datos = 1)
begin
EXEC LN_contraparte_sub_docs 'ALTA', @contraparte, @p_user_id, 1
EXEC LN_indicadores_manual_cliente @contraparte,'UPDATE', 396, 'SI',null,null,@p_user_id
EXEC LN_contrapartes_queue_ 'insert',null,@contraparte,null
end
*/
IF (@accion = 'SOLICITAR_DDR_PENDIENTE')
begin
declare @score_ma int = null
declare @score_aml int = null
select @solicitar_ddr = valor_texto
from ln_contraparte_indicadores
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = 396
and visible = 1
if (isnull(@solicitar_ddr,'')='PENDIENTE')
begin
select @score_ma = valor_numerico/10
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'MA_SCORE_MA'
select @score_aml = valor_numerico/10
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'AML_SCORE_Worldcheck'
if (isnull(@score_ma,0) != 1 and isnull(@score_aml,0) != 1)
begin
EXEC LN_indicadores_manual_cliente @contraparte,'UPDATE', 396, null,null,'NO DISPARAR AUTOMATICAMENTE DDR',@p_user_id
select 'NO' as solicitar_ddr_pendiente
end
else
begin
select 'PENDIENTE' as solicitar_ddr_pendiente
end
end
else
begin
select 'NO' as solicitar_ddr_pendiente
end
end
IF (@accion = 'MA_conflictos_interes' or @accion = 'DDR_PRP')
BEGIN
declare @prp char(1) = null
declare @prp_memo varchar(100) = null
set @valor_numerico = null
set @valor_texto = null
declare @valores_prp table (contraparte int, gestion int, doc_id int, seccion int, campo int, tipo_campo varchar(1), nombre_campo varchar(200), etiqueta varchar(max),fila int, col int, valor_numerico int, valor_texto varchar(max), valor_fecha smalldatetime, valor_fecha_srt varchar(200))
if exists (select * from ln_docs where tipo_doc in (1189,1208)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_prp exec ln_docs_valores @contraparte, 'CONDICION_PRP'
select @valor_texto = case valor_numerico
when 1 then 'A'
when 0 then 'B'
else null
end
from @valores_prp
select @valor_numerico = case valor_numerico
when 1 then 10
when 0 then 100
else null
end
from @valores_prp
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'MA_Materialidad')
BEGIN
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'RA_Materialidad_proveedor'
if (@valor_texto = 'M') set @valor_texto = 'B'
set @valor_numerico = case @valor_texto
when 'A' then 10
when 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'MA_Materialidad'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by, familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'MA_Risk_Assessment')
BEGIN
select @valor_numerico = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'RA_SCORE_RA'
set @valor_texto = null
select @valor_texto = case
when @valor_numerico > 0 and @valor_numerico < 45 then 'A'
when @valor_numerico >= 45 and @valor_numerico <= 100 then 'B'
else null
end
set @valor_numerico = null
select @valor_numerico = case
when @valor_texto = 'A' then 10
when @valor_texto = 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'MA_Risk_Assessment'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
declare @valor_numerico1 int
declare @valor_numerico2 int
IF (@accion = 'VRM_Score_RR')
BEGIN
set @valor_numerico1 = null
set @valor_numerico2 = null
select @valor_numerico = case
when convert(int,valor_texto) >= 50 and convert(int,valor_texto) <= 100 then 10
when convert(int,valor_texto) >= 25 and convert(int,valor_texto) < 50 then 50
when convert(int,valor_texto) >= 0 and convert(int,valor_texto) <= 50 then 100
else null
end
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'SCORE_RR'
set @valor_texto = case
when @valor_numerico = 10 then 'A'
when @valor_numerico = 50 then 'M'
when @valor_numerico = 100 then 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by, familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'DOC_ID_PROT_CLIENTELA')
BEGIN
select top 1 doc_id from ln_docs where tipo_doc in (1211)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V' order by doc_id desc
END
IF (@accion = 'VRM_SCORE_PROT_CLIENTELA')
BEGIN
set @valor_numerico = null
declare @valores_pc table (contraparte int, gestion int, doc_id int, seccion int, campo int, tipo_campo varchar(1), nombre_campo varchar(200), etiqueta varchar(max),fila int, col int, valor_numerico int, valor_texto varchar(max), valor_fecha smalldatetime, valor_fecha_srt varchar(200))
declare @pregunta1 int = null
declare @pregunta2 int = null
declare @pregunta3 int = null
declare @pregunta4 char(1) = null
declare @pregunta5 char(1) = null
declare @pregunta6 int = null
declare @pregunta7 int = null
declare @pregunta8 int = null
declare @pregunta9 int = null
declare @pregunta10 int = null
declare @pregunta11 int = null
if exists (select * from ln_docs where tipo_doc in (1211)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC1AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC3AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC7AUTO'
select @pregunta1 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC1AUTO'
select @pregunta2 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC3AUTO'
select @pregunta3 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC7AUTO'
if (@pregunta1 is not null and @pregunta2 is not null and @pregunta3 is not null)
begin
if (@pregunta1 = 0 and @pregunta2 = 0 and @pregunta3 = 0)
begin
set @valor_numerico = 100
end
if (@pregunta3 = 1)
begin
set @valor_numerico = 10
end
if (@pregunta1 = 1 or @pregunta2 = 1)
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC21AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC25AUTO'
select @pregunta4 = valor_texto from @valores_pc where nombre_campo = 'BBVAC21AUTO'
select @pregunta5 = valor_texto from @valores_pc where nombre_campo = 'BBVAC25AUTO'
if (@pregunta4 = 'A' or @pregunta5 = 'A')
begin
set @valor_numerico = 10
end
else
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC28AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC30AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC34AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC38AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC40AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC42AUTO'
select @pregunta6 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC28AUTO'
select @pregunta7 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC30AUTO'
select @pregunta8 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC34AUTO'
select @pregunta9 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC38AUTO'
select @pregunta10 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC40AUTO'
select @pregunta11 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC42AUTO'
declare @cant_si int = 0
declare @cant_no int = 0
if (isnull(@pregunta6,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta7,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta8,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta9,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta10,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta11,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (@pregunta4 = 'M' or @pregunta5 = 'M')
begin
if (@cant_no <= 2) set @valor_numerico = 50
else set @valor_numerico = 10
end
else
begin
if (@cant_si = 6) set @valor_numerico = 100
if (@cant_no <= 2) set @valor_numerico = 50
if (@cant_no > 2) set @valor_numerico = 10
end
end
end
end
set @valor_texto = case @valor_numerico
when 10 then 'A'
when 50 then 'M'
when 100 then 'B'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_SCORE_PROT_CLIENTELA'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_SCORE_IT_RISK')
BEGIN
declare @puntos_itrisk int = null
declare @total_itrisk int = null
declare @itriskn char(1) = null
declare @itrisks char(1) = null
declare @score_it int = null
set @total_itrisk = 0
/* Organigrama organizativo (CISO/CIO, Responsable Tecnología y Seguridad...) (se mide en términos de capacidad de decisión del responsable de Riesgos y Seguridad Tecnológica Niveles hasta CEO)*/
/* (1 = 0,50; 2 = 0,40; 3 = 0,30; 4 ó más = 0,20) */
if exists (select * from ln_docs where tipo_doc in (1210)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK12'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK12'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
when '2' then 0.40
when '3' then 0.30
when '4' then 0.20
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Partnerships y Alianzas con otros proveedores estratégicos (en función del grado de alineamiento con la estrategia de BBVA) */
/* (1 = 0,20; 2 = 0,30; 3 = 0,40; 4 ó más = 0,50) */
declare @cant_alianzas int = 0
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK22'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK22'
set @cant_alianzas = (select count(*) from dbo.DelimitedSplit8K(@itrisks, ','))
set @puntos_itrisk = case
when (@cant_alianzas = 1) then 0.20
when (@cant_alianzas = 2) then 0.30
when (@cant_alianzas = 3) then 0.40
when (@cant_alianzas >= 4) then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Órganos de Gobierno en los que participa (dependiendo de la participación de IT en los órganos de decisión y gobierno) */
/* (Comité 1º nivel = 0,50; 2º = 0,40; 3º = 0,30; 4º ó más = 0,20) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK24'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK24'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
when '2' then 0.40
when '3' then 0.30
when '4' then 0.20
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/*---------------------------------------------*/
/* ISAE 3402 */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK32'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK32'
set @puntos_itrisk = case @itrisks
when '1' then 0.80
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Manuales Operativos */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK46'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK46'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Incidentes de Servicio - # Histórico de Incidentes */
/* (1,00 = 0 incidentes; 0,50 = 1 incidente; 0 = 2 ó más incidentes) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK54'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK54'
set @puntos_itrisk = case @itrisks
when '1' then 0.5
when '2' then 0
else 1
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/*---------------------------------------------*/
/* ISO 27001/27002 Seguridad de la Información */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK33'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK33'
set @puntos_itrisk = case @itrisks
when '1' then 0.70
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO/IEC 33000 Marco de integración de procesos de mejora (Determinar nivel 1-5) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK28'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK28'
set @puntos_itrisk = case @itrisks
when '1' then 0.2
when '2' then 0.4
when '3' then 0.5
when '4' then 0.6
when '5' then 0.7
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO 9001 Sistemas de Gestión de la Calidad */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK31'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK31'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* NIST 800-53 */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK35'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK35'
set @puntos_itrisk = case @itrisks
when '1' then 0.70
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO/IEC 27017 - Controles de Seguridad para Servicios Cloud */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK34'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK34'
set @puntos_itrisk = case @itrisks
when '1' then 0.60
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* CSA */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK36'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK36'
set @puntos_itrisk = case @itrisks
when '1' then 0.60
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO/IEC 27018 Protección de Información Personal en la Nube */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK37'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK37'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* SOC1, SOC2, SOC3 */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK38'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK38'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* GDPR Compliant */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK39'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK39'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Privacy Shield (USA) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK40'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK40'
set @puntos_itrisk = case @itrisks
when '1' then 0.40
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Proceso Hacking Éticos periódicos */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK45'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK45'
set @puntos_itrisk = case @itrisks
when '1' then 0.70
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Política de Seguridad de la Información y Protección de Datos */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK47'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK47'
set @puntos_itrisk = case @itrisks
when '1' then 0.30
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Sistema de Gestión de la Seguridad de la Información */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK62'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK62'
set @puntos_itrisk = case @itrisks
when '1' then 0.30
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Incidentes de Seguridad Tecnológica - # Histórico de Incidentes */
/* (1,00 = 0 incidentes; 0,50 = 1 incidente; 0 = 2 ó más incidentes) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK33'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK33'
set @puntos_itrisk = case @itrisks
when '1' then 0.5
when '2' then 0
else 1
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/*---------------------------------------------*/
if (@total_itrisk > 11.69) set @score_it = 100
if (@total_itrisk > 8.35 and @total_itrisk <= 11.69) set @score_it = 50
if (@total_itrisk <= 8.35) set @score_it = 10
set @valor_texto = case @score_it
when 100 then 'B'
when 50 then 'M'
when 10 then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_SCORE_IT_RISK'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @score_it, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @score_it,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @score_it, @valor_texto, @valor_memo
END
IF (@accion = 'DDR_Empleados_BBVA')
BEGIN
declare @empleados char(1) = null
declare @empleados_memo varchar(100) = null
if exists (select * from ln_docs where tipo_doc in (1186,1207)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_prp exec ln_docs_valores @contraparte, 'RELACION_EMPLEADO_BBVA'
select @valor_texto = case valor_numerico
when 1 then 'A'
when 0 then 'B'
else null
end
from @valores_prp
select @valor_numerico = case @prp
when 'A' then 10
when 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'DDR_Anticorrupcion')
BEGIN
declare @anticorrupcion char(1) = null
declare @anticorrupcion_memo varchar(100) = null
if exists (select * from ln_docs where tipo_doc in (1188)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_1'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_2'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_3'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_4'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_5'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_6'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_7'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_8'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_9'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_10'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_11'
declare @negativas_1_7 int = 0, @positivas_1_7 int = 0, @negativas_8_11 int = 0, @positivas_8_11 int = 0
select @negativas_1_7 = count(*)
from @valores_pc
where valor_numerico = 0
and nombre_campo in ('ANTICORRUPCION_1','ANTICORRUPCION_2','ANTICORRUPCION_3','ANTICORRUPCION_4','ANTICORRUPCION_5','ANTICORRUPCION_6','ANTICORRUPCION_7') group by valor_numerico
select @positivas_1_7 = count(*)
from @valores_pc
where valor_numerico = 1
and nombre_campo in ('ANTICORRUPCION_1','ANTICORRUPCION_2','ANTICORRUPCION_3','ANTICORRUPCION_4','ANTICORRUPCION_5','ANTICORRUPCION_6','ANTICORRUPCION_7') group by valor_numerico
select @negativas_8_11 = count(*)
from @valores_pc
where valor_numerico = 0
and nombre_campo in ('ANTICORRUPCION_8','ANTICORRUPCION_9','ANTICORRUPCION_10','ANTICORRUPCION_11')
select @positivas_8_11 = count(*)
from @valores_pc
where valor_numerico = 1
and nombre_campo in ('ANTICORRUPCION_8','ANTICORRUPCION_9','ANTICORRUPCION_10','ANTICORRUPCION_11')
-- Cuando las respuestas a las preguntas 1 a 7 sean en su mayoría negativas Y todas las respuestas a las preguntas 8 a 11 son negativas
-- o Cuando alguna de las respuestas a las preguntas 8 a 11 es positiva, con independencia de las respuestas a las preguntas 1 a 7
if (@anticorrupcion is null and @positivas_8_11 > 0)
begin
set @anticorrupcion = 'A'
end
if (@anticorrupcion is null and @negativas_1_7 > 3 and @negativas_8_11 = 4)
begin
set @anticorrupcion = 'A'
end
-- Cuando las respuestas a las preguntas 1 a 7 son en su mayoría positivas y
-- Todas las respuestas a las preguntas 8 a 11 son negativas.
if (@anticorrupcion is null and @positivas_1_7 > 3 and @positivas_1_7 < 7 and @negativas_8_11 = 4)
begin
set @anticorrupcion = 'M'
end
-- Todas las respuestas a las preguntas 1 a 7 son positivas y Todas las respuestas a las preguntas 8 a 11 son negativas.
if (@anticorrupcion is null and @positivas_1_7 = 7 and @negativas_8_11 = 4)
begin
set @anticorrupcion = 'B'
end
select @valor_numerico = case @anticorrupcion
when 'A' then 10
when 'M' then 50
when 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'DDR_Anticorrupcion'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @anticorrupcion, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_memo, valor_texto, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_memo, @anticorrupcion, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_memo = @valor_memo,
valor_texto = @anticorrupcion,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @anticorrupcion, @anticorrupcion_memo
END
/*
IF (@accion = 'MA_Score_DDR')
BEGIN
declare @ddr int = 10
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @ddr, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @ddr,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @ddr as MA_Score_DDR
END
*/
--IF (@accion = 'MA_Worldcheck')
IF (@accion = 'VRM_SCORE_AML')
BEGIN
set @score_datos = null
set @score_memo = null
select @valor_numerico1 = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'MA_SCORE_MA'
select @valor_numerico2 = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'AML_SCORE_Worldcheck'
if (@valor_numerico1 = 100 and @valor_numerico2 = 100)
begin
set @score_datos = 100
end
if (@valor_numerico1 = 10 or @valor_numerico2 = 10) -- Si alguno dio 1, disparo DDR
-- entonces, buscamos el indicador de DDR
begin
select @valor_numerico = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'DDR_SCORE_DDR'
set @score_datos = case
when (@valor_numerico >= 0 and @valor_numerico <= 25) then 10
when (@valor_numerico > 25) then 50
else null
end
end
set @valor_texto = case @score_datos
when 10 then 'A'
when 50 then 'M'
when 100 then 'B'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @score_datos, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @score_datos,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @score_datos, @valor_texto, @valor_memo
END
IF (@accion = 'CRP_Riesgo_Pais')
BEGIN
declare @lista_blanca varchar(10) = null
declare @footprint varchar(10) = null
declare @RP int = null
--Riesgo País, (modalidad fast fast/full)
--Alto: si País no en Lista Blanca ni en Footprint;
--Medio:si País no en Lista Blanca pero sí en Footprint;
--Bajo: si País en Lista Blanca
select top 1 @lista_blanca = lista_blanca, @footprint = footprint
from LB_Footprint
where visible = 1 and country_code = @pais_contraparte
order by periodo desc
if (@lista_blanca = 'NO' and @footprint = 'NO')
begin
set @RP = 10
set @valor_texto = 'A'
end
else
begin
if (@lista_blanca = 'NO' and @footprint = 'SI')
begin
set @RP = 50
set @valor_texto = 'M'
end
else
begin
if (@lista_blanca = 'SI')
begin
set @RP = 100
set @valor_texto = 'B'
end
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RP, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RP,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RP score, @valor_texto valor,@valor_memo memo
END
/* Familias
542 VRM-A
367 VRM-B
536 VRM-C
368 VRM-D
369 VRM-F
515 VRM-H
527 VRM-K
518 VRM-L
528 VRM-N
543 VRM-TEST
*/
/*
Riesgo Concentración en País, (modalidad full)
Alto: supera el umbral límite del país;
Medio: supera el umbral de alerta del país;
Bajo: País sin limitación en la lista o bien no supera el umbral alerta
*/
declare @ventas_contraparte decimal(20,2) = null
declare @moneda_ventas varchar(10) = null
declare @fecha_balance date = null
declare @cotizacion decimal(20,2) = 1
declare @ventas table(identificacion varchar(50),
moneda_compras varchar(10),
total_compras decimal(20,2),
moneda_ventas varchar(10),
total_ventas decimal(20,2),
fecha_balance date,
dependencia_economica decimal(20,2),
desde date,
hasta date,
compras_hasta varchar(10))
declare @umbral_limite decimal(20,2) = null
declare @umbral_alerta decimal(20,2) = null
IF (@accion = 'CRP_Riesgo_Concentracion_Pais' and
@familia in ( 542, /* Paises Modalidad Full*/
367,
536,
368,
369,
515,
528,
543))
BEGIN
declare @RCP int = null
set @valor_memo = null
select top 1 @umbral_limite = umbral_limite, @umbral_alerta = umbral_alerta
from Limites_alertas
where visible = 1 and country_code = @pais_contraparte
order by periodo desc
/*
select top 1 umbral_limite, umbral_alerta
from Limites_alertas
where visible = 1 and country_code = 'AR'
order by periodo desc
*/
insert into @ventas exec LN_dependencia_economica_balance @contraparte
select top 1 @ventas_contraparte = total_ventas, @moneda_ventas = moneda_ventas from @ventas
if (@moneda_ventas = 'ARS')
begin
select top 1 @cotizacion = rate_eur
from cotizaciones
where currency_code = 'ARS' and convert(DATE,fecha_cotizacion) <= @fecha_balance
order by fecha_cotizacion desc
set @ventas_contraparte = @ventas_contraparte / isnull(@cotizacion,1)
end
if (@ventas_contraparte is not null)
begin
if (@umbral_limite is not null and @ventas_contraparte is not null
and @ventas_contraparte > @umbral_limite)
begin
set @RCP = 10
set @valor_texto = 'A'
end
if (@RCP is null and @umbral_alerta is not null and @ventas_contraparte is not null
and @ventas_contraparte > @umbral_alerta)
begin
set @RCP = 50
set @valor_texto = 'M'
end
if (@RCP is null)
begin
set @RCP = 100
set @valor_texto = 'B'
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RCP, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RCP,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RCP*10 score, @valor_texto valor, @valor_memo memo
END
/*
Riesgo Concentración Inversa, (modalidad full)
Alto :facturación del proveedor con BBVA igual o mayor a 50% y Materialidad >= 1.000.000€;
Medio: facturación del proveedor con BBVA mayor a 30% e inferior a 50% y Materialidad >= 1.000.000€;
Bajo: menor o igual al 30% o cuando los niveles de actividad (materialidad) es inferior a 1.000.000€
*/
declare @dependencia decimal(20,2)
IF (@accion = 'CRP_Riesgo_Concentracion_Inversa' and
@familia in ( 542, /* Paises Modalidad Full*/
367,
536,
368,
369,
515,
528,
543))
BEGIN
declare @RCI int = null
set @valor_texto = null
set @valor_memo = null
/*
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'RA_Materialidad_proveedor'
*/
insert into @ventas exec LN_dependencia_economica_balance @contraparte
select top 1 @dependencia = dependencia_economica, @ventas_contraparte = total_ventas, @moneda_ventas = moneda_ventas from @ventas
if (@moneda_ventas = 'ARS')
begin
select top 1 @cotizacion = rate_eur
from cotizaciones
where currency_code = 'ARS' and convert(DATE,fecha_cotizacion) <= @fecha_balance
order by fecha_cotizacion desc
set @ventas_contraparte = @ventas_contraparte / isnull(@cotizacion,1)
end
select @dependencia dependencia, @ventas_contraparte materialidad
if (@dependencia is not null and @ventas_contraparte is not null)
begin
if (@dependencia >= 0.50 and @ventas_contraparte >= 1000000)
begin
set @RCI = 10
set @valor_texto = 'A'
end
if (@dependencia >= 0.30 and @dependencia < 0.50 and @ventas_contraparte >= 1000000)
begin
set @RCI = 50
set @valor_texto = 'M'
end
if (@dependencia < 0.30 or @ventas_contraparte < 1000000)
begin
set @RCI = 100
set @valor_texto = 'B'
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RCI, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RCI,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RCI as score, @valor_texto as valor, @valor_memo as memo
END
/*
Riesgo Step In (modalidad full)
Cálculo a partir de la combinación de los indicadores de “Riesgo Financiero” y de “Concentración Inversa”.
*/
IF (@accion = 'CRP_Riesgo_Step_In' and
@familia in ( 542, /* Paises Modalidad Full*/
367,
536,
368,
369,
515,
528,
543))
BEGIN
declare @valor_texto_2 varchar(10) = null
declare @RSI int = null
set @valor_texto = null
set @valor_texto_2 = null
set @valor_memo = null
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'CRP_Riesgo_Concentracion_Inversa'
select @valor_texto_2 = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'VRM_Score_Financiero'
if (@valor_texto = 'A' and @valor_texto_2 = 'A')
begin
set @RSI = 10
set @valor_texto = 'A'
end
if (@valor_texto = 'M' and @valor_texto_2 = 'A')
begin
set @RSI = 50
set @valor_texto = 'M'
end
if (@valor_texto = 'B' and @valor_texto_2 = 'A')
begin
set @RSI = 100
set @valor_texto = 'B'
end
if (@valor_texto_2 = 'B')
begin
set @RSI = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RSI, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RSI,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RSI score, @valor_texto valor, @valor_memo memo
END
/*
Para determinar la evaluación final del Módulo de Concentración y Riesgo País,
prevalecerá el mayor riesgo obtenido de los cuatro controles que componen el módulo
*/
IF (@accion = 'VRM_SCORE_CONCENTRACION')
BEGIN
set @valor_numerico = null
set @valor_texto = null
set @valor_memo = null
select @valor_numerico = min(convert(int,valor_numerico))
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and ln_indicadores.producto = 2091 -- Producto Concentración y Riesgo País
and valor_numerico is not null
set @valor_texto = case @valor_numerico
when 100 then 'B'
when 50 then 'M'
when 10 then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico score, @valor_texto valor, @valor_memo memo
END
IF (@accion = 'VRM_Financiero_bcra')
BEGIN
set @valor_numerico = null
set @valor_texto = null
declare @nombre1 varchar(max), @nombre2 varchar(100)
declare @bancos table (fec_inf varchar(6), banco varchar(100), situacion int, deuda numeric(12,2))
-- BBVA: Cod de entidad = 17
select @nombre1 = nombre, @nombre2 = nombre_corto from EntidadesBancarias where id_banco = 17
delete from @bancos
insert into @bancos
exec obtener_bancos_test @cuit
-- Alto: si muestra situacion distinta de 1 (normal) con BBVA.
-- Medio: si muestra situacion 3 o peor en sistema financiero general;
-- Bajo: situacion 1 con bbva y/o en sistema financiero en general
if (select max(situacion) from @bancos where banco in (@nombre1,@nombre2)) > 1
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@valor_numerico is null)
begin
if (select max(situacion) from @bancos) >= 3
begin
set @valor_numerico = 50
set @valor_texto = 'M'
end
end
if (@valor_numerico is null)
begin
if (select max(situacion) from @bancos) >= 3
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Financiero_bcra'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_Fnanciero_ratio1' or @accion = 'VRM_Fnanciero_ratio2' or @accion = 'VRM_Fnanciero_ratio3')
BEGIN
-- Balance
declare @patrimonio decimal(20,2) = null
declare @ebitda decimal(20,2) = null
declare @res_gasfin decimal(20,2) = null
select top 1 @patrimonio = patrimonio, @ebitda = ebitda, @res_gasfin = res_gasfin
from balances_contables
where cuit = @cuit
and visible = 1
and estado = 'PUBLICADO'
and (datepart(yy,getdate()) - datepart(yy,fecha_balance)) <= 6
order by fecha_balance desc
-- Deuda Bancaria
declare @deuda table (cant int, periodo varchar(10), deuda_total numeric(20,2))
declare @DFB numeric(20,2) = null
insert into @deuda
exec obtener_card_bancos @cuit
select top 1 @DFB = deuda_total from @deuda
END
IF (@accion = 'VRM_Fnanciero_ratio1')
BEGIN
-- Si no tiene el documento de acreditacion de ingresos es porque debe tener balance
if not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
-- Ratios Balance
-- ratio 1
set @valor_numerico = null
set @valor_texto = null
if (@patrimonio < 0)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@patrimonio >= 0)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Fnanciero_ratio1'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
end
END
IF (@accion = 'VRM_Fnanciero_ratio2')
BEGIN
-- ratio 2
-- Si no tiene el documento de acreditacion de ingresos es porque debe tener balance
if not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
declare @ratio2 numeric(20,2) = null
set @valor_numerico = null
set @valor_texto = null
if (@ebitda != 0)
set @ratio2 = @DFB / @ebitda
if (@ebitda <= 0 or @ratio2 > 6.00)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@ebitda > 0 and @ratio2 <= 6.00)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Fnanciero_ratio2'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
end
END
IF (@accion = 'VRM_Fnanciero_ratio3')
BEGIN
-- Ratio 3
-- Si no tiene el documento de acreditacion de ingresos es porque debe tener balance
if not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
set @valor_numerico = null
set @valor_texto = null
-- Deuda Bancaria
declare @ratio3 numeric(20,2) = null
if (@ebitda != 0)
set @ratio3 = @res_gasfin / @ebitda
if (@ratio3 < 1)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@ratio3 >= 1)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Fnanciero_ratio3'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
end
END
IF (@accion = 'VRM_Financiero_Doc')
BEGIN
set @valor_numerico = null
set @valor_texto = null
-- Documento 1213 MODULO FINANCIERO (AUTONOMOS)
if exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
if (not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')) or
(select max(situacion) from @bancos) >= 3
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (exists(select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')) and
((select max(situacion) from @bancos) < 3 or (select max(situacion) from @bancos) is null)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Financiero_Doc'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_Score_Financiero')
BEGIN
SELECT @valor_numerico = min(valor_numerico)
FROM LN_contraparte_indicadores a
where a.contraparte = @contraparte
and a.gestion = @gestion
and valor_numerico is not null
and indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != 'VRM_Score_Financiero')
set @valor_texto = case
when (@valor_numerico is null) then null
when (@valor_numerico = 100) then 'B'
when (@valor_numerico < 100) then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
-- Laboral, Legal, Fical
declare @valores_llf table (contraparte int, gestion int, doc_id int, seccion int, campo int, tipo_campo varchar(1), nombre_campo varchar(200), etiqueta varchar(max),fila int, col int, valor_numerico int, valor_texto varchar(max), valor_fecha smalldatetime, valor_fecha_srt varchar(200))
IF (@accion = 'VRM_legal')
BEGIN
set @valor_numerico = null
set @valor_texto = null
if exists (select * from ln_docs where tipo_doc in (1190,1209)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_llf exec ln_docs_valores @contraparte, 'BBVALEGAL'
select @valor_texto = case valor_numerico
when 1 then 'B'
when 0 then 'A'
else null
end
from @valores_llf
select @valor_numerico = case valor_numerico
when 1 then 100
when 0 then 10
else null
end
from @valores_llf
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'VRM_laboral')
BEGIN
set @valor_numerico = null
set @valor_texto = null
if exists (select * from ln_docs
where tipo_doc in (1192)
and contraparte = @contraparte and gestion = @gestion and vencimiento_carga <= getdate())
begin
if exists (select * from ln_docs
where tipo_doc in (1192)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
else
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'VRM_fiscal')
BEGIN
set @valor_numerico = null
set @valor_texto = null
if exists (select * from ln_docs where tipo_doc in (1190,1209)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-11'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-12'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-21'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-22'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-23'
if ((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-11') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-12') = 1)
and
((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-21') = 0 and
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-22') = 0 and
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-23') = 0)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if ((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-11') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-12') = 1)
and
((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-21') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-22') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-23') = 1)
begin
set @valor_numerico = 50
set @valor_texto = 'M'
end
if (@valor_numerico is null)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'VRM_SCORE_LLF')
BEGIN
SELECT @valor_numerico = min(valor_numerico)
FROM LN_contraparte_indicadores a
where a.contraparte = @contraparte
and a.gestion = @gestion
and valor_numerico is not null
and indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != 'VRM_SCORE_LLF')
set @valor_texto = case
when (@valor_numerico is null) then null
when (@valor_numerico = 100) then 'B'
when (@valor_numerico = 50) then 'M'
when (@valor_numerico = 10) then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_SCORE_FIDELITAS')
BEGIN
set @valor_numerico = null
set @valor_texto = null
set @valor_memo = null
select @valor_numerico = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and ln_contraparte_indicadores.indicador = 4
if (@valor_numerico < 0)
begin
set @valor_numerico = 0
set @valor_memo = 'N/A'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico score, @valor_texto valor, @valor_memo memo
END
/* Después de tocar un indicador, veo si tiene que calcular un indicador dependiente */
declare @clave_indicador varchar(100)
declare @indicador_dependiente int
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (select count(*)
from ln_indicadores_dependientes
where ln_indicadores_dependientes.indicador = @indic_accion) > 0
begin
DECLARE C_indi CURSOR LOCAL FOR
select ln_indicadores_dependientes.indicador_dependiente, LN_indicadores.clave_indicador
from ln_indicadores_dependientes
inner join LN_indicadores on LN_indicadores.indicador = ln_indicadores_dependientes.indicador_dependiente
where ln_indicadores_dependientes.indicador = @indic_accion
OPEN C_indi
FETCH NEXT FROM C_indi INTO @indicador_dependiente, @clave_indicador
WHILE @@fetch_status = 0
BEGIN
select 'VA A CALCULAR DEPENDIENTE (2): ' as accion,
@indic_accion as indicador,
@indicador_dependiente as indicador_dependiente,
@clave_indicador as indicador_dependiente
exec [LN_scores_VRM] @clave_indicador,
@contraparte,
@p_user_id
FETCH NEXT FROM C_indi INTO @indicador_dependiente, @clave_indicador
END
CLOSE C_indi
DEALLOCATE C_indi
end
/* Después de tocar un indicador manual, lo manda al queue para calcular los automáticos en los que puede influir */
/* declare @valoracion char(1) = null
select @valoracion = valoracion from ln_indicadores
where clave_indicador = @accion
if @valoracion != 'A'
exec LN_contrapartes_queue_ 'insert',null,@contraparte,null
*/
END
/*
select * from ln_indicadores where clave_indicador in ( 'RA_SCORE_RA', 'MA_Risk_Assessment')
'RA_Industria')
insert into ln_indicadores_dependientes values (383,423)
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador in (414, 419)
(indicador in (select indicador from ln_indicadores_dependientes) or
indicador in (select indicador_dependiente from ln_indicadores_dependientes) )
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador = 396
select d.indicador, i.clave_indicador, d.indicador_dependiente, id.clave_indicador
from ln_indicadores_dependientes d
inner join ln_indicadores i on i.indicador = d.indicador
inner join ln_indicadores id on id.indicador = d.indicador_dependiente
order by indicador_dependiente
update ln_indicadores set valoracion = 'D' where indicador in (413,414,419,420)
select valor_numerico, valor_texto
from ln_contraparte_indicadores
where contraparte = 162668
and indicador = 419
select * from ln_indicadores where indicador = 396
select * from ln_productos where producto = 2082
*/
GO
GO
/*
-- =============================================
-- Author: <María Inés Soria>
-- Create date: <06/04/2022>
-- Description: Cálculo de Scores de VRM BBVA
-- =============================================
EXEC [LN_scores_VRM] 'RA_SCORE_RA', 162668
EXEC [LN_scores_VRM] 'MA_conflictos_interes', 162668
EXEC [LN_scores_VRM] 'MA_Materialidad', 162668
EXEC [LN_scores_VRM] 'MA_Risk_Assessment', 162668
EXEC [LN_scores_VRM] 'VRM_SCORE_AML', 162668
EXEC [LN_scores_VRM] 'MA_SCORE_MA', 169241
EXEC [LN_scores_VRM] 'VRM_Score_RR' , 162668
EXEC [LN_scores_VRM] 'SOLICITAR_DDR_PENDIENTE' , 162668
EXEC [LN_scores_VRM] 'VRM_SCORE_IT_RISK',144822
EXEC [LN_scores_VRM] 'VRM_SCORE_PROT_CLIENTELA',168613
EXEC [LN_scores_VRM] 'CRP_Riesgo_Concentracion_Pais',169241
select * from ln_gestiones where contraparte = 169241
LN_indicadores_producto 169241,2095,181993
select * from ln_contraparte_datos_configuracion order by producto, indicador
update ln_contraparte_datos_configuracion set peso_indicador = null where producto = 2079
select * from ln_indicadores where clave_indicador = 'VRM_SCORE_AML'
select * from ln_productos where producto = 2079
select * from LN_check
select * from ln_indicadores where clave_indicador = 'VRM_SCORE_AML'
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador = 423
where contraparte in (select contraparte from ln_contrapartes where cliente = 1226057645 and activo = 1 and servicio_contratado = 47)
and lncheck != 'V'
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador >= 415
select * from ln_indicadores where indicador in ( 421,422,423)
exec LN_contrapartes_queue_ 'indicadores_vrm_score',NULL,162668
exec LN_dashboard_cliente 'indicadores_contraparte_gestion_vrm', null, null,
null, 162668,
NULL,
NULL,
null,
null,
null,
null,
1,
null,
0,
'2021-12-06'
*/
/*
declare @valores varchar(max) = (select item from dbo.DelimitedSplit8K((select opciones from ln_indicadores where indicador = 417), '^') where ItemNumber = 1)
declare @opciones varchar(max) = (select item from dbo.DelimitedSplit8K((select opciones from ln_indicadores where indicador = 417), '^') where ItemNumber = 2)
select * from dbo.DelimitedSplit8K( @valores,'|')
select * from dbo.DelimitedSplit8K( @opciones,'|')
*/
CREATE OR ALTER PROCEDURE dbo.LN_scores_VRM_05062022
@accion varchar(100),
@contraparte int,
@p_user_id int = 94437923
AS
BEGIN
SET NOCOUNT ON;
declare @score_datos decimal(10,2) = null
declare @score_memo varchar(100) = null
declare @cliente int = null
declare @gestion int = null
declare @familia int = null
declare @pais_contraparte varchar(10) = null
declare @indic_accion int = null
declare @total decimal(12,2) = 0
declare @puntos decimal(12,2)
declare @puntos_producto decimal(12,2)
declare @peso_indicador decimal(12,2)
declare @maximo decimal(12,2)
declare @cant int = 0
declare @valor_memo varchar(100) = null
declare @cuit varchar(20)
--select @accion
select @cliente = ln_contrapartes.cliente,
@gestion = LN_gestiones.gestion,
@familia = ln_contraparte_familias.familia,
@pais_contraparte = ln_contrapartes.country_code,
@cuit = identificacion
from ln_contrapartes
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
inner join LN_gestiones on LN_gestiones.contraparte = LN_contrapartes.contraparte
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = LN_contrapartes.contraparte
where ln_contrapartes.contraparte = @contraparte
AND LN_gestiones.desde <= GETDATE()
AND LN_gestiones.hasta >= GETDATE()
AND LN_gestiones.vigente = 1
if (@gestion is null or @cliente is null) return
declare @producto int = null
declare @indicador int = null
declare @valor varchar(100) = null
IF (@accion = 'RA_SCORE_RA' or @accion = 'MA_SCORE_MA' or @accion = 'DDR_SCORE_DDR')
BEGIN
select @producto = LN_productos.producto
from LN_productos
inner join ln_indicadores on LN_indicadores.producto = LN_productos.producto
where ln_indicadores.clave_indicador = @accion
if (@producto is null) return
-- select producto from ln_indicadores where clave_indicador ='RA_SCORE_RA'
-- select * from LN_contraparte_datos_configuracion where producto = 2085
-- select * from LN_indicadores where producto = 2085
-- RA_SCORE_RA: Tiene que tener todos los otros indicadores del producto cargados para poder calcularse
-- MA_SCORE_MA y DDR_SCORE_DDR: Si alguno de los otros indicadores del mismo producto es 1, ya el resultado es 1
set @cant =
(select COUNT(*) from ln_indicadores
where indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != @accion)
and not exists (select * from LN_contraparte_indicadores where LN_contraparte_indicadores.contraparte = @contraparte
and LN_contraparte_indicadores.gestion = @gestion
and LN_contraparte_indicadores.indicador = LN_indicadores.indicador
and (valor_numerico is not null or valor_texto is not null or valor_fecha is not null or valor_memo is not null)))
select @cant cantidad_sin_calcular
select indicador, nombre_indicador, clave_indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != @accion
if ((@cant = 0 and @accion = 'RA_SCORE_RA') or (@accion = 'DDR_SCORE_DDR' or @accion = 'MA_SCORE_MA'))
begin
DECLARE C_datos CURSOR FOR
SELECT indicador, valor_texto
FROM LN_contraparte_indicadores a
where a.contraparte = @contraparte
and a.gestion = @gestion
and indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != @accion)
-- select * from LN_contraparte_datos_configuracion
OPEN C_datos
FETCH NEXT FROM C_datos INTO @indicador, @valor
WHILE @@fetch_status = 0
BEGIN
select @puntos_producto = isnull(puntos_producto ,0), @peso_indicador = isnull(peso_indicador,0),
@puntos = isnull(puntos ,0), @maximo = isnull(maximo ,0)
from LN_contraparte_datos_configuracion
where cliente = @cliente
and producto = @producto
and indicador = @indicador
and valor_cargado = @valor
select @indicador as indicador, @puntos_producto as peso_producto, @peso_indicador as peso_indicador,
@puntos as puntos, @maximo as maximo, (@puntos / @maximo) * @peso_indicador as puntos_indicador
if (@accion = 'MA_SCORE_MA' and @score_datos is null) set @score_datos = 10 /* MA_SCORE_MA vale 1 o 10, con que uno de sus componentes sea 1, da 1 */
if ((@accion = 'MA_SCORE_MA' or @accion = 'DDR_SCORE_DDR') and @puntos = 1) set @score_datos = 1
IF (@accion = 'RA_SCORE_RA')
set @total = @total + ((@puntos / @maximo) * @peso_indicador)
FETCH NEXT FROM C_datos INTO @indicador, @valor
END
CLOSE C_datos
DEALLOCATE C_datos
IF (@accion = 'RA_SCORE_RA')
set @score_datos = @puntos_producto * (@total / 100)
-- Si es Score Modulo anticorrupción o Score DDR y por algo da 1, lo deja en 1
/* lo de abajo, lo sacamos */
-- Sino, si aun tiene indicadores de su producto sin calcular, sigue quedando sin calcular
--if ((@accion = 'MA_SCORE_MA' or @accion = 'DDR_SCORE_DDR') and @score_datos != 1 and @cant != 0) set @score_datos = null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @score_datos*10, format(@score_datos,'###.##'), GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @score_datos*10,
valor_texto = format(@score_datos,'###.##'),
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @score_datos as score
END
declare @valor_texto varchar(100) = null
declare @valor_numerico decimal(12,2) = null
--IF (@accion = 'MA_Worldcheck')
IF (@accion = 'AML_SCORE_Worldcheck') -- Es auntomatico, para que nazca como Verde.
-- y luego es dependiente del indicador de Worldcheck
BEGIN
declare @world varchar(100) = null
set @score_datos = null
set @valor_texto = null
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join LN_indicadores on LN_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'WORDCHK'
/* Se fijaba si alguno era distinto de V, 18/04/2022: Se fija lo que tiene el indicador Worldchek general */
/*if (select COUNT(*) from LN_check where contraparte = @contraparte and visible = 1 and ISNULL(lncheck,'V') != 'V') > 0*/
if (ISNULL(@valor_texto,'V') != 'V')
begin
set @valor_texto = 'A'
set @valor_numerico = 10
end
if (isnull(@valor_texto,'V') = 'V')
begin
set @valor_texto = 'B'
set @valor_numerico = 100
end
set @score_datos = @valor_numerico
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico as score, @valor_texto as valor, @valor_memo as memo
END
declare @solicitar_ddr varchar(20) = NULL
if ((@accion = 'MA_SCORE_MA' or @accion = 'AML_SCORE_Worldcheck' ) and @score_datos = 10)
begin
select @solicitar_ddr = valor_texto
from ln_contraparte_indicadores
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = 396
and visible = 1
if (isnull(@solicitar_ddr,'NO') = 'NO')
begin
SELECT 'DISPARAR AUTOMATICAMENTE DDR' as accion
EXEC LN_indicadores_manual_cliente @contraparte,'UPDATE', 396, 'PENDIENTE',null,'DISPARAR AUTOMATICAMENTE DDR',@p_user_id
end
end
/* -- Disparar DDR automaticamente
if ((@accion = 'MA_SCORE_MA' or @accion = 'VRM_SCORE_AML') and @score_datos = 1)
begin
EXEC LN_contraparte_sub_docs 'ALTA', @contraparte, @p_user_id, 1
EXEC LN_indicadores_manual_cliente @contraparte,'UPDATE', 396, 'SI',null,null,@p_user_id
EXEC LN_contrapartes_queue_ 'insert',null,@contraparte,null
end
*/
IF (@accion = 'SOLICITAR_DDR_PENDIENTE')
begin
declare @score_ma int = null
declare @score_aml int = null
select @solicitar_ddr = valor_texto
from ln_contraparte_indicadores
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = 396
and visible = 1
if (isnull(@solicitar_ddr,'')='PENDIENTE')
begin
select @score_ma = valor_numerico/10
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'MA_SCORE_MA'
select @score_aml = valor_numerico/10
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'AML_SCORE_Worldcheck'
if (isnull(@score_ma,0) != 1 and isnull(@score_aml,0) != 1)
begin
EXEC LN_indicadores_manual_cliente @contraparte,'UPDATE', 396, null,null,'NO DISPARAR AUTOMATICAMENTE DDR',@p_user_id
select 'NO' as solicitar_ddr_pendiente
end
else
begin
select 'PENDIENTE' as solicitar_ddr_pendiente
end
end
else
begin
select 'NO' as solicitar_ddr_pendiente
end
end
IF (@accion = 'MA_conflictos_interes' or @accion = 'DDR_PRP')
BEGIN
declare @prp char(1) = null
declare @prp_memo varchar(100) = null
set @valor_numerico = null
set @valor_texto = null
declare @valores_prp table (contraparte int, gestion int, doc_id int, seccion int, campo int, tipo_campo varchar(1), nombre_campo varchar(200), etiqueta varchar(max),fila int, col int, valor_numerico int, valor_texto varchar(max), valor_fecha smalldatetime, valor_fecha_srt varchar(200))
if exists (select * from ln_docs where tipo_doc in (1189,1208)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_prp exec ln_docs_valores @contraparte, 'CONDICION_PRP'
select @valor_texto = case valor_numerico
when 1 then 'A'
when 0 then 'B'
else null
end
from @valores_prp
select @valor_numerico = case valor_numerico
when 1 then 10
when 0 then 100
else null
end
from @valores_prp
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'MA_Materialidad')
BEGIN
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'RA_Materialidad_proveedor'
if (@valor_texto = 'M') set @valor_texto = 'B'
set @valor_numerico = case @valor_texto
when 'A' then 10
when 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'MA_Materialidad'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by, familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'MA_Risk_Assessment')
BEGIN
select @valor_numerico = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'RA_SCORE_RA'
set @valor_texto = null
select @valor_texto = case
when @valor_numerico > 0 and @valor_numerico < 45 then 'A'
when @valor_numerico >= 45 and @valor_numerico <= 100 then 'B'
else null
end
set @valor_numerico = null
select @valor_numerico = case
when @valor_texto = 'A' then 10
when @valor_texto = 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'MA_Risk_Assessment'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
declare @valor_numerico1 int
declare @valor_numerico2 int
IF (@accion = 'VRM_Score_RR')
BEGIN
set @valor_numerico1 = null
set @valor_numerico2 = null
select @valor_numerico = case
when convert(int,valor_texto) >= 50 and convert(int,valor_texto) <= 100 then 10
when convert(int,valor_texto) >= 25 and convert(int,valor_texto) < 50 then 50
when convert(int,valor_texto) >= 0 and convert(int,valor_texto) <= 50 then 100
else null
end
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'SCORE_RR'
set @valor_texto = case
when @valor_numerico = 10 then 'A'
when @valor_numerico = 50 then 'M'
when @valor_numerico = 100 then 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by, familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'DOC_ID_PROT_CLIENTELA')
BEGIN
select top 1 doc_id from ln_docs where tipo_doc in (1211)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V' order by doc_id desc
END
IF (@accion = 'VRM_SCORE_PROT_CLIENTELA')
BEGIN
set @valor_numerico = null
declare @valores_pc table (contraparte int, gestion int, doc_id int, seccion int, campo int, tipo_campo varchar(1), nombre_campo varchar(200), etiqueta varchar(max),fila int, col int, valor_numerico int, valor_texto varchar(max), valor_fecha smalldatetime, valor_fecha_srt varchar(200))
declare @pregunta1 int = null
declare @pregunta2 int = null
declare @pregunta3 int = null
declare @pregunta4 char(1) = null
declare @pregunta5 char(1) = null
declare @pregunta6 int = null
declare @pregunta7 int = null
declare @pregunta8 int = null
declare @pregunta9 int = null
declare @pregunta10 int = null
declare @pregunta11 int = null
if exists (select * from ln_docs where tipo_doc in (1211)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC1AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC3AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC7AUTO'
select @pregunta1 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC1AUTO'
select @pregunta2 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC3AUTO'
select @pregunta3 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC7AUTO'
if (@pregunta1 is not null and @pregunta2 is not null and @pregunta3 is not null)
begin
if (@pregunta1 = 0 and @pregunta2 = 0 and @pregunta3 = 0)
begin
set @valor_numerico = 100
end
if (@pregunta3 = 1)
begin
set @valor_numerico = 10
end
if (@pregunta1 = 1 or @pregunta2 = 1)
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC21AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC25AUTO'
select @pregunta4 = valor_texto from @valores_pc where nombre_campo = 'BBVAC21AUTO'
select @pregunta5 = valor_texto from @valores_pc where nombre_campo = 'BBVAC25AUTO'
if (@pregunta4 = 'A' or @pregunta5 = 'A')
begin
set @valor_numerico = 10
end
else
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC28AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC30AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC34AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC38AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC40AUTO'
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVAC42AUTO'
select @pregunta6 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC28AUTO'
select @pregunta7 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC30AUTO'
select @pregunta8 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC34AUTO'
select @pregunta9 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC38AUTO'
select @pregunta10 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC40AUTO'
select @pregunta11 = valor_numerico from @valores_pc where nombre_campo = 'BBVAC42AUTO'
declare @cant_si int = 0
declare @cant_no int = 0
if (isnull(@pregunta6,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta7,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta8,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta9,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta10,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (isnull(@pregunta11,0) = 1) set @cant_si = @cant_si + 1 else set @cant_no = @cant_no + 1
if (@pregunta4 = 'M' or @pregunta5 = 'M')
begin
if (@cant_no <= 2) set @valor_numerico = 50
else set @valor_numerico = 10
end
else
begin
if (@cant_si = 6) set @valor_numerico = 100
if (@cant_no <= 2) set @valor_numerico = 50
if (@cant_no > 2) set @valor_numerico = 10
end
end
end
end
set @valor_texto = case @valor_numerico
when 10 then 'A'
when 50 then 'M'
when 100 then 'B'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_SCORE_PROT_CLIENTELA'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_SCORE_IT_RISK')
BEGIN
declare @puntos_itrisk int = null
declare @total_itrisk int = null
declare @itriskn char(1) = null
declare @itrisks char(1) = null
declare @score_it int = null
set @total_itrisk = 0
/* Organigrama organizativo (CISO/CIO, Responsable Tecnología y Seguridad...) (se mide en términos de capacidad de decisión del responsable de Riesgos y Seguridad Tecnológica Niveles hasta CEO)*/
/* (1 = 0,50; 2 = 0,40; 3 = 0,30; 4 ó más = 0,20) */
if exists (select * from ln_docs where tipo_doc in (1210)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK12'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK12'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
when '2' then 0.40
when '3' then 0.30
when '4' then 0.20
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Partnerships y Alianzas con otros proveedores estratégicos (en función del grado de alineamiento con la estrategia de BBVA) */
/* (1 = 0,20; 2 = 0,30; 3 = 0,40; 4 ó más = 0,50) */
declare @cant_alianzas int = 0
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK22'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK22'
set @cant_alianzas = (select count(*) from dbo.DelimitedSplit8K(@itrisks, ','))
set @puntos_itrisk = case
when (@cant_alianzas = 1) then 0.20
when (@cant_alianzas = 2) then 0.30
when (@cant_alianzas = 3) then 0.40
when (@cant_alianzas >= 4) then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Órganos de Gobierno en los que participa (dependiendo de la participación de IT en los órganos de decisión y gobierno) */
/* (Comité 1º nivel = 0,50; 2º = 0,40; 3º = 0,30; 4º ó más = 0,20) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK24'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK24'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
when '2' then 0.40
when '3' then 0.30
when '4' then 0.20
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/*---------------------------------------------*/
/* ISAE 3402 */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK32'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK32'
set @puntos_itrisk = case @itrisks
when '1' then 0.80
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Manuales Operativos */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK46'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK46'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Incidentes de Servicio - # Histórico de Incidentes */
/* (1,00 = 0 incidentes; 0,50 = 1 incidente; 0 = 2 ó más incidentes) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK54'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK54'
set @puntos_itrisk = case @itrisks
when '1' then 0.5
when '2' then 0
else 1
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/*---------------------------------------------*/
/* ISO 27001/27002 Seguridad de la Información */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK33'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK33'
set @puntos_itrisk = case @itrisks
when '1' then 0.70
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO/IEC 33000 Marco de integración de procesos de mejora (Determinar nivel 1-5) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK28'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK28'
set @puntos_itrisk = case @itrisks
when '1' then 0.2
when '2' then 0.4
when '3' then 0.5
when '4' then 0.6
when '5' then 0.7
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO 9001 Sistemas de Gestión de la Calidad */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK31'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK31'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* NIST 800-53 */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK35'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK35'
set @puntos_itrisk = case @itrisks
when '1' then 0.70
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO/IEC 27017 - Controles de Seguridad para Servicios Cloud */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK34'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK34'
set @puntos_itrisk = case @itrisks
when '1' then 0.60
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* CSA */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK36'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK36'
set @puntos_itrisk = case @itrisks
when '1' then 0.60
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* ISO/IEC 27018 Protección de Información Personal en la Nube */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK37'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK37'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* SOC1, SOC2, SOC3 */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK38'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK38'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* GDPR Compliant */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK39'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK39'
set @puntos_itrisk = case @itrisks
when '1' then 0.50
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Privacy Shield (USA) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK40'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK40'
set @puntos_itrisk = case @itrisks
when '1' then 0.40
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Proceso Hacking Éticos periódicos */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK45'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK45'
set @puntos_itrisk = case @itrisks
when '1' then 0.70
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Política de Seguridad de la Información y Protección de Datos */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK47'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK47'
set @puntos_itrisk = case @itrisks
when '1' then 0.30
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Sistema de Gestión de la Seguridad de la Información */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK62'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK62'
set @puntos_itrisk = case @itrisks
when '1' then 0.30
else 0
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/* Incidentes de Seguridad Tecnológica - # Histórico de Incidentes */
/* (1,00 = 0 incidentes; 0,50 = 1 incidente; 0 = 2 ó más incidentes) */
insert into @valores_pc exec ln_docs_valores @contraparte, 'BBVANRISK33'
select @itrisks = valor_texto from @valores_pc where nombre_campo = 'BBVANRISK33'
set @puntos_itrisk = case @itrisks
when '1' then 0.5
when '2' then 0
else 1
end
set @total_itrisk = @total_itrisk + @puntos_itrisk
select @puntos_itrisk
/*---------------------------------------------*/
if (@total_itrisk > 11.69) set @score_it = 100
if (@total_itrisk > 8.35 and @total_itrisk <= 11.69) set @score_it = 50
if (@total_itrisk <= 8.35) set @score_it = 10
set @valor_texto = case @score_it
when 100 then 'B'
when 50 then 'M'
when 10 then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_SCORE_IT_RISK'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @score_it, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @score_it,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @score_it, @valor_texto, @valor_memo
END
IF (@accion = 'DDR_Empleados_BBVA')
BEGIN
declare @empleados char(1) = null
declare @empleados_memo varchar(100) = null
if exists (select * from ln_docs where tipo_doc in (1186,1207)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_prp exec ln_docs_valores @contraparte, 'RELACION_EMPLEADO_BBVA'
select @valor_texto = case valor_numerico
when 1 then 'A'
when 0 then 'B'
else null
end
from @valores_prp
select @valor_numerico = case @prp
when 'A' then 10
when 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'DDR_Anticorrupcion')
BEGIN
declare @anticorrupcion char(1) = null
declare @anticorrupcion_memo varchar(100) = null
if exists (select * from ln_docs where tipo_doc in (1188)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_1'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_2'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_3'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_4'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_5'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_6'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_7'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_8'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_9'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_10'
insert into @valores_pc exec ln_docs_valores @contraparte, 'ANTICORRUPCION_11'
declare @negativas_1_7 int = 0, @positivas_1_7 int = 0, @negativas_8_11 int = 0, @positivas_8_11 int = 0
select @negativas_1_7 = count(*)
from @valores_pc
where valor_numerico = 0
and nombre_campo in ('ANTICORRUPCION_1','ANTICORRUPCION_2','ANTICORRUPCION_3','ANTICORRUPCION_4','ANTICORRUPCION_5','ANTICORRUPCION_6','ANTICORRUPCION_7') group by valor_numerico
select @positivas_1_7 = count(*)
from @valores_pc
where valor_numerico = 1
and nombre_campo in ('ANTICORRUPCION_1','ANTICORRUPCION_2','ANTICORRUPCION_3','ANTICORRUPCION_4','ANTICORRUPCION_5','ANTICORRUPCION_6','ANTICORRUPCION_7') group by valor_numerico
select @negativas_8_11 = count(*)
from @valores_pc
where valor_numerico = 0
and nombre_campo in ('ANTICORRUPCION_8','ANTICORRUPCION_9','ANTICORRUPCION_10','ANTICORRUPCION_11')
select @positivas_8_11 = count(*)
from @valores_pc
where valor_numerico = 1
and nombre_campo in ('ANTICORRUPCION_8','ANTICORRUPCION_9','ANTICORRUPCION_10','ANTICORRUPCION_11')
-- Cuando las respuestas a las preguntas 1 a 7 sean en su mayoría negativas Y todas las respuestas a las preguntas 8 a 11 son negativas
-- o Cuando alguna de las respuestas a las preguntas 8 a 11 es positiva, con independencia de las respuestas a las preguntas 1 a 7
if (@anticorrupcion is null and @positivas_8_11 > 0)
begin
set @anticorrupcion = 'A'
end
if (@anticorrupcion is null and @negativas_1_7 > 3 and @negativas_8_11 = 4)
begin
set @anticorrupcion = 'A'
end
-- Cuando las respuestas a las preguntas 1 a 7 son en su mayoría positivas y
-- Todas las respuestas a las preguntas 8 a 11 son negativas.
if (@anticorrupcion is null and @positivas_1_7 > 3 and @positivas_1_7 < 7 and @negativas_8_11 = 4)
begin
set @anticorrupcion = 'M'
end
-- Todas las respuestas a las preguntas 1 a 7 son positivas y Todas las respuestas a las preguntas 8 a 11 son negativas.
if (@anticorrupcion is null and @positivas_1_7 = 7 and @negativas_8_11 = 4)
begin
set @anticorrupcion = 'B'
end
select @valor_numerico = case @anticorrupcion
when 'A' then 10
when 'M' then 50
when 'B' then 100
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'DDR_Anticorrupcion'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @anticorrupcion, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_memo, valor_texto, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_memo, @anticorrupcion, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_memo = @valor_memo,
valor_texto = @anticorrupcion,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @anticorrupcion, @anticorrupcion_memo
END
/*
IF (@accion = 'MA_Score_DDR')
BEGIN
declare @ddr int = 10
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @ddr, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @ddr,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @ddr as MA_Score_DDR
END
*/
--IF (@accion = 'MA_Worldcheck')
IF (@accion = 'VRM_SCORE_AML')
BEGIN
set @score_datos = null
set @score_memo = null
select @valor_numerico1 = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'MA_SCORE_MA'
select @valor_numerico2 = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'AML_SCORE_Worldcheck'
if (@valor_numerico1 = 100 and @valor_numerico2 = 100)
begin
set @score_datos = 100
end
if (@valor_numerico1 = 10 or @valor_numerico2 = 10) -- Si alguno dio 1, disparo DDR
-- entonces, buscamos el indicador de DDR
begin
select @valor_numerico = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = LN_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'DDR_SCORE_DDR'
set @score_datos = case
when (@valor_numerico >= 0 and @valor_numerico <= 25) then 10
when (@valor_numerico > 25) then 50
else null
end
end
set @valor_texto = case @score_datos
when 10 then 'A'
when 50 then 'M'
when 100 then 'B'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @score_datos, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @score_datos,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @score_datos, @valor_texto, @valor_memo
END
IF (@accion = 'CRP_Riesgo_Pais')
BEGIN
declare @lista_blanca varchar(10) = null
declare @footprint varchar(10) = null
declare @RP int = null
--Riesgo País, (modalidad fast fast/full)
--Alto: si País no en Lista Blanca ni en Footprint;
--Medio:si País no en Lista Blanca pero sí en Footprint;
--Bajo: si País en Lista Blanca
select top 1 @lista_blanca = lista_blanca, @footprint = footprint
from LB_Footprint
where visible = 1 and country_code = @pais_contraparte
order by periodo desc
if (@lista_blanca = 'NO' and @footprint = 'NO')
begin
set @RP = 10
set @valor_texto = 'A'
end
else
begin
if (@lista_blanca = 'NO' and @footprint = 'SI')
begin
set @RP = 50
set @valor_texto = 'M'
end
else
begin
if (@lista_blanca = 'SI')
begin
set @RP = 100
set @valor_texto = 'B'
end
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RP, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RP,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RP score, @valor_texto valor,@valor_memo memo
END
/* Familias
542 VRM-A
367 VRM-B
536 VRM-C
368 VRM-D
369 VRM-F
515 VRM-H
527 VRM-K
518 VRM-L
528 VRM-N
543 VRM-TEST
*/
/*
Riesgo Concentración en País, (modalidad full)
Alto: supera el umbral límite del país;
Medio: supera el umbral de alerta del país;
Bajo: País sin limitación en la lista o bien no supera el umbral alerta
*/
declare @ventas_contraparte decimal(20,2) = null
declare @moneda_ventas varchar(10) = null
declare @fecha_balance date = null
declare @cotizacion decimal(20,2) = 1
declare @ventas table(identificacion varchar(50),
moneda_compras varchar(10),
total_compras decimal(20,2),
moneda_ventas varchar(10),
total_ventas decimal(20,2),
fecha_balance date,
dependencia_economica decimal(20,2),
desde date,
hasta date,
compras_hasta varchar(10))
declare @umbral_limite decimal(20,2) = null
declare @umbral_alerta decimal(20,2) = null
IF (@accion = 'CRP_Riesgo_Concentracion_Pais' and
@familia in ( 542, /* Paises Modalidad Full*/
367,
536,
368,
369,
515,
528,
543))
BEGIN
declare @RCP int = null
set @valor_memo = null
select top 1 @umbral_limite = umbral_limite, @umbral_alerta = umbral_alerta
from Limites_alertas
where visible = 1 and country_code = @pais_contraparte
order by periodo desc
/*
select top 1 umbral_limite, umbral_alerta
from Limites_alertas
where visible = 1 and country_code = 'AR'
order by periodo desc
*/
insert into @ventas exec LN_dependencia_economica_balance @contraparte
select top 1 @ventas_contraparte = total_ventas, @moneda_ventas = moneda_ventas from @ventas
if (@moneda_ventas = 'ARS')
begin
select top 1 @cotizacion = rate_eur
from cotizaciones
where currency_code = 'ARS' and convert(DATE,fecha_cotizacion) <= @fecha_balance
order by fecha_cotizacion desc
set @ventas_contraparte = @ventas_contraparte / isnull(@cotizacion,1)
end
if (@ventas_contraparte is not null)
begin
if (@umbral_limite is not null and @ventas_contraparte is not null
and @ventas_contraparte > @umbral_limite)
begin
set @RCP = 10
set @valor_texto = 'A'
end
if (@RCP is null and @umbral_alerta is not null and @ventas_contraparte is not null
and @ventas_contraparte > @umbral_alerta)
begin
set @RCP = 50
set @valor_texto = 'M'
end
if (@RCP is null)
begin
set @RCP = 100
set @valor_texto = 'B'
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RCP, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RCP,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RCP*10 score, @valor_texto valor, @valor_memo memo
END
/*
Riesgo Concentración Inversa, (modalidad full)
Alto :facturación del proveedor con BBVA igual o mayor a 50% y Materialidad >= 1.000.000€;
Medio: facturación del proveedor con BBVA mayor a 30% e inferior a 50% y Materialidad >= 1.000.000€;
Bajo: menor o igual al 30% o cuando los niveles de actividad (materialidad) es inferior a 1.000.000€
*/
declare @dependencia decimal(20,2)
IF (@accion = 'CRP_Riesgo_Concentracion_Inversa' and
@familia in ( 542, /* Paises Modalidad Full*/
367,
536,
368,
369,
515,
528,
543))
BEGIN
declare @RCI int = null
set @valor_texto = null
set @valor_memo = null
/*
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'RA_Materialidad_proveedor'
*/
insert into @ventas exec LN_dependencia_economica_balance @contraparte
select top 1 @dependencia = dependencia_economica, @ventas_contraparte = total_ventas, @moneda_ventas = moneda_ventas from @ventas
if (@moneda_ventas = 'ARS')
begin
select top 1 @cotizacion = rate_eur
from cotizaciones
where currency_code = 'ARS' and convert(DATE,fecha_cotizacion) <= @fecha_balance
order by fecha_cotizacion desc
set @ventas_contraparte = @ventas_contraparte / isnull(@cotizacion,1)
end
select @dependencia dependencia, @ventas_contraparte materialidad
if (@dependencia is not null and @ventas_contraparte is not null)
begin
if (@dependencia >= 0.50 and @ventas_contraparte >= 1000000)
begin
set @RCI = 10
set @valor_texto = 'A'
end
if (@dependencia >= 0.30 and @dependencia < 0.50 and @ventas_contraparte >= 1000000)
begin
set @RCI = 50
set @valor_texto = 'M'
end
if (@dependencia < 0.30 or @ventas_contraparte < 1000000)
begin
set @RCI = 100
set @valor_texto = 'B'
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RCI, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RCI,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RCI as score, @valor_texto as valor, @valor_memo as memo
END
/*
Riesgo Step In (modalidad full)
Cálculo a partir de la combinación de los indicadores de “Riesgo Financiero” y de “Concentración Inversa”.
*/
IF (@accion = 'CRP_Riesgo_Step_In' and
@familia in ( 542, /* Paises Modalidad Full*/
367,
536,
368,
369,
515,
528,
543))
BEGIN
declare @valor_texto_2 varchar(10) = null
declare @RSI int = null
set @valor_texto = null
set @valor_texto_2 = null
set @valor_memo = null
select @valor_texto = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'CRP_Riesgo_Concentracion_Inversa'
select @valor_texto_2 = valor_texto
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and clave_indicador = 'VRM_Score_Financiero'
if (@valor_texto = 'A' and @valor_texto_2 = 'A')
begin
set @RSI = 10
set @valor_texto = 'A'
end
if (@valor_texto = 'M' and @valor_texto_2 = 'A')
begin
set @RSI = 50
set @valor_texto = 'M'
end
if (@valor_texto = 'B' and @valor_texto_2 = 'A')
begin
set @RSI = 100
set @valor_texto = 'B'
end
if (@valor_texto_2 = 'B')
begin
set @RSI = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @RSI, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @RSI,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @RSI score, @valor_texto valor, @valor_memo memo
END
/*
Para determinar la evaluación final del Módulo de Concentración y Riesgo País,
prevalecerá el mayor riesgo obtenido de los cuatro controles que componen el módulo
*/
IF (@accion = 'VRM_SCORE_CONCENTRACION')
BEGIN
set @valor_numerico = null
set @valor_texto = null
set @valor_memo = null
select @valor_numerico = min(convert(int,valor_numerico))
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and ln_indicadores.producto = 2091 -- Producto Concentración y Riesgo País
and valor_numerico is not null
set @valor_texto = case @valor_numerico
when 100 then 'B'
when 50 then 'M'
when 10 then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico score, @valor_texto valor, @valor_memo memo
END
IF (@accion = 'VRM_Financiero_bcra')
BEGIN
set @valor_numerico = null
set @valor_texto = null
declare @nombre1 varchar(max), @nombre2 varchar(100)
declare @bancos table (fec_inf varchar(6), banco varchar(100), situacion int, deuda numeric(12,2))
-- BBVA: Cod de entidad = 17
select @nombre1 = nombre, @nombre2 = nombre_corto from EntidadesBancarias where id_banco = 17
delete from @bancos
insert into @bancos
exec obtener_bancos_test @cuit
-- Alto: si muestra situacion distinta de 1 (normal) con BBVA.
-- Medio: si muestra situacion 3 o peor en sistema financiero general;
-- Bajo: situacion 1 con bbva y/o en sistema financiero en general
if (select max(situacion) from @bancos where banco in (@nombre1,@nombre2)) > 1
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@valor_numerico is null)
begin
if (select max(situacion) from @bancos) >= 3
begin
set @valor_numerico = 50
set @valor_texto = 'M'
end
end
if (@valor_numerico is null)
begin
if (select max(situacion) from @bancos) >= 3
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Financiero_bcra'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_Fnanciero_ratio1' or @accion = 'VRM_Fnanciero_ratio2' or @accion = 'VRM_Fnanciero_ratio3')
BEGIN
-- Balance
declare @patrimonio decimal(20,2) = null
declare @ebitda decimal(20,2) = null
declare @res_gasfin decimal(20,2) = null
select top 1 @patrimonio = patrimonio, @ebitda = ebitda, @res_gasfin = res_gasfin
from balances_contables
where cuit = @cuit
and visible = 1
and estado = 'PUBLICADO'
and (datepart(yy,getdate()) - datepart(yy,fecha_balance)) <= 6
order by fecha_balance desc
-- Deuda Bancaria
declare @deuda table (cant int, periodo varchar(10), deuda_total numeric(20,2))
declare @DFB numeric(20,2) = null
insert into @deuda
exec obtener_card_bancos @cuit
select top 1 @DFB = deuda_total from @deuda
END
IF (@accion = 'VRM_Fnanciero_ratio1')
BEGIN
-- Si no tiene el documento de acreditacion de ingresos es porque debe tener balance
if not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
-- Ratios Balance
-- ratio 1
set @valor_numerico = null
set @valor_texto = null
if (@patrimonio < 0)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@patrimonio >= 0)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Fnanciero_ratio1'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
end
END
IF (@accion = 'VRM_Fnanciero_ratio2')
BEGIN
-- ratio 2
-- Si no tiene el documento de acreditacion de ingresos es porque debe tener balance
if not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
declare @ratio2 numeric(20,2) = null
set @valor_numerico = null
set @valor_texto = null
if (@ebitda != 0)
set @ratio2 = @DFB / @ebitda
if (@ebitda <= 0 or @ratio2 > 6.00)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@ebitda > 0 and @ratio2 <= 6.00)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Fnanciero_ratio2'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
end
END
IF (@accion = 'VRM_Fnanciero_ratio3')
BEGIN
-- Ratio 3
-- Si no tiene el documento de acreditacion de ingresos es porque debe tener balance
if not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
set @valor_numerico = null
set @valor_texto = null
-- Deuda Bancaria
declare @ratio3 numeric(20,2) = null
if (@ebitda != 0)
set @ratio3 = @res_gasfin / @ebitda
if (@ratio3 < 1)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (@ratio3 >= 1)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Fnanciero_ratio3'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
end
END
IF (@accion = 'VRM_Financiero_Doc')
BEGIN
set @valor_numerico = null
set @valor_texto = null
-- Documento 1213 MODULO FINANCIERO (AUTONOMOS)
if exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion)
begin
if (not exists (select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')) or
(select max(situacion) from @bancos) >= 3
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if (exists(select * from ln_docs where tipo_doc in (1213)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')) and
((select max(situacion) from @bancos) < 3 or (select max(situacion) from @bancos) is null)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = 'VRM_Financiero_Doc'
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_Score_Financiero')
BEGIN
SELECT @valor_numerico = min(valor_numerico)
FROM LN_contraparte_indicadores a
where a.contraparte = @contraparte
and a.gestion = @gestion
and valor_numerico is not null
and indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != 'VRM_Score_Financiero')
set @valor_texto = case
when (@valor_numerico is null) then null
when (@valor_numerico = 100) then 'B'
when (@valor_numerico < 100) then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
-- Laboral, Legal, Fical
declare @valores_llf table (contraparte int, gestion int, doc_id int, seccion int, campo int, tipo_campo varchar(1), nombre_campo varchar(200), etiqueta varchar(max),fila int, col int, valor_numerico int, valor_texto varchar(max), valor_fecha smalldatetime, valor_fecha_srt varchar(200))
IF (@accion = 'VRM_legal')
BEGIN
set @valor_numerico = null
set @valor_texto = null
if exists (select * from ln_docs where tipo_doc in (1190,1209)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_llf exec ln_docs_valores @contraparte, 'BBVALEGAL'
select @valor_texto = case valor_numerico
when 1 then 'B'
when 0 then 'A'
else null
end
from @valores_llf
select @valor_numerico = case valor_numerico
when 1 then 100
when 0 then 10
else null
end
from @valores_llf
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'VRM_laboral')
BEGIN
set @valor_numerico = null
set @valor_texto = null
if exists (select * from ln_docs
where tipo_doc in (1192)
and contraparte = @contraparte and gestion = @gestion and vencimiento_carga <= getdate())
begin
if exists (select * from ln_docs
where tipo_doc in (1192)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
else
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'VRM_fiscal')
BEGIN
set @valor_numerico = null
set @valor_texto = null
if exists (select * from ln_docs where tipo_doc in (1190,1209)
and contraparte = @contraparte and gestion = @gestion
and estado_doc = 'V')
begin
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-11'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-12'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-21'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-22'
insert into @valores_llf exec ln_docs_valores @contraparte, 'FISCAL-23'
if ((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-11') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-12') = 1)
and
((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-21') = 0 and
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-22') = 0 and
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-23') = 0)
begin
set @valor_numerico = 10
set @valor_texto = 'A'
end
if ((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-11') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-12') = 1)
and
((select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-21') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-22') = 1 or
(select valor_numerico from @valores_llf where nombre_campo = 'FISCAL-23') = 1)
begin
set @valor_numerico = 50
set @valor_texto = 'M'
end
if (@valor_numerico is null)
begin
set @valor_numerico = 100
set @valor_texto = 'B'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id, @familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
end
select @indic_accion as indicador, @valor_numerico, @valor_texto,@valor_memo
END
IF (@accion = 'VRM_SCORE_LLF')
BEGIN
SELECT @valor_numerico = min(valor_numerico)
FROM LN_contraparte_indicadores a
where a.contraparte = @contraparte
and a.gestion = @gestion
and valor_numerico is not null
and indicador in (select indicador
from ln_indicadores
where ln_indicadores.producto = @producto
and clave_indicador != 'VRM_SCORE_LLF')
set @valor_texto = case
when (@valor_numerico is null) then null
when (@valor_numerico = 100) then 'B'
when (@valor_numerico = 50) then 'M'
when (@valor_numerico = 10) then 'A'
else null
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
set @valor_memo = null
EXEC [dbo].[LN_indicadores_opciones] @indic_accion, @valor_texto, @valor_memo output
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_texto, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_texto = @valor_texto,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico, @valor_texto, @valor_memo
END
IF (@accion = 'VRM_SCORE_FIDELITAS')
BEGIN
set @valor_numerico = null
set @valor_texto = null
set @valor_memo = null
select @valor_numerico = valor_numerico
from ln_contraparte_indicadores
inner join ln_indicadores on ln_indicadores.indicador = ln_contraparte_indicadores.indicador
where contraparte = @contraparte
and gestion = @gestion
and ln_contraparte_indicadores.indicador = 4
if (@valor_numerico < 0)
begin
set @valor_numerico = 0
set @valor_memo = 'N/A'
end
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (@indic_accion is not null)
begin
if not exists (select contraparte, gestion, indicador
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion)
INSERT INTO LN_contraparte_indicadores
(contraparte, gestion, indicador, valor_numerico, valor_memo, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_numerico, @valor_memo, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_numerico = @valor_numerico,
valor_memo = @valor_memo,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
end
select @indic_accion as indicador, @valor_numerico score, @valor_texto valor, @valor_memo memo
END
/* Después de tocar un indicador, veo si tiene que calcular un indicador dependiente */
declare @clave_indicador varchar(100)
declare @indicador_dependiente int
select @indic_accion = indicador from ln_indicadores
where clave_indicador = @accion
if (select count(*)
from ln_indicadores_dependientes
where ln_indicadores_dependientes.indicador = @indic_accion) > 0
begin
DECLARE C_indi CURSOR LOCAL FOR
select ln_indicadores_dependientes.indicador_dependiente, LN_indicadores.clave_indicador
from ln_indicadores_dependientes
inner join LN_indicadores on LN_indicadores.indicador = ln_indicadores_dependientes.indicador_dependiente
where ln_indicadores_dependientes.indicador = @indic_accion
OPEN C_indi
FETCH NEXT FROM C_indi INTO @indicador_dependiente, @clave_indicador
WHILE @@fetch_status = 0
BEGIN
select 'VA A CALCULAR DEPENDIENTE (2): ' as accion,
@indic_accion as indicador,
@indicador_dependiente as indicador_dependiente,
@clave_indicador as indicador_dependiente
exec [LN_scores_VRM] @clave_indicador,
@contraparte,
@p_user_id
FETCH NEXT FROM C_indi INTO @indicador_dependiente, @clave_indicador
END
CLOSE C_indi
DEALLOCATE C_indi
end
/* Después de tocar un indicador manual, lo manda al queue para calcular los automáticos en los que puede influir */
/* declare @valoracion char(1) = null
select @valoracion = valoracion from ln_indicadores
where clave_indicador = @accion
if @valoracion != 'A'
exec LN_contrapartes_queue_ 'insert',null,@contraparte,null
*/
END
/*
select * from ln_indicadores where clave_indicador in ( 'RA_SCORE_RA', 'MA_Risk_Assessment')
'RA_Industria')
insert into ln_indicadores_dependientes values (383,423)
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador in (414, 419)
(indicador in (select indicador from ln_indicadores_dependientes) or
indicador in (select indicador_dependiente from ln_indicadores_dependientes) )
select * from ln_contraparte_indicadores where contraparte = 162668 and indicador = 396
select d.indicador, i.clave_indicador, d.indicador_dependiente, id.clave_indicador
from ln_indicadores_dependientes d
inner join ln_indicadores i on i.indicador = d.indicador
inner join ln_indicadores id on id.indicador = d.indicador_dependiente
order by indicador_dependiente
update ln_indicadores set valoracion = 'D' where indicador in (413,414,419,420)
select valor_numerico, valor_texto
from ln_contraparte_indicadores
where contraparte = 162668
and indicador = 419
select * from ln_indicadores where indicador = 396
select * from ln_productos where producto = 2082
*/
GO
Depends On
23- dbo.LN_dependencia_economica_balance
- dbo.LN_docs_valores
- dbo.LN_indicadores_manual_cliente
- dbo.LN_indicadores_opciones
- dbo.LN_scores_VRM
- dbo.obtener_bancos_test
- dbo.obtener_card_bancos
- dbo.balances_contables
- dbo.cotizaciones
- dbo.EntidadesBancarias
- dbo.LB_Footprint
- dbo.Limites_alertas
- dbo.LN_contraparte_datos_configuracion
- dbo.LN_contraparte_familias
- dbo.LN_contraparte_indicadores
- dbo.LN_contrapartes
- dbo.LN_docs
- dbo.LN_gestiones
- dbo.LN_indicadores
- dbo.ln_indicadores_dependientes
- dbo.LN_productos
- dbo.padrones
- dbo.DelimitedSplit8K
Used By
No items found