SET DEFINE OFF;

create or replace PROCEDURE ADD_ITEM_OPERACAO_FISCAL_BUSCA (
    p_inserindoItem                IN NUMBER,
    p_cab_origemDocumento          IN NUMBER,
    p_cab_tipoDocumento            IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_finalidadeNota           IN CHAR,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_nfFornecedor             IN NUMBER,
    p_cab_dataEmissao              IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_cab_vendaConsumidor          IN NUMBER,
    p_cab_enderecoEntregaPessoa    IN NUMBER,
    p_cab_localDestinoOperacao     IN CHAR,
    p_cab_indicadorConsumidorFinal IN CHAR,
    p_modDoc_movimentaEstoque      IN NUMBER,
    p_modDoc_geraFinanceiro        IN NUMBER,
    p_munEndEst_uf                 IN CHAR,
    p_pess_indicadorInscricaoEstad IN CHAR,
    p_endPess_enderecoPessoa       IN NUMBER,
    p_munEndPess_uf                IN CHAR,
    p_munEndEntr_uf                IN CHAR,
    p_item_operacaoFiscal          IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_prod_tipoProduto             IN CHAR,
    p_prod_origemMercadoria        IN CHAR,
    p_prod_idNcm                   IN NUMBER,
    p_prod_listaServicos           IN NUMBER,
    p_movimentaEstoque             IN NUMBER,
    p_geraFinanceiro               IN NUMBER,
    p_item_cfop                    IN NUMBER,
    p_atualizarISSQN               IN NUMBER,
    p_item_indicadorISSQN          IN CHAR,
    p_item_aliquotaISSQN           IN NUMBER,
    p_atualizarIRRF                IN NUMBER,
    p_item_aliquotaIRRF            IN NUMBER,
    p_atualizarINSS                IN NUMBER,
    p_item_aliquotaINSS            IN NUMBER,
    p_atualizarRetencaoPIS         IN NUMBER,
    p_item_retencaoPIS             IN NUMBER,
    p_atualizarRetencaoCOFINS      IN NUMBER,
    p_item_retencaoCOFINS          IN NUMBER,
    p_atualizarRetencaoCSLL        IN NUMBER,
    p_item_retencaoCSLL            IN NUMBER,
    p_atualizarII                  IN NUMBER,
    p_item_aliquotaII              IN NUMBER,
    p_atualizarIOF                 IN NUMBER,
    p_item_aliquotaIOF             IN NUMBER,
    p_atualizarIPI                 IN NUMBER,
    p_item_codigoEnquadramentoIPI  IN NUMBER,
    p_item_stIPI                   IN CHAR,
    p_item_aliquotaIPI             IN NUMBER,
    p_item_valorAliquotaIPI        IN NUMBER,
    p_atualizarPIS                 IN NUMBER,
    p_item_stPIS                   IN CHAR,
    p_item_aliquotaPIS             IN NUMBER,
    p_item_valorAliquotaPIS        IN NUMBER,
    p_atualizarPISST               IN NUMBER,
    p_item_aliquotaPISST           IN NUMBER,
    p_item_valorAliquotaPISST      IN NUMBER,
    p_atualizarCOFINS              IN NUMBER,
    p_item_stCOFINS                IN CHAR,
    p_item_aliquotaCOFINS          IN NUMBER,
    p_item_valorAliquotaCOFINS     IN NUMBER,
    p_atualizarCOFINSST            IN NUMBER,
    p_item_aliquotaCOFINSST        IN NUMBER,
    p_item_valorAliquotaCOFINSST   IN NUMBER,
    p_atualizarSimplesNacional     IN NUMBER,
    p_item_stSimplesNacional       IN CHAR,
    p_item_creditoSimplesNacional  IN NUMBER,
    p_atualizarICMS                IN NUMBER,
    p_item_stICMS                  IN CHAR,
    p_item_modalidadeBaseCalcICMS  IN CHAR,
    p_item_reducaoBaseICMS         IN NUMBER,
    p_item_aliquotaICMS            IN NUMBER,
    p_item_diferimentoICMS         IN NUMBER,
    p_item_motivoDesoneracaoICMS   IN CHAR,
    p_item_idBeneficio             IN NUMBER,
    p_atualizarICMSST              IN NUMBER,
    p_item_modalBaseCalcICMSST     IN CHAR,
    p_item_margemValorAdicST       IN NUMBER,
    p_item_reducaoBaseST           IN NUMBER,
    p_item_aliquotaICMSST          IN NUMBER,
    p_atualizarICMSSTAnteriorEfet  IN NUMBER,
    p_item_aliquotaSTSuportConsF   IN NUMBER,
    p_item_reducaoBaseICMSEfetivo  IN NUMBER,
    p_item_aliquotaICMSEfetivo     IN NUMBER,
    p_atualizarICMSEscrituracao    IN NUMBER,
    p_item_stICMSEscrit            IN CHAR,
    p_item_reducaoBaseICMSEscrit   IN NUMBER,
    p_item_aliquotaICMSEscrit      IN NUMBER,
    p_atualizarICMSSTEscrituracao  IN NUMBER,
    p_item_margemValorAdicSTEscrit IN NUMBER,
    p_item_reducaoBaseSTEscrit     IN NUMBER,
    p_item_aliquotaICMSSTEscrit    IN NUMBER,
    p_item_somarICMSST             IN NUMBER,
    p_atualizarDIFAL               IN NUMBER,
    p_item_aliquotaICMSUFDestinat  IN NUMBER,
    p_item_aliquotaICMSInterestad  IN NUMBER,
    p_item_partilhaICMSInterestad  IN NUMBER,
    p_atualizarFCP                 IN NUMBER,
    p_item_aliquotaFCP             IN NUMBER,
    p_item_aliquotaFCPST           IN NUMBER,
    p_item_aliquotaFCPSTAnteriorm  IN NUMBER,
    p_item_aliquotaFCPUFDestinat   IN NUMBER,
    p_atualizarImpostosEstimados   IN NUMBER,
    p_item_aliquotaEstImpFederais  IN NUMBER,
    p_item_aliquotaEstImpEstaduais IN NUMBER,
    p_item_aliquotaEstImpMunicipai IN NUMBER,
    /* Retornos */
    r_encontrouRegistro            OUT NUMBER,
    r_movimentaEstoque             OUT NUMBER,
    r_geraFinanceiro               OUT NUMBER,
    r_item_cfop                    OUT NUMBER,
    r_item_indicadorISSQN          OUT CHAR,
    r_item_aliquotaISSQN           OUT NUMBER,
    r_item_aliquotaIRRF            OUT NUMBER,
    r_item_aliquotaINSS            OUT NUMBER,
    r_item_retencaoPIS             OUT NUMBER,
    r_item_retencaoCOFINS          OUT NUMBER,
    r_item_retencaoCSLL            OUT NUMBER,
    r_item_aliquotaII              OUT NUMBER,
    r_item_aliquotaIOF             OUT NUMBER,
    r_item_codigoEnquadramentoIPI  OUT NUMBER,
    r_item_stIPI                   OUT CHAR,
    r_item_aliquotaIPI             OUT NUMBER,
    r_item_valorAliquotaIPI        OUT NUMBER,
    r_item_stPIS                   OUT CHAR,
    r_item_aliquotaPIS             OUT NUMBER,
    r_item_valorAliquotaPIS        OUT NUMBER,
    r_item_aliquotaPISST           OUT NUMBER,
    r_item_valorAliquotaPISST      OUT NUMBER,
    r_item_stCOFINS                OUT CHAR,
    r_item_aliquotaCOFINS          OUT NUMBER,
    r_item_valorAliquotaCOFINS     OUT NUMBER,
    r_item_aliquotaCOFINSST        OUT NUMBER,
    r_item_valorAliquotaCOFINSST   OUT NUMBER,
    r_item_stSimplesNacional       OUT CHAR,
    r_item_creditoSimplesNacional  OUT NUMBER,
    r_item_stICMS                  OUT CHAR,
    r_item_modalidadeBaseCalcICMS  OUT CHAR,
    r_item_reducaoBaseICMS         OUT NUMBER,
    r_item_aliquotaICMS            OUT NUMBER,
    r_item_diferimentoICMS         OUT NUMBER,
    r_item_motivoDesoneracaoICMS   OUT CHAR,
    r_item_idBeneficio             OUT NUMBER,
    r_item_modalBaseCalcICMSST     OUT CHAR,
    r_item_margemValorAdicST       OUT NUMBER,
    r_item_reducaoBaseST           OUT NUMBER,
    r_item_aliquotaICMSST          OUT NUMBER,
    r_item_aliquotaSTSuportConsF   OUT NUMBER,
    r_item_reducaoBaseICMSEfetivo  OUT NUMBER,
    r_item_aliquotaICMSEfetivo     OUT NUMBER,
    r_item_stICMSEscrit            OUT CHAR,
    r_item_reducaoBaseICMSEscrit   OUT NUMBER,
    r_item_aliquotaICMSEscrit      OUT NUMBER,
    r_item_margemValorAdicSTEscrit OUT NUMBER,
    r_item_reducaoBaseSTEscrit     OUT NUMBER,
    r_item_aliquotaICMSSTEscrit    OUT NUMBER,
    r_item_somarICMSST             OUT NUMBER,
    r_item_aliquotaICMSUFDestinat  OUT NUMBER,
    r_item_aliquotaICMSInterestad  OUT NUMBER,
    r_item_partilhaICMSInterestad  OUT NUMBER,
    r_item_aliquotaFCP             OUT NUMBER,
    r_item_aliquotaFCPST           OUT NUMBER,
    r_item_aliquotaFCPSTAnteriorm  OUT NUMBER,
    r_item_aliquotaFCPUFDestinat   OUT NUMBER,
    r_item_aliquotaEstImpFederais  OUT NUMBER,
    r_item_aliquotaEstImpEstaduais OUT NUMBER,
    r_item_aliquotaEstImpMunicipai OUT NUMBER)    
