mt940_parser 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+ :20:T089414086000001
2
+ :25:50880050/0194787400888
3
+ :28C:00004/00001
4
+ :60F:C070903EUR766656,49
5
+ :61:0709070904CR50990,05NTRFNONREF//0724710333343453
6
+ :86:166?00GUTSCHRIFT?100399?20EREF+EndToEndId TFNR 22 004?21 00001?22
7
+ SVWZ+Verw CTSc-01 BC-PPP TF?23Nr 22 004?30DRESDEFF508?31DE1450880
8
+ 0500194785000?32KARL?33 KAUFMANN?70Empfaenger Marta Metzge
9
+ r
10
+ :61:0709070904CR154551,93NTRFNONREF//0724710324647450
11
+ :86:166?00GUTSCHRIFT?100399?20EREF+TFNR 0300300004?21SVWZ+Strukturier
12
+ ter Verwend?22ungszweck 30030004 DE?30DRESDEFF508?31DE03508800500
13
+ 194791600?32Quentin Quast?70Empfaenger bei DRESDE mit 7?710 Zeich
14
+ en Empfaenger bei DR
15
+ :61:0709070904CR154551,93NTRFNONREF//0724710324661090
16
+ :86:166?00GUTSCHRIFT?100399?20EREF+TFNR 0500500004?21SVWZ+Strukturier
17
+ ter Verwend?22ungszweck 50050004 DE?30DRESDEFF508?31DE14508800500
18
+ 194785000?32Karl Kaufmann?70Empfaenger bei DRESDE
19
+ :61:0709040904DR1500,00NTRFKREF+//536D80EFEC56ACF8
20
+ :86:191?00SEPA-UEBERW?100399?20KREF+TFNr 01022 MSGID CTSc-?2101 EBB?2
21
+ 2MTLG:SEPA-Ueberweisungsauft?23rag Datei mit 0000001 Zahlu?24ngen
22
+ :62F:C070904EUR1125250,4
23
+ :64:C070904EUR559614,51
24
+ -
25
+ :20:T089414096000001
26
+ :25:50880050/0194791600888
27
+ :28C:00004/00001
28
+ :60F:D070903EUR1970431,87
29
+ :61:0709040904DR0,08NTRFTFNr 40001 MSGID//0724710345316116
30
+ :86:159?00RETOURE?100399?20EREF+TFNR 40001 00005?21MTLG:Grund nicht s
31
+ pezifizie?22rt Reject aus SEPA-Ueberwei?23sungsauftrag?34914
32
+ :61:0709040904CR335,33NTRFTFNr 44001 MSGID//0724710351063401
33
+ :86:159?00RETOURE?100399?20EREF+TFNR 44001 00001?21MTLG:Grund nicht s
34
+ pezifizie?22rt Reject aus SEPA-Ueberwei?23sungsauftrag?34914
35
+ :61:0709040904CR15000,NTRFTFNr 40001 MSGID//0724710345316110
36
+ :86:159?00RETOURE?100399?20EREF+TFNR 40001 00002?21MTLG:Grund nicht s
37
+ pezifizie?22rt Reject aus SEPA-Ueberwei?23sungsauftrag?34914
38
+ :61:0709040904CR15000,05NTRFNONREF//0724710290659857
39
+ :86:166?00GUTSCHRIFT?100399?20EREF+EndToEndIdTFNR20001000?2101?22SVWZ
40
+ +TO 13 TFNr 20001 Einga?23ngskanal Mint Unstrukturier?24ter Verwe
41
+ ndungszweck 140 Ze?25ichen Beginn Fuellzeichen x?26xxxxxxxxxxxxxx
42
+ xxxxxxxxxxxxx?27xxxxxxxxxx?30PBNKDEFF100?31DE42100100100043921105
43
+ ?32Richter Renate 70 Zeichen B?33eginn Fuellzeichen xxxxxxxx?70Qu
44
+ entin Quast 70 Zeichen Be?71ginn Fuellzeichen xxxxxxxxx
45
+ :61:0709040904CR125004,88NTRFNONREF//0724710290624796
46
+ :86:166?00GUTSCHRIFT?100399?20SVWZ+TO13 TF20005 MINT?30PBNKDEFF100?31
47
+ DE42100100100043921105?32Richter Renate 70 Zeichen B?33eginn Fuel
48
+ lzeichen xxxxxxxx?70Quentin Quast 70 Zeichen Be?71ginn Fuellzeich
49
+ en xxxxxxxxx
50
+ :61:0709040904CR915311,55NTRFTFNr 44001 MSGID//R724710351063405
51
+ :86:159?00RETOURE?100399?20EREF+TFNR 44001 00002?21MTLG:IBAN unguelti
52
+ g Rueckue?22berweisung aus SEPA-Ueberwe?23isungsauftrag?34901
53
+ :61:0709040904DR3572569,03NMSCNONREF
54
+ :86:079?00SAMMLER?109800?200904059001
55
+ :62F:D070904EUR4472049,09
56
+ :64:D070904EUR4472049,09
57
+ -
@@ -0,0 +1,11 @@
1
+ :20:T089414086000001
2
+ :25:50880050/0194787400888
3
+ :28C:00004/00001
4
+ :60F:C070903EUR766656,49
5
+ :61:0709070904CR50990,05NTRFNONREF//0724710333343453
6
+ :25:166?00GUTSCHRIFT?100399?20EREF+EndToEndId TFNR 22 004?21 00001?22
7
+ SVWZ+Verw CTSc-01 BC-PPP TF?23Nr 22 004?30DRESDEFF508?31DE1450880
8
+ 0500194785000?32KARL?33 KAUFMANN?70Empfaenger Marta Metzge
9
+ r
10
+ :62F:C070904EUR1125250,4
11
+ :64:C070904EUR559614,51
data/test/helper.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'mt940'
7
+ require 'mt940/customer_statement_message'
@@ -0,0 +1,87 @@
1
+ require 'helper'
2
+ require 'yaml'
3
+
4
+ # $DEBUG = true
5
+ class TestCustomerStatementMessage < Test::Unit::TestCase
6
+
7
+ def setup
8
+ file = File.dirname(__FILE__) + "/fixtures/sepa_snippet.txt"
9
+ messages = MT940::CustomerStatementMessage.parse_file(file)
10
+ @message = messages.first
11
+ @message_2 = messages.last
12
+ end
13
+
14
+ def test_it_should_know_the_bank_code
15
+ assert_equal "50880050", @message.bank_code
16
+ end
17
+
18
+ def test_it_should_know_the_account_number
19
+ assert_equal "0194787400888", @message.account_number
20
+ end
21
+
22
+ def test_it_should_have_statement_lines
23
+ assert @message.statement_lines.respond_to?(:each)
24
+ assert_equal 4, @message.statement_lines.size
25
+ end
26
+
27
+ def test_statement_lines_should_have_amount_info_credit
28
+ line = @message.statement_lines.first
29
+ assert_equal 5099005, line.amount
30
+ assert_equal :credit, line.funds_code
31
+ end
32
+
33
+ def test_statement_lines_should_have_amount_info_debit
34
+ line = @message_2.statement_lines.first
35
+ assert_equal 8, line.amount
36
+ assert_equal :debit, line.funds_code
37
+ end
38
+
39
+ def test_statement_lines_should_have_account_holder
40
+ line = @message.statement_lines.first
41
+ assert_equal "KARL\n KAUFMANN", line.account_holder
42
+ end
43
+
44
+ def test_statement_lines_info_should_have_bank_code
45
+ line = @message.statement_lines.first
46
+ assert_equal "DRESDEFF508", line.bank_code
47
+ end
48
+
49
+ def test_statement_lines_info_should_have_account_number
50
+ line = @message.statement_lines.first
51
+ assert_equal "DE14508800500194785000", line.account_number
52
+ end
53
+
54
+ def test_statement_lines_should_have_details
55
+ line = @message.statement_lines.first
56
+ assert_equal "EREF+EndToEndId TFNR 22 004\n 00001\nSVWZ+Verw CTSc-01 BC-PPP TF\nNr 22 004", line.details
57
+ end
58
+
59
+ def test_statement_lines_should_have_an_entry_date
60
+ line = @message.statement_lines.first
61
+ assert_equal Date.parse("2007-09-04"), line.entry_date
62
+ end
63
+
64
+ def test_statement_lines_should_have_a_value_date
65
+ line = @message.statement_lines.first
66
+ assert_equal Date.parse("2007-09-07"), line.value_date
67
+ end
68
+
69
+ def test_parsing_the_file_should_return_two_message_objects
70
+ file = File.dirname(__FILE__) + "/fixtures/sepa_snippet.txt"
71
+ messages = MT940::CustomerStatementMessage.parse_file(file)
72
+ assert_equal 2, messages.size
73
+ assert_equal "0194787400888", messages[0].account_number
74
+ assert_equal "0194791600888", messages[1].account_number
75
+ end
76
+
77
+ def test_parsing_a_file_with_broken_structure_should_raise_an_exception
78
+ file = File.dirname(__FILE__) + "/fixtures/sepa_snippet_broken.txt"
79
+ assert_raise(StandardError) { MT940::CustomerStatementMessage.parse_file(file) }
80
+ end
81
+
82
+ def test_should_raise_method_missing_when_asking_statement_lines_for_unknown_stuff
83
+ file = File.dirname(__FILE__) + "/fixtures/sepa_snippet.txt"
84
+ message = MT940::CustomerStatementMessage.parse_file(file).first
85
+ assert_raise(NoMethodError) { message.statement_lines.first.foo }
86
+ end
87
+ end
@@ -0,0 +1,19 @@
1
+ require 'helper'
2
+ require 'yaml'
3
+
4
+ # $DEBUG = true
5
+ class TestMt940 < Test::Unit::TestCase
6
+
7
+ def read_mt940_data(file)
8
+ MT940.parse(IO.read(file))
9
+ end
10
+
11
+ def test_it_should_parse_fixture_files_correctly
12
+ Dir[File.dirname(__FILE__) + "/fixtures/*.txt"].reject { |f| f =~ /sepa_snippet/ }.each do |file|
13
+ data = read_mt940_data(file)
14
+ generated_structure_file = file.gsub(/.txt$/, ".yml")
15
+
16
+ assert_equal IO.read(generated_structure_file), data.to_yaml
17
+ end
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mt940_parser
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Thies C. Arntzen
14
+ - Phillip Oertel
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-02-28 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ type: :development
24
+ prerelease: false
25
+ name: rspec
26
+ version_requirements: &id001 !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ hash: 3
32
+ segments:
33
+ - 2
34
+ - 3
35
+ - 0
36
+ version: 2.3.0
37
+ requirement: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ type: :development
40
+ prerelease: false
41
+ name: bundler
42
+ version_requirements: &id002 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ hash: 23
48
+ segments:
49
+ - 1
50
+ - 0
51
+ - 0
52
+ version: 1.0.0
53
+ requirement: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ type: :development
56
+ prerelease: false
57
+ name: jeweler
58
+ version_requirements: &id003 !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ hash: 7
64
+ segments:
65
+ - 1
66
+ - 5
67
+ - 2
68
+ version: 1.5.2
69
+ requirement: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ type: :development
72
+ prerelease: false
73
+ name: rcov
74
+ version_requirements: &id004 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ hash: 3
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ requirement: *id004
84
+ description:
85
+ email: developers@betterplace.org
86
+ executables: []
87
+
88
+ extensions: []
89
+
90
+ extra_rdoc_files:
91
+ - LICENSE
92
+ - README.rdoc
93
+ files:
94
+ - .document
95
+ - .specification
96
+ - Gemfile
97
+ - Gemfile.lock
98
+ - LICENSE
99
+ - README.rdoc
100
+ - Rakefile
101
+ - VERSION.yml
102
+ - docs/0E0Y00DNY.pdf
103
+ - docs/FinTS_4.0_Formals.pdf
104
+ - docs/FinTS_4.0_Messages_Finanzdatenformate.pdf
105
+ - docs/MT940_Deutschland_Structure2002.pdf
106
+ - docs/SEPA_20MT940__Schnittstellenbeschreibung.pdf
107
+ - docs/mt940.pdf
108
+ - docs/swift_mt940_942.pdf
109
+ - docs/uebersicht_der_geschaeftsvorfallcodes_und_buchungs_textschluessel.pdf
110
+ - lib/mt940.rb
111
+ - lib/mt940/customer_statement_message.rb
112
+ - test/fixtures/currency_in_25.txt
113
+ - test/fixtures/currency_in_25.yml
114
+ - test/fixtures/empty_86.txt
115
+ - test/fixtures/empty_86.yml
116
+ - test/fixtures/empty_line.txt
117
+ - test/fixtures/empty_line.yml
118
+ - test/fixtures/missing_crlf_at_end.txt
119
+ - test/fixtures/missing_crlf_at_end.yml
120
+ - test/fixtures/sepa_mt9401.txt
121
+ - test/fixtures/sepa_mt9401.yml
122
+ - test/fixtures/sepa_snippet.txt
123
+ - test/fixtures/sepa_snippet_broken.txt
124
+ - test/helper.rb
125
+ - test/test_customer_statement_message.rb
126
+ - test/test_mt940.rb
127
+ has_rdoc: true
128
+ homepage: http://github.com/betterplace/mt940_parser
129
+ licenses:
130
+ - MIT
131
+ post_install_message:
132
+ rdoc_options: []
133
+
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ requirements: []
155
+
156
+ rubyforge_project:
157
+ rubygems_version: 1.3.7
158
+ signing_key:
159
+ specification_version: 3
160
+ summary: MT940 parses account statements in the SWIFT MT940 format.
161
+ test_files:
162
+ - test/helper.rb
163
+ - test/test_customer_statement_message.rb
164
+ - test/test_mt940.rb