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