dbo.LN_contrapartes_queue_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

7
Name Data Type Length Description
@accion varchar 50
@p_queue_id int 4
@p_contraparte int 4
@p_cuit varchar 20
@p_clave_indicador varchar 50
@p_familia int 4
@p_id_taken int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>


--  exec LN_contrapartes_queue_ 'indicadores_scores',NULL,147069
--  exec LN_contrapartes_queue_ 'insert_masivo'

-- ============================================
--select * from LN_contrapartes_queue order by queue_id desc
/*
[LN_contrapartes_queue_]  'indicadores_anteriores', null, 608
[LN_contrapartes_queue_]  'insert_masivo'

exec LN_contrapartes_queue_  'pending',null,null,null,null,null,800

select * from ln_contraparte_indicadores_trazabilidad where contraparte = 95

EXEC LN_contrapartes_queue_ 'archivos_json_pendiente' 

EXEC LN_contrapartes_queue_ 'indicadores_nuevos', NULL, 180111

*/

CREATE OR ALTER PROCEDURE dbo.LN_contrapartes_queue_ 
 -- Add the parameters for the stored procedure here

 @accion          varchar(50),
 @p_queue_id         int = NULL,
 @p_contraparte        int = NULL,
 @p_cuit          varchar(20) = null,
 @p_clave_indicador       varchar(50) = null,
 @p_familia         int = null,
 @p_id_taken         int = 10

AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
  
    declare @top int 
     declare @hora int = DATEPART(HOUR, getdate())
  if (@hora >= 7) 
  begin
      set @top = 200
   end
  else if (@hora >= 19) 
      begin
   set @top = 500
   end
  else 
   begin
   set @top = 500
   end
 if (@accion = 'pending') 
 begin
  ----------------------------------------------------------------------------------------------------------------
  -- 17/07/2024
  -- Si se inactivó alguna contraparte, o se inactivó su familia, o el cliente no tiene el producto => 
  -- las saco del queue poniendolas como procesadas (marcandolas con la fecha finished = '1901-01-01')
  IF (select count(*) as no_procesables 
     from ln_contrapartes_queue Q
     left join LN_contrapartes C   on (C.contraparte = Q.contraparte)
     left join ln_contraparte_familias CF  on (CF.contraparte = Q.contraparte and isnull(CF.activo,1) = 1)
     left join ln_familias F    on (F.familia = CF.familia)
     left join clientes_productos CP       on (CP.cliente = C.cliente and CP.id_producto = C.servicio_contratado) 
     where Q.id_taken = @p_id_taken and Q.processed = 0
       and (isnull(C.activo,0) = 0 or isnull(F.visible,0) = 0 or isnull(CP.activo,0) = 0)) > 0 
  begin
   update ln_contrapartes_queue set processed = 1, finished = '1901-01-01' 
   where queue_id in 
   (
   select Q.queue_id
     from ln_contrapartes_queue Q
     left join LN_contrapartes C   on (C.contraparte = Q.contraparte)
     left join ln_contraparte_familias CF  on (CF.contraparte = Q.contraparte and isnull(CF.activo,1) = 1)
     left join ln_familias F    on (F.familia = CF.familia)
     left join clientes_productos CP       on (CP.cliente = C.cliente and CP.id_producto = C.servicio_contratado) 
    where Q.id_taken = @p_id_taken and Q.processed = 0
      and (isnull(C.activo,0) = 0 or isnull(F.visible,0) = 0 or isnull(CP.activo,0) = 0))   
  end 
  ----------------------------------------------------------------------------------------------------------------



  set @top = 200
  
     /* Si se corre entre las 0 y las 7 horas toma lotes de 500 despues de las 7 am toma lotes de 200 */
  select top (@top)
         LN_contrapartes_queue.*, LN_contrapartes.cliente, LN_contraparte_familias.familia, 
      IIF(ln_contrapartes.servicio_contratado = '10','V',
         (IIF(ln_contrapartes.servicio_contratado = '73', 'I',IIF (ln_contrapartes.subcontratista = 1, 'S','C')))) as cs
   from LN_contrapartes_queue 
   inner join LN_contrapartes on LN_contrapartes.contraparte = LN_contrapartes_queue.contraparte
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join clientes_productos CP on (CP.cliente = LN_contrapartes.cliente and CP.id_producto in (47,73,10) and CP.activo = 1 and CP.id_producto = LN_contrapartes.servicio_contratado) 
   left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte
   where LN_contrapartes_queue.processed = 0 
   and LN_contraparte_familias.activo in (1,0)
   and LN_contrapartes_queue.id_taken=@p_id_taken
   order by CP.queue_prioridad asc, LN_contrapartes.cliente, LN_contrapartes_queue.created desc  

 end
 if (@accion = 'archivos_json_pendiente')
 begin
  select distinct cliente from PANEL_CONTROL_JSON_TERMINADO
 end 


 if (@accion = 'insert_masivo_NO') 
 begin
   select top 10 C.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken,CP.queue_prioridad 
   from LN_contrapartes C
   inner join LN_gestiones G on    (G.contraparte = C.contraparte and G.vigente = 1)
   inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
   inner join ln_familias F on     (F.familia = CF.familia and isnull(F.visible,1) = 1)
   inner join clientes CL on     (CL.cliente = C.cliente and CL.estado_cliente='A')
   inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.id_producto = 47 and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado)  
   where C.activo = 1 and C.servicio_contratado = 47 and C.subcontratista=0

 end

 DECLARE @vidreg int
 DECLARE @Counter INT 
 declare @fech date = getdate()-1 --'2023-08-03 00:00:00'

 if (@accion = 'insert_masivo_16072024') 
 begin

  /*PRIMERO BORRAMOS TODO EL HISTORIAL DE LA TABLA DE JSON PARA CUANDO SE TENGA QUE GENERAR EL MISMO SEA EL REFLEJO DE LO ACTUAL */
   --DECLARE @vidreg int
   DECLARE C_TerminosTask CURSOR FOR
   select count(idrow) / 100000  from PANEL_CONTROL_JSON  where contraparte in (select distinct C.contraparte
     from LN_contrapartes C
/* inner join LN_gestiones G on (G.contraparte = C.contraparte and G.vigente = 1)
inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
inner join ln_familias F on (F.familia = CF.familia and isnull(F.visible,1) = 1)
inner join clientes CL on (CL.cliente = C.cliente and CL.estado_cliente='A')
*/
     inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.id_producto = 47 and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado) 
     where /*C.activo = 1 and*/ C.servicio_contratado = 47 and C.subcontratista=0)
    OPEN C_TerminosTask
    FETCH NEXT FROM C_TerminosTask INTO @vidreg
    WHILE @@fetch_status = 0
     BEGIN
     --DECLARE @Counter INT 
     SET @Counter=0
      WHILE (@Counter <= @vidreg)
      begin  

       select @Counter as cont,@vidreg as idreg

       delete PANEL_CONTROL_JSON where idrow in (
       select  top 100000 idrow  from PANEL_CONTROL_JSON  where contraparte in (select distinct C.contraparte
       from LN_contrapartes C
/* inner join LN_gestiones G on (G.contraparte = C.contraparte and G.vigente = 1)
inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
inner join ln_familias F on (F.familia = CF.familia and isnull(F.visible,1) = 1)
inner join clientes CL on (CL.cliente = C.cliente and CL.estado_cliente='A')
*/
       inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.id_producto = 47 and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado) 
       where/* C.activo = 1 and*/ C.servicio_contratado = 47 and C.subcontratista=0))

      set @Counter = @Counter + 1
      WAITFOR DELAY '00:00:02:000';
      end
    
   
      FETCH NEXT FROM C_TerminosTask INTO @vidreg
     END
    CLOSE C_TerminosTask
    DEALLOCATE C_TerminosTask


    /* FIN DE PRIMERO BORRAMOS TODO EL HISTORIAL DE LA TABLA DE JSON PARA CUANDO SE TENGA QUE GENERAR EL MISMO SEA EL REFLEJO DE LO ACTUAL */

    SET @fech = getdate()-1 --'2023-08-03 00:00:00'
  exec LN_Panel_Control_SAAS_file  515494256

  /* 16/08/2023: va depurando esta tabla por dia, porque crece mucho y cuelga el queue, 
   pero dejamos los ultimos registros porque se usan para los mails de cambios de score */

  delete from [LN_contraparte_indicadores_trazabilidad] where actualizado < getdate() -1
  
    insert into ln_contrapartes_queue (contraparte,id_taken)
    
