CREATE PROCEDURE USR_FCT_ATUALIZA_CNPJ_CONT (
    P_CDCLIANTE IN CLIENTE.CDCLIENTE%TYPE,
    P_CDCLINOVO IN CLIENTE.CDCLIENTE%TYPE
)
AS
BEGIN
    /*Procedure criada para conter comandos especificos da estrutura do cliente*/
    IF (P_CDCLIANTE IS NULL) THEN
        RAISE_APPLICATION_ERROR(-20000, 'P_CDCLIANTE IS NULL');
    END IF;
END;
/

CREATE OR REPLACE PROCEDURE FCT_ATUALIZA_CNPJ_CONT (
    P_CNPJANTE VARCHAR2,
    P_CNPJNOVO VARCHAR2,
    P_RAZSCNOVO VARCHAR2,
    P_NMFANTNOVO VARCHAR2,
    P_IDINATIVAPARC CHAR,
    P_JUSTIFICATIVA FCT_CONTRATO.DSJUSTIFCANCRENEG%TYPE,
    P_OPERADOR VARCHAR2,
    P_NRORG NUMBER
)
AS
    /* NOVOCODIGO */
    V_PARCNEGOCIO PARCNEGOCIO.NRPARCNEGOCIO%TYPE;
    V_PARCERIA PARCERIA.NRPARCERIA%TYPE;
    V_ENDERECOPARC ENDERECOPARC.NRENDERECOPARC%TYPE;
    V_COMUNICAPARC COMUNICAPARC.NRCOMUNICAPARC%TYPE;
    V_CDINTECLIE VARCHAR2(20);

    /*VARIAVEIS*/
    V_PARCANTE PARCNEGOCIO.NRPARCNEGOCIO%TYPE;
    V_PARCNOVO PARCNEGOCIO.NRPARCNEGOCIO%TYPE;
    V_CDCLIANTE CLIENTE.CDCLIENTE%TYPE;
    V_CDCLINOVO CLIENTE.CDCLIENTE%TYPE;
    V_ORGANIZACAO ORGANIZACAO.NRORG%TYPE;
    V_INSCRICAO VARCHAR2(5);
    V_NMRAZSOCCLIE VARCHAR2(50);
    V_NMFANTCLIE VARCHAR2(50);
    V_VALOPERADOR NUMBER;
    V_VALOPCLIE NUMBER;
    V_VALPARCLIEF NUMBER;
    V_TPENDERECO VARCHAR2(10);
    V_TELEFONE VARCHAR2(30);
    V_EMAIL VARCHAR2(100);
    V_RELACIONAPARC RELACIONAPARC.NRRELACIONAPARC%TYPE;
    V_VALAGRUP NUMBER;
    V_AGRUP CHAR;
    V_CONTRATO FCT_CONTRATO.NRSEQCONTRATO%TYPE;
    V_SEQCONTRATO FCT_CONTRATO.NRSEQCONTRATO%TYPE;
    V_VALIDALIC NUMBER;
    V_VALCONTRLNP NUMBER;
    V_VALCARENLNP NUMBER;
    V_VALVENCLUSOC NUMBER;
    V_VALVALORLNP NUMBER;
    V_VALSISCONLNP NUMBER;
    V_COMPRATKN NUMBER;
    V_BOLETOTKN NUMBER;
    V_VALLINPLUSO NUMBER;
    V_VALIDACXLUSO NUMBER;
    V_VALIDAPARCERIA NUMBER;

