create or replace PROCEDURE FCT_PREENCHE_DADOS_NOTAFISC
  (P_NRORG IN NUMBER,
   P_CDFILIAL IN VARCHAR2,
   P_NRLANCTONF IN VARCHAR2,
   P_NRFATURACONT IN NUMBER,
   P_CDOPERINCLUSAO IN VARCHAR2)
AS
  /*PARAMETROS*/
V_NRDADOSNF         NUMBER;      /* Sequencial da tabela FCT_DADOSNF (Novo código) */
V_NRFATURACONT      NUMBER;      /* Vencimento */
V_NRSEQCONTRATO     NUMBER;      /* Contrato */
V_NRGRUPOFATURA     NUMBER;      /* Grupo de Faturamento */
V_NRPARCNEGOCIO     NUMBER;      /* Parceiro de Negócio do Vencimento */
V_NRESTRUTURAM      NUMBER;      /* Local de Atendimento */
V_LOCALATENDIMENTO  NUMBER;      /* Parceiro de Negócio do Local de Atendimento */
V_NRENDERECOPARC    NUMBER;      /* Endereço para NF */
V_CDTIPOENDERECO    VARCHAR2(30);/* Tipo de Endereço para NF */
V_CDPAIS            VARCHAR2(4); /* País para NF */
V_SGESTADO          VARCHAR2(2); /* Estado para NF */
V_CDMUNICIPIO       VARCHAR2(5); /* Municipio para NF */
V_CDBAIRRO          VARCHAR2(10);/* Bairro para NF */
V_CDLOGRADOURO      VARCHAR2(4); /* Logradouro para NF */
V_NMBAIRROENDERECO  VARCHAR2(100);  /* Nome do Bairro para NF */
V_DSCOMPLEENDERECO  VARCHAR2(100);  /* Complemento do Endereço para NF */
V_NRCEPENDERECO     VARCHAR2(15);/* CEP do Endereço para NF */
V_DSENDERECO        VARCHAR2(250);  /* Descrição do Endereço para NF */
V_NRIMOVELENDERECO  VARCHAR2(10);/* Nr. Imóvel do endereço para NF */
V_DSREFERENCIANOTA  VARCHAR2(2000); /* Referencia para NF */
V_CDCLIENTE         VARCHAR2(21);/* Cliente do Parceiro do Vencimento */
V_VALIDAENDLOCAL    NUMBER;      /* Variável para Validar o Endereço */
V_DTINICOMPET       VARCHAR2(30);/* Data Inicial de Competência do Vencimento */
V_DTFINCOMPET       VARCHAR2(30);/* Data Final de Competência do Vencimento */
V_DESCRICAOMED      VARCHAR2(4000); /* Descrição da Medição */
V_CDTIPOOPERFATURA  FCT_FATURACONT.CDTIPOOPERFATURA%TYPE;
V_CDSERIENF         FCT_FATURACONT.CDSERIENF%TYPE;
V_CDEMPRESA         FCT_FATURACONT.CDEMPRESA%TYPE;
V_CDINSCESTA        FCT_FATURACONT.CDINSCESTA%TYPE;
V_CDINSCMUNI        FCT_FATURACONT.CDINSCMUNI%TYPE;
V_IDNATUOPEREMPR    EMPRESA.IDNATUOPEREMPR%TYPE;
BEGIN
/* 1 - RECEBE OS DADOS DE VENCIMENTO */
     BEGIN
       SELECT NRFATURACONT, NRSEQCONTRATO, NRGRUPOFATURA, NRPARCFATURA, TO_CHAR(DTINICOMPET,'DD/MM/YYYY'), TO_CHAR(DTFINCOMPET, 'DD/MM/YYYY'),
              CDTIPOOPERFATURA, CDSERIENF, CDEMPRESA, CDINSCESTA, CDINSCMUNI
         INTO V_NRFATURACONT, V_NRSEQCONTRATO, V_NRGRUPOFATURA, V_NRPARCNEGOCIO, V_DTINICOMPET, V_DTFINCOMPET,
              V_CDTIPOOPERFATURA, V_CDSERIENF, V_CDEMPRESA, V_CDINSCESTA, V_CDINSCMUNI
         FROM FCT_FATURACONT
        WHERE (NRORG = P_NRORG)
          AND (NRFATURACONT = P_NRFATURACONT);
    EXCEPTION
        WHEN NO_DATA_FOUND THEN BEGIN
          V_NRFATURACONT := NULL;
          V_NRSEQCONTRATO := NULL;
          V_NRGRUPOFATURA := NULL;
          V_NRPARCNEGOCIO := NULL;
          V_DTINICOMPET := NULL;
          V_DTFINCOMPET := NULL;
       END;
    END;