/*   declare @fech date = getdate()-1 --'2023-08-03 00:00:00'*/
   select contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken 
   from ln_contrapartes where activo = 1 
   and cliente in (515494256) 
   and id_padron in (select id_padron from padrones where identificacion 
   in (select distinct cuit from monitoreos_resultados where fecha = @fech
   union 
   select distinct cuit from apocrifas where publicado between getdate()-30 and @fech
   ))
 
   /* Manda al queue las contrapartes que no se mandaron y tienen cheques rechazados nuevos */
   UNION
   select distinct  sel.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken
   from 
   (select distinct contraparte
   from LN_contrapartes c
   inner join padrones p on p.id_padron = c.id_padron 
   inner join chequesbcra h on ((h.cuit_firmante = p.identificacion or h.Cuit_relacionado = p.identificacion) and h.visible = 1 and h.created > @fech)
   where c.activo = 1 and c.subcontratista = 0 
   and  c.cliente = 515494256
   ) sel
   UNION
      /* 3-11-2023 agregamos subcontratistas vigentes de amx */ 
   select contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken from LN_contrapartes
   where cliente = 5546348  
   and activo=1 and servicio_contratado=47 and subcontratista=1 and vigencia_desde <= getdate() and vigencia_hasta >= getdate() /*and  contraparte not in (select distinct contraparte from ln_contrapartes_queue where finished > getdate()-1)*/
   /**/
   union
   select contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken 
   from LN_contraparte_familias where contraparte in (SELECT LN_CONTRAPARTES.contraparte FROM LN_CONTRAPARTES
   inner join ln_gestiones on ln_gestiones.contraparte = LN_contrapartes.contraparte 
   WHERE activo=1 and servicio_contratado=73 and subcontratista=0 and LN_gestiones.vigente = 1
   )
   union
   /* 31/05/2024 se puso esto */
   
--   declare @fech date = getdate()-1 --'2023-08-03 00:00:00'

   select C.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken
   from LN_contrapartes C
   inner join LN_gestiones G on    (G.contraparte = C.contraparte and G.vigente = 1)
   inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
   inner join ln_familias F on     (F.familia = CF.familia and isnull(F.visible,1) = 1)
   inner join clientes CL on     (CL.cliente = C.cliente and CL.estado_cliente='A')
   inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.id_producto in (47,73) and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado) 
   where C.activo = 1 and C.servicio_contratado in (47,73) and C.subcontratista=0
/* and CP.queue_prioridad < 50
order by CP.queue_prioridad,C.cliente
*/

 end 
 
