class Camt::Statement

Attributes

country_code[R]
node[R]

Public Class Methods

new(xml_node, country_code) click to toggle source
# File lib/camt/statement.rb, line 6
def initialize(xml_node, country_code)
  @node = xml_node
  @country_code = country_code
end

Public Instance Methods

created_at() click to toggle source
# File lib/camt/statement.rb, line 19
def created_at
  @created_at ||= Time.parse(node.at('./CreDtTm').text)
end
date() click to toggle source
# File lib/camt/statement.rb, line 34
def date
  @date ||= Date.parse(node.at('./Ntry[1]/ValDt/Dt | ./Ntry[1]/ValDt/DtTm').text)
end
electronic_sequence_number() click to toggle source
# File lib/camt/statement.rb, line 15
def electronic_sequence_number
  @electronic_sequence_number ||= node.at('./ElctrncSeqNb').text
end
end_balance() click to toggle source
# File lib/camt/statement.rb, line 42
def end_balance
  @end_balance ||= get_end_balance
end
iban()
Alias for: local_account
id() click to toggle source
# File lib/camt/statement.rb, line 11
def id
  @id ||= node.at('./Id').text
end
local_account() click to toggle source
# File lib/camt/statement.rb, line 23
def local_account
  @local_account ||= node.at('./Acct/Id').text.strip
end
Also aliased as: iban
local_currency() click to toggle source
# File lib/camt/statement.rb, line 29
def local_currency
  @local_currency ||= node.at('./Acct/Ccy').try(:text) ||
      node.at('./Bal/Amt').attribute("Ccy").value
end
start_balance() click to toggle source
# File lib/camt/statement.rb, line 38
def start_balance
  @start_balance ||= get_start_balance
end
transactions() click to toggle source
# File lib/camt/statement.rb, line 46
def transactions
  @transactions ||= node.xpath('./Ntry').map { |node| parse_Ntry(node) }
end

Private Instance Methods

get_balance_type_node(node, balance_type) click to toggle source
# File lib/camt/statement.rb, line 52
def get_balance_type_node node, balance_type
  # :param node: BkToCstmrStmt/Stmt/Bal node
  # :param balance type: one of 'OPBD', 'PRCD', 'ITBD', 'CLBD'
  node.at("./Bal/Tp/CdOrPrtry/Cd[text()='#{balance_type}']/../../..")
end
get_end_balance() click to toggle source
# File lib/camt/statement.rb, line 70
def get_end_balance
  # Find the (only) balance node with code ClosingBalance (Closing Booked), or
  # the second (and last) balance node with code InterimBalance (Interim Booked) in
  # the case of continued pagination. Use ClosingAvailable otherwise.
  #
  # :param node: BkToCstmrStmt/Stmt/Bal node
  balance_type_node = nil
  ['CLBD', 'ITBD', 'CLAV'].detect{|code| balance_type_node = get_balance_type_node(node, code) }
  Amount.new(balance_type_node).value if balance_type_node
end
get_start_balance() click to toggle source
# File lib/camt/statement.rb, line 58
def get_start_balance
  # Find the (only) balance node with code OpeningBalance, or
  # the only one with code 'PreviousClosingBalance'
  # or the first balance node with code InterimBalance in
  # the case of preceeding pagination.
  #
  # :param node: BkToCstmrStmt/Stmt/Bal node
  balance_type_node = nil
  ['OPBD', 'PRCD', 'ITBD'].detect{|code| balance_type_node = get_balance_type_node(node, code) }
  Amount.new(balance_type_node).value
end
parse_Ntry(node) click to toggle source
# File lib/camt/statement.rb, line 81
def parse_Ntry(node)
  # :param node: Ntry node
  Transaction.new(node, country_code)
end