コード例 #1
0
        public List <FactBaseQuery> SoftCombineQueries(params List <FactBaseQuery>[] querypool)
        {
            var nonempty = querypool.Where(i => i.Count > 0);

            var combinedqueries = MathX.CartesianProduct(nonempty);

            var mergedqueries = new List <FactBaseQuery>();

            foreach (var combination in combinedqueries)
            {
                var mergedquery     = new FactBaseQuery();
                var combinationlist = combination.ToList();
                var ix = 0;
                foreach (var fbq in combinationlist)
                {
                    //Merge(fbq, mergedquery);
                    mergedquery.NrOfDictFilters += fbq.NrOfDictFilters;
                    //if (ix == combinationlist.Count - 1)
                    //{
                    //    Merge(fbq, mergedquery);
                    //}
                    FactBaseQuery.Merge(fbq, mergedquery);

                    ix++;
                }
                mergedqueries.Add(mergedquery);
            }
            return(mergedqueries);
        }
コード例 #2
0
        public void RemoveCommon(FactBaseQuery querytoremovefrom, FactBaseQuery query)
        {
            var common_dfs  = query.DictFilterIndexes.Intersect(querytoremovefrom.DictFilterIndexes).ToList();
            var common_ndfs = query.NegativeDictFilterIndexes.Intersect(querytoremovefrom.NegativeDictFilterIndexes).ToList();

            foreach (var common_df in common_dfs)
            {
                querytoremovefrom.DictFilterIndexes.Remove(common_df);
            }
            foreach (var common_ndf in common_ndfs)
            {
                querytoremovefrom.NegativeDictFilterIndexes.Remove(common_ndf);
            }
            querytoremovefrom.DictFilters = "";
            foreach (var df in querytoremovefrom.DictFilterIndexes)
            {
                querytoremovefrom.DictFilters += Taxonomy.CounterFactParts[df] + ",";
            }
            querytoremovefrom.FalseFilters = "";
            foreach (var ndf in querytoremovefrom.NegativeDictFilterIndexes)
            {
                querytoremovefrom.FalseFilters += Taxonomy.CounterFactParts[ndf] + ",";
            }
            //querytoremovefrom.NrOfDictFilters = querytoremovefrom.DictFilterIndexes.Count;
        }
コード例 #3
0
        public FactBaseQuery GetQuery(Hierarchy <XbrlIdentifiable> item, int level = 0)
        {
            var query = new FactBaseQuery();

            foreach (var child in item.Children)
            {
                var filter = child.Item as Filter;
                if (filter != null)
                {
                    //Console.WriteLine(String.Format("GetQuery({0}, {1}) at child {2}", item, level, child));
                    var chquery = filter.GetQuery(this.Taxonomy, child, query);
                    //FactBaseQuery.Merge(chquery, query);
                    if (chquery != null)
                    {
                        query.AddChildQuery(chquery);
                        //FactBaseQuery.MergeQueries(query, chquery);
                    }
                    else
                    {
                        //GetQuery not implemented for the filter
                    }
                }
            }

            query.Simplify();
            return(query);
        }
コード例 #4
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            //Console.WriteLine(String.Format("ConceptFilter.GetQuery( {0} ) ", currentfilter.Item));

            var factparts    = taxonomy.FactParts;
            var factsofparts = taxonomy.FactsOfParts;
            //var query = new FactBaseQuery();
            FactBaseQuery result  = null;
            var           queries = new List <FactBaseQuery>();

            if (Concepts.Count == 1)
            {
            }
            foreach (var concept in Concepts)
            {
                var query = new FactBaseQuery();
                queries.Add(query);
                var tag = concept.QName.Content;
                query.Concept = tag;
                if (!Complement)
                {
                    query.DictFilters = parent.DictFilters + String.Format("{0} ", tag);
                    if (factparts.ContainsKey(tag))
                    {
                        query.DictFilterIndexes.Add(factparts[tag]);
                    }
                }
                else
                {
                    query.FalseFilters = parent.DictFilters + String.Format("{0} ", tag);
                    if (factparts.ContainsKey(tag))
                    {
                        query.NegativeDictFilterIndexes.Add(factparts[tag]);
                    }
                }
                SetCover(query);
            }
            if (queries.Count == 1)
            {
                result = queries.FirstOrDefault();
            }
            if (queries.Count > 1)
            {
                result = new FactPoolQuery();
                foreach (var query in queries)
                {
                    result.AddChildQuery(query);
                }
            }
            return(result);
        }
