Proceso masivo de intereses
Se dedicó dos horas de tiempo para programar el proceso masivo de intereses.
USE [tarjetaCredito]
GO
/****** Object: StoredProcedure [dbo].[ProcesoMasivoIntereses] Script Date: 11/17/2024 5:40:01 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ProcesoMasivoIntereses]
@outResult INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DECLARE @FechaOperacion DATE = GETDATE();
-- luego se saca de una regla de negocio
DECLARE @TasaInteresCorrienteMensual DECIMAL(3, 2) = 0.04;
DECLARE @TasaInteresMoratorios DECIMAL(10, 5) = 0.05;
-- tablas para almacenar los cálculos de intereses
DECLARE @InteresesCorrientes TABLE (
id INT
, fechaOperacion DATE
, Monto MONEY
, TipoDeMovimiento VARCHAR(64)
, NuevoInteresAcumulado MONEY
);
DECLARE @InteresesMoratorios TABLE (
id INT
, fechaOperacion DATE
, Monto MONEY
, TipoDeMovimiento VARCHAR(64)
, NuevoInteresAcumulado MONEY
);
BEGIN TRANSACTION TIntereses;
-- Cálculo de intereses corrientes
INSERT INTO @InteresesCorrientes (id
, fechaOperacion
, Monto
, TipoDeMovimiento
, NuevoInteresAcumulado)
SELECT
t.id
, @FechaOperacion
, (t.saldoActual / @TasaInteresCorrienteMensual) / 100 / 30 AS Monto
, 'Interes Corriente' AS TipoDeMovimiento
, t.saldoInteresesCorrientes +
((t.saldoActual / @TasaInteresCorrienteMensual) / 100 / 30)
AS NuevoInteresAcumulado
FROM [dbo].[TCM] t
WHERE SaldoActual > 0;
-- Cálculo de intereses moratorios diarios
INSERT INTO @InteresesMoratorios (id
, fechaOperacion
, Monto
, TipoDeMovimiento
, NuevoInteresAcumulado)
SELECT
t.id
,@FechaOperacion
, ((e.pagoMinMesAnterior - e.sumaPagosFecha)
* @TasaInteresMoratorios) / 100 / 30 AS Monto
,'Interes Moratorio' AS TipoDeMovimiento
,saldoInteresesMoratorios +
(((e.pagoMinMesAnterior - e.sumaPagosFecha)
* @TasaInteresMoratorios) / 100 / 30)
AS NuevoInteresAcumulado
FROM dbo.TCM t
JOIN dbo.EC e ON t.idEC = e.id
WHERE @FechaOperacion > e.fechaPago
AND e.sumaPagosFecha < e.pagoMinMesAnterior;
SET @outResult = 0; -- Indica que la operación se completó exitosamente
COMMIT TRANSACTION TIntereses;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
SET @outResult = 1;
ROLLBACK TRANSACTION TIntereses;
RETURN;
END
-- Inserta en la tabla de errores
INSERT INTO [dbo].[DBError] VALUES (
SUSER_SNAME()
, ERROR_NUMBER()
, ERROR_STATE()
, ERROR_SEVERITY()
, ERROR_LINE()
, ERROR_PROCEDURE()
, ERROR_MESSAGE()
, GETDATE()
);
SET @outResult = 50005; -- Error en la base de datos
END CATCH
END;
Comentarios
Publicar un comentario