コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filtro"></param>
        /// <param name="subconjuntoContextosIds"></param>
        /// <returns></returns>
        public IList <string> ObtenIdsContextosPorFiltro(FiltroHechosDto filtro, IList <string> subconjuntoContextosIds)
        {
            var contextosEvaluar            = documentoInstancia.ContextosPorId;
            var idsContextosValidos         = new List <string>();
            var idsContextosFechas          = new List <string>();
            var diccionarioContextosValidos = new Dictionary <string, string>();

            if (filtro.IdContexto != null && filtro.IdContexto.Count > 0)
            {
                contextosEvaluar = ObtenSubconjutoDiccionario(contextosEvaluar, filtro.IdContexto);
            }
            if (subconjuntoContextosIds != null && subconjuntoContextosIds.Count > 0)
            {
                contextosEvaluar = ObtenSubconjutoDiccionario(contextosEvaluar, subconjuntoContextosIds);
            }
            if (filtro.Periodo != null && filtro.Periodo.Count > 0)
            {
                for (var index = 0; index < filtro.Periodo.Count; index++)
                {
                    var periodo = filtro.Periodo[index];
                    periodo.EvaluaVariablesPlantilla(definicionPlantilla);
                    IList <String> idsConctextosGrupoFecha;
                    if (documentoInstancia.ContextosPorFecha.TryGetValue(periodo.IdGrupoFechas, out idsConctextosGrupoFecha))
                    {
                        idsContextosFechas = new List <string>(idsContextosFechas.Concat(idsConctextosGrupoFecha));
                    }
                }
                if (idsContextosFechas != null && idsContextosFechas.Count > 0)
                {
                    contextosEvaluar = ObtenSubconjutoDiccionario(contextosEvaluar, idsContextosFechas);
                }
            }

            foreach (var idContexto in contextosEvaluar.Keys)
            {
                var contexto = contextosEvaluar[idContexto];
                if (filtro.ClaveEntidad != null && filtro.ClaveEntidad.Count > 0 && filtro.ClaveEntidad.IndexOf(contexto.Entidad.Id) == -1)
                {
                    continue;
                }
                if (filtro.ConjuntosParcialesDimensiones != null &&
                    filtro.ConjuntosParcialesDimensiones.Count > 0 &&
                    !ContenidoEnGruposParcialesDimensionesFiltro(contexto, filtro))
                {
                    continue;
                }
                if (filtro.ConjuntosExactosDimensiones != null &&
                    filtro.ConjuntosExactosDimensiones.Count > 0 &&
                    !ContenidoEnGruposExactosDimensionesFiltro(contexto, filtro))
                {
                    continue;
                }
                idsContextosValidos.Add(idContexto);
            }

            return(idsContextosValidos);
        }
コード例 #2
0
        /// <summary>
        /// Busca los hechos por el filtro dado.
        /// </summary>
        /// <param name="filtro">Objeto con los parametros de busqueda.</param>
        /// <returns>Lista con los identificadores de hecho encontrados.</returns>
        public IList <string> BuscaHechosPorFiltro(FiltroHechosDto filtro)
        {
            IList <string> idsHechos = filtro.IdHecho != null && filtro.IdHecho.Count > 0 ? filtro.IdHecho : null;

            if (filtro.IdConcepto != null && filtro.IdConcepto.Count > 0)
            {
                idsHechos = ObtenHechosIdsPorIdsConcepto(filtro.IdConcepto, idsHechos);
                if (idsHechos.Count == 0)
                {
                    return(idsHechos);
                }
            }
            var filtrarPorUnidad = (filtro.IdUnidad != null && filtro.IdUnidad.Count > 0) || (filtro.TipoUnidad > 0);

            if (filtrarPorUnidad)
            {
                var idsUnidadesValidas = ObtenIdsUnidadesPorFiltroUnidad(filtro);
                if (idsUnidadesValidas != null && idsUnidadesValidas.Count > 0)
                {
                    idsHechos = ObtenHechosIdsPorUnidadesIds(idsUnidadesValidas, idsHechos);
                    if (idsHechos.Count == 0)
                    {
                        return(idsHechos);
                    }
                }
                else
                {
                    return(new List <string>());
                }
            }

            var filtrarPorContexto = (filtro.IdContexto != null && filtro.IdContexto.Count > 0) ||
                                     (filtro.Periodo != null && filtro.Periodo.Count > 0) ||
                                     (filtro.ClaveEntidad != null && filtro.ClaveEntidad.Count > 0) ||
                                     (filtro.ConjuntosParcialesDimensiones != null && filtro.ConjuntosParcialesDimensiones.Count > 0) ||
                                     (filtro.ConjuntosExactosDimensiones != null && filtro.ConjuntosExactosDimensiones.Count > 0);

            if (filtrarPorContexto)
            {
                var contextosHechos     = idsHechos != null && idsHechos.Count > 0 ? ObtenIdsContextosHechos(idsHechos) : null;
                var idsContextosValidos = ObtenIdsContextosPorFiltro(filtro, contextosHechos);
                idsHechos = ObtenHechosIdPorContextosIds(idsContextosValidos, idsHechos);
            }
            return(idsHechos != null ? idsHechos : new List <string>());
        }
