コード例 #1
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);
        }
コード例 #2
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);
        }