public bool Handle(XmlNode node, XbrlTaxonomyDocument taxonomydocument) { if (node.Name.ToLower().In(XmlTagNames)) { return(Handler(node, taxonomydocument)); } return(false); }
public bool HandleDocument(XbrlTaxonomyDocument taxonomydocument) { var alltags = taxonomydocument.XmlDocument.GetElementsByTagName("*").Cast <XmlNode>(); var tags = alltags.Where(i => i.Name.ToLower().In(XmlTagNames)); foreach (var tag in tags) { Handle(tag, taxonomydocument); } return(true); }
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); }
public override bool LoadTaxonomy(string filepath) { if (string.IsNullOrEmpty(filepath)) { return(false); } TaxLoadStartDate = DateTime.Now; if (CurrentTaxonomy != null) { CurrentXbrlTaxonomy.ClearObjects(); CurrentTaxonomy = null; } var isloaded = false; Logger.WriteLine("Loading Taxonomy " + filepath); var taxonomydocument = new XbrlTaxonomyDocument(); if (taxonomydocument.LoadTaxonomyDocument(filepath, null)) { var processedfolder = taxonomydocument.LocalPath.Remove(taxonomydocument.LocalPath.LastIndexOf(".")); Logger.WriteLine("Processed Taxonomy Folder: " + processedfolder); taxonomydocument.ClearDocument(); Trigger_TaxonomyLoad(filepath); CurrentTaxonomy = new XbrlTaxonomy(filepath); CurrentTaxonomy.TaxonomyToUI(); LogicalModel.Helpers.FileManager.Clear(); ////Test //LogicalModel.Settings.Current.ReloadFullTaxonomy = true; //LogicalModel.Settings.Current.ReDownloadFiles= true; ////End test CurrentTaxonomy.FactsManager.maxdictnr = 1000; CurrentTaxonomy.FactsManager.SaveToFile = true; CurrentTaxonomy.FactsManager.DataFolder = CurrentTaxonomy.TaxonomyFactsFolder; //CurrentTaxonomy.FactsManager.ManageLoadedFacts = CurrentTaxonomy.ManageLoadedFacts; CurrentTaxonomy.LoadAllReferences(); CheckMapping(); /* * var metdoc = CurrentXbrlTaxonomy.TaxonomyDocuments.FirstOrDefault(i => i.FileName == "met.xsd"); * CurrentTaxonomy.ConceptNameSpace = metdoc.TargetNamespacePrefix; * */ //CurrentTaxonomy.Prefix = CurrentTaxonomy.ConceptNameSpace.Remove(CurrentTaxonomy.ConceptNameSpace.LastIndexOf("_")) + "_"; CurrentTaxonomy.LoadLabels(); CurrentTaxonomy.LoadSchemaElements(); CurrentTaxonomy.LoadConcepts(); CurrentTaxonomy.LoadDimensions(); CurrentTaxonomy.LoadHierarchy(); CurrentTaxonomy.LoadTables(); CurrentXbrlTaxonomy.ClearXmlObjects(); CurrentTaxonomy.LoadFacts(); //CurrentTaxonomy.LoadHierarchy(); CurrentTaxonomy.LoadUnits(); CurrentTaxonomy.LoadValidationFunctions(); CurrentXbrlTaxonomy.ClearXmlObjects(); CurrentTaxonomy.TaxonomyToUI(); isloaded = true; Utilities.FS.DeleteFile(CurrentTaxonomy.CurrentInstancePath); Utilities.FS.DeleteFile(CurrentTaxonomy.CurrentInstanceValidationResultPath); if (!IsInstanceLoading) { this.CurrentInstance = (XbrlInstance)this.CurrentTaxonomy.GetNewInstance(); Utilities.FS.DeleteFile(CurrentTaxonomy.CurrentInstancePath); Utilities.FS.DeleteFile(CurrentTaxonomy.CurrentInstanceValidationResultPath); //Utilities.FS.DeleteFile(CurrentTaxonomy.CurrentInstancePath); this.CurrentInstance.SaveToJson(); } Logger.WriteLine(String.Format("Loading Taxonomy finished in {0:0.0}s", DateTime.Now.Subtract(TaxLoadStartDate.Value).TotalSeconds)); Logger.Flush(); Trigger_TaxonomyLoaded(filepath); } else { Logger.WriteLine("Can't Load Taxonomy " + filepath); Trigger_TaxonomyLoadFailed(filepath); } return(isloaded); }