/// <summary>
        /// Realiza la validación de un arco essence-alias respecto al contenido de hechos de un documento de instancia.
        ///
        /// </summary>
        /// <param name="arco">Arco a validar</param>
        private void ValidarHechosEssenceAlias(ArcoDefinicion arco)
        {
            ConceptItem itemDesde = null;
            ConceptItem itemHacia = null;

            foreach (ElementoLocalizable desde in arco.ElementoDesde)
            {
                if (desde.Destino is ConceptItem)
                {
                    itemDesde = (ConceptItem)desde.Destino;
                    foreach (ElementoLocalizable hacia in arco.ElementoHacia)
                    {
                        if (hacia.Destino is ConceptItem)
                        {
                            itemHacia = (ConceptItem)hacia.Destino;

                            //Buscar todos los facts que correspondan al elemento desde
                            foreach (Fact hechoEssence in DocumentoInstancia.Hechos.Where(fct => fct.Concepto.Id.Equals(itemDesde.Id)))
                            {
                                foreach (Fact hechoAlias in DocumentoInstancia.Hechos.Where(fct => fct.Concepto.Id.Equals(itemHacia.Id)))
                                {
                                    //Validar la pareja de hechos si son consistentes en una relación essence-alias
                                    //De acuerdo a la especificación los arcos de essence-alias solo pueden unir conteptos del tipo item y no tuple
                                    ValidarParejaHechosEssenceAlias((FactItem)hechoEssence, (FactItem)hechoAlias);
                                }
                            }
                        }
                    }
                }
            }
        }
 /// <summary>
 /// Valida el punto 5.2.6.2.4 de la especificación de XBRL 2.1 donde se describe que la relación
 /// del tipo requires-elemento implica que si en un documento de instancia existe un hecho
 /// del elemento desde, entonces al menos un hecho del tipo hacia debe existir también en el documento de instancia
 /// </summary>
 /// <param name="arco"></param>
 private void ValidarHechosRequiresElement(ArcoDefinicion arco)
 {
     foreach (ElementoLocalizable desde in arco.ElementoDesde)
     {
         foreach (ElementoLocalizable hacia in arco.ElementoHacia)
         {
             //Si existe elemento desde
             IList <Fact> hechoElemento  = DocumentoInstancia.ObtenerHechosPorConcepto((Concept)desde.Destino);
             IList <Fact> hechoRequerido = DocumentoInstancia.ObtenerHechosPorConcepto((Concept)hacia.Destino);
             if (hechoElemento != null && hechoElemento.Count > 0)
             {
                 //existe elemento , verificar si existe el requerido
                 if (hechoRequerido == null || hechoRequerido.Count == 0)
                 {
                     ManejadorErrores.ManejarError(null, "5.2.6.2.4 Se encontró un hecho del tipo (" + desde.Destino.Id + ") en el documento de instancia pero no se encontró " +
                                                   " el hecho requerido (" + hacia.Destino.Id + ") definido en el arco: " + arco.ElementoXML.OuterXml, System.Xml.Schema.XmlSeverityType.Error);
                 }
             }
         }
     }
 }