BEGIN

    /* 1 - Criar um novo parceiro o CNPJ e inativar o parceiro antigo*/

    BEGIN
        SELECT NRPARCNEGOCIO
          INTO V_PARCNOVO
          FROM PARCNEGOCIO
         WHERE NRINSCRICAOPARC = P_CNPJNOVO
           AND IDATIVO = 'S'
           AND NRORG = P_NRORG;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_PARCNOVO := NULL;
    END;

    BEGIN
        SELECT NRPARCNEGOCIO
          INTO V_PARCANTE
          FROM PARCNEGOCIO
         WHERE NRINSCRICAOPARC = P_CNPJANTE
           AND CDTIPOPARCPRINCIPAL = 'CLIENTE'
           AND IDATIVO = 'S'
           AND NRORG = P_NRORG;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_PARCANTE := NULL;
    END;

    BEGIN
        SELECT CDCLIENTE
          INTO V_CDCLINOVO
          FROM CLIENTE
         WHERE NRINSJURCLIE = P_CNPJNOVO
           AND IDATIVO = 'S'
           AND IDCLIEATIV = 'S'
           AND NRORG = P_NRORG;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_CDCLINOVO := NULL;
    END;

    BEGIN
        SELECT CDCLIENTE
          INTO V_CDCLIANTE
          FROM CLIENTE
         WHERE NRINSJURCLIE = P_CNPJANTE
           AND IDATIVO = 'S'
           AND IDCLIEATIV = 'S'
           AND NRORG = P_NRORG;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_CDCLIANTE := NULL;
    END;

    BEGIN
        SELECT NRORG
          INTO V_ORGANIZACAO
          FROM ORGANIZACAO
         WHERE NRPARCNEGOCIO = V_PARCANTE
           AND IDATIVO = 'S';
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_ORGANIZACAO := NULL;
    END;


    /*Gera Novo Parceiro e seus filhos (Parceria, Cliente, EndereAo, Interlocutor)*/

    FOR C_PARC IN (SELECT NRPARCNEGOCIO, CDSEGMER, NMPRINCIPALPARC, NMSECUNDARIPARC, DTNASCIFUNDPARC, NRINSCRICAOPARC,
                          CDTIPOPARCPRINCIPAL, CDTIPOINSCRICAO, IDPESSOAFISICA, IDINSTITUICAO, DSDEPARTAMENTO, IDIDIOMA,
                          CDATIVCLI, NRSEQTPATIVCLI, IDPARCFUNDIDO, CDOPERRESPONSAVEL, IDATIVO, NRORG, CDOPERINCLUSAO
                          FROM PARCNEGOCIO
                         WHERE NRPARCNEGOCIO = V_PARCANTE
                           AND NRORG = P_NRORG) LOOP

        IF (V_PARCNOVO IS NULL) THEN

            NOVO_CODIGO_NT('PARCNEGOCIO', V_PARCNEGOCIO, 1, P_NRORG);

            INSERT INTO PARCNEGOCIO (NRPARCNEGOCIO, CDSEGMER, NMPRINCIPALPARC, NMSECUNDARIPARC, DTNASCIFUNDPARC, NRINSCRICAOPARC,
                                     CDTIPOPARCPRINCIPAL, CDTIPOINSCRICAO, IDPESSOAFISICA, IDINSTITUICAO, DSDEPARTAMENTO, IDIDIOMA,
                                     CDATIVCLI, NRSEQTPATIVCLI, IDPARCFUNDIDO, CDOPERRESPONSAVEL, IDATIVO, NRORG, DTINCLUSAO,
                                     NRORGINCLUSAO, CDOPERINCLUSAO)
                             VALUES (V_PARCNEGOCIO, C_PARC.CDSEGMER, NVL(P_RAZSCNOVO, C_PARC.NMPRINCIPALPARC), NVL(P_NMFANTNOVO, C_PARC.NMSECUNDARIPARC), C_PARC.DTNASCIFUNDPARC, P_CNPJNOVO,
                                     C_PARC.CDTIPOPARCPRINCIPAL, C_PARC.CDTIPOINSCRICAO, C_PARC.IDPESSOAFISICA, C_PARC.IDINSTITUICAO, C_PARC.DSDEPARTAMENTO, C_PARC.IDIDIOMA,
                                     C_PARC.CDATIVCLI, C_PARC.NRSEQTPATIVCLI, 'N', C_PARC.CDOPERRESPONSAVEL, 'S', P_NRORG, SYSDATE,
                                     P_NRORG, P_OPERADOR);

            V_PARCNOVO := V_PARCNEGOCIO;

        ELSE

            V_PARCNEGOCIO := V_PARCNOVO;

            UPDATE PARCNEGOCIO
               SET CDTIPOPARCPRINCIPAL = 'CLIENTE',
                   NMPRINCIPALPARC = NVL(P_RAZSCNOVO, NMPRINCIPALPARC),
                   NMSECUNDARIPARC = NVL(P_NMFANTNOVO, NMSECUNDARIPARC)
             WHERE NRPARCNEGOCIO = V_PARCNEGOCIO;

        END IF; --V_PARCNOVO IS NULL

        /* Parceria */


        SELECT COUNT(*)
          INTO V_VALIDAPARCERIA
          FROM PARCERIA
         WHERE NRPARCNEGOCIO = V_PARCNEGOCIO
           AND CDTIPOPARCEIRO = 'CLIENTE';

        IF (V_VALIDAPARCERIA = 0) THEN

            NOVO_CODIGO_NT('PARCERIA', V_PARCERIA, 1, P_NRORG);

            INSERT INTO PARCERIA (NRPARCERIA, NRPARCNEGOCIO, CDTIPOPARCEIRO, NRORG, IDATIVO, DTINCLUSAO,
                              CDOPERINCLUSAO, NRPARCORIGEM)
                      VALUES (V_PARCERIA, V_PARCNEGOCIO, 'CLIENTE', P_NRORG, 'S', SYSDATE,
                              P_OPERADOR, V_PARCNEGOCIO);
        ELSE

            UPDATE PARCERIA
               SET IDATIVO = 'S'
             WHERE NRPARCNEGOCIO = V_PARCNEGOCIO
               AND CDTIPOPARCEIRO = 'CLIENTE';

        END IF;

        /* Cliente */

        SELECT CASE C_PARC.CDTIPOINSCRICAO
                   WHEN 'CNPJ' THEN 'J'
                   WHEN 'CPF' THEN 'F'
                   WHEN 'LIVRE' THEN 'I'
                   WHEN 'CODIGO' THEN 'O'
                   END AS INSCRICAO
         INTO V_INSCRICAO
         FROM DUAL;

        IF (V_CDCLINOVO IS NULL) THEN

            V_CDCLINOVO := V_INSCRICAO||P_CNPJNOVO;
            V_NMRAZSOCCLIE := SUBSTR(NVL(P_RAZSCNOVO, C_PARC.NMPRINCIPALPARC), 1, 100);
            V_NMFANTCLIE := SUBSTR(NVL(P_NMFANTNOVO, C_PARC.NMSECUNDARIPARC), 1, 50);

            INSERT INTO CLIENTE (CDCLIENTE, IDTPIJURCLIE, NRINSJURCLIE, NMRAZSOCCLIE, NMFANTCLIE, CDSEGMER, CDATIVCLI, NRPARCNEGOCIO,
                                 IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                         VALUES (V_CDCLINOVO, V_INSCRICAO, P_CNPJNOVO, V_NMRAZSOCCLIE,
                                 V_NMFANTCLIE, C_PARC.CDSEGMER, C_PARC.CDATIVCLI, V_PARCNEGOCIO,
                                 'S', P_NRORG, SYSDATE, P_NRORG, P_OPERADOR);

        ELSE

            UPDATE CLIENTE
               SET NMRAZSOCCLIE = SUBSTR(NVL(P_RAZSCNOVO, NMRAZSOCCLIE), 1, 100),
                   NMFANTCLIE = SUBSTR(NVL(P_NMFANTNOVO, NMFANTCLIE), 1, 50)
             WHERE CDCLIENTE = V_CDCLINOVO;

        END IF;

        /* Alterar CDCLIENTE dos operadores do cliente antigos */

        FOR C_OPERADOR IN (
          SELECT CDOPERADOR, NMOPERADOR
            FROM OPERADOR
           WHERE CDCLIENTE = V_CDCLIANTE
             AND NRORG = P_NRORG
        ) LOOP

          SELECT COUNT(*) AS VALIDA
            INTO V_VALOPERADOR
            FROM OPERADOR
           WHERE CDCLIENTE = V_CDCLINOVO
             AND CDOPERADOR  = C_OPERADOR.CDOPERADOR
             AND NRORG = P_NRORG;

          IF (V_VALOPERADOR = 0) THEN

            UPDATE OPERADOR
               SET CDCLIENTE = V_CDCLINOVO
             WHERE CDCLIENTE = V_CDCLIANTE
               AND NRORG = P_NRORG;

          END IF;

        END LOOP; --C_OPERADOR

        FOR C_OPERCLI IN (SELECT CDCLIENTE, CDOPERADOR, IDTPOPERCLIE, NRPRIOPERCLI, IDPARTACORER, IDEMAILENCSO, NRORG
                            FROM OPERCLIE
                           WHERE CDCLIENTE = V_CDCLIANTE
                             AND NRORG = P_NRORG) LOOP

          SELECT COUNT (*) AS VALIDA
            INTO V_VALOPCLIE
            FROM OPERCLIE
           WHERE CDCLIENTE = V_CDCLINOVO
             AND CDOPERADOR = C_OPERCLI.CDOPERADOR
             AND NRORG = P_NRORG;

           IF (V_VALOPCLIE = 0) THEN

              INSERT INTO OPERCLIE (CDCLIENTE, CDOPERADOR, IDTPOPERCLIE, NRPRIOPERCLI, IDPARTACORER, IDEMAILENCSO,
                                    NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, IDATIVO)
                            VALUES (V_CDCLINOVO, C_OPERCLI.CDOPERADOR, C_OPERCLI.IDTPOPERCLIE, C_OPERCLI.NRPRIOPERCLI, C_OPERCLI.IDPARTACORER, C_OPERCLI.IDEMAILENCSO,
                                    P_NRORG, SYSDATE, P_NRORG, P_OPERADOR, 'S');

           END IF;

        END LOOP;


        SELECT COUNT(*)
          INTO V_VALPARCLIEF
          FROM PARCLIEFAS
         WHERE CDCLIENTE = V_CDCLINOVO;

        IF (V_VALPARCLIEF > 0 ) THEN

          DELETE FROM PARCLIEFAS
           WHERE CDCLIENTE = V_CDCLINOVO;

        END IF;

        FOR C_PARCLIEF IN (SELECT CDCLIENTE, IDTPFATUCLIE, DSFATURCLIE, DSBOLETCLIE, CDTIPOSERV, CDEMPRESA,
                                  IDFATURAPFILI, IDFATMESATUCLIE, CDGERENTEIMPCLI, IDGERANFUNIFICA, VRPERCAJUSTEINV,
                                  NRORG
                             FROM PARCLIEFAS
                            WHERE CDCLIENTE = V_CDCLIANTE) LOOP

          INSERT INTO PARCLIEFAS (CDCLIENTE, IDTPFATUCLIE, DSFATURCLIE, DSBOLETCLIE, CDTIPOSERV, CDEMPRESA,
                                  IDFATURAPFILI, IDFATMESATUCLIE, CDGERENTEIMPCLI, IDGERANFUNIFICA, VRPERCAJUSTEINV, NRORG,
                                  DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, IDATIVO)
                          VALUES (V_CDCLINOVO, C_PARCLIEF.IDTPFATUCLIE, C_PARCLIEF.DSFATURCLIE, C_PARCLIEF.DSBOLETCLIE, C_PARCLIEF.CDTIPOSERV, C_PARCLIEF.CDEMPRESA,
                                  C_PARCLIEF.IDFATURAPFILI, C_PARCLIEF.IDFATMESATUCLIE, C_PARCLIEF.CDGERENTEIMPCLI, C_PARCLIEF.IDGERANFUNIFICA, C_PARCLIEF.VRPERCAJUSTEINV, P_NRORG,
                                  SYSDATE, P_NRORG, P_OPERADOR, 'S');

        END LOOP;

        /* EndereAo (Parceiro e Cliente) */

        FOR C_ENDERECO IN (SELECT NRENDERECOPARC, NRPARCNEGOCIO, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, NMBAIRROENDERECO,
                                  DSCOMPLEENDERECO, NRCEPENDERECO, DSENDERECO, NRORG, IDATIVO
                             FROM ENDERECOPARC
                            WHERE NRPARCNEGOCIO = V_PARCANTE
                              AND NRORG = P_NRORG
                              AND CDPAIS IS NOT NULL
                              AND IDATIVO = 'S') LOOP

            /* Parceiro */

            SELECT COUNT (*) VALIDA
              INTO V_ENDERECOPARC
              FROM ENDERECOPARC
             WHERE NRPARCNEGOCIO = V_PARCNEGOCIO
               AND CDTIPOENDERECO = C_ENDERECO.CDTIPOENDERECO
               AND NRORG = P_NRORG;

            IF V_ENDERECOPARC = 0 THEN
                NOVO_CODIGO_NT('ENDERECOPARC', V_ENDERECOPARC, 1, P_NRORG);

                INSERT INTO ENDERECOPARC (NRENDERECOPARC, NRPARCNEGOCIO, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO,
                                          CDBAIRRO, NMBAIRROENDERECO, DSCOMPLEENDERECO, NRCEPENDERECO, DSENDERECO, NRORG,
                                          IDATIVO,  NRORGINCLUSAO, CDOPERINCLUSAO)
                                   VALUES(V_ENDERECOPARC, V_PARCNEGOCIO, C_ENDERECO.CDTIPOENDERECO, C_ENDERECO.CDPAIS, C_ENDERECO.SGESTADO, C_ENDERECO.CDMUNICIPIO,
                                          C_ENDERECO.CDBAIRRO, C_ENDERECO.NMBAIRROENDERECO, C_ENDERECO.DSCOMPLEENDERECO, C_ENDERECO.NRCEPENDERECO, C_ENDERECO.DSENDERECO, P_NRORG,
                                          'S', P_NRORG, P_OPERADOR);
            ELSE
               V_ENDERECOPARC := C_ENDERECO.NRENDERECOPARC;
            END IF;

            FOR C_COMUNICA IN (SELECT NRCOMUNICAPARC, NRPARCNEGOCIO, CDFORMACOMU, NRENDERECOPARC, CDPREFIXCOMUPARC,
                                      CDCOMUNICAPARC, NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO,
                                      CDCOMPLECOMUPARC, DSCONTATO
                                 FROM COMUNICAPARC
                                WHERE NRPARCNEGOCIO = C_ENDERECO.NRPARCNEGOCIO
                                  AND NRENDERECOPARC = C_ENDERECO.NRENDERECOPARC
                                  AND NRORG = P_NRORG
                                  AND IDATIVO = 'S') LOOP

                SELECT COUNT (*) VALIDA
                  INTO V_COMUNICAPARC
                  FROM COMUNICAPARC
                 WHERE NRPARCNEGOCIO = V_PARCNEGOCIO
                   AND NRENDERECOPARC = V_ENDERECOPARC
                   AND CDFORMACOMU = C_COMUNICA.CDFORMACOMU
                   AND NRORG = P_NRORG;

                IF V_COMUNICAPARC = 0 THEN
                    NOVO_CODIGO_NT('COMUNICAPARC', V_COMUNICAPARC, 1, P_NRORG);

                    INSERT INTO COMUNICAPARC (NRCOMUNICAPARC, NRPARCNEGOCIO, CDFORMACOMU, NRENDERECOPARC, CDPREFIXCOMUPARC,
                                              CDCOMUNICAPARC, NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO,
                                              CDCOMPLECOMUPARC, DSCONTATO)
                                      VALUES (V_COMUNICAPARC, V_PARCNEGOCIO, C_COMUNICA.CDFORMACOMU, V_ENDERECOPARC, C_COMUNICA.CDPREFIXCOMUPARC,
                                              C_COMUNICA.CDCOMUNICAPARC, P_NRORG, 'S', SYSDATE, P_NRORG, P_OPERADOR,
                                              C_COMUNICA.CDCOMPLECOMUPARC, C_COMUNICA.DSCONTATO);
                END IF;

            END LOOP;

            /* Cliente */

            SELECT CASE C_ENDERECO.CDTIPOENDERECO
                   WHEN 'PRINCIPAL' THEN 'P'
                   WHEN 'ENTREGA' THEN 'T'
                   WHEN 'COBRANCA' THEN 'C'
                   WHEN 'EXTERIOR' THEN 'E'
                   WHEN 'EXPORTACAO' THEN 'X'
                   WHEN 'COMERCIAL' THEN 'M'
                   ELSE 'O'
                   END AS TIPOENDERECO
             INTO V_TPENDERECO
             FROM DUAL;

            INSERT INTO ENDECLIE (CDCLIENTE, IDTPENDECLIE, CDPAIS, SGESTADO, CDMUNICIPIO, DSENDECLIE, DSCOMPENDCLI, CDBAIRRO, NMBAIRCLIE,
                                  NRCEPCLIE, NRENDERECOPARC, IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
            VALUES(V_CDCLINOVO, V_TPENDERECO, C_ENDERECO.CDPAIS, C_ENDERECO.SGESTADO, C_ENDERECO.CDMUNICIPIO, C_ENDERECO.DSENDERECO,
                   C_ENDERECO.DSCOMPLEENDERECO, C_ENDERECO.CDBAIRRO, C_ENDERECO.NMBAIRROENDERECO, C_ENDERECO.NRCEPENDERECO,
                   V_ENDERECOPARC, 'S', P_NRORG, SYSDATE, P_NRORG, P_OPERADOR);

           /* -- RECEBE TELEFONE -- */

            BEGIN
                SELECT TELEFONE.CDCOMUNICAPARC
                  INTO V_TELEFONE
                  FROM COMUNICAPARC TELEFONE
                 WHERE TELEFONE.CDFORMACOMU = '01'
                   AND TELEFONE.NRPARCNEGOCIO = V_PARCANTE
                   AND TELEFONE.NRORG = P_NRORG
                   AND ROWNUM = 1
                   ORDER BY DTINCLUSAO;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                   V_TELEFONE := NULL;
            END;


           /* -- RECEBE EMAIL -- */

            BEGIN
                SELECT TELEFONE.CDCOMUNICAPARC
                  INTO V_EMAIL
                  FROM COMUNICAPARC TELEFONE
                 WHERE TELEFONE.CDFORMACOMU = '05'
                   AND TELEFONE.NRPARCNEGOCIO = V_PARCANTE
                   AND TELEFONE.NRORG = P_NRORG
                   AND ROWNUM = 1
                   ORDER BY DTINCLUSAO;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                   V_EMAIL := NULL;
            END;

           /* - ATUALIZA FORMA DE COMUNICAAFaAFAEO - */

            UPDATE ENDECLIE
               SET NRTELECLIE = V_TELEFONE,
                   DSEMAILCLIE = V_EMAIL
             WHERE CDCLIENTE = V_CDCLINOVO
               AND IDTPENDECLIE = V_TPENDERECO
               AND NRENDERECOPARC = V_ENDERECOPARC
               AND NRORG = P_NRORG;

        END LOOP;

        /* insere as comunicacoes que nao estao ligadas a endereco */
        FOR C_COMUNICA IN (SELECT NRCOMUNICAPARC, NRPARCNEGOCIO, CDFORMACOMU, NRENDERECOPARC, CDPREFIXCOMUPARC,
                                  CDCOMUNICAPARC, NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO,
                                  CDCOMPLECOMUPARC, DSCONTATO
                             FROM COMUNICAPARC
                            WHERE NRPARCNEGOCIO  = V_PARCANTE
                              AND NRENDERECOPARC IS NULL
                              AND NRORG          = P_NRORG
                              AND IDATIVO        = 'S'
        ) LOOP

            SELECT COUNT (*) VALIDA
              INTO V_COMUNICAPARC
              FROM COMUNICAPARC
             WHERE NRPARCNEGOCIO  = V_PARCNEGOCIO
               AND NRENDERECOPARC IS NULL
               AND CDFORMACOMU    = C_COMUNICA.CDFORMACOMU
               AND NRORG          = P_NRORG;

            IF V_COMUNICAPARC = 0 THEN
                NOVO_CODIGO_NT('COMUNICAPARC', V_COMUNICAPARC, 1, P_NRORG);

                INSERT INTO COMUNICAPARC (NRCOMUNICAPARC, NRPARCNEGOCIO, CDFORMACOMU, NRENDERECOPARC, CDPREFIXCOMUPARC,
                                          CDCOMUNICAPARC, NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO,
                                          CDCOMPLECOMUPARC, DSCONTATO)
                                  VALUES (V_COMUNICAPARC, V_PARCNEGOCIO, C_COMUNICA.CDFORMACOMU, NULL, C_COMUNICA.CDPREFIXCOMUPARC,
                                          C_COMUNICA.CDCOMUNICAPARC, P_NRORG, 'S', SYSDATE, P_NRORG, P_OPERADOR,
                                          C_COMUNICA.CDCOMPLECOMUPARC, C_COMUNICA.DSCONTATO);
            END IF;

        END LOOP;


        /* Interlocutor (Parceiro e Cliente) */

        FOR C_INTERLOC IN (SELECT RELACIONAPARC.NRPARCNEGOCIO, RELACIONAPARC.NRPARCNEGRELAC, RELACIONAPARC.NRRELACIONAPARC, RELACIONAPARC.NRTIPORELACIONA,
                                  RELACIONAPARC.CDCARGO, PARCNEGOCIO.NMPRINCIPALPARC, ENDERECOPARC.NRENDERECOPARC, ENDERECOPARC.CDPAIS,
                                  ENDERECOPARC.SGESTADO, ENDERECOPARC.CDMUNICIPIO, PARCNEGOCIO.DTNASCIFUNDPARC, ENDERECOPARC.DSENDERECO,
                                  ENDERECOPARC.NMBAIRROENDERECO, ENDERECOPARC.NRCEPENDERECO
                             FROM PARCNEGOCIO
                             INNER JOIN RELACIONAPARC
                                ON PARCNEGOCIO.NRPARCNEGOCIO = RELACIONAPARC.NRPARCNEGRELAC
                               AND PARCNEGOCIO.NRORG = RELACIONAPARC.NRORG
                              LEFT JOIN ENDERECOPARC
                                ON PARCNEGOCIO.NRPARCNEGOCIO = ENDERECOPARC.NRPARCNEGOCIO
                               AND PARCNEGOCIO.NRORG = ENDERECOPARC.NRORG
                             WHERE RELACIONAPARC.NRPARCNEGOCIO = V_PARCANTE
                               AND RELACIONAPARC.NRORG = P_NRORG) LOOP

            /* Parceiro */

            SELECT COUNT (*) VALIDA
              INTO V_RELACIONAPARC
              FROM RELACIONAPARC
             WHERE NRPARCNEGOCIO = V_PARCNEGOCIO
               AND NRPARCNEGRELAC = C_INTERLOC.NRPARCNEGRELAC
               AND NRTIPORELACIONA = C_INTERLOC.NRTIPORELACIONA
               AND NRORG = P_NRORG;

            IF V_RELACIONAPARC = 0 THEN

                SELECT NVL(MAX(NRRELACIONAPARC),0)+1
                  INTO V_RELACIONAPARC
                  FROM RELACIONAPARC;

                INSERT INTO RELACIONAPARC (NRRELACIONAPARC, NRORG, NRPARCNEGOCIO, NRPARCNEGRELAC, NRTIPORELACIONA, CDCARGO,
                                           IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, NRPARCORIGEM)
                                   VALUES (V_RELACIONAPARC, P_NRORG, V_PARCNEGOCIO, C_INTERLOC.NRPARCNEGRELAC, C_INTERLOC.NRTIPORELACIONA, C_INTERLOC.CDCARGO,
                                           'S', SYSDATE, P_NRORG, P_OPERADOR, V_PARCNEGOCIO);
            END IF;

            /* Cliente */

            IF (C_INTERLOC.NRTIPORELACIONA = '25') THEN

                NOVO_CODIGO_NT('INTECLIE'||V_CDCLINOVO, V_CDINTECLIE, 1, P_NRORG);
                --V_CDINTECLIE := SUBSTR(TO_CHAR(TO_NUMBER(V_CDINTECLIE));
                V_CDINTECLIE := SUBSTR(TO_CHAR(TO_NUMBER(V_CDINTECLIE)),LENGTH(TO_CHAR(TO_NUMBER(V_CDINTECLIE)))-1,LENGTH(TO_CHAR(TO_NUMBER(V_CDINTECLIE))));

                INSERT INTO INTECLIE (CDCLIENTE, CDINTECLIE, NMINTECLIE, IDTPINTECLIE, NRRELACIONAPARC, CDPAIS, SGESTADO, CDMUNICIPIO,
                                      DTNASCINCLIE, IDENDEINCLIE, DSENDEINCLIE, NMBAIRINCLIE, NRCEPINCLIE, IDATIVO, NRORG,
                                      DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                VALUES (V_CDCLINOVO, V_CDINTECLIE, C_INTERLOC.NMPRINCIPALPARC, 'F', V_RELACIONAPARC, C_INTERLOC.CDPAIS,
                        C_INTERLOC.SGESTADO, C_INTERLOC.CDMUNICIPIO, C_INTERLOC.DTNASCIFUNDPARC, 'C', C_INTERLOC.DSENDERECO,
                        C_INTERLOC.NMBAIRROENDERECO, C_INTERLOC.NRCEPENDERECO, 'S', P_NRORG, SYSDATE, P_NRORG, P_OPERADOR);
            END IF;

        END LOOP;

    END LOOP;

    /* OrganizaAAo */

    UPDATE ORGANIZACAO
       SET NRINSCRICAOORG = P_CNPJNOVO,
           NMRAZSOCIALORG = NVL(P_RAZSCNOVO, NMRAZSOCIALORG),
           NMORGANIZACAO = NVL(P_NMFANTNOVO, NMORGANIZACAO),
           NRPARCNEGOCIO = V_PARCNOVO,
           NRINSJUREMPR = P_CNPJNOVO,
           CDOPERULTATU = P_OPERADOR,
           NRORGULTATU = P_NRORG,
           DTULTATU = SYSDATE
     WHERE NRORG = V_ORGANIZACAO;

    IF (P_IDINATIVAPARC = 'S') THEN
        /* Inativa registros anteriores */

        /*Parceiro*/

        UPDATE PARCNEGOCIO
           SET IDATIVO = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRPARCNEGOCIO = V_PARCANTE
           AND NRORG = P_NRORG;

        /* Cliente */

        UPDATE CLIENTE
           SET IDATIVO = 'N',
               IDCLIEATIV = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE CDCLIENTE = V_CDCLIANTE
           AND NRPARCNEGOCIO = V_PARCANTE
           AND NRINSJURCLIE = P_CNPJANTE
           AND NRORG = P_NRORG;

        /* Parceria*/

        UPDATE PARCERIA
           SET IDATIVO = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRPARCNEGOCIO = V_PARCANTE
           AND NRORG = P_NRORG;

        /* EndereAos */

        UPDATE ENDERECOPARC
           SET IDATIVO = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRPARCNEGOCIO = V_PARCANTE
           AND NRORG = P_NRORG;

        UPDATE ENDECLIE
           SET IDATIVO = 'N',
               IDENDATIVO = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE CDCLIENTE = V_CDCLIANTE
           AND NRORG = P_NRORG;

        /* Interlocutores */

        UPDATE RELACIONAPARC
           SET IDATIVO = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRPARCNEGOCIO = V_PARCANTE
           AND NRORG = P_NRORG;

        UPDATE INTECLIE
           SET IDATIVO = 'N',
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE CDCLIENTE = V_CDCLIANTE
           AND NRORG = P_NRORG;

    END IF;

    SELECT COUNT(*) AS VAL
      INTO V_VALAGRUP
      FROM FCT_AGRUPAMENTO
     WHERE NRPARCFATURA = V_PARCANTE
       AND NRORG = P_NRORG;

    IF (V_VALAGRUP > 0) THEN

      UPDATE FCT_AGRUPAMENTO
         SET NRPARCFATURA = V_PARCNOVO,
             CDOPERULTATU = P_OPERADOR,
             NRORGULTATU = P_NRORG,
             DTULTATU = SYSDATE
       WHERE NRPARCFATURA = V_PARCANTE
         AND NRORG = P_NRORG;

      V_AGRUP := 'S';

    ELSE

      V_AGRUP := 'N';

    END IF;

    /* 2 - Atualizar contratos do parceiro (Renegociar) */

    FOR C_CONTRATO IN (SELECT NRSEQCONTRATO, NRCONTRATOFCT, NRPARCNEGOCIO, DSREFERENCIACONT
                         FROM FCT_CONTRATO
                        WHERE NRPARCNEGOCIO = V_PARCANTE
                          AND IDSITUACAOCONTRATO <> 'E'
                          AND IDATIVO = 'S') LOOP

        FCT_COPIA_VERSIONA_CONTRATO(C_CONTRATO.NRSEQCONTRATO, 'V', P_OPERADOR, P_NRORG, V_CONTRATO, V_AGRUP);

        /* Atualiza contrato novo */

        UPDATE FCT_CONTRATO
           SET NRPARCNEGOCIO = V_PARCNOVO,
               DSJUSTIFCANCRENEG = P_JUSTIFICATIVA,
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRSEQCONTRATO = V_CONTRATO
           AND NRORG = P_NRORG;

        UPDATE FCT_NEGOCIACAOCONTRATO
           SET NRPARCFATURA = V_PARCNOVO,
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRSEQCONTRATO = V_CONTRATO
           AND NRORG = P_NRORG;

        FOR C_NEGOCIACAO IN (SELECT NRNEGOCIACAOCONTRATO
                               FROM FCT_NEGOCIACAOCONTRATO
                              WHERE NRSEQCONTRATO = V_CONTRATO
                                AND NRORG = P_NRORG) LOOP

            UPDATE FCT_ITNEGOCIACAOCONTRATO
               SET NRPARCFATURA = V_PARCNOVO,
                   CDOPERULTATU = P_OPERADOR,
                   NRORGULTATU = P_NRORG,
                   DTULTATU = SYSDATE
             WHERE NRNEGOCIACAOCONTRATO = C_NEGOCIACAO.NRNEGOCIACAOCONTRATO
               AND NRORG = P_NRORG;

        END LOOP;

        /* Atualiza contrato antigo */

        UPDATE FCT_CONTRATO
           SET DSJUSTIFCANCRENEG = P_JUSTIFICATIVA,
               CDOPERULTATU = P_OPERADOR,
               NRORGULTATU = P_NRORG,
               DTULTATU = SYSDATE
         WHERE NRSEQCONTRATO = C_CONTRATO.NRSEQCONTRATO
           AND NRORG = P_NRORG;

        /*Deleta parcelas e mediAAues pendentes*/

        DELETE FROM FCT_MEDICAOFATURA
         WHERE NRSEQCONTRATO = C_CONTRATO.NRSEQCONTRATO
           AND NRORG = P_NRORG
           AND IDSITUACAO = '1';


        FOR C_PARCELAS IN (SELECT FCT_RELACAGRUPCONTFAT.NRFATURACONT
                             FROM FCT_RELACAGRUPCONTFAT
                             JOIN FCT_FATURACONT
                               ON FCT_FATURACONT.NRFATURACONT = FCT_RELACAGRUPCONTFAT.NRFATURACONT
                              AND FCT_FATURACONT.NRORG        = FCT_RELACAGRUPCONTFAT.NRORG
                              AND FCT_FATURACONT.IDSITUACAO   = '1'
                            WHERE FCT_RELACAGRUPCONTFAT.NRSEQCONTRATO   = C_CONTRATO.NRSEQCONTRATO
                              AND FCT_RELACAGRUPCONTFAT.NRORG           = P_NRORG
                              AND FCT_RELACAGRUPCONTFAT.NRMEDICAOFATURA IS NULL) LOOP

            DELETE FROM FCT_RELACAGRUPCONTFAT
             WHERE NRFATURACONT = C_PARCELAS.NRFATURACONT
               AND NRORG        = P_NRORG;

            DELETE FROM FCT_FATURACONT
             WHERE NRFATURACONT = C_PARCELAS.NRFATURACONT
               AND NRORG        = P_NRORG;

        END LOOP;

    END LOOP;

    /* 3 - Copiar licenAas de uso do Cliente */

    FOR C_LICENCAS IN (SELECT CDCLIENTE, NRLICENCAUSO, CDPAIS, SGESTADO, CDMUNICIPIO, CDLOCALUSO,
                              IDTPIJURLUSO, NRINSJURLUSO, NMFANTLUSO, NMRAZSOCLUSO, NRINSESTLUSO, DSENDELUSO,
                              NMBAIRLUSO, NRCEPLUSO, NRTELELUSO, NRRAMALLUSO, NRTELEXLUSO, NRFAXLUSO,
                              NMCONTLUSO, DSEMAILLUSO, NRLIMCONEX, IDMODPROC, IDLUSOATIV, IDLOCAPROC,
                              NMINTERNLUSO, NMDEPTOLUSO, IDAMBILUSO, DTULTATULUSO, NMORIGLUSO, DTCADALUSO,
                              DSEMAILENVLU, DSEMAILCOMLU, NRSERIELUSO, DTINCLPRIMPER, DTALTSTATUSLU, IDFATURAFILISEP,
                              NRORG, IDLIBGERPERLUSO, DTLIBEPERSLUSO, DTVALIPERSLUSO, NRINSMUNILUSO, CDCLIEFATULUSO,
                              NRLUSODESTRANSF, CDREPRLEGALEMPR
                         FROM LICENCAUSO
                        WHERE CDCLIENTE = V_CDCLIANTE
                          AND IDATIVO = 'S') LOOP

        SELECT COUNT(*) VALIDA
          INTO V_VALIDALIC
          FROM LICENCAUSO
         WHERE CDCLIENTE = V_CDCLINOVO
           AND NRLICENCAUSO = C_LICENCAS.NRLICENCAUSO;

        IF (V_VALIDALIC = 0) THEN

            INSERT INTO LICENCAUSO (CDCLIENTE, NRLICENCAUSO, CDPAIS, SGESTADO, CDMUNICIPIO, CDLOCALUSO,
                                    IDTPIJURLUSO, NRINSJURLUSO, NMFANTLUSO, NMRAZSOCLUSO, NRINSESTLUSO, DSENDELUSO,
                                    NMBAIRLUSO, NRCEPLUSO, NRTELELUSO, NRRAMALLUSO, NRTELEXLUSO, NRFAXLUSO,
                                    NMCONTLUSO, DSEMAILLUSO, NRLIMCONEX, IDMODPROC, IDLUSOATIV, IDLOCAPROC,
                                    NMINTERNLUSO, NMDEPTOLUSO, IDAMBILUSO, DTULTATULUSO, NMORIGLUSO, DTCADALUSO,
                                    DSEMAILENVLU, DSEMAILCOMLU, NRSERIELUSO, DTINCLPRIMPER, DTALTSTATUSLU, IDFATURAFILISEP,
                                    NRORG, DTINCLUSAO,  NRORGINCLUSAO, CDOPERINCLUSAO, IDLIBGERPERLUSO, DTLIBEPERSLUSO,
                                    DTVALIPERSLUSO, NRINSMUNILUSO, CDCLIEFATULUSO, NRLUSODESTRANSF, CDREPRLEGALEMPR, IDATIVO)
                            VALUES (V_CDCLINOVO, C_LICENCAS.NRLICENCAUSO, C_LICENCAS.CDPAIS, C_LICENCAS.SGESTADO, C_LICENCAS.CDMUNICIPIO, C_LICENCAS.CDLOCALUSO,
                                    C_LICENCAS.IDTPIJURLUSO, C_LICENCAS.NRINSJURLUSO, C_LICENCAS.NMFANTLUSO, C_LICENCAS.NMRAZSOCLUSO, C_LICENCAS.NRINSESTLUSO, C_LICENCAS.DSENDELUSO,
                                    C_LICENCAS.NMBAIRLUSO, C_LICENCAS.NRCEPLUSO, C_LICENCAS.NRTELELUSO, C_LICENCAS.NRRAMALLUSO, C_LICENCAS.NRTELEXLUSO, C_LICENCAS.NRFAXLUSO,
                                    C_LICENCAS.NMCONTLUSO, C_LICENCAS.DSEMAILLUSO, C_LICENCAS.NRLIMCONEX, C_LICENCAS.IDMODPROC, C_LICENCAS.IDLUSOATIV, C_LICENCAS.IDLOCAPROC,
                                    C_LICENCAS.NMINTERNLUSO, C_LICENCAS.NMDEPTOLUSO, C_LICENCAS.IDAMBILUSO, C_LICENCAS.DTULTATULUSO, C_LICENCAS.NMORIGLUSO, C_LICENCAS.DTCADALUSO,
                                    C_LICENCAS.DSEMAILENVLU, C_LICENCAS.DSEMAILCOMLU, C_LICENCAS.NRSERIELUSO, C_LICENCAS.DTINCLPRIMPER, C_LICENCAS.DTALTSTATUSLU, C_LICENCAS.IDFATURAFILISEP,
                                    P_NRORG, SYSDATE,  P_NRORG, P_OPERADOR, C_LICENCAS.IDLIBGERPERLUSO, C_LICENCAS.DTLIBEPERSLUSO,
                                    C_LICENCAS.DTVALIPERSLUSO, C_LICENCAS.NRINSMUNILUSO, C_LICENCAS.CDCLIEFATULUSO, C_LICENCAS.NRLUSODESTRANSF, C_LICENCAS.CDREPRLEGALEMPR, 'S');

        END IF;

    END LOOP;

    /* 4 - Copiar dados de Compra e Boleto do Cliente */

    /* Copia V_COMPRATKN */

    FOR C_COMPRATKN IN (SELECT CDCLIENTE, CDCOMPRATKN, CDEMPRESA, CDFILIAL, DTABERCOMPRATKN, DTPAGCOMPRATKN,
                               IDFORMPGTOTKN, IDTPCOMPRATKN, QTCOMPRATKN, NRLANCTONF, NRORG, DTINCLUSAO,
                               NRORGINCLUSAO, CDOPERINCLUSAO, IDORIGCOMPRATKN, IDATIVO
                          FROM COMPRATKN
                         WHERE CDCLIENTE = V_CDCLIANTE
                           AND IDATIVO = 'S') LOOP

        SELECT COUNT(*) VALIDA
          INTO V_COMPRATKN
          FROM COMPRATKN
         WHERE CDCLIENTE = V_CDCLINOVO
           AND CDCOMPRATKN = C_COMPRATKN.CDCOMPRATKN
           AND IDATIVO = 'S';

        IF (V_COMPRATKN = 0) THEN

            INSERT INTO COMPRATKN (CDCLIENTE, CDCOMPRATKN, CDEMPRESA, CDFILIAL, DTABERCOMPRATKN, DTPAGCOMPRATKN,
                                   IDFORMPGTOTKN, IDTPCOMPRATKN, QTCOMPRATKN, NRLANCTONF, NRORG, DTINCLUSAO,
                                   NRORGINCLUSAO, CDOPERINCLUSAO, IDORIGCOMPRATKN, IDATIVO)
                           VALUES (V_CDCLINOVO, C_COMPRATKN.CDCOMPRATKN, C_COMPRATKN.CDEMPRESA, C_COMPRATKN.CDFILIAL, C_COMPRATKN.DTABERCOMPRATKN, C_COMPRATKN.DTPAGCOMPRATKN,
                                   C_COMPRATKN.IDFORMPGTOTKN, C_COMPRATKN.IDTPCOMPRATKN, C_COMPRATKN.QTCOMPRATKN, C_COMPRATKN.NRLANCTONF, P_NRORG, SYSDATE,
                                   P_NRORG, P_OPERADOR, C_COMPRATKN.IDORIGCOMPRATKN, 'S');
        END IF;

    END LOOP;

    /* Copia BOLETOTKN */

    FOR C_BOLETOTKN IN (SELECT CDCLIENTE, CDCOMPRATKN, CDBOLETOTKN, CDREDUCONT, DTEMISBOLETOTKN,
                               DTVENCBOLETOTKN, DSLINHABARBOLET, CDBARRABOLETTKN, CDCARTCOBOLETKN, CDNOSNUMBOLETKN,
                               VRBOLETOTKN, IDSTATUSBOLETKN, NRORG, DTINCLUSAO, NRORGINCLUSAO,
                               CDOPERINCLUSAO, DSEMISBOLETOTKN, IDBLOQPERBOLVENC, IDATIVO
                          FROM BOLETOTKN
                         WHERE CDCLIENTE = V_CDCLIANTE
                           AND IDATIVO = 'S') LOOP

        SELECT COUNT(*) VALIDA
          INTO V_BOLETOTKN
          FROM BOLETOTKN
         WHERE CDCLIENTE = V_CDCLINOVO
           AND CDCOMPRATKN = C_BOLETOTKN.CDCOMPRATKN
           AND CDBOLETOTKN = C_BOLETOTKN.CDBOLETOTKN
           AND IDATIVO = 'S';

        IF (V_BOLETOTKN = 0) THEN

            INSERT INTO BOLETOTKN (CDCLIENTE, CDCOMPRATKN, CDBOLETOTKN, CDREDUCONT, DTEMISBOLETOTKN,
                                   DTVENCBOLETOTKN, DSLINHABARBOLET, CDBARRABOLETTKN, CDCARTCOBOLETKN, CDNOSNUMBOLETKN,
                                   VRBOLETOTKN, IDSTATUSBOLETKN, NRORG, DTINCLUSAO, NRORGINCLUSAO,
                                   CDOPERINCLUSAO, DSEMISBOLETOTKN, IDBLOQPERBOLVENC, IDATIVO)
                           VALUES (V_CDCLINOVO, C_BOLETOTKN.CDCOMPRATKN, C_BOLETOTKN.CDBOLETOTKN, C_BOLETOTKN.CDREDUCONT, C_BOLETOTKN.DTEMISBOLETOTKN,
                                   C_BOLETOTKN.DTVENCBOLETOTKN, C_BOLETOTKN.DSLINHABARBOLET, C_BOLETOTKN.CDBARRABOLETTKN, C_BOLETOTKN.CDCARTCOBOLETKN, C_BOLETOTKN.CDNOSNUMBOLETKN,
                                   C_BOLETOTKN.VRBOLETOTKN, C_BOLETOTKN.IDSTATUSBOLETKN, P_NRORG, SYSDATE, P_NRORG,
                                   P_OPERADOR, C_BOLETOTKN.DSEMISBOLETOTKN, C_BOLETOTKN.IDBLOQPERBOLVENC, 'S');
        END IF;

    END LOOP;


    /* 5 - Gerar linhas de produto novas*/


    FOR C_CONTRLINP IN (SELECT CDCLIENTE, CDLINPCLIE, NMLINPCLIE, IDTIPLINPC, IDTPPGTLINPC, QTLINPCLIE,
                               NRUSUALINPC, NRACESLINPC, IDAMBLINPC, DTIVIGLINPC, DTFVIGLINPC, IDMPROCLINPC,
                               IDLPROCLINPC, DIFAMENLINPC, NRLUSOFATLU, NRLUSOFATMAN, DTCALUSLINPC, CDOPERLINPRESC,
                               DTCONTLINPRESC, DSCONTLINPRESC, NRPROPOSFAS, NRVERPROPFAS, USR_CDPROCOMERCI, USR_VRDELUSOCONT,
                               USR_VRDEMENSCONT, NRMESREAJCONT, CDGRUPONFLINPC, QTSISTEMALINPC, CDLINPCLIEINFOR, IDBLOQLINP,
                               NRORG, QTMINIMAFATLINP, CDOPERBLOQLINP, DTHRBLOQLINP, IDATIVO, NRSEQCONTRATO, NRPRODUTO_ID
                          FROM CONTRATOLINP
                         WHERE CDCLIENTE = V_CDCLIANTE
                           AND DTCONTLINPRESC IS NULL
                           AND IDATIVO = 'S') LOOP

        /* Copia CONTRATOLINP */

        SELECT COUNT(*) VALIDA
          INTO V_VALCONTRLNP
          FROM CONTRATOLINP
         WHERE CDCLIENTE = V_CDCLINOVO
           AND CDLINPCLIE = C_CONTRLINP.CDLINPCLIE;

        IF (V_VALCONTRLNP = 0) THEN

            BEGIN
              SELECT NRSEQCONTRATO
                INTO V_SEQCONTRATO
                FROM FCT_CONTRATO
               WHERE NRPARCNEGOCIO = V_PARCNOVO
                 AND NRSEQCONTRATOPAI = C_CONTRLINP.NRSEQCONTRATO
                 AND NRORG = P_NRORG;
            EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_SEQCONTRATO := NULL;
            END;

            INSERT INTO CONTRATOLINP (CDCLIENTE, CDLINPCLIE, NMLINPCLIE, IDTIPLINPC, IDTPPGTLINPC, QTLINPCLIE,
                                      NRUSUALINPC, NRACESLINPC, IDAMBLINPC, DTIVIGLINPC, DTFVIGLINPC, IDMPROCLINPC,
                                      IDLPROCLINPC, DIFAMENLINPC, NRLUSOFATLU, NRLUSOFATMAN, DTCALUSLINPC, CDOPERLINPRESC,
                                      DTCONTLINPRESC, DSCONTLINPRESC, NRPROPOSFAS, NRVERPROPFAS, USR_CDPROCOMERCI, USR_VRDELUSOCONT,
                                      USR_VRDEMENSCONT, NRMESREAJCONT, CDGRUPONFLINPC, QTSISTEMALINPC, CDLINPCLIEINFOR, IDBLOQLINP,
                                      NRORG, QTMINIMAFATLINP, CDOPERBLOQLINP, DTHRBLOQLINP, IDATIVO, NRSEQCONTRATO, NRPRODUTO_ID,
                                      DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO)
                              VALUES (V_CDCLINOVO, C_CONTRLINP.CDLINPCLIE, C_CONTRLINP.NMLINPCLIE, C_CONTRLINP.IDTIPLINPC, C_CONTRLINP.IDTPPGTLINPC, C_CONTRLINP.QTLINPCLIE,
                                      C_CONTRLINP.NRUSUALINPC, C_CONTRLINP.NRACESLINPC, C_CONTRLINP.IDAMBLINPC, C_CONTRLINP.DTIVIGLINPC, C_CONTRLINP.DTFVIGLINPC, C_CONTRLINP.IDMPROCLINPC,
                                      C_CONTRLINP.IDLPROCLINPC, C_CONTRLINP.DIFAMENLINPC, C_CONTRLINP.NRLUSOFATLU, C_CONTRLINP.NRLUSOFATMAN, C_CONTRLINP.DTCALUSLINPC, C_CONTRLINP.CDOPERLINPRESC,
                                      C_CONTRLINP.DTCONTLINPRESC, C_CONTRLINP.DSCONTLINPRESC, C_CONTRLINP.NRPROPOSFAS, C_CONTRLINP.NRVERPROPFAS, C_CONTRLINP.USR_CDPROCOMERCI, C_CONTRLINP.USR_VRDELUSOCONT,
                                      C_CONTRLINP.USR_VRDEMENSCONT, C_CONTRLINP.NRMESREAJCONT, C_CONTRLINP.CDGRUPONFLINPC, C_CONTRLINP.QTSISTEMALINPC, C_CONTRLINP.CDLINPCLIEINFOR, C_CONTRLINP.IDBLOQLINP,
                                      P_NRORG, C_CONTRLINP.QTMINIMAFATLINP, C_CONTRLINP.CDOPERBLOQLINP, C_CONTRLINP.DTHRBLOQLINP, 'S', V_SEQCONTRATO, C_CONTRLINP.NRPRODUTO_ID,
                                      SYSDATE, P_OPERADOR, P_NRORG);

            /* linhas de produto */
            UPDATE CONTRATOLINP
               SET DTCONTLINPRESC = SYSDATE,
                   DSCONTLINPRESC = SUBSTR(P_JUSTIFICATIVA, 1, 1000)
             WHERE CDCLIENTE = V_CDCLIANTE
               AND CDLINPCLIE = C_CONTRLINP.CDLINPCLIE
               AND NRORG = P_NRORG
               AND DTCONTLINPRESC IS NULL;

        END IF;

        /* Copia CARENCIALINP */

        FOR C_CARENCIA IN (SELECT CDCLIENTE, CDLINPCLIE, DTMESCARENCLINP, DSOBSCARENCLINP, NRORG, IDATIVO
                             FROM CARENCIALINP
                            WHERE CDCLIENTE =  V_CDCLIANTE
                              AND CDLINPCLIE =  C_CONTRLINP.CDLINPCLIE
                              AND IDATIVO = 'S') LOOP

            SELECT COUNT(*) VALIDA
              INTO V_VALCARENLNP
              FROM CARENCIALINP
             WHERE CDCLIENTE = V_CDCLINOVO
               AND CDLINPCLIE = C_CARENCIA.CDLINPCLIE
               AND DTMESCARENCLINP = C_CARENCIA.DTMESCARENCLINP;

            IF (V_VALCARENLNP = 0) THEN

                INSERT INTO CARENCIALINP (CDCLIENTE, CDLINPCLIE, DTMESCARENCLINP, DSOBSCARENCLINP, NRORG, DTINCLUSAO,
                                          NRORGINCLUSAO, CDOPERINCLUSAO, IDATIVO)
                                  VALUES (V_CDCLINOVO, C_CARENCIA.CDLINPCLIE, C_CARENCIA.DTMESCARENCLINP, C_CARENCIA.DSOBSCARENCLINP, P_NRORG, SYSDATE,
                                          P_NRORG, P_OPERADOR, 'S');

            END IF;

        END LOOP;

        /* Copia VENCLUSOCLIE */

        FOR C_VENCLUSO IN (SELECT CDCLIENTE, DTVELUSOPEDC, VRVELUSOPEDC, NRAPURFATFAS, CDLINPCLIE, USR_NRPROPOSFAS,
                                   USR_NRVERPROPFAS, USR_NRLINPPEDP, NRORG
                              FROM VENCLUSOCLIE
                             WHERE CDCLIENTE = V_CDCLIANTE
                               AND CDLINPCLIE = C_CONTRLINP.CDLINPCLIE
                               AND IDATIVO = 'S') LOOP

            SELECT COUNT(*) VALIDA
              INTO V_VALVENCLUSOC
              FROM VENCLUSOCLIE
             WHERE CDCLIENTE = V_CDCLINOVO
               AND CDLINPCLIE = C_VENCLUSO.CDLINPCLIE
               AND DTVELUSOPEDC = C_VENCLUSO.DTVELUSOPEDC;

            IF (V_VALVENCLUSOC = 0) THEN

                INSERT INTO VENCLUSOCLIE (CDCLIENTE, DTVELUSOPEDC, VRVELUSOPEDC, NRAPURFATFAS, CDLINPCLIE, USR_NRPROPOSFAS,
                                          USR_NRVERPROPFAS, USR_NRLINPPEDP, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, IDATIVO)
                                  VALUES (V_CDCLINOVO, C_VENCLUSO.DTVELUSOPEDC, C_VENCLUSO.VRVELUSOPEDC, C_VENCLUSO.NRAPURFATFAS, C_VENCLUSO.CDLINPCLIE, C_VENCLUSO.USR_NRPROPOSFAS,
                                          C_VENCLUSO.USR_NRVERPROPFAS, C_VENCLUSO.USR_NRLINPPEDP, P_NRORG, SYSDATE, P_NRORG, P_OPERADOR, 'S');

            END IF;

        END LOOP;

        /* Copia VALORLINP */

        FOR C_VALORLINP IN (SELECT CDCLIENTE, CDLINPCLIE, DTIVIGVRLINP, DTFVIGVRLINP, VRLUSOCLIE, VRMENSCLIE,
                                   DTATUVIGVRLINP, DSOBSREAJLINP, VRLUSOCLIEANT, VRMENSCLIEANT, VRLUSOPTOA, VRMENSPTOA,
                                   VRLUSOPTOAANT, VRMENSPTOAANT, CDOPERREAJLINP, NRORG, DTINCLUSAO,  NRORGINCLUSAO,
                                   CDOPERINCLUSAO, VRLICENCUSOLINP, VRMENSALIDALINP, VRLICENCUSOANTE, VRMENSALIDAANTE, IDATIVO
                              FROM VALORLINP
                             WHERE CDCLIENTE = V_CDCLIANTE
                               AND CDLINPCLIE = C_CONTRLINP.CDLINPCLIE
                               AND ((TRUNC(DTIVIGVRLINP) > TRUNC(SYSDATE)) OR (TRUNC(DTFVIGVRLINP) > TRUNC(SYSDATE)))
                               AND IDATIVO = 'S') LOOP

            SELECT COUNT(*) VALIDA
              INTO V_VALVALORLNP
              FROM VALORLINP
             WHERE CDCLIENTE = V_CDCLINOVO
               AND CDLINPCLIE = C_VALORLINP.CDLINPCLIE
               AND DTIVIGVRLINP = C_VALORLINP.DTIVIGVRLINP;

            IF (V_VALVALORLNP = 0) THEN

                INSERT INTO VALORLINP (CDCLIENTE, CDLINPCLIE, DTIVIGVRLINP, DTFVIGVRLINP, VRLUSOCLIE, VRMENSCLIE,
                                       DTATUVIGVRLINP, DSOBSREAJLINP, VRLUSOCLIEANT, VRMENSCLIEANT, VRLUSOPTOA, VRMENSPTOA,
                                       VRLUSOPTOAANT, VRMENSPTOAANT, CDOPERREAJLINP, NRORG, DTINCLUSAO,  NRORGINCLUSAO,
                                       CDOPERINCLUSAO, VRLICENCUSOLINP, VRMENSALIDALINP, VRLICENCUSOANTE, VRMENSALIDAANTE, IDATIVO)
                               VALUES (V_CDCLINOVO, C_VALORLINP.CDLINPCLIE, C_VALORLINP.DTIVIGVRLINP, C_VALORLINP.DTFVIGVRLINP, C_VALORLINP.VRLUSOCLIE, C_VALORLINP.VRMENSCLIE,
                                       C_VALORLINP.DTATUVIGVRLINP, C_VALORLINP.DSOBSREAJLINP, C_VALORLINP.VRLUSOCLIEANT, C_VALORLINP.VRMENSCLIEANT, C_VALORLINP.VRLUSOPTOA, C_VALORLINP.VRMENSPTOA,
                                       C_VALORLINP.VRLUSOPTOAANT, C_VALORLINP.VRMENSPTOAANT, C_VALORLINP.CDOPERREAJLINP, P_NRORG, SYSDATE,  P_NRORG,
                                       P_OPERADOR, C_VALORLINP.VRLICENCUSOLINP, C_VALORLINP.VRMENSALIDALINP, C_VALORLINP.VRLICENCUSOANTE, C_VALORLINP.VRMENSALIDAANTE, 'S');
            END IF;

        END LOOP;

        /* Copia SISTCONTLINP */

        FOR C_SISTCONTLP IN (SELECT CDCLIENTE, CDLINPCLIE, CDSISTEMA, NRORG, DTINCLUSAO, NRORGINCLUSAO,
                                    CDOPERINCLUSAO, IDATIVO
                               FROM SISTCONTLINP
                              WHERE CDCLIENTE = V_CDCLIANTE
                                AND CDLINPCLIE = C_CONTRLINP.CDLINPCLIE
                                AND IDATIVO = 'S') LOOP

            SELECT COUNT(*) VALIDA
              INTO V_VALSISCONLNP
              FROM SISTCONTLINP
             WHERE CDCLIENTE = V_CDCLINOVO
               AND CDLINPCLIE = C_SISTCONTLP.CDLINPCLIE
               AND CDSISTEMA = C_SISTCONTLP.CDSISTEMA;

            IF (V_VALSISCONLNP = 0) THEN

                INSERT INTO SISTCONTLINP (CDCLIENTE, CDLINPCLIE, CDSISTEMA, NRORG, DTINCLUSAO, NRORGINCLUSAO,
                                          CDOPERINCLUSAO, IDATIVO)
                                  VALUES (V_CDCLINOVO, C_SISTCONTLP.CDLINPCLIE, C_SISTCONTLP.CDSISTEMA, P_NRORG, SYSDATE, P_NRORG,
                                          P_OPERADOR, 'S');

            END IF;

        END LOOP;

        /* Copia LINPLUSO */

        FOR C_LINPLUSO IN (SELECT CDCLIENTE, NRLICENCAUSO, CDLINPCLIE, NRORG, DTINCLUSAO, NRORGINCLUSAO,
                                  CDOPERINCLUSAO, CDCOMPRATKN, CDBOLETOTKN, CDEMPRESA, CDFILIAL, NRINVOICE,
                                  DTVALPERSLUPEND, DTVALPERSLUPAGA, IDLINPEXCLUIDA, IDATIVO
                             FROM LINPLUSO
                            WHERE CDCLIENTE = V_CDCLIANTE
                              AND CDLINPCLIE = C_CONTRLINP.CDLINPCLIE
                           ORDER BY CDCLIENTE, NRLICENCAUSO) LOOP

            SELECT COUNT(*) VALIDA
              INTO V_VALLINPLUSO
              FROM LINPLUSO
             WHERE CDCLIENTE = V_CDCLINOVO
               AND NRLICENCAUSO = C_LINPLUSO.NRLICENCAUSO
               AND CDLINPCLIE = C_LINPLUSO.CDLINPCLIE;

            IF (V_VALLINPLUSO = 0) THEN

                INSERT INTO LINPLUSO(CDCLIENTE, NRLICENCAUSO, CDLINPCLIE, NRORG, DTINCLUSAO, NRORGINCLUSAO,
                                     CDOPERINCLUSAO, CDCOMPRATKN, CDBOLETOTKN, CDEMPRESA, CDFILIAL, NRINVOICE,
                                     DTVALPERSLUPEND, DTVALPERSLUPAGA, IDLINPEXCLUIDA, IDATIVO )
                             VALUES (V_CDCLINOVO, C_LINPLUSO.NRLICENCAUSO, C_LINPLUSO.CDLINPCLIE, P_NRORG, SYSDATE, P_NRORG,
                                     P_OPERADOR, C_LINPLUSO.CDCOMPRATKN, C_LINPLUSO.CDBOLETOTKN, C_LINPLUSO.CDEMPRESA, C_LINPLUSO.CDFILIAL, C_LINPLUSO.NRINVOICE,
                                     C_LINPLUSO.DTVALPERSLUPEND, C_LINPLUSO.DTVALPERSLUPAGA, C_LINPLUSO.IDLINPEXCLUIDA, 'S');

            END IF;

            FOR C_CAIXAlUSO IN (SELECT CDCLIENTE, NRLICENCAUSO, CDCAIXALUSO, NMCAIXALUSO, NRORG, DTINCLUSAO,
                                       NRORGINCLUSAO, CDOPERINCLUSAO, CDCOMPRATKN, CDBOLETOTKN, CDEMPRESA, CDFILIAL,
                                       NRINVOICE, DTVALPERSCXPEND, DTVALPERSCXPAGO, IDCAIXAEXCLUIDO, IDATIVO
                                  FROM CAIXALUSO
                                 WHERE CDCLIENTE = C_LINPLUSO.CDCLIENTE
                                   AND NRLICENCAUSO = C_LINPLUSO.NRLICENCAUSO) LOOP

                SELECT COUNT(*) AS VALIDA
                  INTO V_VALIDACXLUSO
                  FROM CAIXALUSO
                 WHERE CDCLIENTE = V_CDCLINOVO
                   AND NRLICENCAUSO = C_CAIXAlUSO.NRLICENCAUSO
                   AND CDCAIXALUSO = C_CAIXAlUSO.CDCAIXALUSO;

                IF (V_VALIDACXLUSO = 0) THEN

                    INSERT INTO CAIXALUSO (CDCLIENTE, NRLICENCAUSO, CDCAIXALUSO, NMCAIXALUSO, NRORG, DTINCLUSAO,
                                           NRORGINCLUSAO, CDOPERINCLUSAO, CDCOMPRATKN, CDBOLETOTKN, CDEMPRESA, CDFILIAL,
                                           NRINVOICE, DTVALPERSCXPEND, DTVALPERSCXPAGO, IDCAIXAEXCLUIDO, IDATIVO)
                                   VALUES (V_CDCLINOVO, C_CAIXAlUSO.NRLICENCAUSO, C_CAIXAlUSO.CDCAIXALUSO, C_CAIXAlUSO.NMCAIXALUSO, P_NRORG, SYSDATE,
                                           P_NRORG, P_OPERADOR, C_CAIXAlUSO.CDCOMPRATKN, C_CAIXAlUSO.CDBOLETOTKN, C_CAIXAlUSO.CDEMPRESA, C_CAIXAlUSO.CDFILIAL,
                                           C_CAIXAlUSO.NRINVOICE, C_CAIXAlUSO.DTVALPERSCXPEND, C_CAIXAlUSO.DTVALPERSCXPAGO, C_CAIXAlUSO.IDCAIXAEXCLUIDO, 'S');

                END IF;

            END LOOP;

        END LOOP;

    END LOOP;

    /* 6 - Migrar chamados (Issues e solicitaAAues) em aberto para novo CNPJ */

    USR_FCT_ATUALIZA_CNPJ_CONT(V_CDCLIANTE, V_CDCLINOVO);

END;
/