/// <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;
 }
Beispiel #2
0
 /// <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);
                }
            }
        }