mt940_parser 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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