コード例 #5
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            var query = new FactBaseQuery();

            foreach (var child in currentfilter.Children)
            {
                var filter = child.Item as Filter;
                if (filter != null)
                {
                    var childquery = filter.GetQuery(taxonomy, child, query);
                    FactBaseQuery.MergeQueries(query, childquery);
                    //query.AddChildQuery(childquery);
                    //FactBaseQuery.Merge(childquery, query);
                }
            }
            return(query);
        }
コード例 #6
0
        public List <FactBaseQuery> CombineQueries(params List <FactBaseQuery>[] querypool)
        {
            var nonempty = querypool.Where(i => i.Count > 0);

            var combinedqueries = MathX.CartesianProduct(nonempty);

            var mergedqueries = new List <FactBaseQuery>();

            foreach (var combination in combinedqueries)
            {
                var mergedquery = new FactBaseQuery();
                foreach (var fbq in combination)
                {
                    FactBaseQuery.Merge(fbq, mergedquery);
                }
                mergedqueries.Add(mergedquery);
            }
            return(mergedqueries);
        }
コード例 #7
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            //Console.WriteLine(String.Format("TypedDimensionFilter.GetQuery( {0} ) ", currentfilter.Item));

            var query     = new FactBaseQuery();
            var factparts = taxonomy.FactParts;

            var typeddomain = taxonomy.FindDimensionDomain(this.Dimension.QName.Content);

            // var td = taxonomy.TypedDimensions.FirstOrDefault(i => i.Key.EndsWith(":" + this.Dimension.QName.Value));
            var domainpart = typeddomain.Namespace + ":" + typeddomain.Name;
            var tag        = String.Format("[{0}:{1}]{2}", this.Dimension.QName.Domain, this.Dimension.QName.Value, domainpart);

            if (!Complement)
            {
                //var tag = String.Format(":{0}]", this.Dimension.QName.Value);

                query.TrueFilters = query.TrueFilters + String.Format("{0}, ", tag);
                if (factparts.ContainsKey(tag))
                {
                    query.DictFilterIndexes.Add(factparts[tag]);
                }
            }
            else
            {
                //var tag = String.Format(":{0}]", this.Dimension.QName.Value);

                query.FalseFilters = query.FalseFilters + String.Format("{0} ", tag);
                if (factparts.ContainsKey(tag))
                {
                    query.NegativeDictFilterIndexes.Add(factparts[tag]);
                }
            }

            SetCover(query);

            return(query);
        }