コード例 #3
0
        /// <summary>
        /// Obtiene los identificadores de las unidades validas según el filtro.
        /// </summary>
        /// <param name="filtro">Flitro que será aplicado.</param>
        /// <returns>Lista con los identificadores de las unidades validas.</returns>
        public IList <string> ObtenIdsUnidadesPorFiltroUnidad(FiltroHechosDto filtro)
        {
            var diccionarioUnidadesEvaluar = documentoInstancia.UnidadesPorId;
            var idsUnidadesValidas         = new List <string>();
            var diccionarioUnidadesValidas = new Dictionary <string, string>();

            if (filtro.IdUnidad != null && filtro.IdUnidad.Count > 0)
            {
                diccionarioUnidadesEvaluar = ObtenSubconjutoDiccionario(diccionarioUnidadesEvaluar, filtro.IdUnidad);
            }

            foreach (var idUnidad in diccionarioUnidadesEvaluar.Keys)
            {
                var unidad = diccionarioUnidadesEvaluar[idUnidad];
                if (filtro.TipoUnidad != null && (filtro.TipoUnidad != unidad.Tipo))
                {
                    continue;
                }
                if (filtro.Unidad != null && filtro.Unidad.Count > 0)
                {
                    var contieneUnidad = false;
                    for (var index = 0; index < filtro.Unidad.Count; index++)
                    {
                        var itemFiltroUnidad = filtro.Unidad[index];
                        if (unidad.EsEquivalente(itemFiltroUnidad))
                        {
                            contieneUnidad = true;
                            break;
                        }
                    }
                    if (!contieneUnidad)
                    {
                        continue;
                    }
                }
                if (!diccionarioUnidadesValidas.ContainsKey(idUnidad))
                {
                    diccionarioUnidadesValidas[idUnidad] = idUnidad;
                    idsUnidadesValidas.Add(idUnidad);
                }
            }

            return(idsUnidadesValidas);
        }
コード例 #4
0
        /// <summary>
        /// Verifica si un contexto cumple con las condiciones del fitro.
        /// </summary>
        /// <param name="contexto">Contexto que será evaluado.</param>
        /// <param name="filtro">Filtro con las condiciones a evaluar.</param>
        /// <returns>Si el contexto cumple o no con las condiciones de filtrado.</returns>
        private Boolean ContenidoEnGruposExactosDimensionesFiltro(ContextoDto contexto, FiltroHechosDto filtro)
        {
            if (!contexto.ContieneInformacionDimensional && !contexto.Entidad.ContieneInformacionDimensional)
            {
                return(false);
            }
            var grupoDimensionesContexto = (contexto.ValoresDimension != null && contexto.ValoresDimension.Count > 0) ?
                                           contexto.ValoresDimension : contexto.Entidad.ValoresDimension;

            if (grupoDimensionesContexto == null || grupoDimensionesContexto.Count == 0)
            {
                return(false);
            }

            var contenido = false;

            for (var index = 0; index < filtro.ConjuntosExactosDimensiones.Count; index++)
            {
                var matchGroup     = true;
                var dimensionGroup = filtro.ConjuntosExactosDimensiones[index];
                if (dimensionGroup == null || dimensionGroup.Count != grupoDimensionesContexto.Count)
                {
                    continue;
                }
                for (var indexDimContext = 0; indexDimContext < grupoDimensionesContexto.Count; indexDimContext++)
                {
                    var dimConteined      = false;
                    var dimensionContexto = grupoDimensionesContexto[indexDimContext];
                    for (var indexGroup = 0; indexGroup < dimensionGroup.Count; indexGroup++)
                    {
                        var dimensionFilter = dimensionGroup[indexGroup];
                        if (dimensionFilter.QNameDimension != dimensionContexto.QNameDimension)
                        {
                            continue;
                        }
                        if (dimensionFilter.Explicita != dimensionContexto.Explicita)
                        {
                            continue;
                        }
                        if (dimensionFilter.QNameItemMiembro != null && dimensionFilter.QNameItemMiembro != dimensionContexto.QNameItemMiembro)
                        {
                            continue;
                        }
                        if (dimensionFilter.ElementoMiembroTipificado != null && dimensionFilter.ElementoMiembroTipificado != dimensionContexto.ElementoMiembroTipificado)
                        {
                            continue;
                        }
                        dimConteined = true;
                        break;
                    }
                    if (!dimConteined)
                    {
                        matchGroup = false;
                        break;
                    }
                }
                if (matchGroup)
                {
                    contenido = true;
                    break;
                }
            }

            return(contenido);
        }
