% FASB SFAC 6, Elements of Financial Statements, in Prolog % % https://www.fasb.org/pdf/con6.pdf % % Created by Charles Hoffman, CPA (charles.hoffman@me.com). % % Public domain: https://creativecommons.org/publicdomain/zero/1.0/ % % Run SWI-Prolog using https://swish.swi-prolog.org/ % term(asset). term(liability). term(equity). term(comprehensiveIncome). term(investmentsByOwners). term(distributionsToOwners). term(revenues). term(expenses). term(gains). term(losses). structure(statementOfFinancialPosition). structure(statementOfIncome). structure(statementOfChangesInEquity). entity(abc_company). period(2020). period(2019). assertion(does_balance_sheet_balance). assertion(does_income_statement_foot). assertion(does_equity_roll_forward). fact(term(asset), entity(abc_company), period(2020), 3500). fact(term(asset), entity(abc_company), period(2019), 0). fact(term(liability), entity(abc_company), period(2020),0). fact(term(liability), entity(abc_company), period(2019),0). fact(term(equity), entity(abc_company), period(2020),3500). fact(term(equity), entity(abc_company), period(2019),0). fact(term(investmentsByOwners), entity(abc_company), period(2020),1000). fact(term(distributionsToOwners), entity(abc_company), period(2020),500). fact(term(revenues), entity(abc_company), period(2020),7000). fact(term(expenses), entity(abc_company), period(2020),3000). fact(term(gains), entity(abc_company), period(2020),1000). fact(term(losses), entity(abc_company), period(2020),2000). fact(term(comprehensiveIncome), entity(abc_company), period(2020),3000). % rule Assets = Liabilities + Equity % does_balance_sheet_balance(Entity, Period) :- fact(term(asset),entity(Entity),period(Period),Asset), fact(term(liability),entity(Entity),period(Period),Liability), fact(term(equity),entity(Entity),period(Period),Equity), Asset is Liability + Equity. % rule ComprehensiveIncome = Revenues - Expenses + Gains - Losses % does_income_statement_foot(Entity, Period) :- fact(term(comprehensiveIncome),entity(Entity),period(Period),ComprehensiveIncome), fact(term(revenues),entity(Entity),period(Period),Revenues), fact(term(expenses),entity(Entity),period(Period),Expenses), fact(term(gains),entity(Entity),period(Period),Gains), fact(term(losses),entity(Entity),period(Period),Losses), ComprehensiveIncome is Revenues - Expenses + Gains - Losses. % rule EndingEquity = BeginningEquity + ComprehensiveIncome + InvestmentsByOwners - DistributionsToOwners % does_equity_roll_forward(Entity, Period) :- fact(term(equity),entity(Entity),period(2019),BeginningEquity), fact(term(comprehensiveIncome),entity(Entity),period(Period),ComprehensiveIncome), fact(term(equity),entity(Entity),period(Period),EndingEquity), fact(term(distributionsToOwners),entity(Entity),period(Period),DistributionsToOwners), EndingEquity is BeginningEquity + ComprehensiveIncome - DistributionsToOwners. % rule EndingEquity = BeginningEquity + ComprehensiveIncome + InvestmentsByOwners - DistributionsToOwners % does_equity_roll_forward(Entity, period_range(BeginningPeriod,EndPeriod)) :- fact(term(equity),entity(Entity),period(BeginningPeriod),BeginningEquity), fact(term(comprehensiveIncome),entity(Entity),period(EndPeriod),ComprehensiveIncome), fact(term(equity),entity(Entity),period(EndPeriod),EndingEquity), fact(term(investmentsByOwners),entity(Entity),period(EndPeriod),InvestmentsByOwners), fact(term(distributionsToOwners),entity(Entity),period(EndPeriod),DistributionsToOwners), EndingEquity is BeginningEquity + ComprehensiveIncome + InvestmentsByOwners - DistributionsToOwners. /** ?- fact(Term, Entity, Period, Value). ?- does_balance_sheet_balance(abc_company, 2020). ?- does_income_statement_foot(abc_company, 2020). ?- does_equity_roll_forward(abc_company, period_range(2019, 2020)). ?- does_equity_roll_forward(abc_company, period_range(2018, 2020)). */