Class: FinModeling::ComprehensiveIncomeCalculation

Inherits:
CompanyFilingCalculation show all
Includes:
CanCacheClassifications, CanCacheSummaries, CanClassifyRows
Defined in:
lib/finmodeling/comprehensive_income_calculation.rb

Constant Summary collapse

BASE_FILENAME =
File.join(FinModeling::BASE_PATH, "summaries/comprehensive_income_")
ALL_STATES =
[ :or, :cogs, :oe, :oibt, :fibt, :tax, :ooiat, :fiat, :ni, :ooci, :ooci_nci, :foci, :unkoci ]
NEXT_STATES =
{ nil        => [ :or,                                                :ni                                   ],
:or        => [ :or, :cogs, :oe, :oibt, :fibt                                                             ],
:cogs      => [      :cogs, :oe, :oibt, :fibt, :tax                                                       ],
:oe        => [             :oe, :oibt, :fibt, :tax                                                       ],
:oibt      => [                  :oibt, :fibt, :tax                                                       ], # obit/fibt can cycle back/forth
:fibt      => [                  :obit, :fibt, :tax                                                       ], # obit/fibt can cycle back/forth
:tax       => [                                      :ooiat, :fiat,      :ooci, :ooci_nci, :foci, :unkoci ], # 1 tax item. then moves forward.
:ooiat     => [                                      :ooiat, :fiat,      :ooci, :ooci_nci, :foci, :unkoci ], # ooiat/fiat can cycle back/forth
:fiat      => [                                      :ooiat, :fiat,      :ooci, :ooci_nci, :foci, :unkoci ], # ooiat/fiat can cycle back/forth

:ni        => [                                                          :ooci, :ooci_nci, :foci, :unkoci ], # after ni, no ordering

:ooci      => [                                                          :ooci, :ooci_nci, :foci, :unkoci ], # after ni, no ordering
:ooci_nci  => [                                                          :ooci, :ooci_nci, :foci, :unkoci ], # after ni, no ordering
:foci      => [                                                          :ooci, :ooci_nci, :foci, :unkoci ], # after ni, no ordering
:unkoci    => [                                                          :ooci, :ooci_nci, :foci, :unkoci ] }

Instance Attribute Summary

Attributes inherited from CompanyFilingCalculation

#calculation

Instance Method Summary collapse

Methods inherited from CompanyFilingCalculation

#initialize, #label, #leaf_items, #leaf_items_sum, #periods, #write_constructor

Constructor Details

This class inherits a constructor from FinModeling::CompanyFilingCalculation

Instance Method Details

#has_net_income_item?Boolean

Returns:

  • (Boolean)


53
54
55
56
57
# File 'lib/finmodeling/comprehensive_income_calculation.rb', line 53

def has_net_income_item?
  @has_net_income_item ||= summary(:period => periods.last).rows.any? do |row|
    row.type == :ni
  end
end

#has_revenue_item?Boolean

Returns:

  • (Boolean)


47
48
49
50
51
# File 'lib/finmodeling/comprehensive_income_calculation.rb', line 47

def has_revenue_item?
  @has_revenue_item ||= summary(:period => periods.last).rows.any? do |row|
    row.type == :or
  end
end

#summary(args) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/finmodeling/comprehensive_income_calculation.rb', line 27

def summary(args)
  summary_cache_key = args[:period].to_pretty_s
  thesummary = lookup_cached_summary(summary_cache_key)
  return thesummary if !thesummary.nil?
 
  mapping = Xbrlware::ValueMapping.new
  mapping.policy[:debit] = :flip

  thesummary = super(:period => args[:period], :mapping => mapping)
  if !lookup_cached_classifications(BASE_FILENAME, thesummary.rows)
    lookahead = [4, thesummary.rows.length-1].min
    classify_rows(ALL_STATES, NEXT_STATES, thesummary.rows, FinModeling::ComprehensiveIncomeStatementItem, lookahead)
    save_cached_classifications(BASE_FILENAME, thesummary.rows)
  end

  save_cached_summary(summary_cache_key, thesummary)

  return thesummary
end