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

Entradas más populares de este blog

CargaXML

Crear TH