CREATE OR ALTER PROCEDURE SPI_NF_CONTABIL (
    ORIGEM VARCHAR(3),
    NF_ID INTEGER)
RETURNS (
    ESTABELECIMENTO_ID INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    DATA DATE,
    HISTORICO_CONTABIL VARCHAR(100),
    CONTA_DEBITO VARCHAR(50),
    CONTA_CREDITO VARCHAR(50),
    VALOR NUMERIC(18,2),
    VFALHAS VARCHAR(50))
AS
DECLARE VARIABLE IDCONTMOV INTEGER;
BEGIN

      /*EXCLUI CONTABILIZACAO DA NOTA FISCAL, SE HOUVER*/
      FOR SELECT DISTINCT
                 B.IDCONTMOV
            FROM TBMOVCONTABIL B
           WHERE B.IDDOCUMENTO = :NF_ID
             AND B.CODORIGEM   = :ORIGEM
            INTO :IDCONTMOV
              DO BEGIN
                 DELETE FROM TBMOVCONTMESTRE WHERE ID = :IDCONTMOV;
                 DELETE FROM TBMOVCONTABIL   WHERE IDCONTMOV = :IDCONTMOV;
                 END

      /*CONULTA A CONTABILIZACAO DA NOTA FISCAL, CONFORME REGRAS DEFINIDAS NAS OPERACOES DOS ITENS E PARCELAS*/
      FOR SELECT
                ESTABELECIMENTO_ID,
                NUMERO_NOTAFISCAL,
                DATA,                                                        
                HISTORICO_CONTABIL,
                CONTA_DEBITO,
                CONTA_CREDITO,
                VALOR,
                VFALHAS
            FROM SP_NF_CONTABIL (:ORIGEM,:NF_ID)
            ORDER BY VFALHAS DESC
      INTO :ESTABELECIMENTO_ID, :NUMERO_NOTAFISCAL, :DATA, :HISTORICO_CONTABIL, :CONTA_DEBITO, :CONTA_CREDITO, :VALOR, :VFALHAS
      DO BEGIN
           IF (:VALOR > 0) THEN
               BEGIN

                IF (:VFALHAS <> '') THEN
                    EXCEPTION "..." 'FALHA NA CONTABILIZACAO DESSE DOCUMENTO:'||ASCII_CHAR(13)||:VFALHAS;

                /*PROCESSA CONTABILIZACAO DA NOTA FISCAL, CONFORME CONSULTA ANTERIOR*/
                IDCONTMOV = GEN_ID(GTBMOVCONTMESTRE,1);
                INSERT INTO TBMOVCONTMESTRE (ID, CODESTABELECIMENTO, DATA) VALUES (:IDCONTMOV, :ESTABELECIMENTO_ID, :DATA);
                INSERT INTO TBMOVCONTABIL (CODESTABELECIMENTO, IDCONTMOV, DATA, NATUREZA, IDDOCUMENTO, DESCRICAO,
                                           CODORIGEM, HISTORICO, CONTA, VALOR, HISTORICO_DRE)
                                  VALUES (:ESTABELECIMENTO_ID, :IDCONTMOV, :DATA, 'D', :NF_ID, LPAD(:NUMERO_NOTAFISCAL,10,'0'), :ORIGEM,
                                          :HISTORICO_CONTABIL, :CONTA_DEBITO, :VALOR, '');
                INSERT INTO TBMOVCONTABIL (CODESTABELECIMENTO, IDCONTMOV, DATA, NATUREZA, IDDOCUMENTO, DESCRICAO,
                                           CODORIGEM, HISTORICO, CONTA, VALOR, HISTORICO_DRE)
                                  VALUES (:ESTABELECIMENTO_ID, :IDCONTMOV, :DATA, 'C', :NF_ID, LPAD(:NUMERO_NOTAFISCAL,10,'0'), :ORIGEM,
                                          :HISTORICO_CONTABIL, :CONTA_CREDITO, :VALOR, '');
              
               SUSPEND;
               END
         END

END;