create or replace PROCEDURE CONTABILIZA_CONTAS_CNC(P_CDFILIAL IN VARCHAR,
                                                   P_DTVENDA IN DATE,
                                                   P_CDTIPORECE IN VARCHAR)
AS
   V_COUNT NUMBER;
   V_CDLOTE VARCHAR2(20);
   V_NRLANCLOTE VARCHAR2(06);
   V_NRSEQLANLOTE VARCHAR2(05);
   V_DSHISTLANC LANCCONT.DSHISTLANC%TYPE;
   V_CDCONTCTBL CONTCTBL.CDCONTCTBL%TYPE;
   V_CDCLIENTEAUX CLIENTE.CDCLIENTE%TYPE;
   V_IDTIPOCOME CONTCTBL.IDTIPOCOME%TYPE;
   V_IDCONTCCUS CONTCTBL.IDCONTCCUS%TYPE;
   V_CDHISTPADR VARCHAR2(04);
   V_FATOR NUMBER;
   V_ERROS VARCHAR2(5000);
   V_CTBCORRETO BOOLEAN;
   V_NRLANCTEMP VARCHAR2(50);
   V_CDCENTCUST VARCHAR2(04);
   V_NRORG NUMBER;
   V_VRDEB NUMBER;
   V_VRCRED NUMBER;
   V_CONTACLIENTE VARCHAR2(20);
   V_CONTATIPOCONTA VARCHAR2(20);
   V_CONTAAJUSTE VARCHAR2(20);
   V_COUNTLOTE NUMBER;
   V_DATAINICIO DATE;
   FUNCTION AJUSTA(P_STRING IN VARCHAR, P_TAMANHO IN NUMBER)
   RETURN VARCHAR
   AS
   BEGIN
      RETURN LPAD(TO_CHAR(P_STRING), P_TAMANHO,'0');
   END;
   FUNCTION MONTAHIST(P_CDHISTPADR IN HISTPADR.CDHISTPADR%TYPE,
                      P_DSTPCTRECEB IN VARCHAR2,
                      P_NRINSJURCLIE IN VARCHAR2,
                      P_NMFANTCLIE IN VARCHAR2,
                      P_NMRAZSOCCLIE IN VARCHAR2) RETURN VARCHAR2
   AS
      V_DSHISTPADR VARCHAR2(200); -- Variavel que sera retornada com o Historico
   BEGIN
      BEGIN
         SELECT DSHISTPADR
           INTO V_DSHISTPADR
           FROM HISTPADR
          WHERE CDHISTPADR = P_CDHISTPADR;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_DSHISTPADR :=  NULL;
      END;
      V_DSHISTPADR := REPLACE(V_DSHISTPADR, '[FIL]', P_CDFILIAL);
      V_DSHISTPADR := REPLACE(V_DSHISTPADR, '[TCR]', P_DSTPCTRECEB);
      V_DSHISTPADR := REPLACE(V_DSHISTPADR, '[CLI]', P_NRINSJURCLIE);
      V_DSHISTPADR := REPLACE(V_DSHISTPADR, '[NFC]', P_NMFANTCLIE);
      V_DSHISTPADR := REPLACE(V_DSHISTPADR, '[RSC]', P_NMRAZSOCCLIE);
      V_DSHISTPADR := REPLACE(V_DSHISTPADR, '[NCR]', P_DSTPCTRECEB);
      RETURN V_DSHISTPADR;
   END;
