Class: FinModeling::ForecastedReformulatedIncomeStatement

Inherits:
ReformulatedIncomeStatement show all
Defined in:
lib/finmodeling/forecasted_reformulated_income_statement.rb

Instance Attribute Summary

Attributes inherited from ReformulatedIncomeStatement

#period

Instance Method Summary collapse

Methods inherited from ReformulatedIncomeStatement

#core_oi_growth, empty_analysis, #fi_over_nfa, #fi_over_sales, forecast_next, #gross_margin, #ni_over_sales, #oi_growth, #operating_profit_margin, #re_oi, #revenue_growth, #sales_over_noa, #sales_profit_margin

Constructor Details

#initialize(period, operating_revenues, income_from_sales_after_tax, net_financing_income, comprehensive_income) ⇒ ForecastedReformulatedIncomeStatement

Returns a new instance of ForecastedReformulatedIncomeStatement.



3
4
5
6
7
8
9
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 3

def initialize(period, operating_revenues, income_from_sales_after_tax, net_financing_income, comprehensive_income)
  @period = period
  @orev = operating_revenues
  @income_from_sales_after_tax = income_from_sales_after_tax
  @net_financing_income = net_financing_income
  @comprehensive_income = comprehensive_income
end

Instance Method Details

#-(ris2) ⇒ Object

Raises:

  • (RuntimeError)


11
12
13
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 11

def -(ris2)
  raise RuntimeError.new("not implmeneted")
end

#analysis(re_bs, prev_re_is, prev_re_bs, expected_cost_of_capital) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 63

def analysis(re_bs, prev_re_is, prev_re_bs, expected_cost_of_capital)
  analysis = CalculationSummary.new
  analysis.title = ""
  analysis.rows = []
  
  if re_bs.nil?
    analysis.header_row = CalculationHeader.new(:key => "",   :vals => ["Unknown..."])
  else
    analysis.header_row = CalculationHeader.new(:key => "",   :vals => [re_bs.period.to_pretty_s + "E"])
  end
  
  analysis.rows << CalculationRow.new(:key => "Revenue ($MM)",   :vals => [operating_revenues.total.to_nearest_million])
  if Config.income_detail_enabled?
    analysis.rows << CalculationRow.new(:key => "COGS ($MM)",    :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "GM ($MM)",      :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "OE ($MM)",      :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "OISBT ($MM)",   :vals => [nil])
  end
  analysis.rows << CalculationRow.new(:key => "Core OI ($MM)",   :vals => [income_from_sales_after_tax.total.to_nearest_million])
  analysis.rows << CalculationRow.new(:key => "OI ($MM)",        :vals => [nil])
  analysis.rows << CalculationRow.new(:key => "FI ($MM)",        :vals => [net_financing_income.total.to_nearest_million])
  analysis.rows << CalculationRow.new(:key => "NI ($MM)",        :vals => [comprehensive_income.total.to_nearest_million])
  analysis.rows << CalculationRow.new(:key => "Gross Margin",    :vals => [nil])
  analysis.rows << CalculationRow.new(:key => "Sales PM",        :vals => [sales_profit_margin])
  analysis.rows << CalculationRow.new(:key => "Operating PM",    :vals => [nil])
  analysis.rows << CalculationRow.new(:key => "FI / Sales",      :vals => [fi_over_sales])
  analysis.rows << CalculationRow.new(:key => "NI / Sales",      :vals => [ni_over_sales])

  if !prev_re_bs.nil? && !prev_re_is.nil?
    analysis.rows << CalculationRow.new(:key => "Sales / NOA",   :vals => [sales_over_noa(prev_re_bs)])
    analysis.rows << CalculationRow.new(:key => "FI / NFA",      :vals => [fi_over_nfa(   prev_re_bs)])
    analysis.rows << CalculationRow.new(:key => "Revenue Growth",:vals => [revenue_growth(prev_re_is)])
    analysis.rows << CalculationRow.new(:key => "Core OI Growth",:vals => [core_oi_growth(prev_re_is)])
    analysis.rows << CalculationRow.new(:key => "OI Growth",     :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "ReOI ($MM)",    :vals => [re_oi(prev_re_bs, expected_cost_of_capital).to_nearest_million])
  else
    analysis.rows << CalculationRow.new(:key => "Sales / NOA",   :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "FI / NFA",      :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "Revenue Growth",:vals => [nil])
    analysis.rows << CalculationRow.new(:key => "Core OI Growth",:vals => [nil])
    analysis.rows << CalculationRow.new(:key => "OI Growth",     :vals => [nil])
    analysis.rows << CalculationRow.new(:key => "ReOI ($MM)",    :vals => [nil])
  end
  
  return analysis
end

#comprehensive_incomeObject



56
57
58
59
60
61
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 56

def comprehensive_income
  cs = FinModeling::CalculationSummary.new
  cs.title = "Comprehensive Income (CI)"
  cs.rows = [ CalculationRow.new(:key => "Comprehensive income", :vals => [@comprehensive_income] ) ]
  return cs
end

#cost_of_revenuesObject



22
23
24
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 22

def cost_of_revenues
  nil
end

#gross_revenueObject



26
27
28
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 26

def gross_revenue
  nil
end

#income_from_sales_after_taxObject



38
39
40
41
42
43
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 38

def income_from_sales_after_tax
  cs = FinModeling::CalculationSummary.new
  cs.title = "Operating Income from sales, after tax (OISAT)"
  cs.rows = [ CalculationRow.new(:key => "Operating income from sales (after tax)", :vals => [@income_from_sales_after_tax] ) ]
  return cs
end

#income_from_sales_before_taxObject



34
35
36
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 34

def income_from_sales_before_tax
  nil
end

#net_financing_incomeObject



49
50
51
52
53
54
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 49

def net_financing_income
  cs = FinModeling::CalculationSummary.new
  cs.title = "Net financing income, after tax (NFI)"
  cs.rows = [ CalculationRow.new(:key => "Net financing income", :vals => [@net_financing_income] ) ]
  return cs
end

#operating_expensesObject



30
31
32
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 30

def operating_expenses
  nil
end

#operating_income_after_taxObject



45
46
47
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 45

def operating_income_after_tax
  income_from_sales_after_tax # this simplified version assumes no non-sales operating income
end

#operating_revenuesObject



15
16
17
18
19
20
# File 'lib/finmodeling/forecasted_reformulated_income_statement.rb', line 15

def operating_revenues
  cs = FinModeling::CalculationSummary.new
  cs.title = "Operating Revenues"
  cs.rows = [ CalculationRow.new(:key => "Operating Revenues (OR)", :vals => [@orev] ) ]
  return cs
end