/// <summary>
                /// obtiene una nueva entidad con sus propiedaes, sin asignar el id y sin referencias locales.
                /// </summary>
                /// <typeparam name="T">Tipo de dato de la propiedad geo de una entidad</typeparam>
                /// <see cref="Implements{T}"/>
                /// <param name="implements">objeto que mantiene todos los tipos a los que cada propiedad debe ser convertido</param>
                /// <param name="obj">objeto desde el que se obtendrán los atributos</param>
                /// <param name="index">índice de la entidad a crear, el índice se encuentra en el atributo mdm de la clase</param>
                /// <returns>retorna un nuevo entitySearch desde un objeto, instancia de una clase.</returns>

                public static IEntitySearch <T> GetSimpleEntity <T>(Implements <T> implements, object obj, int index, IHashSearchHelper hash)
                {
                    // obtiene la metadata y los datos del objeto
                    var mdl = Attributes.GetPropertiesByAttributeWithValue(obj).Where(s => Mdm.Reflection.IsPrimitiveAndCollection(s.Value.GetType()) || s.Value.GetType().IsEnum).ToDictionary(s => s.Key, s => s.Value);


                    // asigna las propiedades.
                    var entitySearch = Props.FillProps(implements, mdl, implements.GetEntitySearchImplementedType);

                    // hash de cabecera
                    entitySearch.hm = hash.HashModel(obj);

                    // hash de modelo
                    entitySearch.hh = hash.HashHeader(obj.GetType());


                    // toma el índice de la metadata del atributo
                    entitySearch.index = index;
                    // asigna una fecha de creación. chequear si es necesario
                    entitySearch.created = DateTime.Now;

                    // retorna un entitySearch.
                    return(entitySearch);
                }