BEGIN
  r_calcularImpostos := p_calcularImpostos;
  r_item_idItemDocFiscal := p_item_idItemDocFiscal;
  r_buffer_idItemDocFiscal := p_buffer_idItemDocFiscal;
  r_valorInserido := 0;
  SELECT
    capituloNaturezaFiscal,
    movimentaEstoque,
    geraFinanceiro,
    tipoPreco,
    tabelaPreco,
    fatorMultiplicadorPreco,
    tipoPrecoB,
    tabelaPrecoB,
    fatorMultiplicadorPrecoB,
    diminuiDescontoPrUnit,
    somaAcrescimosPrUnit,
    somaFreteSeguroPrUnit
  INTO
    v_modDoc_capituloNatFiscal,
    v_modDoc_movimentaEstoque,
    v_modDoc_geraFinanceiro,
    v_modDoc_tipoPreco,
    v_modDoc_tabelaPreco,
    v_modDoc_fatorMultipPreco,
    v_modDoc_tipoPrecoB,
    v_modDoc_tabelaPrecoB,
    v_modDoc_fatorMultipPrecoB,
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit
  FROM PAMODELOSDOCUMENTO
  WHERE modeloDocumento = p_item_modeloDocumento;
  SELECT
    cab.origemDocumento,
    cab.tipoDocumento,
    cab.entradaSaida,
    cab.devolucaoAnulacaoRetorno,
    cab.finalidadeNota,
    cab.atualizaCustoMedio,
    cab.nfFornecedor,
    cab.documentoFiscal,
    cab.estabelecimento,
    cab.dataEmissao,
    cab.pessoa,
    cab.vendaConsumidor,
    cab.enderecoEntregaPessoa,
    cab.municipioFatoGerador,
    cab.localDestinoOperacao,
    cab.indicadorConsumidorFinal,
    cab.projeto,
    cab.modalidadeFrete,
    cab.tipoPagamentoFrete,
    cab.situacaoDocumentoFiscal,
    cab.ultimoVendedorItem,
    cab.quantidadeVolume,
    cab.quantidade,
    cab.pesoLiquido,
    cab.pesoBruto,
    cab.valorProdutosBruto,
    cab.valorProdutos,
    cab.valorDescontoProdutos,
    cab.valorAcrescimoProdutos,
    cab.valorServicosBruto,
    cab.valorServicos,
    cab.valorDescontoServicos,
    cab.valorAcrescimoServicos,
    cab.valorFreteItem,
    cab.valorSeguroItem,
    cab.valorAdicFreteMarinhaMerItem,
    cab.valorDespesasAduaneirasItem,
    cab.valorFreteGeral,
    cab.valorSeguroGeral,
    cab.valorDescontoGeral,
    cab.valorOutrasDespesasGeral,
    cab.valorAdicFreteMarinhaMerGeral,
    cab.valorDespesasAduaneirasGeral,
    cab.condicaoPagamento,
    cab.numeroParcelas,
    cab.somaPrazoParcelas,
    cab.valorXPrazoParcelas,
    cab.prazoMedio,
    cab.prazoMedioPonderado,
    cab.valorBasePagamento,
    cab.valorAVistaMinimo,
    cab.valorEntradaMinima,
    cab.valorAVistaEntrada,
    cab.valorPagamentoBruto,
    cab.valorDescontoPagamento,
    cab.valorOutrasDespesasPagamento,
    cab.valorJurosPagamento,
    cab.valorPagamentoLiquido,
    cab.valorTroco,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorDescontoTotal,
    cab.valorOutrasDespesasTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    cab.valorDescontoCustoOpItem,
    cab.valorDescontoCustoOpGeral,
    cab.valorDescontoCustoOpTotal,
    cab.valorAcrescimoCustoOpItem,
    cab.valorAcrescimoCustoOpGeral,
    cab.valorAcrescimoCustoOpTotal,
    cab.valorCustoOperacao,
    cab.valorCMV,
    cab.quantidadeExtemporanea,
    cab.valorAcrescimoExtempSubtotal,
    cab.valorAcrescimoExtempItem,
    cab.valorAcrescimoExtempGeral,
    cab.valorAcrescimoExtempTotal,
    est.grupoFiscal,
    COALESCE (pessEst.regimeTributario, ' '),
    COALESCE ((
      SELECT MIN(munEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEst
      ON munEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1), '  '),
    pess.indicadorInscricaoEstadual,
    COALESCE ((
      SELECT MIN(enderecoPessoa)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), 0),
    COALESCE ((
      SELECT MIN(munPess.uf)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), '  '),
    munEndEntr.uf
  INTO
    v_cab_origemDocumento,
    v_cab_tipoDocumento,
    v_cab_entradaSaida,
    v_cab_devolucaoAnulacaoRetorno,
    v_cab_finalidadeNota,
    v_cab_atualizaCustoMedio,
    v_cab_nfFornecedor,
    v_cab_documentoFiscal,
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_pessoa,
    v_cab_vendaConsumidor,
    v_cab_enderecoEntregaPessoa,
    v_cab_municipioFatoGerador,
    v_cab_localDestinoOperacao,
    v_cab_indicadorConsumidorFinal,
    v_cab_projeto,
    v_cab_modalidadeFrete,
    v_cab_tipoPagamentoFrete,
    v_cab_situacaoDocumentoFiscal,
    v_cab_ultimoVendedorItem,
    v_cab_quantidadeVolume,
    v_cab_quantidade,
    v_cab_pesoLiquido,
    v_cab_pesoBruto,
    v_cab_valorProdutosBruto,
    v_cab_valorProdutos,
    v_cab_valorDescontoProdutos,
    v_cab_valorAcrescimoProdutos,
    v_cab_valorServicosBruto,
    v_cab_valorServicos,
    v_cab_valorDescontoServicos,
    v_cab_valorAcrescimoServicos,
    v_cab_valorFreteItem,
    v_cab_valorSeguroItem,
    v_cab_valorAdicFreteMarItem,
    v_cab_valorDespesasAduanItem,
    v_cab_valorFreteGeral,
    v_cab_valorSeguroGeral,
    v_cab_valorDescontoGeral,
    v_cab_valorOutrasDespesasGeral,
    v_cab_valorAdicFreteMarGeral,
    v_cab_valorDespesasAduanGeral,
    v_cab_condicaoPagamento,
    v_cab_numeroParcelas,
    v_cab_somaPrazoParcelas,
    v_cab_valorXPrazoParcelas,
    v_cab_prazoMedio,
    v_cab_prazoMedioPonderado,
    v_cab_valorBasePagamento,
    v_cab_valorAVistaMinimo,
    v_cab_valorEntradaMinima,
    v_cab_valorAVistaEntrada,
    v_cab_valorPagamentoBruto,
    v_cab_valorDescontoPagamento,
    v_cab_valorOutrasDespPagamento,
    v_cab_valorJurosPagamento,
    v_cab_valorPagamentoLiquido,
    v_cab_valorTroco,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorDescontoTotal,
    v_cab_valorOutrasDespesasTotal,
    v_cab_valorAdicFreteMarTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_cab_valorDescontoCustoOpItem,
    v_cab_valorDescontoCustoOpGera,
    v_cab_valorDescontoCustoOpTota,
    v_cab_valorAcrescimoCustoOpIte,
    v_cab_valorAcrescimoCustoOpGer,
    v_cab_valorAcrescimoCustoOpTot,
    v_cab_valorCustoOperacao,
    v_cab_valorCMV,
    v_cab_quantidadeExtemporanea,
    v_cab_valorAcrescimoExtempSubt,
    v_cab_valorAcrescimoExtempItem,
    v_cab_valorAcrescimoExtempGera,
    v_cab_valorAcrescimoExtempTota,
    v_est_grupoFiscal,
    v_pessEst_regimeTributario,
    v_munEndEst_uf,
    v_pess_indicadorInscricaoEstad,
    v_endPess_enderecoPessoa,
    v_munEndPess_uf,
    v_munEndEntr_uf
  FROM MODOCUMENTOSFISCAIS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAPESSOAS pess
  ON pess.pessoa = cab.pessoa
  JOIN CAENDERECOSPESSOA endEntr
  ON endEntr.enderecoPessoa = cab.enderecoEntregaPessoa
  JOIN SIMUNICIPIOS munEndEntr
  ON munEndEntr.municipio = endEntr.municipio
  WHERE cab.idDocumentoFiscal = p_item_idDocumentoFiscal;
  v_ini_cab_valorFreteItem := v_cab_valorFreteItem;
  v_ini_cab_valorFreteGeral := v_cab_valorFreteGeral;
  SELECT
    diminuiDescontoPrUnit,
    somaAcrescimosPrUnit,
    somaFreteSeguroPrUnit
  INTO
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit
  FROM PAMODELOSDOCUMENTO
  WHERE modeloDocumento = p_item_modeloDocumento;
  SELECT
    gradProd.produto,
    gradProd.cor,
    gradProd.tamanho,
    prod.controleEstoque,
    prod.tipoProduto,
    prod.origemMercadoria,
    prod.idNcm,
    prod.listaServicos,
    prod.precoPautaTabelado,
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        WHERE comp.produto = gradProd.produto
        AND comp.ativo = 1)
      THEN 1
      ELSE 0
    END
  INTO
    v_gradProd_produto,
    v_gradProd_cor,
    v_gradProd_tamanho,
    v_prod_controleEstoque,
    v_prod_tipoProduto,
    v_prod_origemMercadoria,
    v_prod_idNcm,
    v_prod_listaServicos,
    v_prod_precoPautaTabelado,
    v_prod_composicaoPreco
  FROM CAGRADESPRODUTO gradProd
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  WHERE gradProd.gradeProduto = p_item_gradeProduto;
  v_inserindoItem                := 1;
  v_cab_promocaoExiste           := 0;
  v_item_cancelado               := 0;
  v_ini_gradeProduto             := 0;
  v_ini_personalizacao           := 0;
  v_ini_operacaoFiscal           := 0;
  v_ini_quantidade               := 0;
  v_ini_valorFreteTotal          := 0;
  v_ini_valorProdutoServicoBruto := 0;
  v_ini_valorProdutoServico      := 0;
  v_ini_valorDescontoItem        := 0;
  v_ini_valorAcrescimoItem       := 0;
  v_ini_valorBasePagamento       := 0;
  v_ini_valorFreteTotal          := 0;
  v_ini_valorSeguroTotal         := 0;
  v_ini_valorDescontoTotal       := 0;
  v_ini_valorOutrasDespesasTotal := 0;
  v_ini_valorAdicFreteMarTotal   := 0;
  v_ini_valorDespesasAduanTotal  := 0;
  v_item_quantidadeDevolvidaRet  := 0;
  v_item_precoUnitario           := p_item_precoUnitario;
  v_item_valorProdutoServicoBrut := ROUND (p_item_Quantidade * CASE WHEN v_modDoc_diminuiDescontoPrUnit = 1 OR v_modDoc_somaAcrescimosPrUnit = 1 OR v_modDoc_somaFreteSeguroPrUnit = 1 OR v_prod_composicaoPreco = 1 THEN p_item_precoUnitarioBruto ELSE p_item_precoUnitario END, 2);
  v_item_valorProdutoServico     := ROUND (p_item_Quantidade * p_item_precoUnitario, 2);
  v_item_valorDescontoGeral      := p_item_valorDescontoGeral;
  v_item_valorDescontoPagamento  := p_item_valorDescontoPagamento;
  v_item_valorOutrasDespPagament := p_item_valorOutrasDespPagament;
  v_item_valorJurosPagamento     := p_item_valorJurosPagamento;
  v_item_movimentaEstoque        := p_item_movimentaEstoque;
  v_item_movimentaEstoqueFiscal  := p_item_movimentaEstoqueFiscal;
  v_item_geraFinanceiro          := p_item_geraFinanceiro;
  v_item_cfop                    := p_item_cfop;
  v_item_indicadorISSQN          := p_item_indicadorISSQN;
  v_item_aliquotaISSQN           := p_item_aliquotaISSQN;
  v_item_retidoISSQN             := p_item_retidoISSQN;
  v_item_tributadoForaMunicipio  := p_item_tributadoForaMunicipio;
  v_item_incentivoFiscal         := p_item_incentivoFiscal;
  v_item_listaServicos           := p_item_listaServicos;
  v_item_cnae                    := p_item_cnae;
  v_item_idServicoMunicipio      := p_item_idServicoMunicipio;
  v_item_numeroProcessoAdministr := p_item_numeroProcessoAdministr;
  v_item_retencaoIRRF            := p_item_retencaoIRRF;
  v_item_retencaoINSS            := p_item_retencaoINSS;
  v_item_retencaoPIS             := p_item_retencaoPIS;
  v_item_retencaoCOFINS          := p_item_retencaoCOFINS;
  v_item_retencaoCSLL            := p_item_retencaoCSLL;
  v_item_retencaoOutros          := p_item_retencaoOutros;
  v_item_aliquotaII              := p_item_aliquotaII;
  v_item_aliquotaIOF             := p_item_aliquotaIOF;
  v_item_codigoEnquadramentoIPI  := p_item_codigoEnquadramentoIPI;
  v_item_stIPI                   := p_item_stIPI;
  v_item_aliquotaIPI             := p_item_aliquotaIPI;
  v_item_valorAliquotaIPI        := p_item_valorAliquotaIPI;
  v_item_stPIS                   := p_item_stPIS;
  v_item_aliquotaPIS             := p_item_aliquotaPIS;
  v_item_valorAliquotaPIS        := p_item_valorAliquotaPIS;
  v_item_aliquotaPISST           := p_item_aliquotaPISST;
  v_item_valorAliquotaPISST      := p_item_valorAliquotaPISST;
  v_item_stCOFINS                := p_item_stCOFINS;
  v_item_aliquotaCOFINS          := p_item_aliquotaCOFINS;
  v_item_valorAliquotaCOFINS     := p_item_valorAliquotaCOFINS;
  v_item_aliquotaCOFINSST        := p_item_aliquotaCOFINSST;
  v_item_valorAliquotaCOFINSST   := p_item_valorAliquotaCOFINSST;
  v_item_stSimplesNacional       := p_item_stSimplesNacional;
  v_item_creditoSimplesNacional  := p_item_creditoSimplesNacional;
  v_item_stICMS                  := p_item_stICMS;
  v_item_modalBaseCalcICMS       := p_item_modalBaseCalcICMS;
  v_item_reducaoBaseICMS         := p_item_reducaoBaseICMS;
  v_item_aliquotaICMS            := p_item_aliquotaICMS;
  v_item_diferimentoICMS         := p_item_diferimentoICMS;
  v_item_motivoDesoneracaoICMS   := p_item_motivoDesoneracaoICMS;
  v_item_idBeneficio             := p_item_idBeneficio;
  v_item_modalBaseCalcICMSST     := p_item_modalBaseCalcICMSST;
  v_item_margemValorAdicionadoST := p_item_margemValorAdicionadoST;
  v_item_reducaoBaseST           := p_item_reducaoBaseST;
  v_item_aliquotaICMSST          := p_item_aliquotaICMSST;
  v_item_aliquotaSTSuportConsFin := p_item_aliquotaSTSuportConsFin;
  v_item_reducaoBaseICMSEfetivo  := p_item_reducaoBaseICMSEfetivo;
  v_item_aliquotaICMSEfetivo     := p_item_aliquotaICMSEfetivo;
  v_item_stICMSEscrituracao      := p_item_stICMSEscrituracao;
  v_item_reducaoBaseICMSEscritur := p_item_reducaoBaseICMSEscritur;
  v_item_aliquotaICMSEscrituraca := p_item_aliquotaICMSEscrituraca;
  v_item_diferimentoICMSEscritur := p_item_diferimentoICMSEscritur;
  v_item_margemValorAdicSTEscrit := p_item_margemValorAdicSTEscrit;
  v_item_reducaoBaseSTEscriturac := p_item_reducaoBaseSTEscriturac;
  v_item_aliquotaICMSSTEscritura := p_item_aliquotaICMSSTEscritura;
  v_item_somarICMSST             := p_item_somarICMSST;
  v_item_aliquotaICMSUFDestinat  := p_item_aliquotaICMSUFDestinat;
  v_item_aliquotaICMSInterestad  := p_item_aliquotaICMSInterestad;
  v_item_partilhaICMSInterestad  := p_item_partilhaICMSInterestad;
  v_item_aliquotaFCP             := p_item_aliquotaFCP;
  v_item_aliquotaFCPST           := p_item_aliquotaFCPST;
  v_item_aliquotaFCPSTAnteriorm  := p_item_aliquotaFCPSTAnteriorm;
  v_item_aliquotaFCPUFDestinat   := p_item_aliquotaFCPUFDestinat;
  v_item_aliquotaEstImpFederais  := p_item_aliquotaEstImpFederais;
  v_item_aliquotaEstImpEstaduais := p_item_aliquotaEstImpEstaduais;
  v_item_aliquotaEstImpMunicipai := p_item_aliquotaEstImpMunicipai;
  v_item_baseISSQN               := p_item_baseISSQN;
  v_item_valorISSQN              := p_item_valorISSQN;
  v_item_baseRetIRRF             := p_item_baseRetIRRF;
  v_item_valorRetIRRF            := p_item_valorRetIRRF;
  v_item_baseRetINSS             := p_item_baseRetINSS;
  v_item_valorRetINSS            := p_item_valorRetINSS;
  v_item_baseRetPIS              := p_item_baseRetPIS;
  v_item_valorRetPIS             := p_item_valorRetPIS;
  v_item_baseRetCOFINS           := p_item_baseRetCOFINS;
  v_item_valorRetCOFINS          := p_item_valorRetCOFINS;
  v_item_baseRetCSLL             := p_item_baseRetCSLL;
  v_item_valorRetCSLL            := p_item_valorRetCSLL;
  v_item_baseRetOutros           := p_item_baseRetOutros;
  v_item_valorRetOutros          := p_item_valorRetOutros;
  v_item_baseII                  := p_item_baseII;
  v_item_valorII                 := p_item_valorII;
  v_item_baseIOF                 := p_item_baseIOF;
  v_item_valorIOF                := p_item_valorIOF;
  v_item_baseIPI                 := p_item_baseIPI;
  v_item_valorIPI                := p_item_valorIPI;
  v_item_basePIS                 := p_item_basePIS;
  v_item_valorPIS                := p_item_valorPIS;
  v_item_basePISST               := p_item_basePISST;
  v_item_valorPISST              := p_item_valorPISST;
  v_item_baseCOFINS              := p_item_baseCOFINS;
  v_item_valorCOFINS             := p_item_valorCOFINS;
  v_item_baseCOFINSST            := p_item_baseCOFINSST;
  v_item_valorCOFINSST           := p_item_valorCOFINSST;
  v_item_baseCreditoSimplesNac   := p_item_baseCreditoSimplesNac;
  v_item_valorCreditoSimplesNac  := p_item_valorCreditoSimplesNac;
  v_item_baseICMS                := p_item_baseICMS;
  v_item_valorICMSOperacao       := p_item_valorICMSOperacao;
  v_item_valorICMSDiferido       := p_item_valorICMSDiferido;
  v_item_valorICMS               := p_item_valorICMS;
  v_item_valorICMSDesoneracao    := p_item_valorICMSDesoneracao;
  v_item_baseICMSST              := p_item_baseICMSST;
  v_item_valorICMSST             := p_item_valorICMSST;
  v_item_baseICMSSTAnteriormente := p_item_baseICMSSTAnteriormente;
  v_item_valorICMSSTAnteriorment := p_item_valorICMSSTAnteriorment;
  v_item_valorICMSProprioSubstit := p_item_valorICMSProprioSubstit;
  v_item_baseICMSEfetivo         := p_item_baseICMSEfetivo;
  v_item_valorICMSEfetivo        := p_item_valorICMSEfetivo;
  v_item_baseICMSEscrituracao    := p_item_baseICMSEscrituracao;
  v_item_valorICMSEscrituracao   := p_item_valorICMSEscrituracao;
  v_item_valorICMSDesonEscritura := p_item_valorICMSDesonEscritura;
  v_item_baseICMSSTEscrituracao  := p_item_baseICMSSTEscrituracao;
  v_item_valorICMSSTEscrituracao := p_item_valorICMSSTEscrituracao;
  v_item_baseICMSUFDestinatario  := p_item_baseICMSUFDestinatario;
  v_item_valorICMSUFDestinatario := p_item_valorICMSUFDestinatario;
  v_item_baseICMSUFRemetente     := p_item_baseICMSUFRemetente;
  v_item_valorICMSUFRemetente    := p_item_valorICMSUFRemetente;
  v_item_baseFCP                 := p_item_baseFCP;
  v_item_valorFCP                := p_item_valorFCP;
  v_item_baseFCPST               := p_item_baseFCPST;
  v_item_valorFCPST              := p_item_valorFCPST;
  v_item_baseFCPSTAnteriormente  := p_item_baseFCPSTAnteriormente;
  v_item_valorFCPSTAnteriormente := p_item_valorFCPSTAnteriormente;
  v_item_baseFCPUFDestinatario   := p_item_baseFCPUFDestinatario;
  v_item_valorFCPUFDestinatario  := p_item_valorFCPUFDestinatario;
  v_item_baseEstimadaImpostos    := p_item_baseEstimadaImpostos;
  v_item_valorEstImpFederais     := p_item_valorEstImpFederais;
  v_item_valorEstImpEstaduais    := p_item_valorEstImpEstaduais;
  v_item_valorEstImpMunicipais   := p_item_valorEstImpMunicipais;
  IF p_manterFinanceiro_Retotalizar = 0 THEN
    SELECT COALESCE (MAX(1), 0)
    INTO v_cab_promocaoExiste
    FROM MODOCFISCALXPROMOCOES
    WHERE idDocumentoFiscal = p_item_idDocumentoFiscal;
  END IF;
  IF p_item_idItemDocFiscal > 0 THEN
    FOR a IN (
      SELECT
        a.sequencia,
        a.cancelado,
        a.gradeProduto,
        a.personalizacao,
        a.usarPrecoAVista,
        a.controleQuantidade,
        a.loteMultiplo,
        a.quantidade,
        a.quantidadeConvertida,
        a.quantidadeDevolvidaRetornada,
        a.pesoLiquido,
        a.pesoBruto,
        a.valorProdutoServicoBruto,
        a.valorProdutoServico,
        a.valorDescontoItem,
        a.valorAcrescimoItem,
        a.valorFreteItem,
        a.valorSeguroItem,
        a.valorAdicFreteMarinhaMerItem,
        a.valorDespesasAduaneirasItem,
        a.quantidadeExtemporanea,
        a.valorAcrescimoExtempSubtotal,
        a.valorAcrescimoExtempItem,
        a.valorDescontoCustoOpItem,
        a.valorAcrescimoCustoOpItem,
        a.valorFreteGeral,
        a.valorSeguroGeral,
        a.valorDescontoGeral,
        a.valorOutrasDespesasGeral,
        a.valorAdicFreteMarinhaMerGeral,
        a.valorDespesasAduaneirasGeral,
        a.valorAcrescimoExtempGeral,
        a.valorDescontoCustoOpGeral,
        a.valorAcrescimoCustoOpGeral,
        a.valorDescontoPagamento,
        a.valorOutrasDespesasPagamento,
        a.valorJurosPagamento,
        a.valorFreteTotal,
        a.valorSeguroTotal,
        a.valorDescontoTotal,
        a.valorOutrasDespesasTotal,
        a.valorAdicFreteMarinhaMerTotal,
        a.valorDespesasAduaneirasTotal,
        a.valorAcrescimoExtempTotal,
        a.valorDescontoCustoOpTotal,
        a.valorAcrescimoCustoOpTotal,
        a.operacaoFiscal,
        a.movimentaEstoque,
        a.movimentaEstoqueFiscal,
        a.geraFinanceiro,
        a.cfop,
        a.indicadorISSQN,
        a.aliquotaISSQN,
        a.retidoISSQN,
        a.tributadoForaMunicipio,
        a.incentivoFiscal,
        a.listaServicos,
        a.cnae,
        a.idServicoMunicipio,
        a.numeroProcessoAdministrativo,
        a.retencaoIRRF,
        a.retencaoINSS,
        a.retencaoPIS,
        a.retencaoCOFINS,
        a.retencaoCSLL,
        a.retencaoOutros,
        a.aliquotaII,
        a.aliquotaIOF,
        a.codigoEnquadramentoIPI,
        a.stIPI,
        a.aliquotaIPI,
        a.valorAliquotaIPI,
        a.stPIS,
        a.aliquotaPIS,
        a.valorAliquotaPIS,
        a.aliquotaPISST,
        a.valorAliquotaPISST,
        a.stCOFINS,
        a.aliquotaCOFINS,
        a.valorAliquotaCOFINS,
        a.aliquotaCOFINSST,
        a.valorAliquotaCOFINSST,
        a.stSimplesNacional,
        a.creditoSimplesNacional,
        a.stICMS,
        a.modalidadeBaseCalcICMS,
        a.reducaoBaseICMS,
        a.aliquotaICMS,
        a.diferimentoICMS,
        a.motivoDesoneracaoICMS,
        a.idBeneficio,
        a.modalidadeBaseCalcICMSST,
        a.margemValorAdicionadoST,
        a.reducaoBaseST,
        a.aliquotaICMSST,
        a.aliquotaSTSuportConsFinal,
        a.reducaoBaseICMSEfetivo,
        a.aliquotaICMSEfetivo,
        a.stICMSEscrituracao,
        a.reducaoBaseICMSEscrituracao,
        a.aliquotaICMSEscrituracao,
        a.diferimentoICMSEscrituracao,
        a.margemValorAdicSTEscrituracao,
        a.reducaoBaseSTEscrituracao,
        a.aliquotaICMSSTEscrituracao,
        a.somarICMSST,
        a.aliquotaICMSUFDestinatario,
        a.aliquotaICMSInterestadual,
        a.partilhaICMSInterestadual,
        a.aliquotaFCP,
        a.aliquotaFCPST,
        a.aliquotaFCPSTAnteriormente,
        a.aliquotaFCPUFDestinatario,
        a.aliquotaEstimadaImpFederais,
        a.aliquotaEstimadaImpEstaduais,
        a.aliquotaEstimadaImpMunicipais,
        a.baseISSQN,
        a.valorISSQN,
        a.baseRetIRRF,
        a.valorRetIRRF,
        a.baseRetINSS,
        a.valorRetINSS,
        a.baseRetPIS,
        a.valorRetPIS,
        a.baseRetCOFINS,
        a.valorRetCOFINS,
        a.baseRetCSLL,
        a.valorRetCSLL,
        a.baseRetOutros,
        a.valorRetOutros,
        a.baseII,
        a.valorII,
        a.baseIOF,
        a.valorIOF,
        a.baseIPI,
        a.valorIPI,
        a.basePIS,
        a.valorPIS,
        a.basePISST,
        a.valorPISST,
        a.baseCOFINS,
        a.valorCOFINS,
        a.baseCOFINSST,
        a.valorCOFINSST,
        a.baseCreditoSimplesNacional,
        a.valorCreditoSimplesNacional,
        a.baseICMS,
        a.valorICMSOperacao,
        a.valorICMSDiferido,
        a.valorICMS,
        a.valorICMSDesoneracao,
        a.baseICMSST,
        a.valorICMSST,
        a.baseICMSSTAnteriormente,
        a.valorICMSSTAnteriormente,
        a.valorICMSProprioSubstituto,
        a.baseICMSEfetivo,
        a.valorICMSEfetivo,
        a.baseICMSEscrituracao,
        a.valorICMSEscrituracao,
        a.valorICMSDesonEscrituracao,
        a.baseICMSSTEscrituracao,
        a.valorICMSSTEscrituracao,
        a.baseICMSUFDestinatario,
        a.valorICMSUFDestinatario,
        a.baseICMSUFRemetente,
        a.valorICMSUFRemetente,
        a.baseFCP,
        a.valorFCP,
        a.baseFCPST,
        a.valorFCPST,
        a.baseFCPSTAnteriormente,
        a.valorFCPSTAnteriormente,
        a.baseFCPUFDestinatario,
        a.valorFCPUFDestinatario,
        a.baseEstimadaImpostos,
        a.valorEstimadoImpFederais,
        a.valorEstimadoImpEstaduais,
        a.valorEstimadoImpMunicipais,
        a.valorBasePagamento,
        a.valorLiquidoItem,
        a.valorCustoOperacao,
        a.valorCMV,
        prod.tipoProduto
      FROM MODOCFISCALXITENS a
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      WHERE a.idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      v_inserindoItem := 0;
      v_item_sequencia := a.sequencia;
      v_item_cancelado := a.cancelado;
      v_ini_gradeProduto := a.gradeProduto;
      v_ini_personalizacao := a.personalizacao;
      v_ini_operacaoFiscal := a.operacaoFiscal;
      v_ini_quantidade := a.quantidade;
      v_ini_valorProdutoServicoBruto := a.valorProdutoServicoBruto;
      v_ini_valorProdutoServico := a.valorProdutoServico;
      v_ini_valorDescontoItem := a.valorDescontoItem;
      v_ini_valorAcrescimoItem := a.valorAcrescimoItem;
      v_ini_valorBasePagamento := a.valorBasePagamento;
      v_ini_valorFreteTotal := a.valorFreteTotal;
      v_ini_valorSeguroTotal := a.valorSeguroTotal;
      v_ini_valorDescontoTotal := a.valorDescontoTotal;
      v_ini_valorOutrasDespesasTotal := a.valorOutrasDespesasTotal;
      v_ini_valorAdicFreteMarTotal := a.valorAdicFreteMarinhaMerTotal;
      v_ini_valorDespesasAduanTotal := a.valorDespesasAduaneirasTotal;
      v_item_quantidadeDevolvidaRet := a.quantidadeDevolvidaRetornada;
      IF p_buscarAliquotas_CalcularImp ='T'
      THEN
        v_item_movimentaEstoque        := a.movimentaEstoque;
        v_item_movimentaEstoqueFiscal  := a.movimentaEstoqueFiscal;
        v_item_geraFinanceiro          := a.geraFinanceiro;
        v_item_cfop                    := a.cfop;
        v_item_indicadorISSQN          := a.indicadorISSQN;
        v_item_aliquotaISSQN           := a.aliquotaISSQN;
        v_item_retidoISSQN             := a.retidoISSQN;
        v_item_tributadoForaMunicipio  := a.tributadoForaMunicipio;
        v_item_incentivoFiscal         := a.incentivoFiscal;
        v_item_listaServicos           := a.listaServicos;
        v_item_cnae                    := a.cnae;
        v_item_idServicoMunicipio      := a.idServicoMunicipio;
        v_item_numeroProcessoAdministr := a.numeroProcessoAdministrativo;
        v_item_retencaoIRRF            := a.retencaoIRRF;
        v_item_retencaoINSS            := a.retencaoINSS;
        v_item_retencaoPIS             := a.retencaoPIS;
        v_item_retencaoCOFINS          := a.retencaoCOFINS;
        v_item_retencaoCSLL            := a.retencaoCSLL;
        v_item_retencaoOutros          := a.retencaoOutros;
        v_item_aliquotaII              := a.aliquotaII;
        v_item_aliquotaIOF             := a.aliquotaIOF;
        v_item_codigoEnquadramentoIPI  := a.codigoEnquadramentoIPI;
        v_item_stIPI                   := a.stIPI;
        v_item_aliquotaIPI             := a.aliquotaIPI;
        v_item_valorAliquotaIPI        := a.valorAliquotaIPI;
        v_item_stPIS                   := a.stPIS;
        v_item_aliquotaPIS             := a.aliquotaPIS;
        v_item_valorAliquotaPIS        := a.valorAliquotaPIS;
        v_item_aliquotaPISST           := a.aliquotaPISST;
        v_item_valorAliquotaPISST      := a.valorAliquotaPISST;
        v_item_stCOFINS                := a.stCOFINS;
        v_item_aliquotaCOFINS          := a.aliquotaCOFINS;
        v_item_valorAliquotaCOFINS     := a.valorAliquotaCOFINS;
        v_item_aliquotaCOFINSST        := a.aliquotaCOFINSST;
        v_item_valorAliquotaCOFINSST   := a.valorAliquotaCOFINSST;
        v_item_stSimplesNacional       := a.stSimplesNacional;
        v_item_creditoSimplesNacional  := a.creditoSimplesNacional;
        v_item_stICMS                  := a.stICMS;
        v_item_modalBaseCalcICMS       := a.modalidadeBaseCalcICMS;
        v_item_reducaoBaseICMS         := a.reducaoBaseICMS;
        v_item_aliquotaICMS            := a.aliquotaICMS;
        v_item_diferimentoICMS         := a.diferimentoICMS;
        v_item_motivoDesoneracaoICMS   := a.motivoDesoneracaoICMS;
        v_item_idBeneficio             := a.idBeneficio;
        v_item_modalBaseCalcICMSST     := a.modalidadeBaseCalcICMSST;
        v_item_margemValorAdicionadoST := a.margemValorAdicionadoST;
        v_item_reducaoBaseST           := a.reducaoBaseST;
        v_item_aliquotaICMSST          := a.aliquotaICMSST;
        v_item_aliquotaSTSuportConsFin := a.aliquotaSTSuportConsFinal;
        v_item_reducaoBaseICMSEfetivo  := a.reducaoBaseICMSEfetivo;
        v_item_aliquotaICMSEfetivo     := a.aliquotaICMSEfetivo;
        v_item_stICMSEscrituracao      := a.stICMSEscrituracao;
        v_item_reducaoBaseICMSEscritur := a.reducaoBaseICMSEscrituracao;
        v_item_aliquotaICMSEscrituraca := a.aliquotaICMSEscrituracao;
        v_item_diferimentoICMSEscritur := a.diferimentoICMSEscrituracao;
        v_item_margemValorAdicSTEscrit := a.margemValorAdicSTEscrituracao;
        v_item_reducaoBaseSTEscriturac := a.reducaoBaseSTEscrituracao;
        v_item_aliquotaICMSSTEscritura := a.aliquotaICMSSTEscrituracao;
        v_item_somarICMSST             := a.somarICMSST;
        v_item_aliquotaICMSUFDestinat  := a.aliquotaICMSUFDestinatario;
        v_item_aliquotaICMSInterestad  := a.aliquotaICMSInterestadual;
        v_item_partilhaICMSInterestad  := a.partilhaICMSInterestadual;
        v_item_aliquotaFCP             := a.aliquotaFCP;
        v_item_aliquotaFCPST           := a.aliquotaFCPST;
        v_item_aliquotaFCPSTAnteriorm  := a.aliquotaFCPSTAnteriormente;
        v_item_aliquotaFCPUFDestinat   := a.aliquotaFCPUFDestinatario;
        v_item_aliquotaEstImpFederais  := a.aliquotaEstimadaImpFederais;
        v_item_aliquotaEstImpEstaduais := a.aliquotaEstimadaImpEstaduais;
        v_item_aliquotaEstImpMunicipai := a.aliquotaEstimadaImpMunicipais;
        v_item_baseISSQN               := a.baseISSQN;
        v_item_valorISSQN              := a.valorISSQN;
        v_item_baseRetIRRF             := a.baseRetIRRF;
        v_item_valorRetIRRF            := a.valorRetIRRF;
        v_item_baseRetINSS             := a.baseRetINSS;
        v_item_valorRetINSS            := a.valorRetINSS;
        v_item_baseRetPIS              := a.baseRetPIS;
        v_item_valorRetPIS             := a.valorRetPIS;
        v_item_baseRetCOFINS           := a.baseRetCOFINS;
        v_item_valorRetCOFINS          := a.valorRetCOFINS;
        v_item_baseRetCSLL             := a.baseRetCSLL;
        v_item_valorRetCSLL            := a.valorRetCSLL;
        v_item_baseRetOutros           := a.baseRetOutros;
        v_item_valorRetOutros          := a.valorRetOutros;
        v_item_baseII                  := a.baseII;
        v_item_valorII                 := a.valorII;
        v_item_baseIOF                 := a.baseIOF;
        v_item_valorIOF                := a.valorIOF;
        v_item_baseIPI                 := a.baseIPI;
        v_item_valorIPI                := a.valorIPI;
        v_item_basePIS                 := a.basePIS;
        v_item_valorPIS                := a.valorPIS;
        v_item_basePISST               := a.basePISST;
        v_item_valorPISST              := a.valorPISST;
        v_item_baseCOFINS              := a.baseCOFINS;
        v_item_valorCOFINS             := a.valorCOFINS;
        v_item_baseCOFINSST            := a.baseCOFINSST;
        v_item_valorCOFINSST           := a.valorCOFINSST;
        v_item_baseCreditoSimplesNac   := a.baseCreditoSimplesNacional;
        v_item_valorCreditoSimplesNac  := a.valorCreditoSimplesNacional;
        v_item_baseICMS                := a.baseICMS;
        v_item_valorICMSOperacao       := a.valorICMSOperacao;
        v_item_valorICMSDiferido       := a.valorICMSDiferido;
        v_item_valorICMS               := a.valorICMS;
        v_item_valorICMSDesoneracao    := a.valorICMSDesoneracao;
        v_item_baseICMSST              := a.baseICMSST;
        v_item_valorICMSST             := a.valorICMSST;
        v_item_baseICMSSTAnteriormente := a.baseICMSSTAnteriormente;
        v_item_valorICMSSTAnteriorment := a.valorICMSSTAnteriormente;
        v_item_valorICMSProprioSubstit := a.valorICMSProprioSubstituto;
        v_item_baseICMSEfetivo         := a.baseICMSEfetivo;
        v_item_valorICMSEfetivo        := a.valorICMSEfetivo;
        v_item_baseICMSEscrituracao    := a.baseICMSEscrituracao;
        v_item_valorICMSEscrituracao   := a.valorICMSEscrituracao;
        v_item_valorICMSDesonEscritura := a.valorICMSDesonEscrituracao;
        v_item_baseICMSSTEscrituracao  := a.baseICMSSTEscrituracao;
        v_item_valorICMSSTEscrituracao := a.valorICMSSTEscrituracao;
        v_item_baseICMSUFDestinatario  := a.baseICMSUFDestinatario;
        v_item_valorICMSUFDestinatario := a.valorICMSUFDestinatario;
        v_item_baseICMSUFRemetente     := a.baseICMSUFRemetente;
        v_item_valorICMSUFRemetente    := a.valorICMSUFRemetente;
        v_item_baseFCP                 := a.baseFCP;
        v_item_valorFCP                := a.valorFCP;
        v_item_baseFCPST               := a.baseFCPST;
        v_item_valorFCPST              := a.valorFCPST;
        v_item_baseFCPSTAnteriormente  := a.baseFCPSTAnteriormente;
        v_item_valorFCPSTAnteriormente := a.valorFCPSTAnteriormente;
        v_item_baseFCPUFDestinatario   := a.baseFCPUFDestinatario;
        v_item_valorFCPUFDestinatario  := a.valorFCPUFDestinatario;
        v_item_baseEstimadaImpostos    := a.baseEstimadaImpostos;
        v_item_valorEstImpFederais     := a.valorEstimadoImpFederais;
        v_item_valorEstImpEstaduais    := a.valorEstimadoImpEstaduais;
        v_item_valorEstImpMunicipais   := a.valorEstimadoImpMunicipais;
      END IF;
      IF p_manterFinanceiro_Retotalizar = 0
        AND (v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0)
        AND (a.valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
          OR a.valorProdutoServico <> v_item_valorProdutoServico
          OR a.valorDescontoItem <> p_item_valorDescontoItem
          OR a.valorAcrescimoItem <> p_item_valorAcrescimoItem)
        OR a.valorFreteGeral <> p_item_valorFreteGeral
        OR a.valorSeguroGeral <> p_item_valorSeguroGeral
        OR a.valorDescontoGeral <> v_item_valorDescontoGeral
        OR a.valorOutrasDespesasGeral <> p_item_valorOutrasDespesasGer
        OR a.valorAdicFreteMarinhaMerGeral <> p_item_valorAdicFreteMarGeral
        OR a.valorDespesasAduaneirasGeral <> p_item_valorDespesasAduanGeral
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF p_manterFinanceiro_Retotalizar < 2
        AND a.cancelado = 0
      THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume - TRUNC(CASE WHEN a.controleQuantidade = 1 AND a.loteMultiplo <> 0 THEN a.quantidade / a.loteMultiplo ELSE a.quantidadeConvertida END,0);
        END IF;
        v_cab_quantidade := v_cab_quantidade - a.quantidadeConvertida;
        v_cab_pesoLiquido := v_cab_pesoLiquido - a.pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto - a.pesoBruto;
        IF a.tipoProduto = '09' THEN
          v_cab_valorServicosBruto := v_cab_valorServicosBruto - a.valorProdutoServicoBruto;
          v_cab_valorServicos := v_cab_valorServicos - a.valorProdutoServico;
          v_cab_valorDescontoServicos := v_cab_valorDescontoServicos - a.valorDescontoItem;
          v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos - a.valorAcrescimoItem;
        ELSE 
          v_cab_valorProdutosBruto := v_cab_valorProdutosBruto - a.valorProdutoServicoBruto;
          v_cab_valorProdutos := v_cab_valorProdutos - a.valorProdutoServico;
          v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos - a.valorDescontoItem;
          v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos - a.valorAcrescimoItem;
        END IF;
        v_cab_valorFreteItem := v_cab_valorFreteItem - a.valorFreteItem;
        v_cab_valorSeguroItem := v_cab_valorSeguroItem - a.valorSeguroItem;
        v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem - a.valorAdicFreteMarinhaMerItem;
        v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem - a.valorDespesasAduaneirasItem;
        v_cab_valorFreteGeral := v_cab_valorFreteGeral - a.valorFreteGeral;
        v_cab_valorSeguroGeral := v_cab_valorSeguroGeral - a.valorSeguroGeral;
        v_cab_valorDescontoGeral := v_cab_valorDescontoGeral - a.valorDescontoGeral;
        v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral - a.valorOutrasDespesasGeral;
        v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral - a.valorAdicFreteMarinhaMerGeral;
        v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral - a.valorDespesasAduaneirasGeral;
        v_cab_valorBasePagamento := v_cab_valorBasePagamento - a.valorBasePagamento;
        IF a.usarPrecoAVista = 1
          AND a.geraFinanceiro = 1
        THEN
          v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo - a.valorProdutoServico + a.valorDescontoTotal - a.valorOutrasDespesasTotal;
        END IF;
        v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento - a.valorDescontoPagamento;
        v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento - a.valorOutrasDespesasPagamento;
        v_cab_valorJurosPagamento := v_cab_valorJurosPagamento - a.valorJurosPagamento;
        v_cab_valorFreteTotal := v_cab_valorFreteTotal - a.valorFreteTotal;
        v_cab_valorSeguroTotal := v_cab_valorSeguroTotal - a.valorSeguroTotal;
        v_cab_valorDescontoTotal := v_cab_valorDescontoTotal - a.valorDescontoTotal;
        v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal - a.valorOutrasDespesasTotal;
        v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal - a.valorAdicFreteMarinhaMerTotal;
        v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal - a.valorDespesasAduaneirasTotal;
        v_cab_valorLiquidoItem := v_cab_valorLiquidoItem - a.valorLiquidoItem;
        v_cab_valorDescontoCustoOpItem := v_cab_valorDescontoCustoOpItem - a.valorDescontoCustoOpItem;
        v_cab_valorDescontoCustoOpGera := v_cab_valorDescontoCustoOpGera - a.valorDescontoCustoOpGeral;
        v_cab_valorDescontoCustoOpTota := v_cab_valorDescontoCustoOpTota - a.valorDescontoCustoOpTotal;
        v_cab_valorAcrescimoCustoOpIte := v_cab_valorAcrescimoCustoOpIte - a.valorAcrescimoCustoOpItem;
        v_cab_valorAcrescimoCustoOpGer := v_cab_valorAcrescimoCustoOpGer - a.valorAcrescimoCustoOpGeral;
        v_cab_valorAcrescimoCustoOpTot := v_cab_valorAcrescimoCustoOpTot - a.valorAcrescimoCustoOpTotal;
        v_cab_valorCustoOperacao := v_cab_valorCustoOperacao - a.valorCustoOperacao;
        v_cab_valorCMV := v_cab_valorCMV - a.valorCMV;
        v_cab_quantidadeExtemporanea := v_cab_quantidadeExtemporanea - a.quantidadeExtemporanea;
        v_cab_valorAcrescimoExtempSubt := v_cab_valorAcrescimoExtempSubt - a.valorAcrescimoExtempSubtotal;
        v_cab_valorAcrescimoExtempItem := v_cab_valorAcrescimoExtempItem - a.valorAcrescimoExtempItem;
        v_cab_valorAcrescimoExtempGera := v_cab_valorAcrescimoExtempGera - a.valorAcrescimoExtempGeral;
        v_cab_valorAcrescimoExtempTota := v_cab_valorAcrescimoExtempTota - a.valorAcrescimoExtempTotal;
      END IF;
    END LOOP;
  END IF;
  ADD_CALCULA_TOTAIS_ITEM (
    v_cab_tipoPagamentoFrete,
    p_item_quantidade,
    p_item_quantidadeConvertida,
    p_item_precoUnitarioBruto,
    p_item_acrescimoUnitarioCompos,
    v_item_precoUnitario,
    p_item_valorDescontoItem,
    p_item_valorAcrescimoItem,
    p_item_valorFreteItem,
    p_item_valorSeguroItem,
    p_item_valorAdicFreteMarItem,
    p_item_valorDespesasAduanItem,
    p_item_valorFreteGeral,
    p_item_valorSeguroGeral,
    v_item_valorDescontoGeral,
    p_item_valorOutrasDespesasGer,
    p_item_valorAdicFreteMarGeral,
    p_item_valorDespesasAduanGeral,
    v_item_valorDescontoPagamento,
    v_item_valorOutrasDespPagament,
    v_item_valorJurosPagamento,
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit,
    v_prod_composicaoPreco,
    v_item_precoUnitario,
    v_item_precoUnitarioConvertido,
    v_item_valorProdutoServico,
    v_item_valorFreteTotal,
    v_item_valorSeguroTotal,
    v_item_valorDescontoTotal,
    v_item_valorOutrasDespesasTot,
    v_item_valorAdicFreteMarTotal,
    v_item_valorDespesasAduanTotal);
  v_item_valorAcrescimoExtempSub := FUNC_ADD_CALC_EXTEMP_SUBTOTAL(
    p_item_quantidade,
    v_item_precoUnitario,
    p_item_quantidadeExtemporanea,
    p_item_acrescimoUnitarioExtemp);
  v_item_valorAcrescimoExtempTot := FUNC_ADD_CALC_EXTEMP_TOTAL(
    v_item_valorAcrescimoExtempSub,
    p_item_valorAcrescimoExtempIte,
    p_item_valorAcrescimoExtempGer);
  IF v_inserindoItem = 1
    AND v_prod_controleEstoque = 3
  THEN
    FOR a IN (
      SELECT
        kit.gradeProdutoFilho,
        ROUND (p_item_quantidade * kit.quantidade, unMed.casasDecimaisUnidadeMedida) quantidade,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        prod.unidadeMedida,
        prod.controleQuantidadeVenda,
        prod.unidadeMedidaVenda,
        prod.conversorQuantidadeVenda,
        prod.loteMinimoVenda,
        prod.loteMultiploVenda,
        prod.pesoLiquido,
        prod.pesoBruto,
        prod.altura,
        prod.largura,
        prod.comprimento,
        prod.tipoProduto,
        prod.origemMercadoria,
        prod.idNcm,
        prod.listaServicos,
        unMed.casasDecimaisUnidadeMedida,
        locEst.indicadorPropriedadePosseItem
      FROM CAGRADEPRODUTOXKITSCOMBOS kit
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = kit.gradeProdutoFilho
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      JOIN SIUNIDADESMEDIDA unMed
      ON unMed.unidadeMedida = prod.unidadeMedida
      JOIN PALOCAISESTOQUE locEst
      ON locEst.localEstoque = p_item_localEstoque
      WHERE kit.gradeProduto = p_item_gradeProduto
      AND kit.ativo = 1
      AND kit.gradeProduto <> kit.gradeProdutoFilho
      AND kit.quantidade > 0
      AND ROUND (p_item_quantidade * kit.quantidade, unMed.casasDecimaisUnidadeMedida) > 0)
    LOOP
      v_combo_operacaoFiscal := FUNC_ADD_BUSCA_OPERACAO_FISCAL (
        p_item_modeloDocumento,
        v_cab_entradaSaida,
        v_cab_pessoa,
        v_cab_vendaConsumidor,
        v_cab_indicadorConsumidorFinal,
        v_est_grupoFiscal,
        v_pessEst_regimeTributario,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_munEndPess_uf,
        a.produto);
      IF v_cab_entradaSaida = CASE WHEN v_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END
      THEN
        ADD_ITEM_PROD_REGRA_FORN_BUSCA (
          v_cab_pessoa,
          a.produto,
          a.unidadeMedida,
          a.casasDecimaisUnidadeMedida,
          /* Retornos */
          v_auxNumber,
          v_combo_controleQuantidade,
          v_combo_unidadeMedidaConversao,
          v_combo_conversorQuantidade,
          v_combo_loteMinimo,
          v_combo_loteMultiplo);
        IF v_auxNumber = 0
          AND v_cab_pessoa <> 0
        THEN
          ADD_ITEM_PROD_REGRA_FORN_BUSCA (
            0,
            a.produto,
            a.unidadeMedida,
            a.casasDecimaisUnidadeMedida,
            /* Retornos */
            v_auxNumber,
            v_combo_controleQuantidade,
            v_combo_unidadeMedidaConversao,
            v_combo_conversorQuantidade,
            v_combo_loteMinimo,
            v_combo_loteMultiplo);
        END IF;
        IF v_auxNumber = 0 THEN
          v_combo_controleQuantidade      := 1;
          v_combo_unidadeMedidaConversao  := a.unidadeMedida;
          v_combo_conversorQuantidade     := 1;
          v_combo_loteMinimo              := 0;
          v_combo_loteMultiplo            := 0;
        END IF;
      ELSE
        v_combo_controleQuantidade      := a.controleQuantidadeVenda;
        v_combo_unidadeMedidaConversao  :=
          CASE
            WHEN a.controleQuantidadeVenda IN (2,3) 
            THEN 'PC'
            ELSE (
              CASE
                WHEN a.controleQuantidadeVenda = 4 AND a.unidadeMedidaVenda <> ' ' AND a.conversorQuantidadeVenda <> 0 AND a.conversorQuantidadeVenda <> 1
                THEN a.unidadeMedidaVenda
                ELSE a.unidadeMedida
              END
            )
          END;
        v_combo_conversorQuantidade := a.conversorQuantidadeVenda;
        v_combo_loteMinimo          := ROUND (a.loteMinimoVenda, a.casasDecimaisUnidadeMedida);
        v_combo_loteMultiplo        := ROUND (a.loteMultiploVenda, a.casasDecimaisUnidadeMedida);
        SELECT COALESCE ( MAX (casasDecimaisUnidadeMedida), 0)
        INTO v_uniMedConv_casasDecimaisUnid
        FROM SIUNIDADESMEDIDA
        WHERE unidadeMedida = v_combo_unidadeMedidaConversao;
      END IF;
      IF v_combo_controleQuantidade NOT BETWEEN 1 AND 4 OR v_combo_controleQuantidade = 4 AND (v_combo_conversorQuantidade = 0 OR v_combo_conversorQuantidade = 1)
      THEN
        v_combo_controleQuantidade := 1;
      END IF;
      IF v_combo_controleQuantidade <> 4 THEN
        v_combo_conversorQuantidade  := 1;
      END IF;
      IF v_combo_controleQuantidade = 1 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := 0;
        v_combo_quantidadeConvertida := a.quantidade;
      ELSIF v_combo_controleQuantidade = 2 THEN
        v_combo_altura               := a.altura;
        v_combo_largura              := a.largura;
        v_combo_comprimento          := 0;
        v_combo_pecas                := CASE WHEN v_combo_altura = 0 OR v_combo_largura = 0 THEN 0 ELSE ROUND ((a.quantidade / ((v_combo_altura / 100) * (v_combo_largura / 100))),3) END;
        v_combo_quantidadeConvertida := ROUND (v_combo_pecas, v_uniMedConv_casasDecimaisUnid);
      ELSIF v_combo_controleQuantidade = 3 THEN
        v_combo_altura               := a.altura;
        v_combo_largura              := a.largura;
        v_combo_comprimento          := a.comprimento;
        v_combo_pecas                := CASE WHEN v_combo_altura = 0 OR v_combo_comprimento = 0 OR v_combo_comprimento = 0 THEN 0 ELSE ROUND (a.quantidade / ((v_combo_altura / 100) * (v_combo_largura / 100) * v_combo_comprimento),3) END;
        v_combo_quantidadeConvertida := ROUND (v_combo_pecas, v_uniMedConv_casasDecimaisUnid);
      ELSIF v_combo_controleQuantidade = 4 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := CASE WHEN v_combo_conversorQuantidade = 0 THEN 0 ELSE ROUND ((a.quantidade / v_combo_conversorQuantidade),3) END;
        v_combo_quantidadeConvertida := ROUND (v_combo_pecas, v_uniMedConv_casasDecimaisUnid);
      END IF;
      v_combo_pesoLiquido := ROUND ((a.quantidade * a.pesoLiquido), 3);
      v_combo_pesoBruto   := ROUND ((a.quantidade * a.pesoBruto), 3);
      ADD_BUSCA_PRECO (
        p_config_64_casasDecSaidas,
        p_config_65_casasDecEntrada,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        v_cab_entradaSaida,
        v_cab_devolucaoAnulacaoRetorno,
        v_cab_estabelecimento,
        NULL, -- p_cab_dataPrecoInicial
        TRUNC (SYSDATE), -- p_cab_dataPrecoFinal
        v_cab_pessoa,
        v_cab_projeto,
        v_modDoc_capituloNatFiscal,
        v_modDoc_tipoPreco,
        v_modDoc_tabelaPreco,
        v_modDoc_fatorMultipPreco,
        v_modDoc_tipoPrecoB,
        v_modDoc_tabelaPrecoB,
        v_modDoc_fatorMultipPrecoB,
        v_munEndEst_uf,
        v_munEndPess_uf,
        p_item_vendedor,
        0, -- p_item_idFormulaTinta
        0, -- p_item_personalizacao
        p_item_localEstoque,
        p_item_pessoaParticipante,
        a.quantidade,
        a.produto,
        a.cor,
        a.tamanho,
        a.controleEstoque,
        a.indicadorPropriedadePosseItem,
        0, -- p_manterPreco
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_precoDesconto,
        v_combo_precoMinimo,
        v_auxNumber, -- r_informarPrecoManualmente
        v_auxNumber, -- r_precoAPrazo
        v_auxNumber, -- r_precoAVista
        v_auxNumber, -- r_promocao
        v_auxNumber, -- r_precoPromocaoAPrazo
        v_auxNumber, -- r_precoPromocaoAVista
        v_auxNumber, -- r_precoIndexadoAPrazo
        v_auxNumber); -- r_precoIndexadoAVista
      v_combo_precoUnitario := CASE WHEN p_item_usarPrecoAVista = 1 THEN v_combo_precoSugestaoAVista ELSE v_combo_precoSugestaoAPrazo END;
      ADD_DOC_FISC_ITEM_GRAVA (
        ' ', -- p_sessaoClient
        p_usuarioLogado,
        p_perfilUsuarioLogado,
        p_estabelecimentoAtivo,
        p_person_190_modeloFrete,
        p_config_64_casasDecSaidas,
        p_config_65_casasDecEntrada,
        p_config_198_obs_add_referenc,
        p_config_199_obs_add_caractA,
        p_config_200_obs_add_caractB,
        p_config_201_obs_add_caractC,
        p_config_202_obs_add_caractD,
        p_config_203_obs_add_caractE,
        p_config_209_filtrarGrupoEcon,
        p_config_227_manterPessoaOrcam,
        p_config_230_etapaPedComprParc,
        p_config_362_calcCustoPorGrade,
        p_config_378_calcularVolumes,
        p_config_413_obs_add_marca,
        p_config_418_obs_efetarEnter,
        p_manterFinanceiro_Retotalizar,
        'S', -- p_buscarAliquotas_CalcularImp
        p_buscarGeraFinanceiroEstoque,
        p_tipoDocumentoReferenciado,
        p_idItemReferenciado,
        CASE
          WHEN p_quantidadeReferenciada = 0
          OR p_item_quantidade = 0
          THEN 0
          ELSE ROUND(a.quantidade * p_quantidadeReferenciada / p_item_quantidade, 7)
        END, -- p_quantidadeReferenciada
        ' ', -- p_tempComp_nomeTempComposicao,
        0, -- p_tempComp_sequencia
        r_calcularImpostos,
        0, -- p_item_idItemDocFiscal
        p_item_idDocumentoFiscal,
        p_item_pedidoCompraFornecedor,
        p_item_sequenciaPedidoCompraFo,
        p_item_modeloDocumento,
        p_item_estabelecimentoOriginal,
        p_item_vendedor,
        a.gradeProdutoFilho,
        0, -- p_item_idFormulaTinta
        0, -- p_item_personalizacao
        0, -- p_item_idLoteEstoque
        0, -- p_item_idEnderecoEstoque
        0, -- p_item_idNumeroSerie
        p_item_localEstoque,
        p_item_pessoaParticipante,
        v_combo_controleQuantidade,
        v_combo_unidadeMedidaConversao,
        v_combo_conversorQuantidade,
        v_combo_loteMinimo,
        v_combo_loteMultiplo,
        v_combo_altura,
        v_combo_largura,
        v_combo_comprimento,
        v_combo_pecas,
        a.quantidade,
        v_combo_quantidadeConvertida,
        v_combo_pesoLiquido,
        v_combo_pesoBruto,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_precoDesconto,
        v_combo_precoMinimo,
        p_item_usarPrecoAVista,
        v_combo_precoUnitario, -- p_item_precoUnitarioBruto
        0, -- p_item_acrescimoUnitarioCompos
        v_combo_precoUnitario,
        p_item_percDescontoItem,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoItem
        p_item_percAcrescimoItem,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorFreteItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorFreteItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorSeguroItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorSeguroItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAdicFreteMarItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAdicFreteMarItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDespesasAduanItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDespesasAduanItem
        CASE
          WHEN p_item_quantidade = 0
          THEN 0
          ELSE ROUND(p_item_quantidadeExtemporanea * a.quantidade / p_item_quantidade, 2)
        END, -- p_item_quantidadeExtemporanea
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_acrescimoUnitarioExtemp
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_acrescimoUnitarioExtemp
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoExtempIte
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoExtempIte
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoCustoOpIte
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoCustoOpIte
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoCustoOpIt
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoCustoOpIt
        p_item_observacoesDigitadas,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorFreteGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorFreteGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorSeguroGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorSeguroGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorOutrasDespesasGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorOutrasDespesasGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAdicFreteMarGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAdicFreteMarGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDespesasAduanGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDespesasAduanGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoExtempGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoExtempGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoCustoOpGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoCustoOpGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoCustoOpGe
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoCustoOpGe
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoPagamento
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoPagamento
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorOutrasDespPagament
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorOutrasDespPagament
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorJurosPagamento
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorJurosPagamento
        p_item_percentualDevolucao,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorIPIDevolucao
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorIPIDevolucao,
        v_combo_operacaoFiscal,
        p_item_movimentaEstoque,
        p_item_movimentaEstoqueFiscal,
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        0, -- p_item_retencaoIRRF
        0, -- p_item_retencaoINSS
        0, -- p_item_retencaoPIS
        0, -- p_item_retencaoCOFINS
        0, -- p_item_retencaoCSLL
        0, -- p_item_retencaoOutros
        0, -- p_item_aliquotaII
        0, -- p_item_aliquotaIOF
        0, -- p_item_codigoEnquadramentoIPI
        0, -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        ' ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        ' ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        '  ', -- p_item_stICMS
        0, -- p_item_modalBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        ' ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicionadoST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        0, -- p_item_aliquotaSTSuportConsFin
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        '  ', -- p_item_stICMSEscrituracao
        0, -- p_item_reducaoBaseICMSEscritur
        0, -- p_item_aliquotaICMSEscrituraca
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_item_margemValorAdicSTEscrit
        0, -- p_item_reducaoBaseSTEscriturac
        0, -- p_item_aliquotaICMSSTEscritura
        0, -- p_item_somarICMSST
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        0, -- p_item_baseISSQN
        0, -- p_item_valorISSQN
        0, -- p_item_baseRetIRRF
        0, -- p_item_valorRetIRRF
        0, -- p_item_baseRetINSS
        0, -- p_item_valorRetINSS
        0, -- p_item_baseRetPIS
        0, -- p_item_valorRetPIS
        0, -- p_item_baseRetCOFINS
        0, -- p_item_valorRetCOFINS
        0, -- p_item_baseRetCSLL
        0, -- p_item_valorRetCSLL
        0, -- p_item_baseRetOutros
        0, -- p_item_valorRetOutros
        0, -- p_item_baseII
        0, -- p_item_valorII
        0, -- p_item_baseIOF
        0, -- p_item_valorIOF
        0, -- p_item_baseIPI
        0, -- p_item_valorIPI
        0, -- p_item_basePIS
        0, -- p_item_valorPIS
        0, -- p_item_basePISST
        0, -- p_item_valorPISST
        0, -- p_item_baseCOFINS
        0, -- p_item_valorCOFINS
        0, -- p_item_baseCOFINSST
        0, -- p_item_valorCOFINSST
        0, -- p_item_baseCreditoSimplesNac
        0, -- p_item_valorCreditoSimplesNac
        0, -- p_item_baseICMS
        0, -- p_item_valorICMSOperacao
        0, -- p_item_valorICMSDiferido
        0, -- p_item_valorICMS
        0, -- p_item_valorICMSDesoneracao
        0, -- p_item_baseICMSST
        0, -- p_item_valorICMSST
        0, -- p_item_baseICMSSTAnteriormente
        0, -- p_item_valorICMSSTAnteriorment
        0, -- p_item_valorICMSProprioSubstit
        0, -- p_item_baseICMSEfetivo
        0, -- p_item_valorICMSEfetivo
        0, -- p_item_baseICMSEscrituracao
        0, -- p_item_valorICMSEscrituracao
        0, -- p_item_valorICMSDesonEscritura
        0, -- p_item_baseICMSSTEscrituracao
        0, -- p_item_valorICMSSTEscrituracao
        0, -- p_item_baseICMSUFDestinatario
        0, -- p_item_valorICMSUFDestinatario
        0, -- p_item_baseICMSUFRemetente
        0, -- p_item_valorICMSUFRemetente
        0, -- p_item_baseFCP
        0, -- p_item_valorFCP
        0, -- p_item_baseFCPST
        0, -- p_item_valorFCPST
        0, -- p_item_baseFCPSTAnteriormente
        0, -- p_item_valorFCPSTAnteriormente
        0, -- p_item_baseFCPUFDestinatario
        0, -- p_item_valorFCPUFDestinatario
        0, -- p_item_baseEstimadaImpostos
        0, -- p_item_valorEstImpFederais
        0, -- p_item_valorEstImpEstaduais
        0, -- p_item_valorEstImpMunicipais
        p_nivel + 1, -- p_nivel,
        r_buffer_idItemDocFiscal,
        /* Retornos */
        r_calcularImpostos,
        v_auxNumber, -- r_item_idItemDocFiscal
        r_buffer_idItemDocFiscal,
        v_combo_valorTotal);
      r_valorInserido := r_valorInserido + v_combo_valorTotal;
    END LOOP;
    IF p_nivel = 0
    AND r_valorInserido > 0
    AND r_valorInserido <> v_item_valorProdutoServico
      - CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN p_item_valorDescontoItem
          ELSE 0
        END
      + CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN p_item_valorAcrescimoItem
          ELSE 0
        END
    THEN
      ADD_DOC_FISC_ITEM_COMBO_RESID (
        p_item_idDocumentoFiscal,
        v_item_valorProdutoServico,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        r_buffer_idItemDocFiscal,
        r_valorInserido);
      r_calcularImpostos := 1;
    END IF;
  ELSE
    IF r_item_idItemDocFiscal <= 0 THEN
      r_item_idItemDocFiscal := FUNC_ADD_BUSCA_PROXIMO_ID ('MODOCFISCALXITENS', 'idItemDocFiscal', 14, p_estabelecimentoAtivo, NULL);
    END IF;
    IF p_manterFinanceiro_Retotalizar = 0
      AND v_item_cancelado = 0
    THEN
      IF v_inserindoItem = 1
        AND ( v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0
          OR p_item_valorAcrescimoExtempGer <> 0
          OR p_item_valorDescontoCustoOpGer <> 0
          OR p_item_valorAcrescimoCustoOpGe <> 0)
        THEN
          r_calcularImpostos := 1;
      END IF;
      IF (v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorPagamentoBruto <> 0
          OR v_cab_promocaoExiste = 1)
        AND (v_inserindoItem = 1
          OR p_item_gradeProduto <> v_ini_gradeProduto
          OR p_item_quantidade <> v_ini_quantidade
          OR v_item_valorBasePagamento <> v_ini_valorBasePagamento)
      THEN
        ADD_DOC_FISC_PAG_EXCLUI_TROCA (
          r_calcularImpostos,
          p_item_idDocumentoFiscal,
          v_cab_valorDescontoGeral,
          v_cab_valorOutrasDespesasGeral,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_promocaoExiste,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento,
          r_calcularImpostos,
          v_cab_valorDescontoGeral,
          v_cab_condicaoPagamento,
          v_cab_numeroParcelas,
          v_cab_somaPrazoParcelas,
          v_cab_valorXPrazoParcelas,
          v_cab_prazoMedio,
          v_cab_prazoMedioPonderado,
          v_cab_valorEntradaMinima,
          v_cab_valorAVistaEntrada,
          v_cab_valorPagamentoBruto,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_valorPagamentoLiquido,
          v_cab_valorTroco,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento);
      END IF;
      IF NOT (p_person_190_modeloFrete IS NULL)
        AND p_person_190_modeloFrete <> ' '
        AND v_modDoc_somaFreteSeguroPrUnit = 0
      THEN
        v_cab_modalidadeFrete := FUNC_ADD_BUSCA_MODALIDADE_FRET (
          p_person_190_modeloFrete,
          v_cab_modalidadeFrete,
          v_ini_cab_valorFreteItem,
          v_cab_valorFreteItem,
          v_ini_cab_valorFreteGeral,
          v_cab_valorFreteGeral,
          v_modDoc_somaFreteSeguroPrUnit);
      END IF;
      ADD_CALCULA_TOTAIS_ITEM (
        v_cab_tipoPagamentoFrete,
        p_item_quantidade,
        p_item_quantidadeConvertida,
        p_item_precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos,
        v_item_precoUnitario,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        p_item_valorFreteItem,
        p_item_valorSeguroItem,
        p_item_valorAdicFreteMarItem,
        p_item_valorDespesasAduanItem,
        p_item_valorFreteGeral,
        p_item_valorSeguroGeral,
        v_item_valorDescontoGeral,
        p_item_valorOutrasDespesasGer,
        p_item_valorAdicFreteMarGeral,
        p_item_valorDespesasAduanGeral,
        v_item_valorDescontoPagamento,
        v_item_valorOutrasDespPagament,
        v_item_valorJurosPagamento,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        v_modDoc_somaFreteSeguroPrUnit,
        v_prod_composicaoPreco,
        v_item_precoUnitario,
        v_item_precoUnitarioConvertido,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal);
    END IF;
    IF p_buscarAliquotas_CalcularImp = 'S'
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal)
    THEN
      ADD_ITEM_OPERACAO_FISCAL_BUSCA (
        p_buscarGeraFinanceiroEstoque,
        v_cab_origemDocumento,
        v_cab_tipoDocumento,
        v_cab_entradaSaida,
        v_cab_devolucaoAnulacaoRetorno,
        v_cab_finalidadeNota,
        v_cab_estabelecimento,
        v_cab_nfFornecedor,
        SYSDATE, -- p_cab_dataEmissao
        v_cab_pessoa,
        v_cab_vendaConsumidor,
        v_cab_enderecoEntregaPessoa,
        v_cab_municipioFatoGerador,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_modDoc_movimentaEstoque,
        v_modDoc_geraFinanceiro,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_endPess_enderecoPessoa,
        v_munEndPess_uf,
        v_munEndEntr_uf,
        p_item_operacaoFiscal,
        v_gradProd_produto,
        v_prod_tipoProduto,
        v_prod_origemMercadoria,
        v_prod_idNcm,
        v_prod_listaServicos,
        p_item_movimentaEstoque,
        p_item_movimentaEstoqueFiscal,
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        1, -- p_atualizarISSQN
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        1, -- p_atualizarRetIRRF
        0, -- p_item_retencaoIRRF
        1, -- p_atualizarRetINSS
        0, -- p_item_retencaoINSS
        1, -- p_atualizarRetencaoPIS
        0, -- p_item_retencaoPIS
        1, -- p_atualizarRetencaoCOFINS
        0, -- p_item_retencaoCOFINS
        1, -- p_atualizarRetencaoCSLL
        0, -- p_item_retencaoCSLL
        1, -- p_atualizarRetencaoOutros
        0, -- p_item_retencaoOutros
        1, -- p_atualizarII
        0, -- p_item_aliquotaII
        1, -- p_atualizarIOF
        0, -- p_item_aliquotaIOF
        1, -- p_atualizarIPI
        0, -- p_item_codigoEnquadramentoIPI
        '  ', -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        1, -- p_atualizarPIS
        '  ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        1, -- p_atualizarPISST
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        1, -- p_atualizarCOFINS
        '  ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        1, -- p_atualizarCOFINSST
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        1, -- p_atualizarSimplesNacional
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        1, -- p_atualizarICMS
        '  ', -- p_item_stICMS
        ' ', -- p_item_modalidadeBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        '  ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        1, -- p_atualizarICMSST
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        1, -- p_atualizarICMSSTAnteriorEfet
        0, -- p_item_aliquotaSTSuportConsF
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        1, -- p_atualizarICMSEscrituracao
        '  ', -- p_item_stICMSEscrit
        0, -- p_item_reducaoBaseICMSEscrit
        0, -- p_item_aliquotaICMSEscrit
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_atualizarICMSSTEscrituracao
        0, -- p_item_margemValorAdicSTEscrit
        0, -- p_item_reducaoBaseSTEscrit
        0, -- p_item_aliquotaICMSSTEscrit
        0, -- p_item_somarICMSST
        1, -- p_atualizarDIFAL
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        1, -- p_atualizarFCP
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        1, -- p_atualizarImpostosEstimados
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        v_auxNumber, -- r_encontrouRegistro
        v_item_movimentaEstoque,
        v_item_movimentaEstoqueFiscal,
        v_item_geraFinanceiro,
        v_item_cfop,
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        v_item_retidoISSQN,
        v_item_tributadoForaMunicipio,
        v_item_incentivoFiscal,
        v_item_listaServicos,
        v_item_cnae,
        v_item_idServicoMunicipio,
        v_item_numeroProcessoAdministr,
        v_item_retencaoIRRF,
        v_item_retencaoINSS,
        v_item_retencaoPIS,
        v_item_retencaoCOFINS,
        v_item_retencaoCSLL,
        v_item_retencaoOutros,
        v_item_aliquotaII,
        v_item_aliquotaIOF,
        v_item_codigoEnquadramentoIPI,
        v_item_stIPI,
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        v_item_stPIS,
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        v_item_stCOFINS,
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        v_item_motivoDesoneracaoICMS,
        v_item_idBeneficio,
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin,
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        v_item_stICMSEscrituracao,
        v_item_reducaoBaseICMSEscritur,
        v_item_aliquotaICMSEscrituraca,
        v_item_diferimentoICMSEscritur,
        v_item_margemValorAdicSTEscrit,
        v_item_reducaoBaseSTEscriturac,
        v_item_aliquotaICMSSTEscritura,
        v_item_somarICMSST,
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        v_item_aliquotaFCP,
        v_item_aliquotaFCPST,
        v_item_aliquotaFCPSTAnteriorm,
        v_item_aliquotaFCPUFDestinat,
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai);      
    END IF;
    IF p_buscarAliquotas_CalcularImp IN ('I','S')
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_personalizacao <> p_item_personalizacao
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_quantidade <> p_item_quantidade
        OR v_ini_valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
        OR v_ini_valorProdutoServico <> v_item_valorProdutoServico
        OR v_ini_valorDescontoItem <> p_item_valorDescontoItem
        OR v_ini_valorAcrescimoItem <> p_item_valorAcrescimoItem
        OR v_cab_tipoPagamentoFrete <> 'V'
        AND (v_ini_valorFreteTotal <> v_item_valorFreteTotal
          OR v_ini_valorSeguroTotal <> v_item_valorSeguroTotal)
        OR v_ini_valorDescontoTotal <> v_item_valorDescontoTotal
        OR v_ini_valorOutrasDespesasTotal <> v_item_valorOutrasDespesasTot
        OR v_ini_valorAdicFreteMarTotal <> v_item_valorAdicFreteMarTotal
        OR v_ini_valorDespesasAduanTotal <> v_item_valorDespesasAduanTotal)
    THEN
      ADD_CALCULA_IMPOSTOS_ITEM (
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        v_cab_entradaSaida,
        v_cab_devolucaoAnulacaoRetorno,
        v_cab_estabelecimento,
        v_cab_nfFornecedor,
        v_cab_dataEmissao, -- p_cab_dataEntradaSaida
        v_cab_pessoa,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_cab_tipoPagamentoFrete,
        v_pess_indicadorInscricaoEstad,
        p_item_personalizacao,
        p_item_quantidade,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal,
        v_item_cfop,
        1, -- p_calcularISSQN
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        0, -- p_baseISSQN
        0, -- p_valorISSQN
        1, -- p_calcularIRRF
        v_item_retencaoIRRF,
        0, -- p_baseRetIRRF
        0, -- p_valorRetIRRF
        1, -- p_calcularINSS
        v_item_retencaoINSS,
        0, -- p_baseRetINSS
        0, -- p_valorRetINSS
        1, -- p_calcularRetencaoPIS
        v_item_retencaoPIS,
        0, -- p_baseRetPIS
        0, -- p_valorRetPIS
        1, -- p_calcularRetencaoCOFINS
        v_item_retencaoCOFINS,
        0, -- p_baseRetCOFINS
        0, -- p_valorRetCOFINS
        1, -- p_calcularRetencaoCSLL
        v_item_retencaoCSLL,
        0, -- p_baseRetCSLL
        0, -- p_valorRetCSLL
        1, -- p_calcularRetencaoOutros
        v_item_retencaoOutros,
        0, -- p_baseRetOutros
        0, -- p_valorRetOutros
        1, -- p_calcularII
        v_item_aliquotaII,
        0, -- p_baseII
        0, -- p_valorII
        1, -- p_calcularIOF
        v_item_aliquotaIOF,
        0, -- p_baseIOF
        0, -- p_valorIOF
        1, -- p_calcularIPI
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        0, -- p_baseIPI
        0, -- p_valorIPI
        p_item_valorIPIDevolucao,
        1, -- p_calcularPIS
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        0, -- p_basePIS
        0, -- p_valorPIS
        1, -- p_calcularPISST
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        0, -- p_basePISST
        0, -- p_valorPISST
        1, -- p_calcularCOFINS
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        0, -- p_valorAliquotaCOFINS
        0, -- p_baseCOFINS
        1, -- p_valorCOFINS
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        0, -- p_baseCOFINSST
        0, -- p_valorCOFINSST
        1, -- p_calcularSimplesNacional
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        0, -- p_baseCreditoSimplesNacional
        0, -- p_valorCreditoSimplesNacional
        1, -- p_calcularICMS
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        0, -- p_baseICMS
        0, -- p_valorICMSOperacao
        0, -- p_valorICMSDiferido
        0, -- p_valorICMS
        0, -- p_valorICMSDesoneracao
        1, -- p_calcularICMSST
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        0, -- p_baseICMSST
        0, -- p_valorICMSST
        1, -- p_calcularICMSSTAnterEfetivo
        0, -- p_baseICMSSTAnteriormente
        0, -- p_valorICMSSTAnteriormente
        0, -- p_valorICMSProprioSubstituto
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        0, -- p_baseICMSEfetivo
        0, -- p_valorICMSEfetivo
        1, -- p_calcularICMSEscrituracao
        v_item_stICMSEscrituracao,
        v_item_reducaoBaseICMSEscritur,
        v_item_aliquotaICMSEscrituraca,
        v_item_diferimentoICMSEscritur,
        0, -- p_baseICMSEscrituracao
        0, -- p_valorICMSEscrituracao
        0, -- p_valorICMSDesonEscrituracao
        1, -- p_calcularICMSSTEscrituracao
        v_item_margemValorAdicSTEscrit,
        v_item_reducaoBaseSTEscriturac,
        v_item_aliquotaICMSSTEscritura,
        0, -- p_baseICMSSTEscrituracao
        0, -- p_valorICMSSTEscrituracao
        1, -- p_calcularDIFAL
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        0, -- p_baseICMSUFDestinatario
        0, -- p_valorICMSUFDestinatario
        0, -- p_baseICMSUFRemetente
        0, -- p_valorICMSUFRemetente
        1, -- p_calcularFCP
        v_item_aliquotaFCP,
        0, -- p_baseFCP
        0, -- p_valorFCP
        v_item_aliquotaFCPST,
        0, -- p_baseFCPST
        0, -- p_valorFCPST
        v_item_aliquotaFCPSTAnteriorm,
        0, -- p_baseFCPSTAnteriormente
        0, -- p_valorFCPSTAnteriormente
        v_item_aliquotaFCPUFDestinat,
        0, -- p_baseFCPUFDestinatario
        0, -- p_valorFCPUFDestinatario
        1, -- p_calcularImpostosEstimados
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai,
        0, -- p_baseEstimadaImpostos
        0, -- p_valorEstimadoImpFederais
        0, -- p_valorEstimadoImpEstaduais
        0, -- p_valorEstimadoImpMunicipais
        v_gradProd_produto,
        v_gradProd_cor,
        v_gradProd_tamanho,
        v_prod_controleEstoque,
        v_prod_tipoProduto,
        v_prod_precoPautaTabelado,
        v_item_baseISSQN,
        v_item_valorISSQN,
        v_item_baseRetIRRF,
        v_item_valorRetIRRF,
        v_item_baseRetINSS,
        v_item_valorRetINSS,
        v_item_baseRetPIS,
        v_item_valorRetPIS,
        v_item_baseRetCOFINS,
        v_item_valorRetCOFINS,
        v_item_baseRetCSLL,
        v_item_valorRetCSLL,
        v_item_baseRetOutros,
        v_item_valorRetOutros,
        v_item_baseII,
        v_item_valorII,
        v_item_baseIOF,
        v_item_valorIOF,
        v_item_baseIPI,
        v_item_valorIPI,
        v_item_basePIS,
        v_item_valorPIS,
        v_item_basePISST,
        v_item_valorPISST,
        v_item_baseCOFINS,
        v_item_valorCOFINS,
        v_item_baseCOFINSST,
        v_item_valorCOFINSST,
        v_item_baseCreditoSimplesNac,
        v_item_valorCreditoSimplesNac,
        v_item_baseICMS,
        v_item_valorICMSOperacao,
        v_item_valorICMSDiferido,
        v_item_valorICMS,
        v_item_valorICMSDesoneracao,
        v_item_baseICMSST,
        v_item_valorICMSST,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSProprioSubstit,
        v_item_baseICMSEfetivo,
        v_item_valorICMSEfetivo,
        v_item_baseICMSEscrituracao,
        v_item_valorICMSEscrituracao,
        v_item_valorICMSDesonEscritura,
        v_item_baseICMSSTEscrituracao,
        v_item_valorICMSSTEscrituracao,
        v_item_baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente,
        v_item_valorICMSUFRemetente,
        v_item_baseFCP,
        v_item_valorFCP,
        v_item_baseFCPST,
        v_item_valorFCPST,
        v_item_baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente,
        v_item_baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario,
        v_item_baseEstimadaImpostos,
        v_item_valorEstImpFederais,
        v_item_valorEstImpEstaduais,
        v_item_valorEstImpMunicipais);
    END IF;
    v_item_valorBasePagamento := FUNC_ADD_CALC_BASE_PAGAMENTO (
      v_cab_origemDocumento,
      v_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_geraFinanceiro,
      v_item_valorProdutoServico,
      v_item_valorDescontoPagamento,
      v_item_valorOutrasDespPagament,
      v_item_valorJurosPagamento,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      p_item_valorIPIDevolucao,
      v_item_retidoISSQN,
      v_item_valorISSQN,
      v_item_valorRetIRRF,
      v_item_valorRetINSS,
      v_item_valorRetPIS,
      v_item_valorRetCOFINS,
      v_item_valorRetCSLL,
      v_item_valorRetOutros,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      v_item_valorICMSSTEscrituracao,
      v_item_somarICMSST,
      v_item_valorAcrescimoExtempTot,
      v_modDoc_geraFinanceiro);
    v_item_valorLiquidoItem := FUNC_ADD_CALC_VALOR_LIQUIDO (
      v_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_valorProdutoServico,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      p_item_valorIPIDevolucao,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      v_item_valorICMSSTEscrituracao,
      v_item_somarICMSST);
    ADD_CALCULA_CUSTO_CMV (
      v_cab_atualizaCustoMedio,
      v_cab_estabelecimento,
      v_cab_nfFornecedor,
      p_item_modeloDocumento,
      p_item_quantidade,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      p_item_valorIPIDevolucao,
      v_item_valorPIS,
      v_item_valorPISST,
      v_item_valorCOFINS,
      v_item_valorCOFINSST,
      v_item_valorCreditoSimplesNac,
      v_item_valorICMS,
      v_item_valorICMSST,
      v_item_valorICMSSTEscrituracao,
      v_item_valorLiquidoItem,
      p_item_valorDescontoCustoOpIte,
      p_item_valorDescontoCustoOpGer,
      p_item_valorAcrescimoCustoOpIt,
      p_item_valorAcrescimoCustoOpGe,
      v_item_valorAcrescimoExtempTot,
      v_item_valorDescontoCustoOpTot,
      v_item_valorAcrescimoCustoOpTo,
      v_item_precoCustoOperacao,
      v_item_valorCustoOperacao,
      v_item_precoCMV,
      v_item_valorCMV);
    IF v_inserindoItem = 1 THEN
      SELECT COALESCE (MAX (sequencia),0) + 1
      INTO v_item_sequencia
      FROM MODOCFISCALXITENS
      WHERE idDocumentoFiscal = p_item_idDocumentoFiscal;
      v_cab_ultimoVendedorItem := p_item_vendedor;
    END IF;
    IF v_item_cancelado = 0 THEN
      IF p_manterFinanceiro_Retotalizar <> 2 THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume + TRUNC(CASE WHEN p_item_controleQuantidade = 1 AND p_item_loteMultiplo <> 0 THEN p_item_quantidade / p_item_loteMultiplo ELSE p_item_quantidadeConvertida END,0);
        END IF;
        v_cab_pesoLiquido := v_cab_pesoLiquido + p_item_pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto + p_item_pesoBruto;
      END IF;
      v_cab_quantidade := v_cab_quantidade + p_item_quantidadeConvertida;
      IF v_prod_tipoProduto = '09' THEN
        v_cab_valorServicosBruto := v_cab_valorServicosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorServicos := v_cab_valorServicos + v_item_valorProdutoServico;
        v_cab_valorDescontoServicos := v_cab_valorDescontoServicos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos + p_item_valorAcrescimoItem;
      ELSE 
        v_cab_valorProdutosBruto := v_cab_valorProdutosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorProdutos := v_cab_valorProdutos + v_item_valorProdutoServico;
        v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos + p_item_valorAcrescimoItem;
      END IF;
      v_cab_valorFreteItem := v_cab_valorFreteItem + p_item_valorFreteItem;
      v_cab_valorSeguroItem := v_cab_valorSeguroItem + p_item_valorSeguroItem;
      v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem + p_item_valorAdicFreteMarItem;
      v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem + p_item_valorDespesasAduanItem;
      v_cab_valorFreteGeral := v_cab_valorFreteGeral + p_item_valorFreteGeral;
      v_cab_valorSeguroGeral := v_cab_valorSeguroGeral + p_item_valorSeguroGeral;
      v_cab_valorDescontoGeral := v_cab_valorDescontoGeral + v_item_valorDescontoGeral;
      v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral + p_item_valorOutrasDespesasGer;
      v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral + p_item_valorAdicFreteMarGeral;
      v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral + p_item_valorDespesasAduanGeral;
      v_cab_valorBasePagamento := v_cab_valorBasePagamento + v_item_valorBasePagamento;
      IF p_item_usarPrecoAVista = 1
        AND v_item_geraFinanceiro = 1
      THEN
        v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo + v_item_valorProdutoServico - v_item_valorDescontoTotal + v_item_valorOutrasDespesasTot;
      END IF;
      v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento + v_item_valorDescontoPagamento;
      v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento + v_item_valorOutrasDespPagament;
      v_cab_valorJurosPagamento := v_cab_valorJurosPagamento + v_item_valorJurosPagamento;
      v_cab_valorFreteTotal := v_cab_valorFreteTotal + v_item_valorFreteTotal;
      v_cab_valorSeguroTotal := v_cab_valorSeguroTotal + v_item_valorSeguroTotal;
      v_cab_valorDescontoTotal := v_cab_valorDescontoTotal + v_item_valorDescontoTotal;
      v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal + v_item_valorOutrasDespesasTot;
      v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal + v_item_valorAdicFreteMarTotal;
      v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal + v_item_valorDespesasAduanTotal;
      v_cab_valorLiquidoItem := v_cab_valorLiquidoItem + v_item_valorLiquidoItem;
      v_cab_valorDescontoCustoOpItem := v_cab_valorDescontoCustoOpItem + p_item_valorDescontoCustoOpIte;
      v_cab_valorDescontoCustoOpGera := v_cab_valorDescontoCustoOpGera + p_item_valorDescontoCustoOpGer;
      v_cab_valorDescontoCustoOpTota := v_cab_valorDescontoCustoOpTota + v_item_valorDescontoCustoOpTot;
      v_cab_valorAcrescimoCustoOpIte := v_cab_valorAcrescimoCustoOpIte + p_item_valorAcrescimoCustoOpIt;
      v_cab_valorAcrescimoCustoOpGer := v_cab_valorAcrescimoCustoOpGer + p_item_valorAcrescimoCustoOpGe;
      v_cab_valorAcrescimoCustoOpTot := v_cab_valorAcrescimoCustoOpTot + v_item_valorAcrescimoCustoOpTo;
      v_cab_valorCustoOperacao := v_cab_valorCustoOperacao + v_item_valorCustoOperacao;
      v_cab_valorCMV := v_cab_valorCMV + v_item_valorCMV;
      v_cab_quantidadeExtemporanea := v_cab_quantidadeExtemporanea + p_item_quantidadeExtemporanea;
      v_cab_valorAcrescimoExtempSubt := v_cab_valorAcrescimoExtempSubt + v_item_valorAcrescimoExtempSub;
      v_cab_valorAcrescimoExtempItem := v_cab_valorAcrescimoExtempItem + p_item_valorAcrescimoExtempIte;
      v_cab_valorAcrescimoExtempGera := v_cab_valorAcrescimoExtempGera + p_item_valorAcrescimoExtempGer;
      v_cab_valorAcrescimoExtempTota := v_cab_valorAcrescimoExtempTota + v_item_valorAcrescimoExtempTot;
    END IF;
    UPDATE MODOCUMENTOSFISCAIS SET
      modalidadeFrete               = v_cab_modalidadeFrete,
      ultimoVendedorItem            = v_cab_ultimoVendedorItem,
      quantidadeVolume              = v_cab_quantidadeVolume,
      quantidade                    = v_cab_quantidade,
      pesoLiquido                   = v_cab_pesoLiquido,
      pesoBruto                     = v_cab_pesoBruto,
      valorProdutosBruto            = v_cab_valorProdutosBruto,
      valorProdutos                 = v_cab_valorProdutos,
      valorDescontoProdutos         = v_cab_valorDescontoProdutos,
      valorAcrescimoProdutos        = v_cab_valorAcrescimoProdutos,
      valorServicosBruto            = v_cab_valorServicosBruto,
      valorServicos                 = v_cab_valorServicos,
      valorDescontoServicos         = v_cab_valorDescontoServicos,
      valorAcrescimoServicos        = v_cab_valorAcrescimoServicos,
      valorFreteItem                = v_cab_valorFreteItem,
      valorSeguroItem               = v_cab_valorSeguroItem,
      valorAdicFreteMarinhaMerItem  = v_cab_valorAdicFreteMarItem,
      valorDespesasAduaneirasItem   = v_cab_valorDespesasAduanItem,
      valorFreteGeral               = v_cab_valorFreteGeral,
      valorSeguroGeral              = v_cab_valorSeguroGeral,
      valorDescontoGeral            = v_cab_valorDescontoGeral,
      valorOutrasDespesasGeral      = v_cab_valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral = v_cab_valorAdicFreteMarGeral,
      valorDespesasAduaneirasGeral  = v_cab_valorDespesasAduanGeral,
      condicaoPagamento             = v_cab_condicaoPagamento,
      numeroParcelas                = v_cab_numeroParcelas,
      somaPrazoParcelas             = v_cab_somaPrazoParcelas,
      valorXPrazoParcelas           = v_cab_valorXPrazoParcelas,
      prazoMedio                    = v_cab_prazoMedio,
      prazoMedioPonderado           = v_cab_prazoMedioPonderado,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorEntradaMinima            = v_cab_valorEntradaMinima,
      valorAVistaEntrada            = v_cab_valorAVistaEntrada,
      valorPagamentoBruto           = v_cab_valorPagamentoBruto,
      valorDescontoPagamento        = v_cab_valorDescontoPagamento,
      valorOutrasDespesasPagamento  = v_cab_valorOutrasDespPagamento,
      valorJurosPagamento           = v_cab_valorJurosPagamento,
      valorPagamentoLiquido         = v_cab_valorPagamentoLiquido,
      valorTroco                    = v_cab_valorTroco,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorLiquidoItem              = v_cab_valorLiquidoItem,
      valorDescontoCustoOpItem      = v_cab_valorDescontoCustoOpItem,
      valorDescontoCustoOpGeral     = v_cab_valorDescontoCustoOpGera,
      valorDescontoCustoOpTotal     = v_cab_valorDescontoCustoOpTota,
      valorAcrescimoCustoOpItem     = v_cab_valorAcrescimoCustoOpIte,
      valorAcrescimoCustoOpGeral    = v_cab_valorAcrescimoCustoOpGer,
      valorAcrescimoCustoOpTotal    = v_cab_valorAcrescimoCustoOpTot,
      valorCustoOperacao            = v_cab_valorCustoOperacao,
      valorCMV                      = v_cab_valorCMV,
      quantidadeExtemporanea        = v_cab_quantidadeExtemporanea,
      valorAcrescimoExtempSubtotal  = v_cab_valorAcrescimoExtempSubt,
      valorAcrescimoExtempItem      = v_cab_valorAcrescimoExtempItem,
      valorAcrescimoExtempGeral     = v_cab_valorAcrescimoExtempGera,
      valorAcrescimoExtempTotal     = v_cab_valorAcrescimoExtempTota
    WHERE idDocumentoFiscal = p_item_idDocumentoFiscal;
    IF p_item_idItemDocFiscal > 0 THEN
      DELETE MODOCFISCALXCOMPOSICOESPR compDoc
      WHERE compDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND EXISTS(
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.produto = comp.produto
        WHERE comp.composicaoPreco = compDoc.composicaoPreco
        AND gradProd.gradeProduto <> p_item_gradeProduto);
    END IF;
    v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
      p_sessaoClient,
      p_config_198_obs_add_referenc,
      p_config_199_obs_add_caractA,
      p_config_200_obs_add_caractB,
      p_config_201_obs_add_caractC,
      p_config_202_obs_add_caractD,
      p_config_203_obs_add_caractE,
      p_config_413_obs_add_marca,
      p_config_418_obs_efetarEnter,
      ' ',
      0,
      'D',
      p_item_idItemDocFiscal,
      p_item_gradeProduto,
      p_item_idFormulaTinta,
      p_item_personalizacao,
      p_item_idLoteEstoque,
      p_item_controleQuantidade,
      p_item_loteMultiplo,
      p_item_altura,
      p_item_largura,
      p_item_comprimento,
      p_item_quantidade,
      p_item_observacoesDigitadas);
    MERGE INTO MODOCFISCALXITENS a USING (
      SELECT
        r_item_idItemDocFiscal         idItemDocFiscal,
        p_item_idDocumentoFiscal       idDocumentoFiscal,
        v_item_sequencia               sequencia,
        v_item_cancelado               cancelado,
        p_item_pedidoCompraFornecedor  pedidoCompraFornecedor,
        p_item_sequenciaPedidoCompraFo sequenciaPedidoCompraFornec,
        p_item_modeloDocumento         modeloDocumento,
        p_item_estabelecimentoOriginal estabelecimentoOriginal,
        p_item_vendedor                vendedor,
        p_item_gradeProduto            gradeProduto,
        p_item_idFormulaTinta          idFormulaTinta,
        p_item_personalizacao          personalizacao,
        p_item_idLoteEstoque           idLoteEstoque,
        p_item_operacaoFiscal          operacaoFiscal,
        v_item_movimentaEstoque        movimentaEstoque,
        v_item_movimentaEstoqueFiscal  movimentaEstoqueFiscal,
        v_item_geraFinanceiro          geraFinanceiro,
        p_item_localEstoque            localEstoque,
        p_item_pessoaParticipante      pessoaParticipante,
        p_item_controleQuantidade      controleQuantidade,
        p_item_unidadeMedidaConversao  unidadeMedidaConversao,
        p_item_conversorQuantidade     conversorQuantidade,
        p_item_loteMinimo              loteMinimo,
        p_item_loteMultiplo            loteMultiplo,
        p_item_altura                  altura,
        p_item_largura                 largura,
        p_item_comprimento             comprimento,
        p_item_pecas                   pecas,
        p_item_quantidade              quantidade,
        p_item_quantidadeConvertida    quantidadeConvertida,
        v_item_quantidadeDevolvidaRet  quantidadeDevolvidaRetornada,
        p_item_percentualDevolucao     percentualDevolucao,
        p_item_pesoLiquido             pesoLiquido,
        p_item_pesoBruto               pesoBruto,
        p_item_tipoPreco               tipoPreco,
        p_item_tabelaPreco             tabelaPreco,
        p_item_precoSugestaoAPrazo     precoSugestaoAPrazo,
        p_item_precoSugestaoAVista     precoSugestaoAVista,
        p_item_precoDesconto           precoDesconto,
        p_item_precoMinimo             precoMinimo,
        p_item_usarPrecoAVista         usarPrecoAVista,
        p_item_precoUnitarioBruto      precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos acrescimoUnitarioComposicao,
        v_item_precoUnitario           precoUnitario,
        v_item_precoUnitarioConvertido precoUnitarioConvertido,
        v_item_valorProdutoServicoBrut valorProdutoServicoBruto,
        v_item_valorProdutoServico     valorProdutoServico,
        p_item_percDescontoItem        percDescontoItem,
        p_item_valorDescontoItem       valorDescontoItem,
        p_item_percAcrescimoItem       percAcrescimoItem,
        p_item_valorAcrescimoItem      valorAcrescimoItem,
        p_item_valorFreteItem          valorFreteItem,
        p_item_valorSeguroItem         valorSeguroItem,
        p_item_valorAdicFreteMarItem   valorAdicFreteMarinhaMerItem,
        p_item_valorDespesasAduanItem  valorDespesasAduaneirasItem,
        p_item_valorFreteGeral         valorFreteGeral,
        p_item_valorSeguroGeral        valorSeguroGeral,
        v_item_valorDescontoGeral      valorDescontoGeral,
        p_item_valorOutrasDespesasGer  valorOutrasDespesasGeral,
        p_item_valorAdicFreteMarGeral  valorAdicFreteMarinhaMerGeral,
        p_item_valorDespesasAduanGeral valorDespesasAduaneirasGeral,
        v_item_valorBasePagamento      valorBasePagamento,
        v_item_valorDescontoPagamento  valorDescontoPagamento,
        v_item_valorOutrasDespPagament valorOutrasDespesasPagamento,
        v_item_valorJurosPagamento     valorJurosPagamento,
        v_item_valorFreteTotal         valorFreteTotal,
        v_item_valorSeguroTotal        valorSeguroTotal,
        v_item_valorDescontoTotal      valorDescontoTotal,
        v_item_valorOutrasDespesasTot  valorOutrasDespesasTotal,
        v_item_valorAdicFreteMarTotal  valorAdicFreteMarinhaMerTotal,
        v_item_valorDespesasAduanTotal valorDespesasAduaneirasTotal,
        v_item_cfop                    cfop,
        v_item_indicadorISSQN          indicadorISSQN,
        v_item_aliquotaISSQN           aliquotaISSQN,
        v_item_retidoISSQN             retidoISSQN,
        v_item_tributadoForaMunicipio  tributadoForaMunicipio,
        v_item_incentivoFiscal         incentivoFiscal,
        v_item_listaServicos           listaServicos,
        v_item_cnae                    cnae,
        v_item_idServicoMunicipio      idServicoMunicipio,
        v_item_numeroProcessoAdministr numeroProcessoAdministrativo,
        v_item_baseISSQN               baseISSQN,
        v_item_valorISSQN              valorISSQN,
        v_item_retencaoIRRF            retencaoIRRF,
        v_item_baseRetIRRF             baseRetIRRF,
        v_item_valorRetIRRF            valorRetIRRF,
        v_item_retencaoINSS            retencaoINSS,
        v_item_baseRetINSS             baseRetINSS,
        v_item_valorRetINSS            valorRetINSS,
        v_item_retencaoPIS             retencaoPIS,
        v_item_baseRetPIS              baseRetPIS,
        v_item_valorRetPIS             valorRetPIS,
        v_item_retencaoCOFINS          retencaoCOFINS,
        v_item_baseRetCOFINS           baseRetCOFINS,
        v_item_valorRetCOFINS          valorRetCOFINS,
        v_item_retencaoCSLL            retencaoCSLL,
        v_item_baseRetCSLL             baseRetCSLL,
        v_item_valorRetCSLL            valorRetCSLL,
        v_item_retencaoOutros          retencaoOutros,
        v_item_baseRetOutros           baseRetOutros,
        v_item_valorRetOutros          valorRetOutros,
        v_item_aliquotaII              aliquotaII,
        v_item_baseII                  baseII,
        v_item_valorII                 valorII,
        v_item_aliquotaIOF             aliquotaIOF,
        v_item_baseIOF                 baseIOF,
        v_item_valorIOF                valorIOF,
        v_item_codigoEnquadramentoIPI  codigoEnquadramentoIPI,
        v_item_stIPI                   stIPI,
        v_item_aliquotaIPI             aliquotaIPI,
        v_item_valorAliquotaIPI        valorAliquotaIPI,
        v_item_baseIPI                 baseIPI,
        v_item_valorIPI                valorIPI,
        p_item_valorIPIDevolucao       valorIPIDevolucao,
        v_item_stPIS                   stPIS,
        v_item_aliquotaPIS             aliquotaPIS,
        v_item_valorAliquotaPIS        valorAliquotaPIS,
        v_item_basePIS                 basePIS,
        v_item_valorPIS                valorPIS,
        v_item_aliquotaPISST           aliquotaPISST,
        v_item_valorAliquotaPISST      valorAliquotaPISST,
        v_item_basePISST               basePISST,
        v_item_valorPISST              valorPISST,
        v_item_stCOFINS                stCOFINS,
        v_item_aliquotaCOFINS          aliquotaCOFINS,
        v_item_valorAliquotaCOFINS     valorAliquotaCOFINS,
        v_item_baseCOFINS              baseCOFINS,
        v_item_valorCOFINS             valorCOFINS,
        v_item_aliquotaCOFINSST        aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST   valorAliquotaCOFINSST,
        v_item_baseCOFINSST            baseCOFINSST,
        v_item_valorCOFINSST           valorCOFINSST,
        v_item_stSimplesNacional       stSimplesNacional,
        v_item_creditoSimplesNacional  creditoSimplesNacional,
        v_item_baseCreditoSimplesNac   baseCreditoSimplesNacional,
        v_item_valorCreditoSimplesNac  valorCreditoSimplesNacional,
        v_item_stICMS                  stICMS,
        v_item_modalBaseCalcICMS       modalidadeBaseCalcICMS,
        v_item_reducaoBaseICMS         reducaoBaseICMS,
        v_item_aliquotaICMS            aliquotaICMS,
        v_item_diferimentoICMS         diferimentoICMS,
        v_item_motivoDesoneracaoICMS   motivoDesoneracaoICMS,
        v_item_idBeneficio             idBeneficio,
        v_item_baseICMS                baseICMS,
        v_item_valorICMSOperacao       valorICMSOperacao,
        v_item_valorICMSDiferido       valorICMSDiferido,
        v_item_valorICMS               valorICMS,
        v_item_valorICMSDesoneracao    valorICMSDesoneracao,
        v_item_modalBaseCalcICMSST     modalidadeBaseCalcICMSST,
        v_item_margemValorAdicionadoST margemValorAdicionadoST,
        v_item_reducaoBaseST           reducaoBaseST,
        v_item_aliquotaICMSST          aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin aliquotaSTSuportConsFinal,
        v_item_baseICMSST              baseICMSST,
        v_item_valorICMSST             valorICMSST,
        v_item_baseICMSSTAnteriormente baseICMSSTAnteriormente,
        v_item_valorICMSSTAnteriorment valorICMSSTAnteriormente,
        v_item_valorICMSProprioSubstit valorICMSProprioSubstituto,
        v_item_reducaoBaseICMSEfetivo  reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo     aliquotaICMSEfetivo,
        v_item_baseICMSEfetivo         baseICMSEfetivo,
        v_item_valorICMSEfetivo        valorICMSEfetivo,
        v_item_stICMSEscrituracao      stICMSEscrituracao,
        v_item_reducaoBaseICMSEscritur reducaoBaseICMSEscrituracao,
        v_item_aliquotaICMSEscrituraca aliquotaICMSEscrituracao,
        v_item_diferimentoICMSEscritur diferimentoICMSEscrituracao,
        v_item_baseICMSEscrituracao    baseICMSEscrituracao,
        v_item_valorICMSEscrituracao   valorICMSEscrituracao,
        v_item_valorICMSDesonEscritura valorICMSDesonEscrituracao,
        v_item_margemValorAdicSTEscrit margemValorAdicSTEscrituracao,
        v_item_reducaoBaseSTEscriturac reducaoBaseSTEscrituracao,
        v_item_aliquotaICMSSTEscritura aliquotaICMSSTEscrituracao,
        v_item_baseICMSSTEscrituracao  baseICMSSTEscrituracao,
        v_item_valorICMSSTEscrituracao valorICMSSTEscrituracao,
        v_item_somarICMSST             somarICMSST,
        v_item_aliquotaICMSUFDestinat  aliquotaICMSUFDestinatario,
        v_item_aliquotaICMSInterestad  aliquotaICMSInterestadual,
        v_item_partilhaICMSInterestad  partilhaICMSInterestadual,
        v_item_baseICMSUFDestinatario  baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente     baseICMSUFRemetente,
        v_item_valorICMSUFRemetente    valorICMSUFRemetente,
        v_item_aliquotaFCP             aliquotaFCP,
        v_item_baseFCP                 baseFCP,
        v_item_valorFCP                valorFCP,
        v_item_aliquotaFCPST           aliquotaFCPST,
        v_item_baseFCPST               baseFCPST,
        v_item_valorFCPST              valorFCPST,
        v_item_aliquotaFCPSTAnteriorm  aliquotaFCPSTAnteriormente,
        v_item_baseFCPSTAnteriormente  baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente valorFCPSTAnteriormente,
        v_item_aliquotaFCPUFDestinat   aliquotaFCPUFDestinatario,
        v_item_baseFCPUFDestinatario   baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario  valorFCPUFDestinatario,
        v_item_aliquotaEstImpFederais  aliquotaEstimadaImpFederais,
        v_item_aliquotaEstImpEstaduais aliquotaEstimadaImpEstaduais,
        v_item_aliquotaEstImpMunicipai aliquotaEstimadaImpMunicipais,
        v_item_baseEstimadaImpostos    baseEstimadaImpostos,
        v_item_valorEstImpFederais     valorEstimadoImpFederais,
        v_item_valorEstImpEstaduais    valorEstimadoImpEstaduais,
        v_item_valorEstImpMunicipais   valorEstimadoImpMunicipais,
        v_item_valorLiquidoItem        valorLiquidoItem,
        p_item_valorDescontoCustoOpIte valorDescontoCustoOpItem,
        p_item_valorDescontoCustoOpGer valorDescontoCustoOpGeral,
        v_item_valorDescontoCustoOpTot valorDescontoCustoOpTotal,
        p_item_valorAcrescimoCustoOpIt valorAcrescimoCustoOpItem,
        p_item_valorAcrescimoCustoOpGe valorAcrescimoCustoOpGeral,
        v_item_valorAcrescimoCustoOpTo valorAcrescimoCustoOpTotal,
        v_item_precoCustoOperacao      precoCustoOperacao,
        v_item_valorCustoOperacao      valorCustoOperacao,
        v_item_precoCMV                precoCMV,
        v_item_valorCMV                valorCMV,
        p_item_quantidadeExtemporanea  quantidadeExtemporanea,
        p_item_acrescimoUnitarioExtemp acrescimoUnitarioExtemporaneo,
        v_item_valorAcrescimoExtempSub valorAcrescimoExtempSubtotal,
        p_item_valorAcrescimoExtempIte valorAcrescimoExtempItem,
        p_item_valorAcrescimoExtempGer valorAcrescimoExtempGeral,
        v_item_valorAcrescimoExtempTot valorAcrescimoExtempTotal,
        p_item_observacoesDigitadas    observacoesDigitadas,
        v_observacoes                  observacoes
      FROM DUAL) b
    ON (a.idItemDocFiscal = b.idItemDocFiscal)
    WHEN MATCHED THEN UPDATE SET
      a.idDocumentoFiscal             = b.idDocumentoFiscal,
      a.sequencia                     = b.sequencia,
      a.cancelado                     = b.cancelado,
      a.pedidoCompraFornecedor        = b.pedidoCompraFornecedor,
      a.sequenciaPedidoCompraFornec   = b.sequenciaPedidoCompraFornec,
      a.vendedor                      = b.vendedor,
      a.modeloDocumento               = b.modeloDocumento,
      a.estabelecimentoOriginal       = b.estabelecimentoOriginal,
      a.gradeProduto                  = b.gradeProduto,
      a.idFormulaTinta                = b.idFormulaTinta,
      a.personalizacao                = b.personalizacao,
      a.idLoteEstoque                 = b.idLoteEstoque,
      a.operacaoFiscal                = b.operacaoFiscal,
      a.movimentaEstoque              = b.movimentaEstoque,
      a.movimentaEstoqueFiscal        = b.movimentaEstoqueFiscal,
      a.geraFinanceiro                = b.geraFinanceiro,
      a.localEstoque                  = b.localEstoque,
      a.pessoaParticipante            = b.pessoaParticipante,
      a.controleQuantidade            = b.controleQuantidade,
      a.unidadeMedidaConversao        = b.unidadeMedidaConversao,
      a.conversorQuantidade           = b.conversorQuantidade,
      a.loteMinimo                    = b.loteMinimo,
      a.loteMultiplo                  = b.loteMultiplo,
      a.altura                        = b.altura,
      a.largura                       = b.largura,
      a.comprimento                   = b.comprimento,
      a.pecas                         = b.pecas,
      a.quantidade                    = b.quantidade,
      a.quantidadeConvertida          = b.quantidadeConvertida,
      a.quantidadeDevolvidaRetornada  = b.quantidadeDevolvidaRetornada,
      a.percentualDevolucao           = b.percentualDevolucao,
      a.pesoLiquido                   = b.pesoLiquido,
      a.pesoBruto                     = b.pesoBruto,
      a.tipoPreco                     = b.tipoPreco,
      a.tabelaPreco                   = b.tabelaPreco,
      a.precoSugestaoAPrazo           = b.precoSugestaoAPrazo,
      a.precoSugestaoAVista           = b.precoSugestaoAVista,
      a.precoDesconto                 = b.precoDesconto,
      a.precoMinimo                   = b.precoMinimo,
      a.usarPrecoAVista               = b.usarPrecoAVista,
      a.precoUnitarioBruto            = b.precoUnitarioBruto,
      a.acrescimoUnitarioComposicao   = b.acrescimoUnitarioComposicao,
      a.precoUnitario                 = b.precoUnitario,
      a.precoUnitarioConvertido       = b.precounitarioConvertido,
      a.valorProdutoServicoBruto      = b.valorProdutoServicoBruto,
      a.valorProdutoServico           = b.valorProdutoServico,
      a.percDescontoItem              = b.percDescontoItem,
      a.valorDescontoItem             = b.valorDescontoItem,
      a.percAcrescimoItem             = b.percAcrescimoItem,
      a.valorAcrescimoItem            = b.valorAcrescimoItem,
      a.valorFreteItem                = b.valorFreteItem,
      a.valorSeguroItem               = b.valorSeguroItem,
      a.valorAdicFreteMarinhaMerItem  = b.valorAdicFreteMarinhaMerItem,
      a.valorDespesasAduaneirasItem   = b.valorDespesasAduaneirasItem,
      a.valorFreteGeral               = b.valorFreteGeral,
      a.valorSeguroGeral              = b.valorSeguroGeral,
      a.valorDescontoGeral            = b.valorDescontoGeral,
      a.valorOutrasDespesasGeral      = b.valorOutrasDespesasGeral,
      a.valorAdicFreteMarinhaMerGeral = b.valorAdicFreteMarinhaMerGeral,
      a.valorDespesasAduaneirasGeral  = b.valorDespesasAduaneirasGeral,
      a.valorBasePagamento            = b.valorBasePagamento,
      a.valorDescontoPagamento        = b.valorDescontoPagamento,
      a.valorOutrasDespesasPagamento  = b.valorOutrasDespesasPagamento,
      a.valorJurosPagamento           = b.valorJurosPagamento,
      a.valorFreteTotal               = b.valorFreteTotal,
      a.valorSeguroTotal              = b.valorSeguroTotal,
      a.valorDescontoTotal            = b.valorDescontoTotal,
      a.valorOutrasDespesasTotal      = b.valorOutrasDespesasTotal,
      a.valorAdicFreteMarinhaMerTotal = b.valorAdicFreteMarinhaMerTotal,
      a.valorDespesasAduaneirasTotal  = b.valorDespesasAduaneirasTotal,
      a.cfop                          = b.cfop,
      a.indicadorISSQN                = b.indicadorISSQN,
      a.aliquotaISSQN                 = b.aliquotaISSQN,
      a.retidoISSQN                   = b.retidoISSQN,
      a.tributadoForaMunicipio        = b.tributadoForaMunicipio,
      a.incentivoFiscal               = b.incentivoFiscal,
      a.listaServicos                 = b.listaServicos,
      a.cnae                          = b.cnae,
      a.idServicoMunicipio            = b.idServicoMunicipio,
      a.numeroProcessoAdministrativo  = b.numeroProcessoAdministrativo,
      a.baseISSQN                     = b.baseISSQN,
      a.valorISSQN                    = b.valorISSQN,
      a.retencaoIRRF                  = b.retencaoIRRF,
      a.baseRetIRRF                   = b.baseRetIRRF,
      a.valorRetIRRF                  = b.valorRetIRRF,
      a.retencaoINSS                  = b.retencaoINSS,
      a.baseRetINSS                   = b.baseRetINSS,
      a.valorRetINSS                  = b.valorRetINSS,
      a.retencaoPIS                   = b.retencaoPIS,
      a.baseRetPIS                    = b.baseRetPIS,
      a.valorRetPIS                   = b.valorRetPIS,
      a.retencaoCOFINS                = b.retencaoCOFINS,
      a.baseRetCOFINS                 = b.baseRetCOFINS,
      a.valorRetCOFINS                = b.valorRetCOFINS,
      a.retencaoCSLL                  = b.retencaoCSLL,
      a.baseRetCSLL                   = b.baseRetCSLL,
      a.valorRetCSLL                  = b.valorRetCSLL,
      a.retencaoOutros                = b.retencaoOutros,
      a.baseRetOutros                 = b.baseRetOutros,
      a.valorRetOutros                = b.valorRetOutros,
      a.aliquotaII                    = b.aliquotaII,
      a.baseII                        = b.baseII,
      a.valorII                       = b.valorII,
      a.aliquotaIOF                   = b.aliquotaIOF,
      a.baseIOF                       = b.baseIOF,
      a.valorIOF                      = b.valorIOF,
      a.codigoEnquadramentoIPI        = b.codigoEnquadramentoIPI,
      a.stIPI                         = b.stIPI,
      a.aliquotaIPI                   = b.aliquotaIPI,
      a.valorAliquotaIPI              = b.valorAliquotaIPI,
      a.baseIPI                       = b.baseIPI,
      a.valorIPI                      = b.valorIPI,
      a.valorIPIDevolucao             = b.valorIPIDevolucao,
      a.stPIS                         = b.stPIS,
      a.aliquotaPIS                   = b.aliquotaPIS,
      a.valorAliquotaPIS              = b.valorAliquotaPIS,
      a.basePIS                       = b.basePIS,
      a.valorPIS                      = b.valorPIS,
      a.aliquotaPISST                 = b.aliquotaPISST,
      a.valorAliquotaPISST            = b.valorAliquotaPISST,
      a.basePISST                     = b.basePISST,
      a.valorPISST                    = b.valorPISST,
      a.stCOFINS                      = b.stCOFINS,
      a.aliquotaCOFINS                = b.aliquotaCOFINS,
      a.valorAliquotaCOFINS           = b.valorAliquotaCOFINS,
      a.baseCOFINS                    = b.baseCOFINS,
      a.valorCOFINS                   = b.valorCOFINS,
      a.aliquotaCOFINSST              = b.aliquotaCOFINSST,
      a.valorAliquotaCOFINSST         = b.valorAliquotaCOFINSST,
      a.baseCOFINSST                  = b.baseCOFINSST,
      a.valorCOFINSST                 = b.valorCOFINSST,
      a.stSimplesNacional             = b.stSimplesNacional,
      a.creditoSimplesNacional        = b.creditoSimplesNacional,
      a.baseCreditoSimplesNacional    = b.baseCreditoSimplesNacional,
      a.valorCreditoSimplesNacional   = b.valorCreditoSimplesNacional,
      a.stICMS                        = b.stICMS,
      a.modalidadeBaseCalcICMS        = b.modalidadeBaseCalcICMS,
      a.reducaoBaseICMS               = b.reducaoBaseICMS,
      a.aliquotaICMS                  = b.aliquotaICMS,
      a.diferimentoICMS               = b.diferimentoICMS,
      a.motivoDesoneracaoICMS         = b.motivoDesoneracaoICMS,
      a.idBeneficio                   = b.idBeneficio,
      a.baseICMS                      = b.baseICMS,
      a.valorICMSoperacao             = b.valorICMSoperacao,
      a.valorICMSdiferido             = b.valorICMSdiferido,
      a.valorICMS                     = b.valorICMS,
      a.valorICMSdesoneracao          = b.valorICMSdesoneracao,
      a.modalidadeBaseCalcICMSST      = b.modalidadeBaseCalcICMSST,
      a.margemValorAdicionadoST       = b.margemValorAdicionadoST,
      a.reducaoBaseST                 = b.reducaoBaseST,
      a.aliquotaICMSST                = b.aliquotaICMSST,
      a.aliquotaSTSuportConsFinal     = b.aliquotaSTSuportConsFinal,
      a.baseICMSST                    = b.baseICMSST,
      a.valorICMSST                   = b.valorICMSST,
      a.baseICMSSTAnteriormente       = b.baseICMSSTAnteriormente,
      a.valorICMSSTAnteriormente      = b.valorICMSSTAnteriormente,
      a.valorICMSProprioSubstituto    = b.valorICMSProprioSubstituto,
      a.reducaoBaseICMSEfetivo        = b.reducaoBaseICMSEfetivo,
      a.aliquotaICMSEfetivo           = b.aliquotaICMSEfetivo,
      a.baseICMSEfetivo               = b.baseICMSEfetivo,
      a.valorICMSEfetivo              = b.valorICMSEfetivo,
      a.stICMSEscrituracao            = b.stICMSEscrituracao,
      a.reducaoBaseICMSEscrituracao   = b.reducaoBaseICMSEscrituracao,
      a.aliquotaICMSEscrituracao      = b.aliquotaICMSEscrituracao,
      a.diferimentoICMSEscrituracao   = b.diferimentoICMSEscrituracao,
      a.baseICMSEscrituracao          = b.baseICMSEscrituracao,
      a.valorICMSEscrituracao         = b.valorICMSEscrituracao,
      a.valorICMSDesonEscrituracao    = b.valorICMSDesonEscrituracao,
      a.margemValorAdicSTEscrituracao = b.margemValorAdicSTEscrituracao,
      a.reducaoBaseSTEscrituracao     = b.reducaoBaseSTEscrituracao,
      a.aliquotaICMSSTEscrituracao    = b.aliquotaICMSSTEscrituracao,
      a.baseICMSSTEscrituracao        = b.baseICMSSTEscrituracao,
      a.valorICMSSTEscrituracao       = b.valorICMSSTEscrituracao,
      a.somarICMSST                   = b.somarICMSST,
      a.aliquotaICMSUFDestinatario    = b.aliquotaICMSUFDestinatario,
      a.aliquotaICMSInterestadual     = b.aliquotaICMSInterestadual,
      a.partilhaICMSInterestadual     = b.partilhaICMSInterestadual,
      a.baseICMSUFDestinatario        = b.baseICMSUFDestinatario,
      a.valorICMSUFDestinatario       = b.valorICMSUFDestinatario,
      a.baseICMSUFRemetente           = b.baseICMSUFRemetente,
      a.valorICMSUFRemetente          = b.valorICMSUFRemetente,
      a.aliquotaFCP                   = b.aliquotaFCP,
      a.baseFCP                       = b.baseFCP,
      a.valorFCP                      = b.valorFCP,
      a.aliquotaFCPST                 = b.aliquotaFCPST,
      a.baseFCPST                     = b.baseFCPST,
      a.valorFCPST                    = b.valorFCPST,
      a.aliquotaFCPSTAnteriormente    = b.aliquotaFCPSTAnteriormente,
      a.baseFCPSTAnteriormente        = b.baseFCPSTAnteriormente,
      a.valorFCPSTAnteriormente       = b.valorFCPSTAnteriormente,
      a.aliquotaFCPUFDestinatario     = b.aliquotaFCPUFDestinatario,
      a.baseFCPUFDestinatario         = b.baseFCPUFDestinatario,
      a.valorFCPUFDestinatario        = b.valorFCPUFDestinatario,
      a.aliquotaestimadaimpfederais   = b.aliquotaestimadaimpfederais,
      a.aliquotaestimadaimpestaduais  = b.aliquotaestimadaimpestaduais,
      a.aliquotaestimadaimpmunicipais = b.aliquotaestimadaimpmunicipais,
      a.baseestimadaimpostos          = b.baseestimadaimpostos,
      a.valorestimadoimpfederais      = b.valorestimadoimpfederais,
      a.valorEstimadoImpEstaduais     = b.valorEstimadoImpEstaduais,
      a.valorEstimadoImpMunicipais    = b.valorEstimadoImpMunicipais,
      a.valorLiquidoItem              = b.valorLiquidoItem,
      a.valorDescontoCustoOpItem      = b.valorDescontoCustoOpItem,
      a.valorDescontoCustoOpGeral     = b.valorDescontoCustoOpGeral,
      a.valorDescontoCustoOpTotal     = b.valorDescontoCustoOpTotal,
      a.valorAcrescimoCustoOpItem     = b.valorAcrescimoCustoOpItem,
      a.valorAcrescimoCustoOpGeral    = b.valorAcrescimoCustoOpGeral,
      a.valorAcrescimoCustoOpTotal    = b.valorAcrescimoCustoOpTotal,
      a.precoCustoOperacao            = b.precoCustoOperacao,
      a.valorCustoOperacao            = b.valorCustoOperacao,
      a.precoCMV                      = b.precoCMV,
      a.valorCMV                      = b.valorCMV,
      a.quantidadeExtemporanea        = b.quantidadeExtemporanea,
      a.acrescimoUnitarioExtemporaneo = b.acrescimoUnitarioExtemporaneo,
      a.valorAcrescimoExtempSubtotal  = b.valorAcrescimoExtempSubtotal,
      a.valorAcrescimoExtempItem      = b.valorAcrescimoExtempItem,
      a.valorAcrescimoExtempGeral     = b.valorAcrescimoExtempGeral,
      a.valorAcrescimoExtempTotal     = b.valorAcrescimoExtempTotal,
      a.observacoesDigitadas          = b.observacoesDigitadas,
      a.observacoes                   = b.observacoes
    WHEN NOT MATCHED THEN INSERT (
      idItemDocFiscal,
      idDocumentoFiscal,
      sequencia,
      cancelado,
      pedidoCompraFornecedor,
      sequenciaPedidoCompraFornec,
      modeloDocumento,
      estabelecimentoOriginal,
      vendedor,
      gradeProduto,
      idFormulaTinta,
      personalizacao,
      idLoteEstoque,
      operacaoFiscal,
      movimentaEstoque,
      movimentaEstoqueFiscal,
      geraFinanceiro,
      localEstoque,
      pessoaParticipante,
      controleQuantidade,
      unidadeMedidaConversao,
      conversorQuantidade,
      loteMinimo,
      loteMultiplo,
      altura,
      largura,
      comprimento,
      pecas,
      quantidade,
      quantidadeConvertida,
      quantidadeDevolvidaRetornada,
      percentualDevolucao,
      pesoLiquido,
      pesoBruto,
      tipoPreco,
      tabelaPreco,
      precoSugestaoAPrazo,
      precoSugestaoAVista,
      precoDesconto,
      precoMinimo,
      usarPrecoAVista,
      precoUnitarioBruto,
      acrescimoUnitarioComposicao,
      precoUnitario,
      precoUnitarioConvertido,
      valorProdutoServicoBruto,
      valorProdutoServico,
      percDescontoItem,
      valorDescontoItem,
      percAcrescimoItem,
      valorAcrescimoItem,
      valorFreteItem,
      valorSeguroItem,
      valorAdicFreteMarinhaMerItem,
      valorDespesasAduaneirasItem,
      valorFreteGeral,
      valorSeguroGeral,
      valorDescontoGeral,
      valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral,
      valorDespesasAduaneirasGeral,
      valorBasePagamento,
      valorDescontoPagamento,
      valorOutrasDespesasPagamento,
      valorJurosPagamento,
      valorFreteTotal,
      valorSeguroTotal,
      valorDescontoTotal,
      valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal,
      valorDespesasAduaneirasTotal,
      cfop,
      indicadorISSQN,
      aliquotaISSQN,
      retidoISSQN,
      tributadoForaMunicipio,
      incentivoFiscal,
      listaServicos,
      cnae,
      idServicoMunicipio,
      numeroProcessoAdministrativo,
      baseISSQN,
      valorISSQN,
      retencaoIRRF,
      baseRetIRRF,
      valorRetIRRF,
      retencaoINSS,
      baseRetINSS,
      valorRetINSS,
      retencaoPIS,
      baseRetPIS,
      valorRetPIS,
      retencaoCOFINS,
      baseRetCOFINS,
      valorRetCOFINS,
      retencaoCSLL,
      baseRetCSLL,
      valorRetCSLL,
      retencaoOutros,
      baseRetOutros,
      valorRetOutros,
      aliquotaII,
      baseII,
      valorII,
      aliquotaIOF,
      baseIOF,
      valorIOF,
      codigoEnquadramentoIPI,
      stIPI,
      aliquotaIPI,
      valorAliquotaIPI,
      baseIPI,
      valorIPI,
      valorIPIDevolucao,
      stPIS,
      aliquotaPIS,
      valorAliquotaPIS,
      basePIS,
      valorPIS,
      aliquotaPISST,
      valorAliquotaPISST,
      basePISST,
      valorPISST,
      stCOFINS,
      aliquotaCOFINS,
      valorAliquotaCOFINS,
      baseCOFINS,
      valorCOFINS,
      aliquotaCOFINSST,
      valorAliquotaCOFINSST,
      baseCOFINSST,
      valorCOFINSST,
      stSimplesNacional,
      creditoSimplesNacional,
      baseCreditoSimplesNacional,
      valorCreditoSimplesNacional,
      stICMS,
      modalidadeBaseCalcICMS,
      reducaoBaseICMS,
      aliquotaICMS,
      diferimentoICMS,
      motivoDesoneracaoICMS,
      idBeneficio,
      baseICMS,
      valorICMSOperacao,
      valorICMSDiferido,
      valorICMS,
      valorICMSDesoneracao,
      modalidadeBaseCalcICMSST,
      margemValorAdicionadoST,
      reducaoBaseST,
      aliquotaICMSST,
      aliquotaSTSuportConsFinal,
      baseICMSST,
      valorICMSST,
      baseICMSSTAnteriormente,
      valorICMSSTAnteriormente,
      valorICMSProprioSubstituto,
      reducaoBaseICMSEfetivo,
      aliquotaICMSEfetivo,
      baseICMSEfetivo,
      valorICMSEfetivo,
      stICMSEscrituracao,
      reducaoBaseICMSEscrituracao,
      aliquotaICMSEscrituracao,
      diferimentoICMSEscrituracao,
      baseICMSEscrituracao,
      valorICMSEscrituracao,
      valorICMSDesonEscrituracao,
      margemValorAdicSTEscrituracao,
      reducaoBaseSTEscrituracao,
      aliquotaICMSSTEscrituracao,
      baseICMSSTEscrituracao,
      valorICMSSTEscrituracao,
      somarICMSST,
      aliquotaICMSUFDestinatario,
      aliquotaICMSInterestadual,
      partilhaICMSInterestadual,
      baseICMSUFDestinatario,
      valorICMSUFDestinatario,
      baseICMSUFRemetente,
      valorICMSUFRemetente,
      aliquotaFCP,
      baseFCP,
      valorFCP,
      aliquotaFCPST,
      baseFCPST,
      valorFCPST,
      aliquotaFCPSTAnteriormente,
      baseFCPSTAnteriormente,
      valorFCPSTAnteriormente,
      aliquotaFCPUFDestinatario,
      baseFCPUFDestinatario,
      valorFCPUFDestinatario,
      aliquotaEstimadaImpFederais,
      aliquotaEstimadaImpEstaduais,
      aliquotaEstimadaImpMunicipais,
      baseEstimadaImpostos,
      valorEstimadoImpFederais,
      valorEstimadoImpEstaduais,
      valorEstimadoImpMunicipais,
      valorLiquidoItem,
      valorDescontoCustoOpItem,
      valorDescontoCustoOpGeral,
      valorDescontoCustoOpTotal,
      valorAcrescimoCustoOpItem,
      valorAcrescimoCustoOpGeral,
      valorAcrescimoCustoOpTotal,
      precoCustoOperacao,
      valorCustoOperacao,
      precoCMV,
      valorCMV,
      quantidadeExtemporanea,
      acrescimoUnitarioExtemporaneo,
      valorAcrescimoExtempSubtotal,
      valorAcrescimoExtempItem,
      valorAcrescimoExtempGeral,
      valorAcrescimoExtempTotal,
      observacoesDigitadas,
      observacoes)
    VALUES (
      b.idItemDocFiscal,
      b.idDocumentoFiscal,
      b.sequencia,
      b.cancelado,
      b.pedidoCompraFornecedor,
      b.sequenciaPedidoCompraFornec,
      b.modeloDocumento,
      b.estabelecimentoOriginal,
      b.vendedor,
      b.gradeProduto,
      b.idFormulaTinta,
      b.personalizacao,
      b.idLoteEstoque,
      b.operacaoFiscal,
      b.movimentaEstoque,
      b.movimentaEstoqueFiscal,
      b.geraFinanceiro,
      b.localEstoque,
      b.pessoaParticipante,
      b.controleQuantidade,
      b.unidadeMedidaConversao,
      b.conversorQuantidade,
      b.loteMinimo,
      b.loteMultiplo,
      b.altura,
      b.largura,
      b.comprimento,
      b.pecas,
      b.quantidade,
      b.quantidadeConvertida,
      b.quantidadeDevolvidaRetornada,
      b.percentualDevolucao,
      b.pesoLiquido,
      b.pesoBruto,
      b.tipoPreco,
      b.tabelaPreco,
      b.precoSugestaoAPrazo,
      b.precoSugestaoAVista,
      b.precoDesconto,
      b.precoMinimo,
      b.usarPrecoAVista,
      b.precoUnitarioBruto,
      b.acrescimoUnitarioComposicao,
      b.precoUnitario,
      b.precoUnitarioConvertido,
      b.valorProdutoServicoBruto,
      b.valorProdutoServico,
      b.percDescontoItem,
      b.valorDescontoItem,
      b.percAcrescimoItem,
      b.valorAcrescimoItem,
      b.valorFreteItem,
      b.valorSeguroItem,
      b.valorAdicFreteMarinhaMerItem,
      b.valorDespesasAduaneirasItem,
      b.valorFreteGeral,
      b.valorSeguroGeral,
      b.valorDescontoGeral,
      b.valorOutrasDespesasGeral,
      b.valorAdicFreteMarinhaMerGeral,
      b.valorDespesasAduaneirasGeral,
      b.valorBasePagamento,
      b.valorDescontoPagamento,
      b.valorOutrasDespesasPagamento,
      b.valorJurosPagamento,
      b.valorFreteTotal,
      b.valorSeguroTotal,
      b.valorDescontoTotal,
      b.valorOutrasDespesasTotal,
      b.valorAdicFreteMarinhaMerTotal,
      b.valorDespesasAduaneirasTotal,
      b.cfop,
      b.indicadorISSQN,
      b.aliquotaISSQN,
      b.retidoISSQN,
      b.tributadoForaMunicipio,
      b.incentivoFiscal,
      b.listaServicos,
      b.cnae,
      b.idServicoMunicipio,
      b.numeroProcessoAdministrativo,
      b.baseISSQN,
      b.valorISSQN,
      b.retencaoIRRF,
      b.baseRetIRRF,
      b.valorRetIRRF,
      b.retencaoINSS,
      b.baseRetINSS,
      b.valorRetINSS,
      b.retencaoPIS,
      b.baseRetPIS,
      b.valorRetPIS,
      b.retencaoCOFINS,
      b.baseRetCOFINS,
      b.valorRetCOFINS,
      b.retencaoCSLL,
      b.baseRetCSLL,
      b.valorRetCSLL,
      b.retencaoOutros,
      b.baseRetOutros,
      b.valorRetOutros,
      b.aliquotaII,
      b.baseII,
      b.valorII,
      b.aliquotaIOF,
      b.baseIOF,
      b.valorIOF,
      b.codigoEnquadramentoIPI,
      b.stIPI,
      b.aliquotaIPI,
      b.valorAliquotaIPI,
      b.baseIPI,
      b.valorIPI,
      b.valorIPIDevolucao,
      b.stPIS,
      b.aliquotaPIS,
      b.valorAliquotaPIS,
      b.basePIS,
      b.valorPIS,
      b.aliquotaPISST,
      b.valorAliquotaPISST,
      b.basePISST,
      b.valorPISST,
      b.stCOFINS,
      b.aliquotaCOFINS,
      b.valorAliquotaCOFINS,
      b.baseCOFINS,
      b.valorCOFINS,
      b.aliquotaCOFINSST,
      b.valorAliquotaCOFINSST,
      b.baseCOFINSST,
      b.valorCOFINSST,
      b.stSimplesNacional,
      b.creditoSimplesNacional,
      b.baseCreditoSimplesNacional,
      b.valorCreditoSimplesNacional,
      b.stICMS,
      b.modalidadeBaseCalcICMS,
      b.reducaoBaseICMS,
      b.aliquotaICMS,
      b.diferimentoICMS,
      b.motivoDesoneracaoICMS,
      b.idBeneficio,
      b.baseICMS,
      b.valorICMSOperacao,
      b.valorICMSDiferido,
      b.valorICMS,
      b.valorICMSDesoneracao,
      b.modalidadeBaseCalcICMSST,
      b.margemValorAdicionadoST,
      b.reducaoBaseST,
      b.aliquotaICMSST,
      b.aliquotaSTSuportConsFinal,
      b.baseICMSST,
      b.valorICMSST,
      b.baseICMSSTAnteriormente,
      b.valorICMSSTAnteriormente,
      b.valorICMSProprioSubstituto,
      b.reducaoBaseICMSEfetivo,
      b.aliquotaICMSEfetivo,
      b.baseICMSEfetivo,
      b.valorICMSEfetivo,
      b.stICMSEscrituracao,
      b.reducaoBaseICMSEscrituracao,
      b.aliquotaICMSEscrituracao,
      b.diferimentoICMSEscrituracao,
      b.baseICMSEscrituracao,
      b.valorICMSEscrituracao,
      b.valorICMSDesonEscrituracao,
      b.margemValorAdicSTEscrituracao,
      b.reducaoBaseSTEscrituracao,
      b.aliquotaICMSSTEscrituracao,
      b.baseICMSSTEscrituracao,
      b.valorICMSSTEscrituracao,
      b.somarICMSST,
      b.aliquotaICMSUFDestinatario,
      b.aliquotaICMSInterestadual,
      b.partilhaICMSInterestadual,
      b.baseICMSUFDestinatario,
      b.valorICMSUFDestinatario,
      b.baseICMSUFRemetente,
      b.valorICMSUFRemetente,
      b.aliquotaFCP,
      b.baseFCP,
      b.valorFCP,
      b.aliquotaFCPST,
      b.baseFCPST,
      b.valorFCPST,
      b.aliquotaFCPSTAnteriormente,
      b.baseFCPSTAnteriormente,
      b.valorFCPSTAnteriormente,
      b.aliquotaFCPUFDestinatario,
      b.baseFCPUFDestinatario,
      b.valorFCPUFDestinatario,
      b.aliquotaEstimadaImpFederais,
      b.aliquotaEstimadaImpEstaduais,
      b.aliquotaEstimadaImpMunicipais,
      b.baseEstimadaImpostos,
      b.valorEstimadoImpFederais,
      b.valorEstimadoImpEstaduais,
      b.valorEstimadoImpMunicipais,
      b.valorLiquidoItem,
      b.valorDescontoCustoOpItem,
      b.valorDescontoCustoOpGeral,
      b.valorDescontoCustoOpTotal,
      b.valorAcrescimoCustoOpItem,
      b.valorAcrescimoCustoOpGeral,
      b.valorAcrescimoCustoOpTotal,
      b.precoCustoOperacao,
      b.valorCustoOperacao,
      b.precoCMV,
      b.valorCMV,
      b.quantidadeExtemporanea,
      b.acrescimoUnitarioExtemporaneo,
      b.valorAcrescimoExtempSubtotal,
      b.valorAcrescimoExtempItem,
      b.valorAcrescimoExtempGeral,
      b.valorAcrescimoExtempTotal,
      b.observacoesDigitadas,
      b.observacoes);
    v_atualizarObservacoes := 0;
    IF p_idItemReferenciado > 0 THEN
      IF p_tipoDocumentoReferenciado IN ('D','P') THEN
        ADD_DOC_ATUALIZA_QUANT_DEVOLV(
          p_usuarioLogado,
          p_estabelecimentoAtivo,
          v_cab_devolucaoAnulacaoRetorno,
          'D',
          r_item_idItemDocFiscal,
          p_item_quantidade,
          p_item_quantidadeConvertida,
          p_tipoDocumentoReferenciado,
          p_idItemReferenciado);
      END IF;
      IF p_tipoDocumentoReferenciado = 'B' THEN
        ADD_DOC_FISC_ITEM_BALANC_GRAVA (
          p_estabelecimentoAtivo,
          p_idItemReferenciado,
          r_item_idItemDocFiscal);
      ELSIF p_tipoDocumentoReferenciado = 'D' THEN
        ADD_DOC_FISC_ITEM_REF_DOC_FIS (
          p_estabelecimentoAtivo,
          p_config_227_manterPessoaOrcam,
          p_item_idDocumentoFiscal,
          v_cab_tipoDocumento,
          v_cab_documentoFiscal,
          v_cab_estabelecimento,
          v_cab_pessoa,
          r_item_idItemDocFiscal,
          v_item_sequencia,
          p_item_vendedor,
          p_item_gradeProduto,
          p_item_unidadeMedidaConversao,
          p_item_quantidade,
          p_item_quantidadeConvertida,
          v_item_valorLiquidoItem,
          p_idItemReferenciado,
          p_quantidadeReferenciada,
          v_atualizarObservacoes,
          v_atualizarObservacoes);
      ELSIF p_tipoDocumentoReferenciado = 'G' THEN
        ADD_DOC_FISC_ITEM_REF_DFE_GRAD (
          p_usuarioLogado,
          p_estabelecimentoAtivo,
          p_person_190_modeloFrete,
          p_config_227_manterPessoaOrcam,
          p_config_230_etapaPedComprParc,
          p_config_378_calcularVolumes,
          p_item_idDocumentoFiscal,
          v_cab_tipoDocumento,
          v_cab_documentoFiscal,
          v_cab_estabelecimento,
          v_cab_pessoa,
          r_item_idItemDocFiscal,
          v_item_sequencia,
          p_item_vendedor,
          p_item_gradeProduto,
          p_item_unidadeMedidaConversao,
          p_item_quantidade,
          p_item_quantidadeConvertida,
          v_item_valorLiquidoItem,
          p_idItemReferenciado,
          v_atualizarObservacoes,
          v_atualizarObservacoes);
      ELSIF p_tipoDocumentoReferenciado = 'O' THEN
        ADD_DOC_FISC_ITEM_REF_ORCAMEN (
          p_usuarioLogado,
          p_estabelecimentoAtivo,
          p_config_227_manterPessoaOrcam,
          p_item_idDocumentoFiscal,
          v_cab_tipoDocumento,
          v_cab_documentoFiscal,
          v_cab_estabelecimento,
          v_cab_pessoa,
          r_item_idItemDocFiscal,
          v_item_sequencia,
          p_item_vendedor,
          p_item_gradeProduto,
          p_item_unidadeMedidaConversao,
          p_item_quantidade,
          p_item_quantidadeConvertida,
          v_item_valorLiquidoItem,
          p_idItemReferenciado,
          p_quantidadeReferenciada,
          v_atualizarObservacoes,
          v_atualizarObservacoes);
      ELSIF p_tipoDocumentoReferenciado = 'P' THEN
        ADD_DOC_FISC_ITEM_REF_PRE_DOC (
          p_estabelecimentoAtivo,
          p_config_227_manterPessoaOrcam,
          p_item_idDocumentoFiscal,
          v_cab_tipoDocumento,
          v_cab_documentoFiscal,
          v_cab_estabelecimento,
          v_cab_pessoa,
          r_item_idItemDocFiscal,
          v_item_sequencia,
          p_item_vendedor,
          p_item_gradeProduto,
          p_item_unidadeMedidaConversao,
          p_item_quantidade,
          p_item_quantidadeConvertida,
          v_item_valorLiquidoItem,
          p_idItemReferenciado,
          p_quantidadeReferenciada,
          v_atualizarObservacoes,
          v_atualizarObservacoes);
      ELSIF p_tipoDocumentoReferenciado = 'T' THEN
        ADD_DOC_FISC_ITEM_TRANS_GRAVA (
          p_estabelecimentoAtivo,
          v_cab_entradaSaida,
          p_idItemReferenciado,
          r_item_idItemDocFiscal,
          p_quantidadeReferenciada);
      END IF;
    END IF;
    IF p_tempComp_nomeTempComposicao <> ' '
      AND (NOT (p_tipoDocumentoReferenciado IN ('D','O','P'))
        OR p_idItemReferenciado <= 0)
    THEN
      ADD_DOC_FISC_ITEM_COMP_TEMP (
        p_sessaoClient,
        p_estabelecimentoAtivo,
        p_tempComp_nomeTempComposicao,
        p_tempComp_sequencia,
        r_item_idItemDocFiscal,
        v_atualizarObservacoes,
        v_atualizarObservacoes);
    END IF;
    v_idEnderecoEstoque := 0;
    IF p_item_idEnderecoEstoque > 0 THEN
      ADD_DOC_FISC_ITEM_ENDER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemDocFiscal,
        p_item_idEnderecoEstoque,
        p_item_quantidade,
        p_item_quantidade,
        ' ',
        v_idEnderecoEstoque);
    END IF;
    IF p_item_idNumeroSerie > 0 THEN
      ADD_DOC_FISC_ITEM_N_SER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemDocFiscal,
        v_idEnderecoEstoque,
        p_item_gradeProduto,
        p_item_idNumeroSerie,
        0,
        v_auxNumber);
      v_atualizarObservacoes := 1;
    END IF;
    IF v_atualizarObservacoes = 1 THEN
      v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
        p_sessaoClient,
        p_config_198_obs_add_referenc,
        p_config_199_obs_add_caractA,
        p_config_200_obs_add_caractB,
        p_config_201_obs_add_caractC,
        p_config_202_obs_add_caractD,
        p_config_203_obs_add_caractE,
        p_config_413_obs_add_marca,
        p_config_418_obs_efetarEnter,
        p_tempComp_nomeTempComposicao,
        p_tempComp_sequencia,
        'D',
        r_item_idItemDocFiscal,
        p_item_gradeProduto,
        p_item_idFormulaTinta,
        p_item_personalizacao,
        p_item_idLoteEstoque,
        p_item_controleQuantidade,
        p_item_loteMultiplo,
        p_item_altura,
        p_item_largura,
        p_item_comprimento,
        p_item_quantidade,
        p_item_observacoesDigitadas);
      UPDATE MODOCFISCALXITENS
      SET observacoes = v_observacoes
      WHERE idItemDocFiscal = r_item_idItemDocFiscal;
    END IF;
    IF v_cab_situacaoDocumentoFiscal > 20 THEN
      ADD_DOC_FISC_ITEM_EST_ATUALIZA (
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        r_item_idItemDocFiscal,
        p_estabelecimentoAtivo);
      ADD_DOC_FISC_ITEM_FIL_ATUALIZA (
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        r_item_idItemDocFiscal,
        p_estabelecimentoAtivo);
    END IF;
    r_buffer_idItemDocFiscal := CASE WHEN (r_buffer_idItemDocFiscal IS NULL OR r_buffer_idItemDocFiscal = '' OR r_buffer_idItemDocFiscal = ' ') THEN '' ELSE RTRIM (r_buffer_idItemDocFiscal) || ';' END || TO_CHAR (LPAD(r_item_idItemDocFiscal,14,'0'));
    r_valorInserido := v_item_valorProdutoServico
      - CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN p_item_valorDescontoItem
          ELSE 0
        END
      + CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN p_item_valorAcrescimoItem
          ELSE 0
        END;
  END IF;
