/// <summary> /// Constructor para dimension default /// </summary> /// <param name="dimDefault"></param> public MiembroDimension(ConceptDimensionItem dimension, ConceptItem dimDefault) { Explicita = true; Dimension = dimension; QNameMiembro = dimDefault.Elemento.QualifiedName; ItemMiembro = dimDefault; }
/// <summary> /// Obtiene el miembro predeterminado de una dimensión, si es que la tiene /// </summary> /// <param name="dimension">Dimensión para la cuál se busca su default</param> /// <returns>Concepto default si lo tiene, null si no tiene</returns> public ConceptItem ObtenerDimensionDefault(ConceptDimensionItem dimension) { if (_dimensionDefaults.ContainsKey(dimension)) { return(_dimensionDefaults[dimension]); } return(null); }
/// <summary> /// Valida la declaración del apuntado a un elemento de esquema que representa los elementos que pueden tomar los elementos del dominio de una dimensión /// </summary> /// <param name="dimensionItem"></param> private void ValidarDeclaracionDeReferenciaDimensionTipificada(ConceptDimensionItem dimensionItem) { XmlSchemaElement elemento = null; //Si se trata de la declaración de una dimensión del tipo typed o tipificada, entonces la declaración del elemento de esquema a la que apunta debe: if (dimensionItem.ReferenciaDimensionTipificada != null) { if (dimensionItem.ReferenciaDimensionTipificada.Identificador == null) { //Apuntador mal formado ManejadorErrores.ManejarError(CodigosErrorXBRL.TypedDimensionURIError, null, "2.5.2.1.1.4 Se encontró un elemento del tipo dimensionItem con un atributo xbrldt:typedDomainRef cuyo identificador de fragmento es inválido o nulo: " + "Ref: " + dimensionItem.ReferenciaDimensionTipificada.UbicacionArchivo + "#" + dimensionItem.ReferenciaDimensionTipificada.Identificador, XmlSeverityType.Error); } else { //Buscar el elemento en los tipos globales del DTS bool fueraDeDTS = true; foreach (var esquema in Taxonomia.ArchivosEsquema.Where(x => x.Key.Equals(dimensionItem.ReferenciaDimensionTipificada.UbicacionArchivo))) { fueraDeDTS = false; foreach (XmlSchemaElement unElemento in esquema.Value.Elements.Values) { if (unElemento.Id != null && unElemento.Id.Equals(dimensionItem.ReferenciaDimensionTipificada.Identificador)) { elemento = unElemento; break; } } } //No apunta a nada if (elemento == null) { if (fueraDeDTS) { ManejadorErrores.ManejarError(CodigosErrorXBRL.OutOfDTSSchemaError, null, "2.5.2.1.1.1 Se encontró un elemento del tipo dimensionItem con un atributo xbrldt:typedDomainRef cuya declaración apunta a un esquema que no está incluido " + " en el DTS de la taxonomía : Ref: " + dimensionItem.ReferenciaDimensionTipificada.UbicacionArchivo + "#" + dimensionItem.ReferenciaDimensionTipificada.Identificador, XmlSeverityType.Error); } else { ManejadorErrores.ManejarError(CodigosErrorXBRL.TypedDimensionError, null, "2.5.2.1.1.3 Se encontró un elemento del tipo dimensionItem con un atributo xbrldt:typedDomainRef cuya declaración del elemento no fue encontrada o no es un elemento global: " + "Ref: " + dimensionItem.ReferenciaDimensionTipificada.UbicacionArchivo + "#" + dimensionItem.ReferenciaDimensionTipificada.Identificador, XmlSeverityType.Error); } } else { //Ser un elemento global y abstracto if (elemento.Parent.Parent != null) { ManejadorErrores.ManejarError(CodigosErrorXBRL.TypedDimensionError, null, "2.5.2.1.1.3 Se encontró un elemento del tipo dimensionItem con un atributo xbrldt:typedDomainRef cuya declaración del elemento no es global: " + "Elemento: " + dimensionItem.ReferenciaDimensionTipificada.UbicacionArchivo + "#" + dimensionItem.ReferenciaDimensionTipificada.Identificador, XmlSeverityType.Error); } if (elemento.IsAbstract) { ManejadorErrores.ManejarError(CodigosErrorXBRL.TypedDimensionError, null, "2.5.2.1.1.3 Se encontró un elemento del tipo dimensionItem con un atributo xbrldt:typedDomainRef cuya declaración del elemento no fue encontrada: " + "Ref: " + dimensionItem.ReferenciaDimensionTipificada.UbicacionArchivo + "#" + dimensionItem.ReferenciaDimensionTipificada.Identificador, XmlSeverityType.Error); } } } } }
/// <summary> /// Verifica si para algún contexto de la instancia existe la dimensión default en el tipo de elemento de contexto indicado (escenario o segmento) /// </summary> /// <param name="valoresDimension">Valores de dimensión en el contexto</param> /// <param name="dimension">Dimensión a buscar en el contexto</param> /// <param name="dimDefault">Valor de la dimensión default</param> /// <param name="context"> </param> private void VerificarDimensionDefaultEnContexto(IList <MiembroDimension> valoresDimension, ConceptDimensionItem dimension, ConceptItem dimDefault, Context context) { var miembroDim = valoresDimension.FirstOrDefault(x => x.Dimension == dimension); if (miembroDim != null && miembroDim.ItemMiembro != null) { if (miembroDim.ItemMiembro == dimDefault) { //Error, dimensión default está presente en contexto ManejadorErrores.ManejarError(CodigosErrorXBRL.DefaultValueUsedInInstanceError, null, "2.7.1.2.1 Se encontró un contexto donde aparece un miembro predeterminado de una dimensión: Contexto: " + context.Id + ": Dimension: " + dimension.Id + " : Valor Predeterminado:" + dimDefault.Id, XmlSeverityType.Error); } } }