IS    
    v_auxNumber                    NUMBER;
    v_auxVarchar                   VARCHAR2(60);  
    v_encontouDesoneracao          NUMBER;
    CURSOR c_opFisc IS
      SELECT
        opFisc.contaContabilDebito,
        opFisc.contaContabilCredito,
        opFisc.historicoContabil,
        opFisc.cfop,
        cfop.geraFinanceiro,
        opFisc.indicadorISSQN,
        opFisc.aliquotaISSQN,
        opFisc.aliquotaIRRF,
        opFisc.aliquotaINSS,
        opFisc.retencaoPIS,
        opFisc.retencaoCOFINS,
        opFisc.retencaoCSLL,
        opFisc.aliquotaII,
        opFisc.aliquotaIOF,
        opFisc.codigoEnquadramentoIPI,
        opFisc.stIPI,
        opFisc.aliquotaIPI,
        opFisc.valorAliquotaIPI,
        opFisc.stPIS,
        opFisc.aliquotaPIS,
        opFisc.valorAliquotaPIS,
        opFisc.aliquotaPISST,
        opFisc.valorAliquotaPISST,
        opFisc.stCOFINS,
        opFisc.aliquotaCOFINS,
        opFisc.valorAliquotaCOFINS,
        opFisc.aliquotaCOFINSST,
        opFisc.valorAliquotaCOFINSST,
        opFisc.stSimplesNacional,
        opFisc.creditoSimplesNacional,
        opFisc.stICMS,
        opFisc.modalidadeBaseCalcICMS,
        opFisc.reducaoBaseICMS,
        opFisc.aliquotaICMS,
        opFisc.diferimentoICMS,
        opFisc.motivoDesoneracaoICMS,
        opFisc.idBeneficio,
        opFisc.modalidadeBaseCalcICMSST,
        opFisc.margemValorAdicionadoST,
        opFisc.reducaoBaseST,
        opFisc.aliquotaICMSST,
        opFisc.aliquotaSTSuportConsFinal,
        opFisc.reducaoBaseICMSEfetivo,
        opFisc.aliquotaICMSEfetivo,
        opFisc.aliquotaICMSUFDestinatario,
        opFisc.aliquotaICMSInterestadual,
        opFisc.partilhaICMSInterestadual,
        opFisc.aliquotaFCP,
        opFisc.aliquotaFCPST,
        opFisc.aliquotaFCPSTAnteriormente,
        opFisc.aliquotaFCPUFDestinatario
      FROM PAOPERACOESFISCAIS opFisc
      JOIN SICFOPS cfop ON opFisc.cfop = cfop.cfop
      WHERE opFisc.operacaoFiscal = p_item_operacaoFiscal;