END ADD_DOC_FISC_ITEM_GRAVA;

/

UPDATE SIVERSOESSISTEMA SET dataLiberacaoVersao = TO_DATE ('22/07/2024', 'DD/MM/YYYY'), dataAtualizacaoVersao =  SYSDATE, observacoes = 'BETA 2' WHERE idVersaoSistema = 2024001003;

COMMIT;

-- FIM BETA 2 - 22/07/2024

UPDATE SICONFIGURACOES SET conteudoSugestao = ' ' WHERE configuracao = 152;

COMMIT;

create or replace FUNCTION FUNC_ADD_GERA_XML_ENVIO (
  p_idDocumentoFiscal      IN NUMBER,
  p_seqLoteWebServiceEnvio IN NUMBER,
  p_loteWebService         IN VARCHAR)
  RETURN CLOB
IS
  v_xml                         CLOB;
  v_tecnologiaNFSe              NUMBER;
  v_versaoNFSe                  VARCHAR(20);
  v_estab_nomeRazaoSocial       VARCHAR(60);
  v_estab_indicadorPessoa       CHAR(1);
  v_estab_cnpjCpfIdEstrangeiro  VARCHAR(20);
  v_estab_inscricaoMunicipal    VARCHAR(15);
  v_estab_municipio             NUMBER;
  v_estab_pais                  VARCHAR(4);
  v_estab_uf                    CHAR(2);
  v_regimeEspecialTributacao    CHAR (1);
  v_indicadorIssqn              CHAR (1);
  v_optanteSimplesNacional      NUMBER;
  v_incentivadorCultural        NUMBER;
  v_incentivoFiscal             NUMBER;
  v_intermediario               NUMBER;
  v_pess_nomeRazaoSocial        VARCHAR(60);
  v_pess_apelidoFantasia        VARCHAR(60);
  v_pess_indicadorPessoa        CHAR(1);
  v_pess_cnpjCpfIdEstrangeiro   VARCHAR(20);
  v_pess_inscricaoEstadual      VARCHAR(14);
  v_pess_inscricaoMunicipal     VARCHAR(15);
  v_pess_logradouro             VARCHAR(60);
  v_pess_numero                 VARCHAR(60);
  v_pess_complemento            VARCHAR(60);
  v_pess_bairroDistrito         VARCHAR(60);
  v_pess_municipio              NUMBER;
  v_pess_cep                    NUMBER;
  v_pess_pais                   VARCHAR(4);
  v_pess_uf                     CHAR(2);
  v_pess_observacoesEndereco    VARCHAR(4000);
  v_pess_fone                   VARCHAR(14);
  v_pess_email                  VARCHAR(60);
  v_entr_logradouro             VARCHAR(60);
  v_entr_municipio              NUMBER;
  v_entr_municipio_descricao    VARCHAR(60);
  v_entr_uf                     CHAR(2);
  v_entr_pais                   VARCHAR(4);
  v_entr_pais_descricao         VARCHAR(60);
  v_interm_nomeRazaoSocial      VARCHAR(60);
  v_interm_indicadorPessoa      CHAR(1);
  v_interm_cnpjCpfIdEstrangeiro VARCHAR(20);
  v_interm_inscricaoMunicipal   VARCHAR(15);
  v_municipioFatoGerador        NUMBER;
  v_documentoFiscal             VARCHAR(15);
  v_serieFiscal                 VARCHAR(4);
  v_dataEmissao                 DATE;
  v_dataCompetencia             DATE;
  v_baseCalculoCrs              NUMBER;
  v_valorServicos               NUMBER;
  v_valorDeducoes               NUMBER;
  v_valorPis                    NUMBER;
  v_valorCofins                 NUMBER;
  v_valorInss                   NUMBER;
  v_valorIrrf                   NUMBER;
  v_valorCsll                   NUMBER;
  v_valorOutrasRetencoes        NUMBER;
  v_valorIssqn                  NUMBER;
  v_aliquotaIssqn               NUMBER;
  v_percentualCargaTributariaFe NUMBER;
  v_valorCargaTributariaFederal NUMBER;
  v_percentualCargaTributariaEs NUMBER;
  v_valorCargaTributariaEstad   NUMBER;
  v_percentualCargaTributariaMu NUMBER;
  v_valorCargaTributariaMunicip NUMBER;
  v_valorDescontoTotal          NUMBER;
  v_valorOutrasDespesasTotal    NUMBER;
  v_valorDescontoCondicionado   NUMBER;
  v_irrfIndenizacao             NUMBER;
  v_issRetido                   NUMBER;
  v_tributadoForaMunicipio      NUMBER;
  v_responsavelRetencao         NUMBER;
  v_listaServicos               NUMBER;
  v_cnae                        NUMBER;
  v_quantidade                  NUMBER;
  v_precoUnitario               NUMBER;
  v_codigoTributacaoMunicipio   VARCHAR(60);
  v_numeroProcesso              VARCHAR(60);
  v_codigoObra                  VARCHAR(60);
  v_art                         VARCHAR(60);
  v_descricaoServico            VARCHAR(4000);
  v_outrasInformacoes           VARCHAR(4000);
  v_formaPagamento              NUMBER;
  v_numeroParcelas              NUMBER;

