SET TERM ^ ;

CREATE OR ALTER procedure SPU_REGUA_COBRANCA_FINALIZACAO (
    ICASO_ID integer = 0)
as
declare variable VCASO_ID integer;
declare variable VPAINEL_ID integer;
declare variable VVALOR numeric(18,8);
declare variable VSTATUS_FECHAMENTO integer;
declare variable VFEED_ID integer;
declare variable VASSUNTO varchar(1000);
declare variable VMENSAGEM blob sub_type 1 segment size 80;
BEGIN

    IF (:ICASO_ID IS NULL OR FN_IS_EMPTY(:ICASO_ID) = '')  THEN
    BEGIN
        :ICASO_ID = 0;
    END

    FOR
        SELECT
            Y.CASO_ID,
            G.PAINEL_ID,
            Y.VALOR_SALDO_TOTAL
        
        FROM (
            SELECT
                LIST(X.CONTROLE) AS LIST_CONTROLE,
            
                SUM(X.VALOR_SALDO) AS VALOR_SALDO_TOTAL,
            
                X.EMPRESA_CODIGO,
                X.ESTABELECIMENTO_ID,
                X.NUMERO_NOTAFISCAL,
                X.CASO_ID
            
            FROM (
                SELECT
                    A.EMPRESA_CODIGO,
                    
                    A.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                    A.NUMERO_NOTAFISCAL,
                    A.SERIE,
                    A.PARCELA,
                    A.DATA_EMISSAO,
                    A.DATA_VENCIMENTO,
                    A.VALOR_SALDO,
                    A.PAGAMENTO_FORMA,
                
                    A.CASO_ID,
                    A.CONTROLE
                
                FROM TBNFS_PARCELAMENTO A
                WHERE A.CASO_ID > 0
        
            ) X
            
            GROUP BY
                X.EMPRESA_CODIGO,
                X.ESTABELECIMENTO_ID,
                X.NUMERO_NOTAFISCAL,
                X.CASO_ID
        
        ) Y
        INNER JOIN TBCASO_REGISTRO G ON G.ID = Y.CASO_ID
        WHERE Y.VALOR_SALDO_TOTAL = 0
        AND G.FECHADO = 0

        AND IIF(COALESCE(:ICASO_ID, 0) > 0, Y.CASO_ID = :ICASO_ID, TRUE = TRUE)

    INTO
        :VCASO_ID,
        :VPAINEL_ID,
        :VVALOR

    DO
    BEGIN

        :VSTATUS_FECHAMENTO = COALESCE((SELECT FIRST 1 E.ID FROM TBCASO_STATUS E WHERE E.FECHADO = 1 AND E.PAINEL_ID = :VPAINEL_ID), 0);

        IF (COALESCE(:VCASO_ID, 0) > 0 AND COALESCE(:VPAINEL_ID, 0) > 0 AND COALESCE(:VSTATUS_FECHAMENTO, 0) > 0 AND COALESCE(:VVALOR, 0) = 0) THEN
        BEGIN

            :VFEED_ID = GEN_ID(GTBCASO_FEED, 1);

            :VASSUNTO  = 'AGENDAMENTO: [CASO: '||FN_LPAD(:VCASO_ID, 8, '0')||'] - INFORMACOES DE COBRANCA';

            :VMENSAGEM = '';
            :VMENSAGEM = :VMENSAGEM||'<p> '||'Todas as parcelas vinculadas ao caso foram baixadas!'||' </p>';


            INSERT INTO TBCASO_FEED (ID, DE, PARA, EM_COPIA, EM_COPIA_OCULTA, MENSAGEM, ASSUNTO, PAINEL_ID, CASO_ID, FILES, SUBFEED, TIPO, USUARIO_ID, COMENTARIO, LISTA_FILE, WORKFLOW_ITEM_ID)
                VALUES (:VFEED_ID, '', '', '', '', :VMENSAGEM, FN_ELIPSE2(:VASSUNTO, 300), :VPAINEL_ID, :VCASO_ID, 1, 0, 2, 99999, 0, '', 0);
                

            IF (FN_PARAMETRO_V2('SISTEMA.FINALIZA_CASO_PARCELA') = '1') THEN
            BEGIN

                UPDATE TBCASO_REGISTRO
                    SET STATUS_ID = :VSTATUS_FECHAMENTO,
                        FECHADO = 1
                    WHERE PAINEL_ID = :VPAINEL_ID
                    AND ID = :VCASO_ID;

            END
        END
    END
