mt940 0.5.1 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,18 @@
1
+ * 0.6.3
2
+
3
+ - include the updated Changelog and README as well
4
+
5
+ * 0.6.2 (Was never released)
6
+
7
+ - Parse a NONREF contra account for the rabobank correctly
8
+
9
+ * 0.6.1 (Was never released)
10
+
11
+ - Extracting contra account for ING, AbnAmro and Triodos as well
12
+ - Standardized all account numbers to exactly 9 digits
13
+
14
+ * 0.6.0 (Was never released)
15
+
1
16
  * 0.5.1
2
17
 
3
18
  - Delegated determination of bank to corresponding subclass
data/README.md CHANGED
@@ -35,8 +35,9 @@ or with the file itself:
35
35
  - date
36
36
  - amount (which is negative in case of a withdrawal)
37
37
  - description
38
+ - contra account
38
39
 
39
- * With the Rabobank the contra_account with its owner is extracted as well.
40
+ * With the Rabobank its owner is extracted as well.
40
41
 
41
42
 
42
43
  Contributing to MT940
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.6.3
@@ -14,4 +14,16 @@ class MT940::Abnamro < MT940::Base
14
14
  end
15
15
  end
16
16
 
17
+ def parse_contra_account
18
+ if @transaction
19
+ if @transaction.description.match(/^(GIRO)\s+(\d+)(.+)/)
20
+ @transaction.contra_account = $2.rjust(9, '000000000')
21
+ @transaction.description = $3
22
+ elsif @transaction.description.match(/^(\d{2}.\d{2}.\d{2}.\d{3})(.+)/)
23
+ @transaction.description = $2
24
+ @transaction.contra_account = $1.gsub('.','')
25
+ end
26
+ end
27
+ end
28
+
17
29
  end
@@ -4,4 +4,11 @@ class MT940::Ing < MT940::Base
4
4
  self if args[0].match(/INGBNL/)
5
5
  end
6
6
 
7
+ def parse_contra_account
8
+ if @transaction && @transaction.description.match(/^\d(\d{9})(.+)/)
9
+ @transaction.contra_account = $1
10
+ @transaction.description = $2
11
+ end
12
+ end
13
+
7
14
  end
@@ -5,7 +5,7 @@ class MT940::Rabobank < MT940::Base
5
5
  end
6
6
 
7
7
  def parse_tag_61
8
- if @line.match(/^:61:(\d{6})(C|D)(\d+),(\d{0,2})\w{4}(.{16})(.+)$/)
8
+ if @line.match(/^:61:(\d{6})(C|D)(\d+),(\d{0,2})\w{4}\w{1}(\d{9}|NONREF)(.+)$/)
9
9
  type = $2 == 'D' ? -1 : 1
10
10
  @transaction = MT940::Transaction.new(:bank_account => @bank_account, :amount => type * ($3 + '.' + $4).to_f, :bank => @bank)
11
11
  @transaction.date = parse_date($1)
@@ -4,4 +4,11 @@ class MT940::Triodos < MT940::Base
4
4
  self if args[0].match(/^:20:/) && args[1] && args[1].match(/^:25:TRIODOSBANK/)
5
5
  end
6
6
 
7
+ def parse_contra_account
8
+ if @transaction && @transaction.description.match(/\d+(\d{9})$/)
9
+ @transaction.contra_account = $1.rjust(9, '000000000')
10
+ @transaction.description = ''
11
+ end
12
+ end
13
+
7
14
  end
data/lib/mt940/base.rb CHANGED
@@ -31,7 +31,7 @@ module MT940
31
31
  private
32
32
 
33
33
  def self.determine_bank(*args)
34
- Dir.foreach('lib/mt940/banks/') do |file|
34
+ Dir.foreach(File.dirname(__FILE__) + '/banks/') do |file|
35
35
  if file.match(/\.rb$/)
36
36
  klass = eval(file.gsub(/\.rb$/,'').capitalize)
37
37
  bank = klass.determine_bank(*args)
@@ -51,7 +51,7 @@ module MT940
51
51
  def parse_tag_25
52
52
  @line.gsub!('.','')
53
53
  if @line.match(/^:\d{2}:[^\d]*(\d*)/)
54
- @bank_account = $1
54
+ @bank_account = $1.gsub(/^0/,'')
55
55
  @tag86 = false
56
56
  end
57
57
  end
@@ -69,18 +69,26 @@ module MT940
69
69
  def parse_tag_86
70
70
  if !@tag86 && @line.match(/^:86:\s?(.*)$/)
71
71
  @tag86 = true
72
- @transaction.description = $1.gsub(/>\d{2}/,'')
72
+ @transaction.description = $1.gsub(/>\d{2}/,'').strip
73
+ parse_contra_account
73
74
  end
