Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
3| Name | Data Type | Length | Description |
|---|---|---|---|
| @contraparte | int | 4 | |
| @enriesgo1 | bit | 1 | |
| @porque1 | varchar | -1 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
-- =============================================
-- Author: María Inés Soria
-- Create date: 04/01/2021
-- Description: Card en riesgo - Indicador
-- =============================================
-- Si no tiene nada defino en dias_alertas para tabla like 'riesgo%', se calcula tomando todos los defaults
-- Si lo tiene se toma los datos definidos para el cliente
-- Si tiene cosas en dias_alertas, pero no especificamente para alguno de los items --> no lo va a tomar en cuenta
CONTRAPARTES EN RIESGO
El botón debe filtrar y mostrar el panel con las contrapartes que cumpla con cualquiera y al menos una de estas condiciones
Situación en Bancos <> 1
Mas de 3 cheques rechazados x Sin Fondos en los últimos 60 días
Uno o más Juicios ejecutivos o pedidos de quiebra en los últimos 180 días
Rentabilidad negativa Y Solvencia menor a 0,3 en el último ejercicio
Score de Balance menor a 40
Score de Dossier < 4
Score de Informe Comercial < 40
DECLARE @enriesgo bit
DECLARE @porque varchar(max)
EXEC [dbo].[LN_enriesgo] 31296, @enriesgo output, @porque output
select @enriesgo as riesgo, @porque as porque
*/
CREATE OR ALTER PROCEDURE dbo.LN_enriesgo
@contraparte int,
@enriesgo1 bit = null output, @porque1 varchar(max) output
AS
BEGIN
SET NOCOUNT ON;
declare @enriesgo bit = 0
declare @porque varchar(max) = ''
declare @cliente int = null
DECLARE @p_5anios smalldatetime = getdate() - 1825
DECLARE @p_2anios smalldatetime = getdate() - 730
DECLARE @p_1anio smalldatetime = getdate() - 365
declare @cuit varchar(20)
declare @cheques table (causal int, fecha_rechazo date, fecha_levantamiento date, importe money)
set @cuit = (select identificacion from padrones where id_padron = (select id_padron from ln_contrapartes where contraparte = @contraparte))
set @cliente = (select cliente from ln_contrapartes where contraparte = @contraparte)
declare @gestion int = (select gestion
from LN_gestiones
where contraparte = @contraparte
AND LN_gestiones.desde <= GETDATE()
AND LN_gestiones.hasta >= GETDATE()
AND LN_gestiones.vigente = 1)
declare @etiqueta varchar(100) = null
declare @ind_enriesgo int = (select indicador from ln_indicadores where clave_indicador = 'ENRIESGO')
/* Podemos tener definidos montos, y cantidad en la tabla ln_dias_alerta, si hay los tomamos de ahi, sino usamos los defaults */
declare @p_montodeu bigint = null
declare @p_diasdeu int = null
declare @p_cantdeu int = null
declare @p_causaldeu int = null
declare @p_levantados char(1) = null
declare @p_puntosdeu decimal(5,2) = null
declare @p_montodeu3 bigint = null
declare @p_diasdeu3 int = null
declare @p_cantdeu3 int = null
declare @p_causaldeu3 int = null
declare @p_levantados3 char(1) = null
declare @p_puntosdeu3 decimal(5,2) = null
declare @p_montoch bigint = null
declare @p_diasch int = null
declare @p_cantch int = null
declare @levantados char(1)
declare @p_diaspq int = null
declare @p_cantpq int = null
declare @p_diasjo int = null
declare @p_cantjo int = null
declare @p_valorren decimal(10,2)
declare @p_valorsol decimal(10,2)
declare @p_valorsb decimal(10,2)
declare @p_valordos decimal(10,2)
declare @p_valoric decimal(10,2)
declare @tiene int = (select COUNT(*) from ln_dias_alertas where tabla like 'riesgo_%' and cliente = @Cliente)
if (@tiene = 0) -- Toma los defaults
begin
-- Cheques sin fondo
set @p_diasch = 60
set @p_montoch = null
set @p_cantch = 3
set @levantados = 'N'
-- Bancos
set @p_montodeu = null
set @p_diasdeu = 720
set @p_cantdeu = 0
set @p_causaldeu = 2 -- mayor o igual a 2
-- Pedidos Quiebra
set @p_diaspq = 180
set @p_cantpq = 1
-- Juicios
set @p_diasjo = 180
set @p_cantjo = 1
-- Rentabilidad
set @p_valorren = 0
-- Solvencia
set @p_valorsol = 0.3
-- Score Balance
set @p_valorsb = 40
-- Score Dossier
set @p_valordos = 4
-- Score Informe comercial
set @p_valoric = 40
end
/*----------------------------------------------------------
CHEQUES RECHAZADOS SIN FONDOS
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a cheques:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_cheques' and cliente = @Cliente and causal = 2)
begin
select @p_diasch = dias,
@p_montoch = monto,
@p_cantch = cantidad,
@levantados = levantados
from ln_dias_alertas where tabla = 'riesgo_cheques' and cliente = @Cliente and causal = 2
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_cheques' and cliente = @Cliente and causal = 2))
begin
insert into @cheques
select id_causa, fecha_rechazo, fecha_levantamiento, importe
from ChequesBCRA
WHERE (Cuit_firmante = @cuit)
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 (id_causa in (1,2))
AND (visible = 1)
AND (
(
(
(
(fecha_levantamiento IS NULL)
AND (fecha_rechazo >= @p_5anios)
)
OR
(
(
(fecha_levantamiento >= @p_5anios)
AND ((datediff(day,fecha_rechazo,fecha_levantamiento)) <= 15)
)
AND
(
(
(fecha_pago IS NOT NULL)
AND (fecha_levantamiento >= (GETDATE() - 2))
)
OR
(
(
(fecha_pago IS NULL)
AND (fecha_levantamiento >= (GETDATE() - 2))
)
AND (fecha_rechazo >= @p_5anios)
)
)
)
)
OR
(
(
(fecha_levantamiento >= @p_5anios)
AND
(
((datediff(day,fecha_rechazo,fecha_levantamiento)) >= 16 )
AND ((datediff(day,fecha_rechazo,fecha_levantamiento)) <= 90)
)
)
AND
(
(
(fecha_pago IS NOT NULL)
AND (fecha_levantamiento >= @p_1anio)
)
OR
(
(
(fecha_pago IS NULL)
AND (fecha_levantamiento >= @p_1anio)
)
AND
(fecha_rechazo >= @p_5anios)
)
)
)
)
OR
(
(
(
(fecha_levantamiento >= @p_5anios)
AND ((datediff(day,fecha_rechazo,fecha_levantamiento)) > 90)
)
AND
(fecha_levantamiento >= @p_2anios)
)
AND (fecha_rechazo >= @p_5anios)
)
)
-- Cantidad Cheques Sin Fondos
declare @p_total_dias int = 0
if (@p_diasch is not null and @levantados = 'N')
begin
set @p_total_dias = (select count(*) from @cheques where causal = 2 and fecha_levantamiento is null and fecha_rechazo > GETDATE()-@p_diasch)
end
if (@p_diasch is not null and @levantados is null)
begin
set @p_total_dias = (select count(*) from @cheques where causal = 2 and fecha_rechazo > GETDATE()-@p_diasch)
end
-- Montos Cheques Sin Fondos
declare @p_total_monto money = 0
if (@p_montoch is not null and @levantados = 'N')
begin
set @p_total_monto = (select sum(importe) from @cheques where causal = 2 and fecha_levantamiento is null and fecha_rechazo > GETDATE()-@p_diasch)
end
if (@p_diasch is not null and @levantados is null)
begin
set @p_total_monto = (select sum(importe) from @cheques where causal = 2 and fecha_rechazo > GETDATE()-@p_diasch)
end
if (@p_montoch is not null and @p_total_monto > @p_montoch)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 1 - Cheques rechazados Sin Fondos por más de ' + convert(varchar,@p_montoch)
--return
end
if (@p_diasch is not null and @p_total_dias > isnull(@p_cantch,0))
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 1 - Mas de ' + convert(varchar,@p_cantch) +
' cheques rechazados x Sin Fondos en los últimos ' + convert(varchar,@p_diasch) +
' días'
--return
end
end
/*----------------------------------------------------------
CENDEU:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a cendeu:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_cendeu' and cliente = @Cliente)
begin
select @p_montodeu = monto,
@p_cantdeu = ISNULL(cantidad,0),
@p_diasdeu = dias,
@p_causaldeu = causal,
@p_levantados = levantados -- si dice 'N' es para que vea que no haya mejorado a 1 la situacion posteriormente
from ln_dias_alertas where tabla = 'riesgo_cendeu' and cliente = @cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_cendeu' and cliente = @Cliente))
begin
declare @p_meses int = ((@p_diasdeu / 30) - 1) * (-1)
declare @p_meses3 int = ((@p_diasdeu3 / 30) - 1) * (-1)
declare @bancos table (fec_inf varchar(6), banco varchar(100), situacion int, deuda numeric(12,2))
insert into @bancos
exec obtener_bancos_test @cuit
declare @dtEnd date = (select max(fecha_informacion) from fuentes_procesadas where visible = '1' and fuente = 'cendeu')
declare @dtEnd_cuit date = (select convert(date,isnull(max(fec_inf),'200112')+'01') from @bancos)
if (@dtEnd_cuit > @dtEnd) set @dtEnd = @dtEnd_cuit
/* Para saber si vino informado en los ultimos 3 meses */
declare @ultimos_3_meses_date date = dateadd(MM,(-2),@dtEnd)
declare @ultimos_3_meses varchar(6) = (convert(varchar(4),DATEPART(yyyy,@ultimos_3_meses_date))
+
right('0'+convert(varchar(2),DATEPART(mm,@ultimos_3_meses_date)),2))
--select CAST(@ultimos_3_meses as int)
/* */
declare @hoy date = dateadd(MM,@p_meses,@dtEnd) -- le resta 5, para tomar los ultimos 6 meses
declare @xmeses2 varchar(6) = (convert(varchar(4),DATEPART(yyyy,@hoy))
+
right('0'+convert(varchar(2),DATEPART(mm,@hoy)),2))
set @hoy = dateadd(MM,@p_meses3,@dtEnd) -- le resta 5, para tomar los ultimos 6 meses
declare @xmeses3 varchar(6) = (convert(varchar(4),DATEPART(yyyy,@hoy))
+
right('0'+convert(varchar(2),DATEPART(mm,@hoy)),2))
declare @cant_deu int = 0
declare @monto_deu numeric(18,2) = 0
if (@p_levantados is null or @p_levantados = 'S')
begin
set @cant_deu = (select COUNT(distinct banco) from @bancos where cast(fec_inf as int) >= cast(@xmeses2 as int) and situacion >= @p_causaldeu)
set @monto_deu = (select sum(sbr.total*1000) from (select banco, max(deuda) as total from @bancos a where cast(a.fec_inf as int) >= cast(@xmeses2 as int) and a.situacion >= @p_causaldeu group by banco) sbr)
end
else
begin
--> No Levantados ==> que no haya una situcion 1 posterior
--> que haya deuda para ese banco en los ultimos 3 periodos
set @cant_deu = (select COUNT(distinct banco) from @bancos bc where cast(bc.fec_inf as int) >= cast(@xmeses2 as int) and bc.situacion >= @p_causaldeu
and not exists (
select * from @bancos bc2 where bc2.banco = bc.banco and cast(bc2.fec_inf as int) > cast(bc.fec_inf as int) and situacion = 1)
and exists (
select * from @bancos bc3 where bc3.banco = bc.banco and cast(bc3.fec_inf as int) >= cast(@ultimos_3_meses as int))
)
set @monto_deu = (select sum(sbr.total*1000) from (select banco, max(deuda) as total from @bancos a
where cast(a.fec_inf as int) >= cast(@xmeses2 as int) and a.situacion >= @p_causaldeu
and not exists (
select * from @bancos bc2 where bc2.banco = a.banco and cast(bc2.fec_inf as int) > cast(a.fec_inf as int) and situacion = 1)
and exists (
select * from @bancos bc3 where bc3.banco = a.banco and cast(bc3.fec_inf as int) >= cast(@ultimos_3_meses as int))
group by banco
) sbr)
end
if (@p_montodeu is not null and @monto_deu > @p_montodeu)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 2 - Deudas por más de ' + CONVERT(varchar,@p_montodeu)
--return
end
if (@p_diasdeu is not null and @cant_deu > isnull(@p_cantdeu,0))
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 2 - Central de deudores en Situación irregular'
--return
end
end
/*----------------------------------------------------------
JUDICIAL:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Pedidos de Quiebra:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_pq' and cliente = @Cliente)
begin
select @p_diaspq = dias,
@p_cantpq = isnull(cantidad,1)
from ln_dias_alertas where tabla = 'riesgo_pq' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_pq' and cliente = @Cliente))
begin
declare @cantidad_pq int = (SELECT COUNT(*)
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
WHERE cuit_demandado = @cuit
and juicios.visible = 1 and juicios.fecha_causa > GETDATE()-(isnull(tiempo,5)*365)
and juicios.fecha_causa >= GETDATE() - isnull(@p_diaspq,5*365)
and tipos_causas.grupo = 'PQ')
if (@cantidad_pq >= @p_cantpq)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 3 - Pedidos de Quiebra en los últimos ' + CONVERT(varchar,@p_diaspq) + ' días'
--return
end
end
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Juicios:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_jo' and cliente = @Cliente)
begin
select @p_diasjo = dias,
@p_cantjo = isnull(cantidad,1)
from ln_dias_alertas where tabla = 'riesgo_jo' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_jo' and cliente = @Cliente))
begin
declare @cantidad_jo int = (SELECT COUNT(*)
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
WHERE cuit_demandado = @cuit
and juicios.visible = 1 and juicios.fecha_causa > GETDATE()-(isnull(tiempo,5)*365)
and juicios.fecha_causa >= GETDATE() - isnull(@p_diaspq,5*365)
and tipos_causas.grupo = 'JO')
if (@cantidad_jo >= @p_cantjo)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 4 - Causas Juciales en los últimos ' + CONVERT(varchar, @p_diasjo) + ' días'
--return
end
end
/*----------------------------------------------------------
Rentablidad y Solvenvia
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Rentablidad y Solvencia:
declare @p_rentabilidad decimal(10,2)
declare @p_solvencia decimal(10,2)
if exists (select * from ln_dias_alertas where tabla = 'riesgo_rentablidad' and cliente = @Cliente)
begin
select @p_valorren = valor
from ln_dias_alertas where tabla = 'riesgo_rentablidad' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_rentablidad' and cliente = @Cliente))
begin
select @p_rentabilidad = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'RENTABILIDAD_OPERATIVA')
end
else
begin
set @p_rentabilidad = @p_valorren
end
if exists (select * from ln_dias_alertas where tabla = 'riesgo_solvencia' and cliente = @Cliente)
begin
select @p_valorsol = valor
from ln_dias_alertas where tabla = 'riesgo_solvencia' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_solvencia' and cliente = @Cliente))
begin
select @p_solvencia = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SOLVENCIA')
end
else
begin
set @p_solvencia = @p_valorsol
end
if (@p_rentabilidad < @p_valorren and @p_solvencia < @p_valorsol)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 5 - Rentabilidad < ' + CONVERT(varchar, @p_valorren) + ' Y Solvencia < ' + CONVERT(varchar,@p_valorsol)
--return
end
/*----------------------------------------------------------
Score Balance:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a SCORE_BAL:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_score_bal' and cliente = @Cliente)
begin
select @p_valorsb = valor
from ln_dias_alertas where tabla = 'riesgo_score_bal' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_score_bal' and cliente = @Cliente))
begin
declare @p_score_bal decimal(10,2)
select @p_score_bal = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SCORE_BAL')
if (@p_score_bal < @p_valorsb)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 6 - Score Balance < ' + CONVERT(varchar, @p_valorsb)
--return
end
end
/*----------------------------------------------------------
Score Dossier:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Score Dossier:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_score_dos' and cliente = @Cliente)
begin
select @p_valordos = valor
from ln_dias_alertas where tabla = 'riesgo_score_dos' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_score_dos' and cliente = @Cliente))
begin
declare @p_score_dos decimal(10,2)
select @p_score_dos = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SCORE_DOSSIER')
if (@p_score_dos < @p_valordos)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 7 - Score Dossier < ' + CONVERT(varchar, @p_valordos)
--return
end
end
/*----------------------------------------------------------
Score informe:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Informe:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_score_ic' and cliente = @Cliente)
begin
select @p_valoric = valor
from ln_dias_alertas where tabla = 'riesgo_score_ic' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_score_ic' and cliente = @Cliente))
begin
declare @p_score_ic decimal(10,2)
select @p_score_ic = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SCORE_IC')
if (@p_score_ic < @p_valoric)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 8 - Score Informe Comercial < ' + CONVERT(varchar, @p_valoric)
--return
end
end
if (@enriesgo = 0)
begin
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'No cumple ninguna de las condiciones'
end
set @enriesgo1 = @enriesgo
set @porque1 = @porque
END
GO
GO
/*
-- =============================================
-- Author: María Inés Soria
-- Create date: 04/01/2021
-- Description: Card en riesgo - Indicador
-- =============================================
-- Si no tiene nada defino en dias_alertas para tabla like 'riesgo%', se calcula tomando todos los defaults
-- Si lo tiene se toma los datos definidos para el cliente
-- Si tiene cosas en dias_alertas, pero no especificamente para alguno de los items --> no lo va a tomar en cuenta
CONTRAPARTES EN RIESGO
El botón debe filtrar y mostrar el panel con las contrapartes que cumpla con cualquiera y al menos una de estas condiciones
Situación en Bancos <> 1
Mas de 3 cheques rechazados x Sin Fondos en los últimos 60 días
Uno o más Juicios ejecutivos o pedidos de quiebra en los últimos 180 días
Rentabilidad negativa Y Solvencia menor a 0,3 en el último ejercicio
Score de Balance menor a 40
Score de Dossier < 4
Score de Informe Comercial < 40
DECLARE @enriesgo bit
DECLARE @porque varchar(max)
EXEC [dbo].[LN_enriesgo] 31296, @enriesgo output, @porque output
select @enriesgo as riesgo, @porque as porque
*/
CREATE OR ALTER PROCEDURE dbo.LN_enriesgo
@contraparte int,
@enriesgo1 bit = null output, @porque1 varchar(max) output
AS
BEGIN
SET NOCOUNT ON;
declare @enriesgo bit = 0
declare @porque varchar(max) = ''
declare @cliente int = null
DECLARE @p_5anios smalldatetime = getdate() - 1825
DECLARE @p_2anios smalldatetime = getdate() - 730
DECLARE @p_1anio smalldatetime = getdate() - 365
declare @cuit varchar(20)
declare @cheques table (causal int, fecha_rechazo date, fecha_levantamiento date, importe money)
set @cuit = (select identificacion from padrones where id_padron = (select id_padron from ln_contrapartes where contraparte = @contraparte))
set @cliente = (select cliente from ln_contrapartes where contraparte = @contraparte)
declare @gestion int = (select gestion
from LN_gestiones
where contraparte = @contraparte
AND LN_gestiones.desde <= GETDATE()
AND LN_gestiones.hasta >= GETDATE()
AND LN_gestiones.vigente = 1)
declare @etiqueta varchar(100) = null
declare @ind_enriesgo int = (select indicador from ln_indicadores where clave_indicador = 'ENRIESGO')
/* Podemos tener definidos montos, y cantidad en la tabla ln_dias_alerta, si hay los tomamos de ahi, sino usamos los defaults */
declare @p_montodeu bigint = null
declare @p_diasdeu int = null
declare @p_cantdeu int = null
declare @p_causaldeu int = null
declare @p_levantados char(1) = null
declare @p_puntosdeu decimal(5,2) = null
declare @p_montodeu3 bigint = null
declare @p_diasdeu3 int = null
declare @p_cantdeu3 int = null
declare @p_causaldeu3 int = null
declare @p_levantados3 char(1) = null
declare @p_puntosdeu3 decimal(5,2) = null
declare @p_montoch bigint = null
declare @p_diasch int = null
declare @p_cantch int = null
declare @levantados char(1)
declare @p_diaspq int = null
declare @p_cantpq int = null
declare @p_diasjo int = null
declare @p_cantjo int = null
declare @p_valorren decimal(10,2)
declare @p_valorsol decimal(10,2)
declare @p_valorsb decimal(10,2)
declare @p_valordos decimal(10,2)
declare @p_valoric decimal(10,2)
declare @tiene int = (select COUNT(*) from ln_dias_alertas where tabla like 'riesgo_%' and cliente = @Cliente)
if (@tiene = 0) -- Toma los defaults
begin
-- Cheques sin fondo
set @p_diasch = 60
set @p_montoch = null
set @p_cantch = 3
set @levantados = 'N'
-- Bancos
set @p_montodeu = null
set @p_diasdeu = 720
set @p_cantdeu = 0
set @p_causaldeu = 2 -- mayor o igual a 2
-- Pedidos Quiebra
set @p_diaspq = 180
set @p_cantpq = 1
-- Juicios
set @p_diasjo = 180
set @p_cantjo = 1
-- Rentabilidad
set @p_valorren = 0
-- Solvencia
set @p_valorsol = 0.3
-- Score Balance
set @p_valorsb = 40
-- Score Dossier
set @p_valordos = 4
-- Score Informe comercial
set @p_valoric = 40
end
/*----------------------------------------------------------
CHEQUES RECHAZADOS SIN FONDOS
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a cheques:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_cheques' and cliente = @Cliente and causal = 2)
begin
select @p_diasch = dias,
@p_montoch = monto,
@p_cantch = cantidad,
@levantados = levantados
from ln_dias_alertas where tabla = 'riesgo_cheques' and cliente = @Cliente and causal = 2
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_cheques' and cliente = @Cliente and causal = 2))
begin
insert into @cheques
select id_causa, fecha_rechazo, fecha_levantamiento, importe
from ChequesBCRA
WHERE (Cuit_firmante = @cuit)
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 (id_causa in (1,2))
AND (visible = 1)
AND (
(
(
(
(fecha_levantamiento IS NULL)
AND (fecha_rechazo >= @p_5anios)
)
OR
(
(
(fecha_levantamiento >= @p_5anios)
AND ((datediff(day,fecha_rechazo,fecha_levantamiento)) <= 15)
)
AND
(
(
(fecha_pago IS NOT NULL)
AND (fecha_levantamiento >= (GETDATE() - 2))
)
OR
(
(
(fecha_pago IS NULL)
AND (fecha_levantamiento >= (GETDATE() - 2))
)
AND (fecha_rechazo >= @p_5anios)
)
)
)
)
OR
(
(
(fecha_levantamiento >= @p_5anios)
AND
(
((datediff(day,fecha_rechazo,fecha_levantamiento)) >= 16 )
AND ((datediff(day,fecha_rechazo,fecha_levantamiento)) <= 90)
)
)
AND
(
(
(fecha_pago IS NOT NULL)
AND (fecha_levantamiento >= @p_1anio)
)
OR
(
(
(fecha_pago IS NULL)
AND (fecha_levantamiento >= @p_1anio)
)
AND
(fecha_rechazo >= @p_5anios)
)
)
)
)
OR
(
(
(
(fecha_levantamiento >= @p_5anios)
AND ((datediff(day,fecha_rechazo,fecha_levantamiento)) > 90)
)
AND
(fecha_levantamiento >= @p_2anios)
)
AND (fecha_rechazo >= @p_5anios)
)
)
-- Cantidad Cheques Sin Fondos
declare @p_total_dias int = 0
if (@p_diasch is not null and @levantados = 'N')
begin
set @p_total_dias = (select count(*) from @cheques where causal = 2 and fecha_levantamiento is null and fecha_rechazo > GETDATE()-@p_diasch)
end
if (@p_diasch is not null and @levantados is null)
begin
set @p_total_dias = (select count(*) from @cheques where causal = 2 and fecha_rechazo > GETDATE()-@p_diasch)
end
-- Montos Cheques Sin Fondos
declare @p_total_monto money = 0
if (@p_montoch is not null and @levantados = 'N')
begin
set @p_total_monto = (select sum(importe) from @cheques where causal = 2 and fecha_levantamiento is null and fecha_rechazo > GETDATE()-@p_diasch)
end
if (@p_diasch is not null and @levantados is null)
begin
set @p_total_monto = (select sum(importe) from @cheques where causal = 2 and fecha_rechazo > GETDATE()-@p_diasch)
end
if (@p_montoch is not null and @p_total_monto > @p_montoch)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 1 - Cheques rechazados Sin Fondos por más de ' + convert(varchar,@p_montoch)
--return
end
if (@p_diasch is not null and @p_total_dias > isnull(@p_cantch,0))
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 1 - Mas de ' + convert(varchar,@p_cantch) +
' cheques rechazados x Sin Fondos en los últimos ' + convert(varchar,@p_diasch) +
' días'
--return
end
end
/*----------------------------------------------------------
CENDEU:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a cendeu:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_cendeu' and cliente = @Cliente)
begin
select @p_montodeu = monto,
@p_cantdeu = ISNULL(cantidad,0),
@p_diasdeu = dias,
@p_causaldeu = causal,
@p_levantados = levantados -- si dice 'N' es para que vea que no haya mejorado a 1 la situacion posteriormente
from ln_dias_alertas where tabla = 'riesgo_cendeu' and cliente = @cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_cendeu' and cliente = @Cliente))
begin
declare @p_meses int = ((@p_diasdeu / 30) - 1) * (-1)
declare @p_meses3 int = ((@p_diasdeu3 / 30) - 1) * (-1)
declare @bancos table (fec_inf varchar(6), banco varchar(100), situacion int, deuda numeric(12,2))
insert into @bancos
exec obtener_bancos_test @cuit
declare @dtEnd date = (select max(fecha_informacion) from fuentes_procesadas where visible = '1' and fuente = 'cendeu')
declare @dtEnd_cuit date = (select convert(date,isnull(max(fec_inf),'200112')+'01') from @bancos)
if (@dtEnd_cuit > @dtEnd) set @dtEnd = @dtEnd_cuit
/* Para saber si vino informado en los ultimos 3 meses */
declare @ultimos_3_meses_date date = dateadd(MM,(-2),@dtEnd)
declare @ultimos_3_meses varchar(6) = (convert(varchar(4),DATEPART(yyyy,@ultimos_3_meses_date))
+
right('0'+convert(varchar(2),DATEPART(mm,@ultimos_3_meses_date)),2))
--select CAST(@ultimos_3_meses as int)
/* */
declare @hoy date = dateadd(MM,@p_meses,@dtEnd) -- le resta 5, para tomar los ultimos 6 meses
declare @xmeses2 varchar(6) = (convert(varchar(4),DATEPART(yyyy,@hoy))
+
right('0'+convert(varchar(2),DATEPART(mm,@hoy)),2))
set @hoy = dateadd(MM,@p_meses3,@dtEnd) -- le resta 5, para tomar los ultimos 6 meses
declare @xmeses3 varchar(6) = (convert(varchar(4),DATEPART(yyyy,@hoy))
+
right('0'+convert(varchar(2),DATEPART(mm,@hoy)),2))
declare @cant_deu int = 0
declare @monto_deu numeric(18,2) = 0
if (@p_levantados is null or @p_levantados = 'S')
begin
set @cant_deu = (select COUNT(distinct banco) from @bancos where cast(fec_inf as int) >= cast(@xmeses2 as int) and situacion >= @p_causaldeu)
set @monto_deu = (select sum(sbr.total*1000) from (select banco, max(deuda) as total from @bancos a where cast(a.fec_inf as int) >= cast(@xmeses2 as int) and a.situacion >= @p_causaldeu group by banco) sbr)
end
else
begin
--> No Levantados ==> que no haya una situcion 1 posterior
--> que haya deuda para ese banco en los ultimos 3 periodos
set @cant_deu = (select COUNT(distinct banco) from @bancos bc where cast(bc.fec_inf as int) >= cast(@xmeses2 as int) and bc.situacion >= @p_causaldeu
and not exists (
select * from @bancos bc2 where bc2.banco = bc.banco and cast(bc2.fec_inf as int) > cast(bc.fec_inf as int) and situacion = 1)
and exists (
select * from @bancos bc3 where bc3.banco = bc.banco and cast(bc3.fec_inf as int) >= cast(@ultimos_3_meses as int))
)
set @monto_deu = (select sum(sbr.total*1000) from (select banco, max(deuda) as total from @bancos a
where cast(a.fec_inf as int) >= cast(@xmeses2 as int) and a.situacion >= @p_causaldeu
and not exists (
select * from @bancos bc2 where bc2.banco = a.banco and cast(bc2.fec_inf as int) > cast(a.fec_inf as int) and situacion = 1)
and exists (
select * from @bancos bc3 where bc3.banco = a.banco and cast(bc3.fec_inf as int) >= cast(@ultimos_3_meses as int))
group by banco
) sbr)
end
if (@p_montodeu is not null and @monto_deu > @p_montodeu)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 2 - Deudas por más de ' + CONVERT(varchar,@p_montodeu)
--return
end
if (@p_diasdeu is not null and @cant_deu > isnull(@p_cantdeu,0))
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque +
'Condición 2 - Central de deudores en Situación irregular'
--return
end
end
/*----------------------------------------------------------
JUDICIAL:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Pedidos de Quiebra:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_pq' and cliente = @Cliente)
begin
select @p_diaspq = dias,
@p_cantpq = isnull(cantidad,1)
from ln_dias_alertas where tabla = 'riesgo_pq' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_pq' and cliente = @Cliente))
begin
declare @cantidad_pq int = (SELECT COUNT(*)
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
WHERE cuit_demandado = @cuit
and juicios.visible = 1 and juicios.fecha_causa > GETDATE()-(isnull(tiempo,5)*365)
and juicios.fecha_causa >= GETDATE() - isnull(@p_diaspq,5*365)
and tipos_causas.grupo = 'PQ')
if (@cantidad_pq >= @p_cantpq)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 3 - Pedidos de Quiebra en los últimos ' + CONVERT(varchar,@p_diaspq) + ' días'
--return
end
end
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Juicios:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_jo' and cliente = @Cliente)
begin
select @p_diasjo = dias,
@p_cantjo = isnull(cantidad,1)
from ln_dias_alertas where tabla = 'riesgo_jo' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_jo' and cliente = @Cliente))
begin
declare @cantidad_jo int = (SELECT COUNT(*)
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
WHERE cuit_demandado = @cuit
and juicios.visible = 1 and juicios.fecha_causa > GETDATE()-(isnull(tiempo,5)*365)
and juicios.fecha_causa >= GETDATE() - isnull(@p_diaspq,5*365)
and tipos_causas.grupo = 'JO')
if (@cantidad_jo >= @p_cantjo)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 4 - Causas Juciales en los últimos ' + CONVERT(varchar, @p_diasjo) + ' días'
--return
end
end
/*----------------------------------------------------------
Rentablidad y Solvenvia
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Rentablidad y Solvencia:
declare @p_rentabilidad decimal(10,2)
declare @p_solvencia decimal(10,2)
if exists (select * from ln_dias_alertas where tabla = 'riesgo_rentablidad' and cliente = @Cliente)
begin
select @p_valorren = valor
from ln_dias_alertas where tabla = 'riesgo_rentablidad' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_rentablidad' and cliente = @Cliente))
begin
select @p_rentabilidad = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'RENTABILIDAD_OPERATIVA')
end
else
begin
set @p_rentabilidad = @p_valorren
end
if exists (select * from ln_dias_alertas where tabla = 'riesgo_solvencia' and cliente = @Cliente)
begin
select @p_valorsol = valor
from ln_dias_alertas where tabla = 'riesgo_solvencia' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_solvencia' and cliente = @Cliente))
begin
select @p_solvencia = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SOLVENCIA')
end
else
begin
set @p_solvencia = @p_valorsol
end
if (@p_rentabilidad < @p_valorren and @p_solvencia < @p_valorsol)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 5 - Rentabilidad < ' + CONVERT(varchar, @p_valorren) + ' Y Solvencia < ' + CONVERT(varchar,@p_valorsol)
--return
end
/*----------------------------------------------------------
Score Balance:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a SCORE_BAL:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_score_bal' and cliente = @Cliente)
begin
select @p_valorsb = valor
from ln_dias_alertas where tabla = 'riesgo_score_bal' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_score_bal' and cliente = @Cliente))
begin
declare @p_score_bal decimal(10,2)
select @p_score_bal = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SCORE_BAL')
if (@p_score_bal < @p_valorsb)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 6 - Score Balance < ' + CONVERT(varchar, @p_valorsb)
--return
end
end
/*----------------------------------------------------------
Score Dossier:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Score Dossier:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_score_dos' and cliente = @Cliente)
begin
select @p_valordos = valor
from ln_dias_alertas where tabla = 'riesgo_score_dos' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_score_dos' and cliente = @Cliente))
begin
declare @p_score_dos decimal(10,2)
select @p_score_dos = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SCORE_DOSSIER')
if (@p_score_dos < @p_valordos)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 7 - Score Dossier < ' + CONVERT(varchar, @p_valordos)
--return
end
end
/*----------------------------------------------------------
Score informe:
----------------------------------------------------------*/
-- Vemos si tiene cosas definidas en ln_dias_alerta para riesgo con respecto a Informe:
if exists (select * from ln_dias_alertas where tabla = 'riesgo_score_ic' and cliente = @Cliente)
begin
select @p_valoric = valor
from ln_dias_alertas where tabla = 'riesgo_score_ic' and cliente = @Cliente
end
if (@tiene = 0 or exists (select * from ln_dias_alertas where tabla = 'riesgo_score_ic' and cliente = @Cliente))
begin
declare @p_score_ic decimal(10,2)
select @p_score_ic = valor_numerico
from ln_contraparte_indicadores
where contraparte = @contraparte and gestion = @gestion
and visible = 1
and indicador in (select indicador from ln_indicadores where clave_indicador = 'SCORE_IC')
if (@p_score_ic < @p_valoric)
begin
set @enriesgo = 1
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'Condición 8 - Score Informe Comercial < ' + CONVERT(varchar, @p_valoric)
--return
end
end
if (@enriesgo = 0)
begin
if (@porque != '') set @porque = @porque + '; '
set @porque = @porque + 'No cumple ninguna de las condiciones'
end
set @enriesgo1 = @enriesgo
set @porque1 = @porque
END
GO