END
^

SET TERM ; ^

/*********************************************************************************************************/
/*********************************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER procedure SPU_REGUA_COBRANCA_CASO (
    IPAINEL_ID integer not null,
    IDIAS integer = 0,
    IEMPRESA_ID integer = 0)
as
declare variable VEMPRESA_ID integer;
declare variable VVINCULO_CASO_ID integer;
declare variable VPAGAMENTO_FORMA_ID integer;
declare variable VQTD_DOCUMENTOS integer;
declare variable VTOTAL_VALOR numeric(15,4);
declare variable VNFS_PARC_ID varchar(6000);
declare variable VDOCUMENTOS varchar(6000);
declare variable VVINCULO_CASO_FECHADO integer;
declare variable VVINCULO_CASO_SITUACAO integer;
declare variable VFEED_ID integer;
declare variable VCASO_ID integer;
declare variable VSPLIT varchar(6000);
declare variable VMENSAGEM blob sub_type 1 segment size 80;
declare variable VASSUNTO varchar(6000);
declare variable PAINEL_ID integer;
declare variable MOTIVO_ID integer;
declare variable TIPO_ID integer;
declare variable ORIGEM_ID integer;
declare variable CASO_ID integer;
declare variable CASO_ID2 integer;
BEGIN
    
    IF (:IEMPRESA_ID IS NULL OR FN_IS_EMPTY(:IEMPRESA_ID) = '')  THEN
    BEGIN
        :IEMPRESA_ID = 0;
    END


    FOR
        SELECT /*FIRST 5*/ DISTINCT
            X.EMPRESA_CODIGO AS EMPRESA_ID,
            X.CASO_ID,
            COALESCE((SELECT FIRST 1 CAST(COALESCE(S.OSPLIT, '0') AS INTEGER) FROM SPLIT2(LIST(DISTINCT X.PAGAMENTO_FORMA), ',') S), 0) AS PAGAMENTO_FORMA_ID,
        
            COUNT(X.NUMERO_NOTAFISCAL) AS QTD_DOCUMENTOS,
            CAST(SUM(X.VALOR_SALDO) AS NUMERIC(15,4)) AS TOTAL_VALOR,
        
            LIST(X.CONTROLE, ',') AS NFS_PARC_ID,
            LIST('ESTAB.: '||FN_LPAD(X.ESTABELECIMENTO_ID, 4, '0')||' | DOC.: '||FN_LPAD(X.NUMERO_NOTAFISCAL, 8, '0')||'/'||FN_LPAD(X.SERIE, 3, '0')||'-'||FN_LPAD(X.PARCELA, 3, '0')||' | DT.VENC.: '||FORMATDATE(X.DATA_VENCIMENTO)||' | VALOR: R$ '||FN_LPAD(FN_FORMAT_NUMBER2(X.VALOR_SALDO, 2), 10, ''), ';') AS DOCUMENTOS
        
        FROM (
            SELECT
                A.EMPRESA_CODIGO,
            
                A.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                A.NUMERO_NOTAFISCAL,
                A.SERIE,
                A.PARCELA,
                A.DATA_EMISSAO,
                A.DATA_VENCIMENTO,
                A.VALOR_SALDO,
                A.PAGAMENTO_FORMA,

                A.CONTROLE,

                COALESCE(A.CASO_ID, 0) AS CASO_ID,

                B.DATA_TOLERANCIA
            
            FROM (
                SELECT
                    FN_DIA_ANT_UTIL(DATA_TOLERANCIA) AS DATA_TOLERANCIA
                
                FROM (
                    SELECT
                        CAST(DATEADD(DAY, -CAST(:IDIAS AS INTEGER), CURRENT_TIMESTAMP) AS DATE) AS DATA_TOLERANCIA
                
                    FROM RDB$DATABASE
                )
            ) B, TBNFS_PARCELAMENTO A
            WHERE A.SITUACAO = 1
            AND A.DATA_VENCIMENTO < B.DATA_TOLERANCIA
            AND A.VALOR_SALDO > 0

            AND IIF(COALESCE(:IEMPRESA_ID, 0) > 0, A.EMPRESA_CODIGO = :IEMPRESA_ID, TRUE = TRUE)
            
            ORDER BY
                A.DATA_VENCIMENTO,
                A.EMPRESA_CODIGO
        ) X
        
        GROUP BY
            X.EMPRESA_CODIGO,
            X.CASO_ID

    INTO
        :VEMPRESA_ID,
        :VVINCULO_CASO_ID,
        :VPAGAMENTO_FORMA_ID,
        :VQTD_DOCUMENTOS,
        :VTOTAL_VALOR,
        :VNFS_PARC_ID,
        :VDOCUMENTOS

    DO
    BEGIN
        
        FOR
            SELECT
                D.PAINEL_ID,
                D.MOTIVO_ID,
                D.TIPO_ID,
                D.ORIGEM_ID,
    
                COALESCE((SELECT FIRST 1
                            E.REGISTRO_ID
                        FROM TBCASO_REGISTRO_DETALHE E, TBCASO_PAINEL_CONF E2, TBCASO_REGISTRO E3
                        WHERE E.CAMPO_ID = E2.ID
                        AND E.PAINEL_ID = E2.PAINEL_ID
                        AND E.REGISTRO_ID = E3.ID
                        AND E.PAINEL_ID = E3.PAINEL_ID
                        AND E.PAINEL_ID = D.PAINEL_ID
                        AND E2.PARAM_EXEC = 1
                        AND E3.FECHADO = 0
                        AND TRIM(E.VALOR) = :VEMPRESA_ID), 0) AS CASO_ID,
    
                COALESCE((SELECT FIRST 1
                            C.ID
                        FROM TBCASO_REGISTRO C
                        WHERE C.PAINEL_ID = D.PAINEL_ID
                        AND C.CASO_ORIGEM_ID = :VEMPRESA_ID
                        AND C.FECHADO = 0
                        AND C.CASO_ORIGEM_TABELA = 'TBCLIENTE'), 0) AS CASO_ID2
    
            FROM TBCASO_PAINEL_PROCEDIMENTO D
            WHERE D.PAINEL_ID = :IPAINEL_ID
            AND D.OPERACAO = 0

        INTO
           :PAINEL_ID,
           :MOTIVO_ID,
           :TIPO_ID,
           :ORIGEM_ID,
           :CASO_ID,
           :CASO_ID2

        DO
        BEGIN

            :VVINCULO_CASO_FECHADO = COALESCE((SELECT FIRST 1 C.FECHADO FROM TBCASO_REGISTRO C WHERE C.ID = :VVINCULO_CASO_ID), 0);

            IF ((COALESCE(:CASO_ID, 0) > 0) OR (COALESCE(:CASO_ID2, 0) > 0)) THEN