74
75
  end
75
76
 
76
77
  def parse_line
77
- @transaction.description += ' ' + @line.gsub(/\n/,'').gsub(/>\d{2}/,'') if @tag86
78
+ if @tag86 && @transaction.description
79
+ @transaction.description.lstrip!
80
+ @transaction.description += ' ' + @line.gsub(/\n/,'').gsub(/>\d{2}\s*/,'').gsub(/\-XXX/,'').gsub(/-$/,'').strip
81
+ @transaction.description.strip!
82
+ end
78
83
  end
79
84
 
80
85
  def parse_date(string)
81
86
  Date.new(2000 + string[0..1].to_i, string[2..3].to_i, string[4..5].to_i) if string
82
87
  end
83
88
 
89
+ def parse_contra_account
90
+ end
91
+
84
92
  #Fail silently
85
93
  def method_missing(*args)
86
94
  end
data/mt940.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mt940}
8
- s.version = "0.5.1"
8
+ s.version = "0.6.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dovadi"]
12
- s.date = %q{2011-07-05}
12
+ s.date = %q{2011-07-06}
13
13
  s.description = %q{A basic MT940 parser with implementations for Dutch banks.}
14
14
  s.email = %q{frank.oxener@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -36,6 +36,6 @@ ABNANL2A
36
36
  :61:1105240524D9,49N426NONREF
37
37
  :86:BEA NR:XXX1234 24.05.11/09.18 PETS PLACE KATWIJK KATWI,PAS999
38
38
  :61:1105240524D15,N426NONREF
39
- :86:BEA NR:XXX1234 24.05.11/09.17 BRAINWASH KATWIJK KATWIJ,PAS999
39
+ :86:52.89.39.882 MYCOM DEN HAAG S-GRAVEN,PAS999
40
40
  :62F:C110524EUR1849,75
41
41
  -
@@ -18,7 +18,7 @@ ING Bank N.V. tarifering ING
18
18
  :61:100722D1,10NGT NONREF
19
19
  :86:0111111111 GPPeking 170000001AC
20
20
  :61:100722C3,68NVZ NONREF
21
- :86:0111111111 EJ46GREENP100610T1456 CLIEOP TMG GPHONGKONG AMSTERDAM
21
+ :86:0123456789 EJ46GREENP100610T1456 CLIEOP TMG GPHONGKONG AMSTERDAM
22
22
  :62F:C100723EUR3,47
23
23
  :86:D000004C000002D25,24C28,71
24
24
  -XXX
@@ -1,5 +1,4 @@
1
1
  :940:
2
-
3
2
  :20:940A110615
4
3
  :25:1291.99.348EUR
5
4
  :28:00000/00
@@ -21,4 +20,6 @@
21
20
  :61:110617D000000000044,95N0600733959555 T-MOBILE NETHERLANDS BV
22
21
  :86:BETALINGSKENM. 123456789
23
22
  :86:FACTUURNUMMER 987654321
23
+ :61:110721D000000000236,56N030NONREF TOMTE TUMMETOT AMERSFOORT
24
+ :86:Betaalautomaat 14:23 pasnr. 065
24
25
  :62F:C110617EUR0000000001250,87
@@ -3,7 +3,7 @@
3
3
  :28:1
4
4
  :60F:C110101EUR4975,09
5
5
  :61:110101D15,70N000NONREF
6
- :86:000>100000000000
6
+ :86:000>100987654321
7
7
  >20ALGEMENE TUSSENREKENING KOS>21TEN VAN 01-10-2010 TOT EN M
8
8
  >22ET 31-12-2010>310390123456
9
9
  :61:110125D700,00N000NONREF
@@ -21,8 +21,14 @@ class TestMt940Abnamro < Test::Unit::TestCase
21
21
  assert_equal -9.00, @transaction.amount
22
22
  end
23
23
 
24
- should 'have a description' do
25
- assert_equal 'GIRO 428428 KPN - DIGITENNE BETALINGSKENM. 000000042188659 5314606715 BETREFT FACTUUR D.D. 20-05-2011 INCL. 1,44 BTW', @transaction.description
24
+ context 'Description' do
25
+ should 'have the correct description in case of a GIRO account' do
26
+ assert_equal 'KPN - DIGITENNE BETALINGSKENM. 000000042188659 5314606715 BETREFT FACTUUR D.D. 20-05-2011 INCL. 1,44 BTW', @transaction.description
27
+ end
28
+
29
+ should 'have the correct description in case of a regular bank' do
30
+ assert_equal 'MYCOM DEN HAAG S-GRAVEN,PAS999 :62F:C110524EUR1849,75', @transactions.last.description
31
+ end
26
32
  end
27
33
 
28
34
  should 'have a date' do
@@ -33,6 +39,15 @@ class TestMt940Abnamro < Test::Unit::TestCase
33
39
  assert_equal 'Abnamro', @transaction.bank
34
40
  end
35
41
 
42
+ context 'Contra account' do
43
+ should 'be determined in case of a GIRO account' do
44
+ assert_equal '000428428', @transaction.contra_account
45
+ end
46
+
47
+ should 'be determined in case of a regular bank' do
48
+ assert_equal '528939882', @transactions.last.contra_account
49
+ end
50
+ end
36
51
  end
37
52
 
38
53
  end
@@ -14,17 +14,13 @@ class TestMt940Ing < Test::Unit::TestCase
14
14
 
15
15
  context 'Transaction' do
16
16
  should 'have a bank_account' do
17
- assert_equal '0001234567', @transaction.bank_account
17
+ assert_equal '001234567', @transaction.bank_account
18
18
  end
19
19
 
20
20
  should 'have an amount' do
21
21
  assert_equal -25.03, @transaction.amount
22
22
  end
23
23
 
24
- should 'have a description' do
25
- assert_equal 'RC AFREKENING BETALINGSVERKEER BETREFT REKENING 4715589 PERIODE: 01-10-2010 / 31-12-2010 ING Bank N.V. tarifering ING', @transaction.description
26
- end
27
-
28
24
  should 'have a date' do
29
25
  assert_equal Date.new(2010,7,22), @transaction.date
30
26
  end
@@ -33,6 +29,14 @@ class TestMt940Ing < Test::Unit::TestCase
33
29
  assert_equal 'Ing', @transaction.bank
34
30
  end
35
31
 
32
+ should 'have a description' do
33
+ assert_equal 'EJ46GREENP100610T1456 CLIEOP TMG GPHONGKONG AMSTERDAM :62F:C100723EUR3,47', @transactions.last.description
34
+ end
35
+
36
+ should 'return the contra_account' do
37
+ assert_equal '123456789', @transactions.last.contra_account
38
+ end
39
+
36
40
  end
37
41
 
38
42
  end
@@ -9,7 +9,7 @@ class TestMt940Rabobank < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  should 'have the correct number of transactions' do
12
- assert_equal 2, @transactions.size
12
+ assert_equal 3, @transactions.size
13
13
  end
14
14
 
15
15
  context 'Transaction' do
@@ -17,8 +17,18 @@ class TestMt940Rabobank < Test::Unit::TestCase
17
17
  assert_equal '129199348', @transaction.bank_account
18
18
  end
19
19
 
20
- should 'have a contra_account' do
21
- assert_equal 'P005675159', @transaction.contra_account
20
+ context 'Contra account' do
21
+ should 'be determined in case of a GIRO account' do
22
+ assert_equal '005675159', @transaction.contra_account
23
+ end
24
+
25
+ should 'be determined in case of a regular bank' do
26
+ assert_equal '733959555', @transactions[1].contra_account
27
+ end
28
+
29
+ should 'be determined in case of a NONREF' do
30
+ assert_equal 'NONREF', @transactions.last.contra_account
31
+ end
22
32
  end
23
33
 
24
34
  should 'have an amount' do
@@ -14,7 +14,7 @@ class TestMt940Triodos < Test::Unit::TestCase
14
14
 
15
15
  context 'Transaction' do
16
16
  should 'have a bank_account' do
17
- assert_equal '0390123456', @transaction.bank_account
17
+ assert_equal '390123456', @transaction.bank_account
18
18
  end
19
19
 
20
20
  should 'have an amount' do
@@ -22,7 +22,7 @@ class TestMt940Triodos < Test::Unit::TestCase
22
22
  end
23
23
 
24
24
  should 'have a description' do
25
- assert_equal '0000000000000 ALGEMENE TUSSENREKENING KOSTEN VAN 01-10-2010 TOT EN M ET 31-12-20100390123456', @transaction.description
25
+ assert_equal 'ALGEMENE TUSSENREKENING KOSTEN VAN 01-10-2010 TOT EN M ET 31-12-20100390123456', @transaction.description
26
26
  end
27
27
 
28
28
  should 'have a date' do
@@ -33,6 +33,10 @@ class TestMt940Triodos < Test::Unit::TestCase
33
33
  assert_equal 'Triodos', @transaction.bank
34
34
  end
35
35
 
36
+ should 'return the contra_account' do
37
+ assert_equal '987654321', @transaction.contra_account
38
+ end
39
+
36
40
  end
37
41
 
38
42
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 5
8
- - 1
9
- version: 0.5.1
7
+ - 6
8
+ - 3
9
+ version: 0.6.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - dovadi
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-07-05 00:00:00 +02:00
17
+ date: 2011-07-06 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency