CREATE OR REPLACE
PROCEDURE FECHA_OPERACIONAL(
    P_CDEMPRESA       IN  OPERACAOBEM.CDEMPRESA%TYPE, 
    P_NRSEQFECHABEM   IN  CAPAOPERABEM.NRSEQFECHABEM%TYPE, 
    P_NRSEQCAPAOPEBEM IN  CAPAOPERABEM.NRSEQCAPAOPEBEM%TYPE, 
    P_IDSIMULACAO     IN  OPERACAOBEM.IDSIMULOPERACAO%TYPE,
    P_CDOPERADOR      IN  OPERADOR.CDOPERADOR%TYPE, 
    P_CARGAFECHA      IN  OPERACAOBEM.IDSIMULOPERACAO%TYPE, 
    P_IDOPERACAO      IN  VARCHAR2, 
    P_TCDGRUPOBEM     IN  VARCHAR2)
AS 
   V_CONTADOR           INTEGER; 
   V_CONT_NAOPROCESSADO INTEGER; 
   V_MES_JADEPRECIADO   INTEGER; 
   V_TAXA_MES           NUMBER; 
   V_VALORDEPRECIACAO   NUMBER;
   V_NRSEQITEMIMOB      NUMBER;
   V_NRSEQITEMDEPREC    NUMBER; 
   V_EXISTE_CAPA        NUMBER; 
   V_DTFECHABEM         FECHAMENTOBEM.DTFECHABEM%TYPE;
   V_NRSEQOPERABEM      NOVOCODIGO.NRSEQUENCIAL%TYPE; 
   V_NRSEQIMOBILIZA     NOVOCODIGO.NRSEQUENCIAL%TYPE;
   V_NRSEQDEPRECIA      NOVOCODIGO.NRSEQUENCIAL%TYPE;
   V_TIPOIMOBILIZACAO   TIPOOPERBEM.CDTIPOOPERBEM%TYPE;
   V_TIPODEPRECIACAO    TIPOOPERBEM.CDTIPOOPERBEM%TYPE; 
   V_NMTIPOOPERBEM      TIPOOPERBEM.NMTIPOOPERBEM%TYPE; 
   V_IDTIPOOPERBEM      TIPOOPERBEM.CDTIPOOPERBEM%TYPE; 
   V_CDEMPRESA          VARCHAR2(2); 
   V_NRSEQCAPA          VARCHAR2(10); 
   V_NRSEQIT            VARCHAR2(10);
   V_DTCAPA             DATE;
   V_VRIITCAPA          FLOAT; 
   V_CDBEMATIVO         VARCHAR2(10);
   V_NMTIPO             VARCHAR2(50); 
   V_CDTIPOOPERBEM      VARCHAR2(6); 
   V_QTITCAPA           FLOAT; 
   V_CDFILIAL           VARCHAR(4); 
   V_CDCENTCUST         VARCHAR(4); 
   V_SETOR              VARCHAR(4); 
   V_CDGRUPONOVO        VARCHAR2(6); 
   V_CDGRUPOANTE        VARCHAR2(6); 
   V_QTMESDEPNOVO       FLOAT;
   V_VRTAXDEPNOVO       FLOAT; 
   V_VRTAXDEPANTE       FLOAT; 
   V_CDTIPDEPNOVO       VARCHAR2(6); 
   V_CDGRUPOBEM         VARCHAR2(6); 
   V_CDTIPODEPREC       VARCHAR2(6);
   V_CDREGIMEBEM        VARCHAR2(6); 
   V_VRAQUISIC          FLOAT; 
   V_VRINIDEP           FLOAT; 
   V_DTINIDEP           DATE; 
   V_QTMESDEP           FLOAT; 
   V_VRJADEP            FLOAT; 
   V_VRFALDEP           FLOAT; 
   V_QTMESFALT          FLOAT; 
   V_QTMESJADEP         FLOAT; 
   V_DTULTDEP           DATE; 
   V_VRINIDEPFIS        FLOAT; 
   V_DTINIDEPFIS        DATE;
   V_VRAQUISICFIS       FLOAT; 
   V_QTMESDEPFIS        FLOAT;
   V_VRJADEPFIS         FLOAT; 
   V_VRFALDEPFIS        FLOAT; 
   V_QTMESFALTFIS       FLOAT; 
   V_QTMESJADEPFIS      FLOAT; 
   V_DTULTDEPFIS        DATE; 
   V_BODEPBEM           BOOLEAN; 
   V_IDTIPOFECHA        VARCHAR2(04); 
   v_NRSEQRATOPERABE    VARCHAR2(10); 
   V_VALORRATE          FLOAT; 
   V_EXISRATE           BOOLEAN;
   V_CDFILIALRAT        VARCHAR2(4); 
   V_CDCENTCUSTRAT      VARCHAR2(4); 
   V_ATIVOFECHABEM      VARCHAR2(4000); 
   V_ATIVO              BOOLEAN; 
   V_VRFALTADEPNOVO     FLOAT; 
   V_VRFALTADEPANTE     FLOAT;
   V_NRSEQFECHATCANU1   NOVOCODIGO.NRSEQUENCIAL%TYPE; 
   V_TAXABASICA         FLOAT; 
   V_TAXAFINAL          FLOAT; 
   IDUSADO              CHAR; 
   MESUSADO             FLOAT; 
   V_NRCOECO            FLOAT;
   NRINCECO             FLOAT; 
   V_NRCOEFIS           FLOAT; 
   NRINCEFIS            FLOAT; 
   V_MUDAMES            FLOAT; 
   V_MUDATAXA           FLOAT;
   V_CONTADORREA        INTEGER; 
   V_NRSEQOPERABEM_TC   NOVOCODIGO.NRSEQUENCIAL%TYPE; 
   V_NRSEQOPERABEM_FC   NOVOCODIGO.NRSEQUENCIAL%TYPE;
   V_NRSEQOPERABEM_FF   NOVOCODIGO.NRSEQUENCIAL%TYPE;
   V_DEPRECIA           VARCHAR2(01);
   V_DEPRECIAFI         VARCHAR2(01);
   V_MUDATAXCON         FLOAT;
   V_MUDACON            FLOAT; 
   V_VRAQUIBEMBX        FLOAT;
   V_VRINIDEPBEMBX      FLOAT;
   V_VRJADEPBEMBX       FLOAT;
   V_VRFALTADEPBEMBX    FLOAT;
   V_VRAQUIBEMBXF       FLOAT; 
   V_VRINIDEPBEMBXF     FLOAT;
   V_VRJADEPBEMBXF      FLOAT;
   V_VRFALTADEPBEMBXF   FLOAT;

   V_QTDIASDEPRE FLOAT;

   /* VARIAVEIS USADAS NA FUNCAO EXISTE_BEM */
   V_COUNTPROD INTEGER;
   V_COUNTGRUP INTEGER;

   V_TAXATEMP NUMBER;
   V_MESESTAXA NUMBER;
   V_VRDEPRETEMP NUMBER;

   V_VRFALTANTEDEPREC NUMBER;
   V_MESESFALTADEPREC NUMBER;
   V_MESESDEPRECIABEM NUMBER;
   V_VRTAXAANODEPREC NUMBER;
   V_VRDEPREBASE NUMBER;
   V_VRJADEPRECIADO NUMBER;
   V_QTDEPRECGRUPOBEM NUMBER;
   V_BOGEROUIMOB      BOOLEAN;
   V_BOGEROUDEPRE      BOOLEAN;
   CURSOR P_OPERTRANS IS
      SELECT CA.CDEMPRESA, CA.NRSEQCAPAOPEBEM, IT.NRSEQITCAPAOPE,
             CA.DTCAPAOPEBEM, IT.VRITCAPAOPERA, BA.CDBEMATIVO,
             TB.NMTIPOOPERBEM, CA.CDTIPOOPERBEM, IT.QTITCAPAOPENOVO,
             BA.CDFILIAL, BA.CDCENTCUST,
             BA.CDSETOR, IT.CDGRUPOITCNOVO, IT.CDGRUPOITCANTE, IT.QTMESDEPITCNOVO,
             IT.VRTAXDEPITCNOVO, IT.VRTAXDEPITCANTE,IT.CDTIPDEPITCNOVO, BA.VRINIDEPBEM,
             BA.DTINIDEPRECBEM, BA.VRAQUIBEMATIVO, BA.QTMESDEPBEM, BA.VRJADEPBEMATIVO,
             BA.VRFALTADEPBEM, BA.QTMESFALTADBEM, BA.QTMESJADEPBEM,
             NVL(IT.CDGRUPOITCNOVO,BA.CDGRUPOBEM), NVL(IT.CDTIPDEPITCNOVO,BA.CDTIPODEPREC), NVL(IT.CDREGBEMITCNOVO,BA.CDREGIMEBEM), BA.DTULTDEPBEM, IT.VRFALTADEPNOVO,
             IT.VRFALTADEPANTE, NVL(BA.VRINIDEPRECFIS,1),
             BA.DTINIDEPRECFIS, NVL(BA.VRAQUIBEMFISC,1), NVL(BA.QTMESDEPBEMFISC,1), NVL(BA.VRJADEPBEMFISC,1),
             NVL(BA.VRFALTDEPBEMFIS,1), NVL(BA.QTMESFALTDBEMFIS,1), NVL(BA.QTMESJADEPBEMFI,1), BA.DTULTDEPBEMFIS
        FROM CAPAOPERABEM CA, ITCAPAOPERABEM IT, BEMATIVO BA, TIPOOPERBEM TB 
       WHERE CA.CDEMPRESA       = P_CDEMPRESA 
         AND CA.IDSIMULOPERABEM = P_IDSIMULACAO 
         AND CA.NRSEQCAPAOPEBEM = P_NRSEQCAPAOPEBEM 
         AND CA.CDEMPRESA       = IT.CDEMPRESA 
         AND CA.IDSIMULOPERABEM = IT.IDSIMULOPERABEM 
         AND CA.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM 
         AND IT.CDEMPRESA       = BA.CDEMPRESA 
         AND IT.CDBEMATIVO      = BA.CDBEMATIVO 
         AND CA.CDEMPRESA       = TB.CDEMPRESA 
         AND CA.CDTIPOOPERBEM   = TB.CDTIPOOPERBEM;

    CURSOR P_OPERFECHA IS
       SELECT CA.CDEMPRESA, CA.NRSEQCAPAOPEBEM, IT.NRSEQITCAPAOPE,
              CA.DTCAPAOPEBEM, IT.VRITCAPAOPERA, BA.CDBEMATIVO, BA.CDREGIMEBEM,
              TB.NMTIPOOPERBEM, CA.CDTIPOOPERBEM, IT.QTITCAPAOPENOVO,
              IT.CDFILIALITCNOVO, IT.CDCENTCUITCNOVO,
              IT.CDSETORITCNOVO, IT.CDGRUPOITCNOVO, IT.CDGRUPOITCANTE, IT.QTMESDEPITCNOVO,
              IT.VRTAXDEPITCNOVO, IT.VRTAXDEPITCANTE, IT.CDTIPDEPITCNOVO, BA.VRINIDEPBEM,
              BA.DTINIDEPRECBEM, BA.VRAQUIBEMATIVO, BA.QTMESDEPBEM, BA.VRJADEPBEMATIVO,
              BA.VRFALTADEPBEM, BA.QTMESFALTADBEM, BA.QTMESJADEPBEM
         FROM CAPAOPERABEM CA, ITCAPAOPERABEM IT, BEMATIVO BA, TIPOOPERBEM TB
        WHERE CA.CDEMPRESA       = P_CDEMPRESA
          AND CA.IDSIMULOPERABEM = P_IDSIMULACAO
          AND CA.NRSEQFECHABEM   = P_NRSEQFECHABEM
          AND CA.CDEMPRESA       = IT.CDEMPRESA
          AND CA.IDSIMULOPERABEM = IT.IDSIMULOPERABEM
          AND CA.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM
          AND IT.CDEMPRESA       = BA.CDEMPRESA
          AND IT.CDBEMATIVO      = BA.CDBEMATIVO
          AND CA.CDEMPRESA       = TB.CDEMPRESA
          AND CA.CDTIPOOPERBEM   = TB.CDTIPOOPERBEM
          AND IT.NRSEQOPERABEM IS NULL;
    CURSOR P_OPERTRANSFIS IS
      SELECT CA.CDEMPRESA, CA.NRSEQCAPAOPEBEM, IT.NRSEQITCAPAOPE,
             CA.DTCAPAOPEBEM, IT.VRITCAPAOPERA, BA.CDBEMATIVO,
             TB.NMTIPOOPERBEM, CA.CDTIPOOPERBEM, IT.QTITCAPAOPENOVO,
             BA.CDFILIAL, BA.CDCENTCUST,
             BA.CDSETOR, IT.CDGRUPOITCNOVO, IT.CDGRUPOITCANTE, IT.QTMESDEPITCNOVO,
             IT.VRTAXDEPITCNOVO, VRTAXDEPITCANTE, IT.CDTIPDEPITCNOVO, BA.VRINIDEPRECFIS,
             BA.DTINIDEPRECFIS, NVL(BA.VRAQUIBEMFISC,1), NVL(BA.QTMESDEPBEMFISC,1), NVL(BA.VRJADEPBEMFISC,1),
             NVL(BA.VRFALTDEPBEMFIS,1), NVL(BA.QTMESFALTDBEMFIS,1), NVL(BA.QTMESJADEPBEMFI,1),
             BA.CDGRUPOBEM, BA.CDTIPODEPREC, BA.CDREGIMEBEM, BA.DTULTDEPBEMFIS, IT.VRFALTADEPNOVO,
             IT.VRFALTADEPANTE
        FROM CAPAOPERABEM CA, ITCAPAOPERABEM IT, BEMATIVO BA, TIPOOPERBEM TB
       WHERE CA.CDEMPRESA       = P_CDEMPRESA
         AND CA.IDSIMULOPERABEM = P_IDSIMULACAO
         AND CA.NRSEQCAPAOPEBEM = P_NRSEQCAPAOPEBEM
         AND CA.CDEMPRESA       = IT.CDEMPRESA
         AND CA.IDSIMULOPERABEM = IT.IDSIMULOPERABEM
         AND CA.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM
         AND IT.CDEMPRESA       = BA.CDEMPRESA
         AND IT.CDBEMATIVO      = BA.CDBEMATIVO
         AND CA.CDEMPRESA       = TB.CDEMPRESA
         AND CA.CDTIPOOPERBEM   = TB.CDTIPOOPERBEM
         AND IT.NRSEQOPERABEM IS NULL;
    CURSOR P_OPERFECHAFIS IS
       SELECT CA.CDEMPRESA, CA.NRSEQCAPAOPEBEM, IT.NRSEQITCAPAOPE,
              CA.DTCAPAOPEBEM, IT.VRITCAPAOPERA, BA.CDBEMATIVO, BA.CDREGIMEBEM,
              TB.NMTIPOOPERBEM, CA.CDTIPOOPERBEM, IT.QTITCAPAOPENOVO,
              IT.CDFILIALITCNOVO, IT.CDCENTCUITCNOVO,
              IT.CDSETORITCNOVO, IT.CDGRUPOITCNOVO, IT.CDGRUPOITCANTE, IT.QTMESDEPITCNOVO,
              IT.VRTAXDEPITCNOVO, IT.VRTAXDEPITCANTE, IT.CDTIPDEPITCNOVO, BA.VRINIDEPRECFIS,
              BA.DTINIDEPRECFIS, BA.VRAQUIBEMFISC, BA.QTMESDEPBEMFISC, BA.DTULTDEPBEMFIS, BA.VRJADEPBEMFISC,
              BA.VRFALTDEPBEMFIS, BA.QTMESFALTDBEMFIS, BA.QTMESJADEPBEM
         FROM CAPAOPERABEM CA, ITCAPAOPERABEM IT, BEMATIVO BA, TIPOOPERBEM TB
        WHERE CA.CDEMPRESA       = P_CDEMPRESA 
          AND CA.IDSIMULOPERABEM = P_IDSIMULACAO 
          AND CA.NRSEQFECHABEM   = P_NRSEQFECHABEM
          AND CA.CDEMPRESA       = IT.CDEMPRESA 
          AND CA.IDSIMULOPERABEM = IT.IDSIMULOPERABEM 
          AND CA.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM 
          AND IT.CDEMPRESA       = BA.CDEMPRESA 
          AND IT.CDBEMATIVO      = BA.CDBEMATIVO 
          AND CA.CDEMPRESA       = TB.CDEMPRESA 
          AND CA.CDTIPOOPERBEM   = TB.CDTIPOOPERBEM
          AND IT.NRSEQOPERABEM IS NULL;

   /* FUNCAO PARA VERIFICAR SE EXISTE BENS OU GRUPOS DE BENS NO FECHAMENTO */
   FUNCTION EXISTE_BEM RETURN BOOLEAN
   AS
   BEGIN
      /* VERIFICA OS GRUPOS */
      V_COUNTGRUP := 0;
      BEGIN
         SELECT COUNT(*)
           INTO V_COUNTGRUP
           FROM GRUPOFECHABEM GB
          WHERE GB.CDEMPRESA      = P_CDEMPRESA
            AND GB.IDSIMULFECHABEM = P_IDSIMULACAO
            AND GB.NRSEQFECHABEM   = P_NRSEQFECHABEM;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_COUNTGRUP := 0;
      END;
      
      /* VERIFICA OS BENS */
      V_COUNTPROD := 0;
      BEGIN
         SELECT COUNT(*)
           INTO V_COUNTPROD
           FROM ATIVOFECHABEM AB
          WHERE AB.CDEMPRESA      = P_CDEMPRESA
            AND AB.IDSIMULFECHABEM = P_IDSIMULACAO
            AND AB.NRSEQFECHABEM   = P_NRSEQFECHABEM;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_COUNTPROD := 0;
      END;

      IF (V_COUNTGRUP >= 1) OR  (V_COUNTPROD >= 1) THEN
         RETURN TRUE;
      ELSE
         RETURN FALSE;
      END IF;
   END;

   /* FUNCAO PARA VERIFICAR SE JA EXISTE UMA CAPA PARA A OPERACAO */
   FUNCTION COUNT_EXISTE_CAPA(P_SITUACAO IN VARCHAR2,
                              P_TIPOFECHAMENTO IN VARCHAR) RETURN NUMBER
   AS
   BEGIN
      V_EXISTE_CAPA := 0;
      BEGIN
         SELECT COUNT(*)
           INTO V_EXISTE_CAPA
           FROM CAPAOPERABEM CO
          WHERE CO.CDEMPRESA       = P_CDEMPRESA
            AND CO.IDSIMULOPERABEM = P_IDSIMULACAO
            AND CO.NRSEQFECHABEM   = P_NRSEQFECHABEM
            AND CO.IDSITCAPAOPER   = P_SITUACAO
            AND IDTIPOFECHAOPER    = P_TIPOFECHAMENTO;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_EXISTE_CAPA := 0;
      END;
      RETURN V_EXISTE_CAPA;
   END;

   FUNCTION RETORNA_TAXA(P_CDTIPODEPREC IN NUMBER,
                         P_MESES IN NUMBER) RETURN NUMBER
   IS
      V_RESULT NUMBER;
      V_RESULT_COE NUMBER;
   BEGIN
      V_RESULT := (100 / P_MESES) / 100;
      IF V_IDTIPOFECHA = 'C' THEN
         /* CALCULA O VALOR DA TAXA DE DEPRECIACAO CONTABIL */
         SELECT NVL(NRCOETIPODEP,0) + (NVL(VRTXINCFISTPDEP, 0)/100)
           INTO V_RESULT_COE
           FROM TIPODEPREC
          WHERE CDEMPRESA = P_CDEMPRESA
            AND CDTIPODEPREC = P_CDTIPODEPREC;
      ELSE
         /* CALCULA O VALOR DA TAXA DE DEPRECIACAO FISCAL */
         SELECT NVL(NRCOETIPODEPFIS,0) + (NVL(VRTXINCFISTPFIS, 0)/100)
           INTO V_RESULT_COE
           FROM TIPODEPREC
          WHERE CDEMPRESA = P_CDEMPRESA
            AND CDTIPODEPREC = P_CDTIPODEPREC;
      END IF;
      RETURN V_RESULT * V_RESULT_COE;
   END;