--            IF (COALESCE(:VVINCULO_CASO_ID, 0) > 0 AND COALESCE(:VVINCULO_CASO_FECHADO, 0) = 0) THEN
            BEGIN

                :VVINCULO_CASO_SITUACAO = COALESCE((SELECT FIRST 1 S.TIPO FROM TBCASO_REGISTRO C, TBCASO_STATUS S WHERE C.STATUS_ID = S.ID AND C.PAINEL_ID = S.PAINEL_ID AND C.ID = :VVINCULO_CASO_ID), 0);

                IF (
                    (COALESCE(:VVINCULO_CASO_ID, 0) = 0) OR
                    (COALESCE(:VVINCULO_CASO_ID, 0) > 0 AND COALESCE(:VVINCULO_CASO_ID, 0) <> COALESCE(:CASO_ID2, 0) AND COALESCE(:VVINCULO_CASO_ID, 0) <> COALESCE(:CASO_ID, 0)) OR
                    (COALESCE(:VVINCULO_CASO_ID, 0) > 0 AND COALESCE(:VVINCULO_CASO_SITUACAO, 0) > 2)
                ) THEN
--                IF (COALESCE(:VVINCULO_CASO_ID, 0) > 0) THEN
                BEGIN

                    /* verificando o ID do caso */