BEGIN
  -- NÃO DESENVOLVIDO
  v_baseCalculoCrs              := 0;
  v_valorDeducoes               := 0;
  v_valorDescontoCondicionado   := 0;
  v_irrfIndenizacao             := 0;
  v_responsavelRetencao         := 0;
  v_formaPagamento              := 0;
  v_numeroParcelas              := 0;

  -- DOCUMENTO
  SELECT
    CASE
      WHEN munEst.versaoNFSe = '1.00'
      THEN TO_CHAR (a.dataEmissao, 'YYYY') || LPAD (a.documentoFiscal, 11, '0')
      ELSE TO_CHAR (a.documentoFiscal)
    END,
    a.serieFiscal,
    a.dataEmissao,
    a.municipioFatoGerador,
    a.valorServicos,
    a.valorDescontoTotal,
    a.valorOutrasDespesasTotal,
    COALESCE (SUBSTR( TRIM(
      COALESCE ((SELECT LISTAGG(UPPER(infCompl.descInformacaoComplementar), ' ')
        WITHIN GROUP (ORDER BY infCompl.sequencia)
        FROM MODOCFISCALXINFOCOMPLEMEN infCompl
        WHERE infCompl.idDocumentoFiscal = a.idDocumentoFiscal
        AND infCompl.geradoPeloSistema = 1
        AND infCompl.descInformacaoComplementar <> ' '),
        ' ')),1,4000),' '),
    COALESCE (docXServ.dataCompetencia, a.dataEmissao),
    FUNC_ADD_REMOVE_CARACT_ESPEC (obra.codigoObra),
    FUNC_ADD_REMOVE_CARACT_ESPEC (obra.art),
    FUNC_ADD_REMOVE_CARACT_ESPEC (docXServ.descricaoServico),
    FUNC_ADD_REMOVE_CARACT_ESPEC (pessEst.nomeRazaoSocial),
    pessEst.indicadorPessoa,
    CASE
      WHEN pessEst.cnpjCpfIdEstrangeiro <> ' '
      THEN pessEst.cnpjCpfIdEstrangeiro
      WHEN pessEst.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (pessEst.inscricaoMunicipal),
    CASE WHEN pessEst.regimeTributario IN ('1', '2') THEN 1 ELSE 2 END,
    endEst.municipio,
    endEst.pais,
    munEst.uf,
    munEst.tecnologiaNFSe,
    munEst.versaoNFSe,
    COALESCE (estXnfse.regimeEspecialTributacao, ' '),
    CASE WHEN estXnfse.incentivadorCultural = 1 THEN 1 ELSE 2 END,
    COALESCE (docXServ.intermediario, 0),
    CASE WHEN a.pessoa = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (pess.nomeRazaoSocial) END,
    CASE WHEN a.pessoa = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (pess.apelidoFantasia) END,
    pess.indicadorPessoa,
    CASE
      WHEN pess.cnpjCpfIdEstrangeiro <> ' '
      THEN pess.cnpjCpfIdEstrangeiro
      WHEN pess.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (pess.inscricaoEstadual),
    FUNC_ADD_REMOVE_CARACT_ESPEC (pess.inscricaoMunicipal),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.logradouro),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.numero),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.complemento),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.bairroDistrito),
    endPess.municipio,
    endPess.cep,
    endPess.pais,
    munPess.uf,
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.observacoes),
    CASE WHEN fonPess.idFonePessoa = 0 THEN ' ' ELSE fonPess.fone END,
    CASE WHEN emailPess.idEmailPessoa = 0 THEN ' ' ELSE emailPess.email END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (endEntr.logradouro),
    endEntr.municipio,
    FUNC_ADD_REMOVE_CARACT_ESPEC (munEntr.descricao),
    munEntr.uf,
    endEntr.pais,
    FUNC_ADD_REMOVE_CARACT_ESPEC (paisEntr.descricao),
    CASE WHEN COALESCE (docXServ.intermediario, 0) = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (interm.nomeRazaoSocial) END,
    interm.indicadorPessoa,
    CASE
      WHEN interm.cnpjCpfIdEstrangeiro <> ' '
      THEN interm.cnpjCpfIdEstrangeiro
      WHEN interm.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (interm.inscricaoMunicipal)
  INTO
    v_documentoFiscal,
    v_serieFiscal,
    v_dataEmissao,
    v_municipioFatoGerador,
    v_valorServicos,
    v_valorDescontoTotal,
    v_valorOutrasDespesasTotal,
    v_outrasInformacoes,
    v_dataCompetencia,
    v_codigoObra,
    v_art,
    v_descricaoServico,
    v_estab_nomeRazaoSocial,
    v_estab_indicadorPessoa,
    v_estab_cnpjCpfIdEstrangeiro,
    v_estab_inscricaoMunicipal,
    v_optanteSimplesNacional,
    v_estab_municipio,
    v_estab_pais,
    v_estab_uf,
    v_tecnologiaNFSe,
    v_versaoNFSe,
    v_regimeEspecialTributacao,
    v_incentivadorCultural,
    v_intermediario,
    v_pess_nomeRazaoSocial,
    v_pess_apelidoFantasia,
    v_pess_indicadorPessoa,
    v_pess_cnpjCpfIdEstrangeiro,
    v_pess_inscricaoEstadual,
    v_pess_inscricaoMunicipal,
    v_pess_logradouro,
    v_pess_numero,
    v_pess_complemento,
    v_pess_bairroDistrito,
    v_pess_municipio,
    v_pess_cep,
    v_pess_pais,
    v_pess_uf,
    v_pess_observacoesEndereco,
    v_pess_fone,
    v_pess_email,
    v_entr_logradouro,
    v_entr_municipio,
    v_entr_municipio_descricao,
    v_entr_uf,
    v_entr_pais,
    v_entr_pais_descricao,
    v_interm_nomeRazaoSocial,
    v_interm_indicadorPessoa,
    v_interm_cnpjCpfIdEstrangeiro,
    v_interm_inscricaoMunicipal
  FROM MODOCUMENTOSFISCAIS a
  LEFT JOIN MODOCFISCALXSERVICO docXServ
  ON docXServ.idDocumentoFiscal = a.idDocumentoFiscal
  JOIN PAOBRAS obra
  ON obra.idObra = COALESCE (docXServ.idObra, 0)
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = a.estabelecimento
  LEFT JOIN PAESTABELECIMENTOXNFSE estXnfse
  ON estXnfse.estabelecimento = a.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAENDERECOSPESSOA endEst
  ON endEst.enderecoPessoa = COALESCE ((
    SELECT MAX (end.enderecoPessoa)
    FROM CAENDERECOSPESSOA end
    WHERE end.pessoa = est.pessoaEstabelecimento
    AND end.ativo = 1
    AND end.principal = 1), 0)
  JOIN SIMUNICIPIOS munEst
  ON munEst.municipio = endEst.municipio
  JOIN CAPESSOAS pess
  ON pess.pessoa = a.pessoa
  JOIN CAENDERECOSPESSOA endPess
  ON endPess.enderecoPessoa = COALESCE ((
    SELECT MAX (end.enderecoPessoa)
    FROM CAENDERECOSPESSOA end
    WHERE end.pessoa = a.pessoa
    AND end.ativo = 1
    AND end.principal = 1), 0)
  JOIN SIMUNICIPIOS munPess
  ON munPess.municipio = endPess.municipio
  JOIN CAFONESPESSOA fonPess
  ON fonPess.idFonePessoa = COALESCE ((
    SELECT MAX (fon.idFonePessoa)
    FROM CAFONESPESSOA fon
    WHERE fon.pessoa = a.pessoa
    AND fon.ativo = 1
    AND fon.principal = 1), 0)
  JOIN CAEMAILSPESSOA emailPess
  ON emailPess.idEmailPessoa = COALESCE ((
    SELECT MAX (email.idEmailPessoa)
    FROM CAEMAILSPESSOA email
    WHERE email.pessoa = a.pessoa
    AND email.ativo = 1
    AND email.principal = 1), 0)
  JOIN CAENDERECOSPESSOA endEntr
  ON endEntr.enderecoPessoa = a.enderecoEntregaPessoa
  JOIN SIMUNICIPIOS munEntr
  ON munEntr.municipio = endEntr.municipio
  JOIN SIPAISES paisEntr
  ON paisEntr.pais = endEntr.pais
  JOIN CAPESSOAS interm
  ON interm.pessoa = COALESCE (docXServ.intermediario, 0)
  WHERE a.idDocumentoFiscal = p_idDocumentoFiscal;

  -- ITENS
  SELECT
    COALESCE (SUM (a.quantidade), 0),
    COALESCE (MAX (a.precoUnitario), 0),
    COALESCE (MAX (a.indicadorIssqn), ' '),
    COALESCE (SUM (a.valorIssqn), 0),
    COALESCE (MAX (a.aliquotaIssqn), 0),
    CASE WHEN COALESCE (MAX (a.retidoIssqn), 0) = 1 THEN 1 ELSE 2 END,
    CASE WHEN COALESCE (MAX (a.tributadoForaMunicipio), 0) = 1 THEN 1 ELSE 2 END,
    CASE WHEN COALESCE (MAX (a.incentivoFiscal), 0) = 1 THEN 1 ELSE 2 END,
    COALESCE (MAX (a.listaServicos), 0),
    COALESCE (MAX (a.cnae), 0),
    COALESCE (MAX (servMun.codigoServicoMunicipio), ' '),
    COALESCE (MAX (a.numeroProcessoAdministrativo), ' '),
    COALESCE (SUM (a.valorRetInss), 0),
    COALESCE (SUM (a.valorRetIrrf), 0),
    COALESCE (SUM (a.valorRetPis), 0),
    COALESCE (SUM (a.valorRetCofins), 0),
    COALESCE (SUM (a.valorRetCsll), 0),
    COALESCE (SUM (a.valorRetOutros), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpFederais), 0),
    COALESCE (SUM (a.valorEstimadoImpFederais), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpEstaduais), 0),
    COALESCE (SUM (a.valorEstimadoImpEstaduais), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpMunicipais), 0),
    COALESCE (SUM (a.valorEstimadoImpMunicipais), 0),
    CASE
      WHEN v_descricaoServico = ' '
      THEN FUNC_ADD_REMOVE_CARACT_ESPEC (COALESCE (MAX (
        CASE
          WHEN a.quantidadeConvertida = 1
            OR v_tecnologiaNFSe = 2
          THEN ''
          ELSE TO_CHAR(a.quantidadeConvertida)
            || ' '
            || a.unidadeMedidaConversao
            || ' X '
        END
        || TRIM (TRIM (gradProd.descricaoImpressa
        || ' '
        || a.observacoes)
        || CASE
             WHEN v_versaoNFSe = '1.00'
             THEN ' |||| Trib. Aprox.: R$ ' || TO_CHAR (a.valorEstimadoImpFederais, 'FM9999999999990D00') || ' Federal e R$ ' || TO_CHAR (a.valorEstimadoImpMunicipais, 'FM9999999999990D00') || ' Municipal'
             ELSE ''
           END)), ' '))
      ELSE v_descricaoServico
    END
  INTO
    v_quantidade,
    v_precoUnitario,
    v_indicadorIssqn,
    v_valorIssqn,
    v_aliquotaIssqn,
    v_issRetido,
    v_tributadoForaMunicipio,
    v_incentivoFiscal,
    v_listaServicos,
    v_cnae,
    v_codigoTributacaoMunicipio,
    v_numeroProcesso,
    v_valorInss,
    v_valorIrrf,
    v_valorPis,
    v_valorCofins,
    v_valorCsll,
    v_valorOutrasRetencoes,
    v_percentualCargaTributariaFe,
    v_valorCargaTributariaFederal,
    v_percentualCargaTributariaEs,
    v_valorCargaTributariaEstad,
    v_percentualCargaTributariaMu,
    v_valorCargaTributariaMunicip,
    v_descricaoServico
  FROM MODOCFISCALXITENS a
  JOIN CAGRADESPRODUTO gradProd
  ON gradProd.gradeProduto = a.gradeProduto
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  JOIN PASERVICOSMUNICIPIOS servMun
  ON servMun.idServicoMunicipio = a.idServicoMunicipio
  WHERE a.idDocumentoFiscal = p_idDocumentoFiscal
  AND a.cancelado = 0;

  IF v_tecnologiaNFSe = 2 AND v_estab_municipio <> 4309100 THEN
    -- NFS-e
    v_xml := '<nfse id="rps_' || v_documentoFiscal || '">'
  || '<rps>'
    || FUNC_ADD_TAG_XML ('nro_recibo_provisorio', v_documentoFiscal)
    || FUNC_ADD_TAG_XML ('serie_recibo_provisorio', v_serieFiscal)
    || FUNC_ADD_TAG_XML ('data_emissao_recibo_provisorio', CASE WHEN v_dataEmissao IS NULL THEN '00/00/0000' ELSE TO_CHAR (v_dataEmissao, 'DD/MM/YYYY') END)
    || FUNC_ADD_TAG_XML ('hora_emissao_recibo_provisorio', CASE WHEN v_dataEmissao IS NULL THEN '00:00:00' ELSE TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
  || '</rps>';

    -- NF
    v_xml := v_xml
  || '<nf>'
    || FUNC_ADD_TAG_XML ('valor_total', TO_CHAR (v_valorServicos - v_valorDescontoTotal + v_valorOutrasDespesasTotal, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_desconto', TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_ir', TO_CHAR (v_valorIrrf, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_inss', TO_CHAR (v_valorInss, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_contribuicao_social', TO_CHAR (v_valorCsll, 'FM9999999999990D00'))
    || '<valor_rps>0,00</valor_rps>'
    || FUNC_ADD_TAG_XML ('valor_pis', TO_CHAR (v_valorPis, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_cofins', TO_CHAR (v_valorCofins, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('observacao', v_outrasInformacoes)
  || '</nf>';

    -- Prestador
    v_xml := v_xml
  || '<prestador>'
    || FUNC_ADD_TAG_XML ('cpfcnpj', v_estab_cnpjCpfIdEstrangeiro)
    || FUNC_ADD_TAG_XML ('cidade', TO_CHAR (v_estab_municipio))
  || '</prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
  || '<tomador>'
    || FUNC_ADD_TAG_XML ('tipo', v_pess_indicadorPessoa)
    || FUNC_ADD_TAG_XML ('cpfcnpj', v_pess_cnpjCpfIdEstrangeiro)
    || FUNC_ADD_TAG_XML ('ie', v_pess_inscricaoEstadual)
    || FUNC_ADD_TAG_XML ('nome_razao_social', v_pess_nomeRazaoSocial)
    || FUNC_ADD_TAG_XML ('sobrenome_nome_fantasia', v_pess_apelidoFantasia)
    || FUNC_ADD_TAG_XML ('logradouro', v_pess_logradouro)
    || FUNC_ADD_TAG_XML ('email', v_pess_email)
    || FUNC_ADD_TAG_XML ('numero_residencia', v_pess_numero)
    || FUNC_ADD_TAG_XML ('complemento', v_pess_complemento)
    || FUNC_ADD_TAG_XML ('ponto_referencia', v_pess_observacoesEndereco)
    || FUNC_ADD_TAG_XML ('bairro', v_pess_bairroDistrito)
    || FUNC_ADD_TAG_XML ('cidade', TO_CHAR (v_pess_municipio))
    || FUNC_ADD_TAG_XML ('cep', LPAD (v_pess_cep, 8 ,'0'))
    || '<ddd_fone_comercial/>'
    || FUNC_ADD_TAG_XML ('fone_comercial', v_pess_fone)
    || '<ddd_fone_residencial/>'
    || '<fone_residencial/>'
    || '<ddd_fax/>'
    || '<fone_fax/>'
  || '</tomador>';

    -- Itens
    v_xml := v_xml
  || '<itens>'
    || '<lista>'
      || FUNC_ADD_TAG_XML ('codigo_local_prestacao_servico', TO_CHAR (v_municipioFatoGerador))
      || FUNC_ADD_TAG_XML ('codigo_item_lista_servico', TO_CHAR (v_listaServicos))
      || FUNC_ADD_TAG_XML ('descritivo', v_descricaoServico)
      || FUNC_ADD_TAG_XML ('aliquota_item_lista_servico', TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('situacao_tributaria', '0')
      || FUNC_ADD_TAG_XML ('valor_tributavel', TO_CHAR (v_valorServicos - v_valorDescontoTotal + v_valorOutrasDespesasTotal, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('valor_deducao', TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('valor_issrf', CASE WHEN v_issRetido = 1 THEN  TO_CHAR (v_valorIssqn, 'FM9999999999990D00') ELSE '0,00' END)
      || FUNC_ADD_TAG_XML ('tributa_municipio_prestador', CASE WHEN v_tributadoForaMunicipio = 1 THEN 'N' ELSE 'S' END)
      || '<unidade_codigo/>'
      || FUNC_ADD_TAG_XML ('unidade_quantidade', TO_CHAR (v_quantidade, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('unidade_valor_unitario', TO_CHAR (v_precoUnitario - (v_valorDescontoTotal / v_quantidade) + (v_valorOutrasDespesasTotal / v_quantidade), 'FM9999999999990D00'))
    || '</lista>'
  || '</itens>'
  -- Assinar Aqui
|| '</nfse>';

  ELSIF v_versaoNFSe = '1.00' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">'
      || '<LoteRps Id="lote" versao="1.00">'
        || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
        || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
        || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
        || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')
        || '<ListaRps>'
          || '<Rps>'
            || '<InfRps Id="rps:' || v_documentoFiscal || TRIM(v_serieFiscal) || '">'
              || '<IdentificacaoRps>'
                || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
                || FUNC_ADD_TAG_XML ('Serie', v_serieFiscal)
                || FUNC_ADD_TAG_XML ('Tipo', '1')
              || '</IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
              || FUNC_ADD_TAG_XML ('NaturezaOperacao', v_indicadorIssqn)
              || CASE WHEN v_regimeEspecialTributacao = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao) END
              || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
              || FUNC_ADD_TAG_XML ('IncentivadorCultural', TO_CHAR (v_incentivadorCultural))
              || FUNC_ADD_TAG_XML ('Status', '1');

    -- Serviço
    v_xml := v_xml
              || '<Servico>'
                || '<Valores>'
                  || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
                  || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
                || '</Valores>'
                || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos,4,'0'),1,2) || '.' || SUBSTR (LPAD (v_listaServicos,4,'0'),3,2))
                || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
                || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
              || '</Servico>';

  -- Prestador (Estabelecimento)
  v_xml := v_xml
              || '<Prestador>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
              || '</Prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
              || '<Tomador>'
                || '<IdentificacaoTomador>'
                  || '<CpfCnpj>'
                    || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
                  || '</CpfCnpj>'
                  || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
                || '</IdentificacaoTomador>'
                || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
                || '<Endereco>'
                  || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
                  || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
                  || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
                  || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
                  || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
                  || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
                  || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
                || '</Endereco>'
              || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
              || '<IntermediarioServico>'
                || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
              || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_codigoObra <> ' ' THEN
      v_xml := v_xml
              || '<ConstrucaoCivil>'
                || FUNC_ADD_TAG_XML ('CodigoObra', v_codigoObra)
                || FUNC_ADD_TAG_XML ('Art', v_art)
              || '</ConstrucaoCivil>';
    END IF;

    -- Outros
    v_xml := v_xml
            || '</InfRps>'
            -- Assinar aqui
          || '</Rps>'
        || '</ListaRps>'
      || '</LoteRps>'
      -- Assinar aqui
    || '</EnviarLoteRpsEnvio>';
    
  ELSIF v_versaoNFSe = '2.01' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsEnvio'
  || '<LoteRps Id="1'
    || TO_CHAR (v_dataEmissao, 'YYYY')
    || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
    || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
    || '" versao="2.01">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || '<QuantidadeRps>1</QuantidadeRps>'
    || '<ListaRps>'
      || '<Rps>'
          || '<InfDeclaracaoPrestacaoServico Id="1'
            || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
            || LPAD (p_loteWebService, 14, '0')
            || '">'          
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || '<Serie>1</Serie>'
              || '<Tipo>1</Tipo>'
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

    -- Serviço
    v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

    -- Prestador (Estabelecimento)
    v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
          || '</Prestador>';

    -- Tomador
    v_xml := v_xml
          || '<Tomador>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
            || '</Endereco>'
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '<Contato>' END
              || CASE WHEN v_pess_fone = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Telefone', v_pess_fone) END
              || CASE WHEN v_pess_email = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Email', v_pess_email) END
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '</Contato>' END
          || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
          || '<IntermediarioServico>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
          || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_cnae = '4322301' THEN
      v_xml := v_xml
          || '<dadosDaObra>'
            || FUNC_ADD_TAG_XML ('xLogObra', v_entr_logradouro)
            || FUNC_ADD_TAG_XML ('cCidadeObra', TO_CHAR (v_entr_municipio))
            || FUNC_ADD_TAG_XML ('xCidadeObra', v_entr_municipio_descricao)
            || FUNC_ADD_TAG_XML ('xUfObra', v_entr_uf)
           || FUNC_ADD_TAG_XML ('cPaisObra', v_entr_pais)
            || FUNC_ADD_TAG_XML ('xPaisObra', v_entr_pais_descricao)
          || '</dadosDaObra>';
    END IF;

    -- Outros
    v_xml := v_xml
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
  -- Assinar aqui
|| '</EnviarLoteRpsEnvio>';

  ELSIF v_versaoNFSe = '2.03' THEN
    -- NFS-e
    v_xml := CASE WHEN v_tecnologiaNFSe = 3 THEN '<EnviarLoteRpsSincronoEnvio>' ELSE '<EnviarLoteRpsEnvio>' END
  || '<LoteRps Id="'
  || CASE WHEN v_dataEmissao IS NULL THEN '00000000' ELSE TO_CHAR (v_dataEmissao, 'YYYYMMDD') END
  || LPAD (p_loteWebService, 4, '0')
  || '" versao="2.03">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || '<QuantidadeRps>1</QuantidadeRps>'
    || '<ListaRps>'
      || '<Rps>'
        || '<InfDeclaracaoPrestacaoServico'
          || CASE
               WHEN v_tecnologiaNFSe = 3
               THEN ' Id="' || CASE WHEN v_dataEmissao IS NULL THEN '00000000' ELSE TO_CHAR (v_dataEmissao, 'YYYYMMDD') END || LPAD (p_loteWebService, 4, '0') || '"'
               ELSE ''
             END || '>'
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || FUNC_ADD_TAG_XML ('Serie', CASE WHEN v_tecnologiaNFSe = 3 THEN 'RPS' ELSE '0' END)
              || FUNC_ADD_TAG_XML ('Tipo', '1')
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

    -- Serviço
    v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
            || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
            || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

    -- Prestador
    v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
          || '</Prestador>';

    -- Tomador
    v_xml := v_xml
          || '<Tomador>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || CASE WHEN v_tecnologiaNFSe = 3 THEN FUNC_ADD_TAG_XML ('CodigoPais', v_pess_pais) ELSE '' END
              || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
            || '</Endereco>'
            || CASE WHEN v_tecnologiaNFSe = 3 THEN '' ELSE '<Contato></Contato>' END
          || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
          || '<IntermediarioServico>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
          || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_cnae = '4322301' THEN
      v_xml := v_xml
          || '<dadosDaObra>'
            || FUNC_ADD_TAG_XML ('xLogObra', v_entr_logradouro)
            || FUNC_ADD_TAG_XML ('cCidadeObra', TO_CHAR (v_entr_municipio))
            || FUNC_ADD_TAG_XML ('xCidadeObra', v_entr_municipio_descricao)
            || FUNC_ADD_TAG_XML ('xUfObra', v_entr_uf)
            || FUNC_ADD_TAG_XML ('cPaisObra', v_entr_pais)
            || FUNC_ADD_TAG_XML ('xPaisObra', v_entr_pais_descricao)
          || '</dadosDaObra>';
    END IF;

    -- Outros
    v_xml := v_xml
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
  -- Assinar aqui
|| CASE WHEN v_tecnologiaNFSe = 3 THEN '</EnviarLoteRpsSincronoEnvio>' ELSE '</EnviarLoteRpsEnvio>' END;
  ELSIF v_versaoNFSe = '2.04' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsSincronoEnvio>'
  || '<LoteRps Id="1'
  || TO_CHAR (v_dataEmissao, 'YYYY')
  || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
  || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
  || '" versao="2.04">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<Prestador>'
      || '<CpfCnpj>'
        || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
      || '</CpfCnpj>'
    || '</Prestador>'
    || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')    
    || '<ListaRps>'
      || '<Rps>'
        || '<InfDeclaracaoPrestacaoServico Id="1'
          || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
          || LPAD (p_loteWebService, 14, '0')
          || '">'          
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || FUNC_ADD_TAG_XML ('Serie', '1')
              || FUNC_ADD_TAG_XML ('Tipo', '1')
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

  -- Serviço
  v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
            || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
            || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

  -- Prestador (Estabelecimento)
  v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
          || '</Prestador>';

  -- Tomador (Cliente)
  v_xml := v_xml
          || '<TomadorServico>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || FUNC_ADD_TAG_XML ('Numero', v_pess_numero)
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito)
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
            || '</Endereco>'
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '<Contato>' END
              || CASE WHEN v_pess_fone = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Telefone', v_pess_fone) END
              || CASE WHEN v_pess_email = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Email', v_pess_email) END
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '</Contato>' END
          || '</TomadorServico>';

  -- Outros
  v_xml := v_xml
          || FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao)
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
|| '</EnviarLoteRpsSincronoEnvio>';

  ELSE
    -- NFS-e
    v_xml := '<EnviarLoteRpsSincronoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">'
  || '<LoteRps Id="1'
  || TO_CHAR (v_dataEmissao, 'YYYY')
  || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
  || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
  || '" versao="20.01">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')
    || '<ListaRps>'
      || '<Rps>'
        || '<tcDeclaracaoPrestacaoServico>'
          || '<InfDeclaracaoPrestacaoServico Id="1'
            || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
            || LPAD (p_loteWebService, 14, '0')
            || '">'          
            || '<Rps>'
              || '<IdentificacaoRps>'
                || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
                || FUNC_ADD_TAG_XML ('Serie', 'UNICA')
                || FUNC_ADD_TAG_XML ('Tipo', '1')
              || '</IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
              || FUNC_ADD_TAG_XML ('Status', '1')
            || '</Rps>'
            || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataCompetencia, 'HH24:MI:SS') END)
            || FUNC_ADD_TAG_XML ('IdCidade', TO_CHAR (v_estab_municipio));

    -- Serviço
    v_xml := v_xml
            || '<Servico>'
              || '<tcDadosServico>'
                || '<Valores>'
                  || FUNC_ADD_TAG_XML ('BaseCalculoCRS', REPLACE (TO_CHAR (v_baseCalculoCrs, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('IrrfIndenizacao', TO_CHAR (v_irrfIndenizacao))
                || '</Valores>'
                || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
                || FUNC_ADD_TAG_XML ('ResponsavelRetencao', TO_CHAR (v_responsavelRetencao))
                || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
                || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
                || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
                || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
                || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
                || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
                || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
                || FUNC_ADD_TAG_XML ('NumeroProcesso', v_numeroProcesso)
              || '</tcDadosServico>'
            || '</Servico>';

    -- Prestador (Estabelecimento)
    v_xml := v_xml
            || '<Prestador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_estab_nomeRazaoSocial)
              || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
            || '</Prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
            || '<Tomador>'
              || '<IdentificacaoTomador>'
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal)
              || '</IdentificacaoTomador>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
              || '<Endereco>'
                || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
                || FUNC_ADD_TAG_XML ('Numero', v_pess_numero)
                || FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento)
                || FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
                || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
                || FUNC_ADD_TAG_XML ('CodigoPais', v_pess_pais)
                || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
              || '</Endereco>'
              || '<Contato>'
                || FUNC_ADD_TAG_XML ('Telefone', v_pess_fone)
                || FUNC_ADD_TAG_XML ('Email', v_pess_email)
              || '</Contato>'
            || '</Tomador>';

    IF v_intermediario <> 0 THEN
      -- Intermediário
      v_xml := v_xml
            || '<Intermediario>'
              || '<IdentificacaoIntermediario>'
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
              || '</IdentificacaoIntermediario>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '</Intermediario>';
    END IF;

    -- Construção Civil
    v_xml := v_xml
            || '<ConstrucaoCivil>'
              || FUNC_ADD_TAG_XML ('CodigoObra', v_codigoObra)
              || FUNC_ADD_TAG_XML ('Art', v_art)
            || '</ConstrucaoCivil>';

    -- Outros
    v_xml := v_xml
            || FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao)
            || FUNC_ADD_TAG_XML ('NaturezaOperacao', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
            || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributaria', TO_CHAR (v_percentualCargaTributariaFe))
            || FUNC_ADD_TAG_XML ('ValorCargaTributaria', TO_CHAR (v_valorCargaTributariaFederal))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributariaEstadual', TO_CHAR (v_percentualCargaTributariaEs))
            || FUNC_ADD_TAG_XML ('ValorCargaTributariaEstadual', TO_CHAR (v_valorCargaTributariaEstad))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributariaMunicipal', TO_CHAR (v_percentualCargaTributariaMu))
            || FUNC_ADD_TAG_XML ('ValorCargaTributariaMunicipal', TO_CHAR (v_valorCargaTributariaMunicip))
            || FUNC_ADD_TAG_XML ('OutrasInformacoes', v_outrasInformacoes)
            || FUNC_ADD_TAG_XML ('SiglaUF', v_estab_uf)
            || FUNC_ADD_TAG_XML ('IdCidade', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('FormaPagamento', v_formaPagamento)
--                    <!--identificação da forma de pagamento-->
--                        <!--0-Não identificada-->
--                        <!--1-A Vista-->
--                        <!--2-Apresentação-->
--                        <!--3-A Prazo-->
--                        <!--4-Cartão de Débito-->
--                        <!--5-Cartão de Crédito-->
            || FUNC_ADD_TAG_XML ('NumeroParcelas', v_numeroParcelas)
--                    <!--Caso não houver parcelamento informar o 0 e não colocar as tags abaixo-->
--            || '<Parcelamento>'
--              || '<Parcelas>'
--                || '<tcParcela>'
--                  || '<Numero>1</Numero>'
--                  || '<Valor>20.00</Valor>'
--                  || '<DataVencimento>2019-05-02T00:00:00</DataVencimento>'
--                || '</tcParcela>'
--                || '<tcParcela>'
--                  || '<Numero>2</Numero>'
--                  || '<Valor>20.00</Valor>'
--                  || '<DataVencimento>2019-06-02T00:00:00</DataVencimento>'
--                || '</tcParcela>'
--              || '</Parcelas>'
--            || '</Parcelamento>'
          || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
        || '</tcDeclaracaoPrestacaoServico>'
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
|| '</EnviarLoteRpsSincronoEnvio>';

  END IF;
  RETURN v_xml;
END;

/

create or replace PROCEDURE ADD_ITEM_OPERACAO_FISCAL_BUSCA (
  p_buscarGeraFinanceiroEstoque  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_municipioFatoGerador     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_movimentaEstoqueFiscal       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_item_retidoISSQN             IN NUMBER,
  p_item_tributadoForaMunicipio  IN NUMBER,
  p_item_incentivoFiscal         IN NUMBER,
  p_item_listaServicos           IN NUMBER,
  p_item_cnae                    IN NUMBER,
  p_item_idServicoMunicipio      IN NUMBER,
  p_item_numeroProcessoAdministr IN VARCHAR,
  p_atualizarRetencaoIRRF        IN NUMBER,
  p_item_retencaoIRRF            IN NUMBER,
  p_atualizarRetencaoINSS        IN NUMBER,
  p_item_retencaoINSS            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_atualizarRetencaoOutros      IN NUMBER,
  p_item_retencaoOutros          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_diferimentoICMSEscrit   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_movimentaEstoqueFiscal       OUT NUMBER,
  r_geraFinanceiro               OUT NUMBER,
  r_item_cfop                    OUT NUMBER,
  r_item_indicadorISSQN          OUT CHAR,
  r_item_aliquotaISSQN           OUT NUMBER,
  r_item_retidoISSQN             OUT NUMBER,
  r_item_tributadoForaMunicipio  OUT NUMBER,
  r_item_incentivoFiscal         OUT NUMBER,
  r_item_listaServicos           OUT NUMBER,
  r_item_cnae                    OUT NUMBER,
  r_item_idServicoMunicipio      OUT NUMBER,
  r_item_numeroProcessoAdministr OUT VARCHAR,
  r_item_retencaoIRRF            OUT NUMBER,
  r_item_retencaoINSS            OUT NUMBER,
  r_item_retencaoPIS             OUT NUMBER,
  r_item_retencaoCOFINS          OUT NUMBER,
  r_item_retencaoCSLL            OUT NUMBER,
  r_item_retencaoOutros          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_diferimentoICMSEscrit   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;
BEGIN
  r_movimentaEstoque             := p_movimentaEstoque;
  r_movimentaEstoqueFiscal       := p_movimentaEstoqueFiscal;
  r_geraFinanceiro               := p_geraFinanceiro;
  r_item_cfop                    := p_item_cfop;
  r_item_indicadorISSQN          := p_item_indicadorISSQN;
  r_item_aliquotaISSQN           := p_item_aliquotaISSQN;
  r_item_retidoISSQN             := p_item_retidoISSQN;
  r_item_tributadoForaMunicipio  := p_item_tributadoForaMunicipio;
  r_item_incentivoFiscal         := p_item_incentivoFiscal;
  r_item_listaServicos           := p_item_listaServicos;
  r_item_cnae                    := p_item_cnae;
  r_item_idServicoMunicipio      := p_item_idServicoMunicipio;
  r_item_numeroProcessoAdministr := p_item_numeroProcessoAdministr;
  r_item_retencaoIRRF            := p_item_retencaoIRRF;
  r_item_retencaoINSS            := p_item_retencaoINSS;
  r_item_retencaoPIS             := p_item_retencaoPIS;
  r_item_retencaoCOFINS          := p_item_retencaoCOFINS;
  r_item_retencaoCSLL            := p_item_retencaoCSLL;
  r_item_retencaoOutros          := p_item_retencaoOutros;
  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_diferimentoICMSEscrit   := p_item_diferimentoICMSEscrit;
  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 (
    SELECT
      opFisc.cfop,
      cfop.geraFinanceiro,
      COALESCE (opXMun.indicadorISSQN, '2') indicadorISSQN,
      COALESCE (opXMun.aliquotaISSQN, 0) aliquotaISSQN,
      COALESCE (opXMun.retidoISSQN, 0) retidoISSQN,
      COALESCE (opXMun.tributadoForaMunicipio, 0) tributadoForaMunicipio,
      COALESCE (opXMun.incentivoFiscal, 0) incentivoFiscal,
      COALESCE (opXMun.listaServicos, 0) listaServicos,
      COALESCE (opXMun.cnae, 0) cnae,
      COALESCE (opXMun.idServicoMunicipio, 0) idServicoMunicipio,
      COALESCE (opXMun.numeroProcessoAdministrativo, ' ') numeroProcessoAdministrativo,
      opFisc.retencaoIRRF,
      opFisc.retencaoINSS,
      opFisc.retencaoPIS,
      opFisc.retencaoCOFINS,
      opFisc.retencaoCSLL,
      opFisc.retencaoOutros,
      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 cfop.cfop = opFisc.cfop
    LEFT JOIN PAOPERFISCALXMUNICIPIOS opXMun
    ON opXMun.operacaoFiscal = opFisc.operacaoFiscal
    AND opXMun.municipio = p_cab_municipioFatoGerador
    AND opXMun.ativo = 1
    WHERE opFisc.operacaoFiscal = p_item_operacaoFiscal)
  LOOP
    IF p_buscarGeraFinanceiroEstoque = 1 OR p_cab_origemDocumento NOT IN (4,6,9,10,11,12,13) THEN
      r_movimentaEstoque       := p_modDoc_movimentaEstoque;
      r_movimentaEstoqueFiscal := p_modDoc_movimentaEstoque;
    END IF;
    IF p_buscarGeraFinanceiroEstoque = 1 OR p_cab_origemDocumento NOT IN (4,6,9,13) 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;
      r_item_retidoISSQN             := opFisc.retidoISSQN;
      r_item_tributadoForaMunicipio  := opFisc.tributadoForaMunicipio;
      r_item_incentivoFiscal         := opFisc.incentivoFiscal;
      r_item_listaServicos           := opFisc.listaServicos;
      r_item_cnae                    := opFisc.cnae;
      r_item_idServicoMunicipio      := opFisc.idServicoMunicipio;
      r_item_numeroProcessoAdministr := opFisc.numeroProcessoAdministrativo;
    END IF;
    IF p_atualizarRetencaoIRRF = 1 THEN
      r_item_retencaoIRRF := opFisc.retencaoIRRF;
    END IF;
    IF p_atualizarRetencaoINSS = 1 THEN
      r_item_retencaoINSS := opFisc.retencaoINSS;
    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_atualizarRetencaoOutros = 1 THEN
      r_item_retencaoOutros := opFisc.retencaoOutros;
    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;
      ELSIF opFisc.idBeneficio <> 0 THEN
        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 PAUFORIGEMXUFDESTINO
        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;
      r_item_diferimentoICMSEscrit   := 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_diferimentoICMS 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 PAUFORIGEMXUFDESTINO
          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 PAUFORIGEMXUFDESTINO
            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_movimentaEstoqueFiscal := 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;
      r_item_retidoISSQN             := 0;
      r_item_tributadoForaMunicipio  := 0;
      r_item_incentivoFiscal         := 0;
      r_item_listaServicos           := 0;
      r_item_cnae                    := 0;
      r_item_idServicoMunicipio      := 0;
      r_item_numeroProcessoAdministr := ' ';
    END IF;
    IF p_atualizarRetencaoIRRF = 1 THEN
      r_item_retencaoIRRF := 0;
    END IF;
    IF p_atualizarRetencaoINSS = 1 THEN
      r_item_retencaoINSS := 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_atualizarRetencaoOutros = 1 THEN
      r_item_retencaoOutros := 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;
      r_item_diferimentoICMSEscrit   := 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 SIVERSOESSISTEMA SET dataLiberacaoVersao = TO_DATE ('24/07/2024', 'DD/MM/YYYY'), dataAtualizacaoVersao =  SYSDATE, observacoes = 'BETA 3' WHERE idVersaoSistema = 2024001003;

COMMIT;

-- FIM BETA 3 - 24/07/2024

INSERT INTO SISITTRIBUTICMS (STICMS, descricao, ativo, observacoes) values ('02', '02 Tributação Monofásica própria sobre Combustíveis', 1, ' ');
INSERT INTO SISITTRIBUTICMS (STICMS, descricao, ativo, observacoes) values ('15', '15 Tributação Monofásica própria e com responsabilidade pela retenção sobre Combustíveis', 1, ' ');
INSERT INTO SISITTRIBUTICMS (STICMS, descricao, ativo, observacoes) values ('53', '53 Tributação Monofásica sobre Combustíveis com recolhimento diferido', 1, ' ');
INSERT INTO SISITTRIBUTICMS (STICMS, descricao, ativo, observacoes) values ('61', '61 Tributação Monofásica sobre Combustíveis cobrada anteriormente', 1, ' ');

COMMIT;

INSERT INTO SICONFIGURACOES (configuracao, descricao, ativo, subcategoriaConfiguracao, tipoCampo, mascara, exibirCampo, tipoArquivo, conteudoSugestao, tabelaSistema, observacoes) values (423, 'Avisar existência de lote mais antigo', 1, 30003, 'L', '1', 'E', 0, 'N', ' ', ' ');

COMMIT;

UPDATE SIFORMASPAGAMENTONFE SET descricao = '05 Cartão Loja (Private Label), Cred. Digital, Outros Cred.' WHERE formaPagamentoNfe= 5;
UPDATE SIFORMASPAGAMENTONFE SET descricao = '17 Pagamento Instantâneo (PIX) - Dinâmico' WHERE formaPagamentoNfe= 17;

COMMIT;

INSERT INTO SIFORMASPAGAMENTONFE (formaPagamentoNfe, descricao, ativo, observacoes) values (20, '20 Pagamento Instantâneo (PIX) - Estático', 1, ' ');
INSERT INTO SIFORMASPAGAMENTONFE (formaPagamentoNfe, descricao, ativo, observacoes) values (21, '21 Crédito em Loja', 1, ' ');
INSERT INTO SIFORMASPAGAMENTONFE (formaPagamentoNfe, descricao, ativo, observacoes) values (22, '22 Pagamento Eletrônico não Informado - falha hardware', 1, ' ');

COMMIT;

UPDATE SIMEIOSPAGAMENTO SET formaPagamentoNfe = 21 WHERE meioPagamento IN (31,38);

COMMIT;

INSERT INTO SIBANDEIRASCARTAODEBCRED (bandeiraCartaoDebCred, descricao, ativo, bandeiraCartaoNfe, observacoes) values (45, 'Banrisul - Débito', 1, 99, ' ');
INSERT INTO SIBANDEIRASCARTAODEBCRED (bandeiraCartaoDebCred, descricao, ativo, bandeiraCartaoNfe, observacoes) values (46, 'Banrisul - Crédito', 1, 99, ' ');

COMMIT;

UPDATE SIMUNICIPIOS SET tecnologiaNFSe = 1, versaoNFSe = '2.01' WHERE municipio = 4302105;
UPDATE SIMUNICIPIOS SET tecnologiaNFSe = 1, versaoNFSe = '1.00' WHERE municipio = 4202008;

COMMIT;

DELETE SISERVICOSNFSE;

INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (0, 0, 'SELECIONE', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4202008000, 4202008, 'EnviarLoteRps',  'http://nfse-teste.publica.inf.br/homologa_nfse_integracao/Services', 'https://nfse1.publica.inf.br/balneariocamboriu_nfse_integracao/Services', ' ', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://service.nfse.integracao.ws.publica/"><S:Body><ns2:RecepcionarLoteRps><XML>', '</XML></ns2:RecepcionarLoteRps></S:Body></S:Envelope>', 'EnviarLoteRpsResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4202008010, 4202008, 'ConsultarSituacaoLoteRps',  'http://nfse-teste.publica.inf.br/homologa_nfse_integracao/Services', 'https://nfse1.publica.inf.br/balneariocamboriu_nfse_integracao/Services', ' ', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://service.nfse.integracao.ws.publica/"><S:Body><ns2:ConsultarSituacaoLoteRps><XML>', '</XML></ns2:ConsultarSituacaoLoteRps></S:Body></S:Envelope>', 'ConsultarSituacaoLoteRpsResposta', '<ConsultarSituacaoLoteRpsEnvio xmlns="http://www.publica.inf.br"><Prestador Id="1"><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarSituacaoLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4202008020, 4202008, 'ConsultarLoteRps',  'http://nfse-teste.publica.inf.br/homologa_nfse_integracao/Services', 'https://nfse1.publica.inf.br/balneariocamboriu_nfse_integracao/Services', ' ', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://service.nfse.integracao.ws.publica/"><S:Body><ns2:ConsultarLoteRps><XML>', '</XML></ns2:ConsultarLoteRps></S:Body></S:Envelope>', 'ConsultarLoteRpsResposta', '<ConsultarLoteRpsEnvio xmlns="http://www.publica.inf.br"><Prestador Id="1"><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4202008100, 4202008, 'CancelarNfse',  'http://nfse-teste.publica.inf.br/homologa_nfse_integracao/Services', 'https://nfse1.publica.inf.br/balneariocamboriu_nfse_integracao/Services', ' ', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://service.nfse.integracao.ws.publica/"><S:Body><ns2:CancelarNfse><XML>', '</XML></ns2:CancelarNfse></S:Body></S:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns="http://www.publica.inf.br"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4300703000, 4300703, 'EnviarLoteRps', 'http://homologaantagorda.nfse-tecnos.com.br:9091', 'http://antagorda.nfse-tecnos.com.br:9091', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mEnvioLoteRPSSincrono xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mEnvioLoteRPSSincrono></soap:Body></soap:Envelope>', 'EnviarLoteRpsSincronoResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4300703020, 4300703, 'ConsultarLoteRps', 'http://homologaantagorda.nfse-tecnos.com.br:9097', 'http://antagorda.nfse-tecnos.com.br:9097', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mConsultaLoteRPS xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mConsultaLoteRPS></soap:Body></soap:Envelope>', 'mConsultaLoteRPSResult', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><RazaoSocial><!$MG_razaoSocial></RazaoSocial><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4300703100, 4300703, 'CancelarNfse', 'http://homologaantagorda.nfse-tecnos.com.br:9098', 'http://antagorda.nfse-tecnos.com.br:9098', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mEnvioLoteRPSSincrono xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mCancelamentoNFSe></soap:Body></soap:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento><MotivoCancelamento><!$MG_motivoCancelamento></MotivoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4301404000, 4301404, 'EnviarLoteRps', ' ', 'http://arvorezinha-portais.govcloud.com.br/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEGeracao/RecepcionarLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4301404020, 4301404, 'ConsultarLoteRps', ' ', 'http://arvorezinha-portais.govcloud.com.br/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEConsultas/ConsultarSituacaoLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4301404100, 4301404, 'CancelarNfse', ' ', 'http://arvorezinha-portais.govcloud.com.br/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEGeracao/CancelarNfse', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4302105000, 4302105, 'EnviarLoteRps', 'http://testenfse.abase.com.br/webservice/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/bento/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/NFSeWS/RecepcionarLoteRps','<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfs="http://nfse.abase.com.br/NFSeWS"><soapenv:Header/><soapenv:Body><nfs:RecepcionarLoteRps><nfs:nfseCabecMsg>' || '&' || 'lt;cabecalho versao=' || '&' || 'quot;2.01' || '&' || 'quot; xmlns=' || '&' || 'quot;http://nfse.abase.com.br/nfse.xsd' || '&' || 'quot;' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;2.01' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfs:nfseCabecMsg><nfs:nfseDadosMsg>', '</nfs:nfseDadosMsg></nfs:RecepcionarLoteRps></soapenv:Body></soapenv:Envelope>', 'EnviarLoteRpsResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4302105010, 4302105, 'ConsultarSituacaoLoteRps', 'http://testenfse.abase.com.br/webservice/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/bento/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/NFSeWS/ConsultaLoteRps', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfs="http://nfse.abase.com.br/NFSeWS"><soapenv:Header/><soapenv:Body><nfs:ConsultaLoteRps><nfs:nfseCabecMsg>' || '&' || 'lt;cabecalho versao=' || '&' || 'quot;2.01' || '&' || 'quot; xmlns=' || '&' || 'quot;http://nfse.abase.com.br/nfse.xsd' || '&' || 'quot;' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;2.01' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfs:nfseCabecMsg><nfs:nfseDadosMsg>', '</nfs:nfseDadosMsg></nfs:ConsultaLoteRps></soapenv:Body></soapenv:Envelope>', 'ConsultarLoteRpsResposta', '<ConsultarLoteRpsEnvio xmlns="http://nfse.abase.com.br/nfse.xsd"><Prestador><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4302105020, 4302105, 'ConsultarLoteRps', 'http://testenfse.abase.com.br/webservice/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/bento/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/NFSeWS/ConsultaNfseRps','<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfs="http://nfse.abase.com.br/NFSeWS"><soapenv:Header/><soapenv:Body><nfs:ConsultaNfseRps><nfs:nfseCabecMsg>' || '&' || 'lt;cabecalho versao=' || '&' || 'quot;2.01' || '&' || 'quot; xmlns=' || '&' || 'quot;http://nfse.abase.com.br/nfse.xsd' || '&' || 'quot;' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;2.01' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfs:nfseCabecMsg><nfs:nfseDadosMsg>', '</nfs:nfseDadosMsg></nfs:ConsultaNfseRps></soapenv:Body></soapenv:Envelope>', 'ConsultarNfseRpsResposta', '<ConsultarNfseRpsEnvio xmlns="http://nfse.abase.com.br/nfse.xsd"><IdentificacaoRps><Numero><!$MG_rps></Numero><Serie>1</Serie><Tipo>1</Tipo></IdentificacaoRps><Prestador><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador></ConsultarNfseRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4302105100, 4302105, 'CancelarNfse', 'http://testenfse.abase.com.br/webservice/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/bento/nfsews.asmx?wsdl', 'http://nfse.abase.com.br/NFSeWS/CancelaNfse', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfs="http://nfse.abase.com.br/NFSeWS"><soapenv:Header/><soapenv:Body><nfs:CancelaNfse><nfs:nfseCabecMsg>' || '&' || 'lt;cabecalho versao=' || '&' || 'quot;2.01' || '&' || 'quot; xmlns=' || '&' || 'quot;http://nfse.abase.com.br/nfse.xsd' || '&' || 'quot;' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;2.01' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfs:nfseCabecMsg><nfs:nfseDadosMsg>', '</nfs:nfseDadosMsg></nfs:CancelaNfse></soapenv:Body></soapenv:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns="http://nfse.abase.com.br/nfse.xsd"><Pedido><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4304606000, 4304606, 'EnviarLoteRps', 'https://canoas-homol.infisc.com.br/services/nfse/ws/Servicos', 'https://nfse.canoas.rs.gov.br/services/nfse/ws/Servicos', ' ', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://nfse.abrasf.org.br"><soapenv:Header/><soapenv:Body><RecepcionarLoteRpsSincrono><nfseCabecMsg><cabecalho xmlns="http://nfse.abrasf.org.br" versao="2.03"><versaoDados>2.03</versaoDados></cabecalho></nfseCabecMsg><nfseDadosMsg>', '</nfseDadosMsg></RecepcionarLoteRpsSincrono></soapenv:Body></soapenv:Envelope>', 'EnviarLoteRpsSincronoResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4304606020, 4304606, 'ConsultarLoteRps', 'https://canoas-homol.infisc.com.br/services/nfse/ws/Servicos', 'https://nfse.canoas.rs.gov.br/services/nfse/ws/Servicos', ' ', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://nfse.abrasf.org.br"><soapenv:Header/><soapenv:Body><ConsultarLoteRps><nfseCabecMsg><cabecalho xmlns="http://nfse.abrasf.org.br" versao="2.03"><versaoDados>2.03</versaoDados></cabecalho></nfseCabecMsg><nfseDadosMsg><ConsultarLoteRpsEnvio>', '</ConsultarLoteRpsEnvio></nfseDadosMsg></ConsultarLoteRps></soapenv:Body></soapenv:Envelope>', 'ConsultarLoteRpsResposta', '<ConsultarLoteRpsEnvio><Prestador><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4304606100, 4304606, 'CancelarNfse', 'https://canoas-homol.infisc.com.br/services/nfse/ws/Servicos', 'https://nfse.canoas.rs.gov.br/services/nfse/ws/Servicos', ' ', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://nfse.abrasf.org.br"><soapenv:Header/><soapenv:Body><CancelarNfse><nfseCabecMsg><cabecalho xmlns="http://nfse.abrasf.org.br" versao="2.03"><versaoDados>2.03</versaoDados></cabecalho></nfseCabecMsg><nfseDadosMsg>', '</nfseDadosMsg></CancelarNfse></soapenv:Body></soapenv:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio><Pedido><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309100000, 4309100, 'EnviarLoteRps', ' ', 'https://gramado.atende.net:7443/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe', ' ', '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:net="net.atende"><soapenv:Header/><soapenv:Body>', '</soapenv:Body></soapenv:Envelope>', 'EnviarLoteRpsSincronoResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309100020, 4309100, 'ConsultarLoteRps', ' ', 'https://gramado.atende.net:7443/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe', ' ', '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:net="net.atende"><soapenv:Header/><soapenv:Body>', '</soapenv:Body></soapenv:Envelope>', 'ConsultarLoteRpsResposta', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309100100, 4309100, 'CancelarNfse', ' ', 'https://gramado.atende.net:7443/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe', ' ', '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:net="net.atende"><soapenv:Header/><soapenv:Body>', '</soapenv:Body></soapenv:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio><Pedido><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309407000, 4309407, 'EnviarLoteRps', ' ', 'https://guapore.govbr.cloud/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEGeracao/RecepcionarLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309407020, 4309407, 'ConsultarLoteRps', ' ', 'https://guapore.govbr.cloud/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEConsultas/ConsultarSituacaoLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309407100, 4309407, 'CancelarNfse', ' ', 'https://guapore.govbr.cloud/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEGeracao/CancelarNfse', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309902000, 4309902, 'EnviarLoteRps', ' ', 'https://189.14.227.196:8084/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEGeracao/RecepcionarLoteRps', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header><tem:cabecalho versao="202"><tem:versaoDados>2.02</tem:versaoDados></tem:cabecalho></soapenv:Header><soapenv:Body><tem:RecepcionarLoteRps><tem:xmlEnvio>', '</tem:xmlEnvio></tem:RecepcionarLoteRps></soapenv:Body></soapenv:Envelope>', 'RecepcionarLoteRpsResult', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309902020, 4309902, 'ConsultarLoteRps', ' ', 'https://189.14.227.196:8084/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEConsultas/ConsultarSituacaoLoteRps', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header><tem:cabecalho versao="202"><tem:versaoDados>2.02</tem:versaoDados></tem:cabecalho></soapenv:Header><soapenv:Body><tem:RecepcionarLoteRps><tem:xmlEnvio>', '</tem:xmlEnvio></tem:RecepcionarLoteRps></soapenv:Body></soapenv:Envelope>', 'RecepcionarLoteRpsResult', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4309902100, 4309902, 'CancelarNfse', ' ', 'https://189.14.227.196:8084/NFSe.Portal.integracao/services.svc', 'http://tempuri.org/INFSEGeracao/CancelarNfse', '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header><tem:cabecalho versao="202"><tem:versaoDados>2.02</tem:versaoDados></tem:cabecalho></soapenv:Header><soapenv:Body><tem:RecepcionarLoteRps><tem:xmlEnvio>', '</tem:xmlEnvio></tem:RecepcionarLoteRps></soapenv:Body></soapenv:Envelope>', 'RecepcionarLoteRpsResult', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4312906000, 4312906, 'EnviarLoteRps', 'http://homologabassano.nfse-tecnos.com.br:9091', 'http://novabassano.nfse-tecnos.com.br:9091', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mEnvioLoteRPSSincrono xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mEnvioLoteRPSSincrono></soap:Body></soap:Envelope>', 'EnviarLoteRpsSincronoResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4312906020, 4312906, 'ConsultarLoteRps', 'http://novabassano.nfse-tecnos.com.br:9097', 'http://novabassano.nfse-tecnos.com.br:9097', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mConsultaLoteRPS xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mConsultaLoteRPS></soap:Body></soap:Envelope>', 'mConsultaLoteRPSResult', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><RazaoSocial><!$MG_razaoSocial></RazaoSocial><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4312906100, 4312906, 'CancelarNfse', 'http://homologabassano.nfse-tecnos.com.br:9098', 'http://novabassano.nfse-tecnos.com.br:9098', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mEnvioLoteRPSSincrono xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mCancelamentoNFSe></soap:Body></soap:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento><MotivoCancelamento><!$MG_motivoCancelamento></MotivoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4313300000, 4313300, 'EnviarLoteRps', 'http://homologaprata.nfse-tecnos.com.br:9091', 'http://novaprata.nfse-tecnos.com.br:9091', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mEnvioLoteRPSSincrono xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mEnvioLoteRPSSincrono></soap:Body></soap:Envelope>', 'EnviarLoteRpsSincronoResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4313300020, 4313300, 'ConsultarLoteRps', 'http://homologaprata.nfse-tecnos.com.br:9097', 'http://novaprata.nfse-tecnos.com.br:9097', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mConsultaLoteRPS xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mConsultaLoteRPS></soap:Body></soap:Envelope>', 'mConsultaLoteRPSResult', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><RazaoSocial><!$MG_razaoSocial></RazaoSocial><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4313300100, 4313300, 'CancelarNfse', 'http://homologaprata.nfse-tecnos.com.br:9098', 'http://novaprata.nfse-tecnos.com.br:9098', ' ', '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><mCancelamentoNFSe xmlns="http://tempuri.org/"><remessa>', '</remessa><cabecalho>' || '&' || 'lt;cabecalho xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"' || '&' || 'lt;versaoDados' || '&' || 'lt;2.00' || '&' || 'lt;/versaoDados' || '&' || 'lt;' || '&' || 'lt;/cabecalho' || '&' || 'lt;</cabecalho></mCancelamentoNFSe></soap:Body></soap:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><CpfCnpj><Cnpj><!$MG_cnpj></Cnpj></CpfCnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento><MotivoCancelamento><!$MG_motivoCancelamento></MotivoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4313409000, 4313409, 'EnviarLoteRps', 'https://treinamento.atende.net/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe' || '&' || 'cidade=treina_novohamburgo', 'https://ws-novohamburgo.atende.net:7443/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe', ' ', ' ', ' ', 'EnviarLoteRpsResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4313409020, 4313409, 'ConsultarLoteRps', 'https://treinamento.atende.net/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe' || '&' || 'cidade=treina_novohamburgo', 'https://ws-novohamburgo.atende.net:7443/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe', ' ', ' ', ' ', 'ConsultarLoteRpsResposta', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4313409100, 4313409, 'CancelarNfse', 'https://treinamento.atende.net/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe' || '&' || 'cidade=treina_novohamburgo', 'https://ws-novohamburgo.atende.net:7443/?pg=services' || '&' || 'service=WNENotaFiscalEletronicaNfe', ' ', ' ', ' ', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4314902000, 4314902, 'EnviarLoteRps', 'https://nfse-hom.procempa.com.br/bhiss-ws/nfse', 'https://nfe.portoalegre.rs.gov.br/bhiss-ws/nfse', 'RecepcionarLoteRps', '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:RecepcionarLoteRpsRequest xmlns:ns2="http://ws.bhiss.pbh.gov.br"><nfseCabecMsg>' || '&' || 'lt;?xml version="1.0" encoding="UTF-8"?' || '&' || 'gt;' || '&' || 'lt;cabecalho xmlns="http://www.abrasf.org.br/nfse.xsd" versao="1.00"' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;1.00' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfseCabecMsg><nfseDadosMsg>', '</nfseDadosMsg></ns2:RecepcionarLoteRpsRequest></S:Body></S:Envelope>', 'EnviarLoteRpsResposta', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4314902010, 4314902, 'ConsultarSituacaoLoteRps', 'https://nfse-hom.procempa.com.br/bhiss-ws/nfse', 'https://nfe.portoalegre.rs.gov.br/bhiss-ws/nfse', 'ConsultarSituacaoLoteRps', '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:ConsultarSituacaoLoteRpsRequest xmlns:ns2="http://ws.bhiss.pbh.gov.br"><nfseCabecMsg>' || '&' || 'lt;?xml version="1.0" encoding="UTF-8"?' || '&' || 'gt;' || '&' || 'lt;cabecalho xmlns="http://www.abrasf.org.br/nfse.xsd" versao="1.00"' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;1.00' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfseCabecMsg><nfseDadosMsg>', '</nfseDadosMsg></ns2:ConsultarSituacaoLoteRpsRequest></S:Body></S:Envelope>', 'ConsultarSituacaoLoteRpsResposta', '<ConsultarSituacaoLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarSituacaoLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4314902020, 4314902, 'ConsultarLoteRps', 'https://nfse-hom.procempa.com.br/bhiss-ws/nfse', 'https://nfe.portoalegre.rs.gov.br/bhiss-ws/nfse', 'ConsultarLoteRps', '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:ConsultarLoteRpsRequest xmlns:ns2="http://ws.bhiss.pbh.gov.br"><nfseCabecMsg>' || '&' || 'lt;?xml version="1.0" encoding="UTF-8"?' || '&' || 'gt;' || '&' || 'lt;cabecalho xmlns="http://www.abrasf.org.br/nfse.xsd" versao="1.00"' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;1.00' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfseCabecMsg><nfseDadosMsg>', '</nfseDadosMsg></ns2:ConsultarLoteRpsRequest></S:Body></S:Envelope>', 'ConsultarLoteRpsResposta', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4314902100, 4314902, 'CancelarNfse', 'https://nfse-hom.procempa.com.br/bhiss-ws/nfse', 'https://nfe.portoalegre.rs.gov.br/bhiss-ws/nfse', 'CancelarNfse', '<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:CancelarNfseRequest xmlns:ns2="http://ws.bhiss.pbh.gov.br"><nfseCabecMsg>' || '&' || 'lt;?xml version="1.0" encoding="UTF-8"?' || '&' || 'gt;' || '&' || 'lt;cabecalho xmlns="http://www.abrasf.org.br/nfse.xsd" versao="1.00"' || '&' || 'gt;' || '&' || 'lt;versaoDados' || '&' || 'gt;1.00' || '&' || 'lt;/versaoDados' || '&' || 'gt;' || '&' || 'lt;/cabecalho' || '&' || 'gt;</nfseCabecMsg><nfseDadosMsg>', '</nfseDadosMsg></ns2:CancelarNfseRequest></S:Body></S:Envelope>', 'CancelarNfseResposta', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4318705000, 4318705, 'EnviarLoteRps', 'https://nfehomologacao.saoleopoldo.rs.gov.br/thema-nfse/services/NFSEremessa', 'https://nfe.saoleopoldo.rs.gov.br/thema-nfse/services/NFSEremessa', 'urn:recepcionarLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><recepcionarLoteRps><xml>', '</xml></recepcionarLoteRps></S:Body></S:Envelope>', 'recepcionarLoteRpsResponse', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4318705020, 4318705, 'ConsultarLoteRps', 'https://nfehomologacao.saoleopoldo.rs.gov.br/thema-nfse/services/NFSEconsulta', 'https://nfe.saoleopoldo.rs.gov.br/thema-nfse/services/NFSEconsulta', 'urn:consultarLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><recepcionarLoteRps><xml>', '</xml></recepcionarLoteRps></S:Body></S:Envelope>', 'recepcionarLoteRpsResponse', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4318705100, 4318705, 'CancelarNfse', 'https://nfehomologacao.saoleopoldo.rs.gov.br/thema-nfse/services/NFSEcancelamento/cancelarNfse', 'https://nfe.saoleopoldo.rs.gov.br/thema-nfse/services/NFSEcancelamento/cancelarNfse', 'urn:cancelarNfse', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><recepcionarLoteRps><xml>', '</xml></recepcionarLoteRps></S:Body></S:Envelope>', 'recepcionarLoteRpsResponse', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4320800000, 4320800, 'EnviarLoteRps', ' ', 'https://soledade-portais.govcloud.com.br/NFSe.Portal.Integracao/Services.svc', 'http://tempuri.org/INFSEGeracao/RecepcionarLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', ' ', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4320800020, 4320800, 'ConsultarLoteRps', ' ', 'https://soledade-portais.govcloud.com.br/NFSe.Portal.Integracao/Services.svc', 'http://tempuri.org/INFSEConsultas/ConsultarSituacaoLoteRps', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', '<ConsultarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Prestador><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal></Prestador><Protocolo><!$MG_protocolo></Protocolo></ConsultarLoteRpsEnvio>', ' ');
INSERT INTO SISERVICOSNFSE (id, municipio, nomeServico, urlServicoHomologacao, urlServicoProducao, soapAction, soapPrefixo, soapSufixo, elementoRetorno, modeloXml, observacoes) VALUES (4320800100, 4320800, 'CancelarNfse', ' ', 'https://soledade-portais.govcloud.com.br/NFSe.Portal.Integracao/Services.svc', 'http://tempuri.org/INFSEGeracao/CancelarNfse', '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RecepcionarLoteRps><cabecalho versao="2.03" versaoDados="2.03"/><xmlEnvio>', '</xmlEnvio></RecepcionarLoteRps></S:Body></S:Envelope>', 'RecepcionarLoteRpsResponse', '<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd"><Pedido xmlns="http://www.abrasf.org.br/nfse.xsd"><InfPedidoCancelamento Id="<!$MG_idPedidoCancelamento>"><IdentificacaoNfse><Numero><!$MG_numeroNFSe></Numero><Cnpj><!$MG_cnpj></Cnpj><InscricaoMunicipal><!$MG_inscricaoMunicipal></InscricaoMunicipal><CodigoMunicipio><!$MG_codigoMunicipio></CodigoMunicipio></IdentificacaoNfse><CodigoCancelamento><!$MG_codigoCancelamento></CodigoCancelamento></InfPedidoCancelamento></Pedido></CancelarNfseEnvio>', ' ');

COMMIT;

create or replace FUNCTION FUNC_ADD_BUSCA_OPERACAO_FISCAL (
  p_cab_modeloDocumento          IN NUMBER,
  p_cab_entradaSaida             IN CHAR,
  p_cab_pessoa                   IN NUMBER,
  p_cab_vendaConsumidor          IN NUMBER,
  p_cab_indicadorConsumidorFinal IN CHAR,
  p_est_grupoFiscal              IN NUMBER,
  p_pessEst_regimeTributario     IN CHAR,
  p_endPessEstMun_uf             IN CHAR,
  p_pess_indicadorInscricaoEstad IN CHAR,
  p_endPessMun_uf                IN CHAR,
  p_produto                      IN NUMBER)
  RETURN NUMBER
IS
  v_operacaoFiscal NUMBER;
BEGIN
  SELECT COALESCE ((
    SELECT a.operacaoFiscal
    FROM (
      SELECT a.operacaoFiscal,
        ROW_NUMBER() OVER (
          ORDER BY
            a.filtrarPessoas DESC,
            CASE
              WHEN a.agrupadorFiscal = 0
              THEN 0
              WHEN EXISTS (
                SELECT 1
                FROM PAAGRUPFISCXPRODUTOS opX
                WHERE opX.agrupadorFiscal = a.agrupadorFiscal
                AND opX.produto = p_produto
                AND opX.ativo = 1)
              THEN 2
              ELSE 1
            END DESC,
            CASE
              WHEN filtrProd.filtroProduto = 0
              THEN 0
              WHEN filtrProd.filtrarProdutos = 1
              AND EXISTS (
                SELECT 1
                FROM PAFILTROPRODUTOXPRODUTOS filtrProdX
                WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
                AND filtrProdX.produto = p_produto
                AND filtrProdX.ativo = 1)
              THEN 2
              ELSE 1
            END DESC,
            a.ufDestino DESC,
            a.ufOrigem DESC,
            a.regimeTributario DESC,
            a.indicadorInscricaoEstadual DESC,
            a.indicadorConsumidorFinal DESC,
            a.grupoFiscal DESC,
            a.origemMercadoria DESC,
            a.tipoProduto DESC,
            a.operacaoFiscal DESC) ordenacao
      FROM PAOPERACOESFISCAIS a
      JOIN CAPRODUTOS prod
      ON prod.produto = p_produto
      JOIN PASUBCATEGORIASPRODUTO subCat
      ON subCat.subcategoriaProduto = prod.subcategoriaProduto
      JOIN SICFOPS cfop
      ON cfop.cfop = a.cfop
      JOIN SINATUREZASOPERACAO natOp
      ON natOp.naturezaOperacao = cfop.naturezaOperacao
      JOIN SICAPITULOSNATUREZAOPERAC capNatFisc
      ON capNatFisc.capituloNaturezaOperacao = natOp.capituloNaturezaOperacao
      JOIN PAFILTROSPRODUTO filtrProd
      ON filtrProd.filtroProduto = a.filtroProduto
      WHERE a.operacaoFiscal > 0
      AND a.ativo = 1
      AND a.cfop BETWEEN
        CASE
          WHEN p_endPessMun_uf = 'EX'
            AND p_cab_vendaConsumidor = 0
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 3000 ELSE 7000 END
          WHEN p_endPessMun_uf       = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_endPessEstMun_uf = p_endPessMun_uf
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 1000 ELSE 5000 END
          ELSE CASE WHEN p_cab_entradaSaida = 'E' THEN 2000 ELSE 6000 END
        END
        AND
        CASE
          WHEN p_endPessMun_uf = 'EX'
            AND p_cab_vendaConsumidor = 0
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 3999 ELSE 7999 END
          WHEN p_endPessMun_uf       = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_endPessEstMun_uf = p_endPessMun_uf
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 1999 ELSE 5999 END
          ELSE CASE WHEN p_cab_entradaSaida = 'E' THEN 2999 ELSE 6999 END
        END
      AND TRUNC(a.dataValidadeInicial) <= TRUNC(SYSDATE)
      AND TRUNC(a.dataValidadeFinal)   >= TRUNC(SYSDATE)
      AND capNatFisc.entradaSaida       = p_cab_entradaSaida
      AND (a.regimeTributario           = ' '
        OR a.regimeTributario           = p_pessEst_regimeTributario)
      AND (a.tipoProduto                = '  '
        OR a.tipoProduto                = prod.tipoProduto)
      AND (a.origemMercadoria           = ' '
        OR a.origemMercadoria           = prod.origemMercadoria)
      AND (a.grupoFiscal                = 0
        OR a.grupoFiscal                = p_est_grupoFiscal)
      AND (a.ufOrigem                   = '  '
        OR a.ufOrigem                   =
          CASE
            WHEN p_cab_entradaSaida     = 'S'
            OR p_endPessMun_uf          = '  '
            OR p_cab_vendaConsumidor    = 1
            THEN p_endPessEstMun_uf
            ELSE p_endPessMun_uf
          END)
      AND (a.ufDestino                  = '  '
        OR a.ufDestino                  =
          CASE
            WHEN p_cab_entradaSaida     = 'E'
            OR p_endPessMun_uf          = '  '
            OR p_cab_vendaConsumidor    = 1
            THEN p_endPessEstMun_uf
            ELSE p_endPessMun_uf
          END)
      AND (a.indicadorConsumidorFinal   = ' '
        OR a.indicadorConsumidorFinal   = p_cab_indicadorConsumidorFinal)
      AND (a.indicadorInscricaoEstadual = ' '
        OR a.indicadorInscricaoEstadual =
          CASE
            WHEN p_pess_indicadorInscricaoEstad <> ' '
            THEN p_pess_indicadorInscricaoEstad
            WHEN p_cab_indicadorConsumidorFinal = '0'
            THEN '1'
            ELSE '9'
          END)
      AND (p_cab_modeloDocumento = 0
        OR EXISTS (
          SELECT 1
          FROM PAOPERFISCALXMODELOSDOCUM opX
          WHERE opX.operacaoFiscal = a.operacaoFiscal
          AND opX.modeloDocumento  = p_cab_modeloDocumento
          AND opX.ativo            = 1))
      AND (a.filtrarPessoas      = 0
        OR p_cab_vendaConsumidor = 0 
        AND EXISTS (
          SELECT 1
          FROM PAOPERFISCALXPESSOAS opX
          WHERE opX.operacaoFiscal = a.operacaoFiscal
          AND opX.pessoa           = p_cab_pessoa
          AND opX.ativo            = 1))
      AND (a.agrupadorFiscal = 0
        OR EXISTS (
          SELECT 1
          FROM PAAGRUPFISCXPRODUTOS opX
          WHERE opX.agrupadorFiscal = a.agrupadorFiscal
          AND opX.produto           = p_produto
          AND opX.ativo             = 1)
        OR EXISTS (
          SELECT 1
          FROM PAAGRUPFISCXNCMS opX
          WHERE opX.agrupadorFiscal = a.agrupadorFiscal
          AND opX.idNcm             = prod.idNcm
          AND opX.ativo             = 1))
      AND (filtrProd.filtrarProdutos               = 0
        AND filtrProd.filtrarCategoriasProdutos    = 0
        AND filtrProd.filtrarSubcategoriasProdutos = 0
        AND filtrProd.filtrarMarcas                = 0
        AND filtrProd.filtrarCaracteristicasA      = 0
        AND filtrProd.filtrarCaracteristicasB      = 0
        AND filtrProd.filtrarCaracteristicasC      = 0
        AND filtrProd.filtrarCaracteristicasD      = 0
        AND filtrProd.filtrarCaracteristicasE      = 0
        AND filtrProd.filtrarCores                 = 0
        AND filtrProd.filtrarTamanhos              = 0
        AND filtrProd.filtrarNCMs                  = 0
        AND filtrProd.filtrarListasServicos        = 0
        OR filtrProd.filtrarProdutos               = 1
        AND EXISTS (
          SELECT 1
          FROM PAFILTROPRODUTOXPRODUTOS filtrProdX
          WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
          AND filtrProdX.produto         = p_produto
          AND filtrProdX.ativo           = 1)
        OR (filtrProd.filtrarCategoriasProdutos     = 1
          OR filtrProd.filtrarSubcategoriasProdutos = 1
          OR filtrProd.filtrarMarcas                = 1
          OR filtrProd.filtrarCaracteristicasA      = 1
          OR filtrProd.filtrarCaracteristicasB      = 1
          OR filtrProd.filtrarCaracteristicasC      = 1
          OR filtrProd.filtrarCaracteristicasD      = 1
          OR filtrProd.filtrarCaracteristicasE      = 1
          OR filtrProd.filtrarCores                 = 1
          OR filtrProd.filtrarTamanhos              = 1
          OR filtrProd.filtrarNCMs                  = 1
          OR filtrProd.filtrarListasServicos        = 1)
        AND (filtrProd.filtrarCategoriasProdutos    = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCATEGPROD filtrProdX
            WHERE filtrProdX.filtroProduto  = filtrProd.filtroProduto
            AND filtrProdX.categoriaProduto = subCat.categoriaProduto
            AND filtrProdX.ativo            = 1))
        AND (filtrProd.filtrarSubcategoriasProdutos = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXSUBCAPROD filtrProdX
            WHERE filtrProdX.filtroProduto     = filtrProd.filtroProduto
            AND filtrProdX.subcategoriaProduto = prod.subcategoriaProduto
            AND filtrProdX.ativo               = 1))
        AND (filtrProd.filtrarMarcas = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXMARCAS filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.marca           = prod.marca
            AND filtrProdX.ativo           = 1))
        AND (filtrProd.filtrarCaracteristicasA = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERA filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaA = prod.caracteristicaA
            AND filtrProdX.ativo           = 1))
        AND (filtrProd.filtrarCaracteristicasB = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERB filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaB = prod.caracteristicaB
            AND filtrProdX.ativo           = 1))
        AND (filtrProd.filtrarCaracteristicasC = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERC filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaC = prod.caracteristicaC
            AND filtrProdX.ativo           = 1))
        AND (filtrProd.filtrarCaracteristicasD = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERD filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaD = prod.caracteristicaD
            AND filtrProdX.ativo           = 1))
        AND (filtrProd.filtrarCaracteristicasE = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERE filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaE = prod.caracteristicaE
            AND filtrProdX.ativo           = 1))
        AND filtrProd.filtrarCores    = 0
        AND filtrProd.filtrarTamanhos = 0
        AND (filtrProd.filtrarNCMs = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXNCMS filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.idNcm           = prod.idNcm
            AND filtrProdX.ativo           = 1))
        AND (filtrProd.filtrarListasServicos = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXLISTASSE filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.listaServicos   = prod.listaServicos
            AND filtrProdX.ativo           = 1)))) a
    WHERE a.ordenacao = 1), 0)
  INTO v_operacaoFiscal
  FROM DUAL;
  RETURN v_operacaoFiscal;
