示例#1
0
        public async Task VerifyFixForIssue1Async()
        {
            var xbrlDoc = new XbrlDocument();
            await xbrlDoc.LoadAsync("http://xbrlsite.com/US-GAAP/BasicExample/2010-09-30/abc-20101231.xml");

            Assert.IsTrue(xbrlDoc.IsValid);
        }
示例#2
0
 public void AddXbrlNodes(XbrlDocument xbrlDoc)
 {
     foreach (var frag in xbrlDoc.XbrlFragments)
     {
         foreach (XbrlSchema schema in frag.Schemas)
         {
             if (schema != null)
             {
                 foreach (JeffFerguson.Gepsio.LinkbaseDocument linkbase in schema.LinkbaseDocuments)
                 {
                     if (linkbase.CalculationLinks.Count != 0)
                     {
                         foreach (CalculationLink calcLink in linkbase.CalculationLinks)
                         {
                             if (calcLink.CalculationArcs.Count != 0)
                             {
                                 foreach (CalculationArc calcArc in calcLink.CalculationArcs)
                                 {
                                     if (!NodeExists(calcArc.ToLocators[0].HrefResourceId.Split(new[] { '_' })[1], calcArc.FromLocator.HrefResourceId.Split(new[] { '_' })[1]))
                                     {
                                         XbrlNode nodeToAdd = new XbrlNode(
                                             calcArc.ToLocators[0].HrefResourceId.Split(new[] { '_' })[1],
                                             calcArc.FromLocator.HrefResourceId.Split(new[] { '_' })[1],
                                             (int)calcArc.Weight);
                                         InsertXbrlNode(nodeToAdd);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
示例#3
0
        public void VerifyFixForIssue1()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load("http://xbrlsite.com/US-GAAP/BasicExample/2010-09-30/abc-20101231.xml");
            Assert.IsTrue(xbrlDoc.IsValid);
        }
示例#4
0
        static void LoadValidInstance()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load(@"..\..\..\..\..\..\JeffFerguson.Gepsio.Test\XBRL-CONF-2014-12-10\Common\300-instance\301-01-IdScopeValid.xml");
            CheckValidity(xbrlDoc);
        }
示例#5
0
 private static void FindFactInDocument(XbrlDocument doc, string factName)
 {
     foreach (var currentFragment in doc.XbrlFragments)
     {
         FindFactInFragment(currentFragment, factName);
     }
 }
 public void AddXbrlNodes(XbrlDocument xbrlDoc)
 {
     foreach (var frag in xbrlDoc.XbrlFragments)
     {
         foreach (XbrlSchema schema in frag.Schemas)
         {
             if (schema != null)
             {
                 foreach (JeffFerguson.Gepsio.LinkbaseDocument linkbase in schema.LinkbaseDocuments)
                 {
                     if (linkbase.CalculationLinks.Count != 0)
                     {
                         foreach (CalculationLink calcLink in linkbase.CalculationLinks)
                         {
                             if (calcLink.CalculationArcs.Count != 0)
                             {
                                 foreach (CalculationArc calcArc in calcLink.CalculationArcs)
                                 {
                                     if (!NodeExists(calcArc.ToLocators[0].HrefResourceId.Split(new[] { '_' })[1], calcArc.FromLocator.HrefResourceId.Split(new[] { '_' })[1]))
                                     {
                                         XbrlNode nodeToAdd = new XbrlNode(
                                             calcArc.ToLocators[0].HrefResourceId.Split(new[] { '_' })[1],
                                             calcArc.FromLocator.HrefResourceId.Split(new[] { '_' })[1], 
                                             (int)calcArc.Weight);
                                         InsertXbrlNode(nodeToAdd);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
示例#7
0
 //-------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------
 // JIW Start
 // internal XbrlFragment(XbrlDocument ParentDocument, XmlNode XbrlRootNode)
 internal XbrlFragment(XbrlDocument ParentDocument, XmlNode XbrlRootNode, string definitionDirectory)
 {
     DefinitionDirectory = definitionDirectory;
     this.Document = ParentDocument;
     thisXbrlRootNode = XbrlRootNode;
     thisValidationErrors = new List<ValidationError>();
     CreateNamespaceManager();
     //---------------------------------------------------------------------------
     // Load.
     //---------------------------------------------------------------------------
     ReadTaxonomySchemaRefs();
     ReadContexts();
     ReadUnits();
     // JIW Start
     ReadCompanyData();
     ReadReportData();
     ReadDocumentData();
     ReadFinancialFacts();
     // JIW Stop
     ReadFacts();
     ReadFootnoteLinks();
     if (Loaded != null)
         Loaded(this, null);
     //---------------------------------------------------------------------------
     // Validate.
     //---------------------------------------------------------------------------
     ValidateContextRefs();
     ValidateUnitRefs();
     ValidateContextTimeSpansAgainstPeriodTypes();
     ValidateFootnoteLocations();
     ValidateFootnoteArcs();
     ValidateItems();
     if (Validated != null)
         Validated(this, null);
 }
示例#8
0
        static void LoadInvalidInstance()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load(@"..\..\..\..\..\..\JeffFerguson.Gepsio.Test\XBRL-CONF-2014-12-10\Common\300-instance\301-10-FootnoteFromOutOfScope.xml");
            CheckValidity(xbrlDoc);
        }
示例#9
0
        public void VerifyFixForIssue3_EnsureLocalSchemaLoad()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load(@"..\..\..\IssueTests\3\offentliggorelse.xml");
            Assert.IsTrue(xbrlDoc.XbrlFragments[0].Schemas.Count > 0);
        }
示例#10
0
 private static void ShowFactsInDocument(XbrlDocument doc)
 {
     foreach (var currentFragment in doc.XbrlFragments)
     {
         ShowFactsInFragment(currentFragment);
     }
 }
        //-------------------------------------------------------------------------------
        //-------------------------------------------------------------------------------
        private void ExecuteVariation(string TestcaseXmlSourceDirectory, XmlNode VariationNode)
        {
            var currentVariation = new XBRLCONFCR320070305TestVariation(VariationNode);

            if (string.IsNullOrEmpty(currentVariation.Instance) == true)
            {
                return;
            }

            var instanceXmlSourceFullPathBuilder = new StringBuilder();

            instanceXmlSourceFullPathBuilder.AppendFormat("{0}{1}{2}", TestcaseXmlSourceDirectory, Path.DirectorySeparatorChar, currentVariation.Instance);
            var instanceXmlSourceFullPath = instanceXmlSourceFullPathBuilder.ToString();

            var newXbrlDocument = new XbrlDocument();

            newXbrlDocument.Load(instanceXmlSourceFullPath);
            if (newXbrlDocument.IsValid == true)
            {
                if (currentVariation.ValidityExpected == false)
                {
                    AnnounceTestFailure(currentVariation);
                }
            }
            if (newXbrlDocument.IsValid == false)
            {
                if (currentVariation.ValidityExpected == true)
                {
                    AnnounceTestFailure(currentVariation, newXbrlDocument);
                }
            }
            thisTestsPassed++;
        }
示例#12
0
        [Ignore]         // iXBRL unsupported at this time
        public void UKGAAP2009Test()
        {
            var doc = new XbrlDocument();

            doc.Load(@"..\..\..\JeffFerguson.Test.Gepsio\ixbrl-samples\UKGAAP2009.xml");
            Assert.IsNotNull(doc.XbrlFragments);
            Assert.AreNotEqual <int>(0, doc.XbrlFragments.Count, "No fragments found in document.");
        }
示例#13
0
        static void Main(string[] args)
        {
            var xbrlDoc1 = new XbrlDocument();

            xbrlDoc1.Load(@"..\..\..\..\..\..\JeffFerguson.Gepsio.Test\XBRL-CONF-2014-12-10\Common\300-instance\301-01-IdScopeValid.xml");
            ShowContextsInDocument(xbrlDoc1);
            ShowFactsInDocument(xbrlDoc1);
        }
示例#14
0
        public void GetRoleTypeTest()
        {
            var NewXbrlDocument = new XbrlDocument();

            NewXbrlDocument.Load(@"..\..\..\JeffFerguson.Test.Gepsio\RoleType\tgt-20130202.xml");
            var balanceSheetRoleType = NewXbrlDocument.GetRoleType("BalanceSheet");

            Assert.IsNotNull(balanceSheetRoleType);
        }
        public void PresentableTreeForAig20130630()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load(GetRelativePathForDocument("aig-20130630.xml"));
            var firstFragment = xbrlDoc.XbrlFragments[0];
            var tree          = firstFragment.GetPresentableFactTree();

            Assert.IsNotNull(tree);
        }
示例#16
0
        public void VerifyFixForIssue3_EnsureAlternativeSchemaLoadPath()
        {
            var xbrlDoc = new XbrlDocument();
            var d       = Directory.GetCurrentDirectory();

            xbrlDoc.Load(@"..\..\..\IssueTests\3\offentliggorelse.xml");
            var loadedSchema = xbrlDoc.XbrlFragments[0].Schemas[0];

            Assert.AreNotEqual(loadedSchema.SchemaReferencePath, loadedSchema.LoadPath);
        }
示例#17
0
        static void Main(string[] args)
        {
            var xbrlDoc = new XbrlDocument();

            Console.Write("Loading...");
            xbrlDoc.Load("https://www.sec.gov/Archives/edgar/data/845877/000084587717000155/agm-20170930.xml");
            Console.WriteLine("done.");
            var calculationLinkbase = FindFirstAvailableCalculationLinkbase(xbrlDoc);

            PrintArcFactsAndWeights(calculationLinkbase);
        }
示例#18
0
        public void aig20130630()
        {
            var xbrlDoc        = new XbrlDocument();
            var timeBeforeLoad = System.DateTime.Now;

            xbrlDoc.Load(GetRelativePathForDocument("aig-20130630.xml"));
            var timeAfterLoad = System.DateTime.Now;
            var loadTime      = timeAfterLoad - timeBeforeLoad;

            Assert.IsTrue(xbrlDoc.IsValid);
        }
示例#19
0
        public void WorkItem9612Test()
        {
            var xbrlDocument = new XbrlDocument();

            xbrlDocument.Load(@"..\..\..\JeffFerguson.Test.Gepsio\WorkItemsInput\WorkItem9612\intc-20111231.xml");
            Assert.AreEqual <int>(1, xbrlDocument.XbrlFragments.Count);
            var firstFragment = xbrlDocument.XbrlFragments[0];

            Assert.AreEqual <int>(1, firstFragment.Schemas.Count);
            var firstSchema = firstFragment.Schemas[0];
        }
示例#20
0
        public void LoadXbrlFromStreamSuccessfully()
        {
            var    webClient = new WebClient();
            string readXml   = webClient.DownloadString("http://www.xbrl.org/taxonomy/int/fr/ias/ci/pfs/2002-11-15/SampleCompany-2002-11-15.xml");

            byte[]       byteArray = Encoding.ASCII.GetBytes(readXml);
            MemoryStream memStream = new MemoryStream(byteArray);
            var          newDoc    = new XbrlDocument();

            newDoc.Load(memStream);
            Assert.IsTrue(newDoc.IsValid);
        }
示例#21
0
        static void Main(string[] args)
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load(@"..\..\..\..\..\..\JeffFerguson.Gepsio.Test\XBRL-CONF-2014-12-10\Common\300-instance\301-01-IdScopeValid.xml");

            Console.WriteLine($"Number of fragments in the loaded document: {xbrlDoc.XbrlFragments.Count}.");
            foreach (var currentFragment in xbrlDoc.XbrlFragments)
            {
                // Work with the fragment here.
            }
        }
示例#22
0
        public void LoadXbrlFromStreamWithRelativeSchema()
        {
            var    webClient = new WebClient();
            string readXml   = webClient.DownloadString("http://www.sec.gov/Archives/edgar/data/789019/000119312515020351/msft-20141231.xml");

            byte[]       byteArray = Encoding.ASCII.GetBytes(readXml);
            MemoryStream memStream = new MemoryStream(byteArray);
            var          newDoc    = new XbrlDocument();

            newDoc.Load(memStream);
            Assert.IsFalse(newDoc.IsValid);
        }
示例#23
0
        public void VerifyFixForIssue10()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load("https://www.sec.gov/Archives/edgar/data/1688568/000168856818000036/csc-20170331.xml");
            foreach (var validationError in xbrlDoc.ValidationErrors)
            {
                if (validationError.Message.Contains("http://fasb.org/us-gaap/2017-01-31") == true)
                {
                    Assert.Fail();
                }
            }
        }
示例#24
0
        static void Main(string[] args)
        {
            var xbrlDoc1 = new XbrlDocument();

            xbrlDoc1.Load(@"..\..\JeffFerguson.Gepsio.Test\XBRL-CONF-2014-12-10\Common\300-instance\301-01-IdScopeValid.xml");
            ShowFactsInDocument(xbrlDoc1);
            FindFactInDocument(xbrlDoc1, "changeInRetainedEarnings");

            var xbrlDoc2 = new XbrlDocument();

            xbrlDoc2.Load(@"..\..\JeffFerguson.Gepsio.Test\XBRL-CONF-2014-12-10\Common\300-instance\306-02-RequiredInstanceTupleValid.xml");
            ShowFactsInDocument(xbrlDoc2);
        }
        public string GetXbrl()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load("https://www.sec.gov/Archives/edgar/data/874292/000144526020000011/aey-20191231.xml");
            return(JsonConvert.SerializeObject(xbrlDoc.XbrlFragments
                                               .SelectMany(frag => frag.Facts)
                                               .Select(fact => new DTOs.FactResult
            {
                Name = fact.Name,
                Value = (fact as Item).Value
            }), Formatting.Indented));
        }
示例#26
0
        public void WorkItem9571Test()
        {
            var xbrlDocument = new XbrlDocument();

            xbrlDocument.Load(@"..\..\..\JeffFerguson.Test.Gepsio\WorkItemsInput\WorkItem9571\Sample-Instance-Proof.xml");
            Assert.AreEqual <int>(1, xbrlDocument.XbrlFragments.Count);
            var firstFragment = xbrlDocument.XbrlFragments[0];

            Assert.AreEqual <int>(1, firstFragment.Schemas.Count);
            var firstSchema = firstFragment.Schemas[0];

            Assert.AreEqual <int>(60, firstSchema.RoleTypes.Count);
        }
示例#27
0
 public void VerifyFixForIssue16()
 {
     try
     {
         CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fr");
         var xbrlDoc = new XbrlDocument( );
         xbrlDoc.Load("https://www.sec.gov/Archives/edgar/data/1688568/000168856818000036/csc-20170331.xml");
     }
     catch (FormatException)
     {
         Assert.Fail("Decimal number format should be culture independant.");
     }
 }
示例#28
0
        public async Task VerifyFixForIssue22Async()
        {
            var xbrlDoc = new XbrlDocument();

            try
            {
                await xbrlDoc.LoadAsync(@"https://www.sec.gov/Archives/edgar/data/1018724/000101872419000004/amzn-20181231.xml");
            }
            catch (System.Exception)
            {
                Assert.Fail();
            }
        }
        public void WalkPresentableTree()
        {
            var xbrlDoc = new XbrlDocument();

            xbrlDoc.Load(GetRelativePathForDocument("aig-20130630.xml"));
            var firstFragment = xbrlDoc.XbrlFragments[0];
            var tree          = firstFragment.GetPresentableFactTree();

            foreach (var currentNode in tree.TopLevelNodes)
            {
                WalkPresentableTreeNode(currentNode, 0);
            }
        }
        public Company Populate(XbrlDocument xbrlDoc, string symbol)
        {
            Company comp = new Company();
            comp.Symbol = symbol;
            foreach (XbrlFragment frag in xbrlDoc.XbrlFragments)
            {
                foreach (Item xbrlItem in frag.Facts)
                {
                    comp = CheckItem(xbrlItem, comp);
                }
            }

            return comp;
        }
        public Company Populate(XbrlDocument xbrlDoc, string symbol)
        {
            Company comp = new Company();

            comp.Symbol = symbol;
            foreach (XbrlFragment frag in xbrlDoc.XbrlFragments)
            {
                foreach (Item xbrlItem in frag.Facts)
                {
                    comp = CheckItem(xbrlItem, comp);
                }
            }

            return(comp);
        }
示例#32
0
 static void CheckValidity(XbrlDocument doc)
 {
     if (doc.IsValid == true)
     {
         Console.WriteLine("Congratulations! This document is valid according to the XBRL specification.");
     }
     else
     {
         Console.WriteLine("This document is invalid according to the XBRL specification.");
         foreach (var validationError in doc.ValidationErrors)
         {
             Console.WriteLine(validationError.Message);
         }
     }
 }
示例#33
0
        public void Example13Row4()
        {
            XbrlDocument NewXbrlDocument = new XbrlDocument();

            NewXbrlDocument.Load(@"..\..\..\JeffFerguson.Test.Gepsio\InferPrecisionTestDocuments\Example13Row4.xbrl");
            Assert.AreEqual <int>(1, NewXbrlDocument.XbrlFragments.Count, "No XBRL fragments found.");
            XbrlFragment FirstFragment = NewXbrlDocument.XbrlFragments[0];

            Assert.AreEqual <int>(1, FirstFragment.Facts.Count, "No facts found in fragment.");
            Item FirstFact = FirstFragment.Facts[0] as Item;

            Assert.IsTrue(FirstFact.DecimalsSpecified);
            Assert.IsFalse(FirstFact.PrecisionSpecified);
            Assert.IsTrue(FirstFact.PrecisionInferred);
            Assert.AreEqual <int>(5, FirstFact.Precision);
        }
        public void ProcessXbrlInstanceDocument(string xmlUrl, Dictionary<string, List<string>> xbrlTaxonomyTree)
        {
            JeffFerguson.Gepsio.XbrlDocument xbrlDoc = new XbrlDocument();
            xbrlDoc.Load(xmlUrl);

            //AddXbrlNodes(xbrlDoc);

            int yearsToLoad = 3;

            string fileName = System.IO.Path.GetFileNameWithoutExtension(xmlUrl);
            string tickerSymbol = fileName.Split(new[] { '-' })[0];
            int year = GetFiscalYear(tickerSymbol, xbrlDoc.XbrlFragments[0]);

            IncomeStatement incToAdd = new IncomeStatement();
            BalanceSheet balToAdd = new BalanceSheet();
            CompanyAnnualData compAnnToAdd = new CompanyAnnualData();

            Dictionary<string, Object> yahooStats = GetYahooStatistics(tickerSymbol);

            CreateCompanyObject(tickerSymbol, xbrlDoc, yahooStats);

            for (int y = year; y > year - yearsToLoad; y--)
            {
                XbrlIncomeStatementFilter incFilter = new XbrlIncomeStatementFilter();
                XbrlBalanceSheetFilter bsFilter = new XbrlBalanceSheetFilter();
                XbrlCompanyAnnualFilter compAnFilter = new XbrlCompanyAnnualFilter();
                
                incToAdd = incFilter.Populate(this, xbrlDoc, tickerSymbol, y, xbrlTaxonomyTree);
                balToAdd = bsFilter.Populate(xbrlDoc, tickerSymbol, y, xbrlTaxonomyTree);
                compAnnToAdd = compAnFilter.Populate(xbrlDoc, tickerSymbol, y);

                compAnnToAdd.LeveredBeta = Convert.ToDecimal(yahooStats["Beta"]);
                compAnnToAdd.DividendYield = Convert.ToDecimal(yahooStats["DividendYield"]);

                IncomeStatementBL.Instance.UpdateIncomeStatement(incToAdd);
                BalanceSheetBL.Instance.UpdateBalanceSheet(balToAdd);
                CompanyAnnualDataBL.Instance.UpdateCompanyAnnual(compAnnToAdd);
            }
        }
        public CompanyAnnualData Populate(XbrlDocument xbrlDoc, string symbol, int year)
        {
            CompanyAnnualData ann = new CompanyAnnualData();
            ann.Symbol = symbol;
            ann.Year = year;

            CompanyAnnualFilterItem item = new CompanyAnnualFilterItem();

            foreach (XbrlFragment frag in xbrlDoc.XbrlFragments)
            {
                foreach (Item xbrlItem in frag.Facts)
                {
                    if (xbrlItem.ContextRef.InstantDate.Year == ann.Year)
                    {
                        if (!xbrlItem.Type.Name.Equals("monetaryItemType"))
                        {
                            item = CheckItem(xbrlItem, item);
                        }      
                    }
                }
            }
            ann = PopulateFinancialStatement(item, ann);

            if (ann.SharesOutstanding < 0)
            {
                ann.SharesOutstanding = ann.SharesOutstanding * -1;
            }
            if (ann.SharesOutstanding < 1000)
            {
                ann.SharesOutstanding = ann.SharesOutstanding * 1000000;
            }
            else if (ann.SharesOutstanding < 1000000)
            {
                ann.SharesOutstanding = ann.SharesOutstanding * 1000;
            }

            return ann;
        }
        public IncomeStatement Populate(XbrlNodeBL nodeMngr, XbrlDocument xbrlDoc, string symbol, int year, Dictionary<string, List<string>> xbrlTaxonomyTree)
        {    
            IncomeStatement inc = new IncomeStatement();
            inc.Symbol = symbol;
            inc.Year = year;

            IncomeStatementFilterItem item = new IncomeStatementFilterItem();

            foreach (XbrlFragment frag in xbrlDoc.XbrlFragments)
            {
                foreach (Item xbrlItem in frag.Facts)
                {
                    if (nodeMngr.IsAnnualItem(xbrlItem) && xbrlItem.Type.Name.Equals("monetaryItemType"))
                    {
                        if (xbrlItem.ContextRef.PeriodEndDate.Year == inc.Year)
                        {
                            item = CheckItem(xbrlItem, item, xbrlTaxonomyTree);
                        }
                    } 
                }
            }
            return PopulateFinancialStatement(item, inc);
        }
        public BalanceSheet Populate(XbrlDocument xbrlDoc, string symbol, int year, Dictionary<string, List<string>> xbrlTaxonomyTree)
        {
            BalanceSheet bal = new BalanceSheet();
            bal.Symbol = symbol;
            bal.Year = year;

            BalanceSheetFilterItem item = new BalanceSheetFilterItem();

            foreach (XbrlFragment frag in xbrlDoc.XbrlFragments)
            {
                foreach (Item xbrlItem in frag.Facts)
                {
                    if (xbrlItem.ContextRef.InstantPeriod && xbrlItem.Type.Name.Equals("monetaryItemType"))
                    {
                        if (xbrlItem.ContextRef.InstantDate.Year == bal.Year)
                        {
                            item = CheckItem(xbrlItem, item, xbrlTaxonomyTree);
                        }
                    }
                }
            }
            return PopulateFinancialStatement(item,bal);
        }