コード例 #8
0
        public LogicalModel.Validation.ValidationRule GetLogicalRule(Hierarchy <XbrlIdentifiable> hrule, XbrlTaxonomyDocument document)
        {
            this.Document = document;

            var tmp_rule = hrule.Copy();
            //FixRule(tmp_rule);
            var logicalrule    = new LogicalModel.Validation.ValidationRule();
            var valueassertion = tmp_rule.Item as ValueAssertion;

            logicalrule.ID = valueassertion.ID;
            //Utilities.Logger.WriteLine("Getting rule for " + logicalrule.ID);
            logicalrule.LabelID            = valueassertion.LabelID;
            logicalrule.OriginalExpression = valueassertion.Test.Replace("\r\n", " ").Replace("\r", " ").Replace("\n", " ");
            logicalrule.SetTaxonomy(this.Taxonomy);

            var sb = new StringBuilder();

            sb.AppendLine(logicalrule.DisplayText);
            sb.AppendLine(valueassertion.Test);
            var rawval = document.FileName + "\r\n" + document.LocalPath + "\r\n" + logicalrule.DisplayText + "\r\n" + logicalrule.OriginalExpression + "\r\n" + hrule.ToHierarchyString(i => i.ToString()) + "\r\n";

            logicalrule.RawInfo = rawval;
            Utilities.FS.AppendAllText(Taxonomy.TaxonomyValidationFolder + "Validations_XML.txt", rawval);

            if (logicalrule.ID.Contains("1058"))/*,"es_v354"*/
            {
            }

            var factvariables = tmp_rule.Where(i => i.Item is FactVariable);

            foreach (var fv in factvariables)
            {
                tmp_rule.Remove(fv);
            }


            logicalrule.BaseQuery = GetQuery(tmp_rule);

            logicalrule.BaseQuery.GetString(Taxonomy);

            foreach (var fv in factvariables)
            {
                var factvariable = fv.Item as FactVariable;
                var name         = factvariable.Name;
                var parameter    = new LogicalModel.Validation.ValidationParameter(name, logicalrule.ID);
                logicalrule.Parameters.Add(parameter);
                parameter.BindAsSequence = factvariable.BindAsSequence;
                parameter.FallBackValue  = factvariable.FallbackValue;


                parameter.BaseQuery = GetQuery(fv);
                parameter.Concept   = parameter.BaseQuery.GetConcept();
                if (String.IsNullOrEmpty(parameter.Concept))
                {
                    parameter.Concept = logicalrule.BaseQuery.GetConcept();
                }
                if (parameter.BaseQuery.HasDictFilter("find:filingIndicator"))
                {
                    parameter.IsGeneral   = true;
                    parameter.StringValue = "filingindicators";
                }
                ValidationRuleHelper.SetParamerterTypes(Taxonomy, logicalrule);
            }
            var factparameterqueries  = logicalrule.Parameters.Where(i => !i.IsGeneral).Select(i => i.BaseQuery).ToArray();
            var commconparameterquery = FactBaseQuery.GetCommonQuery(factparameterqueries);

            if (commconparameterquery != null && commconparameterquery.HasFilters())
            {
                FactBaseQuery.MergeQueries(logicalrule.BaseQuery, commconparameterquery);
                foreach (var pquery in factparameterqueries)
                {
                    FactBaseQuery.RemoveQuery(pquery, commconparameterquery);
                }
            }
            var sbquery = new StringBuilder();

            if (1 == 1)
            {
                sbquery.AppendLine("RuleQuery: ");
                sbquery.AppendLine(logicalrule.BaseQuery != null? logicalrule.BaseQuery.ToString():"");
                sbquery.AppendLine();
                foreach (var p in logicalrule.Parameters)
                {
                    sbquery.AppendLine(p + " Query: ");
                    if (p.BaseQuery != null)
                    {
                        sbquery.AppendLine(p.BaseQuery != null ? p.BaseQuery.ToString() : "");
                    }
                }
            }
            foreach (var gp in Taxonomy.ValidationParameters)
            {
                if (valueassertion.Test.Contains(gp.Value.XPathName))
                {
                    if (gp.Key == "ReportingLevel")
                    {
                        var p_rl1 = new LogicalModel.Validation.ValidationParameter("ReportingLevel", logicalrule.ID);
                        p_rl1.StringValue = this.Taxonomy.EntryDocument.FileName.Contains("_con") ? "con" : "ind";
                        p_rl1.Type        = LogicalModel.TypeEnum.String;
                        p_rl1.IsGeneral   = true;
                        logicalrule.Parameters.Add(p_rl1);
                        continue;
                    }
                    if (gp.Key == "AccountingStandard")
                    {
                        var p_rl2 = new LogicalModel.Validation.ValidationParameter("AccountingStandard", logicalrule.ID);
                        p_rl2.StringValue = this.Taxonomy.EntryDocument.FileName.Contains("GAAP") ? "GAAP" : "IFRS";
                        p_rl2.Type        = LogicalModel.TypeEnum.String;
                        p_rl2.IsGeneral   = true;
                        logicalrule.Parameters.Add(p_rl2);
                        continue;
                    }
                    var p_rl = new LogicalModel.Validation.ValidationParameter(gp.Key, logicalrule.ID);
                    p_rl.StringValue = "Unresolved";
                    p_rl.Type        = LogicalModel.TypeEnum.String;
                    p_rl.IsGeneral   = true;
                    logicalrule.Parameters.Add(p_rl);
                }
            }

            /*
             * if (valueassertion.Test.Contains("$ReportingLevel"))
             * {
             *  var p_rl1 = new LogicalModel.Validation.ValidationParameter("ReportingLevel", logicalrule.ID);
             *  p_rl1.StringValue = this.Taxonomy.EntryDocument.FileName.Contains("_con") ? "con" : "ind";
             *  p_rl1.Type = LogicalModel.TypeEnum.String;
             *  p_rl1.IsGeneral = true;
             *  logicalrule.Parameters.Add(p_rl1);
             * }
             * if (valueassertion.Test.Contains("$AccountingStandard"))
             * {
             *  var p_rl2 = new LogicalModel.Validation.ValidationParameter("AccountingStandard", logicalrule.ID);
             *  p_rl2.StringValue = this.Taxonomy.EntryDocument.FileName.Contains("GAAP") ? "GAAP" : "IFRS";
             *  p_rl2.Type = LogicalModel.TypeEnum.String;
             *  p_rl2.IsGeneral = true;
             *  logicalrule.Parameters.Add(p_rl2);
             * }
             */
            logicalrule.SetTaxonomy(this.Taxonomy);
            ValidationRuleHelper.ExecuteExplicitFiltering(this.Taxonomy, logicalrule);
            ValidationRuleHelper.ExecuteImplicitFiltering(this.Taxonomy, logicalrule);
            ValidationRuleHelper.ExecuteMatching(this.Taxonomy, logicalrule);
            ValidationRuleHelper.CheckConsistency(this.Taxonomy, logicalrule);

            //SetFacts(logicalrule);

            return(logicalrule);
        }