BEGIN
  r_movimentaEstoque             := p_movimentaEstoque;
  r_geraFinanceiro               := p_geraFinanceiro;
  r_item_cfop                    := p_item_cfop;
  r_item_indicadorISSQN          := p_item_indicadorISSQN;
  r_item_aliquotaISSQN           := p_item_aliquotaISSQN;
  r_item_aliquotaIRRF            := p_item_aliquotaIRRF;
  r_item_aliquotaINSS            := p_item_aliquotaINSS;
  r_item_retencaoPIS             := p_item_retencaoPIS;
  r_item_retencaoCOFINS          := p_item_retencaoCOFINS;
  r_item_retencaoCSLL            := p_item_retencaoCSLL;
  r_item_aliquotaII              := p_item_aliquotaII;
  r_item_aliquotaIOF             := p_item_aliquotaIOF;
  r_item_codigoEnquadramentoIPI  := p_item_codigoEnquadramentoIPI;
  r_item_stIPI                   := p_item_stIPI;
  r_item_aliquotaIPI             := p_item_aliquotaIPI;
  r_item_valorAliquotaIPI        := p_item_valorAliquotaIPI;
  r_item_stPIS                   := p_item_stPIS;
  r_item_aliquotaPIS             := p_item_aliquotaPIS;
  r_item_valorAliquotaPIS        := p_item_valorAliquotaPIS;
  r_item_aliquotaPISST           := p_item_aliquotaPISST;
  r_item_valorAliquotaPISST      := p_item_valorAliquotaPISST;
  r_item_stCOFINS                := p_item_stCOFINS;
  r_item_aliquotaCOFINS          := p_item_aliquotaCOFINS;
  r_item_valorAliquotaCOFINS     := p_item_valorAliquotaCOFINS;
  r_item_aliquotaCOFINSST        := p_item_aliquotaCOFINSST;
  r_item_valorAliquotaCOFINSST   := p_item_valorAliquotaCOFINSST;
  r_item_stSimplesNacional       := p_item_stSimplesNacional;
  r_item_creditoSimplesNacional  := p_item_creditoSimplesNacional;
  r_item_stICMS                  := p_item_stICMS;
  r_item_modalidadeBaseCalcICMS  := p_item_modalidadeBaseCalcICMS;
  r_item_reducaoBaseICMS         := p_item_reducaoBaseICMS;
  r_item_aliquotaICMS            := p_item_aliquotaICMS;
  r_item_diferimentoICMS         := p_item_diferimentoICMS;
  r_item_motivoDesoneracaoICMS   := p_item_motivoDesoneracaoICMS;
  r_item_idBeneficio             := p_item_idBeneficio;
  r_item_modalBaseCalcICMSST     := p_item_modalBaseCalcICMSST;
  r_item_margemValorAdicST       := p_item_margemValorAdicST;
  r_item_reducaoBaseST           := p_item_reducaoBaseST;
  r_item_aliquotaICMSST          := p_item_aliquotaICMSST;
  r_item_aliquotaSTSuportConsF   := p_item_aliquotaSTSuportConsF;
  r_item_reducaoBaseICMSEfetivo  := p_item_reducaoBaseICMSEfetivo;
  r_item_aliquotaICMSEfetivo     := p_item_aliquotaICMSEfetivo;
  r_item_stICMSEscrit            := p_item_stICMSEscrit;
  r_item_reducaoBaseICMSEscrit   := p_item_reducaoBaseICMSEscrit;
  r_item_aliquotaICMSEscrit      := p_item_aliquotaICMSEscrit;
  r_item_margemValorAdicSTEscrit := p_item_margemValorAdicSTEscrit;
  r_item_reducaoBaseSTEscrit     := p_item_reducaoBaseSTEscrit;
  r_item_aliquotaICMSSTEscrit    := p_item_aliquotaICMSSTEscrit;
  r_item_somarICMSST             := p_item_somarICMSST;
  r_item_aliquotaICMSUFDestinat  := p_item_aliquotaICMSUFDestinat;
  r_item_aliquotaICMSInterestad  := p_item_aliquotaICMSInterestad;
  r_item_partilhaICMSInterestad  := p_item_partilhaICMSInterestad;
  r_item_aliquotaFCP             := p_item_aliquotaFCP;
  r_item_aliquotaFCPST           := p_item_aliquotaFCPST;
  r_item_aliquotaFCPSTAnteriorm  := p_item_aliquotaFCPSTAnteriorm;
  r_item_aliquotaFCPUFDestinat   := p_item_aliquotaFCPUFDestinat;
  r_item_aliquotaEstImpFederais  := p_item_aliquotaEstImpFederais;
  r_item_aliquotaEstImpEstaduais := p_item_aliquotaEstImpEstaduais;
  r_item_aliquotaEstImpMunicipai := p_item_aliquotaEstImpMunicipai;
  r_encontrouRegistro := 0;
  FOR opFisc IN c_opFisc LOOP
    IF p_cab_origemDocumento NOT IN (4,6,9,10,11,12) OR p_inserindoItem = 1 THEN
      r_movimentaEstoque             := p_modDoc_movimentaEstoque;
    END IF;
    IF p_cab_origemDocumento NOT IN (4,6,9) OR p_inserindoItem = 1 THEN
      r_geraFinanceiro               := CASE WHEN p_modDoc_geraFinanceiro = 1 AND opFisc.geraFinanceiro = 1 THEN 1 ELSE 0 END;
    END IF;
    r_item_cfop                      := opFisc.cfop;
    IF p_atualizarISSQN = 1 THEN
      r_item_indicadorISSQN          := opFisc.indicadorISSQN;
      r_item_aliquotaISSQN           := opFisc.aliquotaISSQN;
    END IF;
    IF p_atualizarIRRF = 1 THEN
      r_item_aliquotaIRRF            := opFisc.aliquotaIRRF;
    END IF;
    IF p_atualizarINSS = 1 THEN
      r_item_aliquotaINSS            := opFisc.aliquotaINSS;
    END IF;
    IF p_atualizarRetencaoPIS = 1 THEN
      r_item_retencaoPIS             := opFisc.retencaoPIS;
    END IF;
    IF p_atualizarRetencaoCOFINS = 1 THEN
      r_item_retencaoCOFINS          := opFisc.retencaoCOFINS;
    END IF;
    IF p_atualizarRetencaoCSLL = 1 THEN
      r_item_retencaoCSLL            := opFisc.retencaoCSLL;
    END IF;
    IF p_atualizarII = 1 THEN
      r_item_aliquotaII              := opFisc.aliquotaII;
    END IF;
    IF p_atualizarIOF = 1 THEN
      r_item_aliquotaIOF             := opFisc.aliquotaIOF;
    END IF;
    IF p_atualizarIPI = 1 THEN
      r_item_codigoEnquadramentoIPI  := opFisc.codigoEnquadramentoIPI;
      r_item_stIPI                   := opFisc.stIPI;
      r_item_aliquotaIPI             := opFisc.aliquotaIPI;
      r_item_valorAliquotaIPI        := opFisc.valorAliquotaIPI;
    END IF;
    IF p_atualizarPIS = 1 THEN
      r_item_stPIS                   := opFisc.stPIS;
      r_item_aliquotaPIS             := opFisc.aliquotaPIS;
      r_item_valorAliquotaPIS        := opFisc.valorAliquotaPIS;
    END IF;
    IF p_atualizarPISST = 1 THEN
      r_item_aliquotaPISST           := opFisc.aliquotaPISST;
      r_item_valorAliquotaPISST      := opFisc.valorAliquotaPISST;
    END IF;
    IF p_atualizarCOFINS = 1 THEN
      r_item_stCOFINS                := opFisc.stCOFINS;
      r_item_aliquotaCOFINS          := opFisc.aliquotaCOFINS;
      r_item_valorAliquotaCOFINS     := opFisc.valorAliquotaCOFINS;
    END IF;
    IF p_atualizarCOFINSST = 1 THEN
      r_item_aliquotaCOFINSST        := opFisc.aliquotaCOFINSST;
      r_item_valorAliquotaCOFINSST   := opFisc.valorAliquotaCOFINSST;
    END IF;
    IF p_atualizarSimplesNacional = 1 THEN
      r_item_stSimplesNacional       := opFisc.stSimplesNacional;
      r_item_creditoSimplesNacional  := opFisc.creditoSimplesNacional;
    END IF;
    IF p_atualizarICMS = 1 THEN
      r_item_stICMS                  := opFisc.stICMS;
      ADD_ITEM_DESON_FISCAL_BUSCA (
        p_cab_tipoDocumento,
        p_cab_entradaSaida,
        p_cab_estabelecimento,
        p_cab_pessoa,
        p_cab_vendaConsumidor,
        p_munEndEst_uf,
        p_munEndPess_uf,
        r_item_stICMS,
        p_gradProd_produto,
        p_prod_origemMercadoria,
        p_prod_idNcm,
        /* Retornos */
        v_encontouDesoneracao,
        r_item_modalidadeBaseCalcICMS,
        r_item_reducaoBaseICMS,
        r_item_aliquotaICMS,
        r_item_diferimentoICMS,
        r_item_motivoDesoneracaoICMS,
        r_item_idBeneficio,
        v_auxNumber);
      IF v_encontouDesoneracao = 0 THEN
        r_item_modalidadeBaseCalcICMS  := opFisc.modalidadeBaseCalcICMS;
        r_item_reducaoBaseICMS         := opFisc.reducaoBaseICMS;
        r_item_aliquotaICMS            := opFisc.aliquotaICMS;
        r_item_diferimentoICMS         := opFisc.diferimentoICMS;
        r_item_motivoDesoneracaoICMS   := opFisc.motivoDesoneracaoICMS;
        r_item_idBeneficio             := opFisc.idBeneficio;
      END IF;
      IF r_item_aliquotaICMS = 0 AND r_item_stICMS in ('00','10','20','70') THEN
        SELECT COALESCE(MAX(aliquotaIcms),0)
        INTO r_item_aliquotaICMS
        FROM SIUFORIGEMXUFDESTINO
        WHERE ufOrigem =
          CASE
            WHEN p_cab_entradaSaida  = 'S'
            OR p_munEndPess_uf          = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_cab_tipoDocumento IN (503,504)
            THEN p_munEndEst_uf
            ELSE p_munEndPess_uf
          END
        AND ufDestino =
          CASE
            WHEN p_cab_entradaSaida  = 'E'
            OR p_munEndPess_uf          = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_cab_tipoDocumento IN (503,504)
            THEN p_munEndEst_uf
            ELSE p_munEndPess_uf
          END;
      END IF;
    END IF;
    IF p_atualizarICMSST              = 1 THEN
      r_item_modalBaseCalcICMSST     := opFisc.modalidadeBaseCalcICMSST;
      r_item_margemValorAdicST       := opFisc.margemValorAdicionadoST;
      r_item_reducaoBaseST           := opFisc.reducaoBaseST;
      r_item_aliquotaICMSST          := opFisc.aliquotaICMSST;
      r_item_somarICMSST             := 1;
    END IF;
    IF p_atualizarICMSSTAnteriorEfet  = 1 THEN
      r_item_aliquotaSTSuportConsF   := opFisc.aliquotaSTSuportConsFinal;
      r_item_reducaoBaseICMSEfetivo  := opFisc.reducaoBaseICMSEfetivo;
      r_item_aliquotaICMSEfetivo     := opFisc.aliquotaICMSEfetivo;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_stICMSEscrit            := CASE WHEN p_cab_nfFornecedor = 1 AND p_prod_tipoProduto IN('07','08') THEN '90' WHEN p_cab_nfFornecedor = 1 AND r_item_stICMS IN('10','30','70') OR p_cab_nfFornecedor = 1 AND r_item_stICMS = ' ' AND r_item_stSimplesNacional IN ('201','202','203') OR r_item_stICMS = ' ' AND r_item_stSimplesNacional = '500' THEN '60' WHEN r_item_stICMS <> ' ' THEN r_item_stICMS WHEN r_item_stSimplesNacional IN ('101','102') AND r_item_reducaoBaseICMS = 0 THEN '00' WHEN r_item_stSimplesNacional IN ('101','102') THEN '20' WHEN r_item_stSimplesNacional IN ('103','300') THEN '40' WHEN r_item_stSimplesNacional IN ('201','202','203') AND r_item_reducaoBaseICMS = 0 THEN '10' WHEN r_item_stSimplesNacional IN ('201','202','203') THEN '70' WHEN r_item_stSimplesNacional = '400' THEN '41' ELSE '90' END;
      r_item_reducaoBaseICMSEscrit   := CASE WHEN p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','70') OR r_item_stICMS = ' ' AND r_item_stSimplesNacional IN ('201','202','203')) OR r_item_stICMS = ' ' AND r_item_stSimplesNacional = '500' THEN 0 WHEN r_item_stICMS <> ' ' THEN r_item_reducaoBaseICMS ELSE 0 END;
      r_item_aliquotaICMSEscrit      := CASE WHEN p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','70') OR r_item_stICMS = ' ' AND r_item_stSimplesNacional IN ('201','202','203')) OR r_item_stICMS = ' ' AND r_item_stSimplesNacional = '500' THEN 0 WHEN r_item_stICMS <> ' ' THEN r_item_aliquotaICMS WHEN r_item_stSimplesNacional IN ('101','201') THEN r_item_creditoSimplesNacional ELSE 0 END;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_margemValorAdicSTEscrit := CASE WHEN r_item_stICMS = ' ' OR p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','60','70')) THEN 0 ELSE r_item_margemValorAdicST END;
      r_item_reducaoBaseSTEscrit     := CASE WHEN r_item_stICMS = ' ' OR p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','60','70')) THEN 0 ELSE r_item_reducaoBaseST END;
      r_item_aliquotaICMSSTEscrit    := CASE WHEN r_item_stICMS = ' ' OR p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','60','70')) THEN 0 ELSE r_item_aliquotaICMSST END;
    END IF;
    IF p_atualizarDIFAL                 = 1 THEN
      IF p_cab_entradaSaida='S'
        AND NOT(p_cab_finalidadeNota IN('2','3'))
        AND p_cab_localDestinoOperacao = '2'
        AND p_cab_indicadorConsumidorFinal = '1'
        AND p_pess_indicadorInscricaoEstad = '9'
        AND (p_cab_pessoa = 0
          OR p_cab_vendaConsumidor = 1
          OR p_cab_enderecoEntregaPessoa = p_endPess_enderecoPessoa
          OR p_munEndEntr_uf <> p_munEndEst_uf)
        AND NOT (r_item_cfop IN(6552,6922,6929))
        AND (p_prod_tipoProduto <> '09'
          OR NOT (r_item_indicadorISSQN IN('1','2','3','4','5','6','7')))
        AND NOT(r_item_stSimplesNacional IN('103','300','400'))
        AND NOT(r_item_stICMS IN('10','40','41','90')) THEN
        r_item_aliquotaICMSUFDestinat  := opFisc.aliquotaICMSUFDestinatario;
        r_item_aliquotaICMSInterestad  := opFisc.aliquotaICMSInterestadual;
        r_item_partilhaICMSInterestad  := opFisc.partilhaICMSInterestadual;
        IF r_item_aliquotaICMSUFDestinat = 0
          AND r_item_aliquotaICMSInterestad = 0
          AND r_item_partilhaICMSInterestad = 0
          AND (r_item_stSimplesNacional = ''
            OR r_item_stSimplesNacional = ' '
            OR r_item_stSimplesNacional = '  '
            OR r_item_stSimplesNacional = '   ') THEN
          SELECT COALESCE(MAX(aliquotaIcms),0)
          INTO r_item_aliquotaICMSUFDestinat
          FROM SIUFORIGEMXUFDESTINO
          WHERE ufOrigem = p_munEndPess_uf
          AND ufDestino = p_munEndPess_uf;
          IF p_prod_origemMercadoria = '0' THEN
            SELECT COALESCE(MAX(aliquotaIcms),0)
            INTO r_item_aliquotaICMSInterestad
            FROM SIUFORIGEMXUFDESTINO
            WHERE ufOrigem = p_munEndEst_uf
            AND ufDestino = p_munEndPess_uf;
          ELSE
            r_item_aliquotaICMSInterestad  := 4;
          END IF;
          r_item_partilhaICMSInterestad  := 100;
        END IF;
      ELSE
        r_item_aliquotaICMSUFDestinat  := 0;
        r_item_aliquotaICMSInterestad  := 0;
        r_item_partilhaICMSInterestad  := 0;
      END IF;
    END IF;
    IF p_atualizarFCP                 = 1 THEN
      r_item_aliquotaFCP             := opFisc.aliquotaFCP;
      r_item_aliquotaFCPST           := opFisc.aliquotaFCPST;
      r_item_aliquotaFCPSTAnteriorm  := opFisc.aliquotaFCPSTAnteriormente;
      r_item_aliquotaFCPUFDestinat   := opFisc.aliquotaFCPUFDestinatario;
    END IF;
    r_encontrouRegistro              := 1;
  END LOOP;
  
  IF r_encontrouRegistro              = 1 THEN
    IF p_atualizarImpostosEstimados   = 1 THEN
      r_item_aliquotaEstImpFederais  := 0;
      r_item_aliquotaEstImpEstaduais := 0;
      r_item_aliquotaEstImpMunicipai := 0;
      
      IF p_cab_entradaSaida = 'S' AND p_cab_devolucaoAnulacaoRetorno = 0 THEN
        ADD_BUSCA_IBPT (
          p_cab_dataEmissao,
          p_munEndEst_uf,
          p_prod_origemMercadoria,
          p_prod_idNcm,
          p_prod_listaServicos,
          /* Retornos */
          v_auxNumber,
          v_auxNumber,
          r_item_aliquotaEstImpFederais,
          r_item_aliquotaEstImpEstaduais,
          r_item_aliquotaEstImpMunicipai,
          v_auxVarchar,
          v_auxVarchar,
          v_auxVarchar
        );
      END IF;
    END IF;
  ELSE
    IF p_cab_origemDocumento NOT IN (4,6,9,10,11,12) THEN
      r_movimentaEstoque             := p_modDoc_movimentaEstoque;
      r_geraFinanceiro               := p_modDoc_geraFinanceiro;
    END IF;
    r_item_cfop                      := 0;
    IF p_atualizarISSQN               = 1 THEN
      r_item_indicadorISSQN          := ' ';
      r_item_aliquotaISSQN           := 0;
    END IF;
    IF p_atualizarIRRF                = 1 THEN
      r_item_aliquotaIRRF            := 0;
    END IF;
    IF p_atualizarINSS                = 1 THEN
      r_item_aliquotaINSS            := 0;
    END IF;
    IF p_atualizarRetencaoPIS         = 1 THEN
      r_item_retencaoPIS             := 0;
    END IF;
    IF p_atualizarRetencaoCOFINS      = 1 THEN
      r_item_retencaoCOFINS          := 0;
    END IF;
    IF p_atualizarRetencaoCSLL        = 1 THEN
      r_item_retencaoCSLL            := 0;
    END IF;
    IF p_atualizarII                  = 1 THEN
      r_item_aliquotaII              := 0;
    END IF;
    IF p_atualizarIOF                 = 1 THEN
      r_item_aliquotaIOF             := 0;
    END IF;
    IF p_atualizarIPI                 = 1 THEN
      r_item_codigoEnquadramentoIPI  := 0;
      r_item_stIPI                   := '  ';
      r_item_aliquotaIPI             := 0;
      r_item_valorAliquotaIPI        := 0;
    END IF;
    IF p_atualizarPIS                 = 1 THEN
      r_item_stPIS                   := '  ';
      r_item_aliquotaPIS             := 0;
      r_item_valorAliquotaPIS        := 0;
    END IF;
    IF p_atualizarPISST               = 1 THEN
      r_item_aliquotaPISST           := 0;
      r_item_valorAliquotaPISST      := 0;
    END IF;
    IF p_atualizarCOFINS              = 1 THEN
      r_item_stCOFINS                := '  ';
      r_item_aliquotaCOFINS          := 0;
      r_item_valorAliquotaCOFINS     := 0;
    END IF;
    IF p_atualizarCOFINSST            = 1 THEN
      r_item_aliquotaCOFINSST        := 0;
      r_item_valorAliquotaCOFINSST   := 0;
    END IF;
    IF p_atualizarSimplesNacional     = 1 THEN
      r_item_stSimplesNacional       := '   ';
      r_item_creditoSimplesNacional  := 0;
    END IF;
    IF p_atualizarICMS                = 1 THEN
      r_item_stICMS                  := '  ';
      r_item_modalidadeBaseCalcICMS  := ' ';
      r_item_reducaoBaseICMS         := 0;
      r_item_aliquotaICMS            := 0;
      r_item_diferimentoICMS         := 0;
      r_item_motivoDesoneracaoICMS   := '  ';
      r_item_idBeneficio             := 0;
    END IF;
    IF p_atualizarICMSST              = 1 THEN
      r_item_modalBaseCalcICMSST     := ' ';
      r_item_margemValorAdicST       := 0;
      r_item_reducaoBaseST           := 0;
      r_item_aliquotaICMSST          := 0;
      r_item_somarICMSST             := 0;
    END IF;
    IF p_atualizarICMSSTAnteriorEfet  = 1 THEN
      r_item_aliquotaSTSuportConsF   := 0;
      r_item_reducaoBaseICMSEfetivo  := 0;
      r_item_aliquotaICMSEfetivo     := 0;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_stICMSEscrit            := '  ';
      r_item_reducaoBaseICMSEscrit   := 0;
      r_item_aliquotaICMSEscrit      := 0;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_margemValorAdicSTEscrit := 0;
      r_item_reducaoBaseSTEscrit     := 0;
      r_item_aliquotaICMSSTEscrit    := 0;
    END IF;
    IF p_atualizarDIFAL               = 1 THEN
      r_item_aliquotaICMSUFDestinat  := 0;
      r_item_aliquotaICMSInterestad  := 0;
      r_item_partilhaICMSInterestad  := 0;
    END IF;
    IF p_atualizarFCP                 = 1 THEN
      r_item_aliquotaFCP             := 0;
      r_item_aliquotaFCPST           := 0;
      r_item_aliquotaFCPSTAnteriorm  := 0;
      r_item_aliquotaFCPUFDestinat   := 0;
    END IF;
    IF p_atualizarImpostosEstimados   = 1 THEN
      r_item_aliquotaEstImpFederais  := 0;
      r_item_aliquotaEstImpEstaduais := 0;
      r_item_aliquotaEstImpMunicipai := 0;
    END IF;
  END IF;
END ADD_ITEM_OPERACAO_FISCAL_BUSCA;

/

UPDATE SICONFIGURACOES SET conteudoSugestao = 'C' WHERE configuracao = 377;

COMMIT;

UPDATE SICFOPS SET cfopSt = 1949, cfopDevolucaoRetorno = 1949, cfopEntrada = 1949, cfopEntradaIndustrializacao = 1949, cfopEntradaUsoConsumo = 1949 WHERE cfop = 5949;
UPDATE SICFOPS SET cfopSt = 2949, cfopDevolucaoRetorno = 2949, cfopEntrada = 2949, cfopEntradaIndustrializacao = 2949, cfopEntradaUsoConsumo = 2949 WHERE cfop = 6949;

COMMIT;

INSERT INTO SIVERSOESSISTEMA (idVersaoSistema, versaoAplicativo, dataLiberacaoVersao, possuiConversaoTabelas, atualizada, dataAtualizacaoVersao, observacoes) VALUES (2022002024, '2022.2.24', sysdate, 1, 1, sysdate, ' ');

COMMIT;

--exec dbms_utility.compile_schema('ADDERI');
--exec dbms_stats.gather_schema_stats('ADDERI');

/*
*/