/* -- Rateio serÿ¡ realizado posteriormente --
   -- 2 - RECEBE O LOCAL DE ATENDIMENTO
   IF V_NRGRUPOFATURA IS NOT NULL THEN
      BEGIN
         SELECT NRESTRUTURAM
           INTO V_NRESTRUTURAM
           FROM FCT_GRUPOFATURA
          WHERE NRGRUPOFATURA = V_NRGRUPOFATURA
            AND NRORG = P_NRORG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NRESTRUTURAM := NULL;
      END;
   END IF;
   -- 3 - VALIDA O LOCAL DE ATENDIMENTO
   IF V_NRESTRUTURAM IS NULL THEN
      BEGIN
         SELECT MAX(NRESTRUTURAM)
           INTO V_NRESTRUTURAM
           FROM FCT_RATEIOITVENCIMENTO
          WHERE NRFATURACONT = P_NRFATURACONT
            AND NRORG = P_NRORG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NRESTRUTURAM := NULL;
      END;
   END IF;
    -- 4 - RECEBE O ENDEREÿ¿O
   IF V_NRESTRUTURAM IS NOT NULL THEN
      BEGIN
         SELECT NRPARCNEGOCIO
           INTO V_LOCALATENDIMENTO
           FROM ESTRUTURAM
          WHERE NRESTRUTURAM = V_NRESTRUTURAM
            AND NRORG = P_NRORG;
      END;
   ELSE
      V_LOCALATENDIMENTO := NULL;
   END IF;
   -- VALIDA SE EXISTE ENDEREÿ¿O NO LOCAL DE ATENDIMENTO
   SELECT COUNT(*)
     INTO V_VALIDAENDLOCAL
     FROM ENDERECOPARC
    WHERE NRPARCNEGOCIO = V_LOCALATENDIMENTO
      AND CDTIPOENDERECO = 'PRINCIPAL'
      AND NRORG = P_NRORG;
   IF V_VALIDAENDLOCAL > 0 THEN
      -- 4.1 - TENTA RECEBER O ENDEREÿ¿O DO LOCAL DE ATENDIMENTO
      BEGIN
         SELECT NRENDERECOPARC, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, CDLOGRADOURO,
                NMBAIRROENDERECO, DSCOMPLEENDERECO, NRCEPENDERECO, DSENDERECO, NRIMOVELENDERECO, DSREFERENCIAENDE
           INTO V_NRENDERECOPARC, V_CDTIPOENDERECO, V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO, V_CDBAIRRO, V_CDLOGRADOURO,
                V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO, V_NRCEPENDERECO, V_DSENDERECO, V_NRIMOVELENDERECO, V_DSREFERENCIANOTA
           FROM ENDERECOPARC
          WHERE NRPARCNEGOCIO = V_LOCALATENDIMENTO
            AND CDTIPOENDERECO = 'PRINCIPAL'
            AND NRORG = P_NRORG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN BEGIN
            V_NRENDERECOPARC := NULL;
            V_CDTIPOENDERECO := NULL;
            V_CDPAIS := NULL;
            V_SGESTADO := NULL;
            V_CDMUNICIPIO := NULL;
            V_CDBAIRRO := NULL;
            V_CDLOGRADOURO := NULL;
            V_NMBAIRROENDERECO := NULL;
            V_DSCOMPLEENDERECO := NULL;
            V_NRCEPENDERECO := NULL;
            V_DSENDERECO := NULL;
            V_NRIMOVELENDERECO := NULL;
            V_DSREFERENCIANOTA := NULL;
         END;
      END;
   ELSE
      -- 4.2 - CASO Nÿ¿O CONSEIGA REBECER O ENDEREÿ¿ÿ¿ÿ¢â¿¬ÿ¡O DO LOCAL DE ATENDIMENTO, PEGA O ENDEREÿ¿O DO REGISTRO DE
                CLIENTE DO PARCEIRO DO VENCIMENTO (ENDEFILI)
      BEGIN
         SELECT CDCLIENTE
           INTO V_CDCLIENTE
           FROM CLIENTE
          WHERE NRPARCNEGOCIO = V_NRPARCNEGOCIO
            AND NRORG = P_NRORG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDCLIENTE := NULL;
      END;
      IF V_CDCLIENTE IS NOT NULL THEN
          BEGIN
             SELECT NRENDERECOPARC, 'PRINCIPAL', CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, NULL,
                    NMBAIRCLIE, DSCOMPENDCLI, NRCEPCLIE, DSENDECLIE, NULL, NULL
               INTO V_NRENDERECOPARC, V_CDTIPOENDERECO, V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO, V_CDBAIRRO, V_CDLOGRADOURO,
                    V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO, V_NRCEPENDERECO, V_DSENDERECO, V_NRIMOVELENDERECO, V_DSREFERENCIANOTA
               FROM ENDECLIE
              WHERE CDCLIENTE = V_CDCLIENTE
                AND IDTPENDECLIE = 'P'
                AND NRORG = P_NRORG;
          EXCEPTION
             WHEN NO_DATA_FOUND THEN BEGIN
                V_NRENDERECOPARC := NULL;
                V_CDTIPOENDERECO := NULL;
                V_CDPAIS := NULL;
                V_SGESTADO := NULL;
                V_CDMUNICIPIO := NULL;
                V_CDBAIRRO := NULL;
                V_CDLOGRADOURO := NULL;
                V_NMBAIRROENDERECO := NULL;
                V_DSCOMPLEENDERECO := NULL;
                V_NRCEPENDERECO := NULL;
                V_DSENDERECO := NULL;
                V_NRIMOVELENDERECO := NULL;
                V_DSREFERENCIANOTA := NULL;
             END;
          END;
      ELSE
         --  4.3 - CASO Nÿ¿O CONSIGA REBECER O ENDEREÿ¿O DO LOCAL DE ATENDIMENTO, PEGA O ENDEREÿ¿O DO PARCEIRO DO VENCIMENTO (ENDERECOPARC)
          BEGIN
             SELECT NRENDERECOPARC, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, CDLOGRADOURO,
                    NMBAIRROENDERECO, DSCOMPLEENDERECO, NRCEPENDERECO, DSENDERECO, NRIMOVELENDERECO, DSREFERENCIAENDE
               INTO V_NRENDERECOPARC, V_CDTIPOENDERECO, V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO, V_CDBAIRRO, V_CDLOGRADOURO,
                    V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO, V_NRCEPENDERECO, V_DSENDERECO, V_NRIMOVELENDERECO, V_DSREFERENCIANOTA
               FROM ENDERECOPARC
              WHERE NRPARCNEGOCIO = V_NRPARCNEGOCIO
                AND CDTIPOENDERECO = 'PRINCIPAL'
                AND NRORG = P_NRORG;
          EXCEPTION
             WHEN NO_DATA_FOUND THEN BEGIN
                V_NRENDERECOPARC := NULL;
                V_CDTIPOENDERECO := NULL;
                V_CDPAIS := NULL;
                V_SGESTADO := NULL;
                V_CDMUNICIPIO := NULL;
                V_CDBAIRRO := NULL;
                V_CDLOGRADOURO := NULL;
                V_NMBAIRROENDERECO := NULL;
                V_DSCOMPLEENDERECO := NULL;
                V_NRCEPENDERECO := NULL;
                V_DSENDERECO := NULL;
                V_NRIMOVELENDERECO := NULL;
                V_DSREFERENCIANOTA := NULL;
             END;
          END;
      END IF;
   END IF;
   -- Rateio serÿ¡ realizado posteriormente --  */