--                    :VCASO_ID = :VVINCULO_CASO_ID;
                    :VCASO_ID = 0;
                    IF (COALESCE(:CASO_ID, 0) > 0) THEN
                    BEGIN
                        :VCASO_ID = :CASO_ID;
                    END ELSE
                    BEGIN
                        :VCASO_ID = :CASO_ID2;
                    END

--                    EXCEPTION "..." 'CASO: '|| :VCASO_ID;
    
                    :VMENSAGEM = '<p><strong>Parcelas do Cliente fora do Periodo de Tolerancia ('||:IDIAS||' dias):</strong> '||:VQTD_DOCUMENTOS||' Parcelas Vinculadas </p>'|| ASCII_CHAR(13) || ASCII_CHAR(10) ||'';
                    :VASSUNTO  = 'AGENDAMENTO: [CASO: '||FN_LPAD(:VCASO_ID, 8, '0')||'] - INFORMACOES DE COBRANCA';
    
                    FOR
                        SELECT
                            SP.OSPLIT
                        FROM SPLIT_V2(:VDOCUMENTOS, ';') SP
    
                    INTO
                        :VSPLIT
    
                    DO
                    BEGIN
    
                        :VMENSAGEM = :VMENSAGEM ||'<p> '|| :VSPLIT ||' </p>'|| ASCII_CHAR(13) || ASCII_CHAR(10) ||'';
    
                    END
    
    
                    /* Inclus??o do FEED no caso */
                    :VFEED_ID = GEN_ID(GTBCASO_FEED, 1);
    
                    INSERT INTO TBCASO_FEED (ID, DE, PARA, EM_COPIA, EM_COPIA_OCULTA, MENSAGEM, ASSUNTO, PAINEL_ID, CASO_ID, FILES, SUBFEED, TIPO, USUARIO_ID, COMENTARIO, LISTA_FILE, WORKFLOW_ITEM_ID)
                        VALUES (:VFEED_ID, '', '', '', '', :VMENSAGEM, FN_ELIPSE2(:VASSUNTO, 300), :PAINEL_ID, :VCASO_ID, 1, 0, 2, 99999, 0, '', 0);


                    /* Atualizando vinculo das parcelas */
                    FOR
                        SELECT
                            SP.OSPLIT
                        FROM SPLIT_V2(:VNFS_PARC_ID, ',') SP

                    INTO
                        :VSPLIT

                    DO
                    BEGIN

                        UPDATE TBNFS_PARCELAMENTO
                            SET CASO_ID = :VCASO_ID
                            WHERE CONTROLE = :VSPLIT;

                    END
                END

            END ELSE
            BEGIN

                :VCASO_ID = 0;

                :VMENSAGEM = '';

                FOR
                    SELECT
                        SP.OSPLIT
                    FROM SPLIT_V2(:VDOCUMENTOS, ';') SP

                INTO
                    :VSPLIT

                DO
                BEGIN

                    :VMENSAGEM = :VMENSAGEM ||''|| :VSPLIT ||' '|| ASCII_CHAR(13) || ASCII_CHAR(10) ||'';

                END


                FOR
                    SELECT
                        SPC.OCASO_ID
                    FROM SPI_CASO(:PAINEL_ID, :MOTIVO_ID, :TIPO_ID, :ORIGEM_ID, 'AGENDA_AUT', :VEMPRESA_ID, CAST(:VTOTAL_VALOR AS NUMERIC(15,2)), FN_ELIPSE2(:VMENSAGEM, 6000), :VPAGAMENTO_FORMA_ID, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 0, 'TBAGENDAMENTO') SPC
    
                INTO
                    :VCASO_ID
    
                DO
                BEGIN

                    /* Atualizando vinculo das parcelas */
                    FOR
                        SELECT
                            SP.OSPLIT
                        FROM SPLIT_V2(:VNFS_PARC_ID, ',') SP

                    INTO
                        :VSPLIT

                    DO
                    BEGIN

                        UPDATE TBNFS_PARCELAMENTO
                            SET CASO_ID = :VCASO_ID
                            WHERE CONTROLE = :VSPLIT;

                    END
    
                    /* Historico para geracao de novo caso */
                    EXECUTE PROCEDURE SPI_CASO_HISTORICO(:VCASO_ID, :PAINEL_ID, 'CASO REGISTRADO VIA AGENDAMENTO DE SISTEMA - '||:VQTD_DOCUMENTOS||' Parcelas Vinculadas');

                END
            END

        END
    END

    /**************************************************************************/
    /**************************************************************************/

    /* Executa a finalizacao de casos abertos com todas as parcelas baixadas */
    EXECUTE PROCEDURE SPU_REGUA_COBRANCA_FINALIZACAO(0);