コード例 #5
0
        /// <summary>
        /// Inicializa diccionarios auxiliares.
        /// </summary>
        private void Init()
        {
            var periodos             = new List <PlantillaPeriodoDto>();
            var conjuntosDimensiones = new List <IList <DimensionInfoDto> >();

            foreach (var aliasPlantillaPeriodo in configuracion.PlantillasContextos.Keys)
            {
                var plantillaContexto = configuracion.PlantillasContextos[aliasPlantillaPeriodo];
                var plantillaPeriodo  = plantillaContexto.Periodo;
                periodos.Add(plantillaPeriodo);
            }
            var listaFiltroDimensiones = new List <DimensionInfoDto>();

            foreach (var aliasDimensionItem in configuracion.PlantillaDimensiones.Keys)
            {
                var plantillaDimension = configuracion.PlantillaDimensiones[aliasDimensionItem];
                var dimension          = new DimensionInfoDto()
                {
                    Explicita      = plantillaDimension.Explicita,
                    QNameDimension = plantillaDimension.QNameDimension
                };
                listaFiltroDimensiones.Add(dimension);
            }
            conjuntosDimensiones.Add(listaFiltroDimensiones);

            filtro = new FiltroHechosDto()
            {
                IdConcepto = configuracion.IdConceptos,
                Periodo    = periodos,
                ConjuntosExactosDimensiones = conjuntosDimensiones
            };

            var idsHechos    = consultaDocumentoInstanciaUtil.BuscaHechosPorFiltro(filtro);
            var idsContextos = consultaDocumentoInstanciaUtil.ObtenIdsContextosHechos(idsHechos);

            foreach (var idContexto in idsContextos)
            {
                var contexto         = documentoInstancia.ContextosPorId[idContexto];
                var listaDimensiones = contexto.ContieneInformacionDimensional ?
                                       contexto.ValoresDimension : contexto.Entidad.ContieneInformacionDimensional ?
                                       contexto.Entidad.ValoresDimension : new List <DimensionInfoDto>();

                var diccionarioDimensionesContexto = new Dictionary <string, string>();
                foreach (var dimension in listaDimensiones)
                {
                    IDictionary <string, DimensionInfoDto> diccionarioMiembros;
                    var idDimension = dimension.IdDimension;
                    if (!miembrosDimension.TryGetValue(idDimension, out diccionarioMiembros))
                    {
                        diccionarioMiembros = new Dictionary <string, DimensionInfoDto>();
                        miembrosDimension.Add(idDimension, diccionarioMiembros);
                    }
                    PlantillaDimensionInfoDto plantillaDimension;
                    if (configuracion.PlantillaDimensiones.TryGetValue(idDimension, out plantillaDimension))
                    {
                        var idMiembro = plantillaDimension.ObtenIdMiembro(dimension);
                        if (!diccionarioMiembros.ContainsKey(idMiembro))
                        {
                            diccionarioMiembros.Add(idMiembro, dimension);
                        }
                        diccionarioDimensionesContexto.Add(idDimension, idMiembro);
                    }
                }
                var idGrupoDimensionesDinamicasBuilder = new StringBuilder();
                var grupo = new Dictionary <string, string>();
                foreach (var aliasDimensionDinamica in configuracion.DimensionesDinamicas)
                {
                    string idMiembroDimension;
                    if (diccionarioDimensionesContexto.TryGetValue(aliasDimensionDinamica, out idMiembroDimension))
                    {
                        idGrupoDimensionesDinamicasBuilder.Append('_');
                        idGrupoDimensionesDinamicasBuilder.Append(idMiembroDimension);
                        grupo.Add(aliasDimensionDinamica, idMiembroDimension);
                    }
                }
                var idGrupoDimesionesDinamicas = idGrupoDimensionesDinamicasBuilder.Length > 1 ? idGrupoDimensionesDinamicasBuilder.ToString().Substring(1) : "indefinida";
                if (!gruposDimensionesDinamicas.ContainsKey(idGrupoDimesionesDinamicas))
                {
                    gruposDimensionesDinamicas.Add(idGrupoDimesionesDinamicas, grupo);
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// Genera un diccionaro con la información de las personas responsables.
        /// </summary>
        /// <param name="estructuraReporte">Estructura del reporte.</param>
        /// <returns>Diccionario con la información de las personas responsables.</returns>
        private IDictionary <String, IList <PersonaResponsable431000DTO> > GeneraDiccionarioPersonasResponsables(ReporteXBRLDTO estructuraReporte)
        {
            var documentoInstancia = estructuraReporte.Instancia;
            var consultaUtil       = new ConsultaDocumentoInstanciaUtil(documentoInstancia, estructuraReporte.Plantilla);
            var diccionario        = new Dictionary <String, IList <PersonaResponsable431000DTO> >();
            var filtroHechos       = new FiltroHechosDto()
            {
                IdConcepto = new List <String>()
                {
                    "ar_pros_ResponsiblePersonName",
                    "ar_pros_ResponsiblePersonPosition",
                    "ar_pros_ResponsiblePersonInstitution",
                    "ar_pros_ResponsiblePersonLegend",
                    "ar_pros_SignIssuanceUnderArt13OfTheCUE",
                    "ar_pros_ResponsiblePersonInstitutionExternalAuditor",
                    "ar_pros_OtherInstitutionExternalAuditor",
                    "ar_pros_ResponsiblePersonInstitutionBacherlorOfLaws",
                    "ar_pros_OtherInstitutionBacherlorOfLaws",
                }
            };
            var diccionarioPersonasResponsables = new Dictionary <String, IList <PersonaResponsable431000DTO> >();
            var idsHechosConceptos            = consultaUtil.BuscaHechosPorFiltro(filtroHechos);
            var idsContextos                  = consultaUtil.ObtenIdsContextosHechos(idsHechosConceptos);
            var contextosPorFiguraResponsable = consultaUtil.AgrupaContextosPorMiembro("http://www.cnbv.gob.mx/2016-08-22/ar_prospectus:TypeOfResponsibleFigureAxis", idsContextos);

            foreach (var idItemMiembroFiguraResponsable in contextosPorFiguraResponsable.Keys)
            {
                var listaContextosPorFiguraResponsable = contextosPorFiguraResponsable[idItemMiembroFiguraResponsable];
                var contextosPorEntidad = consultaUtil.AgrupaContextosPorMiembro("http://www.cnbv.gob.mx/2016-08-22/ar_prospectus:ResponsiblePersonsInstitutionSequenceTypedAxis", listaContextosPorFiguraResponsable);
                IList <PersonaResponsable431000DTO> listaPersonasResponsablesMiembro;
                if (!diccionario.TryGetValue(idItemMiembroFiguraResponsable, out listaPersonasResponsablesMiembro))
                {
                    listaPersonasResponsablesMiembro = new List <PersonaResponsable431000DTO>();
                    diccionario.Add(idItemMiembroFiguraResponsable, listaPersonasResponsablesMiembro);
                }
                foreach (var miembroTipificadoInstitucion in contextosPorEntidad.Keys)
                {
                    var personaResponsableDto = new PersonaResponsable431000DTO()
                    {
                        Miembros = new List <PersonaResponsableMiembro431000DTO>()
                    };
                    listaPersonasResponsablesMiembro.Add(personaResponsableDto);

                    var listaContextosPorInstitucion = contextosPorEntidad[miembroTipificadoInstitucion];
                    var listaIdsHechosInstitucion    = consultaUtil.BuscaHechosPorFiltro(new FiltroHechosDto()
                    {
                        IdConcepto = new List <String>()
                        {
                            "ar_pros_ResponsiblePersonInstitution",
                            "ar_pros_ResponsiblePersonLegend",
                            "ar_pros_ResponsiblePersonInstitutionExternalAuditor",
                            "ar_pros_OtherInstitutionExternalAuditor",
                            "ar_pros_ResponsiblePersonInstitutionBacherlorOfLaws",
                            "ar_pros_OtherInstitutionBacherlorOfLaws"
                        },
                        IdContexto = listaContextosPorInstitucion
                    });
                    String otraInstitucion = String.Empty;
                    foreach (var idHechoInstitucion in listaIdsHechosInstitucion)
                    {
                        HechoDto hechoInsititucionLeyenda;
                        if (documentoInstancia.HechosPorId.TryGetValue(idHechoInstitucion, out hechoInsititucionLeyenda))
                        {
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitution"))
                            {
                                personaResponsableDto.Institucion = hechoInsititucionLeyenda.Valor;
                            }
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitutionExternalAuditor") ||
                                hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitutionBacherlorOfLaws"))
                            {
                                personaResponsableDto.Institucion = hechoInsititucionLeyenda.Valor;
                            }
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_OtherInstitutionExternalAuditor") ||
                                hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_OtherInstitutionBacherlorOfLaws"))
                            {
                                otraInstitucion = hechoInsititucionLeyenda.Valor;
                            }
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonLegend"))
                            {
                                personaResponsableDto.Leyenda = hechoInsititucionLeyenda.Valor;
                            }
                        }
                    }
                    if (!String.IsNullOrEmpty(otraInstitucion) && personaResponsableDto.Institucion.Equals("Otro"))
                    {
                        personaResponsableDto.Institucion = otraInstitucion;
                    }
                    var diccionarioMiembrosPersonasResponsables = consultaUtil.AgrupaContextosPorMiembro("http://www.cnbv.gob.mx/2016-08-22/ar_prospectus:ResponsiblePersonsSequenceTypedAxis", listaContextosPorInstitucion);
                    foreach (var idMiembroResponsable in diccionarioMiembrosPersonasResponsables.Keys)
                    {
                        var            listaContextosPersonaResponsable = diccionarioMiembrosPersonasResponsables[idMiembroResponsable];
                        var            idPrimerContexto = listaContextosPersonaResponsable.First();
                        IList <String> listaIdsHechosPersonaResponsable;
                        if (documentoInstancia.HechosPorIdContexto.TryGetValue(idPrimerContexto, out listaIdsHechosPersonaResponsable))
                        {
                            var miembroPresonaResponsable = new PersonaResponsableMiembro431000DTO();
                            for (var indexHechoPresona = 0; indexHechoPresona < listaIdsHechosPersonaResponsable.Count; indexHechoPresona++)
                            {
                                var      idHechoPersona = listaIdsHechosPersonaResponsable[indexHechoPresona];
                                HechoDto hechoPersonaResponsable;
                                if (documentoInstancia.HechosPorId.TryGetValue(idHechoPersona, out hechoPersonaResponsable))
                                {
                                    if (hechoPersonaResponsable.IdConcepto.Equals("ar_pros_ResponsiblePersonName"))
                                    {
                                        miembroPresonaResponsable.Nombre = hechoPersonaResponsable.Valor;
                                    }
                                    if (hechoPersonaResponsable.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition"))
                                    {
                                        miembroPresonaResponsable.Cargo = hechoPersonaResponsable.Valor;
                                    }
                                    if (hechoPersonaResponsable.IdConcepto.Equals("ar_pros_SignIssuanceUnderArt13OfTheCUE"))
                                    {
                                        miembroPresonaResponsable.FirmaArticulo13 = hechoPersonaResponsable.Valor.Equals("SI");
                                        if (miembroPresonaResponsable.FirmaArticulo13)
                                        {
                                            personaResponsableDto.ContieneFirmasLeyendaArt13 = true;
                                        }
                                    }
                                }
                            }
                            if (!String.IsNullOrEmpty(miembroPresonaResponsable.Nombre))
                            {
                                personaResponsableDto.Miembros.Add(miembroPresonaResponsable);
                            }
                        }
                    }
                }
            }

            return(diccionario);
        }