private TPRODUTO ObterProduto(Item item, Parametros parametros)
        {
            var      codprd  = $"1.{ ("00000" + item.Cod_Produto).Right(5) }";
            TPRODUTO produto = _produtoApp.BuscarPorCodigo(codprd);

            if (produto != null)
            {
                return(produto);
            }

            if (parametros.ImportarProdutos)
            {
                int idprd = _autoIncrementoApp.ReservarValorAutoIncremento(0, TPRODUTO.CODAUTOINC, 1);

                produto.CODCOLPRD      = parametros.CodigoColigada;
                produto.CODIGOPRD      = codprd;
                produto.CODIGOAUXILIAR = item.Cod_Produto;
                produto.CODIGOREDUZIDO = item.Cod_Produto;
                produto.NOMEFANTASIA   = item.Campo_Extra.FirstOrDefault(c => c.Nome == "DESCPROD").Valor;
                produto.IDPRD          = idprd;
                produto.TIPO           = "P";
                produto.ULTIMONIVEL    = 1;

                TTBORCAMENTO natureza = _naturezaOrcamentariaApp.BuscarPorCodigoGrupo(parametros.CodigoColigada,
                                                                                      item.Campo_Extra.FirstOrDefault(c => c.Nome == "GRUPOPROD").Valor);

                produto.TPRODUTODEF.Add(new TPRODUTODEF()
                {
                    CODCOLIGADA       = parametros.CodigoColigada,
                    IDPRD             = idprd,
                    CODUNDCOMPRA      = "UN", /*TODO: item.Campo_Extra.FirstOrDefault(c => c.Nome == "CODUND").Valor*/
                    CODUNDVENDA       = "UN", /*TODO: item.Campo_Extra.FirstOrDefault(c => c.Nome == "CODUND").Valor*/
                    CODUNDCONTROLE    = "UN", /*TODO: item.Campo_Extra.FirstOrDefault(c => c.Nome == "CODUND").Valor*/
                    NUMNOFABRIC       = item.Cod_Produto,
                    CODTB1FAT         = item.Campo_Extra.FirstOrDefault(c => c.Nome == "GRUPOPROD").Valor,
                    CODCOLTBORCAMENTO = natureza?.CODCOLIGADA,
                    CODTBORCAMENTO    = natureza?.CODTBORCAMENTO
                });

                return(_produtoApp.Add(produto));
            }
            else
            {
                throw new Exception($"Produto {item.Cod_Produto} - {item.Campo_Extra.FirstOrDefault(c => c.Nome == "DESCPROD").Valor} não encontrado na base do RM.");
            }
        }
        public TITMMOV ObterItemMovimento(ref TMOV movimento, ItemMovimento item, int sequencial, Parametros parametros, ETipoImportacao tipo)
        {
            TITMMOV  itemMovimento = new TITMMOV();
            TPRODUTO produto       = ProdutoApp.ObterProduto(item, parametros, tipo);

            itemMovimento.CODCOLIGADA        = movimento.CODCOLIGADA;
            itemMovimento.IDMOV              = movimento.IDMOV;
            itemMovimento.CODFILIAL          = movimento.CODFILIAL;
            itemMovimento.CODCCUSTO          = movimento.CODCCUSTO;
            itemMovimento.CODLOC             = movimento.CODLOC;
            itemMovimento.NSEQITMMOV         = sequencial;
            itemMovimento.IDPRD              = produto.IDPRD;
            itemMovimento.PRECOUNITARIO      = item.Preco;
            itemMovimento.QUANTIDADE         = 1;
            itemMovimento.QUANTIDADEORIGINAL = 1;
            itemMovimento.QUANTIDADETOTAL    = 1;
            itemMovimento.QUANTIDADEARECEBER = 1;
            itemMovimento.VALORTOTALITEM     = item.ValorTotal;
            itemMovimento.VALORDEDUCAO       = item.ValorDeducao;
            itemMovimento.INTEGRAAPLICACAO   = "0";
            itemMovimento.CODUND             = "UN";
            itemMovimento.CODMUNSERVICO      = movimento.CODMUNSERVICO;
            itemMovimento.CODETDMUNSERV      = movimento.CODETDMUNSERV;
            itemMovimento.IDNAT              = movimento.IDNAT;

            foreach (var tributo in item.Tributos)
            {
                movimento.TTRBMOV.Add(new TTRBMOV()
                {
                    CODCOLIGADA            = item.Coligada,
                    IDMOV                  = Convert.ToInt32(movimento.IDMOV),
                    NSEQITMMOV             = item.Sequencial,
                    CODTRB                 = tributo.Codigo,
                    CODTRBBASE             = tributo.Codigo,
                    BASEDECALCULO          = tributo.BaseCalculo,
                    BASEDECALCULOCALCULADA = tributo.BaseCalculo,
                    BASECHEIA              = tributo.BaseCalculo,
                    ALIQUOTA               = tributo.Aliquota,
                    VALOR                  = tributo.Valor,
                    EDITADO                = 1
                });
            }

            return(itemMovimento);
        }
        private TITMMOV ObterItemMovimento(TMOV movimento, Item item, int sequencial, Parametros parametros)
        {
            TITMMOV  itemMovimento = new TITMMOV();
            TPRODUTO produto       = ObterProduto(item, parametros);

            itemMovimento.CODCOLIGADA        = movimento.CODCOLIGADA;
            itemMovimento.IDMOV              = movimento.IDMOV;
            itemMovimento.CODFILIAL          = movimento.CODFILIAL;
            itemMovimento.CODCCUSTO          = movimento.CODCCUSTO;
            itemMovimento.CODLOC             = movimento.CODLOC;
            itemMovimento.NSEQITMMOV         = sequencial;
            itemMovimento.IDPRD              = produto.IDPRD;
            itemMovimento.PRECOUNITARIO      = item.Resposta.Preco_Unitario;
            itemMovimento.QUANTIDADE         = item.Quantidade;
            itemMovimento.QUANTIDADEORIGINAL = item.Quantidade;
            itemMovimento.QUANTIDADETOTAL    = item.Quantidade;
            itemMovimento.QUANTIDADEARECEBER = item.Quantidade;
            itemMovimento.VALORTOTALITEM     = item.Resposta.Preco_Total;
            itemMovimento.INTEGRAAPLICACAO   = "0";
            itemMovimento.CODUND             = produto.TPRODUTODEF.FirstOrDefault(d => d.CODCOLIGADA == parametros.CodigoColigada)?.CODUNDCOMPRA;
            itemMovimento.CODCOLTBORCAMENTO  = produto.TPRODUTODEF.FirstOrDefault(d => d.CODCOLIGADA == parametros.CodigoColigada)?.CODCOLTBORCAMENTO;
            itemMovimento.CODTBORCAMENTO     = produto.TPRODUTODEF.FirstOrDefault(d => d.CODCOLIGADA == parametros.CodigoColigada)?.CODTBORCAMENTO;
            return(itemMovimento);
        }