END
^

SET TERM ; ^

COMMENT ON PARAMETER SPU_REGUA_COBRANCA_CASO.IDIAS IS
'Dias de tolerancia';

COMMENT ON PARAMETER SPU_REGUA_COBRANCA_CASO.IEMPRESA_ID IS
'Empresa para executar operação específica';

/*********************************************************************************************************/
/*********************************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbnfs_parcelamento_b9u for tbnfs_parcelamento
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_CASO VARCHAR(500);
DECLARE VARIABLE NEW_CASO VARCHAR(500);
DECLARE VARIABLE VPAINEL_ID INTEGER;
DECLARE VARIABLE VFEED_ID INTEGER;
DECLARE VARIABLE VASSUNTO VARCHAR(500);
DECLARE VARIABLE VMENSAGEM VARCHAR(500);
begin

    :VPAINEL_ID             = COALESCE((SELECT FIRST 1 A.PAINEL_ID FROM TBCASO_REGISTRO A, TBCASO_STATUS B WHERE A.STATUS_ID = B.ID AND A.PAINEL_ID = B.PAINEL_ID AND A.FECHADO = 0 AND A.ID = NEW.CASO_ID), 0);
    :VFEED_ID               = 0;
    :VASSUNTO               = '';
    :VMENSAGEM              = '';

    HISTORICO = '';

    if (New.Controle > 0) then
       Begin
    
           if (OLD.DATA_VENCIMENTO <> NEW.DATA_VENCIMENTO) THEN
               BEGIN
               HISTORICO = HISTORICO||' DT.VCTO.'||OLD.DATA_VENCIMENTO||'->'||NEW.DATA_VENCIMENTO;

                   INSERT INTO TBNFS_PARCELAMENTO_VENCIMENTO
                   (NFS_PARCELAMENTO_ID, DATA_VENCIMENTO_ANTIGA, DATA_VENCIMENTO_NOVA)
                   VALUES (NEW.CONTROLE, OLD.DATA_VENCIMENTO, NEW.DATA_VENCIMENTO);


                   /***********************************************************/

                   IF (COALESCE(:VPAINEL_ID, 0) > 0) THEN
                   BEGIN
                        :VFEED_ID = GEN_ID(GTBCASO_FEED, 1);


                        :VASSUNTO  = 'AGENDAMENTO: [CASO: '||FN_LPAD(NEW.CASO_ID, 8, '0')||'] - INFORMACOES DE COBRANCA';

                        :VMENSAGEM = :VMENSAGEM||'<p> '||'Dt. Vencimento da parcela alterada:'||' </p>'||ASCII_CHAR(13)||ASCII_CHAR(10)||'';
                        :VMENSAGEM = :VMENSAGEM||'<p> '||'Dt.Anterior: '||FORMATDATE(OLD.DATA_VENCIMENTO)||' , Dt.Nova: '||FORMATDATE(NEW.DATA_VENCIMENTO)||' </p>'||ASCII_CHAR(13)||ASCII_CHAR(10)||'';
                        :VMENSAGEM = :VMENSAGEM||'<p> '||'ESTAB.: '||FN_LPAD(NEW.ESTABELECIMENTO_CODIGO, 4, '0')||' | DOC.: '||FN_LPAD(NEW.NUMERO_NOTAFISCAL, 8, '0')||'/'||FN_LPAD(NEW.SERIE, 3, '0')||'-'||FN_LPAD(NEW.PARCELA, 3, '0')||' | DT.VENC.: '||FORMATDATE(NEW.DATA_VENCIMENTO)||' | VALOR: R$ '||FN_LPAD(FN_FORMAT_NUMBER2(NEW.VALOR_SALDO, 2), 10, '')||' </p>';

    
                        INSERT INTO TBCASO_FEED (ID, DE, PARA, EM_COPIA, EM_COPIA_OCULTA, MENSAGEM, ASSUNTO, PAINEL_ID, CASO_ID, FILES, SUBFEED, TIPO, USUARIO_ID, COMENTARIO, LISTA_FILE, WORKFLOW_ITEM_ID)
                            VALUES (:VFEED_ID, '', '', '', '', :VMENSAGEM, FN_ELIPSE(:VASSUNTO, 300), :VPAINEL_ID, NEW.CASO_ID, 1, 0, 2, 99999, 0, '', 0);

                   END

               END
           IF (OLD.VALOR <> NEW.VALOR) THEN
               BEGIN
               HISTORICO = HISTORICO||' VALOR '||OLD.VALOR||'->'||NEW.VALOR;
               END
           IF (OLD.VALOR_DESCONTO <> NEW.VALOR_DESCONTO) THEN
               BEGIN
               HISTORICO = HISTORICO||' VR.DESC.'||OLD.VALOR_DESCONTO||'->'||NEW.VALOR_DESCONTO;
               END
           IF (OLD.CONTA_RECEBER_OPERACAO <> NEW.CONTA_RECEBER_OPERACAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' OPER.'||OLD.CONTA_RECEBER_OPERACAO||'->'||NEW.CONTA_RECEBER_OPERACAO;
               END
           IF (OLD.CONTA_RECEBER_BANCO <> NEW.CONTA_RECEBER_BANCO) THEN
               BEGIN
               HISTORICO = HISTORICO||' BCO.'||OLD.CONTA_RECEBER_BANCO||'->'||NEW.CONTA_RECEBER_BANCO;
               END
           IF (OLD.CONTA_RECEBER_MODALIDADE <> NEW.CONTA_RECEBER_MODALIDADE) THEN
               BEGIN
               HISTORICO = HISTORICO||' MOD.'||OLD.CONTA_RECEBER_MODALIDADE||'->'||NEW.CONTA_RECEBER_MODALIDADE;
               END
           IF (OLD.CONTA_RECEBER_POSICAO <> NEW.CONTA_RECEBER_POSICAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' POS.'||OLD.CONTA_RECEBER_POSICAO||'->'||NEW.CONTA_RECEBER_POSICAO;
               END
           IF (OLD.CONTA_RECEBER_COBRANCA <> NEW.CONTA_RECEBER_COBRANCA) THEN
               BEGIN
               HISTORICO = HISTORICO||' COB.'||OLD.CONTA_RECEBER_COBRANCA||'->'||NEW.CONTA_RECEBER_COBRANCA;
               END

           IF (OLD.PAGAMENTO_FORMA <> NEW.PAGAMENTO_FORMA) THEN
               BEGIN
               HISTORICO = HISTORICO||' PG.FORMA.'||OLD.PAGAMENTO_FORMA||'->'||NEW.PAGAMENTO_FORMA;
               END
           IF (OLD.CLASSIFICACAO_CONTABIL <> NEW.CLASSIFICACAO_CONTABIL) THEN
               BEGIN
               HISTORICO = HISTORICO||' CLASS.FIN.'||OLD.CLASSIFICACAO_CONTABIL||'->'||NEW.CLASSIFICACAO_CONTABIL;
               END
           IF (OLD.CCUSTO <> NEW.CCUSTO) THEN
               BEGIN
               HISTORICO = HISTORICO||' C.CUSTO '||OLD.CCUSTO||'->'||NEW.CCUSTO;
               END
           IF (OLD.ACEITE <> NEW.ACEITE) THEN
               BEGIN
               HISTORICO = HISTORICO||' ACEITE '||OLD.ACEITE||'->'||NEW.ACEITE;
               END
           IF (OLD.VIA_DUPLICATA <> NEW.VIA_DUPLICATA) THEN
               BEGIN
               HISTORICO = HISTORICO||' VIA DUP.'||OLD.VIA_DUPLICATA||'->'||NEW.VIA_DUPLICATA;
               END

          IF (OLD.REMESSA_NUMERO_BANCO IS DISTINCT FROM NEW.REMESSA_NUMERO_BANCO) THEN
               BEGIN
               HISTORICO = HISTORICO||' NR.BCO.COB.'||FN_IS_EMPTY(OLD.REMESSA_NUMERO_BANCO)||'->'||FN_IS_EMPTY(NEW.REMESSA_NUMERO_BANCO);
               END
           IF (OLD.REMESSA_ARQUIVO <> NEW.REMESSA_ARQUIVO) THEN
               BEGIN
               HISTORICO = HISTORICO||' ARQ.COB.'||OLD.REMESSA_ARQUIVO||'->'||NEW.REMESSA_ARQUIVO;
               END
           IF (OLD.REMESSA_DATA <> NEW.REMESSA_DATA) THEN
               BEGIN
               HISTORICO = HISTORICO||' DT.COB.'||OLD.REMESSA_DATA||'->'||NEW.REMESSA_DATA;
               END
           IF (OLD.VALOR_SALDO <> NEW.VALOR_SALDO) THEN
               BEGIN
               HISTORICO = HISTORICO||' SALDO '||OLD.VALOR_SALDO||'->'||NEW.VALOR_SALDO;

               /***********************************************************/

               IF (COALESCE(:VPAINEL_ID, 0) > 0 AND COALESCE(NEW.VALOR_SALDO, 0) = 0) THEN
               BEGIN
                    :VFEED_ID = GEN_ID(GTBCASO_FEED, 1);


                    :VASSUNTO  = 'AGENDAMENTO: [CASO: '||FN_LPAD(NEW.CASO_ID, 8, '0')||'] - INFORMACOES DE COBRANCA';

                    :VMENSAGEM = :VMENSAGEM||'<p> '||'Parcela Baixada!'||' </p>'||ASCII_CHAR(13)||ASCII_CHAR(10)||'';
                    :VMENSAGEM = :VMENSAGEM||'<p> '||'ESTAB.: '||FN_LPAD(NEW.ESTABELECIMENTO_CODIGO, 4, '0')||' | DOC.: '||FN_LPAD(NEW.NUMERO_NOTAFISCAL, 8, '0')||'/'||FN_LPAD(NEW.SERIE, 3, '0')||'-'||FN_LPAD(NEW.PARCELA, 3, '0')||' | DT.VENC.: '||FORMATDATE(NEW.DATA_VENCIMENTO)||' | VALOR: R$ '||FN_LPAD(FN_FORMAT_NUMBER2(NEW.VALOR_SALDO, 2), 10, '')||' </p>';


                    INSERT INTO TBCASO_FEED (ID, DE, PARA, EM_COPIA, EM_COPIA_OCULTA, MENSAGEM, ASSUNTO, PAINEL_ID, CASO_ID, FILES, SUBFEED, TIPO, USUARIO_ID, COMENTARIO, LISTA_FILE, WORKFLOW_ITEM_ID)
                        VALUES (:VFEED_ID, '', '', '', '', :VMENSAGEM, FN_ELIPSE(:VASSUNTO, 300), :VPAINEL_ID, NEW.CASO_ID, 1, 0, 2, 99999, 0, '', 0);

                    /***************************************************/

                    EXECUTE PROCEDURE SPU_REGUA_COBRANCA_FINALIZACAO(NEW.CASO_ID);
               END

               END

           IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' OBS.'||OLD.OBSERVACAO||'->'||NEW.OBSERVACAO;
               END

           IF (OLD.REPRESENTANTE_COMISSAO <> NEW.REPRESENTANTE_COMISSAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' %COM.'||OLD.REPRESENTANTE_COMISSAO||'->'||NEW.REPRESENTANTE_COMISSAO;
               END

           IF (OLD.FORMA_COMISSAO <> NEW.FORMA_COMISSAO) THEN
               BEGIN
               HISTORICO = HISTORICO||' FORMA COM.'||OLD.FORMA_COMISSAO||'->'||NEW.FORMA_COMISSAO;
               END

           IF (OLD.CASO_ID <> NEW.CASO_ID) THEN
               BEGIN

               OLD_CASO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 6, '0')||' ('||B.DESCRICAO||')' FROM TBCASO_REGISTRO A, TBCASO_STATUS B WHERE A.STATUS_ID = B.ID AND A.PAINEL_ID = B.PAINEL_ID AND A.ID = OLD.CASO_ID), '');
               NEW_CASO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 6, '0')||' ('||B.DESCRICAO||')' FROM TBCASO_REGISTRO A, TBCASO_STATUS B WHERE A.STATUS_ID = B.ID AND A.PAINEL_ID = B.PAINEL_ID AND A.ID = NEW.CASO_ID), '');

               HISTORICO = HISTORICO||' CASO:'||OLD_CASO||'->'||NEW_CASO;

               END

       if (HISTORICO <> '') then
           Begin
             INSERT INTO TBHISTORICO
                      (
                      TABELA,
                      TABELA_ID,
                      USUARIO, IP,
                      HISTORICO
                      )
               VALUES(
                      'TBNFS_PARCELAMENTO',
                      Old.CONTROLE,
                      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
                      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
                      FN_ELIPSE(:Historico, 500)
                      );

              IF(NEW.nfs_controle > 0)THEN
              BEGIN
                  INSERT INTO TBHISTORICO
                      (
                      TABELA,
                      TABELA_ID,
                      USUARIO, IP,
                      HISTORICO
                      )
                    VALUES(
                      'TBNFS',
                      Old.nfs_controle,
                      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
                      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
                      'PARC.'||fn_lpad(new.parcela, 2,0)||''||FN_ELIPSE(:Historico, 450)
                      );
              END

              IF(NEW.pdv_cfe_forma_pagamento_id > 0)THEN
              BEGIN
                  INSERT INTO TBHISTORICO
                     (
                      TABELA,
                      TABELA_ID,
                      USUARIO, IP,
                      HISTORICO
                      )
                    VALUES(
                      'TBPDV_CFE',
                      COALESCE((SELECT FIRST 1 C.PDV_CFE_ID FROM tbpdv_cfe_forma_pagamento C WHERE C.ID = NEW.pdv_cfe_forma_pagamento_id),0),
                      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
                      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
                      'PARC.'||fn_lpad(new.parcela, 2,0)||''||FN_ELIPSE(:Historico, 450)
                    );
              END

           End
       End

end
^

SET TERM ; ^