CREATE OR REPLACE PROCEDURE FCT_ENCERRA_CONTRATO (
    P_NRSEQCONTRATO    IN INTEGER,
    P_OPERADOR         IN VARCHAR2,
    P_NRORG            IN INTEGER,
    P_DTRECISAOCONTR   IN DATE DEFAULT SYSDATE,
    P_IDTPEXCLUSAOPARC IN INTEGER DEFAULT 2
) AS

    V_DTRECISAOCONTR DATE;

BEGIN
    IF P_DTRECISAOCONTR IS NULL THEN
        V_DTRECISAOCONTR := SYSDATE;
    ELSE
        V_DTRECISAOCONTR := P_DTRECISAOCONTR;
    END IF;

    /* 1 - Encerra o Contrato */
    UPDATE FCT_CONTRATO
    SET IDSITUACAOCONTRATO = 'E',
       DTRECISAOCONTR      = V_DTRECISAOCONTR,
       DTULTATU            = SYSDATE,
       NRORGULTATU         = P_NRORG,
       CDOPERULTATU        = P_OPERADOR,
       IDATIVO             = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
        AND NRORG       = P_NRORG;

    /* 2 - Deleta as parcelas de faturamento  */
    FCT_CANC_VENCPREV_CONT(P_NRORG, P_NRSEQCONTRATO);

    /* 3 - Inativa a parametrizaAAo de faturamento do Contrato */
    UPDATE FCT_PARAMFATCONT
      SET DTULTATU     = SYSDATE,
          NRORGULTATU  = P_NRORG,
          CDOPERULTATU = P_OPERADOR,
          IDATIVO      = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
      AND NRORG         = P_NRORG;

    /* 4 - Inativa os itens e Adicionais do Contrato */
    UPDATE FCT_ITEMCONTRATO
    SET DTULTATU     = SYSDATE,
        NRORGULTATU  = P_NRORG,
        CDOPERULTATU = P_OPERADOR,
        IDATIVO      = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
      AND NRORG         = P_NRORG;

    /* 5 - Inativa a parametrizaAAo de faturamento dos itens do Contrato */
     UPDATE FCT_PARAMFATITCONT
      SET DTULTATU     = SYSDATE,
          NRORGULTATU  = P_NRORG,
          CDOPERULTATU = P_OPERADOR,
          IDATIVO      = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
      AND NRORG = P_NRORG;

    /* 6 - Inativa os documentos do Contrato */
    UPDATE FCT_CONTRATODOC
    SET DTULTATU        = SYSDATE,
           NRORGULTATU  = P_NRORG,
           CDOPERULTATU = P_OPERADOR,
           IDATIVO      = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
       AND NRORG        = P_NRORG;

    /* 7 - Inativa as parametrizaAAues de Reajuste do Contrato */
    UPDATE FCT_REAJUSTCONTR
    SET DTULTATU     = SYSDATE,
        NRORGULTATU  = P_NRORG,
        CDOPERULTATU = P_OPERADOR,
        IDATIVO      = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
        AND NRORG       = P_NRORG;

    /* 8 - Inativa os indices das parametrizaAAues de Reajuste do Contrato */
    UPDATE FCT_INDICECONTR
    SET DTULTATU     = SYSDATE,
        NRORGULTATU  = P_NRORG,
        CDOPERULTATU = P_OPERADOR,
        IDATIVO      = 'N'
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
      AND NRORG         = P_NRORG;

    /* 9 - manda excluir as parcelas do faturamento novo */
    FCT_EXCLUIR_PARCELAS_FATURA(P_NRSEQCONTRATO, P_NRORG, V_DTRECISAOCONTR, P_IDTPEXCLUSAOPARC);

    /* 10 - Retira o contrato do agrupamento */
    DELETE FROM FCT_RELACAGRUPAMENTOCONT
    WHERE NRSEQCONTRATO = P_NRSEQCONTRATO
        AND NRORG       = P_NRORG;
END;
/