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.
- data/.document +5 -0
- data/.specification +67 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +28 -0
- data/LICENSE +20 -0
- data/README.rdoc +20 -0
- data/Rakefile +58 -0
- data/VERSION.yml +5 -0
- data/docs/0E0Y00DNY.pdf +0 -0
- data/docs/FinTS_4.0_Formals.pdf +0 -0
- data/docs/FinTS_4.0_Messages_Finanzdatenformate.pdf +0 -0
- data/docs/MT940_Deutschland_Structure2002.pdf +0 -0
- data/docs/SEPA_20MT940__Schnittstellenbeschreibung.pdf +0 -0
- data/docs/mt940.pdf +0 -0
- data/docs/swift_mt940_942.pdf +0 -0
- data/docs/uebersicht_der_geschaeftsvorfallcodes_und_buchungs_textschluessel.pdf +0 -0
- data/lib/mt940/customer_statement_message.rb +73 -0
- data/lib/mt940.rb +237 -0
- data/test/fixtures/currency_in_25.txt +1 -0
- data/test/fixtures/currency_in_25.yml +6 -0
- data/test/fixtures/empty_86.txt +2 -0
- data/test/fixtures/empty_86.yml +6 -0
- data/test/fixtures/empty_line.txt +2 -0
- data/test/fixtures/empty_line.yml +4 -0
- data/test/fixtures/missing_crlf_at_end.txt +2 -0
- data/test/fixtures/missing_crlf_at_end.yml +8 -0
- data/test/fixtures/sepa_mt9401.txt +595 -0
- data/test/fixtures/sepa_mt9401.yml +3120 -0
- data/test/fixtures/sepa_snippet.txt +57 -0
- data/test/fixtures/sepa_snippet_broken.txt +11 -0
- data/test/helper.rb +7 -0
- data/test/test_customer_statement_message.rb +87 -0
- data/test/test_mt940.rb +19 -0
- metadata +164 -0
@@ -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,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
|
data/test/test_mt940.rb
ADDED
@@ -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
|