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: <08/11/2022>
-- Description: Cálculo de Scores de ARCOR
-- IMPORTANTE: Cuando se llama con la accion 'ARCOR_FINAL'
-- se calculan todas las demas para luego guardar el resultado final en el indicador ARCOR_FINAL
-- por lo cual, con esa accion por cada contraparte sera suficiente,
-- en el queue solo vamos a llamarlo con el indicador ARCOR_FINAL
-- y en el queue lo llamamos ultimo, para que ya se hayan calculado
-- la de Apocrifas/Fidecheck/Aportes y Contribuciones que se necesitan
-- =============================================
*/
/*
exec [LN_scores_ARCOR] 'ARCOR_final',194098
select * from ln_contrapartes where contraparte = 196342
select max(monto) from LN_dias_alertas where cliente = 861672084 and tabla = 'cendeu'
*/
CREATE OR ALTER PROCEDURE dbo.LN_scores_ARCOR
@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 @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
declare @nombre_indicador varchar(100) = null -- de los indicadores a tener en cuenta
declare @clave_indicador varchar(100) = null
declare @detallep varchar(max) = 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)
begin
select 'Sin gestion o cliente'
return
end
--> Para ver si la contraparte tiene el indicador activo
set @indic_accion = null
set @nombre_indic_accion = null
SELECT @indic_accion = LN_indicadores.indicador, @nombre_indic_accion = LN_indicadores.nombre_indicador
FROM LN_indicadores
INNER JOIN LN_productos ON LN_indicadores.producto = LN_productos.producto
INNER JOIN LN_familia_productos ON LN_productos.producto = LN_familia_productos.producto
INNER JOIN LN_contraparte_familias ON LN_familia_productos.familia = LN_contraparte_familias.familia
INNER JOIN LN_gestiones ON LN_contraparte_familias.contraparte = LN_gestiones.contraparte
INNER JOIN LN_contrapartes on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
INNER JOIN LN_cliente_indicadores ON (LN_cliente_indicadores.indicador = LN_indicadores.indicador and LN_cliente_indicadores.cliente = LN_contrapartes.cliente )
WHERE LN_indicadores.clave_indicador = @accion
AND LN_contraparte_familias.contraparte = @contraparte
AND LN_productos.visible = 1
--AND LN_indicadores.visible = 1 -- Estos tienen visible = 0, porque no se ven en el panel, por eso le saco esta condicion
AND LN_contraparte_familias.activo = 1
AND LN_cliente_indicadores.activo = 1
AND LN_familia_productos.activo = 1
AND LN_gestiones.desde <= getdate()
AND LN_gestiones.hasta >= getdate()
AND LN_gestiones.vigente = 1
if (@indic_accion is null)
begin
select @contraparte, 'Indicador no se calcula'
return
end
/* */
select @valor_numerico_ant = valor_numerico,
@valor_texto_ant = valor_texto,
@valor_memo_ant = convert(varchar(100),valor_memo)
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion
/* ------------------------------------------------------------------- */
/* Acciones */
--declare @tiene_indicador int = (select COUNT(*) from LN_cliente_indicadores where cliente = @cliente and indicador = @indic_accion)
--lo hace arriba y sale por @indic_accion is null ('Indicador no se calcula')
IF (@accion = 'ARCOR_INFORME')
BEGIN
set @valor_texto = null
set @detallep = null
declare @sc_informe int = null
select @sc_informe = 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 = 'SCORE_IC'
and ln_contraparte_indicadores.visible = 1
if (@sc_informe < 40)
begin
set @valor_texto = 'R'
set @detallep = 'SCORE INFORME COMERCIAL: menor a 40'
end
if (@sc_informe >= 40 and @sc_informe < 70)
begin
set @valor_texto = 'A'
set @detallep = 'SCORE INFORME COMERCIAL: entre 40 y 70'
end
if (@sc_informe >= 70)
begin
set @valor_texto = 'V'
set @detallep = 'SCORE INFORME COMERCIAL: mayor a 70'
end
END
IF (@accion = 'ARCOR_BCRA') /*
SIT BANCARIA
Sit 1 - Verde
Sit 2 - Amarillo
Sit 3 o peor - Rojo
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
declare @peor int = null
declare @mes_bcra varchar(6) = null
declare @monto int = null
declare @monto_bcra bigint = 0
select @peor = valor_numerico, @mes_bcra = 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 = 'SITUACION_CD'
and ln_contraparte_indicadores.visible = 1
-- Si en la tabla dias_alerta tienen considerado montos (x ej Sanofi)
select @monto = max(monto) from LN_dias_alertas where cliente = @cliente and tabla = 'cendeu'
if (@monto is not null) -- hay que tener en cuenta el monto
begin
declare @bancos table (fec_inf varchar(6), banco varchar(100), situacion int, deuda numeric(12,2))
insert into @bancos
exec obtener_bancos_test @cuit
select @monto_bcra = SUM(deuda) from @bancos where fec_inf = @mes_bcra and situacion = @peor
set @monto_bcra = @monto_bcra * 1000 -- porque el dato viene en miles
end
if (@monto is null)
begin
if (@peor >= 3)
begin
set @valor_texto = 'R'
set @detallep = 'SIT BANCARIA: Sit 3 o peor'
end
if (@peor = 2)
begin
set @valor_texto = 'A'
set @detallep = 'SIT BANCARIA: Sit 2'
end
if (@peor = 1)
begin
set @valor_texto = 'V'
set @detallep = 'SIT BANCARIA: Sit 1'
end
end
else
begin
if (@peor >= 3 and @monto_bcra >= @monto)
begin
set @valor_texto = 'R'
set @detallep = 'SIT BANCARIA: Sit 3 o peor y monto mayor a $' + format(@monto, '###,###,##0.00')
end
if (@peor = 2 and @monto_bcra >= @monto)
begin
set @valor_texto = 'A'
set @detallep = 'SIT BANCARIA: Sit 2 y monto mayor a $' + format(@monto, '###,###,##0.00')
end
if (@peor = 1)
begin
set @valor_texto = 'V'
set @detallep = 'SIT BANCARIA: Sit 1'
end
else
begin
if (@peor > 1 and @monto_bcra < @monto)
begin
set @valor_texto = 'V'
set @detallep = 'SIT BANCARIA: Sit ' + format(@peor,'#0') + ' monto < $ ' + format(@monto, '###,###,##0.00')
end
end
end
end
END
IF (@accion = 'ARCOR_CHEQUES') /*
CHEQUES SF
Sin cheques - Verde
1 a 3 cheques en el último año - Amarillo
Más de 3 cheques en el último año - Rojo
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
declare @total_cheques int = 0
/*
select @total_cheques = count(*)
from ChequesBCRA
where cuit_firmante = @cuit and Cuit_relacionado is null
AND id_cheque = (select max(id_cheque) from chequesBCRA b
where b.cuit_firmante = chequesBCRA.cuit_firmante
and b.nro_cheque = chequesBCRA.nro_cheque
and b.visible = 1)
AND visible = 1
AND fecha_levantamiento is null
AND fecha_rechazo >= getdate() - 365
AND ChequesBCRA.id_causa = 2
*/
/* No lo calculamos, lo tomamos del indicador */
select @total_cheques = 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 = 'CHEQUES_RECH'
and ln_contraparte_indicadores.visible = 1
if (@total_cheques = 0)
begin
set @valor_texto = 'V'
set @detallep = 'CHEQUES SF: Sin cheques'
end
if (@total_cheques > 3)
begin
set @valor_texto = 'R'
set @detallep = 'CHEQUES SF: Más de 3 cheques en el último año'
end
if (@total_cheques > 0 and @total_cheques <= 3)
begin
set @valor_texto = 'A'
set @detallep = 'CHEQUES SF: 1 a 3 cheques en el último año'
end
end
END
IF (@accion = 'ARCOR_JUDICIAL') /*
SIT JUDICIAL
Evento menor a 2 años - Rojo
Evento mayor a 2 años - Amarillo
Sin Eventos - Verde
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
if (@cliente != 861672084) -- No es arcor
begin
declare @score_judicial int = null
select @score_judicial = 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 = 'SCORE_JUDICIAL'
and ln_contraparte_indicadores.visible = 1
if (@score_judicial is null) set @score_judicial = 100
if (@score_judicial >= 61)
begin
set @valor_texto = 'V'
set @detallep = 'SIT JUDICIAL: Score Judicial > 60'
end
if (@score_judicial >= 41 and @score_judicial < 61)
begin
set @valor_texto = 'A'
set @detallep = 'SIT JUDICIAL: Score Judicial entre 40 y 60'
end
if (@score_judicial >= 0 and @score_judicial < 41)
begin
set @valor_texto = 'R'
set @detallep = 'SIT JUDICIAL: Score Judicial menor a 40'
end
end
else
begin -- Para ARCOR
declare @fecha_juicios date = null
select @fecha_juicios = max(fecha_causa) from juicios
inner join tipos_causas on
tipos_causas.id_tipo_causa = juicios.id_tipo_causa
left join tiempo_causas on
tiempo_causas.cau_codigo = juicios.id_tipo_causa
left join padrones AS pf ON (pf.identificacion = cuit_actor)
WHERE cuit_demandado = @cuit
and juicios.fecha_causa > GETDATE()-(isnull(tiempo,5)*365)
and juicios.visible = 1
if (@fecha_juicios is null)
begin
set @valor_texto = 'V'
set @detallep = 'SIT JUDICIAL: Sin Eventos'
end
if (@fecha_juicios >= getdate() - (365*2))
begin
set @valor_texto = 'R'
set @detallep = 'SIT JUDICIAL: Evento menor a 2 años'
end
if (@fecha_juicios < getdate() - (365*2))
begin
set @valor_texto = 'A'
set @detallep = 'SIT JUDICIAL: Evento mayor a 2 años'
end
end
end
END
IF (@accion = 'ARCOR_AYC') /* El peor de los indicadores de Deudas Previsionales
-- DP_301 (Aportes Exigibles s/ AFIP) y
-- DP_351 (Contribuciones Exigibles s/ AFIP)
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
declare @aportes int = null
declare @contribuciones int = null
select @aportes = 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 = 'DP_301'
and ln_contraparte_indicadores.visible = 1
select @contribuciones = 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 = 'DP_351'
and ln_contraparte_indicadores.visible = 1
if (@aportes = 1 or @contribuciones = 1)
begin
set @valor_texto = 'R'
set @detallep = 'APORTES Y CONTRIBUCIONES: Registra deuda'
end
if (@aportes = 0 and @contribuciones = 0)
begin
set @valor_texto = 'V'
set @detallep = 'APORTES Y CONTRIBUCIONES: No registra deuda'
end
end
END
IF (@accion = 'ARCOR_APOCRIFAS') /* Refleja el color del indicador APOCRIFAS */
BEGIN
declare @apocrifas int = null
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
select @apocrifas = 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 = 'APOCRIFAS'
and ln_contraparte_indicadores.visible = 1
if (@apocrifas = 1)
begin
set @valor_texto = 'R'
set @detallep = 'FACTURAS APÓCRIFAS: Posee'
end
if (@apocrifas = 0)
begin
set @valor_texto = 'V'
set @detallep = 'FACTURAS APÓCRIFAS: No Posee'
end
end
END
IF (@accion = 'ARCOR_FIDECHECK') /* Reflaje color del indicador FIDECHECK */
BEGIN
set @valor_texto = null
set @detallep = 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 = 'FIDECHECK'
and ln_contraparte_indicadores.visible = 1
set @detallep = CASE @valor_texto
WHEN 'P' THEN 'FIDECHECK: Positivo'
WHEN 'N' THEN 'FIDECHECK: Negativo'
WHEN 'S' THEN 'FIDECHECK: Sujeto Obligado'
WHEN 'E' THEN 'FIDECHECK: PEP'
WHEN 'R' THEN 'FIDECHECK: Relacionado'
else NULL
END
set @valor_texto = CASE @valor_texto
WHEN 'P' THEN 'R'
WHEN 'N' THEN 'V'
WHEN 'S' THEN 'V'
WHEN 'E' THEN 'A'
WHEN 'R' THEN 'A'
else NULL
END
END
IF (@accion = 'ARCOR_FINAL') /* El peor de todos los Scores anteriores */
BEGIN
set @valor_texto = null
set @detallep = null
EXEC [LN_scores_ARCOR] 'ARCOR_BCRA', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_CHEQUES', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_JUDICIAL', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_AYC', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_APOCRIFAS', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_FIDECHECK', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_INFORME', @contraparte, @p_user_id
if exists (select *
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 like 'ARCOR_%' and clave_indicador != 'ARCOR_FINAL'
and valor_texto = 'R'
and ln_contraparte_indicadores.visible = 1)
begin
set @valor_texto = 'R'
end
else
begin
if exists (select *
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 like 'ARCOR_%' and clave_indicador != 'ARCOR_FINAL'
and valor_texto = 'A'
and ln_contraparte_indicadores.visible = 1)
begin
set @valor_texto = 'A'
end
else
begin
if exists (select *
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 like 'ARCOR_%' and clave_indicador != 'ARCOR_FINAL'
and valor_texto = 'V'
and ln_contraparte_indicadores.visible = 1)
begin
set @valor_texto = 'V'
end
end
end
END
set @valor_numerico = null
if (@valor_texto = 'R') set @valor_numerico = 10
if (@valor_texto = 'A') set @valor_numerico = 50
if (@valor_texto = 'V') set @valor_numerico = 100
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_texto, valor_numerico, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_texto, @valor_numerico, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_texto = @valor_texto,
valor_numerico = @valor_numerico,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
/* Guarda los detalles del por que de los puntos asignados */
if exists (select * From ln_score_detalle_puntos
where contraparte = @contraparte
and gestion = @gestion
and indicador = @indic_accion
and detalle != isnull(@detallep,'')
and visible = 1)
UPDATE LN_score_detalle_puntos
set visible = 0, modified = getdate()
where contraparte = @contraparte
and gestion = @gestion
and indicador = @indic_accion
if (@detallep is not null and @valor_texto != 'V') --> Para que no guarde detalle cuando es verde
--if (@detallep is not null)
begin
if not exists (select * From ln_score_detalle_puntos
where contraparte = @contraparte
and gestion = @gestion
and indicador = @indic_accion
and detalle = isnull(@detallep,'')
and visible = 1)
insert into ln_score_detalle_puntos
(contraparte, gestion, indicador, detalle, visible, created)
values (@contraparte, @gestion, @indic_accion, @detallep, 1, getdate())
end
/* Si cambió el valor del indicador, guarda trazabilidad */
if (isnull(@valor_texto_ant,'') != isnull(@valor_texto,''))
begin
/* guarda trazabilidad del indicador calculado */
set @trazabilidad = 'Actualizado automáticamente: ' + @nombre_indic_accion + ': ' + isnull(@valor_texto,'-')
set @trazabilidad2 = 'CAMBIO_INDICADOR_'+convert(varchar,@indic_accion)
exec insertar_trazabilidad @trazabilidad, @cliente, @trazabilidad2,'WWW', @contraparte,1
end
--select @valor_texto
select @valor_texto_ant as valor_texto_ant, @valor_texto as valor_texto, @indic_accion as indicador
END
GO
GO
/*
-- =============================================
-- Author: <María Inés Soria>
-- Create date: <08/11/2022>
-- Description: Cálculo de Scores de ARCOR
-- IMPORTANTE: Cuando se llama con la accion 'ARCOR_FINAL'
-- se calculan todas las demas para luego guardar el resultado final en el indicador ARCOR_FINAL
-- por lo cual, con esa accion por cada contraparte sera suficiente,
-- en el queue solo vamos a llamarlo con el indicador ARCOR_FINAL
-- y en el queue lo llamamos ultimo, para que ya se hayan calculado
-- la de Apocrifas/Fidecheck/Aportes y Contribuciones que se necesitan
-- =============================================
*/
/*
exec [LN_scores_ARCOR] 'ARCOR_final',194098
select * from ln_contrapartes where contraparte = 196342
select max(monto) from LN_dias_alertas where cliente = 861672084 and tabla = 'cendeu'
*/
CREATE OR ALTER PROCEDURE dbo.LN_scores_ARCOR
@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 @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
declare @nombre_indicador varchar(100) = null -- de los indicadores a tener en cuenta
declare @clave_indicador varchar(100) = null
declare @detallep varchar(max) = 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)
begin
select 'Sin gestion o cliente'
return
end
--> Para ver si la contraparte tiene el indicador activo
set @indic_accion = null
set @nombre_indic_accion = null
SELECT @indic_accion = LN_indicadores.indicador, @nombre_indic_accion = LN_indicadores.nombre_indicador
FROM LN_indicadores
INNER JOIN LN_productos ON LN_indicadores.producto = LN_productos.producto
INNER JOIN LN_familia_productos ON LN_productos.producto = LN_familia_productos.producto
INNER JOIN LN_contraparte_familias ON LN_familia_productos.familia = LN_contraparte_familias.familia
INNER JOIN LN_gestiones ON LN_contraparte_familias.contraparte = LN_gestiones.contraparte
INNER JOIN LN_contrapartes on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
INNER JOIN LN_cliente_indicadores ON (LN_cliente_indicadores.indicador = LN_indicadores.indicador and LN_cliente_indicadores.cliente = LN_contrapartes.cliente )
WHERE LN_indicadores.clave_indicador = @accion
AND LN_contraparte_familias.contraparte = @contraparte
AND LN_productos.visible = 1
--AND LN_indicadores.visible = 1 -- Estos tienen visible = 0, porque no se ven en el panel, por eso le saco esta condicion
AND LN_contraparte_familias.activo = 1
AND LN_cliente_indicadores.activo = 1
AND LN_familia_productos.activo = 1
AND LN_gestiones.desde <= getdate()
AND LN_gestiones.hasta >= getdate()
AND LN_gestiones.vigente = 1
if (@indic_accion is null)
begin
select @contraparte, 'Indicador no se calcula'
return
end
/* */
select @valor_numerico_ant = valor_numerico,
@valor_texto_ant = valor_texto,
@valor_memo_ant = convert(varchar(100),valor_memo)
from LN_contraparte_indicadores
where contraparte = @contraparte
and gestion = @gestion
and visible = 1
and indicador = @indic_accion
/* ------------------------------------------------------------------- */
/* Acciones */
--declare @tiene_indicador int = (select COUNT(*) from LN_cliente_indicadores where cliente = @cliente and indicador = @indic_accion)
--lo hace arriba y sale por @indic_accion is null ('Indicador no se calcula')
IF (@accion = 'ARCOR_INFORME')
BEGIN
set @valor_texto = null
set @detallep = null
declare @sc_informe int = null
select @sc_informe = 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 = 'SCORE_IC'
and ln_contraparte_indicadores.visible = 1
if (@sc_informe < 40)
begin
set @valor_texto = 'R'
set @detallep = 'SCORE INFORME COMERCIAL: menor a 40'
end
if (@sc_informe >= 40 and @sc_informe < 70)
begin
set @valor_texto = 'A'
set @detallep = 'SCORE INFORME COMERCIAL: entre 40 y 70'
end
if (@sc_informe >= 70)
begin
set @valor_texto = 'V'
set @detallep = 'SCORE INFORME COMERCIAL: mayor a 70'
end
END
IF (@accion = 'ARCOR_BCRA') /*
SIT BANCARIA
Sit 1 - Verde
Sit 2 - Amarillo
Sit 3 o peor - Rojo
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
declare @peor int = null
declare @mes_bcra varchar(6) = null
declare @monto int = null
declare @monto_bcra bigint = 0
select @peor = valor_numerico, @mes_bcra = 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 = 'SITUACION_CD'
and ln_contraparte_indicadores.visible = 1
-- Si en la tabla dias_alerta tienen considerado montos (x ej Sanofi)
select @monto = max(monto) from LN_dias_alertas where cliente = @cliente and tabla = 'cendeu'
if (@monto is not null) -- hay que tener en cuenta el monto
begin
declare @bancos table (fec_inf varchar(6), banco varchar(100), situacion int, deuda numeric(12,2))
insert into @bancos
exec obtener_bancos_test @cuit
select @monto_bcra = SUM(deuda) from @bancos where fec_inf = @mes_bcra and situacion = @peor
set @monto_bcra = @monto_bcra * 1000 -- porque el dato viene en miles
end
if (@monto is null)
begin
if (@peor >= 3)
begin
set @valor_texto = 'R'
set @detallep = 'SIT BANCARIA: Sit 3 o peor'
end
if (@peor = 2)
begin
set @valor_texto = 'A'
set @detallep = 'SIT BANCARIA: Sit 2'
end
if (@peor = 1)
begin
set @valor_texto = 'V'
set @detallep = 'SIT BANCARIA: Sit 1'
end
end
else
begin
if (@peor >= 3 and @monto_bcra >= @monto)
begin
set @valor_texto = 'R'
set @detallep = 'SIT BANCARIA: Sit 3 o peor y monto mayor a $' + format(@monto, '###,###,##0.00')
end
if (@peor = 2 and @monto_bcra >= @monto)
begin
set @valor_texto = 'A'
set @detallep = 'SIT BANCARIA: Sit 2 y monto mayor a $' + format(@monto, '###,###,##0.00')
end
if (@peor = 1)
begin
set @valor_texto = 'V'
set @detallep = 'SIT BANCARIA: Sit 1'
end
else
begin
if (@peor > 1 and @monto_bcra < @monto)
begin
set @valor_texto = 'V'
set @detallep = 'SIT BANCARIA: Sit ' + format(@peor,'#0') + ' monto < $ ' + format(@monto, '###,###,##0.00')
end
end
end
end
END
IF (@accion = 'ARCOR_CHEQUES') /*
CHEQUES SF
Sin cheques - Verde
1 a 3 cheques en el último año - Amarillo
Más de 3 cheques en el último año - Rojo
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
declare @total_cheques int = 0
/*
select @total_cheques = count(*)
from ChequesBCRA
where cuit_firmante = @cuit and Cuit_relacionado is null
AND id_cheque = (select max(id_cheque) from chequesBCRA b
where b.cuit_firmante = chequesBCRA.cuit_firmante
and b.nro_cheque = chequesBCRA.nro_cheque
and b.visible = 1)
AND visible = 1
AND fecha_levantamiento is null
AND fecha_rechazo >= getdate() - 365
AND ChequesBCRA.id_causa = 2
*/
/* No lo calculamos, lo tomamos del indicador */
select @total_cheques = 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 = 'CHEQUES_RECH'
and ln_contraparte_indicadores.visible = 1
if (@total_cheques = 0)
begin
set @valor_texto = 'V'
set @detallep = 'CHEQUES SF: Sin cheques'
end
if (@total_cheques > 3)
begin
set @valor_texto = 'R'
set @detallep = 'CHEQUES SF: Más de 3 cheques en el último año'
end
if (@total_cheques > 0 and @total_cheques <= 3)
begin
set @valor_texto = 'A'
set @detallep = 'CHEQUES SF: 1 a 3 cheques en el último año'
end
end
END
IF (@accion = 'ARCOR_JUDICIAL') /*
SIT JUDICIAL
Evento menor a 2 años - Rojo
Evento mayor a 2 años - Amarillo
Sin Eventos - Verde
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
if (@cliente != 861672084) -- No es arcor
begin
declare @score_judicial int = null
select @score_judicial = 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 = 'SCORE_JUDICIAL'
and ln_contraparte_indicadores.visible = 1
if (@score_judicial is null) set @score_judicial = 100
if (@score_judicial >= 61)
begin
set @valor_texto = 'V'
set @detallep = 'SIT JUDICIAL: Score Judicial > 60'
end
if (@score_judicial >= 41 and @score_judicial < 61)
begin
set @valor_texto = 'A'
set @detallep = 'SIT JUDICIAL: Score Judicial entre 40 y 60'
end
if (@score_judicial >= 0 and @score_judicial < 41)
begin
set @valor_texto = 'R'
set @detallep = 'SIT JUDICIAL: Score Judicial menor a 40'
end
end
else
begin -- Para ARCOR
declare @fecha_juicios date = null
select @fecha_juicios = max(fecha_causa) from juicios
inner join tipos_causas on
tipos_causas.id_tipo_causa = juicios.id_tipo_causa
left join tiempo_causas on
tiempo_causas.cau_codigo = juicios.id_tipo_causa
left join padrones AS pf ON (pf.identificacion = cuit_actor)
WHERE cuit_demandado = @cuit
and juicios.fecha_causa > GETDATE()-(isnull(tiempo,5)*365)
and juicios.visible = 1
if (@fecha_juicios is null)
begin
set @valor_texto = 'V'
set @detallep = 'SIT JUDICIAL: Sin Eventos'
end
if (@fecha_juicios >= getdate() - (365*2))
begin
set @valor_texto = 'R'
set @detallep = 'SIT JUDICIAL: Evento menor a 2 años'
end
if (@fecha_juicios < getdate() - (365*2))
begin
set @valor_texto = 'A'
set @detallep = 'SIT JUDICIAL: Evento mayor a 2 años'
end
end
end
END
IF (@accion = 'ARCOR_AYC') /* El peor de los indicadores de Deudas Previsionales
-- DP_301 (Aportes Exigibles s/ AFIP) y
-- DP_351 (Contribuciones Exigibles s/ AFIP)
*/
BEGIN
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
declare @aportes int = null
declare @contribuciones int = null
select @aportes = 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 = 'DP_301'
and ln_contraparte_indicadores.visible = 1
select @contribuciones = 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 = 'DP_351'
and ln_contraparte_indicadores.visible = 1
if (@aportes = 1 or @contribuciones = 1)
begin
set @valor_texto = 'R'
set @detallep = 'APORTES Y CONTRIBUCIONES: Registra deuda'
end
if (@aportes = 0 and @contribuciones = 0)
begin
set @valor_texto = 'V'
set @detallep = 'APORTES Y CONTRIBUCIONES: No registra deuda'
end
end
END
IF (@accion = 'ARCOR_APOCRIFAS') /* Refleja el color del indicador APOCRIFAS */
BEGIN
declare @apocrifas int = null
set @valor_texto = null
set @detallep = null
if (@pais_contraparte = 'AR')
begin
select @apocrifas = 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 = 'APOCRIFAS'
and ln_contraparte_indicadores.visible = 1
if (@apocrifas = 1)
begin
set @valor_texto = 'R'
set @detallep = 'FACTURAS APÓCRIFAS: Posee'
end
if (@apocrifas = 0)
begin
set @valor_texto = 'V'
set @detallep = 'FACTURAS APÓCRIFAS: No Posee'
end
end
END
IF (@accion = 'ARCOR_FIDECHECK') /* Reflaje color del indicador FIDECHECK */
BEGIN
set @valor_texto = null
set @detallep = 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 = 'FIDECHECK'
and ln_contraparte_indicadores.visible = 1
set @detallep = CASE @valor_texto
WHEN 'P' THEN 'FIDECHECK: Positivo'
WHEN 'N' THEN 'FIDECHECK: Negativo'
WHEN 'S' THEN 'FIDECHECK: Sujeto Obligado'
WHEN 'E' THEN 'FIDECHECK: PEP'
WHEN 'R' THEN 'FIDECHECK: Relacionado'
else NULL
END
set @valor_texto = CASE @valor_texto
WHEN 'P' THEN 'R'
WHEN 'N' THEN 'V'
WHEN 'S' THEN 'V'
WHEN 'E' THEN 'A'
WHEN 'R' THEN 'A'
else NULL
END
END
IF (@accion = 'ARCOR_FINAL') /* El peor de todos los Scores anteriores */
BEGIN
set @valor_texto = null
set @detallep = null
EXEC [LN_scores_ARCOR] 'ARCOR_BCRA', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_CHEQUES', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_JUDICIAL', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_AYC', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_APOCRIFAS', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_FIDECHECK', @contraparte, @p_user_id
EXEC [LN_scores_ARCOR] 'ARCOR_INFORME', @contraparte, @p_user_id
if exists (select *
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 like 'ARCOR_%' and clave_indicador != 'ARCOR_FINAL'
and valor_texto = 'R'
and ln_contraparte_indicadores.visible = 1)
begin
set @valor_texto = 'R'
end
else
begin
if exists (select *
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 like 'ARCOR_%' and clave_indicador != 'ARCOR_FINAL'
and valor_texto = 'A'
and ln_contraparte_indicadores.visible = 1)
begin
set @valor_texto = 'A'
end
else
begin
if exists (select *
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 like 'ARCOR_%' and clave_indicador != 'ARCOR_FINAL'
and valor_texto = 'V'
and ln_contraparte_indicadores.visible = 1)
begin
set @valor_texto = 'V'
end
end
end
END
set @valor_numerico = null
if (@valor_texto = 'R') set @valor_numerico = 10
if (@valor_texto = 'A') set @valor_numerico = 50
if (@valor_texto = 'V') set @valor_numerico = 100
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_texto, valor_numerico, created, created_by,familia)
VALUES
(@contraparte, @gestion, @indic_accion, @valor_texto, @valor_numerico, GETDATE(), @p_user_id,@familia)
else
UPDATE LN_contraparte_indicadores SET
valor_texto = @valor_texto,
valor_numerico = @valor_numerico,
familia = @familia,
modified = GETDATE(),
modified_by = @p_user_id
WHERE contraparte = @contraparte
AND gestion = @gestion
AND indicador = @indic_accion
and visible = 1
/* Guarda los detalles del por que de los puntos asignados */
if exists (select * From ln_score_detalle_puntos
where contraparte = @contraparte
and gestion = @gestion
and indicador = @indic_accion
and detalle != isnull(@detallep,'')
and visible = 1)
UPDATE LN_score_detalle_puntos
set visible = 0, modified = getdate()
where contraparte = @contraparte
and gestion = @gestion
and indicador = @indic_accion
if (@detallep is not null and @valor_texto != 'V') --> Para que no guarde detalle cuando es verde
--if (@detallep is not null)
begin
if not exists (select * From ln_score_detalle_puntos
where contraparte = @contraparte
and gestion = @gestion
and indicador = @indic_accion
and detalle = isnull(@detallep,'')
and visible = 1)
insert into ln_score_detalle_puntos
(contraparte, gestion, indicador, detalle, visible, created)
values (@contraparte, @gestion, @indic_accion, @detallep, 1, getdate())
end
/* Si cambió el valor del indicador, guarda trazabilidad */
if (isnull(@valor_texto_ant,'') != isnull(@valor_texto,''))
begin
/* guarda trazabilidad del indicador calculado */
set @trazabilidad = 'Actualizado automáticamente: ' + @nombre_indic_accion + ': ' + isnull(@valor_texto,'-')
set @trazabilidad2 = 'CAMBIO_INDICADOR_'+convert(varchar,@indic_accion)
exec insertar_trazabilidad @trazabilidad, @cliente, @trazabilidad2,'WWW', @contraparte,1
end
--select @valor_texto
select @valor_texto_ant as valor_texto_ant, @valor_texto as valor_texto, @indic_accion as indicador
END
GO
Depends On
16- dbo.insertar_trazabilidad
- dbo.obtener_bancos_test
- dbo.juicios
- dbo.LN_cliente_indicadores
- dbo.LN_contraparte_familias
- dbo.LN_contraparte_indicadores
- dbo.LN_contrapartes
- dbo.LN_dias_alertas
- dbo.LN_familia_productos
- dbo.LN_gestiones
- dbo.LN_indicadores
- dbo.LN_productos
- dbo.ln_score_detalle_puntos
- dbo.padrones
- dbo.TIEMPO_CAUSAS
- dbo.tipos_causas