/* 16/07/2024: Sacamos los UNION para insertar en ln_contrapartes_queue, porque se deplicaba la misma contraparte
   hacemos todos insert separados, controlando que no esté la misma contraparte con processed = 0 */

 if (@accion = 'insert_masivo') 
 begin

  /*PRIMERO BORRAMOS TODO EL HISTORIAL DE LA TABLA DE JSON PARA CUANDO SE TENGA QUE GENERAR EL MISMO SEA EL REFLEJO DE LO ACTUAL */
   --DECLARE @vidreg int
   DECLARE C_TerminosTask CURSOR FOR
   select count(idrow) / 100000  from PANEL_CONTROL_JSON  where contraparte in (select distinct C.contraparte
     from LN_contrapartes C
/* inner join LN_gestiones G on (G.contraparte = C.contraparte and G.vigente = 1)
inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
inner join ln_familias F on (F.familia = CF.familia and isnull(F.visible,1) = 1)
inner join clientes CL on (CL.cliente = C.cliente and CL.estado_cliente='A')
*/
     inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado) 

     where /*C.activo = 1 and*/ C.servicio_contratado = 47 and C.subcontratista=0)
    OPEN C_TerminosTask
    FETCH NEXT FROM C_TerminosTask INTO @vidreg
    WHILE @@fetch_status = 0
     BEGIN
     --DECLARE @Counter INT 
     SET @Counter=0
      WHILE (@Counter <= @vidreg)
      begin  

       select @Counter as cont,@vidreg as idreg

       delete PANEL_CONTROL_JSON where idrow in (
       select  top 100000 idrow  from PANEL_CONTROL_JSON  where contraparte in (select distinct C.contraparte
       from LN_contrapartes C
/* inner join LN_gestiones G on (G.contraparte = C.contraparte and G.vigente = 1)
inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
inner join ln_familias F on (F.familia = CF.familia and isnull(F.visible,1) = 1)
inner join clientes CL on (CL.cliente = C.cliente and CL.estado_cliente='A')
*/
       inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado) 
       where/* C.activo = 1 and*/ C.servicio_contratado = 47 and C.subcontratista=0))

      set @Counter = @Counter + 1
      WAITFOR DELAY '00:00:02:000';
      end
    
   
      FETCH NEXT FROM C_TerminosTask INTO @vidreg
     END
    CLOSE C_TerminosTask
    DEALLOCATE C_TerminosTask


    /* FIN DE PRIMERO BORRAMOS TODO EL HISTORIAL DE LA TABLA DE JSON PARA CUANDO SE TENGA QUE GENERAR EL MISMO SEA EL REFLEJO DE LO ACTUAL */

     SET @fech = getdate()-1 --'2023-08-03 00:00:00'
  exec LN_Panel_Control_SAAS_file  515494256

  /* Subcontratistas AMX a enriquecer
   Se puso acá en el insert_masivo, porque hay que correrlo todos los días
   - se cargan las altas del dia anterior
   - el dia 1 de cada mes se cargan los que cumplen 3 meses
   */

  exec [Subcontratistas_enriquecer_] 'INSERT',5546348

  /* 25/09/2024: Los dias 26 del mes carga todas las contrapartes con el producto mis_aportes en la tabla mis_aportes_procesar
                         Los demás días del mes, las contrapartes dadas de alta en las últimas 24 hs. */
    
  exec mis_aportes_procesar_ 'insert'

  /* 12/12/2024: Busca nuevas contrapartes o nuevos CUITs en monitoreos cargados en el dia de ayer para que entren en el proceso de buscar contancias */
  exec [padron_constancia_] 'insert'


  
  /* 30/10/2024: Busca las columnas que tiene que tener el excel de cada cliente 
                  (por si hubo algun cambio de qué indicadores tiene, lo regenera todos los días) */

  declare @cliente_excel int, @servicio_excel int
  DECLARE C_titulos_excel CURSOR FOR
   select distinct cliente, servicio from PANEL_CONTROL_EXCEL_TITULOS

  OPEN C_titulos_excel
  FETCH NEXT FROM C_titulos_excel INTO @cliente_excel, @servicio_excel
  WHILE @@fetch_status = 0
  BEGIN 
   exec [PANEL_CONTROL_EXCEL_] 'TITULOS', @cliente_excel, @servicio_excel,null,0,1

   FETCH NEXT FROM C_titulos_excel INTO @cliente_excel, @servicio_excel
  END 
  CLOSE C_titulos_excel
  DEALLOCATE C_titulos_excel

  
  /* 18/02/2025: Graba los controles de carga de edictos y concursos y quiebras */
  declare @ayer date = GETDATE()-1
  exec [Sp_control_cyq] @ayer, @ayer
  exec [Sp_control_edictos] @ayer, @ayer


  /* 16/08/2023: va depurando esta tabla por dia, porque crece mucho y cuelga el queue, 
   pero dejamos los ultimos registros porque se usan para los mails de cambios de score */

  delete from [LN_contraparte_indicadores_trazabilidad] where actualizado < getdate() -1
  
    insert into ln_contrapartes_queue (contraparte,id_taken)
      select contraparte, 1.0 + floor(5 * RAND(convert(varbinary, newid()))) as id_taken 
   from ln_contrapartes where activo = 1 
   and cliente in (515494256) 
   and id_padron in (select id_padron from padrones where identificacion 
         in (select distinct cuit from monitoreos_resultados where fecha = @fech
          union 
          select distinct cuit from apocrifas where publicado between getdate()-30 and @fech)
        )
   and not exists (select * from ln_contrapartes_queue q where q.contraparte = ln_contrapartes.contraparte and q.processed = 0)

    /* 04/10/2024: Manda al queue las contrapartes de Coface que tienen aprobacion formal o fiscal rechazado, 
                       para ver si ahora da aprobado (por ej. ya tiene mas de 2 años de antigüedad) */

    insert into ln_contrapartes_queue (contraparte,id_taken)
   select distinct ln_contrapartes.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken
   from ln_contrapartes 
   inner join ln_gestiones on (ln_gestiones.contraparte = ln_contrapartes.contraparte and ln_gestiones.vigente = 1)
   inner join ln_contraparte_indicadores 
              on (ln_contraparte_indicadores.gestion = ln_gestiones.gestion and ln_contraparte_indicadores.indicador in (245,246) 
            and ln_contraparte_indicadores.valor_numerico = -100)
   where ln_contrapartes.activo = 1 
     and ln_contrapartes.cliente in (515494256) 
     and not exists (select * from ln_contrapartes_queue q where q.contraparte = ln_contrapartes.contraparte and q.processed = 0)

   /* Manda al queue las contrapartes que no se mandaron y tienen cheques rechazados nuevos */
   --
   --UNION
  insert into ln_contrapartes_queue (contraparte,id_taken)

   select distinct  sel.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken
   from 
   (select distinct contraparte
   from LN_contrapartes c
   inner join padrones p on p.id_padron = c.id_padron 
   inner join chequesbcra h on ((h.cuit_firmante = p.identificacion or h.Cuit_relacionado = p.identificacion) and h.visible = 1 and h.created > @fech)
   where c.activo = 1 and c.subcontratista = 0 
   and  c.cliente = 515494256
   and not exists (select * from ln_contrapartes_queue q where q.contraparte = c.contraparte and q.processed = 0)

   ) sel

   --UNION
  insert into ln_contrapartes_queue (contraparte,id_taken)

      /* 3-11-2023 agregamos subcontratistas vigentes de amx */ 
   select contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken from LN_contrapartes
   where cliente = 5546348  
   and activo=1 and servicio_contratado=47 and subcontratista=1 and vigencia_desde <= getdate() and vigencia_hasta >= getdate() /*and  contraparte not in (select distinct contraparte from ln_contrapartes_queue where finished > getdate()-1)*/
   and not exists (select * from ln_contrapartes_queue q where q.contraparte = ln_contrapartes.contraparte and q.processed = 0)

   /**/

   --UNION
  insert into ln_contrapartes_queue (contraparte,id_taken)
   /* Contrapartes de imperium */
   select contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken 
   from LN_contraparte_familias 
   where contraparte in (SELECT LN_CONTRAPARTES.contraparte FROM LN_CONTRAPARTES
   inner join ln_gestiones on ln_gestiones.contraparte = LN_contrapartes.contraparte 
   inner join clientes_productos CP on (CP.cliente = LN_CONTRAPARTES.cliente and 
                                        CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = LN_CONTRAPARTES.servicio_contratado) 
   WHERE LN_CONTRAPARTES.activo=1 and LN_CONTRAPARTES.servicio_contratado=73 and 
         LN_CONTRAPARTES.subcontratista=0 and LN_gestiones.vigente = 1 
   and not exists (select * from ln_contrapartes_queue q where q.contraparte = ln_contrapartes.contraparte and q.processed = 0)

   )
   --UNION 
  insert into ln_contrapartes_queue (contraparte,id_taken)

   /* 31/05/2024 se puso esto: Toma clientes ACTIVOS y que no tengan la marca de NO_QUEUE */
   
   select C.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken
   from LN_contrapartes C
   inner join LN_gestiones G on    (G.contraparte = C.contraparte and G.vigente = 1)
   inner join ln_contraparte_familias CF on (CF.contraparte = C.contraparte and isnull(CF.activo,1) = 1)
   inner join ln_familias F on     (F.familia = CF.familia and isnull(F.visible,1) = 1)
   inner join clientes CL on     (CL.cliente = C.cliente and CL.estado_cliente='A')
   inner join clientes_productos CP on   (CP.cliente = C.cliente and CP.activo = 1 and CP.no_queue != 1 and CP.id_producto = C.servicio_contratado) 
   where C.activo = 1 and C.servicio_contratado in (47,73) and C.subcontratista=0
   and not exists (select * from ln_contrapartes_queue q where q.contraparte = c.contraparte and q.processed = 0)