BEGIN
  /*  Identificadores do campo IDTIPOOPERBEM, tabela TIPOOOPERBEM:
     01 - IMOBILIZACAO
     02 - DEPRECICACAO
     03 - TRANSFERENCIA_FISICA
     04 - BAIXA_VENDA
     05 - BAIXAS_DIVERSAS
     06 - REAVALIACAO
     07 - SUSPENSAO_DEPRECIACAO
     08 - RETORNO_DEPRECIACAO
     09 - TRANSFERENCIA_CONTABIL

     Identificadores do campo IDIDENTCAPAOPER, tabela CAPAOPERABEM
     Os mesmos da tabela TIPOOPERBEM, incluindo:
     10 - LIVRE PARA USO

     Identificadores do campo tabela OPERACAOBEM
     Os mesmos da tabela TIPOOPERBEM, incluindo:
     10 - LIVRE PARA USO
     
     Identificadores do campo IDSITCAPAOPER, tabela CAPAOPERABEM
     1 - Pendete
     2 - Processado
     3 - Cancelado
     4 - Lote Gerado

     Identificador campo IDSITOPERABEM, abela OPERACAOBEM
     1 - Nao Contabilizado
     2 - Lote Gerado
     3 - Cancelado 
     
     Parametrizacao da depreciacao por empresa, campo IDTPCALCDEPREC, tabela PARAMEMPRESA
      1 - Deprecia integral no mesmo mes de aquisicao
      2 - Deprecia proporcional no mesmo mes de aquisicao
      3 - Avalia o dia da aquisicao para determinar o mes de inicio da depreciacao
          Verifica o campo NRDIAAQUIBEM
      4 - Deprecia integral no mes seguinte a aquisicao
     
     IDTIPOFECHAOPER
      F - Fiscal
      C - Contabil */
   BEGIN 
     SELECT IDTIPOFECHAOPER 
       INTO V_IDTIPOFECHA 
       FROM FECHAMENTOBEM 
      WHERE CDEMPRESA      = P_CDEMPRESA 
        AND NRSEQFECHABEM  = P_NRSEQFECHABEM; 
   EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
       V_IDTIPOFECHA := 'N'; 
   END; 
   IF V_IDTIPOFECHA = 'N' THEN
      BEGIN 
         SELECT IDTIPOFECHAOPER 
             INTO V_IDTIPOFECHA 
             FROM CAPAOPERABEM
            WHERE CDEMPRESA      = P_CDEMPRESA 
              AND NRSEQCAPAOPEBEM  = P_NRSEQCAPAOPEBEM; 
      EXCEPTION
         WHEN NO_DATA_FOUND THEN 
            V_IDTIPOFECHA := NULL;
      END;
   END IF;
   IF P_CARGAFECHA = 'C' THEN
      /* Verifica se ja existe o fechamento que esta sendo feito na tabela
         CAPAOPERABEM, caso exista ele sera apagado */
      V_EXISTE_CAPA := COUNT_EXISTE_CAPA('1', V_IDTIPOFECHA);
      IF V_EXISTE_CAPA > 0 THEN
         /* Caso exista sera apagado, pois ele sera refeito */
         DELETE FROM CAPAOPERABEM
          WHERE CDEMPRESA       = P_CDEMPRESA
            AND IDSIMULOPERABEM = P_IDSIMULACAO
            AND NRSEQFECHABEM   = P_NRSEQFECHABEM
            AND IDTIPOFECHAOPER = V_IDTIPOFECHA;
      END IF;
     /* BUSCA A DATA DE FECHAMENTO OPERACIONAL */
      SELECT MAX(DTFECHABEM)
        INTO V_DTFECHABEM
        FROM FECHAMENTOBEM
       WHERE CDEMPRESA       = P_CDEMPRESA
         AND IDSIMULFECHABEM = P_IDSIMULACAO
         AND NRSEQFECHABEM   = P_NRSEQFECHABEM
         AND IDTIPOFECHAOPER = V_IDTIPOFECHA;
     FOR C_OPERA_IMOB IN (SELECT DISTINCT R.CDTIPOOPERBEM
                            FROM RELACTIPOOPERGRBEM R, TIPOOPERBEM TP, GRUPOFECHABEM GR
                           WHERE R.CDEMPRESA = P_CDEMPRESA
                             AND TP.IDTIPOOPERBEM IN ('01')
                             AND R.CDEMPRESA  = TP.CDEMPRESA
                             AND R.CDEMPRESA = GR.CDEMPRESA
                             AND R.CDGRUPOBEM = GR.CDGRUPOBEM
                             AND TP.CDTIPOOPERBEM = R.CDTIPOOPERBEM) LOOP
      V_TIPOIMOBILIZACAO := C_OPERA_IMOB.CDTIPOOPERBEM;
      
      V_BOGEROUIMOB := TRUE;
           /*--------------------- IMOBILIZACAO DOS BENS DO FECHAMENTO -------------------------*/
      /* INSERE A CAPA PARA A OPERACAO DE IMOBILIZACAO */
      NOVO_CODIGO_NT('CAPAOPERABEM'||P_CDEMPRESA||P_IDSIMULACAO, V_NRSEQIMOBILIZA,1);
      INSERT INTO CAPAOPERABEM
        (CDEMPRESA, IDSIMULOPERABEM, NRSEQCAPAOPEBEM, DTCAPAOPEBEM, CDTIPOOPERBEM,
         CDMOTIVOOPER, CDOPERESPOPERA, IDIDENTCAPAOPER, DTINCCAPAOPER, CDOPEINCCAPA,
         DTATUCAPAOPER, CDOPEATUCAPA, DTCANCAPAOPER, CDOPECANCAPA, IDSITCAPAOPER, NRSEQFECHABEM,IDTIPOFECHAOPER)
      VALUES
        (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQIMOBILIZA, 11, 10), V_DTFECHABEM, C_OPERA_IMOB.CDTIPOOPERBEM,
         '', P_CDOPERADOR, '01', SYSDATE, P_CDOPERADOR,
         SYSDATE, P_CDOPERADOR, NULL, NULL, '1', P_NRSEQFECHABEM, V_IDTIPOFECHA);
     END LOOP;
     FOR C_OPERA_DEPREC IN (SELECT DISTINCT R.CDTIPOOPERBEM
                              FROM RELACTIPOOPERGRBEM R, TIPOOPERBEM TP, GRUPOFECHABEM GR
                             WHERE R.CDEMPRESA = P_CDEMPRESA
                               AND TP.IDTIPOOPERBEM IN ('02')
                               AND R.CDEMPRESA  = TP.CDEMPRESA
                               AND R.CDEMPRESA = GR.CDEMPRESA
                               AND R.CDGRUPOBEM = GR.CDGRUPOBEM
                               AND TP.CDTIPOOPERBEM = R.CDTIPOOPERBEM) LOOP
       V_TIPODEPRECIACAO := C_OPERA_DEPREC.CDTIPOOPERBEM;

       V_BOGEROUDEPRE := TRUE;
           /*--------------------- DEPRECIACAO DOS BENS DO FECHAMENTO -------------------------*/
      /* INSERE A CAPA PARA A OPERACAO DE DEPRECIACAO */
      NOVO_CODIGO_NT('CAPAOPERABEM'||P_CDEMPRESA||P_IDSIMULACAO, V_NRSEQDEPRECIA,1);
      INSERT INTO CAPAOPERABEM
        (CDEMPRESA, IDSIMULOPERABEM, NRSEQCAPAOPEBEM, DTCAPAOPEBEM, CDTIPOOPERBEM,
         CDMOTIVOOPER, CDOPERESPOPERA, IDIDENTCAPAOPER, DTINCCAPAOPER, CDOPEINCCAPA,
         DTATUCAPAOPER, CDOPEATUCAPA, DTCANCAPAOPER, CDOPECANCAPA, IDSITCAPAOPER, NRSEQFECHABEM,IDTIPOFECHAOPER)
      VALUES
        (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), V_DTFECHABEM, C_OPERA_DEPREC.CDTIPOOPERBEM,
         '', P_CDOPERADOR, '02', SYSDATE, P_CDOPERADOR,
         SYSDATE, P_CDOPERADOR, NULL, NULL, '1', P_NRSEQFECHABEM, V_IDTIPOFECHA);
     END LOOP;
      /* Pega o primeiro tipo de operacao de imobilizacao da empresa */
      IF V_TIPOIMOBILIZACAO IS NULL THEN
         BEGIN
            SELECT MIN(CDTIPOOPERBEM) AS CDTIPOOPERBEM
              INTO V_TIPOIMOBILIZACAO
              FROM TIPOOPERBEM
             WHERE CDEMPRESA = P_CDEMPRESA
               AND IDTIPOOPERBEM = '01'; /* Imobilizacao */
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_TIPOIMOBILIZACAO := NULL;
         END;
      END IF;
      IF V_TIPODEPRECIACAO IS NULL THEN
        BEGIN
           SELECT MIN(CDTIPOOPERBEM) AS CDTIPOOPERBEM
             INTO V_TIPODEPRECIACAO
             FROM TIPOOPERBEM
            WHERE CDEMPRESA = P_CDEMPRESA
              AND IDTIPOOPERBEM = '02'; /* DEPRECIACAO */
        EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_TIPODEPRECIACAO := NULL;
        END;
      END IF;

      IF ((V_TIPOIMOBILIZACAO IS NOT NULL) AND NOT(V_BOGEROUIMOB)) THEN
         /*--------------------- IMOBILIZACAO DOS BENS DO FECHAMENTO -------------------------*/
         /* INSERE A CAPA PARA A OPERACAO DE IMOBILIZACAO */
         NOVO_CODIGO_NT('CAPAOPERABEM'||P_CDEMPRESA||P_IDSIMULACAO, V_NRSEQIMOBILIZA,1);
         INSERT INTO CAPAOPERABEM
           (CDEMPRESA, IDSIMULOPERABEM, NRSEQCAPAOPEBEM, DTCAPAOPEBEM, CDTIPOOPERBEM,
            CDMOTIVOOPER, CDOPERESPOPERA, IDIDENTCAPAOPER, DTINCCAPAOPER, CDOPEINCCAPA,
            DTATUCAPAOPER, CDOPEATUCAPA, DTCANCAPAOPER, CDOPECANCAPA, IDSITCAPAOPER, NRSEQFECHABEM,IDTIPOFECHAOPER)
         VALUES
           (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQIMOBILIZA, 11, 10), V_DTFECHABEM, V_TIPOIMOBILIZACAO,
            '', P_CDOPERADOR, '01', SYSDATE, P_CDOPERADOR,
            SYSDATE, P_CDOPERADOR, NULL, NULL, '1', P_NRSEQFECHABEM, V_IDTIPOFECHA);

      END IF;
      V_NRSEQITEMIMOB   := 1;
      V_ATIVO := EXISTE_BEM; /* FUNCAO QUE VERIFICA SE EXISTE GRUPO OU BEM NO FECHAMENTO */

      /* O "NOT IN" DO CURSOR FOI RETIRADO DEVIDO AO "UNION" JA FAZER A DISTINCAO DOS BENS.
         SENDO ASSIM, ESTAVA EXECUTANDO UM SELECT SEM NECESSIDADE */
      FOR BENS_OPERACAO IN
         (SELECT BA.CDBEMATIVO
            FROM BEMATIVO BA, ATIVOFECHABEM AB
           WHERE BA.CDEMPRESA       = AB.CDEMPRESA
             AND BA.CDBEMATIVO      = AB.CDBEMATIVO
             AND AB.CDEMPRESA      = P_CDEMPRESA
             AND AB.IDSIMULFECHABEM = P_IDSIMULACAO
             AND AB.NRSEQFECHABEM   = P_NRSEQFECHABEM
           UNION
          SELECT BA.CDBEMATIVO
            FROM BEMATIVO BA, GRUPOFECHABEM GB
           WHERE BA.CDEMPRESA       = GB.CDEMPRESA
             AND BA.CDGRUPOBEM      = GB.CDGRUPOBEM
             AND GB.CDEMPRESA      = P_CDEMPRESA
             AND GB.IDSIMULFECHABEM = P_IDSIMULACAO
             AND GB.NRSEQFECHABEM   = P_NRSEQFECHABEM) LOOP

         IF V_IDTIPOFECHA = 'C' THEN /* Fechamento contabil */
            FOR C_CARGA IN (SELECT BA.CDEMPRESA, BA.CDBEMATIVO, BA.CDFILIAL, BA.CDCENTCUST, BA.CDSETOR,BA.CDGRUPOBEM,BA.VRAQUIBEMATIVO,
                                BA.CDTIPODEPREC,BA.VRTAXANODEPBEM, BA.QTATUABEMATIVO,BA.QTMESDEPBEM, BA.DTAQUIBEMATIVO,BA.VRINIDEPBEM,
                                BA.VRJADEPBEMATIVO,BA.DTINIDEPRECBEM,BA.VRFALTADEPBEM,BA.QTMESFALTADBEM,BA.QTMESJADEPBEM, BA.DSLOCALBEMATIVO,
                                BA.CDSERIEENTRBEM, BA.NRNOTAFISCBEM, BA.CDFILIALNF, BA.NRLANCTONF, BA.CDREGIMEBEM
                           FROM BEMATIVO BA, REGIMEBEM RB,GRUPOBEM GB, PARAMEMPRESA PA
                           WHERE BA.CDEMPRESA       = P_CDEMPRESA
                             AND BA.IDTIPOBEMATIVO  = P_IDSIMULACAO /* SEMPRE SERA REAL (R), O SISTEMA NAO FAZ SIMULACAO */
                             AND BA.DTBAIXATOTABEMA IS NULL /* O ATIVO NAO ESTEJA BAIXADO TOTALMENTE */
                             AND BA.CDEMPRESA       = RB.CDEMPRESA
                             AND BA.CDREGIMEBEM     = RB.CDREGIMEBEM
                             AND BA.CDEMPRESA       = GB.CDEMPRESA
                             AND BA.CDGRUPOBEM      = GB.CDGRUPOBEM
                             AND PA.CDEMPRESA       = BA.CDEMPRESA
                             AND NVL(PA.VRMINDEPBEM,0) <= BA.VRINIDEPBEM /* TELA PARAMETROS GESTAO DE ATIVO, CAMPO VALOR MIN DEPRECIACAO */
                             AND GB.IDDEPRECIAGRBEM = 'S' /* GRUPO DE BEM DEPRECIA CONTABILMENTE */
                             AND RB.IDDEPREGBEM = 'S'
                             AND TO_CHAR(BA.DTAQUIBEMATIVO,'MM/YYYY') = TO_CHAR(V_DTFECHABEM,'MM/YYYY') /* DATA DE AQUISICAO DO BEM IGUAL A DATA DE FECHAMENTO */
                             AND BA.CDBEMATIVO = BENS_OPERACAO.CDBEMATIVO
                           ORDER BY BA.CDBEMATIVO) LOOP
               BEGIN
                  SELECT COUNT(*)
                    INTO V_CONTADOR
                    FROM OPERACAOBEM
                   WHERE CDEMPRESA       = P_CDEMPRESA
                     AND CDBEMATIVO      = C_CARGA.CDBEMATIVO
                     AND IDIDENTOPERABEM = '01' /* Imobilizacao */
                     AND IDTIPOFECHAOPER = V_IDTIPOFECHA; /* Fechamento Contabil */
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                    V_CONTADOR := 0;
               END;

               IF V_CONTADOR = 0 THEN
                  /* VERIFICA  SE EXISE ALGUMA MOVIMENTACAO DE IMOBILIZACAO PARA O BEM
                     ONDE A DATA DE AQUISCAO DO BEM E IGUAL A DATA DA OPERACAO DE IMOBILIZACAO
                     E O TIPO DE FECHAMENTO SEJA CONTABIL */
                  SELECT COUNT(*)
                    INTO V_CONTADOR
                    FROM CAPAOPERABEM CO, ITCAPAOPERABEM IT,BEMATIVO BEM
                   WHERE IT.CDEMPRESA       = P_CDEMPRESA
                     AND IT.IDSIMULOPERABEM = P_IDSIMULACAO
                     AND IT.CDBEMATIVO      = C_CARGA.CDBEMATIVO
                     AND CO.CDEMPRESA       = IT.CDEMPRESA
                     AND CO.IDSIMULOPERABEM = IT.IDSIMULOPERABEM
                     AND CO.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM
                     AND CO.IDIDENTCAPAOPER = '01' /* IMOBILIZACAO */
                     AND BEM.CDBEMATIVO     = IT.CDBEMATIVO
                     AND TO_CHAR(BEM.DTAQUIBEMATIVO,'MM/YYYY') = TO_CHAR(CO.DTCAPAOPEBEM,'MM/YYYY')
                     AND IDTIPOFECHAOPER = V_IDTIPOFECHA;
                  IF V_CONTADOR = 0 THEN
                     /* SE NAO EXISTIR, SERA INSERIDA A IMOBILIZACAO */
                     INSERT INTO ITCAPAOPERABEM
                       (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                        QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                        CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                        CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                        VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                        DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                        NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
                     VALUES
                       (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQIMOBILIZA, 11, 10), LPAD(TO_CHAR(V_NRSEQITEMIMOB), 10, '0'), C_CARGA.CDBEMATIVO, C_CARGA.QTATUABEMATIVO,
                        C_CARGA.QTATUABEMATIVO, C_CARGA.VRAQUIBEMATIVO, C_CARGA.CDFILIAL, C_CARGA.CDFILIAL, C_CARGA.CDCENTCUST,
                        C_CARGA.CDCENTCUST, C_CARGA.CDSETOR, C_CARGA.CDSETOR, C_CARGA.DSLOCALBEMATIVO, C_CARGA.DSLOCALBEMATIVO,
                        C_CARGA.CDGRUPOBEM, C_CARGA.CDGRUPOBEM, C_CARGA.QTMESDEPBEM, C_CARGA.QTMESDEPBEM, C_CARGA.VRTAXANODEPBEM,
                        C_CARGA.VRTAXANODEPBEM, NULL, C_CARGA.NRNOTAFISCBEM, C_CARGA.CDSERIEENTRBEM, C_CARGA.CDFILIALNF, C_CARGA.NRLANCTONF,
                        'IMOBILIZACAO', SYSDATE, SYSDATE, P_CDOPERADOR, P_CDOPERADOR,
                        NULL, C_CARGA.CDTIPODEPREC, C_CARGA.CDTIPODEPREC, C_CARGA.CDREGIMEBEM, C_CARGA.CDREGIMEBEM);
                     V_NRSEQITEMIMOB := V_NRSEQITEMIMOB + 1;
                  END IF;
               END IF;
            END LOOP;
         ELSE
            /* FECHAMENTO FISCAL */
            FOR C_CARGA IN (SELECT BA.CDEMPRESA, BA.CDBEMATIVO, BA.CDFILIAL, BA.CDCENTCUST, BA.CDSETOR,BA.CDGRUPOBEM,BA.VRAQUIBEMFISC VRAQUIBEMATIVO,
                               BA.CDTIPODEPREC,BA.VRTXANODEPBEMFI VRTAXANODEPBEM, BA.QTATUABEMATIVO,BA.QTMESDEPBEMFISC QTMESDEPBEM, BA.DTAQUIBEMATIVO,
                               BA.VRINIDEPRECFIS VRINIDEPBEM,
                               BA.VRJADEPBEMFISC VRJADEPBEMATIVO,BA.DTINIDEPRECFIS DTINIDEPRECBEM,BA.VRFALTDEPBEMFIS VRFALTADEPBEM,BA.QTMESFALTDBEMFIS QTMESFALTADBEM,BA.QTMESJADEPBEMFI QTMESJADEPBEM, BA.DSLOCALBEMATIVO,
                               BA.CDSERIEENTRBEM, BA.NRNOTAFISCBEM, BA.CDFILIALNF, BA.NRLANCTONF, BA.CDREGIMEBEM
                          FROM BEMATIVO BA, REGIMEBEM RB, GRUPOBEM GB, PARAMEMPRESA PA
                         WHERE BA.CDEMPRESA       = P_CDEMPRESA
                           AND BA.IDTIPOBEMATIVO  = P_IDSIMULACAO
                           AND BA.DTBAIXATOTABEMA IS NULL
                           AND BA.CDEMPRESA       = RB.CDEMPRESA
                           AND BA.CDREGIMEBEM     = RB.CDREGIMEBEM
                           AND BA.CDEMPRESA       = GB.CDEMPRESA
                           AND BA.CDGRUPOBEM      = GB.CDGRUPOBEM
                           AND PA.CDEMPRESA       = BA.CDEMPRESA
                           AND NVL(PA.VRMINDEPBEM,0)     <= BA.VRINIDEPRECFIS
                           AND RB.IDDEPREGBEMFIS  = 'S'
                           AND GB.IDDEPRECIAFISC  = 'S'
                           AND BA.QTMESFALTDBEMFIS > 0
                           AND LAST_DAY(BA.DTINIDEPRECFIS) <= LAST_DAY(V_DTFECHABEM)
                           AND BA.CDBEMATIVO = BENS_OPERACAO.CDBEMATIVO
                         ORDER BY BA.CDBEMATIVO) LOOP
               IF TO_CHAR(C_CARGA.DTAQUIBEMATIVO,'MM/YYYY') = TO_CHAR(V_DTFECHABEM,'MM/YYYY') THEN
                  BEGIN
                     SELECT COUNT(*)
                       INTO V_CONTADOR
                       FROM OPERACAOBEM
                      WHERE CDEMPRESA       = P_CDEMPRESA
                        AND CDBEMATIVO      = C_CARGA.CDBEMATIVO
                        AND IDIDENTOPERABEM = '01' /* IMOBILIZACAO */
                        AND IDTIPOFECHAOPER = V_IDTIPOFECHA;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_CONTADOR := 0;
                  END;
                  IF V_CONTADOR = 0 THEN
                     SELECT COUNT(*)
                       INTO V_CONTADOR
                       FROM CAPAOPERABEM CO, ITCAPAOPERABEM IT,BEMATIVO BEM
                      WHERE IT.CDEMPRESA       = P_CDEMPRESA
                        AND IT.IDSIMULOPERABEM = P_IDSIMULACAO
                        AND IT.CDBEMATIVO      = C_CARGA.CDBEMATIVO
                        AND CO.CDEMPRESA       = IT.CDEMPRESA
                        AND CO.IDSIMULOPERABEM = IT.IDSIMULOPERABEM
                        AND CO.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM
                        AND CO.IDIDENTCAPAOPER = '01' /* IMOBILIZACAO */
                        AND BEM.CDBEMATIVO     = IT.CDBEMATIVO
                        AND TO_CHAR(BEM.DTAQUIBEMATIVO,'MM/YYYY') = TO_CHAR(CO.DTCAPAOPEBEM,'MM/YYYY')
                        AND IDTIPOFECHAOPER = V_IDTIPOFECHA;
                     IF V_CONTADOR = 0 THEN
                        INSERT INTO ITCAPAOPERABEM
                          (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                           QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                           CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                           CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                           VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                           DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                           NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
                        VALUES
                          (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQIMOBILIZA, 11, 10), LPAD(TO_CHAR(V_NRSEQITEMIMOB), 10, '0'), C_CARGA.CDBEMATIVO, C_CARGA.QTATUABEMATIVO,
                           C_CARGA.QTATUABEMATIVO, C_CARGA.VRAQUIBEMATIVO, C_CARGA.CDFILIAL, C_CARGA.CDFILIAL, C_CARGA.CDCENTCUST,
                           C_CARGA.CDCENTCUST, C_CARGA.CDSETOR, C_CARGA.CDSETOR, C_CARGA.DSLOCALBEMATIVO, C_CARGA.DSLOCALBEMATIVO,
                           C_CARGA.CDGRUPOBEM, C_CARGA.CDGRUPOBEM, C_CARGA.QTMESDEPBEM, C_CARGA.QTMESDEPBEM, C_CARGA.VRTAXANODEPBEM,
                           C_CARGA.VRTAXANODEPBEM, NULL, C_CARGA.NRNOTAFISCBEM, C_CARGA.CDSERIEENTRBEM, C_CARGA.CDFILIALNF, C_CARGA.NRLANCTONF,
                           'IMOBILIZACAO', SYSDATE, SYSDATE, P_CDOPERADOR, P_CDOPERADOR,
                           NULL, C_CARGA.CDTIPODEPREC, C_CARGA.CDTIPODEPREC, C_CARGA.CDREGIMEBEM, C_CARGA.CDREGIMEBEM);
                        V_NRSEQITEMIMOB := V_NRSEQITEMIMOB + 1;
                     END IF;
                  END IF;
               END IF;
            END LOOP;
         END IF;
      END LOOP;
      IF ((V_TIPODEPRECIACAO IS NOT NULL) AND NOT(V_BOGEROUDEPRE)) THEN
         /*------------------------ DEPRECIACAO DOS BENS DO FECHAMENTO -------------------*/
         /* INSERE A CAPA PARA A OPERACAO DE DEPRECIACAO */
         NOVO_CODIGO_NT('CAPAOPERABEM'||P_CDEMPRESA||P_IDSIMULACAO, V_NRSEQDEPRECIA,1);
         INSERT INTO CAPAOPERABEM
           (CDEMPRESA, IDSIMULOPERABEM, NRSEQCAPAOPEBEM, DTCAPAOPEBEM, CDTIPOOPERBEM,
            CDMOTIVOOPER, CDOPERESPOPERA, IDIDENTCAPAOPER, DTINCCAPAOPER, CDOPEINCCAPA,
            DTATUCAPAOPER, CDOPEATUCAPA, DTCANCAPAOPER, CDOPECANCAPA, IDSITCAPAOPER, NRSEQFECHABEM,IDTIPOFECHAOPER)
         VALUES
           (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), V_DTFECHABEM, V_TIPODEPRECIACAO,
            '', P_CDOPERADOR, '02', SYSDATE, P_CDOPERADOR,
            SYSDATE, P_CDOPERADOR, NULL, NULL, '1', P_NRSEQFECHABEM, V_IDTIPOFECHA);
      END IF;
      V_NRSEQITEMDEPREC := 1;
     /* Parametrizacao da depreciacao por empresa, campo IDTPCALCDEPREC
         1 - Deprecia integral no mesmo mes de aquisicao
         2 - Deprecia proporcional no mesmo mes de aquisicao
         3 - Avalia o dia da aquisicao para determinar o mes de inicio da depreciacao
            Verifica o campo NRDIAAQUIBEM
         4 - Deprecia integral no mes seguinte a aquisicao */
      FOR C_EMPRESA IN
         (SELECT IDTPCALCDEPREC, NRDIAAQUIBEM
            FROM PARAMEMPRESA
           WHERE CDEMPRESA = P_CDEMPRESA) LOOP
         /* O "NOT IN" DO CURSOR FOI RETIRADO DEVIDO AO "UNION" JA FAZER A DISTINCAO DOS BENS.
            SENDO ASSIM, ESTAVA EXECUTANDO UM SELECT SEM NECESSIDADE */
         FOR BENS_DEPRECIACAO IN
            (SELECT BA.CDBEMATIVO
               FROM BEMATIVO BA, ATIVOFECHABEM AB
              WHERE BA.CDEMPRESA       = AB.CDEMPRESA
                AND BA.CDBEMATIVO      = AB.CDBEMATIVO
                AND AB.CDEMPRESA      = P_CDEMPRESA
                AND AB.IDSIMULFECHABEM = P_IDSIMULACAO
                AND AB.NRSEQFECHABEM   = P_NRSEQFECHABEM
              UNION
             SELECT BA.CDBEMATIVO
               FROM BEMATIVO BA, GRUPOFECHABEM GB
              WHERE BA.CDEMPRESA       = GB.CDEMPRESA
                AND BA.CDGRUPOBEM      = GB.CDGRUPOBEM
                AND GB.CDEMPRESA      = P_CDEMPRESA
                AND GB.IDSIMULFECHABEM = P_IDSIMULACAO
                AND GB.NRSEQFECHABEM   = P_NRSEQFECHABEM) LOOP

            FOR C_CARGA IN (SELECT BA.CDEMPRESA, BA.CDBEMATIVO, BA.CDFILIAL, BA.CDCENTCUST, BA.CDSETOR,BA.CDGRUPOBEM,BA.VRAQUIBEMATIVO,
                                   BA.CDTIPODEPREC,BA.VRTAXANODEPBEM, BA.QTATUABEMATIVO,BA.QTMESDEPBEM, BA.DTAQUIBEMATIVO,BA.VRINIDEPBEM,
                                   BA.VRJADEPBEMATIVO,BA.DTINIDEPRECBEM,BA.VRFALTADEPBEM,BA.QTMESFALTADBEM,BA.QTMESJADEPBEM, BA.DSLOCALBEMATIVO,
                                   BA.CDSERIEENTRBEM, BA.NRNOTAFISCBEM, BA.CDFILIALNF, BA.NRLANCTONF, BA.CDREGIMEBEM,
                                   GB.QTMESDEPREGRBEM, GB.QTMESDEPREFISC, BA.VRINIDEPRECFIS, BA.VRFALTDEPBEMFIS,
                                   BA.QTMESFALTDBEMFIS, BA.VRTXANODEPBEMFI, BA.VRJADEPBEMFISC, BA.QTMESDEPBEMFISC, BA.VRAQUIBEMFISC
                              FROM BEMATIVO BA, REGIMEBEM RB,GRUPOBEM GB, PARAMEMPRESA PA
                              WHERE BA.CDEMPRESA       = P_CDEMPRESA
                                AND BA.IDTIPOBEMATIVO  = P_IDSIMULACAO /* SEMPRE SERA REAL (R), O SISTEMA NAO FAZ SIMULACAO */
                                AND BA.DTBAIXATOTABEMA IS NULL /* O ATIVO NAO ESTEJA BAIXADO TOTALMENTE */
                                AND BA.CDEMPRESA       = RB.CDEMPRESA
                                AND BA.CDREGIMEBEM     = RB.CDREGIMEBEM
                                AND BA.CDEMPRESA       = GB.CDEMPRESA
                                AND BA.CDGRUPOBEM      = GB.CDGRUPOBEM
                                AND PA.CDEMPRESA       = BA.CDEMPRESA
                                AND NVL(PA.VRMINDEPBEM,0) <= BA.VRINIDEPBEM /* TELA PARAMETROS GESTAO DE ATIVO, CAMPO VALOR MIN DEPRECIACAO */
                                AND DECODE(V_IDTIPOFECHA, 'C', GB.IDDEPRECIAGRBEM, GB.IDDEPRECIAFISC) = 'S' /* GRUPO DE BEM DEPRECIA CONTABILMENTE OU FISCALMENTE */
                                AND DECODE(V_IDTIPOFECHA, 'C', RB.IDDEPREGBEM, RB.IDDEPREGBEMFIS)  = 'S'
                                AND DECODE(V_IDTIPOFECHA, 'C', BA.QTMESFALTADBEM, BA.QTMESFALTDBEMFIS) > 0 /* AINDA EXISTEM MESES A SEREM DEPRECIADOS */
                                AND ROUND(DECODE(V_IDTIPOFECHA, 'C', BA.VRFALTADEPBEM, BA.VRFALTDEPBEMFIS), 2) > 0 /* VALOR QUE FALTA DEPRECIAR */
                                AND LAST_DAY(BA.DTINIDEPRECBEM) <= LAST_DAY(V_DTFECHABEM) /* DATA DE INICIO DE DEPRECIACAO DO BEM ANTERIOR OU IGUAL A DATA DE FECHAMENTO */
                                AND BA.CDBEMATIVO = BENS_DEPRECIACAO.CDBEMATIVO
                              ORDER BY BA.CDBEMATIVO) LOOP
               /* Verifica se o bem deve ou nao ser depreciado */
               CASE C_EMPRESA.IDTPCALCDEPREC
                    WHEN '1' THEN /* 1 - Deprecia integral no mesmo mes de aquisicao */
                       IF LAST_DAY(C_CARGA.DTINIDEPRECBEM) <= LAST_DAY(V_DTFECHABEM) THEN
                          V_BODEPBEM := TRUE;
                       ELSE
                          V_BODEPBEM := FALSE;
                       END IF;
                    WHEN '2' THEN /* 2 - Deprecia proporcional no mesmo mes de aquisicao */
                       IF LAST_DAY(C_CARGA.DTINIDEPRECBEM) <= LAST_DAY(V_DTFECHABEM)  THEN
                          V_BODEPBEM := TRUE;
                       ELSE
                          V_BODEPBEM := FALSE;
                       END IF;
                    WHEN '3' THEN /* 3 - Avalia o dia da aquisicao para determinar o mes de inicio da depreciacao
                                         Verifica o campo NRDIAAQUIBEM */
                       IF TO_NUMBER(C_EMPRESA.NRDIAAQUIBEM) < TO_NUMBER(TO_CHAR(C_CARGA.DTINIDEPRECBEM,'DD')) THEN
                          IF LAST_DAY(V_DTFECHABEM) >= LAST_DAY(C_CARGA.DTINIDEPRECBEM) THEN
                             V_BODEPBEM := TRUE;
                          ELSE
                             V_BODEPBEM := FALSE;
                          END IF;
                       ELSE
                          IF LAST_DAY(V_DTFECHABEM) >= ADD_MONTHS(LAST_DAY(C_CARGA.DTINIDEPRECBEM),1) THEN
                             V_BODEPBEM := TRUE;
                          ELSE
                             V_BODEPBEM := FALSE;
                          END IF;
                       END IF;
                    WHEN '4' THEN /* 4 - Deprecia integral no mes seguinte a aquisicao */
                      IF LAST_DAY(V_DTFECHABEM) >= LAST_DAY(ADD_MONTHS(C_CARGA.DTINIDEPRECBEM, 1)) THEN
                         V_BODEPBEM := TRUE;
                      ELSE
                         V_BODEPBEM := FALSE;
                      END IF;
               END CASE;
               /* Verifica se o bem, mesmo se o parametro permitir, deve ser depreciado ou nao, pois
                  ele pode estar sobre o efeito de "suspensao" da depreciacao. Quando isso ocorre o bem
                  para de ser depreciado */
               FOR C_SUSPENSAO IN (
                   SELECT DTINISUSPATIVO, DTFINSUSPATIVO
                     FROM SUSPBEMATIVO
                    WHERE CDEMPRESA   = P_CDEMPRESA
                      AND CDBEMATIVO  = C_CARGA.CDBEMATIVO) LOOP
                   IF LAST_DAY(V_DTFECHABEM) BETWEEN C_SUSPENSAO.DTINISUSPATIVO AND C_SUSPENSAO.DTFINSUSPATIVO THEN
                      V_BODEPBEM := FALSE;
                   END IF;
               END LOOP;

               /* VERIFICA SE JA EXISTE UMA DEPRECIACAO PARA O BEM */
               V_CONTADOR := 0;
               BEGIN
                  SELECT COUNT(*)
                    INTO V_CONTADOR
                    FROM CAPAOPERABEM CO, ITCAPAOPERABEM IT
                   WHERE IT.CDEMPRESA       = P_CDEMPRESA
                     AND IT.IDSIMULOPERABEM = P_IDSIMULACAO
                     AND IT.CDBEMATIVO      = C_CARGA.CDBEMATIVO
                     AND CO.CDEMPRESA       = IT.CDEMPRESA
                     AND CO.IDSIMULOPERABEM = IT.IDSIMULOPERABEM
                     AND CO.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM
                     AND TO_CHAR(CO.DTCAPAOPEBEM, 'YYYYMM') = TO_CHAR(V_DTFECHABEM, 'YYYYMM')
                     AND CO.IDIDENTCAPAOPER = '02' /* DEPRECIACAO */
                     AND IDTIPOFECHAOPER = V_IDTIPOFECHA;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CONTADOR := 0;
               END;

               /* INSERE OS VALORES NAS VARIAVEIS GERAIS, PARA EVITAR TANTOS IFs PARA
                  TROCAS DE CAMPOS ENTRE FISCAL E CONTABIL*/
               IF V_IDTIPOFECHA = 'C' THEN
                  V_VRFALTANTEDEPREC := C_CARGA.VRFALTADEPBEM;
                  V_MESESFALTADEPREC := C_CARGA.QTMESFALTADBEM;
                  V_VRTAXAANODEPREC := C_CARGA.VRTAXANODEPBEM;
                  V_VRDEPREBASE := C_CARGA.VRAQUIBEMATIVO;
                  V_VRJADEPRECIADO := C_CARGA.VRJADEPBEMATIVO;
                  V_QTDEPRECGRUPOBEM := C_CARGA.QTMESDEPREGRBEM;
                  V_MESESDEPRECIABEM := C_CARGA.QTMESDEPBEM;
               ELSE
                  V_VRFALTANTEDEPREC := C_CARGA.VRFALTDEPBEMFIS;
                  V_MESESFALTADEPREC := C_CARGA.QTMESFALTDBEMFIS;
                  V_VRTAXAANODEPREC := C_CARGA.VRTXANODEPBEMFI;
                  V_VRDEPREBASE := C_CARGA.VRAQUIBEMFISC;
                  V_VRJADEPRECIADO := C_CARGA.VRJADEPBEMFISC;
                  V_QTDEPRECGRUPOBEM := C_CARGA.QTMESDEPREFISC;
                  V_MESESDEPRECIABEM := C_CARGA.QTMESDEPBEMFISC;
               END IF;

               /* VERIFICA SE EXISTE UMA DEPECIACAO PARA O BEM E O BEM AINDA TEM MESES
                  PARA DEPRECIACAO */
               IF (V_CONTADOR = 0) AND (V_VRFALTANTEDEPREC > 0) THEN
                  /* SE O BEM DEVE SER DEPRECIADO, OS CALCULOS SAO REALIZADOS */
                  IF V_BODEPBEM = TRUE THEN
                     /* VALOR QUE O BEM E DEPRECIADO ANUALMENTE */
                     V_TAXA_MES := V_VRTAXAANODEPREC /12;
                     IF V_MESESFALTADEPREC = 1 THEN
                        V_VALORDEPRECIACAO := V_VRDEPREBASE - V_VRJADEPRECIADO;
                     ELSE
                        V_CONTADOR := 0;
                        BEGIN
                           SELECT COUNT(*)
                             INTO V_CONTADORREA
                             FROM CAPAOPERABEM CO, ITCAPAOPERABEM IT
                            WHERE IT.CDEMPRESA       = P_CDEMPRESA
                              AND IT.IDSIMULOPERABEM = P_IDSIMULACAO
                              AND IT.CDBEMATIVO      = C_CARGA.CDBEMATIVO
                              AND CO.CDEMPRESA       = IT.CDEMPRESA
                              AND CO.IDSIMULOPERABEM = IT.IDSIMULOPERABEM
                              AND CO.NRSEQCAPAOPEBEM = IT.NRSEQCAPAOPEBEM
                              AND CO.IDIDENTCAPAOPER = '06' /* REAVALIACAO */
                              AND IDTIPOFECHAOPER = V_IDTIPOFECHA; /* FECHAMENTO CONTABIL OU FISCCAL (C OU F)*/
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_CONTADOR := 0;
                        END;
                        /* SE NAO EXISTIR REAVALIACAO DO BEM */
                        IF V_CONTADORREA = 0 THEN
                           V_MESESTAXA := V_QTDEPRECGRUPOBEM;
                           V_VRDEPRETEMP := V_VRDEPREBASE;
                           /* PEGA O VALOR DE AQUISICAO DO ITEM E DIVIDE PELA QUANTIDADE DE MESES
                              QUE ELE DEVERA DEPRECIAR.
                              EXEMPLO:
                              AQUISICAO: 100,00
                              MESES PARA DEPRECIAR: 20
                              VALOR A DEPRECIAR: 5 */

                           IF C_EMPRESA.IDTPCALCDEPREC = '2' THEN /* Deprecia proporcional no mesmo mes de aquisicao */
                              IF TO_CHAR(C_CARGA.DTAQUIBEMATIVO, 'MM/YYYY') = TO_CHAR(LAST_DAY(V_DTFECHABEM), 'MM/YYYY') THEN
                                 V_VALORDEPRECIACAO := (V_VRDEPREBASE/V_MESESDEPRECIABEM); /* Valor da depreciacao normal, mensal */
                                 V_VALORDEPRECIACAO := V_VALORDEPRECIACAO / TO_NUMBER(TO_CHAR(LAST_DAY(V_DTFECHABEM), 'DD')); /* valor da depreciacao diario, conforme mes do fechamento */

                                 V_QTDIASDEPRE := 0;
                                 V_QTDIASDEPRE := TO_NUMBER(TO_CHAR(C_CARGA.DTAQUIBEMATIVO, 'DD')); /* DIA DA AQUISICAO */
                                 V_QTDIASDEPRE := TO_NUMBER(TO_CHAR(LAST_DAY(V_DTFECHABEM), 'DD')) - V_QTDIASDEPRE; /* DIF. DT FECHAMENTO E AQUISICAO */
                                 V_QTDIASDEPRE := V_QTDIASDEPRE + 1; /* DATA E INCLUSIVE, OU SEJA, CASO A AQUISICAO E O FECHAMENTO SEJAM NO MESMO DIA,
                                                                        A DEPRECIACAO SERA FEITA EM UM DIA E NAO EM 0 DIAS. EX: AQUIS. 31/01 E FECH. 31/01 */
                                 V_VALORDEPRECIACAO := V_VALORDEPRECIACAO * V_QTDIASDEPRE; /* VALOR DA DEPRECIACAO PARA OS DIAS QUE AINDA FALTAM NO MES */
                              ELSE
                                 V_VALORDEPRECIACAO := (V_VRDEPRETEMP/V_MESESDEPRECIABEM);
                              END IF;
                           ELSE
                              V_VALORDEPRECIACAO := (V_VRDEPRETEMP * RETORNA_TAXA(C_CARGA.CDTIPODEPREC, V_MESESTAXA));
                           END IF;
                        ELSE
                           /* PEGA O VALOR RESTANTE DO BEM, APOS A REAVALIACAO E DEPRECIA PELA
                              QUANTIDADE DE MESES QUE AINDA FALTA DEPRECIAR.
                              EXEMPLO:
                              VR RESTANTE: 500,00
                              MESES QUE AINDA FALTAM DEPRECIACAO: 10
                              VALOR A DEPRECIAR: 50 */
                           V_VALORDEPRECIACAO := (V_VRFALTANTEDEPREC/V_MESESFALTADEPREC);
                        END IF;
                     END IF;

                     /* Verifica se o valor da depreciacao mais o valor que ja foi depreciado ultrapassara o
                        valor de aquisicao do bem, caso ultrapasse e pegado somente o valor residual */
                     IF V_VRDEPREBASE - (V_VRJADEPRECIADO + V_VALORDEPRECIACAO) < 0 THEN
                        V_VALORDEPRECIACAO := V_VRDEPREBASE - V_VRJADEPRECIADO;
                     END IF;

                     /* INSERE A DEPRECIACAO DO BEM */
                     INSERT INTO ITCAPAOPERABEM
                       (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                        QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                        CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                        CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                        VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                        DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                        NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
                     VALUES
                       (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(V_NRSEQITEMDEPREC), 10, '0'), C_CARGA.CDBEMATIVO, C_CARGA.QTATUABEMATIVO,
                        C_CARGA.QTATUABEMATIVO, V_VALORDEPRECIACAO, C_CARGA.CDFILIAL, C_CARGA.CDFILIAL, C_CARGA.CDCENTCUST,
                        C_CARGA.CDCENTCUST, C_CARGA.CDSETOR, C_CARGA.CDSETOR, C_CARGA.DSLOCALBEMATIVO, C_CARGA.DSLOCALBEMATIVO,
                        C_CARGA.CDGRUPOBEM, C_CARGA.CDGRUPOBEM, V_MESESFALTADEPREC, V_MESESFALTADEPREC, V_VRTAXAANODEPREC,
                        V_VRTAXAANODEPREC, NULL, C_CARGA.NRNOTAFISCBEM, C_CARGA.CDSERIEENTRBEM, C_CARGA.CDFILIALNF, C_CARGA.NRLANCTONF,
                        'DEPRECIACAO', SYSDATE, SYSDATE, P_CDOPERADOR, P_CDOPERADOR,
                        NULL, C_CARGA.CDTIPODEPREC, C_CARGA.CDTIPODEPREC, C_CARGA.CDREGIMEBEM, C_CARGA.CDREGIMEBEM);

                     V_NRSEQRATOPERABE :=  1;
                     V_EXISRATE := FALSE;
                     FOR C_RATEIOBEM IN (
                         SELECT CDFILICCUST, CDCENTCUSBEM, VRRATEBEM
                           FROM RATEIOBEM R
                          WHERE R.CDEMPRESA   = P_CDEMPRESA
                            AND R.CDBEMATIVO  = C_CARGA.CDBEMATIVO) LOOP
                         V_VALORRATE := ((V_VALORDEPRECIACAO*C_RATEIOBEM.VRRATEBEM)/100);
                         INSERT INTO RATOPERABEM
                           (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,NRSEQRATOPERABE,CDFILIAL,CDCENTCUST,VRPERCRATOPE,
                            VRBEMATIVO,VRRATOPERABE)
                         VALUES
                            (P_CDEMPRESA, P_IDSIMULACAO,SUBSTR(V_NRSEQDEPRECIA, 11, 10),LPAD(TO_CHAR(V_NRSEQITEMDEPREC), 10, '0'),LPAD(TO_CHAR(V_NRSEQRATOPERABE), 10, '0'),C_RATEIOBEM.CDFILICCUST,
                             C_RATEIOBEM.CDCENTCUSBEM, C_RATEIOBEM.VRRATEBEM, V_VRDEPREBASE,V_VALORRATE);
                         V_NRSEQRATOPERABE := V_NRSEQRATOPERABE + 1;
                         V_EXISRATE := TRUE;
                     END LOOP;
                     IF V_EXISRATE = FALSE THEN
                        BEGIN
                          SELECT BEMATIVO.CDFILIAL, BEMATIVO.CDCENTCUST
                            INTO V_CDFILIALRAT, V_CDCENTCUSTRAT
                            FROM BEMATIVO
                           WHERE BEMATIVO.CDBEMATIVO = C_CARGA.CDBEMATIVO
                             AND BEMATIVO.CDEMPRESA = P_CDEMPRESA;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                             V_CDFILIAL   := NULL;
                             V_CDCENTCUST := NULL;
                        END;
                        INSERT INTO RATOPERABEM
                          (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,NRSEQRATOPERABE,CDFILIAL,CDCENTCUST,VRPERCRATOPE,
                           VRBEMATIVO,VRRATOPERABE)
                        VALUES
                           (P_CDEMPRESA, P_IDSIMULACAO,SUBSTR(V_NRSEQDEPRECIA, 11, 10),LPAD(TO_CHAR(V_NRSEQITEMDEPREC), 10, '0'),LPAD(TO_CHAR(V_NRSEQRATOPERABE), 10, '0'),V_CDFILIALRAT,
                            V_CDCENTCUSTRAT, 100, V_VRDEPREBASE,V_VALORDEPRECIACAO);
                     END IF;
                     V_NRSEQITEMDEPREC := V_NRSEQITEMDEPREC + 1;
                  END IF;
               END IF;
            END LOOP; /* MOVIMENTACAO DO BEM */
         END LOOP; /* BENS */
      END LOOP; /* EMPRESA */
   END IF;

   IF P_CARGAFECHA = 'P' THEN /* Tipo de operacao executada na tela seja processar */
      IF V_IDTIPOFECHA = 'C' THEN /* Fechamento Contabil */
         IF P_IDOPERACAO = 'F' THEN /* Fechamento */
            OPEN P_OPERFECHA;
         ELSE
            OPEN P_OPERTRANS;
         END IF;
         LOOP
            IF P_IDOPERACAO = 'F' THEN
               FETCH P_OPERFECHA INTO V_CDEMPRESA, V_NRSEQCAPA, V_NRSEQIT,
                                      V_DTCAPA, V_VRIITCAPA, V_CDBEMATIVO, V_CDREGIMEBEM,
                                      V_NMTIPO, V_CDTIPOOPERBEM, V_QTITCAPA,
                                      V_CDFILIAL, V_CDCENTCUST,
                                      V_SETOR, V_CDGRUPONOVO, V_CDGRUPOANTE, V_QTMESDEPNOVO,
                                      V_VRTAXDEPNOVO, V_VRTAXDEPANTE, V_CDTIPDEPNOVO, V_VRINIDEP,
                                      V_DTINIDEP, V_VRAQUISIC, V_QTMESDEP, V_VRJADEP,
                                      V_VRFALDEP, V_QTMESFALT, V_QTMESJADEP;
               EXIT WHEN P_OPERFECHA%NOTFOUND;
            ELSE
               FETCH P_OPERTRANS INTO V_CDEMPRESA, V_NRSEQCAPA, V_NRSEQIT,
                                      V_DTCAPA, V_VRIITCAPA, V_CDBEMATIVO,
                                      V_NMTIPO, V_CDTIPOOPERBEM, V_QTITCAPA,
                                      V_CDFILIAL, V_CDCENTCUST,
                                      V_SETOR, V_CDGRUPONOVO, V_CDGRUPOANTE, V_QTMESDEPNOVO,
                                      V_VRTAXDEPNOVO, V_VRTAXDEPANTE, V_CDTIPDEPNOVO, V_VRINIDEP,
                                      V_DTINIDEP, V_VRAQUISIC, V_QTMESDEP, V_VRJADEP,
                                      V_VRFALDEP, V_QTMESFALT, V_QTMESJADEP,
                                      V_CDGRUPOBEM, V_CDTIPODEPREC, V_CDREGIMEBEM, V_DTULTDEP, V_VRFALTADEPNOVO,
                                      V_VRFALTADEPANTE, V_VRINIDEPFIS,
                                      V_DTINIDEPFIS, V_VRAQUISICFIS, V_QTMESDEPFIS, V_VRJADEPFIS,
                                      V_VRFALDEPFIS, V_QTMESFALTFIS, V_QTMESJADEPFIS, V_DTULTDEPFIS;
               EXIT WHEN P_OPERTRANS%NOTFOUND;
            END IF;

            SELECT TB.NMTIPOOPERBEM, TB.IDTIPOOPERBEM
              INTO V_NMTIPOOPERBEM, V_IDTIPOOPERBEM
              FROM TIPOOPERBEM TB
             WHERE TB.CDEMPRESA     = P_CDEMPRESA
               AND TB.CDTIPOOPERBEM = V_CDTIPOOPERBEM;
               
            NOVO_CODIGO_NT ('OPERACAOBEM'||V_CDEMPRESA||V_CDBEMATIVO||P_IDSIMULACAO, V_NRSEQOPERABEM,1);

            /* Imobilizacao */
            IF V_IDTIPOOPERBEM = '01' THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL,
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM,
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER)
               VALUES
                 (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM, NULL,
                  P_CDOPERADOR, V_QTITCAPA, V_VRIITCAPA, V_CDFILIAL,
                  V_CDCENTCUST, V_SETOR, NULL,
                  V_CDGRUPONOVO,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPDEPNOVO,
                  NULL, NULL, NULL, NULL,NULL, V_VRINIDEP,
                  0, V_VRINIDEP, V_DTINIDEP, NULL, V_NMTIPOOPERBEM, SYSDATE,
                  P_CDOPERADOR, SYSDATE, P_CDOPERADOR, NULL, NULL, V_IDTIPOOPERBEM,
                  '1', V_QTMESDEP, 0, 'C');
               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM,11,10)
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;
            END IF;

            /* Depreciacao */
            IF V_IDTIPOOPERBEM = '02' THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER, 
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL, 
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO, 
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC, 
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM, 
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM, 
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM, 
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER) 
               VALUES 
                 (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'', 
                  P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL, 
                  V_CDCENTCUST,V_SETOR, NULL,
                  V_CDGRUPONOVO,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPDEPNOVO,
                  NULL, NULL, NULL, NULL, NULL, V_VRINIDEP,
                  (V_VRJADEP+V_VRIITCAPA),(V_VRFALDEP-V_VRIITCAPA),V_DTINIDEP,V_DTCAPA,V_NMTIPOOPERBEM,SYSDATE,
                  P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM, 
                  '1',(V_QTMESFALT-1),(V_QTMESJADEP+1),'C'); 

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM,11,10)
                WHERE CDEMPRESA = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;
                  
               SELECT COUNT(*)
                 INTO V_MES_JADEPRECIADO
                 FROM OPERACAOBEM
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERACAO = P_IDSIMULACAO
                  AND CDBEMATIVO      = V_CDBEMATIVO
                  AND IDIDENTOPERABEM = '02' /* DEPRECIACAO */
                  AND IDTIPOFECHAOPER = 'C';

               UPDATE BEMATIVO
                  SET QTMESJADEPBEM   = (QTMESJADEPBEM+1),
                      VRJADEPBEMATIVO = (VRJADEPBEMATIVO + V_VRIITCAPA),
                      DTULTDEPBEM     = V_DTCAPA,
                      QTMESFALTADBEM  = (QTMESFALTADBEM-1),
                      VRFALTADEPBEM   = (V_VRFALDEP - V_VRIITCAPA),
                      VRULTDEPBEM     = V_VRIITCAPA
                WHERE CDEMPRESA  = V_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;
            END IF;

            /* 04 - BAIXA_VENDA OU 05 - BAIXAS_DIVERSAS */
            IF (V_IDTIPOOPERBEM = '04' OR V_IDTIPOOPERBEM = '05') THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER, 
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL, 
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO, 
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC, 
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM, 
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM, 
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM, 
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER) 
               VALUES 
                  (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'',
                   P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL, 
                   V_CDCENTCUST,V_SETOR, NULL,
                   V_CDGRUPOBEM,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPODEPREC,
                   NULL, NULL, NULL, NULL, NULL,V_VRINIDEP,
                   V_VRJADEP, V_VRFALDEP,V_DTINIDEP,NULL,V_NMTIPOOPERBEM,SYSDATE,
                   P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM,
                   '1',V_QTMESDEP,0,'C');

               SELECT (NVL(((BEM.VRAQUIBEMATIVO * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRAQUIBEM,
                      (NVL(((BEM.VRINIDEPBEM * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRINIDEPBEM,
                      (NVL(((BEM.VRJADEPBEMATIVO * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRJADEPBEM,
                      (NVL(((BEM.VRFALTADEPBEM * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRFALTADEPBEM,
                      (NVL(((BEM.VRAQUIBEMFISC * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRAQUIBEMFISC,
                      (NVL(((BEM.VRINIDEPRECFIS * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRINIDEPRECFIS,
                      (NVL(((BEM.VRJADEPBEMFISC * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRJADEPBEMFISC,
                      (NVL(((BEM.VRFALTDEPBEMFIS * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRFALTDEPBEMFIS
                 INTO V_VRAQUIBEMBX, V_VRINIDEPBEMBX, V_VRJADEPBEMBX, V_VRFALTADEPBEMBX,
                      V_VRAQUIBEMBXF, V_VRINIDEPBEMBXF, V_VRJADEPBEMBXF, V_VRFALTADEPBEMBXF
                 FROM ITCAPAOPERABEM IT, BEMATIVO BEM
                WHERE V_CDEMPRESA   = IT.CDEMPRESA
                  AND P_IDSIMULACAO = IT.IDSIMULOPERABEM
                  AND V_NRSEQCAPA   = IT.NRSEQCAPAOPEBEM
                  AND V_NRSEQIT     = IT.NRSEQITCAPAOPE
                  AND IT.CDEMPRESA  = BEM.CDEMPRESA
                  AND IT.CDBEMATIVO = BEM.CDBEMATIVO
                ORDER BY IT.NRSEQITCAPAOPE;

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM   = SUBSTR(V_NRSEQOPERABEM,11,10),
                      VRAQUIBEMANTE   = V_VRAQUISIC,
                      VRAQUIBEMNOVO   = V_VRAQUISIC - V_VRAQUIBEMBX,
                      VRINIDEPBEMANTE = V_VRINIDEP,
                      VRINIDEPBEMNOVO = V_VRINIDEP - V_VRINIDEPBEMBX,
                      VRJADEPBEMANTE  = V_VRJADEP,
                      VRJADEPBEMNOVO  = V_VRJADEP - V_VRJADEPBEMBX,
                      VRFALTADEPANTE  = V_VRFALDEP,
                      VRFALTADEPNOVO  = V_VRFALDEP - V_VRFALTADEPBEMBX
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;

               UPDATE CAPAOPERABEM
                  SET IDSITCAPAOPER = '2' /* Processado */
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA;

               SELECT (NVL(((BEM.VRAQUIBEMATIVO * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRAQUIBEM,
                      (NVL(((BEM.VRINIDEPBEM * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRINIDEPBEM,
                      (NVL(((BEM.VRJADEPBEMATIVO * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRJADEPBEM,
                      (NVL(((BEM.VRFALTADEPBEM * IT.QTITCAPAOPENOVO) / IT.QTITCAPAOPEANTE),0)) AS VRFALTADEPBEM
                 INTO V_VRAQUIBEMBX, V_VRINIDEPBEMBX, V_VRJADEPBEMBX, V_VRFALTADEPBEMBX
                 FROM ITCAPAOPERABEM IT, BEMATIVO BEM
                WHERE V_CDEMPRESA   = IT.CDEMPRESA
                  AND P_IDSIMULACAO = IT.IDSIMULOPERABEM
                  AND V_NRSEQCAPA   = IT.NRSEQCAPAOPEBEM
                  AND V_NRSEQIT     = IT.NRSEQITCAPAOPE
                  AND IT.CDEMPRESA  = BEM.CDEMPRESA
                  AND IT.CDBEMATIVO = BEM.CDBEMATIVO
                ORDER BY IT.NRSEQITCAPAOPE;
                
               UPDATE BEMATIVO
               SET VRAQUIBEMATIVO  = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRAQUIBEMATIVO, (VRAQUIBEMATIVO - V_VRAQUIBEMBX)),
                   VRINIDEPBEM     = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRINIDEPBEM, (VRINIDEPBEM - V_VRINIDEPBEMBX)),
                   VRJADEPBEMATIVO = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRJADEPBEMATIVO, (VRJADEPBEMATIVO - V_VRJADEPBEMBX)),
                   VRFALTADEPBEM   = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRFALTADEPBEM, (VRFALTADEPBEM - V_VRFALTADEPBEMBX)),
                   VRAQUIBEMFISC   = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRAQUIBEMFISC, (VRAQUIBEMFISC - V_VRAQUIBEMBXF)),
                   VRINIDEPRECFIS  = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRINIDEPRECFIS, (VRINIDEPRECFIS - V_VRINIDEPBEMBXF)),
                   VRJADEPBEMFISC  = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRJADEPBEMFISC, (VRJADEPBEMFISC - V_VRJADEPBEMBXF)),
                   VRFALTDEPBEMFIS = DECODE(QTATUABEMATIVO,V_QTITCAPA, VRFALTDEPBEMFIS, (VRFALTDEPBEMFIS - V_VRFALTADEPBEMBXF)),
                   QTATUABEMATIVO  = (QTATUABEMATIVO - V_QTITCAPA)
               WHERE CDEMPRESA  = V_CDEMPRESA
                 AND CDBEMATIVO = V_CDBEMATIVO;
            END IF;

            /* REAVALIACAO */
            IF V_IDTIPOOPERBEM = '06' THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL, CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM, 
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM, 
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER) 
               VALUES 
                  (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM, NULL,
                   P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL, V_CDCENTCUST,V_SETOR,'',
                   V_CDGRUPOBEM,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPODEPREC,
                   NULL, NULL, NULL, NULL, NULL, V_VRINIDEP,
                   V_VRJADEP, V_VRFALDEP,V_DTINIDEP,NULL,V_NMTIPOOPERBEM,SYSDATE,
                   P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM,
                   '1', V_QTMESDEP,0,'C');

               IF (V_QTMESDEPNOVO IS NULL) OR (V_QTMESDEPNOVO = 0) THEN
                  SELECT QTMESFALTADBEM
                    INTO V_QTMESDEPNOVO
                    FROM BEMATIVO
                   WHERE CDEMPRESA = P_CDEMPRESA
                     AND CDBEMATIVO = V_CDBEMATIVO;
               END IF;

               IF (V_VRFALTADEPNOVO IS NULL) OR (V_VRFALTADEPNOVO = 0) THEN
                  SELECT VRFALTADEPBEM
                    INTO V_VRFALTADEPNOVO
                    FROM BEMATIVO
                   WHERE CDEMPRESA = P_CDEMPRESA
                     AND CDBEMATIVO = V_CDBEMATIVO;
               END IF;

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM,11,10)
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;

               UPDATE CAPAOPERABEM
                  SET IDSITCAPAOPER = '2'
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA;

               UPDATE BEMATIVO
                  SET QTMESFALTADBEM = V_QTMESDEPNOVO,
                      VRFALTADEPBEM  = V_VRFALTADEPNOVO
                WHERE CDEMPRESA  = V_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;
            END IF;

            /* 09 - TRANSFERENCIA_CONTABIL */
            IF V_IDTIPOOPERBEM = '09' THEN
               NOVO_CODIGO_NT ('OPERACAOBEM'||V_CDEMPRESA||V_CDBEMATIVO||P_IDSIMULACAO, V_NRSEQOPERABEM_TC,1);
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,
                   VROPERABEM,
                   CDFILIAL,
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM,
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER)
               VALUES
                 (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM_TC,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'',
                  P_CDOPERADOR,V_QTITCAPA,
                  V_QTMESJADEP*(V_VRINIDEP/ DECODE(V_QTMESDEPNOVO,0,1,V_QTMESDEPNOVO)),
                  V_CDFILIAL,
                  V_CDCENTCUST,V_SETOR,'',
                  V_CDGRUPONOVO,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPDEPNOVO,
                  '','','','','',V_VRINIDEP,
                  0,V_VRINIDEP,V_DTINIDEP,NULL,V_NMTIPOOPERBEM,SYSDATE,
                  P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM,
                  '1',V_QTMESDEP,0,'C');

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM_TC,11,10)
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;

               NOVO_CODIGO_NT ('OPERACAOBEM'||V_CDEMPRESA||V_CDBEMATIVO||P_IDSIMULACAO, V_NRSEQOPERABEM_FC,1);
               INSERT INTO OPERACAOBEM
                   (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                    CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL,
                    CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                    CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                    CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                    VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                    CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM,
                    IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER)
                VALUES
                  (P_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO, SUBSTR(V_NRSEQOPERABEM_FC, 11, 10), V_DTCAPA,V_CDTIPOOPERBEM,'',
                   P_CDOPERADOR,V_QTITCAPA,V_VRAQUISIC*(-1),V_CDFILIAL,
                   V_CDCENTCUST,V_SETOR,'',
                   V_CDGRUPOBEM,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPODEPREC,
                   '','','','','',V_VRINIDEP,
                   V_VRJADEP,V_VRFALDEP,V_DTINIDEP,V_DTCAPA,V_NMTIPOOPERBEM,SYSDATE,
                   P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,'01',
                   '1',V_QTMESFALT,V_QTMESJADEP,'C');

               NOVO_CODIGO_NT('FECHAMENTOBEM'||V_CDEMPRESA, V_NRSEQFECHATCANU1,1);
               INSERT INTO FECHAMENTOBEM
                     (CDEMPRESA, NRSEQFECHABEM, DTFECHABEM, IDTIPOFECHAOPER, IDSITFECHABEM,
                      DTINCFECHABEM, CDOPINCFECHABEM, DTPROFECHABEM,
                      CDOPPROFECHABEM, DTCTBFECHABEM, CDOPCTBFECHABEM, IDSIMULFECHABEM)
               VALUES(P_CDEMPRESA, SUBSTR(V_NRSEQFECHATCANU1, 11, 10), V_DTCAPA, 'C', '1',
                      V_DTCAPA, P_CDOPERADOR, '',
                      '', '', '', P_IDSIMULACAO);

               NOVO_CODIGO_NT('CAPAOPERABEM'||P_CDEMPRESA||P_IDSIMULACAO, V_NRSEQDEPRECIA,1);
               INSERT INTO CAPAOPERABEM
                  (CDEMPRESA, IDSIMULOPERABEM, NRSEQCAPAOPEBEM, DTCAPAOPEBEM, CDTIPOOPERBEM,
                   CDMOTIVOOPER, CDOPERESPOPERA, IDIDENTCAPAOPER, DTINCCAPAOPER, CDOPEINCCAPA,
                   DTATUCAPAOPER, CDOPEATUCAPA, DTCANCAPAOPER, CDOPECANCAPA, IDSITCAPAOPER, NRSEQFECHABEM,IDTIPOFECHAOPER)
               VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), V_DTCAPA, V_CDTIPOOPERBEM,
                  '', P_CDOPERADOR, '01', SYSDATE, P_CDOPERADOR,
                  V_DTCAPA, P_CDOPERADOR, NULL, NULL, '1', SUBSTR(V_NRSEQFECHATCANU1, 11, 10),'C');

               SELECT IDNOVOUSABEM, QTMESUSOBEM
                 INTO IDUSADO, MESUSADO
                 FROM BEMATIVO
                WHERE CDEMPRESA  = P_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;

                IF IDUSADO = 'U' THEN
                   IF MESUSADO > V_QTMESDEPNOVO/2 THEN
                      V_MUDAMES := V_QTMESDEPNOVO/2;
                   ELSE
                      V_MUDAMES := V_QTMESDEPNOVO - MESUSADO;
                   END IF;
                ELSE
                   V_MUDAMES := V_QTMESDEPNOVO;
                END IF;

                IF V_MUDAMES = 0 THEN
                   V_MUDAMES := 1;
                END IF;
                V_TAXABASICA := (100/V_MUDAMES)*12;
                V_TAXAFINAL  := V_TAXABASICA;

                V_MUDATAXA := V_TAXAFINAL;
                V_MUDAMES := (100/V_TAXAFINAL)*12;
                INSERT INTO ITCAPAOPERABEM
                  (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                   QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                   CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                   CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                   VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                   DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                   NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
                VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(1), 10, '0'),V_CDBEMATIVO,
                   V_QTITCAPA, V_QTITCAPA,V_VRAQUISIC*(-1), V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                   V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                   V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEP, V_QTMESDEP, V_VRTAXDEPANTE,
                   V_VRTAXDEPNOVO, NULL, '', '', '', '',
                   'IMOBILIZACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                   SUBSTR(V_NRSEQOPERABEM_FC, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               INSERT INTO ITCAPAOPERABEM
                  (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                   QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                   CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                   CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                   VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                   DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                   NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(2), 10, '0'),V_CDBEMATIVO,
                   V_QTITCAPA, V_QTITCAPA,V_VRJADEP*(-1), V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                   V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                   V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEP, V_QTMESDEP, V_VRTAXDEPANTE,
                   V_VRTAXDEPNOVO, NULL, '', '', '', '',
                   'DEPRECIACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                   SUBSTR(V_NRSEQOPERABEM_FC, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               INSERT INTO ITCAPAOPERABEM
                 (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                  QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                  CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                  CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                  VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                  DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                  NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                 (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(3), 10, '0'),V_CDBEMATIVO,
                  V_QTITCAPA, V_QTITCAPA,V_VRAQUISIC, V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                  V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                  V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEP, V_QTMESDEP, V_VRTAXDEPANTE,
                  V_VRTAXDEPNOVO, NULL, '', '', '', '',
                  'IMOBILIZACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                  SUBSTR(V_NRSEQOPERABEM_FC, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               INSERT INTO ITCAPAOPERABEM
                 (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                  QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                  CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                  CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                  VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                  DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                  NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                 (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(4), 10, '0'),V_CDBEMATIVO,
                  V_QTITCAPA, V_QTITCAPA,V_QTMESJADEP*(V_VRINIDEP/V_MUDAMES), V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                  V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                  V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEP, V_QTMESDEP, V_VRTAXDEPANTE,
                  V_VRTAXDEPNOVO, NULL, '', '', '', '',
                  'DEPRECIACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                  SUBSTR(V_NRSEQOPERABEM_FC, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               UPDATE BEMATIVO
                  SET CDGRUPOBEM      = V_CDGRUPONOVO,
                      CDTIPODEPREC    = V_CDTIPDEPNOVO,
                      VRTAXANODEPBEM  = V_MUDATAXA,
                      QTMESDEPBEM     = V_MUDAMES,
                      QTMESJADEPBEM = V_QTMESJADEP,
                      QTMESFALTADBEM = V_MUDAMES - V_QTMESJADEP,
                      VRJADEPBEMATIVO = V_QTMESJADEP*(V_VRINIDEP/V_MUDAMES),
                      VRFALTADEPBEM   = V_VRINIDEP-(V_QTMESJADEP*(V_VRINIDEP/V_MUDAMES))
                WHERE CDEMPRESA  = V_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;

               UPDATE FECHAMENTOBEM
                  SET IDSITFECHABEM   = '2',
                      DTPROFECHABEM   = V_DTCAPA,
                      CDOPPROFECHABEM = P_CDOPERADOR
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULFECHABEM = P_IDSIMULACAO
                  AND NRSEQFECHABEM   = SUBSTR(V_NRSEQFECHATCANU1, 11, 10);

               UPDATE CAPAOPERABEM
                  SET IDSITCAPAOPER = '2'
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQFECHABEM   = SUBSTR(V_NRSEQFECHATCANU1, 11, 10);

               NOVO_CODIGO_NT('OPERACAOBEM'||V_CDEMPRESA||V_CDBEMATIVO||P_IDSIMULACAO, V_NRSEQOPERABEM_FF,1);
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL,
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM,
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER)
               VALUES
                  (P_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM_FF, 11, 10) ,V_DTCAPA,V_CDTIPOOPERBEM,'',
                   P_CDOPERADOR,V_QTITCAPA,V_VRAQUISICFIS*(-1),V_CDFILIAL,
                   V_CDCENTCUST,V_SETOR,'',
                   V_CDGRUPOBEM,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPODEPREC,
                   '','','','','',V_VRINIDEPFIS,
                   V_VRJADEPFIS ,V_VRFALDEPFIS, V_DTINIDEPFIS ,V_DTCAPA, V_NMTIPOOPERBEM, SYSDATE,
                   P_CDOPERADOR, SYSDATE, P_CDOPERADOR, NULL, NULL, '01',
                   '1',V_QTMESFALTFIS,V_QTMESJADEPFIS,'F');

               NOVO_CODIGO_NT('FECHAMENTOBEM'||V_CDEMPRESA, V_NRSEQFECHATCANU1,1);
               INSERT INTO FECHAMENTOBEM
                     (CDEMPRESA, NRSEQFECHABEM, DTFECHABEM, IDTIPOFECHAOPER, IDSITFECHABEM,
                      DTINCFECHABEM, CDOPINCFECHABEM, DTPROFECHABEM,
                      CDOPPROFECHABEM, DTCTBFECHABEM, CDOPCTBFECHABEM, IDSIMULFECHABEM)
               VALUES(P_CDEMPRESA,SUBSTR(V_NRSEQFECHATCANU1, 11, 10), V_DTCAPA, 'F', '1',
                      V_DTCAPA, P_CDOPERADOR, '',
                      '', '', '', P_IDSIMULACAO);

               NOVO_CODIGO_NT('CAPAOPERABEM'||P_CDEMPRESA||P_IDSIMULACAO, V_NRSEQDEPRECIA,1);
               INSERT INTO CAPAOPERABEM
                           (CDEMPRESA, IDSIMULOPERABEM, NRSEQCAPAOPEBEM, DTCAPAOPEBEM, CDTIPOOPERBEM,
                            CDMOTIVOOPER, CDOPERESPOPERA, IDIDENTCAPAOPER, DTINCCAPAOPER, CDOPEINCCAPA,
                            DTATUCAPAOPER, CDOPEATUCAPA, DTCANCAPAOPER, CDOPECANCAPA, IDSITCAPAOPER, NRSEQFECHABEM,IDTIPOFECHAOPER)
                        VALUES
                           (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), V_DTCAPA, V_CDTIPOOPERBEM,
                           '', P_CDOPERADOR, '01', SYSDATE, P_CDOPERADOR,
                           V_DTCAPA, P_CDOPERADOR, NULL, NULL, '1', SUBSTR(V_NRSEQFECHATCANU1, 11, 10),'F');

               SELECT IDNOVOUSABEM, QTMESUSOBEM
                 INTO IDUSADO, MESUSADO
                 FROM BEMATIVO
                WHERE CDEMPRESA  = P_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;

               SELECT NVL(NRCOETIPODEPFIS,0), NVL(VRTXINCFISTPFIS,0)
                 INTO V_NRCOEFIS, NRINCEFIS
                 FROM TIPODEPREC
                WHERE CDEMPRESA = P_CDEMPRESA
                  AND CDTIPODEPREC = V_CDTIPODEPREC;
               CALCULOS_GPA(P_CDEMPRESA,V_CDGRUPOBEM,V_CDTIPODEPREC,V_CDREGIMEBEM,'','',V_DEPRECIA,V_DEPRECIAFI,V_MUDATAXCON,V_MUDAMES,V_MUDACON,V_MUDATAXA);

               INSERT INTO ITCAPAOPERABEM
                  (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                   QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                   CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                   CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                   VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                   DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                   NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(1), 10, '0'),V_CDBEMATIVO,V_QTITCAPA,
                   V_QTITCAPA,V_VRAQUISICFIS*(-1), V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                   V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                   V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEPFIS, V_QTMESDEPFIS, V_VRTAXDEPANTE,
                   V_VRTAXDEPNOVO, NULL, '', '', '', '',
                   'IMOBILIZACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                   SUBSTR(V_NRSEQOPERABEM_FF, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               INSERT INTO ITCAPAOPERABEM
                  (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                   QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                   CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                   CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                   VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                   DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                   NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(2), 10, '0'),V_CDBEMATIVO,V_QTITCAPA,
                   V_QTITCAPA,V_VRJADEPFIS*(-1), V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                   V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                   V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEPFIS, V_QTMESDEPFIS, V_VRTAXDEPANTE,
                   V_VRTAXDEPNOVO, NULL, '', '', '', '',
                   'DEPRECIACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                   SUBSTR(V_NRSEQOPERABEM_FF, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               INSERT INTO ITCAPAOPERABEM
                  (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                   QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                   CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                   CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                   VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                   DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                   NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(3), 10, '0'),V_CDBEMATIVO,V_QTITCAPA,
                   V_QTITCAPA, V_VRAQUISICFIS, V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                   V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                   V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEPFIS, V_QTMESDEPFIS, V_VRTAXDEPANTE,
                   V_VRTAXDEPNOVO, NULL, '', '', '', '',
                   'IMOBILIZACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                   SUBSTR(V_NRSEQOPERABEM_FF, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               INSERT INTO ITCAPAOPERABEM
                  (CDEMPRESA,IDSIMULOPERABEM,NRSEQCAPAOPEBEM,NRSEQITCAPAOPE,CDBEMATIVO,QTITCAPAOPEANTE,
                   QTITCAPAOPENOVO,VRITCAPAOPERA,CDFILIALITCANTE,CDFILIALITCNOVO,CDCENTCUITCANTE,
                   CDCENTCUITCNOVO,CDSETORITCANTE,CDSETORITCNOVO,DSLOCALITCANTE,DSLOCALITCNOVO,
                   CDGRUPOITCANTE,CDGRUPOITCNOVO,QTMESDEPITCANTE,QTMESDEPITCNOVO,VRTAXDEPITCANTE,
                   VRTAXDEPITCNOVO,CDCLIENTE,NRNOTAFIITCAPA,CDSERIENFITCAPA,CDFILIALNF,NRLANCTONF,
                   DSOBSITCAPAOPER,DTINCITCAPAOPER,DTATUITCAPAOPER,CDOPEATUITCAPA,CDOPEINCITCAPA,
                   NRSEQOPERABEM,CDTIPDEPITCANTE,CDTIPDEPITCNOVO,CDREGBEMITCANTE,CDREGBEMITCNOVO)
               VALUES
                  (P_CDEMPRESA, P_IDSIMULACAO, SUBSTR(V_NRSEQDEPRECIA, 11, 10), LPAD(TO_CHAR(4), 10, '0'),V_CDBEMATIVO,V_QTITCAPA,
                   V_QTITCAPA, V_QTMESJADEPFIS*(V_VRINIDEPFIS/V_MUDAMES), V_CDFILIAL, V_CDFILIAL, V_CDCENTCUST,
                   V_CDCENTCUST, V_SETOR, V_SETOR, '', '',
                   V_CDGRUPOANTE, V_CDGRUPONOVO, V_QTMESDEPFIS, V_QTMESDEPFIS, V_VRTAXDEPANTE,
                   V_VRTAXDEPNOVO, NULL, '', '', '', '',
                   'DEPRECIACAO', V_DTCAPA, V_DTCAPA, P_CDOPERADOR, P_CDOPERADOR,
                   SUBSTR(V_NRSEQOPERABEM_FF, 11, 10), V_CDTIPODEPREC, V_CDTIPODEPREC, V_CDREGIMEBEM, V_CDREGIMEBEM);

               UPDATE BEMATIVO
                  SET CDGRUPOBEM      = V_CDGRUPONOVO,
                      CDTIPODEPREC    = V_CDTIPDEPNOVO,
                      VRTXANODEPBEMFI = V_MUDATAXA,
                      QTMESDEPBEMFISC = V_MUDAMES,
                      QTMESJADEPBEMFI = V_QTMESJADEPFIS,
                      QTMESFALTDBEMFIS = V_MUDAMES - V_QTMESJADEPFIS,
                      VRJADEPBEMFISC  = V_QTMESJADEPFIS*(V_VRINIDEPFIS/V_MUDAMES),
                      VRFALTDEPBEMFIS = V_VRINIDEPFIS -(V_QTMESJADEPFIS*(V_VRINIDEPFIS/V_MUDAMES))
                WHERE CDEMPRESA  = V_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;

               UPDATE FECHAMENTOBEM
                  SET IDSITFECHABEM   = '2',
                      DTPROFECHABEM   = V_DTCAPA,
                      CDOPPROFECHABEM = P_CDOPERADOR
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULFECHABEM = P_IDSIMULACAO
                  AND NRSEQFECHABEM   = SUBSTR(V_NRSEQFECHATCANU1, 11, 10);

               UPDATE CAPAOPERABEM
                  SET IDSITCAPAOPER = '2'
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQFECHABEM   = SUBSTR(V_NRSEQFECHATCANU1, 11, 10);

               UPDATE CAPAOPERABEM
                  SET IDSITCAPAOPER = '2'
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA;
            END IF; 
         END LOOP; 
         IF P_IDOPERACAO = 'F' THEN 
            UPDATE FECHAMENTOBEM 
               SET IDSITFECHABEM   = '2', /* Processado */
                   DTPROFECHABEM   = SYSDATE,
                   CDOPPROFECHABEM = P_CDOPERADOR
             WHERE CDEMPRESA       = P_CDEMPRESA
               AND IDSIMULFECHABEM = P_IDSIMULACAO
               AND NRSEQFECHABEM   = P_NRSEQFECHABEM;

            UPDATE CAPAOPERABEM
               SET IDSITCAPAOPER = '2' /* Processado */
             WHERE CDEMPRESA       = P_CDEMPRESA
               AND IDSIMULOPERABEM = P_IDSIMULACAO
               AND NRSEQFECHABEM   = P_NRSEQFECHABEM;
         END IF; 
      ELSE
         IF P_IDOPERACAO = 'F' THEN 
            OPEN P_OPERFECHAFIS; 
         ELSE 
            OPEN P_OPERTRANSFIS; 
         END IF; 
         LOOP 
            IF P_IDOPERACAO = 'F' THEN 
               FETCH P_OPERFECHAFIS INTO V_CDEMPRESA, V_NRSEQCAPA, V_NRSEQIT, 
                                         V_DTCAPA, V_VRIITCAPA, V_CDBEMATIVO, V_CDREGIMEBEM, 
                                         V_NMTIPO, V_CDTIPOOPERBEM, V_QTITCAPA, 
                                         V_CDFILIAL, V_CDCENTCUST, 
                                         V_SETOR, V_CDGRUPONOVO, V_CDGRUPOANTE, V_QTMESDEPNOVO, 
                                         V_VRTAXDEPNOVO, V_VRTAXDEPANTE, V_CDTIPDEPNOVO, V_VRINIDEP, 
                                         V_DTINIDEP, V_VRAQUISIC, V_QTMESDEP, V_DTULTDEP, V_VRJADEP, 
                                         V_VRFALDEP, V_QTMESFALT, V_QTMESJADEP; 
               EXIT WHEN P_OPERFECHAFIS%NOTFOUND;
            ELSE 
               FETCH P_OPERTRANSFIS INTO V_CDEMPRESA, V_NRSEQCAPA, V_NRSEQIT, 
                                         V_DTCAPA, V_VRIITCAPA, V_CDBEMATIVO, 
                                         V_NMTIPO, V_CDTIPOOPERBEM, V_QTITCAPA, 
                                         V_CDFILIAL, V_CDCENTCUST, 
                                         V_SETOR, V_CDGRUPONOVO, V_CDGRUPOANTE, V_QTMESDEPNOVO, 
                                         V_VRTAXDEPNOVO, V_VRTAXDEPANTE, V_CDTIPDEPNOVO, V_VRINIDEP, 
                                         V_DTINIDEP, V_VRAQUISIC, V_QTMESDEP, V_VRJADEP, 
                                         V_VRFALDEP, V_QTMESFALT, V_QTMESJADEP, 
                                         V_CDGRUPOBEM, V_CDTIPODEPREC, V_CDREGIMEBEM, V_DTULTDEP, V_VRFALTADEPNOVO, 
                                         V_VRFALTADEPANTE; 
               EXIT WHEN P_OPERTRANSFIS%NOTFOUND; 
            END IF;

            SELECT TB.NMTIPOOPERBEM, TB.IDTIPOOPERBEM
              INTO V_NMTIPOOPERBEM, V_IDTIPOOPERBEM
              FROM TIPOOPERBEM TB
             WHERE TB.CDEMPRESA     = P_CDEMPRESA
               AND TB.CDTIPOOPERBEM = V_CDTIPOOPERBEM;

            NOVO_CODIGO_NT ('OPERACAOBEM'||V_CDEMPRESA||V_CDBEMATIVO||P_IDSIMULACAO, V_NRSEQOPERABEM,1);
            IF V_IDTIPOOPERBEM = '01' THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL,
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM,
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER)
               VALUES
                  (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'',
                   P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL,
                   V_CDCENTCUST,V_SETOR,'',
                   V_CDGRUPONOVO,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPDEPNOVO,
                   '','','','','',V_VRINIDEP,
                   0,V_VRINIDEP,V_DTINIDEP,NULL,V_NMTIPOOPERBEM,SYSDATE,
                   P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM,
                   '1',V_QTMESDEP,0,'F');

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM,11,10)
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;
            END IF;

            /* Depreciacao */
            IF V_IDTIPOOPERBEM = '02' THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL,
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM,
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER)
               VALUES
                 (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'',
                  P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL,
                  V_CDCENTCUST,V_SETOR,'',
                  V_CDGRUPONOVO,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPDEPNOVO,
                  '','','','','',V_VRINIDEP,
                  (V_VRJADEP+V_VRIITCAPA),(V_VRFALDEP-V_VRIITCAPA),V_DTINIDEP,V_DTCAPA,V_NMTIPOOPERBEM,SYSDATE,
                  P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM,
                  '1',(V_QTMESFALT-1),(V_QTMESJADEP+1),'F');

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM,11,10)
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;

               SELECT COUNT(*)
                 INTO V_MES_JADEPRECIADO
                 FROM OPERACAOBEM
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERACAO = P_IDSIMULACAO
                  AND CDBEMATIVO      = V_CDBEMATIVO
                  AND IDIDENTOPERABEM = '02'
                  AND IDTIPOFECHAOPER = 'C';

               UPDATE BEMATIVO
                  SET QTMESJADEPBEMFI   = (QTMESJADEPBEMFI+1),
                      VRJADEPBEMFISC    = (VRJADEPBEMFISC + V_VRIITCAPA),
                      DTULTDEPBEMFIS    = V_DTCAPA,
                      QTMESFALTDBEMFIS  = (QTMESFALTDBEMFIS-1),
                      VRFALTDEPBEMFIS   = (V_VRFALDEP - V_VRIITCAPA),
                      VRULTDEPBEMFIS    = V_VRIITCAPA
                WHERE CDEMPRESA  = V_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;
            END IF;

            /* 04 - BAIXA_VENDA OU 05 - BAIXAS_DIVERSAS */
            IF (V_IDTIPOOPERBEM = '04' OR V_IDTIPOOPERBEM = '05') THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER,
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL,
                   CDCENTCUST,CDSETOR,CDBEMATIVCRIADO,
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC,
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM,
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM,
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM, 
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER) 
               VALUES 
                  (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'', 
                   P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL, 
                   V_CDCENTCUST,V_SETOR,'', 
                   V_CDGRUPOBEM,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPODEPREC, 
                   '','','','','',V_VRINIDEP, 
                   V_VRJADEP, V_VRFALDEP,V_DTINIDEP,NULL,V_NMTIPOOPERBEM,SYSDATE, 
                   P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM, 
                   '1',V_QTMESDEP,0,'F'); 

              UPDATE ITCAPAOPERABEM
                 SET NRSEQOPERABEM = SUBSTR(V_NRSEQOPERABEM,11,10)
               WHERE CDEMPRESA       = V_CDEMPRESA
                 AND IDSIMULOPERABEM = P_IDSIMULACAO
                 AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                 AND NRSEQITCAPAOPE  = V_NRSEQIT;

              UPDATE CAPAOPERABEM
                 SET IDSITCAPAOPER = '2'
               WHERE CDEMPRESA       = P_CDEMPRESA
                 AND IDSIMULOPERABEM = P_IDSIMULACAO
                 AND NRSEQCAPAOPEBEM = V_NRSEQCAPA;

              UPDATE BEMATIVO
                 SET QTATUABEMATIVO = (QTATUABEMATIVO - V_QTITCAPA)
               WHERE CDEMPRESA  = V_CDEMPRESA
                 AND CDBEMATIVO = V_CDBEMATIVO;
            END IF;

            /* 06 - REAVALIACAO */ 
            IF V_IDTIPOOPERBEM = '06' THEN
               INSERT INTO OPERACAOBEM
                  (CDEMPRESA,CDBEMATIVO,IDSIMULOPERACAO,NRSEQOPERABEM,DTOPERABEM,CDTIPOOPERBEM,CDMOTIVOOPER, 
                   CDOPERESPOPERA,QTOPEBEMNOVO,VROPERABEM,CDFILIAL, CDCENTCUST,CDSETOR,CDBEMATIVCRIADO, 
                   CDGRUPOBEM,QTMESDEPOPENOVO,VRTAXDEPOPENOVO,CDTIPODEPREC, 
                   CDCLIENTE,NRNOTAFIOPERA,CDSERIENFOPERA,CDFILIALNF,NRLANCTONF,VRINIDEPROPEBEM, 
                   VRJADEPROPEBEM,VRFALDEPROPEBEM,DTINIDEPROPEBEM,DTULTDEPROPEBEM,DSOBSOPERABEM,DTINCOPERABEM, 
                   CDOPEINCOPERABE,DTATUOPERABEM,CDOPEATUOPERABE,DTCANOPERABEM,CDOPECANOPERABE,IDIDENTOPERABEM, 
                   IDSITOPERABEM,QTMESFALDEPOPEB,QTMESJADEPOPEB,IDTIPOFECHAOPER) 
               VALUES 
                  (V_CDEMPRESA, V_CDBEMATIVO, P_IDSIMULACAO,SUBSTR(V_NRSEQOPERABEM,11,10),V_DTCAPA,V_CDTIPOOPERBEM,'', 
                   P_CDOPERADOR,V_QTITCAPA,V_VRIITCAPA,V_CDFILIAL, V_CDCENTCUST,V_SETOR,'', 
                   V_CDGRUPOBEM,V_QTMESDEPNOVO,V_VRTAXDEPNOVO,V_CDTIPODEPREC,
                   '','','','','',V_VRINIDEP,
                   V_VRJADEP, V_VRFALDEP,V_DTINIDEP,NULL,V_NMTIPOOPERBEM,SYSDATE, 
                   P_CDOPERADOR,SYSDATE,P_CDOPERADOR,NULL,NULL,V_IDTIPOOPERBEM, 
                   '1',V_QTMESDEP,0,'F'); 

               IF (V_QTMESDEPNOVO IS NULL) OR (V_QTMESDEPNOVO = 0) THEN
                  SELECT QTMESFALTADBEM
                    INTO V_QTMESDEPNOVO
                    FROM BEMATIVO
                   WHERE CDEMPRESA = P_CDEMPRESA
                     AND CDBEMATIVO = V_CDBEMATIVO;
               END IF;

               IF (V_VRFALTADEPNOVO IS NULL) OR (V_VRFALTADEPNOVO = 0) THEN
                  SELECT VRFALTADEPBEM
                    INTO V_VRFALTADEPNOVO
                    FROM BEMATIVO
                   WHERE CDEMPRESA = P_CDEMPRESA
                     AND CDBEMATIVO = V_CDBEMATIVO;
               END IF;

               UPDATE ITCAPAOPERABEM
                  SET NRSEQOPERABEM   = SUBSTR(V_NRSEQOPERABEM,11,10)
                WHERE CDEMPRESA       = V_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA
                  AND NRSEQITCAPAOPE  = V_NRSEQIT;

               UPDATE CAPAOPERABEM
                  SET IDSITCAPAOPER = '2'
                WHERE CDEMPRESA       = P_CDEMPRESA
                  AND IDSIMULOPERABEM = P_IDSIMULACAO
                  AND NRSEQCAPAOPEBEM = V_NRSEQCAPA;

               UPDATE BEMATIVO
                  SET QTMESFALTDBEMFIS = V_QTMESDEPNOVO,
                      VRFALTDEPBEMFIS  = V_VRFALTADEPNOVO
                WHERE CDEMPRESA  = V_CDEMPRESA
                  AND CDBEMATIVO = V_CDBEMATIVO;
            END IF;
         END LOOP;

         IF P_IDOPERACAO = 'F' THEN
            UPDATE FECHAMENTOBEM
               SET IDSITFECHABEM   = '2',
                   DTPROFECHABEM   = SYSDATE,
                   CDOPPROFECHABEM = P_CDOPERADOR
             WHERE CDEMPRESA       = P_CDEMPRESA
               AND IDSIMULFECHABEM = P_IDSIMULACAO
               AND NRSEQFECHABEM   = P_NRSEQFECHABEM;

            UPDATE CAPAOPERABEM
               SET IDSITCAPAOPER = '2'
             WHERE CDEMPRESA       = P_CDEMPRESA
               AND IDSIMULOPERABEM = P_IDSIMULACAO
               AND NRSEQFECHABEM   = P_NRSEQFECHABEM;
         END IF;
      END IF;
   END IF;
END;

/