コード例 #9
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            //Console.WriteLine(String.Format("ExplicitDimensionFilter.GetQuery( {0} ) ", currentfilter.Item));

            var _complement  = Complement;
            var factsofparts = taxonomy.FactsOfParts;
            var factparts    = taxonomy.FactParts;
            var resultquery  = new FactBaseQuery();

            //var querycontainer = parent;
            if (Members.Count == 0)
            {
                var dimkey = String.Format("{0}:{1}", this.Dimension.QName.Domain, this.Dimension.QName.Value);

                var domains     = taxonomy.DomainsofDimensions.ContainsKey(dimkey) ? taxonomy.DomainsofDimensions[dimkey] : new List <string>();
                var firstdomain = domains.FirstOrDefault();
                if (firstdomain != null)
                {
                    var members = taxonomy.GetMembersOf(firstdomain).Where(i => !i.IsDefaultMember).ToList();
                    this.Members = members.Select(i => {
                        var dm             = new DimensionMember();
                        dm.QName.Content   = i.Content;
                        dm.IsDefaultMember = i.IsDefaultMember;
                        return(dm);
                    }).ToList();
                }
            }
            var firstmemebr = Members.FirstOrDefault();
            var domaintag   = String.Format("[{0}:{1}]{2}", this.Dimension.QName.Domain, this.Dimension.QName.Value, firstmemebr.QName.Domain);
            //FactBaseQuery resultquery = new FactBaseQuery();
            var querycontainer = resultquery;
            var poolneeded     = Members.Count > 1 || (Members.Count == 1 && firstmemebr.IsDefaultMember && this.Complement);

            if (poolneeded)
            {
                querycontainer = new FactPoolQuery();
                resultquery.AddChildQuery(querycontainer);
                //resultquery.DictFilterIndexes.Add(factparts[domaintag]);

                //querycontainer = resultquery;
            }
            foreach (var member in Members)
            {
                var membertag = String.Format("[{0}:{1}]{2}", this.Dimension.QName.Domain, this.Dimension.QName.Value, member.QName.Content);
                if (!member.IsDefaultMember)
                {
                    if (!_complement)
                    {
                        if (factparts.ContainsKey(membertag))
                        {
                            var xquery = querycontainer;
                            if (xquery is FactPoolQuery)
                            {
                                var fbq = new FactBaseQuery();
                                xquery.AddChildQuery(fbq);
                                xquery = fbq;
                            }
                            xquery.DictFilterIndexes.Add(factparts[membertag]);
                        }
                    }
                    else
                    {
                        if (factparts.ContainsKey(membertag))
                        {
                            querycontainer.NegativeDictFilterIndexes.Add(factparts[membertag]);
                        }
                    }
                }
                else
                {
                    //default member
                    if (!_complement)
                    {
                        if (factparts.ContainsKey(domaintag))
                        {
                            var xquery = querycontainer;
                            if (xquery is FactPoolQuery)
                            {
                                var fbq = new FactBaseQuery();
                                xquery.AddChildQuery(fbq);
                                xquery = fbq;
                            }
                            xquery.NegativeDictFilterIndexes.Add(factparts[domaintag]);
                        }
                    }
                    else
                    {
                        //default member with complement
                        if (Members.Count == 1)
                        {
                            var tag = String.Format("[{0}:{1}]", this.Dimension.QName.Domain, this.Dimension.QName.Value);

                            var domain  = member.QName.Domain;
                            var members = taxonomy.GetMembersOf(domain, this._Members.Select(i => i.QName.Content).ToList());

                            foreach (var memberitem in members)
                            {
                                var mfbq             = new FactBaseQuery();
                                var memberdictfilter = tag + memberitem;

                                //FP if (taxonomy.FactsOfDimensions.ContainsKey(memberdictfilter))
                                var ix = taxonomy.FactParts[memberdictfilter];
                                if (taxonomy.FactsOfParts.ContainsKey(ix))
                                {
                                    mfbq.DictFilters = memberdictfilter + ", ";
                                    if (factparts.ContainsKey(memberdictfilter))
                                    {
                                        mfbq.DictFilterIndexes.Add(factparts[memberdictfilter]);
                                    }
                                    querycontainer.AddChildQuery(mfbq);
                                }
                            }
                            //return resultquery;
                        }
                        else
                        {
                            if (factparts.ContainsKey(domaintag))
                            {
                                querycontainer.DictFilterIndexes.Add(factparts[domaintag]);
                            }
                        }
                    }
                }
            }



            SetCover(resultquery);


            return(resultquery);
        }
コード例 #10
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            var query = new FactPoolQuery();

            query.DictFilterIndexes.AddRange(parent.DictFilterIndexes);
            foreach (var child in currentfilter.Children)
            {
                var filter = child.Item as Filter;
                if (filter != null)
                {
                    var childquery = filter.GetQuery(taxonomy, child, query);
                    query.AddChildQuery(childquery);
                }
            }
            parent.AddChildQuery(query);
            return(query);
        }
コード例 #11
0
 public virtual void SetCover(FactBaseQuery query)
 {
     query.Cover = this.Cover;
 }
コード例 #12
0
        //public abstract Func<string, bool> GetFunc(FactBaseQuery fbq);
        //public virtual List<FactBaseQuery> GetQueries(Taxonomy taxonomy, int level)
        //{
        //    var queries = new List<FactBaseQuery>();
        //    return queries;
        //}

        //public virtual FactBaseQuery GetQuery(Taxonomy taxonomy, int level)
        //{
        //    var queries = new FactBaseQuery();
        //    return null;
        //}

        public virtual FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            var queries = new FactBaseQuery();

            return(null);
        }