/* Apagar o cÿ³digo abaixo (atÿ© o local indicado Apagar atÿ© aqui) quando for realizada a implementaÿ§ÿ£o do Rateio */
   V_NRESTRUTURAM := NULL;
   BEGIN
      SELECT CDCLIENTE
        INTO V_CDCLIENTE
        FROM CLIENTE
       WHERE NRPARCNEGOCIO = V_NRPARCNEGOCIO
         AND NRORG = P_NRORG;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDCLIENTE := NULL;
   END;
   IF V_CDCLIENTE IS NOT NULL THEN
       BEGIN
          SELECT NRENDERECOPARC, 'PRINCIPAL', CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, NULL,
                 NMBAIRCLIE, DSCOMPENDCLI, NRCEPCLIE, DSENDECLIE, NULL, NULL
            INTO V_NRENDERECOPARC, V_CDTIPOENDERECO, V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO, V_CDBAIRRO, V_CDLOGRADOURO,
                 V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO, V_NRCEPENDERECO, V_DSENDERECO, V_NRIMOVELENDERECO, V_DSREFERENCIANOTA
            FROM ENDECLIE
           WHERE CDCLIENTE = V_CDCLIENTE
             AND IDTPENDECLIE = 'P'
             AND NRORG = P_NRORG;
       EXCEPTION
          WHEN NO_DATA_FOUND THEN BEGIN
             V_NRENDERECOPARC := NULL;
             V_CDTIPOENDERECO := NULL;
             V_CDPAIS := NULL;
             V_SGESTADO := NULL;
             V_CDMUNICIPIO := NULL;
             V_CDBAIRRO := NULL;
             V_CDLOGRADOURO := NULL;
             V_NMBAIRROENDERECO := NULL;
             V_DSCOMPLEENDERECO := NULL;
             V_NRCEPENDERECO := NULL;
             V_DSENDERECO := NULL;
             V_NRIMOVELENDERECO := NULL;
             V_DSREFERENCIANOTA := NULL;
          END;
       END;
   ELSE
    /* 4.3 - CASO Nÿ¿O CONSIGA REBECER O ENDEREÿ¿O DO LOCAL DE ATENDIMENTO, PEGA O ENDEREÿ¿O DO PARCEIRO DO VENCIMENTO (ENDERECOPARC) */
       BEGIN
          SELECT NRENDERECOPARC, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, CDLOGRADOURO,
                 NMBAIRROENDERECO, DSCOMPLEENDERECO, NRCEPENDERECO, DSENDERECO, NRIMOVELENDERECO, DSREFERENCIAENDE
            INTO V_NRENDERECOPARC, V_CDTIPOENDERECO, V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO, V_CDBAIRRO, V_CDLOGRADOURO,
                 V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO, V_NRCEPENDERECO, V_DSENDERECO, V_NRIMOVELENDERECO, V_DSREFERENCIANOTA
            FROM ENDERECOPARC
           WHERE NRPARCNEGOCIO = V_NRPARCNEGOCIO
             AND CDTIPOENDERECO = 'PRINCIPAL'
             AND NRORG = P_NRORG;
       EXCEPTION
          WHEN NO_DATA_FOUND THEN BEGIN
             V_NRENDERECOPARC := NULL;
             V_CDTIPOENDERECO := NULL;
             V_CDPAIS := NULL;
             V_SGESTADO := NULL;
             V_CDMUNICIPIO := NULL;
             V_CDBAIRRO := NULL;
             V_CDLOGRADOURO := NULL;
             V_NMBAIRROENDERECO := NULL;
             V_DSCOMPLEENDERECO := NULL;
             V_NRCEPENDERECO := NULL;
             V_DSENDERECO := NULL;
             V_NRIMOVELENDERECO := NULL;
             V_DSREFERENCIANOTA := NULL;
          END;
       END;
   END IF;
