/// <summary> /// Valida que el miembro de dominio de un valor de dimensión sea válido respecto a su dimensión /// </summary> /// <param name="valorMiembro"></param> /// <param name="nodoDimension"></param> /// <returns></returns> private bool EsDominioValido(MiembroDimension valorMiembro, Dimension nodoDimension) { if (nodoDimension.Explicita) { return(valorMiembro.ItemMiembro != null && nodoDimension.MiembrosDominio.Contains(valorMiembro.ItemMiembro)); } else { return(valorMiembro.ElementoMiembroTipificado != null && valorMiembro.ElementoMiembroTipificado.NamespaceURI.Equals( nodoDimension.ConceptoDimension.ElementoDimensionTipificada.QualifiedName.Namespace) && valorMiembro.ElementoMiembroTipificado.LocalName.Equals( nodoDimension.ConceptoDimension.ElementoDimensionTipificada.QualifiedName.Name)); } }
/// <summary> /// Procesa los elementos dimensionales dentro de los nodos hijos del elemento origen /// </summary> /// <param name="documento">Documento de instancia que se está procesando actualmente</param> private void ListarMiembrosDimension(IDocumentoInstanciaXBRL documento) { foreach (XmlElement elementoHijo in ElementoOrigen.ChildNodes) { if (elementoHijo.NamespaceURI.Equals(EspacioNombresConstantes.DimensionInstanceNamespace) && (elementoHijo.LocalName.Equals(EtiquetasXBRLConstantes.ExplicitMemberElement) || elementoHijo.LocalName.Equals(EtiquetasXBRLConstantes.TypedMemberElement))) { var miembro = new MiembroDimension(); var qname = XmlUtil.ObtenerQNameConNamespace(elementoHijo.Attributes[EtiquetasXBRLConstantes.DimensionAttribute].Value, elementoHijo); miembro.QNameDimension = qname; //Buscar el concepto que corresponde a la dimensión if (documento.Taxonomia.ElementosTaxonomiaPorName.ContainsKey(qname) && documento.Taxonomia.ElementosTaxonomiaPorName[qname] is ConceptDimensionItem) { miembro.Dimension = documento.Taxonomia.ElementosTaxonomiaPorName[qname] as ConceptDimensionItem; } if (elementoHijo.LocalName.Equals(EtiquetasXBRLConstantes.ExplicitMemberElement)) { miembro.Explicita = true; qname = XmlUtil.ObtenerQNameConNamespace(elementoHijo.InnerText, elementoHijo); miembro.QNameMiembro = qname; if (qname != null) { //Buscar el concepto que corresponde al miembro if (documento.Taxonomia.ElementosTaxonomiaPorName.ContainsKey(qname) && documento.Taxonomia.ElementosTaxonomiaPorName[qname] is ConceptItem) { miembro.ItemMiembro = documento.Taxonomia.ElementosTaxonomiaPorName[qname] as ConceptItem; } } } else if (elementoHijo.LocalName.Equals(EtiquetasXBRLConstantes.TypedMemberElement)) { miembro.Explicita = false; //Colocar el contenido de los nodos del miembro tipificado if (elementoHijo.ChildNodes.Count > 0) { miembro.ElementoMiembroTipificado = elementoHijo.ChildNodes[0] as XmlElement; } } MiembrosDimension.Add(miembro); } else { //El elemento es otra cosa que no es una declaración de dimensión ElementosAdicionales.Add(elementoHijo); } } }