/* and CP.queue_prioridad < 50
order by CP.queue_prioridad,C.cliente
*/



 end 


 
 if (@accion = 'insert_masivo_') begin
    
    /*insert into ln_contrapartes_queue (contraparte)*/
    
    select distinct LN_contrapartes.contraparte
   from LN_contrapartes 
  inner join ln_gestiones on ln_gestiones.contraparte = LN_contrapartes.contraparte
  INNER JOIN LN_contraparte_familias ON LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  INNER JOIN LN_familias ON LN_familias.familia = LN_contraparte_familias.familia
  INNER JOIN LN_cliente_productos ON LN_contrapartes.cliente = LN_cliente_productos.cliente
  INNER JOIN LN_familia_productos ON LN_familia_productos.familia = LN_contraparte_familias.familia
  INNER JOIN LN_productos ON LN_productos.producto = LN_familia_productos.producto
  INNER JOIN LN_indicadores ON (LN_indicadores.producto = LN_familia_productos.producto and ln_indicadores.valoracion = 'A')
  LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
  left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte
  /* 07/12/2022 */
  inner join clientes on (clientes.cliente = LN_contrapartes.cliente and clientes.estado_cliente = 'A'/* and clientes.cli_codigo in (1326,222,5776,2000,9659,1486,2301,5635, 5672,5673,12392,10314,3926,6084,4117)*/)
  inner join clientes_productos on (clientes_productos.cliente = LN_contrapartes.cliente and clientes_productos.id_producto = LN_contrapartes.servicio_contratado and clientes_productos.activo = 1)
  /**/
  where LN_contrapartes.activo = 1
  and ln_gestiones.desde <= getdate() and ln_gestiones.hasta >= getdate()
  AND LN_contraparte_familias.activo = 1
  and ln_familias.visible = 1
  and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
       or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)

  and iif(LN_contrapartes.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1
/* and LN_contrapartes.cliente NOT in (592432729,3920694,515494256,8484144) /* cliente demo, cortesía, coface,etc*/
and LN_contrapartes.cliente NOT in (806892136,639839799,110864291) 
*/

  /*--MONSANTO 110864291 --WHIRLPOOL 639839799 -- ASE 806892136 */
  /*
   and LN_contrapartes.cliente in (select distinct cliente from clientes where estado_cliente='A' 
   and cli_codigo in (1326,222,829,4117,5776,12345678,2000,10314,5797,12235,9659,5297,1486,5851,2301,2570,5635))
   */


  /*
   and LN_contrapartes.cliente in (select distinct cliente from clientes where estado_cliente='A' 
   and cli_codigo in (1326,222,5776,2000,/*5797,*/
9659,1486,2301,5635, 5672,5673,12392,10314,3926,6084,4117))
   */

  /*select * from clientes where cli_codigo in (1326,222,5776,2000,5797,9659,1486,2301,5635, 5672,5673,12392,10314,3926,6084,4117)*/
  and ln_contrapartes.contraparte not in (select distinct contraparte from LN_contrapartes where cliente = 5546348 and servicio_contratado=73)
  /* 07/12/2022 */
  /*and LN_contrapartes.servicio_contratado in (47,73)
   and ln_contrapartes.cliente = 0 */

  and LN_contrapartes.cliente not in (
           110864291,  --MONSANTO ARGENTINA S.A.
           1313127297, --NOVARTIS ARGENTINA S.A
           882192574,  --SAPORITI S.A.
           42014167,  --BANCO INDUSTRIAL S.A.
           1421956540, --MAPFRE ARGENTINA SEGUROS S.A.(P.L.A.)
           1310336827, --SIEMENS S. A. 
           7667652,  --ULMA ANDAMIOS Y ENCOFRADOS ARGENTINA S.A.
           1328875763, --LA GAUCHITA S.A.
           806892136,  --ACCION SOCIAL DE EMPRESARIOS A.S.E
           515494256,  --COFACE SERVICIOS ARGENTINA S. A.
           3920694,  --CLIENTE DEMO
           7855254,  --VALID SOLUCIONES Y SERVICIOS DE SEGURIDAD EN MEDIOS DE PAGO E IDENTIFICACIÓN S.A.
           5026361,  --IRAM INSTITUTO ARG.DE NORMALIZACION Y CERTIFICACION
           103974506,  --USUARIO REMOTO - SIDI - MARIA SORIA
           3282956,  --GLOBAL DATA CENTER S.A.S.
           5258149,  --FRIC ROT S.A.I.C. 
           1836678,  --Johnson Controls International Plc 
           2254875,  --FIDELITAS SA
           /*1853132042,*/ /*ROMIKIN S.A.*/
           1837069565, --ALGODONERA ACONCAGUA S.A.
           1811919445, --WORLDSYS S.A.
           592432729,  --CLIENTE DE CORTESIA
           8484144,  --EMPRESA MODELO
           601116452,  --ALEID RAMI
           1745156,  --MINERA AGUA RICA LLC (SUC ARGENTINA)
           7075221  --Aval Digital
           )
  /**/
  
  
  /* lo sacamos el 07/12/2022: en el not in de arriba dejamos afuera los clientes que no queremos
   delete ln_contrapartes_queue where processed = 0 and contraparte 
   in (
   select contraparte from ln_contrapartes where cliente /*not in (5546348,2046807993) )*/

   in (1226057645,528397,7855254,7048064,65327330,240155302,1659303046,6063454))
   */


  
  /* 07/06/2022: Generación del panel de control de coface. Lo ponemos acá para que se regenere todos los días a la madrugada */
  
  --exec LN_Panel_Control_SAAS_datos 515494256
  exec LN_Panel_Control_SAAS_file  515494256

 end 

 if (@accion = 'insert') begin

  if (@p_contraparte is not null)
  begin
   if not exists (select top 1 * from LN_contrapartes_queue where contraparte = @p_contraparte and processed = 0) 

    /* Modificado 22/01/2020 si es prepago y no existe pago aprobado no lo va a insertar para que procese */
    insert into LN_contrapartes_queue (contraparte,id_taken) 
    select LN_contrapartes.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken 
    from LN_contrapartes
    left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte
    where LN_contrapartes.contraparte = @p_contraparte 
      and LN_contrapartes.activo = 1 
    --and iif(LN_contrapartes.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1

  end
  if (@p_cuit is not null) 
  begin

   /* Modificado 22/01/2020 si es prepago y no existe pago aprobado no lo va a insertar para que procese */
   insert into LN_contrapartes_queue (contraparte,id_taken) 
   select a.contraparte, 1.0 + floor(10 * RAND(convert(varbinary, newid()))) as id_taken 
   from ln_contrapartes  a
   left outer join pagos_transacciones on a.contraparte = pagos_transacciones.contraparte
   where a.activo = 1 
     and a.id_padron in (select id_padron from padrones where identificacion = @p_cuit)
     and not exists (select top 1 * from LN_contrapartes_queue b where b.contraparte = a.contraparte and b.processed = 0)
   --and iif(a.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1

    --and not exists (select * from ln_contrapartes_queue c where c.contraparte = a.contraparte and c.processed = 1 and c.created >= dateadd(minute,(-60),getdate())) 
  end
 end
 
 declare @gestion int 
 declare @cliente int 

 

 if (@accion = 'update') begin

  if (@p_queue_id is not null)
   update LN_contrapartes_queue set processed = 1, finished = getdate() where queue_id = @p_queue_id
   /* 
    -- NOVIEMBRE 14 2021 NO REMOVER HASTA HABLAR CON ALEJANDRO 
    UPDATE ln_contraparte_indicadores SEt valor_texto='AA',valor_numerico=1 where indicador in (384) and valor_texto='AA'
    UPDATE ln_contraparte_indicadores SEt valor_texto='PR',valor_numerico=2 where indicador in (384) and valor_texto='PR'
    UPDATE ln_contraparte_indicadores SEt valor_texto='NA',valor_numerico=3 where indicador in (384) and valor_texto='NA'
    UPDATE ln_contraparte_indicadores SEt valor_texto='XX',valor_numerico=4 where indicador in (384) and valor_texto='XX'
    -- select * from ln_contraparte_indicadores where indicador in (324)
    UPDATE ln_contraparte_indicadores SEt valor_texto='C',valor_numerico=20 where indicador in (324) and valor_texto IS NULL
    UPDATE ln_contraparte_indicadores SEt valor_texto='D',valor_numerico=10 where indicador in (324) and valor_texto='10'
    UPDATE ln_contraparte_indicadores SEt valor_texto='C',valor_numerico=20 where indicador in (324) and valor_texto='20'
    UPDATE ln_contraparte_indicadores SEt valor_texto='D',valor_numerico=30 where indicador in (324) and valor_texto='30'
    UPDATE ln_contraparte_indicadores SEt valor_texto='CCC',valor_numerico=40 where indicador in (324) and valor_texto='40'
    UPDATE ln_contraparte_indicadores SEt valor_texto='B',valor_numerico=50 where indicador in (324) and valor_texto='50'
    UPDATE ln_contraparte_indicadores SEt valor_texto='BB',valor_numerico=60 where indicador in (324) and valor_texto='60'
    UPDATE ln_contraparte_indicadores SEt valor_texto='BBB',valor_numerico=70 where indicador in (324) and valor_texto='70'
    UPDATE ln_contraparte_indicadores SEt valor_texto='A',valor_numerico=80 where indicador in (324) and valor_texto='80'
    UPDATE ln_contraparte_indicadores SEt valor_texto='AA',valor_numerico=90 where indicador in (324) and valor_texto='90'
    UPDATE ln_contraparte_indicadores SEt valor_texto='AAA',valor_numerico=100 where indicador in (324) and valor_texto='100'
    -- NOVIEMBRE 14 2021 NO REMOVER HASTA HABLAR CON ALEJANDRO 
    */



   -- 17/11/2021:Si tiene el indicador DICTAMEN_VRM y esta en periodo de tolerancia, lo graba con valor -120 (en tolerancia) 
   -- (20/12/2021) Lo graba en tolerancia si esta vacio, sino deja el valor que ya tenia... 
   -- Cuando se pasa del periodo de tolerancia, lo pasa a NO APTO (si tiene el valor en tolerancia)
  
   declare @contraparte int
   declare @familia int 
   declare @carga_inicial bit 
   select @contraparte = contraparte from LN_contrapartes_queue where queue_id = @p_queue_id
   select @cliente = cliente, @carga_inicial = carga_inicial from LN_contrapartes where contraparte = @contraparte
   select @familia = familia from ln_contraparte_familias where contraparte = @contraparte
   select @gestion = gestion from ln_gestiones  where contraparte = @contraparte and vigente = 1 and desde <= getdate() and hasta >= getdate()

   -- Veo si tiene el producto DICTAMEN_VRM y el indicador DICTAMEN_VRM
      
   declare @numero int = null 
   declare @texto varchar(100) = null 
   declare @texto_largo varchar(max) = null 


   if   exists (select top 1 * from ln_cliente_productos   where cliente = @cliente and producto = 2080 and activo = 1)
   and  exists (select top 1 * from ln_familia_productos   where familia = @familia and producto = 2080 and activo = 1)
   and  exists (select top 1 * from ln_cliente_indicadores where cliente = @cliente and indicador = 384 and activo = 1) 
   begin 
   -- esta en carga inicial?

    if (@carga_inicial = 1) 
    begin 

     select @numero = desde, @texto = texto, @texto_largo = texto_largo
      from ln_cliente_nivel where indicador = 384 and cliente = @cliente and texto = 'ET' -- En Tolerancia

     if not exists (select contraparte, gestion, indicador
               from LN_contraparte_indicadores
            where contraparte = @contraparte
              and gestion = @gestion
              and visible = 1
              and indicador = 384)
     begin

      INSERT INTO LN_contraparte_indicadores
      (contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created )
      VALUES
      (@contraparte, @gestion, '384',@numero,@texto,@texto_largo,GETDATE() )
      
      exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','ET'
      
     end 
     else 
     begin
      --exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','ET'*/
      -- (20/12/2021) Lo graba en tolerancia si esta vacio, sino deja el valor que ya tenia... 
       if exists (select contraparte, gestion, indicador
             from LN_contraparte_indicadores
          where contraparte = @contraparte
            and gestion = @gestion
            and visible = 1
            and indicador = 384 and valor_numerico is null)

       begin
       exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','ET'
       end
     end 

    end
    else 
    begin 
     -- no esta en carga inicial, y el indicador dice EN TOLERANCIA, lo pasa a NO APTO

     select @numero = desde, @texto = texto, @texto_largo = texto_largo
      from ln_cliente_nivel where indicador = 384 and cliente = @cliente and texto = 'NA' -- No apto

     if exists (select contraparte, gestion, indicador
       from LN_contraparte_indicadores
       where contraparte = @contraparte
       and gestion = @gestion
       and visible = 1
       and indicador = 384
       and isnull(valor_texto,'ET') = 'ET')
     begin
      exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','NA'
     end 

     if not exists (select contraparte, gestion, indicador
       from LN_contraparte_indicadores
       where contraparte = @contraparte
       and gestion = @gestion
       and visible = 1
       and indicador = 384) 
      begin
      
      INSERT INTO LN_contraparte_indicadores
      (contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created )
      VALUES
      (@contraparte, @gestion, '384',@numero,@texto,@texto_largo,GETDATE() )
       
      exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','NA'
      
      end 
    end
   end

    
  







 end

 if (@accion = 'indicadores') begin

  if (@p_contraparte is not null)

   select LN_indicadores.clave_indicador, ln_productos.producto_id, 
        LN_indicadores.producto, LN_indicadores.indicador, 
     LN_productos.country_code, identificadores.country_code as pais_contraparte,
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    ISNULL( ISNULL(DATEDIFF(DAY, LN_contraparte_indicadores.modified, getdate()), DATEDIFF(DAY, LN_contraparte_indicadores.created, getdate())) , 100) AS dias,

    show = iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0))


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   left outer join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
   
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   /* 27/08/2024: Agregamos que tambien tome los 'D' Dependientes, porque cuando algo se actualiza por BD no calcula los indicadores dependientes */
   and LN_indicadores.valoracion in ( 'A' , 'D' )
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden

 end


 if (@accion = 'indicadores_scores') begin

  if (@p_contraparte is not null)

   select LN_contrapartes.contraparte, LN_indicadores.indicador,
     LN_indicadores.nombre_indicador, LN_indicadores.clave_indicador,
     LN_indicadores.etiqueta as etiqueta_indicador,
     LN_indicadores.producto, LN_productos.nombre_producto,
     LN_productos.producto_id, 
     LN_cliente_productos.ponderacion, 
     LN_productos.etiqueta

   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
 
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   --and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   -- and clave_indicador like 'SCORE%' and clave_indicador != 'SCORE_FINAL' and ponderacion != 0
   -- 19/04/22:
   and ((clave_indicador like 'SCORE%' and ponderacion != 0) OR  clave_indicador = 'SCORE_FINAL' )


   order by LN_cliente_productos.orden_producto, LN_indicadores.orden
   

 end


 if (@accion = 'indicadores_vrm_score') begin

  if (@p_contraparte is not null)

   select LN_contrapartes.contraparte, LN_indicadores.indicador,
     LN_indicadores.nombre_indicador, LN_indicadores.clave_indicador,
     LN_indicadores.etiqueta as etiqueta_indicador,
     LN_indicadores.producto, LN_productos.nombre_producto,
     LN_productos.producto_id, 
     LN_cliente_productos.ponderacion, 
     LN_productos.etiqueta

   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
 
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   --and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   and clave_indicador like 'VRM_SCORE%' /*and ponderacion != 0*/
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden
   

 end



 
 if (@accion = 'indicadores_scores_arcor') begin

  if (@p_contraparte is not null)

   select LN_contrapartes.contraparte, LN_indicadores.indicador,
     LN_indicadores.nombre_indicador, LN_indicadores.clave_indicador,
     LN_indicadores.etiqueta as etiqueta_indicador,
     LN_indicadores.producto, LN_productos.nombre_producto,
     LN_productos.producto_id, 
     LN_cliente_productos.ponderacion, 
     LN_productos.etiqueta

   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
 
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   --and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   and clave_indicador like 'ARCOR_%' /*and ponderacion != 0*/
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden
   

 end








 /*
  if (@accion = 'indicadores_anteriores') begin
 
  if (isnull(@p_contraparte,'0') != 0) 
  begin
  if (exists (select * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte)) 
  begin
  delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte
  end 
  insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
  gestion,
  producto,
  indicador,
  clave_indicador,
  anterior_nuevo, 
  actualizado,
  valor_numerico,
  valor_texto,
  valor_memo,
  valor_fecha)
 
  select LN_contrapartes.contraparte, 
  ln_gestiones.gestion, 
  LN_indicadores.producto, LN_indicadores.indicador, 
      LN_indicadores.clave_indicador, 'A', 
  ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
  LN_contraparte_indicadores.valor_numerico,
  LN_contraparte_indicadores.valor_texto,
  LN_contraparte_indicadores.valor_memo,
  LN_contraparte_indicadores.valor_fecha 
 
  from LN_contrapartes 
  inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
  inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
  and LN_cliente_productos.producto = LN_familia_productos.producto)
  inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
  inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
  AND LN_cliente_productos.cliente = LN_familias.cliente)
  inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
  inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
  inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
  inner join identificadores on padrones.identificador = identificadores.identificador
 
  inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
  AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
  AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
 
  where LN_contraparte_familias.contraparte = @p_contraparte
  and LN_indicadores.valoracion = 'A'
  and LN_cliente_productos.activo = 1
  and LN_familia_productos.activo = 1
  and LN_familias.visible = 1
  and LN_contraparte_familias.activo = 1
  and LN_contraparte_indicadores.visible = 1
  and LN_gestiones.desde <= GETDATE()
  and LN_gestiones.hasta >= GETDATE()
 
  select 'ok' as estado
  end
  else 
  begin
  select 'sin contraparte' as estado
  end 
  end 
 
  if (@accion = 'indicadores_nuevos') begin
 
  if (isnull(@p_contraparte,'0') != 0) 
  begin
 
  if (exists (select * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N')) 
  begin
  delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N'
  end
  insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
  gestion,
  producto,
  indicador,
  clave_indicador,
  anterior_nuevo, 
  actualizado,
  valor_numerico,
  valor_texto,
  valor_memo,
  valor_fecha)
 
  select LN_contrapartes.contraparte, 
  ln_gestiones.gestion, 
  LN_indicadores.producto, LN_indicadores.indicador, 
      LN_indicadores.clave_indicador, 'N',
  ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
  LN_contraparte_indicadores.valor_numerico,
  LN_contraparte_indicadores.valor_texto,
  LN_contraparte_indicadores.valor_memo,
  LN_contraparte_indicadores.valor_fecha
 
 
  from LN_contrapartes 
  inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
  inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
  and LN_cliente_productos.producto = LN_familia_productos.producto)
  inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
  inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
  AND LN_cliente_productos.cliente = LN_familias.cliente)
  inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
  inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
  inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
  inner join identificadores on padrones.identificador = identificadores.identificador
 
  inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
  AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
  AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
 
  where LN_contraparte_familias.contraparte = @p_contraparte
  and LN_indicadores.valoracion = 'A'
  and LN_cliente_productos.activo = 1
  and LN_familia_productos.activo = 1
  and LN_familias.visible = 1
  and LN_contraparte_familias.activo = 1
  and LN_contraparte_indicadores.visible = 1
  and LN_gestiones.desde <= GETDATE()
  and LN_gestiones.hasta >= GETDATE()
 
  declare @created datetime = getdate()
  insert into trazabilidad(texto, cliente, accion, id_plataforma, contraparte, user_id, created, 
  fecha_old, 
  valor_numerico_old, 
  valor_texto_old, 
  valor_memo_old, 
  valor_fecha_old, 
  fecha_new, 
  valor_numerico_new,
  valor_texto_new,
  valor_memo_new,
  valor_fecha_new) 
  select  'Cambio ' + LN_indicadores.nombre_indicador  as texto, 
  LN_contrapartes.cliente as cliente, 
  upper(LN_indicadores.clave_indicador) as accion, 
  'INDICADOR' as id_plataforma, 
  a.contraparte as contraparte, 
  null as user_id, 
  @created as created, 
  b.actualizado    as fecha_old, 
  b.valor_numerico as valor_numerico_old, 
  b.valor_texto    as valor_texto_old, 
  b.valor_memo     as valor_memo_old, 
  b.valor_fecha    as valor_fecha_old, 
  a.actualizado    as fecha_new, 
  a.valor_numerico as valor_numerico_new,
  a.valor_texto    as valor_texto_new,
  a.valor_memo     as valor_memo_new,
  a.valor_fecha    as valor_fecha_new 
 
  from [LN_contraparte_indicadores_trazabilidad] a  -- nuevo
  inner join [LN_contraparte_indicadores_trazabilidad] b -- anterior 
   on (b.contraparte   = a.contraparte
   and b.gestion   = a.gestion 
   and b.producto  = a.producto 
   and b.indicador = a.indicador) 
  inner join LN_indicadores on LN_indicadores.indicador = a.indicador and LN_indicadores.producto = a.producto 
  inner join LN_contrapartes on LN_contrapartes.contraparte = a.contraparte    
  where a.contraparte = @p_contraparte
    and a.anterior_nuevo = 'N' 
    and b.anterior_nuevo = 'A'
    and (
    ((b.valor_numerico is not null and a.valor_numerico is null) or (b.valor_numerico is null and a.valor_numerico is not null) or  b.valor_numerico != a.valor_numerico)
    or 
    ((b.valor_texto is not null and a.valor_texto is null) or (b.valor_texto is null and a.valor_texto is not null) or b.valor_texto != a.valor_texto)
    or 
    ((b.valor_fecha is not null and a.valor_fecha is null) or (b.valor_fecha is null and a.valor_fecha is not null) or b.valor_fecha != a.valor_fecha)
    or 
    ((b.valor_memo is not null and a.valor_memo is null) or (b.valor_memo is null and a.valor_memo is not null) or convert(varchar(max),b.valor_memo) != convert(varchar(max),a.valor_memo))
    )
  select 'ok' as estado, 
  ln_contrapartes.cliente, 
  padrones.identificacion as cuit, 
  texto as texto, 
  accion as accion,  
  convert(varchar,fecha_old, 103) as fecha_old, 
  valor_numerico_old, 
  valor_texto_old, 
  valor_memo_old, 
  valor_fecha_old, 
  convert(varchar,fecha_new, 103) as fecha_new, 
  valor_numerico_new,
  valor_texto_new,
  valor_memo_new,
  valor_fecha_new
   from trazabilidad
   inner join LN_contrapartes on LN_contrapartes.contraparte = trazabilidad.contraparte
   inner join padrones on padrones.id_padron = LN_contrapartes.id_padron
   where trazabilidad.contraparte   =  @p_contraparte  
     and trazabilidad.created       = @created
     and trazabilidad.id_plataforma = 'INDICADOR'
  end
  else 
  begin
  select 'sin contraparte' as estado
  end 
  end 
  */


 
 declare @killer table (contraparte int, gestion int, detalle varchar(max))
 declare @puntos table (contraparte int, gestion int, detalle varchar(max))

 if (@accion = 'indicadores_anteriores') begin

  if (isnull(@p_contraparte,'0') != 0) 
  begin
   delete from @killer 
   delete from @puntos 
   insert into @killer exec LN_score_detalle_killer_ @p_contraparte
   insert into @puntos exec LN_score_detalle_puntos_ @p_contraparte

   --select * from @puntos 

   if (exists (select top 1  * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and visible = 1)) 
   begin
    --delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte
    update [LN_contraparte_indicadores_trazabilidad] set visible = 0 where contraparte = @p_contraparte and visible = 1
   end 
   insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
                 gestion,
                 producto,
                 indicador,
                 clave_indicador,
                 anterior_nuevo, 
                 actualizado,
                 valor_numerico,
                 valor_texto,
                 valor_memo,
                 valor_fecha,
                 detalle_killer,
                 detalle_puntos, visible)

   select LN_contrapartes.contraparte, 
    ln_gestiones.gestion, 
    LN_indicadores.producto, LN_indicadores.indicador, 
       LN_indicadores.clave_indicador, 'A', 
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    LN_contraparte_indicadores.valor_numerico,
    LN_contraparte_indicadores.valor_texto,
    LN_contraparte_indicadores.valor_memo,
    LN_contraparte_indicadores.valor_fecha, 
    /*killer.detalle_killer, 
     puntos.detalle
     */

    iif(LN_indicadores.clave_indicador='SCORE_FINAL',killerSF.detalle,killer.detalle_killer) as detalle_killer,
    iif(LN_indicadores.clave_indicador='SCORE_FINAL',puntosSF.detalle,puntos.detalle) as detalle, 1
   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
   inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
          AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
   left join ln_score_detalle_killer killer on (killer.contraparte = ln_contrapartes.contraparte
                                                and 
               killer.gestion = ln_gestiones.gestion
               and 
               killer.indicador = LN_contraparte_indicadores.indicador
               and 
               killer.visible = 1) 
   left join ln_score_detalle_puntos puntos on (puntos.contraparte = ln_contrapartes.contraparte
                                                and 
               puntos.gestion = ln_gestiones.gestion
               and 
               puntos.indicador = LN_contraparte_indicadores.indicador
               and 
               puntos.visible = 1) 
   left join @killer killerSF on killerSF.contraparte = ln_contrapartes.contraparte
   left join @puntos puntosSF on puntosSF.contraparte = ln_contrapartes.contraparte


   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familia_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_contraparte_indicadores.visible = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   select 'ok' as estado
  end
  else 
  begin
   select 'sin contraparte' as estado
  end 
 end 

 if (@accion = 'indicadores_nuevos') begin
 
  if (isnull(@p_contraparte,'0') != 0) 
  begin
   delete from @killer 
   delete from @puntos 
   insert into @killer exec LN_score_detalle_killer_ @p_contraparte
   insert into @puntos exec LN_score_detalle_puntos_ @p_contraparte
   
   --select * from @puntos 


   if (exists (select top 1 * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N' and visible = 1)) 
   begin
    --delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N'
    update [LN_contraparte_indicadores_trazabilidad] set visible = 0 where contraparte = @p_contraparte and anterior_nuevo = 'N' and visible = 1
   end
   insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
                 gestion,
                 producto,
                 indicador,
                 clave_indicador,
                 anterior_nuevo, 
                 actualizado,
                 valor_numerico,
                 valor_texto,
                 valor_memo,
                 valor_fecha,
                 detalle_killer,
                 detalle_puntos, 
                 visible)

   select LN_contrapartes.contraparte, 
    ln_gestiones.gestion, 
    LN_indicadores.producto, LN_indicadores.indicador, 
       LN_indicadores.clave_indicador, 'N',
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    LN_contraparte_indicadores.valor_numerico,
    LN_contraparte_indicadores.valor_texto,
    LN_contraparte_indicadores.valor_memo,
    LN_contraparte_indicadores.valor_fecha,
    /*killer.detalle_killer, 
     puntos.detalle
     */

    iif(LN_indicadores.clave_indicador='SCORE_FINAL',killerSF.detalle,killer.detalle_killer) as detalle_killer,
    iif(LN_indicadores.clave_indicador='SCORE_FINAL',puntosSF.detalle,puntos.detalle) as detalle, 1


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
   inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
          AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
            left join ln_score_detalle_killer killer on (killer.contraparte = ln_contrapartes.contraparte
                                                and 
               killer.gestion = ln_gestiones.gestion
               and 
               killer.indicador = LN_contraparte_indicadores.indicador
               and 
               killer.visible = 1) 
   left join ln_score_detalle_puntos puntos on (puntos.contraparte = ln_contrapartes.contraparte
                                                and 
               puntos.gestion = ln_gestiones.gestion
               and 
               puntos.indicador = LN_contraparte_indicadores.indicador
               and 
               puntos.visible = 1) 
   left join @killer killerSF on killerSF.contraparte = ln_contrapartes.contraparte
   left join @puntos puntosSF on puntosSF.contraparte = ln_contrapartes.contraparte

   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familia_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_contraparte_indicadores.visible = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()

   union all 

   select LN_contrapartes.contraparte, 
    ln_gestiones.gestion, 
    LN_indicadores.producto, LN_indicadores.indicador, 
       LN_indicadores.clave_indicador, 'N',
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    LN_contraparte_indicadores.valor_numerico,
    LN_contraparte_indicadores.valor_texto,
    LN_contraparte_indicadores.valor_memo,
    LN_contraparte_indicadores.valor_fecha,
    null,
    null, 1


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
   inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
          AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)

   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion in ('F','C')
   and LN_cliente_productos.activo = 1
   and LN_familia_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_contraparte_indicadores.visible = 1
   and LN_contraparte_indicadores.modified >= getdate()-700
   and not exists (select top 1 * from trazabilidad where contraparte = @p_contraparte 
                                                and id_plataforma = 'INDICADOR' 
               and accion = upper(LN_indicadores.clave_indicador)
               and created >= LN_contraparte_indicadores.modified)
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   
   declare @created datetime = getdate()
   insert into trazabilidad(texto, cliente, accion, id_plataforma, contraparte, user_id, created, 
         fecha_old, 
         valor_numerico_old, 
         valor_texto_old, 
         valor_memo_old, 
         valor_fecha_old, 
         detalle_killer_old,
         detalle_puntos_old,
         fecha_new, 
         valor_numerico_new,
         valor_texto_new,
         valor_memo_new,
         valor_fecha_new,
         detalle_killer_new,
         detalle_puntos_new)
   
         
   select  'Cambio ' + LN_indicadores.nombre_indicador  as texto, 
     LN_contrapartes.cliente as cliente, 
     upper(LN_indicadores.clave_indicador) as accion, 
     'INDICADOR' as id_plataforma, 
     a.contraparte as contraparte, 
     null as user_id, 
     @created as created, 
     b.actualizado    as fecha_old, 
     b.valor_numerico as valor_numerico_old, 
     b.valor_texto    as valor_texto_old, 
     b.valor_memo     as valor_memo_old, 
     b.valor_fecha    as valor_fecha_old,
     b.detalle_killer as detalle_killer_old,
     b.detalle_puntos as detalle_puntos_old,
     a.actualizado    as fecha_new, 
     a.valor_numerico as valor_numerico_new,
     a.valor_texto    as valor_texto_new,
     a.valor_memo     as valor_memo_new,
     a.valor_fecha    as valor_fecha_new ,
     a.detalle_killer as detalle_killer_new,
     a.detalle_puntos as detalle_puntos_new

    from [LN_contraparte_indicadores_trazabilidad] a  -- nuevo
    left join [LN_contraparte_indicadores_trazabilidad] b -- anterior 
                  on (b.contraparte   = a.contraparte
                  and b.gestion   = a.gestion 
                  and b.producto  = a.producto 
                  and b.indicador = a.indicador and b.visible = 1) 
    inner join LN_indicadores on LN_indicadores.indicador = a.indicador and LN_indicadores.producto = a.producto 
    inner join LN_contrapartes on LN_contrapartes.contraparte = a.contraparte                
    where a.contraparte = @p_contraparte
      and a.anterior_nuevo = 'N' and a.visible = 1
      and isnull(b.anterior_nuevo,'A') = 'A'
      and (
      ((b.valor_numerico is not null and a.valor_numerico is null) or (b.valor_numerico is null and a.valor_numerico is not null) or  b.valor_numerico != a.valor_numerico)
      or 
      ((b.valor_texto is not null and a.valor_texto is null) or (b.valor_texto is null and a.valor_texto is not null) or b.valor_texto != a.valor_texto)
      or 
      ((b.valor_fecha is not null and a.valor_fecha is null) or (b.valor_fecha is null and a.valor_fecha is not null) or b.valor_fecha != a.valor_fecha)
      or 
      ((b.valor_memo is not null and a.valor_memo is null) or (b.valor_memo is null and a.valor_memo is not null) or convert(varchar(max),b.valor_memo) != convert(varchar(max),a.valor_memo))
      )

    /* 02/05/2023 PRUEBA!! */ 
    --insert into LN_contrapartes_queue(contraparte) values (196593)
    --if (@p_contraparte = 196593) set @created = '2023-03-14 16:36:38.987'
    /* SACAR esto de arriba */ 

    select  distinct 'ok' as estado, 
      ln_contrapartes.cliente, 
      padrones.identificacion as cuit, 
      texto as texto, 
      accion as accion,  
      convert(varchar,fecha_old, 103) as fecha_old, 
      valor_numerico_old, 
      valor_texto_old, 
      convert(varchar(max),valor_memo_old) as valo_memo_old, 
      valor_fecha_old, 
      detalle_killer_old,
      detalle_puntos_old,
      convert(varchar,fecha_new, 103) as fecha_new, 
      valor_numerico_new,
      valor_texto_new,
      convert(varchar(max),valor_memo_new) as valor_memo_new,
      valor_fecha_new,
      detalle_killer_new,
      detalle_puntos_new
     from trazabilidad
     inner join LN_contrapartes on LN_contrapartes.contraparte = trazabilidad.contraparte
     inner join padrones on padrones.id_padron = LN_contrapartes.id_padron
     where trazabilidad.contraparte   =  @p_contraparte  
       and trazabilidad.created       = @created
       and trazabilidad.id_plataforma = 'INDICADOR'
  end
  else 
  begin
   select 'sin contraparte' as estado
  end 
 end 


 -- Dada la contraparte, clave indicador, familia guarda en la tabla contraparte_indicadores el dato de la famillia a la que pertenecía al momento de ser calculado el indicador.
 if(@accion = 'actualizar_familia') begin
  if (@p_contraparte is not null AND @p_clave_indicador is not null AND @p_familia is not null) begin
   update LN_contraparte_indicadores set familia = @p_familia
   from LN_contraparte_indicadores
   inner join LN_indicadores on LN_contraparte_indicadores.indicador = LN_indicadores.indicador
   inner join LN_gestiones on (LN_contraparte_indicadores.contraparte = LN_gestiones.contraparte
          and LN_contraparte_indicadores.gestion = LN_gestiones.gestion)
   where LN_indicadores.clave_indicador = @p_clave_indicador
   and LN_contraparte_indicadores.contraparte = @p_contraparte
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
  end
 end
 
 declare @indicador int = null 
 declare @indicadores table (clave_indicador varchar(100),
        prod varchar(50),
                          producto int,  
        indicador int, country_code varchar(10), 
        pais_contratante varchar(100), actualizado datetime, 
        dias int, show int)

 /* 18/03/2022: Se agregan 2 acciones 
  'indicadores_manuales': Busca si la contraparte tienen indicadores no automáticos
  'completa_indicadores': Si algún indicador que se muestra en el panel (en la tabla LN_indicadores visible = 1) 
                          no está en la tabla ln_contraparte_indicadores lo inserta con los valores nulos
  Esto es para que si aún no se puede calcular, el registro esté (y lo mostremos en el panel, como aún no calculado)
  Si al calcularlo obtiene valor va a hacer el update de ese mismo registro
  */

 if (@accion = 'indicadores_manuales' and @p_contraparte is not null ) begin

   select LN_indicadores.clave_indicador, ln_productos.producto_id, 
        LN_indicadores.producto, LN_indicadores.indicador, 
     LN_productos.country_code, identificadores.country_code as pais_contraparte,
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    ISNULL( ISNULL(DATEDIFF(DAY, LN_contraparte_indicadores.modified, getdate()), DATEDIFF(DAY, LN_contraparte_indicadores.created, getdate())) , 100) AS dias,

    show = iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0))


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   left outer join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
   
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion != 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden

 end


 if(@accion = 'completa_indicadores' and @p_contraparte is not null ) begin
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores', NULL, @p_contraparte
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores_manuales', NULL, @p_contraparte

  INSERT INTO LN_contraparte_indicadores
   (contraparte, gestion, indicador, visible, created,familia)
   select G.contraparte, G.gestion, I.indicador, 1, GETDATE(), F.familia
     from LN_gestiones G
       inner join @indicadores I on 1=1
       inner join LN_contraparte_familias F on (F.contraparte = G.contraparte and F.activo = 1) 
       inner join LN_indicadores IND on (IND.indicador = I.indicador and IND.visible = 1) 
    where G.contraparte = @p_contraparte
    and G.desde <= GETDATE()
    and G.hasta >= GETDATE()
    and G.vigente = 1
    and not exists (SELECT indicador
        FROM LN_contraparte_indicadores CI
       WHERE CI.indicador = I.indicador
         AND CI.contraparte = @p_contraparte
         AND CI.gestion = G.gestion
         AND CI.visible = 1)
 end
 /* Fin 18/03/2022 */


 -- si en la tabla ln_contraparte_indicadores hay indicadores de calculo automatico que ya no le corresponden, 
 -- lo pasa como no visible 
 -- O si no son de la familia actual, lo pasa a no visible 
 if(@accion = 'indicadores_novisibles' and @p_contraparte is not null ) begin

  -- Que no sean de la familia actual:

  update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and familia not in (select F.familia from ln_contraparte_familias F
                            where F.contraparte = @p_contraparte and F.activo = 1)
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A'


  -- Que sean indicadores que ya no le corresponden:
 
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores', NULL, @p_contraparte
   
  DECLARE C_Ind CURSOR FOR
    select distinct CI.gestion, CI.indicador 
      from LN_contraparte_indicadores CI
         inner join LN_gestiones G on (G.contraparte = CI.contraparte and G.gestion = CI.gestion)
         inner join LN_Indicadores I on I.indicador = CI.indicador 
      where CI.contraparte = @p_contraparte 
      and G.desde <= GETDATE()
      and G.hasta >= GETDATE()
      and I.valoracion = 'A'
      and CI.visible = 1 
      and CI.indicador not in (select indicador from @indicadores)

  OPEN C_Ind
  FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  WHILE @@fetch_status = 0
  BEGIN 
   update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
    where contraparte = @p_contraparte 
      and gestion = @gestion 
      and indicador = @indicador 
   FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  END 
  CLOSE C_Ind
  DEALLOCATE C_Ind

 end

 -- si en la tabla ln_contraparte_indicadores hay indicadores de calculo automatico que ya no le corresponden, 
 -- lo borra 
 -- O si no son de la familia actual, tambien los borra
 -- Si tiene indicadores que estaban en visible = 0, tambien los borra
 -- Los borramos para que llegado el caso que haya que calcularlos nuevamente, 
 -- no de conficto de clave duplicada por contraparte - gestion - indicador 
 if(@accion = 'indicadores_delete' and @p_contraparte is not null ) begin

  -- Que esten como no visibles:
  if exists(select top 1 * from LN_contraparte_indicadores 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and visible = 0
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A')
  begin
    --delete from LN_contraparte_indicadores
    update LN_contraparte_indicadores set gestion = 0 
      where contraparte = @p_contraparte 
        and gestion in ( select G.gestion from LN_gestiones G 
           where G.contraparte = @p_contraparte 
             and G.desde <= GETDATE()
             and G.hasta >= GETDATE())
        and visible = 0
        and (select valoracion from LN_indicadores 
        where indicador = ln_contraparte_indicadores.indicador) = 'A'
  end 


  -- Que no sean de la familia actual:

  -- update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
  if exists(select top 1 * from LN_contraparte_indicadores 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and familia not in (select F.familia from ln_contraparte_familias F
                            where F.contraparte = @p_contraparte and F.activo = 1)
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A')
  begin
   --delete from LN_contraparte_indicadores
   update LN_contraparte_indicadores set gestion = 0 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and familia not in (select F.familia from ln_contraparte_familias F
                            where F.contraparte = @p_contraparte and F.activo = 1)
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A'
  end 

  -- Que sean indicadores que ya no le corresponden:
 
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores', NULL, @p_contraparte
   
  DECLARE C_Ind CURSOR FOR
    select distinct CI.gestion, CI.indicador 
      from LN_contraparte_indicadores CI
         inner join LN_gestiones G on (G.contraparte = CI.contraparte and G.gestion = CI.gestion)
         inner join LN_Indicadores I on I.indicador = CI.indicador 
      where CI.contraparte = @p_contraparte 
      and G.desde <= GETDATE()
      and G.hasta >= GETDATE()
      and I.valoracion = 'A'
      and CI.visible = 1 
      and CI.indicador not in (select indicador from @indicadores)

  OPEN C_Ind
  FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  WHILE @@fetch_status = 0
  BEGIN 
   --update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 

   --delete from LN_contraparte_indicadores
   update LN_contraparte_indicadores set gestion = 0    
    where contraparte = @p_contraparte 
      and gestion = @gestion 
      and indicador = @indicador 
   FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  END 
  CLOSE C_Ind
  DEALLOCATE C_Ind

 end


 if(@accion = 'indicadores_autocompletar' and @p_contraparte is not null ) 
 begin
  declare @servicio_contratado int = null 
  select @cliente = cliente, @servicio_contratado = servicio_contratado 
    from LN_contrapartes where contraparte = @p_contraparte
  if exists (select top 1 * from LN_indicadores_autocompletar i 
              where i.cliente = @cliente and i.servicio_contratado = @servicio_contratado) 
  begin
   EXEC [LN_indicadores_autocompletar_] @p_contraparte
  end
 end 





END

GO