BEGIN
   V_DATAINICIO := NULL;
   /* DATA DE INICIO DE INTEGRACAO - PARAMETRO DO CNC */
   BEGIN
      SELECT TRUNC(DTINICIOINT)
        INTO V_DATAINICIO
        FROM CTRLDTFINCNC;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_DATAINICIO := NULL;
   END;
   IF P_DTVENDA >= V_DATAINICIO THEN
      V_NRLANCLOTE := '000000';
      V_NRSEQLANLOTE := '00000';
      V_CDLOTE := NULL;
      V_COUNTLOTE := NULL;
      FOR C_CONTAS IN
         (SELECT VENDA.*
            FROM (SELECT NF.CDEMPRESA, NF.CDFILIAL, C.DTVENDA, TC.CDTIPORECE, TC.NMTIPORECE, TC.CDCLIENTE,
                         T.CDHISTPADR, T.DSTPCTRECEB, NF.NRINSJURNF, CL.NMFANTCLIE, CL.NMRAZSOCCLIE, C.NRORG,
                         CO.IDCONTGERE, T.CDCONTCTBLCNC, TC.IDGERAFIN, TC.IDCONTAPREVCNC,
                         SUM(NF.VRPRODUTOS) VRNOTAFISC
                    FROM CONSMOVCAIXA C, NOTAFISCAL NF, CONTARECEBER CT, TIPOCTRECEBER T, TIPORECE TC, CLIENTE CL, CONTOPECTBL CO
                   WHERE C.CDFILIAL = P_CDFILIAL
                     AND C.CDFILIALNF = NF.CDFILIAL
                     AND C.NRLANCTONF = NF.NRLANCTONF
                     AND C.CDTIPORECE = P_CDTIPORECE
                     AND C.DTVENDA = P_DTVENDA
                     AND NF.CDFILIAL = CT.CDFILIAL
                     AND NF.NRLANCTONF = CT.NRLANCTONF
                     AND TC.CDTPCTRECEB = T.CDTPCTRECEB
                     AND T.IDCTBLCTREC = 'S'
                     AND C.CDTIPORECE = TC.CDTIPORECE
                     AND TC.CDCLIENTE = CL.CDCLIENTE
                     AND NF.CDEMPRESA = CO.CDEMPRESA
                   GROUP BY NF.CDEMPRESA, NF.CDFILIAL, C.DTVENDA, TC.CDTIPORECE, TC.NMTIPORECE, TC.CDCLIENTE,
                            T.CDHISTPADR, T.DSTPCTRECEB, NF.NRINSJURNF, CL.NMFANTCLIE, CL.NMRAZSOCCLIE, C.NRORG,
                            CO.IDCONTGERE, T.CDCONTCTBLCNC, TC.IDGERAFIN, TC.IDCONTAPREVCNC
                   ORDER BY NF.CDFILIAL, C.DTVENDA, TC.CDTIPORECE) VENDA LEFT JOIN TIPORECEFILIAL TF
                                                                                ON TF.CDFILIAL = VENDA.CDFILIAL
                                                                               AND TF.CDTIPORECE = VENDA.CDTIPORECE
          WHERE NVL(TF.IDCONTAREPFOS, VENDA.IDCONTAPREVCNC) = 'S'
            AND NVL(NVL(TF.IDGERAFINFIL, VENDA.IDGERAFIN), 'N') = 'N') LOOP
         V_CDLOTE := 'CNC'||C_CONTAS.CDFILIAL||TO_CHAR(C_CONTAS.DTVENDA, 'DDMMYYYY')||C_CONTAS.CDTIPORECE||RTRIM(NVL(CHR(V_COUNTLOTE), ' '));
         V_COUNT := 0;
         V_NRORG := C_CONTAS.NRORG;
         BEGIN
            SELECT COUNT(*)
              INTO V_COUNT
              FROM CAPALOTE
             WHERE CDEMPRESA = C_CONTAS.CDEMPRESA
               AND CDLOTE = V_CDLOTE;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_COUNT := 0;
         END;
         IF V_COUNT = 0 THEN
            INSERT INTO CAPALOTE
               (CDEMPRESA, CDLOTE, DTINICLOTE, DTFINALOTE, IDLOTE, DSOBSELOTE)
            VALUES
               (C_CONTAS.CDEMPRESA, V_CDLOTE, C_CONTAS.DTVENDA, C_CONTAS.DTVENDA, 'D', 'FIL:'||C_CONTAS.CDFILIAL||'-'||C_CONTAS.NMTIPORECE);
         ELSE
            REVERTE_LOTE(C_CONTAS.CDEMPRESA, V_CDLOTE);
            DELETE
              FROM RATECCUS
             WHERE CDEMPRESA = C_CONTAS.CDEMPRESA
               AND CDLOTE = V_CDLOTE;
            DELETE
              FROM LANCLOTE
             WHERE CDEMPRESA = C_CONTAS.CDEMPRESA
               AND CDLOTE = V_CDLOTE;
         END IF;
         /* BUSCA HISTORICO PADRAO DE INTEGRACAO DO REC */
         BEGIN
            SELECT HI.CDHISTPADR
              INTO V_CDHISTPADR
              FROM HISTINTEGRA HI, HISTPADR HP
             WHERE HI.CDHISTPADR = HP.CDHISTPADR
               AND HI.CDOPERACAO = 'CTAREC';
         EXCEPTION
            WHEN NO_DATA_FOUND THEN BEGIN
               V_CDHISTPADR := NULL;
            END;
         END;
         /* VERIFICA SE EXISTE HISTORIO CADASTRADO NO TIPO DE CONTA, CASO NAO EXISTA PEGA DO HISTORICO DE INTEGRACAO REC */
         IF C_CONTAS.CDHISTPADR IS NOT NULL THEN
            V_CDHISTPADR := C_CONTAS.CDHISTPADR;
         END IF;
         /* FORMATA A DESCRICAO DO HISTORICO PADRAO BUSCADO, DO TIPO DE CONTA OU DE INTEGRACAO */
         V_DSHISTLANC := MONTAHIST(V_CDHISTPADR, C_CONTAS.DSTPCTRECEB, C_CONTAS.NRINSJURNF, C_CONTAS.NMFANTCLIE, C_CONTAS.NMRAZSOCCLIE);
         /* DEBITA NA CONTA CONTABIL DE CLIENTE */
         V_CDCONTCTBL := CTB_CCCLIENTE(C_CONTAS.CDCLIENTE, C_CONTAS.CDFILIAL, C_CONTAS.CDEMPRESA);
         BUSCA_TPCOMERCIAL(V_CDCONTCTBL, V_IDTIPOCOME, V_IDCONTCCUS);
         /*VERIFICA O TIPO DE CODIGO COMERCIAL, CASO SEJA DIFERENTE DE CLIENTE, E PASSADO NULO PARA A PARTIDA. */
         V_CDCLIENTEAUX := C_CONTAS.CDCLIENTE;
         IF V_IDTIPOCOME <> 'C' THEN
            V_CDCLIENTEAUX := NULL;
            V_IDTIPOCOME   := NULL;
         END IF;
         /* NRLANCLOTE DA TABELA LANCLOTE DEVERA TER SOMENTE 1 POR TIPO DE RECEBIMENTO */
         V_NRLANCLOTE := AJUSTA(TO_NUMBER(V_NRLANCLOTE)+1, 6);
         /* CONTROLADOR DE SEQUENCIAIS DE PARTIDAS DENTRO DO LOTE */
         V_NRSEQLANLOTE := AJUSTA(TO_NUMBER(V_NRSEQLANLOTE)+1, 5);
         /**********************************************************************
           DEBITA NA CONTA CONTABIL DO CLIENTE
          **********************************************************************/
         V_CONTACLIENTE := V_CDCONTCTBL;
         INSERT INTO LANCLOTE
            (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE, DTLANCLOTE, CDCONTCTBL,
             CDHISTPADR, DSHISTLOTE, IDLLOTCOME, CDLLOTCOME, VRLANCLOTE,
             NRDOCULOTE)
         VALUES
            (C_CONTAS.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE, C_CONTAS.DTVENDA, V_CONTACLIENTE,
             V_CDHISTPADR, V_DSHISTLANC, V_IDTIPOCOME, V_CDCLIENTEAUX, C_CONTAS.VRNOTAFISC * -1,
             'CNC'||TO_CHAR(C_CONTAS.DTVENDA, 'DDMMYYYY')||C_CONTAS.CDFILIAL||C_CONTAS.CDTIPORECE);
         /* VERIFICA SE A EMPRESA GERA O RATEIO CONTABIL. */
         IF C_CONTAS.IDCONTGERE = 'S' THEN
            /* VERIFICA SE A CONTA NAO E SO OFICIAL*/
            IF V_IDCONTCCUS <> 'O' THEN
               V_CDCENTCUST := BUSCA_CCUSTO(C_CONTAS.CDFILIAL, C_CONTAS.CDEMPRESA);
               IF V_CDCENTCUST IS NOT NULL THEN
                   INSERT INTO RATECCUS
                      (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,
                       CDFILIAL, CDCENTCUST, VRRATECCUS, DTCOMPRATECCUS)
                   VALUES
                      (C_CONTAS.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE,
                       C_CONTAS.CDFILIAL, V_CDCENTCUST, C_CONTAS.VRNOTAFISC * -1, C_CONTAS.DTVENDA);
                END IF;
            END IF;
         END IF;
         /* FAZ A MESMA VERIFICACAO SE A CONTA CONTABIL E DO TIPO CLIENTE */
         BUSCA_TPCOMERCIAL(C_CONTAS.CDCONTCTBLCNC, V_IDTIPOCOME, V_IDCONTCCUS);
         V_CDCLIENTEAUX := C_CONTAS.CDCLIENTE;
         IF V_IDTIPOCOME <> 'C' THEN
            V_CDCLIENTEAUX := NULL;
            V_IDTIPOCOME   := NULL;
         END IF;
         /**********************************************************************
          CREDITA NA CONTA CONTABIL DO TIPO DE CONTA
          **********************************************************************/
         V_NRSEQLANLOTE := AJUSTA(TO_NUMBER(V_NRSEQLANLOTE)+1, 5);
         V_CONTATIPOCONTA := C_CONTAS.CDCONTCTBLCNC;
         INSERT INTO LANCLOTE
            (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE, DTLANCLOTE, CDCONTCTBL,
             CDHISTPADR, DSHISTLOTE, IDLLOTCOME, CDLLOTCOME, VRLANCLOTE,
             NRDOCULOTE)
         VALUES
            (C_CONTAS.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE, C_CONTAS.DTVENDA, C_CONTAS.CDCONTCTBLCNC,
             V_CDHISTPADR, V_DSHISTLANC, V_IDTIPOCOME, V_CDCLIENTEAUX, C_CONTAS.VRNOTAFISC,
             'CNC'||TO_CHAR(C_CONTAS.DTVENDA, 'DDMMYYYY')||C_CONTAS.CDFILIAL||C_CONTAS.CDTIPORECE);
         /* VERIFICA SE A EMPRESA GERA O RATEIO CONTABIL. */
         IF C_CONTAS.IDCONTGERE = 'S' THEN
            /* VERIFICA SE A CONTA NAO E SO OFICIAL*/
            IF V_IDCONTCCUS <> 'O' THEN
               V_CDCENTCUST := BUSCA_CCUSTO(C_CONTAS.CDFILIAL, C_CONTAS.CDEMPRESA);
               IF V_CDCENTCUST IS NOT NULL THEN
                   INSERT INTO RATECCUS
                      (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,
                       CDFILIAL, CDCENTCUST, VRRATECCUS, DTCOMPRATECCUS)
                   VALUES
                      (C_CONTAS.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE,
                       C_CONTAS.CDFILIAL, V_CDCENTCUST, C_CONTAS.VRNOTAFISC, C_CONTAS.DTVENDA);
                END IF;
            END IF;
         END IF;
         /* CONTABILIZA OS AJUSTES GERADOS EM TODAS AS CONTAS A RECEBER */
         FOR C_AJUSTES IN
            (SELECT NF.CDEMPRESA, NF.CDFILIAL, C.DTVENDA DTVENDA, TC.CDTIPORECE, TC.NMTIPORECE, TC.CDCLIENTE,
                    TA.CDHISTPADR, T.DSTPCTRECEB, NF.NRINSJURNF, CL.NMFANTCLIE, CL.NMRAZSOCCLIE, 
                    AJ.CDAJUCTREC, AJ.DSAJUSTEREC,
                    CO.IDCONTGERE, TA.CDCONTCTBL,  TA.IDAJUCTREC,
                    SUM(AJ.VRAJUSTEREC) VRAJUSTEREC
               FROM CONSMOVCAIXA C, NOTAFISCAL NF, CONTARECEBER CT,
                    TIPOCTRECEBER T, TIPORECE TC, CLIENTE CL, CONTOPECTBL CO,
                    AJCTRECEBER AJ, TIPOAJRECEBER TA
              WHERE C.CDFILIAL = P_CDFILIAL
                AND C.CDFILIALNF = NF.CDFILIAL
                AND C.NRLANCTONF = NF.NRLANCTONF
                AND C.CDTIPORECE = P_CDTIPORECE
                AND C.DTVENDA = P_DTVENDA
                AND NF.CDFILIAL = CT.CDFILIAL
                AND NF.NRLANCTONF = CT.NRLANCTONF
                AND TC.CDTPCTRECEB = T.CDTPCTRECEB
                AND T.IDCTBLCTREC = 'S'
                AND C.CDTIPORECE = TC.CDTIPORECE
                AND TC.CDCLIENTE = CL.CDCLIENTE
                AND NF.CDEMPRESA = CO.CDEMPRESA
                AND NF.CDFILIAL = AJ.CDFILIAL
                AND NF.NRLANCTONF = AJ.NRLANCTONF
                AND AJ.CDAJUCTREC = TA.CDAJUCTREC
                AND NF.CDCLIENTE = C_CONTAS.CDCLIENTE
              GROUP BY NF.CDEMPRESA, NF.CDFILIAL, C.DTVENDA, TC.CDTIPORECE, TC.NMTIPORECE, TC.CDCLIENTE,
                       TA.CDHISTPADR, T.DSTPCTRECEB, NF.NRINSJURNF, CL.NMFANTCLIE, CL.NMRAZSOCCLIE,
                       AJ.CDAJUCTREC, AJ.DSAJUSTEREC,
                       CO.IDCONTGERE, TA.CDCONTCTBL, TA.IDAJUCTREC
              ORDER BY 1) LOOP
            /* VERIFICA SE E UM AJUSTE DE DESCONTO OU ACRESCIMO */
            IF C_AJUSTES.IDAJUCTREC = 'D' THEN
               V_FATOR :=  -1;
            ELSE
               V_FATOR := 1;
            END IF;
            /* FORMATA A DESCRICAO DO HISTORICO PADRAO BUSCADO, DO TIPO DE CONTA OU DE INTEGRACAO */
            V_DSHISTLANC := MONTAHIST(V_CDHISTPADR, C_AJUSTES.DSTPCTRECEB, C_AJUSTES.NRINSJURNF, C_AJUSTES.NMFANTCLIE, C_AJUSTES.NMRAZSOCCLIE);
            V_CDCONTCTBL := CTB_CCCLIENTE(C_AJUSTES.CDCLIENTE, C_AJUSTES.CDFILIAL, C_AJUSTES.CDEMPRESA);
            IF C_AJUSTES.IDAJUCTREC = 'A' THEN
               V_CONTAAJUSTE := V_CONTATIPOCONTA;
            ELSE
               V_CONTAAJUSTE := V_CDCONTCTBL;
            END IF;
            BUSCA_TPCOMERCIAL(V_CONTAAJUSTE, V_IDTIPOCOME, V_IDCONTCCUS);
            /*VERIFICA O TIPO DE CODIGO COMERCIAL, CASO SEJA DIFERENTE DE CLIENTE, E PASSADO NULO PARA A PARTIDA. */
            V_CDCLIENTEAUX := C_AJUSTES.CDCLIENTE;
            IF V_IDTIPOCOME <> 'C' THEN
               V_CDCLIENTEAUX := NULL;
               V_IDTIPOCOME   := NULL;
            END IF;
            V_NRSEQLANLOTE := AJUSTA(TO_NUMBER(V_NRSEQLANLOTE)+1, 5);
            INSERT INTO LANCLOTE
               (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE, DTLANCLOTE, CDCONTCTBL,
                CDHISTPADR, DSHISTLOTE, IDLLOTCOME, CDLLOTCOME, VRLANCLOTE,
                NRDOCULOTE)
            VALUES
               (C_AJUSTES.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE, C_AJUSTES.DTVENDA, V_CONTAAJUSTE,
                V_CDHISTPADR, V_DSHISTLANC, V_IDTIPOCOME, V_CDCLIENTEAUX, C_AJUSTES.VRAJUSTEREC * -1 * V_FATOR,
                'CNC'||TO_CHAR(C_AJUSTES.DTVENDA, 'DDMMYYYY')||C_AJUSTES.CDFILIAL||C_AJUSTES.CDTIPORECE);
            /* VERIFICA SE A EMPRESA GERA O RATEIO CONTABIL. */
            IF C_AJUSTES.IDCONTGERE = 'S' THEN
               /* VERIFICA SE A CONTA NAO E SO OFICIAL*/
               IF V_IDCONTCCUS <> 'O' THEN
                  V_CDCENTCUST := BUSCA_CCUSTO(C_AJUSTES.CDFILIAL, C_AJUSTES.CDEMPRESA);
                  IF V_CDCENTCUST IS NOT NULL THEN
                      INSERT INTO RATECCUS
                         (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,
                          CDFILIAL, CDCENTCUST, VRRATECCUS, DTCOMPRATECCUS)
                      VALUES
                         (C_AJUSTES.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE,
                          C_AJUSTES.CDFILIAL, V_CDCENTCUST, C_AJUSTES.VRAJUSTEREC * -1 * V_FATOR, C_AJUSTES.DTVENDA);
                    END IF;
               END IF;
            END IF;
            BUSCA_TPCOMERCIAL(C_AJUSTES.CDCONTCTBL, V_IDTIPOCOME, V_IDCONTCCUS);
            /*VERIFICA O TIPO DE CODIGO COMERCIAL, CASO SEJA DIFERENTE DE CLIENTE, E PASSADO NULO PARA A PARTIDA. */
            V_CDCLIENTEAUX := C_AJUSTES.CDCLIENTE;
            IF V_IDTIPOCOME <> 'C' THEN
               V_CDCLIENTEAUX := NULL;
               V_IDTIPOCOME   := NULL;
            END IF;
            V_NRSEQLANLOTE := AJUSTA(TO_NUMBER(V_NRSEQLANLOTE)+1, 5);
            INSERT INTO LANCLOTE
               (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE, DTLANCLOTE, CDCONTCTBL,
                CDHISTPADR, DSHISTLOTE, IDLLOTCOME, CDLLOTCOME, VRLANCLOTE,
                NRDOCULOTE)
            VALUES
               (C_AJUSTES.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE, C_AJUSTES.DTVENDA, C_AJUSTES.CDCONTCTBL,
                V_CDHISTPADR, V_DSHISTLANC, V_IDTIPOCOME, V_CDCLIENTEAUX, C_AJUSTES.VRAJUSTEREC * V_FATOR,
                'CNC'||TO_CHAR(C_AJUSTES.DTVENDA, 'DDMMYYYY')||C_AJUSTES.CDFILIAL||C_AJUSTES.CDTIPORECE);
            /* VERIFICA SE A EMPRESA GERA O RATEIO CONTABIL. */
            IF C_AJUSTES.IDCONTGERE = 'S' THEN
               /* VERIFICA SE A CONTA NAO E SO OFICIAL*/
               IF V_IDCONTCCUS <> 'O' THEN
                  V_CDCENTCUST := BUSCA_CCUSTO(C_AJUSTES.CDFILIAL, C_AJUSTES.CDEMPRESA);
                  IF V_CDCENTCUST IS NOT NULL THEN
                      INSERT INTO RATECCUS
                         (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,
                          CDFILIAL, CDCENTCUST, VRRATECCUS, DTCOMPRATECCUS)
                      VALUES
                         (C_AJUSTES.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, V_NRSEQLANLOTE,
                          C_AJUSTES.CDFILIAL, V_CDCENTCUST, C_AJUSTES.VRAJUSTEREC * V_FATOR, C_AJUSTES.DTVENDA);
                    END IF;
               END IF;
            END IF;
         END LOOP;
         V_CTBCORRETO := FALSE;
         CONFERE_PARTIDA(C_CONTAS.CDEMPRESA, V_CDLOTE, V_NRLANCLOTE, C_CONTAS.DTVENDA, V_ERROS, V_CTBCORRETO);
         IF V_CTBCORRETO = FALSE THEN
            FOR C_ERROS IN
               (WITH ERROS AS
                  (SELECT DISTINCT 'TOTAL DEBITO DIFERENTE TOTAL CREDITO' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '001') > 0
                    UNION
                   SELECT DISTINCT 'VENDAS FORA DO PERIODO CONTABIL' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '002') > 0
                    UNION
                   SELECT DISTINCT 'CONTA CONTABIL NAO CADASTRADA' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '003') > 0
                    UNION
                   SELECT DISTINCT 'HISTORICO DO LANCAMENTO CONTABIL NAO CADASTRADO' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '004') > 0
                    UNION
                   SELECT DISTINCT 'CODIGO COMERCIAL NAO CADASTRADO' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '005') > 0
                    UNION
                   SELECT DISTINCT 'VALOR DA PARTIDA ZERADO' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '006') > 0
                    UNION
                   SELECT DISTINCT 'VALOR DO RATEIO ZERADO' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '007') > 0
                    UNION
                   SELECT DISTINCT 'FILIAL DO LANCAMENTO CONTABIL NAO CADASTRADA' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '008') > 0
                    UNION
                   SELECT DISTINCT 'CENTRO DE CUSTO DO LANCAMENTO CONTABIL NAO CADASTRADO PARA FILIAL' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '009') > 0
                    UNION
                   SELECT DISTINCT 'TOTAL DO RATEIO DIFERE DO TOTAL DA PARTIDA NO LANCAMENTO CONTABIL' DSERRO
                     FROM DUAL
                    WHERE INSTR(V_ERROS, '010') > 0)
                SELECT DISTINCT NRESTABELEC, NMESTABELEC, ERROS.DSERRO, E.NRORG
                  FROM ESTABELECIMENTO E, ERROS
                 WHERE CDFILIAL = P_CDFILIAL) LOOP
               DELETE FROM LOGERROCTBCNC
                WHERE NRESTABELEC = C_ERROS.NRESTABELEC
                  AND DSERRO = C_ERROS.DSERRO
                  AND DSSOLUCAO = 'REALIZAR A CONFERENCIA DO LOTE '||V_CDLOTE||' NA CONTABILIDADE.';
               GRAVAERROCTBCNC(C_ERROS.NRESTABELEC, C_CONTAS.DTVENDA, C_CONTAS.DTVENDA, C_ERROS.DSERRO, 'REALIZAR A CONFERENCIA DO LOTE '||V_CDLOTE||' NA CONTABILIDADE.', 'S', V_NRORG);
            END LOOP;
         ELSE
            V_VRDEB := 0;
            V_VRCRED := 0;
            BEGIN
               SELECT NVL(SUM(VRDEB), 0), NVL(SUM(VRCRED), 0)
                 INTO V_VRDEB, V_VRCRED
                 FROM (SELECT SUM(VRLANCLOTE) VRDEB, 0 VRCRED
                         FROM LANCLOTE
                        WHERE CDEMPRESA = C_CONTAS.CDEMPRESA
                          AND CDLOTE = V_CDLOTE
                          AND VRLANCLOTE < 0
                        UNION
                       SELECT 0 VRDEB, SUM(VRLANCLOTE) VRCRED
                         FROM LANCLOTE
                        WHERE CDEMPRESA = C_CONTAS.CDEMPRESA
                          AND CDLOTE = V_CDLOTE
                          AND VRLANCLOTE > 0);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_VRDEB := 0;
                  V_VRCRED := 0;
            END;
            UPDATE CAPALOTE
               SET VRTOTDBDIGI = V_VRDEB,
                   VRTOTCRDIGI = V_VRCRED
             WHERE CDEMPRESA = C_CONTAS.CDEMPRESA
               AND CDLOTE = V_CDLOTE;
            V_NRLANCTEMP := NULL;
            BEGIN
               SELECT MAX(NRLANCDEFI)
                 INTO V_NRLANCTEMP
                 FROM LANCLOTE
                WHERE CDLOTE = V_CDLOTE
                  AND CDEMPRESA = C_CONTAS.CDEMPRESA;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_NRLANCTEMP := NULL;
            END;
            IF V_NRLANCTEMP IS NULL THEN
               NOVO_CODIGO_NT('LANCCONTABIL' || C_CONTAS.CDEMPRESA || TO_CHAR(C_CONTAS.DTVENDA,'YYYYMM'), V_NRLANCTEMP);
               V_NRLANCTEMP := TO_CHAR(C_CONTAS.DTVENDA,'YYYYMM')||SUBSTR(V_NRLANCTEMP, 15, 6);
            END IF;
            LIBERA_LOTE(C_CONTAS.CDEMPRESA, V_CDLOTE, V_NRLANCTEMP, NULL);
            UPDATE CONSMOVCAIXA
               SET CDLOTECTB = V_CDLOTE
             WHERE CDFILIAL = C_CONTAS.CDFILIAL
               AND DTVENDA = C_CONTAS.DTVENDA
               AND CDTIPORECE = C_CONTAS.CDTIPORECE;
         END IF;
         IF V_COUNTLOTE IS NULL THEN
            V_COUNTLOTE := 64; /* COMECARA A PARTIR DO 65, CASO TENHA MAIS DE UM CLIENTE RELACIONADO NO SELECT C_CONTAS */
         END IF;
         V_COUNTLOTE := V_COUNTLOTE + 1;
         V_NRLANCLOTE := '000000';
         V_NRSEQLANLOTE := '00000';
      END LOOP;
      /* RELACIONA O NUMERO DE LANCAMENTO CONTABIL AS NOTAS E AJUSTES DO REC */
      FOR C_NRLANC IN
         (SELECT DISTINCT CDFILIALNF CDFILIAL, NRLANCTONF, NRLANCDEFI NRLANCCONT
            FROM CONSMOVCAIXA C, FILIAL F, LANCLOTE L
           WHERE CDLOTECTB = V_CDLOTE
             AND C.CDFILIAL = P_CDFILIAL
             AND C.DTVENDA = P_DTVENDA
             AND C.CDTIPORECE = P_CDTIPORECE
             AND C.CDFILIAL = F.CDFILIAL
             AND L.CDEMPRESA = F.CDEMPRESA
             AND L.CDLOTE = C.CDLOTECTB) LOOP
         UPDATE NOTAFISCAL
            SET NRLANCTBDOC = C_NRLANC.NRLANCCONT
          WHERE CDFILIAL = C_NRLANC.CDFILIAL
            AND NRLANCTONF = C_NRLANC.NRLANCTONF;
         UPDATE AJCTRECEBER
            SET NRLCTBAJREC = C_NRLANC.NRLANCCONT
          WHERE CDFILIAL = C_NRLANC.CDFILIAL
            AND NRLANCTONF = C_NRLANC.NRLANCTONF;
      END LOOP;
   END IF;
END;
/