END;

/

create or replace PROCEDURE ADD_DOC_FISC_INFO_SISTEMA_CRIA (
  p_exclusivo                    IN VARCHAR2,
  p_paf                          IN NUMBER,
  p_perfilUsuarioLogado          IN NUMBER,
  p_usuarioLogado                IN NUMBER,
  p_estabelecimentoAtivo         IN NUMBER,
  p_cab_idDocumentoFiscal        IN NUMBER)
IS
  v_modeloDocumentoFiscal        CHAR(2);
  v_indicadorConsumidorFinal     CHAR(1);
  v_regimeTributario             CHAR(1);
  v_md5                          VARCHAR(32);
  v_documentoFiscalRefProduto    NUMBER;
  v_dataEmissaoRefProduto        DATE;
  v_documentoFiscalRefServico    NUMBER;
  v_dataEmissaoRefServico        DATE;
  v_valorPagamentoBruto          NUMBER;
  v_creditoSimplesNacional       NUMBER;
  v_valorCreditoSimplesNacional  NUMBER;
  v_valorFCP                     NUMBER;
  v_valorFCPUFDestinatario       NUMBER;
  v_valorICMSUFDestinatario      NUMBER;
  v_valorICMSUFRemetente         NUMBER;
  v_baseEstimadaImpostos         NUMBER;
  v_valorEstimadoImpostos        NUMBER;
  v_possui_1913                  NUMBER;
  v_possui_5912                  NUMBER;
  v_motorista                    NUMBER;
  v_motoristaNomeRazaoSocial     VARCHAR2(60);