/* Apagar atÿ© aqui */
/* 5 - INSERE OS DADOS NA FCT_DADOSNF */
   IF V_DSREFERENCIANOTA IS NOT NULL THEN
      V_DSREFERENCIANOTA:= V_DSREFERENCIANOTA||CHR(13)||' PERIODO: '||V_DTINICOMPET||' A '||V_DTFINCOMPET;
   END IF;
   IF V_NRFATURACONT IS NOT NULL THEN
      SELECT IDNATUOPEREMPR
        INTO V_IDNATUOPEREMPR
        FROM EMPRESA
       WHERE CDEMPRESA = V_CDEMPRESA
        AND NRORG     = P_NRORG;

      IF (V_IDNATUOPEREMPR = '01') THEN
          SELECT CDPAIS, SGESTADO, CDMUNICIPIO
            INTO V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO
            FROM EMPRESA
           WHERE CDEMPRESA = V_CDEMPRESA
             AND NRORG     = P_NRORG;
      END IF;
      NOVO_CODIGO_NT('NRDADOSNF', V_NRDADOSNF, 1, P_NRORG);
      IF V_NRDADOSNF IS NOT NULL THEN
         INSERT INTO FCT_DADOSNF (NRDADOSNF, CDFILIAL, NRLANCTONF, NRSEQCONTRATO, NRPARCNEGOCIO, NRFATURACONT, NRGRUPOFATURA,
                                  NRESTRUTURAM, NRAPURACAO, NRENDERECOPARC, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO,
                                  CDLOGRADOURO, DSENDERECO, NRIMOVELENDERECO, NMBAIRROENDERECO, DSCOMPLEENDERECO, NRCEPENDERECO,
                                  DSREFERENCIANOTA, NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO,
                                  CDTIPOOPERFATURA, CDSERIENF, CDEMPRESA, CDINSCESTA, CDINSCMUNI)
                          VALUES (V_NRDADOSNF, P_CDFILIAL, P_NRLANCTONF, V_NRSEQCONTRATO, V_NRPARCNEGOCIO, V_NRFATURACONT, V_NRGRUPOFATURA,
                                  V_NRESTRUTURAM, NULL, V_NRENDERECOPARC, V_CDTIPOENDERECO, V_CDPAIS, V_SGESTADO, V_CDMUNICIPIO, V_CDBAIRRO,
                                  V_CDLOGRADOURO, V_DSENDERECO, V_NRIMOVELENDERECO, V_NMBAIRROENDERECO, V_DSCOMPLEENDERECO, V_NRCEPENDERECO,
                                  V_DSREFERENCIANOTA, P_NRORG, 'S', SYSDATE, P_NRORG, P_CDOPERINCLUSAO,
                                  V_CDTIPOOPERFATURA, V_CDSERIENF, V_CDEMPRESA, V_CDINSCESTA, V_CDINSCMUNI);
      END IF;
   END IF;
END;