private ProducaoCarvaoVegetal ObterHistorico(int id, BancoDeDados banco = null, string tid = null, bool simplificado = false)
        {
            ProducaoCarvaoVegetal caracterizacao = new ProducaoCarvaoVegetal();
            int hst = 0;

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Produção de carvão vegetal

                Comando comando = bancoDeDados.CriarComando(@"select c.id, c.empreendimento_id, c.atividade_id, c.numero_fornos, c.geometria_coord_atv_x,
															c.geometria_coord_atv_y, c.geometria_id, c.geometria_tipo, c.tid from {0}hst_crt_prod_carvao_vegetal c 
															where c.caracterizacao = :id and c.tid = :tid"                                                            , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", id, DbType.Int32);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, tid);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    if (reader.Read())
                    {
                        hst = Convert.ToInt32(reader["id"]);

                        caracterizacao.Id = id;
                        caracterizacao.EmpreendimentoId         = Convert.ToInt32(reader["empreendimento_id"]);
                        caracterizacao.Atividade                = Convert.ToInt32(reader["atividade_id"]);
                        caracterizacao.NumeroFornos             = reader["numero_fornos"].ToString();
                        caracterizacao.CoordenadaAtividade.Id   = Convert.ToInt32(reader["geometria_id"]);
                        caracterizacao.CoordenadaAtividade.Tipo = Convert.ToInt32(reader["geometria_tipo"]);
                        caracterizacao.Tid = reader["tid"].ToString();

                        if (reader["geometria_coord_atv_x"] != null && !Convert.IsDBNull(reader["geometria_coord_atv_x"]))
                        {
                            caracterizacao.CoordenadaAtividade.CoordX = Convert.ToDecimal(reader["geometria_coord_atv_x"]);
                        }

                        if (reader["geometria_coord_atv_y"] != null && !Convert.IsDBNull(reader["geometria_coord_atv_y"]))
                        {
                            caracterizacao.CoordenadaAtividade.CoordY = Convert.ToDecimal(reader["geometria_coord_atv_y"]);
                        }
                    }

                    reader.Close();
                }

                #endregion

                if (caracterizacao.Id <= 0 || simplificado)
                {
                    return(caracterizacao);
                }

                #region Fornos

                comando = bancoDeDados.CriarComando(@"select s.forno id, s.identificador, s.volume, s.tid 
													from {0}hst_crt_prod_carvao_veg_forno s
													where s.id_hst = :id_hst order by s.identificador"                                                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("id_hst", hst, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    Forno fornos = null;

                    while (reader.Read())
                    {
                        fornos               = new Forno();
                        fornos.Id            = Convert.ToInt32(reader["id"]);
                        fornos.Identificador = Convert.ToInt32(reader["identificador"]);
                        fornos.Volume        = reader["volume"].ToString();
                        fornos.Tid           = reader["tid"].ToString();

                        caracterizacao.Fornos.Add(fornos);
                    }

                    reader.Close();
                }

                #endregion

                #region Materias-Prima Florestal Consumida

                comando = bancoDeDados.CriarComando(@"select m.materia_prima id, m.materia_prima_tipo, lm.texto materia_prima_tipo_texto, 
													m.unidade, lu.texto unidade_texto, m.quantidade, m.tid 
													from {0}hst_crt_prod_carvao_v_mat_fl_c m, {0}lov_crt_prod_carv_veg_mat_pr_c lm, {0}lov_crt_unidade_medida lu
													where m.id_hst = :id_hst and lm.id = m.materia_prima_tipo and lu.id = m.unidade order by m.materia_prima"                                                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("id_hst", hst, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    MateriaPrima materia = null;

                    while (reader.Read())
                    {
                        materia    = new MateriaPrima();
                        materia.Id = Convert.ToInt32(reader["id"]);
                        materia.MateriaPrimaConsumida      = Convert.ToInt32(reader["materia_prima_tipo"]);
                        materia.MateriaPrimaConsumidaTexto = reader["materia_prima_tipo_texto"].ToString();
                        materia.Unidade      = Convert.ToInt32(reader["unidade"]);
                        materia.UnidadeTexto = reader["unidade_texto"].ToString();
                        materia.Quantidade   = reader["quantidade"].ToString();
                        materia.Tid          = reader["tid"].ToString();

                        caracterizacao.MateriasPrimasFlorestais.Add(materia);
                    }

                    reader.Close();
                }

                #endregion
            }

            return(caracterizacao);
        }