コード例 #1
0
ファイル: XmlNodeHandlers.cs プロジェクト: vladimirmmm/Kraken
 public bool Handle(XmlNode node, XbrlTaxonomyDocument taxonomydocument)
 {
     if (node.Name.ToLower().In(XmlTagNames))
     {
         return(Handler(node, taxonomydocument));
     }
     return(false);
 }
コード例 #2
0
ファイル: XmlNodeHandlers.cs プロジェクト: vladimirmmm/Kraken
        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);
        }
コード例 #3
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);
        }
コード例 #4
0
ファイル: XbrlEngine.cs プロジェクト: vladimirmmm/Kraken
        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);
        }