BEGIN
  SELECT
    cab.modeloDocumentoFiscal,
    cab.indicadorConsumidorFinal,
    cab.valorPagamentoBruto,
    pess.regimeTributario
  INTO
    v_modeloDocumentoFiscal,
    v_indicadorConsumidorFinal,
    v_valorPagamentoBruto,
    v_regimeTributario
  FROM MODOCUMENTOSFISCAIS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  JOIN CAPESSOAS pess
  ON pess.pessoa = est.pessoaEstabelecimento
  WHERE cab.idDocumentoFiscal = p_cab_idDocumentoFiscal;
  IF p_paf = 1
    AND FUNC_ADD_BUSCA_CONFIG (322, p_perfilUsuarioLogado, p_usuarioLogado, p_estabelecimentoAtivo) = 'S'
  THEN
    SELECT COALESCE (MAX (md5PAFECF), ' ')
    INTO v_md5
    FROM SIPAFLAUDO
    WHERE idLaudo = 1;
    DELETE MODOCFISCALXINFOCOMPLEMEN
    WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
    AND geradoPeloSistema = 1
    AND descInformacaoComplementar LIKE 'MD5:%';
  ELSE
    v_md5 := ' ';
  END IF;
  SELECT
    COALESCE (MAX (docRef.documentoFiscal), 0),
    MAX (TRUNC (doc.dataEmissao))
  INTO
    v_documentoFiscalRefProduto,
    v_dataEmissaoRefProduto
  FROM MODOCFISCALXITENS item
  JOIN CAGRADESPRODUTO gradProd
  ON gradProd.gradeProduto = item.gradeProduto
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  JOIN MODOCUMENTOSFISCAIS doc
  ON doc.idDocumentoFiscal = item.idDocumentoFiscal
  JOIN MOENTREGAS entr
  ON entr.idItemDocFiscalRemessa = item.idItemDocFiscal
  JOIN MODOCFISCALXDOCFISCAL docXDoc
  ON docXDoc.idItemDocFiscal = item.idItemDocFiscal
  JOIN MODOCFISCALXITENS itemRef
  ON itemRef.idItemDocFiscal = docXDoc.idItemDocFiscalReferenciado
  JOIN MODOCUMENTOSFISCAIS docRef
  ON docRef.idDocumentoFiscal = itemRef.idDocumentoFiscal
  WHERE item.idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND prod.tipoProduto <> '09'
  AND doc.entradaSaida = 'S'
  AND doc.devolucaoAnulacaoRetorno = 0
  AND docRef.entradaSaida = 'S'
  AND docRef.devolucaoAnulacaoRetorno = 0;
  SELECT
    COALESCE (MAX (docRef.documentoFiscal), 0),
    MAX (TRUNC (doc.dataEmissao))
  INTO
    v_documentoFiscalRefServico,
    v_dataEmissaoRefServico
  FROM MODOCFISCALXITENS item
  JOIN CAGRADESPRODUTO gradProd
  ON gradProd.gradeProduto = item.gradeProduto
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  JOIN MODOCUMENTOSFISCAIS doc
  ON doc.idDocumentoFiscal = item.idDocumentoFiscal
  JOIN MOENTREGAS entr
  ON entr.idItemDocFiscalRemessa = item.idItemDocFiscal
  JOIN MODOCFISCALXDOCFISCAL docXDoc
  ON docXDoc.idItemDocFiscal = item.idItemDocFiscal
  JOIN MODOCFISCALXITENS itemRef
  ON itemRef.idItemDocFiscal = docXDoc.idItemDocFiscalReferenciado
  JOIN MODOCUMENTOSFISCAIS docRef
  ON docRef.idDocumentoFiscal = itemRef.idDocumentoFiscal
  WHERE item.idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND prod.tipoProduto = '09'
  AND doc.entradaSaida = 'S'
  AND doc.devolucaoAnulacaoRetorno = 0
  AND docRef.entradaSaida = 'S'
  AND docRef.devolucaoAnulacaoRetorno = 0;
  SELECT
    COALESCE (MAX (item.creditoSimplesNacional), 0),
    COALESCE (SUM (item.valorCreditoSimplesNacional), 0),
    COALESCE (SUM (item.valorFCP), 0),
    COALESCE (SUM (item.valorFCPUFDestinatario), 0),
    COALESCE (SUM (item.valorICMSUFDestinatario), 0),
    COALESCE (SUM (item.valorICMSUFRemetente), 0),
    COALESCE (SUM (item.baseEstimadaImpostos), 0),
    COALESCE (SUM (item.valorEstimadoImpFederais + item.valorEstimadoImpEstaduais + item.valorEstimadoImpMunicipais), 0),
    COALESCE (MAX (CASE WHEN cfop IN (1913, 2913) THEN 1 ELSE 0 END), 0),
    COALESCE (MAX (CASE WHEN cfop IN (5912, 6912) THEN 1 ELSE 0 END), 0),
    COALESCE (MAX (entr.motorista), 0)
  INTO
    v_creditoSimplesNacional,
    v_valorCreditoSimplesNacional,
    v_valorFCP,
    v_valorFCPUFDestinatario,
    v_valorICMSUFDestinatario,
    v_valorICMSUFRemetente,
    v_baseEstimadaImpostos,
    v_valorEstimadoImpostos,
    v_possui_1913,
    v_possui_5912,
    v_motorista
  FROM MODOCFISCALXITENS item
  LEFT JOIN MOENTREGAS entr
  ON entr.idItemDocFiscalRemessa = item.idItemDocFiscal
  WHERE item.idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND item.cancelado = 0;
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'NF-e Ref.:%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Valor do ICMS relativo ao Fundo de Combate a Pobreza - FCP: R$';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Valor do ICMS relativo ao Fundo de Combate a Pobreza - FCP da UF de destino: R$%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Valor do ICMS Interestadual para a UF de destino: R$%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Valor do ICMS Interestadual para a UF do remetente: R$%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Valor Aproximado Tributos: R$%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar = 'Venda destinada a consumidor final sem fins comerciais.';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Nota de transporte referente a nota de antecipação de faturamento%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Nota de transporte referente a nota de serviço%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Permite aproveitamento de credito de ICMS no valor de R$%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar = 'Documento emitido por ME ou EPP optante pelo Simples Nacional; Nao gera direito a credito fiscal de IPI.';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar = 'Mercadoria remetida para demonstracao.';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar = 'Imposto suspenso nos termos do Ajuste SINIEF 02/18.';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND descInformacaoComplementar LIKE 'Motorista:%';
  DELETE FROM MODOCFISCALXINFOCOMPLEMEN
  WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
  AND informacaoComplementar > 0;
  DELETE MODOCFISCALXINFOCOMPLEMEN
  WHERE IdDocumentoFiscal = p_cab_idDocumentoFiscal
  AND geradoPeloSistema = 1
  AND imprimir = 1
  AND informacaoComplementar = 0
  AND (descInformacaoComplementar LIKE 'P%R$%'
    OR descInformacaoComplementar LIKE 'T%R$%')
  AND SUBSTR(descInformacaoComplementar,2,1) BETWEEN '1' AND '9';
  IF v_md5 <> ' ' THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'MD5: ' || RTRIM(v_md5));
  END IF;
  IF v_modeloDocumentoFiscal <> '58' THEN
    FOR a IN (
      SELECT chaveNfe
      FROM MODOCFISCALXNFREF
      WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal
      AND chaveNfe <> ' ')
    LOOP      
      ADD_DOC_FISC_INFO_CRIA (
        p_estabelecimentoAtivo,
        p_cab_idDocumentoFiscal,
        1,
        1,
        0,
        0,
        'NF-e Ref.: '
        || SUBSTR(a.chaveNfe,1,2)
        || '-' || SUBSTR(a.chaveNfe,3,4)
        || '-' || SUBSTR(a.chaveNfe,7,2)
        || '.' || SUBSTR(a.chaveNfe,9,3)
        || '.' || SUBSTR(a.chaveNfe,12,3)
        || '/' || SUBSTR(a.chaveNfe,15,4)
        || '-' || SUBSTR(a.chaveNfe,19,2)
        || '-' || SUBSTR(a.chaveNfe,21,2)
        || '-' || SUBSTR(a.chaveNfe,23,3)
        || '-' || SUBSTR(a.chaveNfe,26,3)
        || '.' || SUBSTR(a.chaveNfe,29,3)
        || '.' || SUBSTR(a.chaveNfe,32,3)
        || '-' || SUBSTR(a.chaveNfe,35,3)
        || '.' || SUBSTR(a.chaveNfe,38,3)
        || '.' || SUBSTR(a.chaveNfe,41,3)
        || '-' || SUBSTR(a.chaveNfe,44,1));
    END LOOP;
  END IF;
  IF v_valorFCP > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Valor do ICMS relativo ao Fundo de Combate a Pobreza - FCP: R$ ' || TRIM (TO_CHAR (v_valorFCP, 'FM999G999G999G999G999G990D00')) || '.');
  END IF;
  IF v_valorFCPUFDestinatario > 0 THEN  
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Valor do ICMS relativo ao Fundo de Combate a Pobreza - FCP da UF de destino: R$ ' || TRIM (TO_CHAR (v_valorFCPUFDestinatario, 'FM999G999G999G999G999G990D00')) || '.');
  END IF;
  IF v_valorICMSUFDestinatario > 0 OR v_valorICMSUFRemetente > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Valor do ICMS Interestadual para a UF de destino: R$ ' || TRIM (TO_CHAR (v_valorICMSUFDestinatario, 'FM999G999G999G999G999G990D00')) || '.');
  END IF;
  IF v_valorICMSUFDestinatario > 0 OR v_valorICMSUFRemetente > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Valor do ICMS Interestadual para a UF do remetente: R$ ' || TRIM (TO_CHAR (v_valorICMSUFRemetente, 'FM999G999G999G999G999G990D00')) || '.');
  END IF;
  IF v_valorEstimadoImpostos > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Valor Aproximado Tributos: R$ ' || TRIM (TO_CHAR (v_valorEstimadoImpostos, 'FM999G999G999G999G999G990D00')) || ' (' || CASE WHEN v_baseEstimadaImpostos = 0 THEN '0,00' ELSE TRIM (TO_CHAR (100* ROUND(v_valorEstimadoImpostos / v_baseEstimadaImpostos,2), 'FM999G999G999G999G999G990D00')) END || '%) Fonte: IBPT.');
  END IF;
  IF v_indicadorConsumidorFinal = '1' THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Venda destinada a consumidor final sem fins comerciais.');
  END IF;
  IF v_documentoFiscalRefProduto > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Nota de transporte referente a nota de antecipação de faturamento ' || TRIM (TO_CHAR (v_documentoFiscalRefProduto)) || CASE WHEN v_dataEmissaoRefProduto IS NULL THEN '' ELSE ' gerada na data ' || TO_CHAR(v_dataEmissaoRefProduto,'DD/MM/YYYY') END || '.');
  END IF;
  IF v_documentoFiscalRefServico > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Nota de transporte referente a nota de serviço ' || TRIM (TO_CHAR (v_documentoFiscalRefServico)) || CASE WHEN v_dataEmissaoRefServico IS NULL THEN '' ELSE ' gerada na data ' || TO_CHAR(v_dataEmissaoRefServico,'DD/MM/YYYY') END || '.');
  END IF;
  IF v_regimeTributario IN ('1','2') AND v_valorCreditoSimplesNacional > 0 THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Permite aproveitamento de credito de ICMS no valor de R$ ' || TRIM (TO_CHAR (v_valorCreditoSimplesNacional, 'FM999G999G999G999G999G990D00')) || ', correspondente a aliquota de ' || TRIM (TO_CHAR (v_creditoSimplesNacional, 'FM999G999G999G999G999G990D00')) || '%, nos termos do art. 23 da LC. 123, de 2006.');
  END IF;
  IF v_regimeTributario IN ('1','2') THEN
    ADD_DOC_FISC_INFO_CRIA (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Documento emitido por ME ou EPP optante pelo Simples Nacional; Nao gera direito a credito fiscal de IPI.');
  END IF;
  FOR obs IN (
    SELECT
      a.informacaoComplementar,
      a.descInformacaoComplementar
    FROM PAINFORMACOESCOMPLEMENTAR a
    WHERE a.informacaoComplementar > 0
    AND (
      EXISTS (
        SELECT 1
        FROM MODOCFISCALXITENS item
        JOIN PAOPERFISCALXINFOCOMPLEM opXInfo
        ON opXInfo.operacaoFiscal = item.operacaoFiscal
        WHERE item.idDocumentoFiscal = p_cab_idDocumentoFiscal
        AND item.cancelado = 0
        AND item.operacaoFiscal > 0
        AND opXInfo.informacaoComplementar = a.informacaoComplementar)
      OR EXISTS (
        SELECT 1
        FROM MODOCUMENTOSFISCAIS cab
        JOIN MODOCFISCALXITENS item
        ON item.idDocumentoFiscal = cab.idDocumentoFiscal
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = item.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto
        JOIN PAESTABELECIMENTOS est
        ON est.estabelecimento = cab.idDocumentoFiscal
        LEFT JOIN CAENDERECOSPESSOA endEst
        ON endEst.pessoa = est.pessoaEstabelecimento
        AND endEst.ativo = 1
        AND endEst.principal = 1
        JOIN SIMUNICIPIOS munEst
        ON munEst.municipio = COALESCE(endEst.municipio,0)
        LEFT JOIN CAENDERECOSPESSOA endPess
        ON endPess.pessoa = cab.pessoa
        AND endPess.ativo = 1 AND
        endPess.principal = 1
        JOIN SIMUNICIPIOS munPess
        ON munPess.municipio = COALESCE(endPess.municipio,0)
        WHERE cab.idDocumentoFiscal = p_cab_idDocumentoFiscal
        AND item.cancelado = 0
        AND a.informacaoComplementar = 
          FUNC_ADD_BUSCA_INFO_DESON (
            cab.tipoDocumento,
            cab.entradaSaida,
            cab.estabelecimento,
            cab.pessoa,
            cab.vendaConsumidor,
            munEst.uf,
            munPess.uf,
            item.stICMS,
            gradProd.produto,
            prod.origemMercadoria,
            prod.idNcm)))
    ORDER BY a.informacaoComplementar)
  LOOP
    ADD_DOC_FISC_INFO_GRAVA_DESCR (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      obs.informacaoComplementar,
      obs.descInformacaoComplementar);
  END LOOP;
  IF v_possui_5912 = 1 THEN
    ADD_DOC_FISC_INFO_GRAVA_DESCR (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Mercadoria remetida para demonstracao.');
  END IF;
  IF v_possui_5912 = 1 OR v_possui_1913 = 1 THEN
    ADD_DOC_FISC_INFO_GRAVA_DESCR (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Imposto suspenso nos termos do Ajuste SINIEF 02/18.');
  END IF;
  IF v_motorista <> 0 THEN
    SELECT COALESCE (MAX (nomeRazaoSocial), ' ')
    INTO v_motoristaNomeRazaoSocial
    FROM CAPESSOAS
    WHERE pessoa = v_motorista;
    ADD_DOC_FISC_INFO_GRAVA_DESCR (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Motorista: ' || TRIM (v_motoristaNomeRazaoSocial));
  END IF;
  IF p_exclusivo = 'BITELO' THEN
    ADD_DOC_FISC_INFO_GRAVA_DESCR (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'ATENÇÃO: 
CONFIRA A MERCADORIA NO ATO DA ENTREGA, OS MATERIAIS SERÃO DESCARREGADOS AO LADO DO CAMINHÃO. 
DÚVIDAS E RECLAMAÇÕES SOBRE ENTREGAS LIGAR PARA (51) 3497-7589.');
  END IF;
  IF p_exclusivo = 'DC' THEN
    ADD_DOC_FISC_INFO_GRAVA_DESCR (
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      1,
      1,
      0,
      0,
      'Declaro que o produto acima se encontra em perfeito estado, não constando nenhum dano físico, ou avarias, e, sobretudo com número de série idêntico ao da embalagem e com todos os acessórios e itens que o acompanham, bem como sua embalagem também em perfeito estado.

______________________________
    Assinatura do Recebido
    CPF/RG:');
  END IF;
  IF v_modeloDocumentoFiscal = '55'
    AND v_valorPagamentoBruto > 0
    AND FUNC_ADD_BUSCA_CONFIG (110, p_perfilUsuarioLogado, p_usuarioLogado, p_estabelecimentoAtivo) = 'S' THEN
    ADD_DOC_FISC_INFO_PAG_DOC_FISC (
      p_perfilUsuarioLogado,
      p_usuarioLogado,
      p_estabelecimentoAtivo,
      p_cab_idDocumentoFiscal,
      p_cab_idDocumentoFiscal,
      0);
  END IF;
END ADD_DOC_FISC_INFO_SISTEMA_CRIA;

/

create or replace FUNCTION FUNC_ADD_GERA_XML_ENVIO (
  p_idDocumentoFiscal      IN NUMBER,
  p_seqLoteWebServiceEnvio IN NUMBER,
  p_loteWebService         IN VARCHAR)
  RETURN CLOB
IS
  v_xml                         CLOB;
  v_tecnologiaNFSe              NUMBER;
  v_versaoNFSe                  VARCHAR(20);
  v_estab_nomeRazaoSocial       VARCHAR(60);
  v_estab_indicadorPessoa       CHAR(1);
  v_estab_cnpjCpfIdEstrangeiro  VARCHAR(20);
  v_estab_inscricaoMunicipal    VARCHAR(15);
  v_estab_municipio             NUMBER;
  v_estab_pais                  VARCHAR(4);
  v_estab_uf                    CHAR(2);
  v_regimeEspecialTributacao    CHAR (1);
  v_indicadorIssqn              CHAR (1);
  v_optanteSimplesNacional      NUMBER;
  v_incentivadorCultural        NUMBER;
  v_incentivoFiscal             NUMBER;
  v_intermediario               NUMBER;
  v_pess_nomeRazaoSocial        VARCHAR(60);
  v_pess_apelidoFantasia        VARCHAR(60);
  v_pess_indicadorPessoa        CHAR(1);
  v_pess_cnpjCpfIdEstrangeiro   VARCHAR(20);
  v_pess_inscricaoEstadual      VARCHAR(14);
  v_pess_inscricaoMunicipal     VARCHAR(15);
  v_pess_logradouro             VARCHAR(60);
  v_pess_numero                 VARCHAR(60);
  v_pess_complemento            VARCHAR(60);
  v_pess_bairroDistrito         VARCHAR(60);
  v_pess_municipio              NUMBER;
  v_pess_cep                    NUMBER;
  v_pess_pais                   VARCHAR(4);
  v_pess_uf                     CHAR(2);
  v_pess_observacoesEndereco    VARCHAR(4000);
  v_pess_fone                   VARCHAR(14);
  v_pess_email                  VARCHAR(60);
  v_entr_logradouro             VARCHAR(60);
  v_entr_municipio              NUMBER;
  v_entr_municipio_descricao    VARCHAR(60);
  v_entr_uf                     CHAR(2);
  v_entr_pais                   VARCHAR(4);
  v_entr_pais_descricao         VARCHAR(60);
  v_interm_nomeRazaoSocial      VARCHAR(60);
  v_interm_indicadorPessoa      CHAR(1);
  v_interm_cnpjCpfIdEstrangeiro VARCHAR(20);
  v_interm_inscricaoMunicipal   VARCHAR(15);
  v_municipioFatoGerador        NUMBER;
  v_documentoFiscal             VARCHAR(15);
  v_serieFiscal                 VARCHAR(4);
  v_dataEmissao                 DATE;
  v_dataCompetencia             DATE;
  v_baseCalculoCrs              NUMBER;
  v_valorServicos               NUMBER;
  v_valorDeducoes               NUMBER;
  v_valorPis                    NUMBER;
  v_valorCofins                 NUMBER;
  v_valorInss                   NUMBER;
  v_valorIrrf                   NUMBER;
  v_valorCsll                   NUMBER;
  v_valorOutrasRetencoes        NUMBER;
  v_valorIssqn                  NUMBER;
  v_aliquotaIssqn               NUMBER;
  v_percentualCargaTributariaFe NUMBER;
  v_valorCargaTributariaFederal NUMBER;
  v_percentualCargaTributariaEs NUMBER;
  v_valorCargaTributariaEstad   NUMBER;
  v_percentualCargaTributariaMu NUMBER;
  v_valorCargaTributariaMunicip NUMBER;
  v_valorDescontoTotal          NUMBER;
  v_valorOutrasDespesasTotal    NUMBER;
  v_valorDescontoCondicionado   NUMBER;
  v_irrfIndenizacao             NUMBER;
  v_issRetido                   NUMBER;
  v_tributadoForaMunicipio      NUMBER;
  v_responsavelRetencao         NUMBER;
  v_listaServicos               NUMBER;
  v_cnae                        NUMBER;
  v_quantidade                  NUMBER;
  v_precoUnitario               NUMBER;
  v_codigoTributacaoMunicipio   VARCHAR(60);
  v_numeroProcesso              VARCHAR(60);
  v_codigoObra                  VARCHAR(60);
  v_art                         VARCHAR(60);
  v_descricaoServico            VARCHAR(4000);
  v_outrasInformacoes           VARCHAR(4000);
  v_formaPagamento              NUMBER;
  v_numeroParcelas              NUMBER;

BEGIN
  -- NÃO DESENVOLVIDO
  v_baseCalculoCrs              := 0;
  v_valorDeducoes               := 0;
  v_valorDescontoCondicionado   := 0;
  v_irrfIndenizacao             := 0;
  v_responsavelRetencao         := 0;
  v_formaPagamento              := 0;
  v_numeroParcelas              := 0;

  -- DOCUMENTO
  SELECT
    CASE
      WHEN munEst.versaoNFSe = '1.00'
      THEN TO_CHAR (a.dataEmissao, 'YYYY') || LPAD (a.documentoFiscal, 11, '0')
      ELSE TO_CHAR (a.documentoFiscal)
    END,
    a.serieFiscal,
    a.dataEmissao,
    a.municipioFatoGerador,
    a.valorServicos,
    a.valorDescontoTotal,
    a.valorOutrasDespesasTotal,
    COALESCE (SUBSTR( TRIM(
      COALESCE ((SELECT LISTAGG(UPPER(infCompl.descInformacaoComplementar), ' ')
        WITHIN GROUP (ORDER BY infCompl.sequencia)
        FROM MODOCFISCALXINFOCOMPLEMEN infCompl
        WHERE infCompl.idDocumentoFiscal = a.idDocumentoFiscal
        AND infCompl.geradoPeloSistema = 1
        AND infCompl.descInformacaoComplementar <> ' '),
        ' ')),1,4000),' '),
    COALESCE (docXServ.dataCompetencia, a.dataEmissao),
    FUNC_ADD_REMOVE_CARACT_ESPEC (obra.codigoObra),
    FUNC_ADD_REMOVE_CARACT_ESPEC (obra.art),
    FUNC_ADD_REMOVE_CARACT_ESPEC (docXServ.descricaoServico),
    FUNC_ADD_REMOVE_CARACT_ESPEC (pessEst.nomeRazaoSocial),
    pessEst.indicadorPessoa,
    CASE
      WHEN pessEst.cnpjCpfIdEstrangeiro <> ' '
      THEN pessEst.cnpjCpfIdEstrangeiro
      WHEN pessEst.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (pessEst.inscricaoMunicipal),
    CASE WHEN pessEst.regimeTributario IN ('1', '2') THEN 1 ELSE 2 END,
    endEst.municipio,
    endEst.pais,
    munEst.uf,
    munEst.tecnologiaNFSe,
    munEst.versaoNFSe,
    COALESCE (estXnfse.regimeEspecialTributacao, ' '),
    CASE WHEN estXnfse.incentivadorCultural = 1 THEN 1 ELSE 2 END,
    COALESCE (docXServ.intermediario, 0),
    CASE WHEN a.pessoa = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (pess.nomeRazaoSocial) END,
    CASE WHEN a.pessoa = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (pess.apelidoFantasia) END,
    pess.indicadorPessoa,
    CASE
      WHEN pess.cnpjCpfIdEstrangeiro <> ' '
      THEN pess.cnpjCpfIdEstrangeiro
      WHEN pess.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (pess.inscricaoEstadual),
    FUNC_ADD_REMOVE_CARACT_ESPEC (pess.inscricaoMunicipal),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.logradouro),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.numero),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.complemento),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.bairroDistrito),
    endPess.municipio,
    endPess.cep,
    endPess.pais,
    munPess.uf,
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.observacoes),
    CASE WHEN fonPess.idFonePessoa = 0 THEN ' ' ELSE fonPess.fone END,
    CASE WHEN emailPess.idEmailPessoa = 0 THEN ' ' ELSE emailPess.email END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (endEntr.logradouro),
    endEntr.municipio,
    FUNC_ADD_REMOVE_CARACT_ESPEC (munEntr.descricao),
    munEntr.uf,
    endEntr.pais,
    FUNC_ADD_REMOVE_CARACT_ESPEC (paisEntr.descricao),
    CASE WHEN COALESCE (docXServ.intermediario, 0) = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (interm.nomeRazaoSocial) END,
    interm.indicadorPessoa,
    CASE
      WHEN interm.cnpjCpfIdEstrangeiro <> ' '
      THEN interm.cnpjCpfIdEstrangeiro
      WHEN interm.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (interm.inscricaoMunicipal)
  INTO
    v_documentoFiscal,
    v_serieFiscal,
    v_dataEmissao,
    v_municipioFatoGerador,
    v_valorServicos,
    v_valorDescontoTotal,
    v_valorOutrasDespesasTotal,
    v_outrasInformacoes,
    v_dataCompetencia,
    v_codigoObra,
    v_art,
    v_descricaoServico,
    v_estab_nomeRazaoSocial,
    v_estab_indicadorPessoa,
    v_estab_cnpjCpfIdEstrangeiro,
    v_estab_inscricaoMunicipal,
    v_optanteSimplesNacional,
    v_estab_municipio,
    v_estab_pais,
    v_estab_uf,
    v_tecnologiaNFSe,
    v_versaoNFSe,
    v_regimeEspecialTributacao,
    v_incentivadorCultural,
    v_intermediario,
    v_pess_nomeRazaoSocial,
    v_pess_apelidoFantasia,
    v_pess_indicadorPessoa,
    v_pess_cnpjCpfIdEstrangeiro,
    v_pess_inscricaoEstadual,
    v_pess_inscricaoMunicipal,
    v_pess_logradouro,
    v_pess_numero,
    v_pess_complemento,
    v_pess_bairroDistrito,
    v_pess_municipio,
    v_pess_cep,
    v_pess_pais,
    v_pess_uf,
    v_pess_observacoesEndereco,
    v_pess_fone,
    v_pess_email,
    v_entr_logradouro,
    v_entr_municipio,
    v_entr_municipio_descricao,
    v_entr_uf,
    v_entr_pais,
    v_entr_pais_descricao,
    v_interm_nomeRazaoSocial,
    v_interm_indicadorPessoa,
    v_interm_cnpjCpfIdEstrangeiro,
    v_interm_inscricaoMunicipal
  FROM MODOCUMENTOSFISCAIS a
  LEFT JOIN MODOCFISCALXSERVICO docXServ
  ON docXServ.idDocumentoFiscal = a.idDocumentoFiscal
  JOIN PAOBRAS obra
  ON obra.idObra = COALESCE (docXServ.idObra, 0)
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = a.estabelecimento
  LEFT JOIN PAESTABELECIMENTOXNFSE estXnfse
  ON estXnfse.estabelecimento = a.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAENDERECOSPESSOA endEst
  ON endEst.enderecoPessoa = COALESCE ((
    SELECT MAX (end.enderecoPessoa)
    FROM CAENDERECOSPESSOA end
    WHERE end.pessoa = est.pessoaEstabelecimento
    AND end.ativo = 1
    AND end.principal = 1), 0)
  JOIN SIMUNICIPIOS munEst
  ON munEst.municipio = endEst.municipio
  JOIN CAPESSOAS pess
  ON pess.pessoa = a.pessoa
  JOIN CAENDERECOSPESSOA endPess
  ON endPess.enderecoPessoa = COALESCE ((
    SELECT MAX (end.enderecoPessoa)
    FROM CAENDERECOSPESSOA end
    WHERE end.pessoa = a.pessoa
    AND end.ativo = 1
    AND end.principal = 1), 0)
  JOIN SIMUNICIPIOS munPess
  ON munPess.municipio = endPess.municipio
  JOIN CAFONESPESSOA fonPess
  ON fonPess.idFonePessoa = COALESCE ((
    SELECT MAX (fon.idFonePessoa)
    FROM CAFONESPESSOA fon
    WHERE fon.pessoa = a.pessoa
    AND fon.ativo = 1
    AND fon.principal = 1), 0)
  JOIN CAEMAILSPESSOA emailPess
  ON emailPess.idEmailPessoa = COALESCE ((
    SELECT MAX (email.idEmailPessoa)
    FROM CAEMAILSPESSOA email
    WHERE email.pessoa = a.pessoa
    AND email.ativo = 1
    AND email.principal = 1), 0)
  JOIN CAENDERECOSPESSOA endEntr
  ON endEntr.enderecoPessoa = a.enderecoEntregaPessoa
  JOIN SIMUNICIPIOS munEntr
  ON munEntr.municipio = endEntr.municipio
  JOIN SIPAISES paisEntr
  ON paisEntr.pais = endEntr.pais
  JOIN CAPESSOAS interm
  ON interm.pessoa = COALESCE (docXServ.intermediario, 0)
  WHERE a.idDocumentoFiscal = p_idDocumentoFiscal;

  -- ITENS
  SELECT
    COALESCE (SUM (a.quantidade), 0),
    COALESCE (MAX (a.precoUnitario), 0),
    COALESCE (MAX (a.indicadorIssqn), ' '),
    COALESCE (SUM (a.valorIssqn), 0),
    COALESCE (MAX (a.aliquotaIssqn), 0),
    CASE WHEN COALESCE (MAX (a.retidoIssqn), 0) = 1 THEN 1 ELSE 2 END,
    CASE WHEN COALESCE (MAX (a.tributadoForaMunicipio), 0) = 1 THEN 1 ELSE 2 END,
    CASE WHEN COALESCE (MAX (a.incentivoFiscal), 0) = 1 THEN 1 ELSE 2 END,
    COALESCE (MAX (a.listaServicos), 0),
    COALESCE (MAX (a.cnae), 0),
    COALESCE (MAX (servMun.codigoServicoMunicipio), ' '),
    COALESCE (MAX (a.numeroProcessoAdministrativo), ' '),
    COALESCE (SUM (a.valorRetInss), 0),
    COALESCE (SUM (a.valorRetIrrf), 0),
    COALESCE (SUM (a.valorRetPis), 0),
    COALESCE (SUM (a.valorRetCofins), 0),
    COALESCE (SUM (a.valorRetCsll), 0),
    COALESCE (SUM (a.valorRetOutros), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpFederais), 0),
    COALESCE (SUM (a.valorEstimadoImpFederais), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpEstaduais), 0),
    COALESCE (SUM (a.valorEstimadoImpEstaduais), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpMunicipais), 0),
    COALESCE (SUM (a.valorEstimadoImpMunicipais), 0),
    CASE
      WHEN v_descricaoServico = ' '
      THEN FUNC_ADD_REMOVE_CARACT_ESPEC (COALESCE (MAX (
        CASE
          WHEN a.quantidadeConvertida = 1
            OR v_tecnologiaNFSe = 2
          THEN ''
          ELSE TO_CHAR(a.quantidadeConvertida)
            || ' '
            || a.unidadeMedidaConversao
            || ' X '
        END
        || TRIM (TRIM (gradProd.descricaoImpressa
        || ' '
        || a.observacoes)
        || CASE
             WHEN v_versaoNFSe = '1.00'
             THEN ' |||| Trib. Aprox.: R$ ' || TO_CHAR (a.valorEstimadoImpFederais, 'FM9999999999990D00') || ' Federal e R$ ' || TO_CHAR (a.valorEstimadoImpMunicipais, 'FM9999999999990D00') || ' Municipal'
             ELSE ''
           END)), ' '))
      ELSE v_descricaoServico
    END
  INTO
    v_quantidade,
    v_precoUnitario,
    v_indicadorIssqn,
    v_valorIssqn,
    v_aliquotaIssqn,
    v_issRetido,
    v_tributadoForaMunicipio,
    v_incentivoFiscal,
    v_listaServicos,
    v_cnae,
    v_codigoTributacaoMunicipio,
    v_numeroProcesso,
    v_valorInss,
    v_valorIrrf,
    v_valorPis,
    v_valorCofins,
    v_valorCsll,
    v_valorOutrasRetencoes,
    v_percentualCargaTributariaFe,
    v_valorCargaTributariaFederal,
    v_percentualCargaTributariaEs,
    v_valorCargaTributariaEstad,
    v_percentualCargaTributariaMu,
    v_valorCargaTributariaMunicip,
    v_descricaoServico
  FROM MODOCFISCALXITENS a
  JOIN CAGRADESPRODUTO gradProd
  ON gradProd.gradeProduto = a.gradeProduto
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  JOIN PASERVICOSMUNICIPIOS servMun
  ON servMun.idServicoMunicipio = a.idServicoMunicipio
  WHERE a.idDocumentoFiscal = p_idDocumentoFiscal
  AND a.cancelado = 0;

  IF v_tecnologiaNFSe = 2 AND v_estab_municipio <> 4309100 THEN
    -- NFS-e
    v_xml := '<nfse id="rps_' || v_documentoFiscal || '">'
  || '<rps>'
    || FUNC_ADD_TAG_XML ('nro_recibo_provisorio', v_documentoFiscal)
    || FUNC_ADD_TAG_XML ('serie_recibo_provisorio', v_serieFiscal)
    || FUNC_ADD_TAG_XML ('data_emissao_recibo_provisorio', CASE WHEN v_dataEmissao IS NULL THEN '00/00/0000' ELSE TO_CHAR (v_dataEmissao, 'DD/MM/YYYY') END)
    || FUNC_ADD_TAG_XML ('hora_emissao_recibo_provisorio', CASE WHEN v_dataEmissao IS NULL THEN '00:00:00' ELSE TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
  || '</rps>';

    -- NF
    v_xml := v_xml
  || '<nf>'
    || FUNC_ADD_TAG_XML ('valor_total', TO_CHAR (v_valorServicos - v_valorDescontoTotal + v_valorOutrasDespesasTotal, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_desconto', TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_ir', TO_CHAR (v_valorIrrf, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_inss', TO_CHAR (v_valorInss, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_contribuicao_social', TO_CHAR (v_valorCsll, 'FM9999999999990D00'))
    || '<valor_rps>0,00</valor_rps>'
    || FUNC_ADD_TAG_XML ('valor_pis', TO_CHAR (v_valorPis, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_cofins', TO_CHAR (v_valorCofins, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('observacao', v_outrasInformacoes)
  || '</nf>';

    -- Prestador
    v_xml := v_xml
  || '<prestador>'
    || FUNC_ADD_TAG_XML ('cpfcnpj', v_estab_cnpjCpfIdEstrangeiro)
    || FUNC_ADD_TAG_XML ('cidade', TO_CHAR (v_estab_municipio))
  || '</prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
  || '<tomador>'
    || FUNC_ADD_TAG_XML ('tipo', v_pess_indicadorPessoa)
    || FUNC_ADD_TAG_XML ('cpfcnpj', v_pess_cnpjCpfIdEstrangeiro)
    || FUNC_ADD_TAG_XML ('ie', v_pess_inscricaoEstadual)
    || FUNC_ADD_TAG_XML ('nome_razao_social', v_pess_nomeRazaoSocial)
    || FUNC_ADD_TAG_XML ('sobrenome_nome_fantasia', v_pess_apelidoFantasia)
    || FUNC_ADD_TAG_XML ('logradouro', v_pess_logradouro)
    || FUNC_ADD_TAG_XML ('email', v_pess_email)
    || FUNC_ADD_TAG_XML ('numero_residencia', v_pess_numero)
    || FUNC_ADD_TAG_XML ('complemento', v_pess_complemento)
    || FUNC_ADD_TAG_XML ('ponto_referencia', v_pess_observacoesEndereco)
    || FUNC_ADD_TAG_XML ('bairro', v_pess_bairroDistrito)
    || FUNC_ADD_TAG_XML ('cidade', TO_CHAR (v_pess_municipio))
    || FUNC_ADD_TAG_XML ('cep', LPAD (v_pess_cep, 8 ,'0'))
    || '<ddd_fone_comercial/>'
    || FUNC_ADD_TAG_XML ('fone_comercial', v_pess_fone)
    || '<ddd_fone_residencial/>'
    || '<fone_residencial/>'
    || '<ddd_fax/>'
    || '<fone_fax/>'
  || '</tomador>';

    -- Itens
    v_xml := v_xml
  || '<itens>'
    || '<lista>'
      || FUNC_ADD_TAG_XML ('codigo_local_prestacao_servico', TO_CHAR (v_municipioFatoGerador))
      || FUNC_ADD_TAG_XML ('codigo_item_lista_servico', TO_CHAR (v_listaServicos))
      || FUNC_ADD_TAG_XML ('descritivo', v_descricaoServico)
      || FUNC_ADD_TAG_XML ('aliquota_item_lista_servico', TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('situacao_tributaria', '0')
      || FUNC_ADD_TAG_XML ('valor_tributavel', TO_CHAR (v_valorServicos - v_valorDescontoTotal + v_valorOutrasDespesasTotal, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('valor_deducao', TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('valor_issrf', CASE WHEN v_issRetido = 1 THEN  TO_CHAR (v_valorIssqn, 'FM9999999999990D00') ELSE '0,00' END)
      || FUNC_ADD_TAG_XML ('tributa_municipio_prestador', CASE WHEN v_tributadoForaMunicipio = 1 THEN 'N' ELSE 'S' END)
      || '<unidade_codigo/>'
      || FUNC_ADD_TAG_XML ('unidade_quantidade', TO_CHAR (v_quantidade, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('unidade_valor_unitario', TO_CHAR (v_precoUnitario - (v_valorDescontoTotal / v_quantidade) + (v_valorOutrasDespesasTotal / v_quantidade), 'FM9999999999990D00'))
    || '</lista>'
  || '</itens>'
  -- Assinar Aqui
|| '</nfse>';

  ELSIF v_versaoNFSe = '1.00' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">'
      || '<LoteRps Id="lote" versao="1.00">'
        || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
        || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
        || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
        || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')
        || '<ListaRps>'
          || '<Rps>'
            || '<InfRps Id="rps:' || v_documentoFiscal || TRIM(v_serieFiscal) || '">'
              || '<IdentificacaoRps>'
                || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
                || FUNC_ADD_TAG_XML ('Serie', v_serieFiscal)
                || FUNC_ADD_TAG_XML ('Tipo', '1')
              || '</IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
              || FUNC_ADD_TAG_XML ('NaturezaOperacao', v_indicadorIssqn)
              || CASE WHEN v_regimeEspecialTributacao = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao) END
              || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
              || FUNC_ADD_TAG_XML ('IncentivadorCultural', TO_CHAR (v_incentivadorCultural))
              || FUNC_ADD_TAG_XML ('Status', '1');

    -- Serviço
    v_xml := v_xml
              || '<Servico>'
                || '<Valores>'
                  || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
                  || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
                || '</Valores>'
                || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos,4,'0'),1,2) || '.' || SUBSTR (LPAD (v_listaServicos,4,'0'),3,2))
                || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
                || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
              || '</Servico>';

  -- Prestador (Estabelecimento)
  v_xml := v_xml
              || '<Prestador>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
              || '</Prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
              || '<Tomador>'
                || '<IdentificacaoTomador>'
                  || '<CpfCnpj>'
                    || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
                  || '</CpfCnpj>'
                  || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
                || '</IdentificacaoTomador>'
                || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
                || '<Endereco>'
                  || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
                  || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
                  || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
                  || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
                  || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
                  || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
                  || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
                || '</Endereco>'
              || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
              || '<IntermediarioServico>'
                || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
              || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_codigoObra <> ' ' THEN
      v_xml := v_xml
              || '<ConstrucaoCivil>'
                || FUNC_ADD_TAG_XML ('CodigoObra', v_codigoObra)
                || FUNC_ADD_TAG_XML ('Art', v_art)
              || '</ConstrucaoCivil>';
    END IF;

    -- Outros
    v_xml := v_xml
            || '</InfRps>'
            -- Assinar aqui
          || '</Rps>'
        || '</ListaRps>'
      || '</LoteRps>'
      -- Assinar aqui
    || '</EnviarLoteRpsEnvio>';
    
  ELSIF v_versaoNFSe = '2.01' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsEnvio xmlns="http://nfse.abase.com.br/nfse.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
  || '<LoteRps Id="1'
    || TO_CHAR (v_dataEmissao, 'YYYY')
    || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
    || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
    || '" versao="2.01">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || '<QuantidadeRps>1</QuantidadeRps>'
    || '<ListaRps>'
      || '<Rps>'
          || '<InfDeclaracaoPrestacaoServico Id="1'
            || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
            || LPAD (p_loteWebService, 14, '0')
            || '">'          
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || '<Serie>1</Serie>'
              || '<Tipo>1</Tipo>'
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

    -- Serviço
    v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

    -- Prestador (Estabelecimento)
    v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
          || '</Prestador>';

    -- Tomador
    v_xml := v_xml
          || '<Tomador>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
            || '</Endereco>'
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '<Contato>' END
              || CASE WHEN v_pess_fone = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Telefone', v_pess_fone) END
              || CASE WHEN v_pess_email = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Email', v_pess_email) END
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '</Contato>' END
          || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
          || '<IntermediarioServico>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
          || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_cnae = '4322301' THEN
      v_xml := v_xml
          || '<dadosDaObra>'
            || FUNC_ADD_TAG_XML ('xLogObra', v_entr_logradouro)
            || FUNC_ADD_TAG_XML ('cCidadeObra', TO_CHAR (v_entr_municipio))
            || FUNC_ADD_TAG_XML ('xCidadeObra', v_entr_municipio_descricao)
            || FUNC_ADD_TAG_XML ('xUfObra', v_entr_uf)
           || FUNC_ADD_TAG_XML ('cPaisObra', v_entr_pais)
            || FUNC_ADD_TAG_XML ('xPaisObra', v_entr_pais_descricao)
          || '</dadosDaObra>';
    END IF;

    -- Outros
    v_xml := v_xml
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
  -- Assinar aqui
|| '</EnviarLoteRpsEnvio>';

  ELSIF v_versaoNFSe = '2.03' THEN
    -- NFS-e
    v_xml := CASE WHEN v_tecnologiaNFSe = 3 THEN '<EnviarLoteRpsSincronoEnvio>' ELSE '<EnviarLoteRpsEnvio>' END
  || '<LoteRps Id="'
  || CASE WHEN v_dataEmissao IS NULL THEN '00000000' ELSE TO_CHAR (v_dataEmissao, 'YYYYMMDD') END
  || LPAD (p_loteWebService, 4, '0')
  || '" versao="2.03">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || '<QuantidadeRps>1</QuantidadeRps>'
    || '<ListaRps>'
      || '<Rps>'
        || '<InfDeclaracaoPrestacaoServico'
          || CASE
               WHEN v_tecnologiaNFSe = 3
               THEN ' Id="' || CASE WHEN v_dataEmissao IS NULL THEN '00000000' ELSE TO_CHAR (v_dataEmissao, 'YYYYMMDD') END || LPAD (p_loteWebService, 4, '0') || '"'
               ELSE ''
             END || '>'
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || FUNC_ADD_TAG_XML ('Serie', CASE WHEN v_tecnologiaNFSe = 3 THEN 'RPS' ELSE '0' END)
              || FUNC_ADD_TAG_XML ('Tipo', '1')
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

    -- Serviço
    v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
            || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
            || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

    -- Prestador
    v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
          || '</Prestador>';

    -- Tomador
    v_xml := v_xml
          || '<Tomador>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || CASE WHEN v_tecnologiaNFSe = 3 THEN FUNC_ADD_TAG_XML ('CodigoPais', v_pess_pais) ELSE '' END
              || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
            || '</Endereco>'
            || CASE WHEN v_tecnologiaNFSe = 3 THEN '' ELSE '<Contato></Contato>' END
          || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
          || '<IntermediarioServico>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
          || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_cnae = '4322301' THEN
      v_xml := v_xml
          || '<dadosDaObra>'
            || FUNC_ADD_TAG_XML ('xLogObra', v_entr_logradouro)
            || FUNC_ADD_TAG_XML ('cCidadeObra', TO_CHAR (v_entr_municipio))
            || FUNC_ADD_TAG_XML ('xCidadeObra', v_entr_municipio_descricao)
            || FUNC_ADD_TAG_XML ('xUfObra', v_entr_uf)
            || FUNC_ADD_TAG_XML ('cPaisObra', v_entr_pais)
            || FUNC_ADD_TAG_XML ('xPaisObra', v_entr_pais_descricao)
          || '</dadosDaObra>';
    END IF;

    -- Outros
    v_xml := v_xml
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
  -- Assinar aqui
|| CASE WHEN v_tecnologiaNFSe = 3 THEN '</EnviarLoteRpsSincronoEnvio>' ELSE '</EnviarLoteRpsEnvio>' END;
  ELSIF v_versaoNFSe = '2.04' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsSincronoEnvio>'
  || '<LoteRps Id="1'
  || TO_CHAR (v_dataEmissao, 'YYYY')
  || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
  || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
  || '" versao="2.04">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<Prestador>'
      || '<CpfCnpj>'
        || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
      || '</CpfCnpj>'
    || '</Prestador>'
    || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')    
    || '<ListaRps>'
      || '<Rps>'
        || '<InfDeclaracaoPrestacaoServico Id="1'
          || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
          || LPAD (p_loteWebService, 14, '0')
          || '">'          
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || FUNC_ADD_TAG_XML ('Serie', '1')
              || FUNC_ADD_TAG_XML ('Tipo', '1')
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

  -- Serviço
  v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
            || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
            || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

  -- Prestador (Estabelecimento)
  v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
          || '</Prestador>';

  -- Tomador (Cliente)
  v_xml := v_xml
          || '<TomadorServico>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || FUNC_ADD_TAG_XML ('Numero', v_pess_numero)
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito)
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
            || '</Endereco>'
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '<Contato>' END
              || CASE WHEN v_pess_fone = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Telefone', v_pess_fone) END
              || CASE WHEN v_pess_email = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Email', v_pess_email) END
            || CASE WHEN v_pess_fone = ' ' AND v_pess_email = ' ' THEN '' ELSE '</Contato>' END
          || '</TomadorServico>';

  -- Outros
  v_xml := v_xml
          || FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao)
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
|| '</EnviarLoteRpsSincronoEnvio>';

  ELSE
    -- NFS-e
    v_xml := '<EnviarLoteRpsSincronoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">'
  || '<LoteRps Id="1'
  || TO_CHAR (v_dataEmissao, 'YYYY')
  || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
  || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
  || '" versao="20.01">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')
    || '<ListaRps>'
      || '<Rps>'
        || '<tcDeclaracaoPrestacaoServico>'
          || '<InfDeclaracaoPrestacaoServico Id="1'
            || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
            || LPAD (p_loteWebService, 14, '0')
            || '">'          
            || '<Rps>'
              || '<IdentificacaoRps>'
                || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
                || FUNC_ADD_TAG_XML ('Serie', 'UNICA')
                || FUNC_ADD_TAG_XML ('Tipo', '1')
              || '</IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
              || FUNC_ADD_TAG_XML ('Status', '1')
            || '</Rps>'
            || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataCompetencia, 'HH24:MI:SS') END)
            || FUNC_ADD_TAG_XML ('IdCidade', TO_CHAR (v_estab_municipio));

    -- Serviço
    v_xml := v_xml
            || '<Servico>'
              || '<tcDadosServico>'
                || '<Valores>'
                  || FUNC_ADD_TAG_XML ('BaseCalculoCRS', REPLACE (TO_CHAR (v_baseCalculoCrs, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos + v_valorOutrasDespesasTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('IrrfIndenizacao', TO_CHAR (v_irrfIndenizacao))
                || '</Valores>'
                || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
                || FUNC_ADD_TAG_XML ('ResponsavelRetencao', TO_CHAR (v_responsavelRetencao))
                || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
                || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
                || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
                || FUNC_ADD_TAG_XML ('Discriminacao', v_descricaoServico)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
                || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
                || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
                || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
                || FUNC_ADD_TAG_XML ('NumeroProcesso', v_numeroProcesso)
              || '</tcDadosServico>'
            || '</Servico>';

    -- Prestador (Estabelecimento)
    v_xml := v_xml
            || '<Prestador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_estab_nomeRazaoSocial)
              || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
            || '</Prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
            || '<Tomador>'
              || '<IdentificacaoTomador>'
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal)
              || '</IdentificacaoTomador>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
              || '<Endereco>'
                || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
                || FUNC_ADD_TAG_XML ('Numero', v_pess_numero)
                || FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento)
                || FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
                || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
                || FUNC_ADD_TAG_XML ('CodigoPais', v_pess_pais)
                || FUNC_ADD_TAG_XML ('Cep', LPAD (v_pess_cep, 8 ,'0'))
              || '</Endereco>'
              || '<Contato>'
                || FUNC_ADD_TAG_XML ('Telefone', v_pess_fone)
                || FUNC_ADD_TAG_XML ('Email', v_pess_email)
              || '</Contato>'
            || '</Tomador>';

    IF v_intermediario <> 0 THEN
      -- Intermediário
      v_xml := v_xml
            || '<Intermediario>'
              || '<IdentificacaoIntermediario>'
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
              || '</IdentificacaoIntermediario>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '</Intermediario>';
    END IF;

    -- Construção Civil
    v_xml := v_xml
            || '<ConstrucaoCivil>'
              || FUNC_ADD_TAG_XML ('CodigoObra', v_codigoObra)
              || FUNC_ADD_TAG_XML ('Art', v_art)
            || '</ConstrucaoCivil>';

    -- Outros
    v_xml := v_xml
            || FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao)
            || FUNC_ADD_TAG_XML ('NaturezaOperacao', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
            || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributaria', TO_CHAR (v_percentualCargaTributariaFe))
            || FUNC_ADD_TAG_XML ('ValorCargaTributaria', TO_CHAR (v_valorCargaTributariaFederal))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributariaEstadual', TO_CHAR (v_percentualCargaTributariaEs))
            || FUNC_ADD_TAG_XML ('ValorCargaTributariaEstadual', TO_CHAR (v_valorCargaTributariaEstad))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributariaMunicipal', TO_CHAR (v_percentualCargaTributariaMu))
            || FUNC_ADD_TAG_XML ('ValorCargaTributariaMunicipal', TO_CHAR (v_valorCargaTributariaMunicip))
            || FUNC_ADD_TAG_XML ('OutrasInformacoes', v_outrasInformacoes)
            || FUNC_ADD_TAG_XML ('SiglaUF', v_estab_uf)
            || FUNC_ADD_TAG_XML ('IdCidade', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('FormaPagamento', v_formaPagamento)
--                    <!--identificação da forma de pagamento-->
--                        <!--0-Não identificada-->
--                        <!--1-A Vista-->
--                        <!--2-Apresentação-->
--                        <!--3-A Prazo-->
--                        <!--4-Cartão de Débito-->
--                        <!--5-Cartão de Crédito-->
            || FUNC_ADD_TAG_XML ('NumeroParcelas', v_numeroParcelas)
--                    <!--Caso não houver parcelamento informar o 0 e não colocar as tags abaixo-->
--            || '<Parcelamento>'
--              || '<Parcelas>'
--                || '<tcParcela>'
--                  || '<Numero>1</Numero>'
--                  || '<Valor>20.00</Valor>'
--                  || '<DataVencimento>2019-05-02T00:00:00</DataVencimento>'
--                || '</tcParcela>'
--                || '<tcParcela>'
--                  || '<Numero>2</Numero>'
--                  || '<Valor>20.00</Valor>'
--                  || '<DataVencimento>2019-06-02T00:00:00</DataVencimento>'
--                || '</tcParcela>'
--              || '</Parcelas>'
--            || '</Parcelamento>'
          || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
        || '</tcDeclaracaoPrestacaoServico>'
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
|| '</EnviarLoteRpsSincronoEnvio>';

  END IF;
  RETURN v_xml;
END;

/

INSERT INTO SIPERSONALIZACOESCAMPOS (personalizacaoCampo, ordenacao, descricao, ativo, subcategoriaPersonalCampo, tipoCampo, mascara, exibirCampo, tipoArquivo, alteraTipoCampo, alteraExibirCampo, visivelSugestao, modificavelSugestao, obrigatorioSugestao, nomeCampoSugestao, conteudoSugestao, tabelaSistema, observacoes) VALUES (244, 30004003, 'Equipe Técnica (Atividades Previstas)', 1, 30004, 'N', '6', 'P', 0, 0, 1, 1, 1, 1, 'Equipe Técnica', '0', 'PAEQUIPESTECNICAS', ' ');

COMMIT;

UPDATE SIVERSOESSISTEMA SET dataLiberacaoVersao = TO_DATE ('30/07/2024', 'DD/MM/YYYY'), dataAtualizacaoVersao =  SYSDATE, observacoes = 'BETA 4' WHERE idVersaoSistema = 2024001003;

COMMIT;

-- FIM BETA 4 - 30/07/2024

INSERT INTO SIVERSOESSISTEMA (idVersaoSistema, versaoAplicativo, dataLiberacaoVersao, possuiConversaoTabelas, atualizada, dataAtualizacaoVersao, observacoes) VALUES (2024001003, '2024.1.3', TO_DATE ('30/07/2024', 'DD/MM/YYYY'), 1, 1, sysdate, 'BETA 4');

COMMIT;
