module Cremul::ParserHelper

Constants

BENEFICIARY
BUSINESS_FUNCTION_SEGMENT
CODES
CURRENCIES_SEGMENT
DATA_SEPARATOR
DATE_SEGMENT
ELEMENT_SEPARATOR
FINANCIAL_INSTITUTION_SEGMENT
FREETEXT_SEGMENT
LINE_ITEM_SEGMENT
MESSAGE_BEGIN
MESSAGE_HEADER
MONETARY_AMOUNT_SEGMENT

Example: FII+BF+12345678901' (Beneficiary bank account number)

NAME_ADDRESS_SEGMENT
PROCESS_TYPE_SEGMENT
REFERENCE_SEGMENT
REF_TYPES
REPETITION_SEPARATOR
SEGMENT_DELIMITER
SEQUENCE_SEGMENT

Public Instance Methods

doc_segment_index(segments, start_pos, end_pos=nil) click to toggle source
# File lib/cremul/parser_helper.rb, line 106
def doc_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^DOC.*/)
end
find_index_by_regex(segments, start_pos, end_pos=nil, regex) click to toggle source
# File lib/cremul/parser_helper.rb, line 75
def find_index_by_regex(segments, start_pos, end_pos=nil, regex)
  if end_pos.nil?
    end_pos = next_tx_sequence_segment_index(segments, start_pos+1)
    if end_pos.nil? # no more segments
      end_pos = segments.size
    end
  end
  index = nil
  unless end_pos.nil?
    index = segments[start_pos, end_pos-start_pos].index { |x| regex.match(x) }
    index += start_pos unless index.nil?
  end
  index
end
get_messages_in_file(segments) click to toggle source
# File lib/cremul/parser_helper.rb, line 186
def get_messages_in_file(segments)
  m = {}
  n = 0
  segments.each_index do |i|
    if /^UNA.*/.match(segments[i])
      n += 1
      m[n] = i
    end
  end
  m
end
last_segment_index_in_tx(segments, tx_segment_pos) click to toggle source
# File lib/cremul/parser_helper.rb, line 199
def last_segment_index_in_tx(segments, tx_segment_pos)
  next_tx_index = next_tx_sequence_segment_index(segments, tx_segment_pos+1)
  next_line_index = next_line_segment_index(segments, tx_segment_pos)
  cnt_index = line_count_segment_index(segments)

  if next_tx_index
    next_tx_index - 1
  elsif next_line_index
    next_line_index - 1
  else
    cnt_index - 1
  end
end
line_count_segment_index(segments) click to toggle source
# File lib/cremul/parser_helper.rb, line 137
def line_count_segment_index(segments)
  segments.index { |x| /^CNT\+LIN?:\d/.match(x) }
end
msg_id_segment_index(segments) click to toggle source
# File lib/cremul/parser_helper.rb, line 71
def msg_id_segment_index(segments)
  segments.index { |x| /^UNH.*/.match(x) }
end
next_amount_segment_index(segments, start_pos, end_pos=nil) click to toggle source
# File lib/cremul/parser_helper.rb, line 94
def next_amount_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^MOA.*/)
end
next_date_segment_index(segments, start_pos, end_pos=nil) click to toggle source
# File lib/cremul/parser_helper.rb, line 90
def next_date_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^DTM.*/)
end
next_fii_bf_segment_index(segments, start_pos, end_pos=nil) click to toggle source

Bank account of beneficiary

# File lib/cremul/parser_helper.rb, line 124
def next_fii_bf_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^FII\+BF.*/)
end
next_fii_or_segment_index(segments, start_pos, end_pos=nil) click to toggle source

Bank account of payer

# File lib/cremul/parser_helper.rb, line 129
def next_fii_or_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^FII\+OR.*/)
end
next_line_segment_index(segments, start_pos) click to toggle source
# File lib/cremul/parser_helper.rb, line 98
def next_line_segment_index(segments, start_pos)
  find_index_by_regex(segments, start_pos, segments.size, /^LIN\+\d/)
end
next_nad_segment_index(segments, start_pos, end_pos=nil) click to toggle source
# File lib/cremul/parser_helper.rb, line 133
def next_nad_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^NAD.*/)
end
next_ref_segment_index(segments, start_pos, end_pos=nil) click to toggle source
# File lib/cremul/parser_helper.rb, line 119
def next_ref_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^RFF.*/)
end
next_tx_sequence_segment_index(segments, start_pos) click to toggle source
# File lib/cremul/parser_helper.rb, line 102
def next_tx_sequence_segment_index(segments, start_pos)
  find_index_by_regex(segments, start_pos, segments.size, /^SEQ\+\+\d/)
end
number_of_lines_in_message(segments) click to toggle source
# File lib/cremul/parser_helper.rb, line 141
def number_of_lines_in_message(segments)
  s = segments[line_count_segment_index(segments)]
  s[s.index(':')+1, s.size].to_i
end
number_of_references_in_tx(segments, tx_segment_pos) click to toggle source
# File lib/cremul/parser_helper.rb, line 166
def number_of_references_in_tx(segments, tx_segment_pos)
  n = 0
  ref_index = next_ref_segment_index(segments, tx_segment_pos)
  next_tx_index = next_tx_sequence_segment_index(segments, tx_segment_pos+1)
  next_line_index = next_line_segment_index(segments, tx_segment_pos)
  loop do
    if ref_index.nil?
      break
    elsif !next_tx_index.nil? && ref_index > next_tx_index
      break
    elsif !next_line_index.nil? && ref_index > next_line_index
      break
    else
      n += 1
    end
    ref_index = next_ref_segment_index(segments, ref_index+1)
  end
  n
end
number_of_transactions_in_line(segments, line_segment_pos) click to toggle source

Return the number of individual payments transactions in the line item. Expects 'line_segment_pos' to be the index of the current line item.

# File lib/cremul/parser_helper.rb, line 148
def number_of_transactions_in_line(segments, line_segment_pos)
  n = 1 # there must be at least 1 payment tx
  tx_pos = next_tx_sequence_segment_index(segments, line_segment_pos+1)
  # search for payment tx items until next line item or end of message
  next_line_index = next_line_segment_index(segments, line_segment_pos+1)
  loop do
    tx_pos = next_tx_sequence_segment_index(segments, tx_pos+1)
    if tx_pos.nil?
      break
    elsif !next_line_index.nil? && tx_pos > next_line_index
      break
    else
      n += 1
    end
  end
  n
end
payment_advice_segment_index(segments, start_pos, end_pos=nil) click to toggle source

Optional segment with free text info regarding the payment

# File lib/cremul/parser_helper.rb, line 115
def payment_advice_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^FTX\+AAG.*/)
end
payment_details_segment_index(segments, start_pos, end_pos=nil) click to toggle source
# File lib/cremul/parser_helper.rb, line 110
def payment_details_segment_index(segments, start_pos, end_pos=nil)
  find_index_by_regex(segments, start_pos, end_pos, /^FTX\+PMD.*/)
end
ref_type(type_number) click to toggle source

Assumes that the parameter is a string with the code

# File lib/cremul/parser_helper.rb, line 61
def ref_type(type_number)
  type_symbol = ('c' << type_number).to_sym
  REF_TYPES[type_symbol]
end
segment_codes() click to toggle source
# File lib/cremul/parser_helper.rb, line 67
def segment_codes
  CODES
end