dbo.LN_scores_VRM_06062022

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_06062022 
  @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 @nombre_indic_accion varchar(500) = 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_texto varchar(100) = null 
 declare @valor_numerico decimal(12,2) = null 
 declare @valor_memo varchar(100) = null
 
 declare @valor_texto_ant varchar(100) = null 
 declare @valor_numerico_ant decimal(12,2) = null 
 declare @valor_memo_ant varchar(100) = null

 declare @trazabilidad varchar(max) = null 
 declare @trazabilidad2 varchar(max) = null 

 declare @cuit varchar(20)

 declare @producto int = null 
 declare @indicador int = null 
 declare @valor varchar(100) = null 

/* ------------------------------------------------------------------- */
/* Acciones generales */ 
 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 

 IF (@accion != 'SOLICITAR_DDR_PENDIENTE' and @accion != 'DOC_ID_PROT_CLIENTELA') 
 begin
  select @indic_accion = indicador, @nombre_indic_accion = nombre_indicador 
    from ln_indicadores 
   where clave_indicador = @accion

  select  @valor_numerico_ant = valor_numerico, 
    @valor_texto_ant = valor_texto, 
    @valor_memo_ant = valor_memo
     from LN_contraparte_indicadores
    where contraparte = @contraparte
   and gestion = @gestion 
   and visible = 1
   and indicador = @indic_accion 
 end 
/* ------------------------------------------------------------------- */

/* Acciones */ 
 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

  if (@indic_accion is not null)
  begin 
      set @valor_numerico = @score_datos*10
   if (@accion = 'DDR_SCORE_DDR')
       set @valor_texto = case @valor_numerico 
           when 10  then 'A'
           when 50  then 'M'
           when 100 then 'B'
           else null 
           end
   else
    set @valor_texto = format(@score_datos,'###.##')

      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, @score_datos as score 

 END
 

 --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

  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 : Se paso a que se ponga como PENDIENTE
  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 

  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  

  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
  
  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 

  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 

   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 

   if (@indic_accion is not null)
   begin
    set @valor_memo = null 
    set @valor_numerico = @score_it
    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 

   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 
   
   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 

  if (@indic_accion is not null)
  begin
   set @valor_memo = null 
   set @valor_numerico = @score_datos 
   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

  if (@indic_accion is not null)
  begin 
   set @valor_numerico = @RP
   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 
  
  if (@indic_accion is not null)
  begin
   set @valor_numerico = @RCP
   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 

  if (@indic_accion is not null)
  begin
   set @valor_numerico = @RCI
   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

  if (@indic_accion is not null)
  begin
   set @valor_numerico = @RSI
   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
  
  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 

  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 

   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 

   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 

   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 
   
    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 

  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
  
   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        
   
   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 
      
   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 
  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 
  if (@indic_accion is not null)
  begin
   set @valor_texto = null 
   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


 /* Guarda trazabilidad del indicador calculado */ 
 
 IF (@accion != 'SOLICITAR_DDR_PENDIENTE' and @accion != 'DOC_ID_PROT_CLIENTELA') 

 begin
  if (isnull(@valor_numerico_ant,-500) != isnull(@valor_numerico,-500) or
   isnull(@valor_texto_ant,'')      != isnull(@valor_texto,'') or 
      isnull(@valor_memo_ant,'')       != isnull(@valor_memo,''))
  begin 
  
   set @trazabilidad = @nombre_indic_accion + 
        iif(isnull(@valor_memo,'')!='',@valor_memo,
         iif(isnull(@valor_texto,'')!='',@valor_texto,convert(varchar,@valor_numerico)))
   set @trazabilidad2 = 'CAMBIO_INDICADOR_'+convert(varchar,@indic_accion)
   exec insertar_trazabilidad  @trazabilidad, @cliente, @trazabilidad2,'WWW', @contraparte,1
  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, @nombre_indic_accion = nombre_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 
 
 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

Used By

No items found