zilverline-mt940 1.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.
Files changed (43) hide show
  1. checksums.yaml +15 -0
  2. data/.document +5 -0
  3. data/.gitignore +52 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG +56 -0
  6. data/Gemfile +4 -0
  7. data/Gemfile.lock +26 -0
  8. data/LICENSE.txt +20 -0
  9. data/README.md +75 -0
  10. data/Rakefile +9 -0
  11. data/lib/mt940.rb +10 -0
  12. data/lib/mt940/bank_statement.rb +13 -0
  13. data/lib/mt940/banks/abnamro.rb +76 -0
  14. data/lib/mt940/banks/ing.rb +84 -0
  15. data/lib/mt940/banks/rabobank.rb +770 -0
  16. data/lib/mt940/banks/triodos.rb +20 -0
  17. data/lib/mt940/base.rb +165 -0
  18. data/lib/mt940/structured_format.rb +16 -0
  19. data/lib/mt940/transaction.rb +23 -0
  20. data/lib/mt940/version.rb +3 -0
  21. data/mt940.gemspec +32 -0
  22. data/spec/fixtures/abnamro.txt +41 -0
  23. data/spec/fixtures/abnamro_structured.txt +54 -0
  24. data/spec/fixtures/ing.txt +24 -0
  25. data/spec/fixtures/ing_structured.txt +31 -0
  26. data/spec/fixtures/rabobank.txt +140 -0
  27. data/spec/fixtures/rabobank_mt940_structured.txt +48 -0
  28. data/spec/fixtures/rabobank_mt940_structured_dutch_tax.txt +10 -0
  29. data/spec/fixtures/rabobank_mt940_structured_multi_line.txt +14 -0
  30. data/spec/fixtures/rabobank_mt940_structured_savings_account.txt +11 -0
  31. data/spec/fixtures/rabobank_mt940_structured_to_savings_account.txt +10 -0
  32. data/spec/fixtures/rabobank_with_debet_previous_balance.txt +6 -0
  33. data/spec/fixtures/triodos.txt +14 -0
  34. data/spec/fixtures/two_accounts.txt +29 -0
  35. data/spec/fixtures/unknown.txt +22 -0
  36. data/spec/mt940_abnamro_spec.rb +244 -0
  37. data/spec/mt940_base_spec.rb +48 -0
  38. data/spec/mt940_ing_spec.rb +227 -0
  39. data/spec/mt940_rabobank_spec.rb +376 -0
  40. data/spec/mt940_triodos_spec.rb +58 -0
  41. data/spec/mt940_two_accounts_spec.rb +49 -0
  42. data/spec/spec_helper.rb +4 -0
  43. metadata +137 -0
@@ -0,0 +1,20 @@
1
+ class MT940::Triodos < MT940::Base
2
+
3
+ def self.determine_bank(*args)
4
+ self if args[0].match(/^:20:/) && args[1] && args[1].match(/^:25:TRIODOSBANK/)
5
+ end
6
+
7
+ def parse_tag_86
8
+ if !@tag86 && @line.match(/^:86:\s?(.*)\Z/m)
9
+ @tag86 = true
10
+ temp_description = $1.gsub(/\n/, ' ').gsub(/>\d{2}/, '').strip
11
+ if temp_description.match(/^\d+(\d{9})(.*)$/)
12
+ @transaction.contra_account = $1.rjust(9, '000000000')
13
+ @transaction.description = $2.strip
14
+ else
15
+ @transaction.description = temp_description
16
+ end
17
+ end
18
+ end
19
+
20
+ end
data/lib/mt940/base.rb ADDED
@@ -0,0 +1,165 @@
1
+ module MT940
2
+
3
+ class Base
4
+
5
+ MT_940_TAG_LINE = /^:(\d{2}(F|C)?):/
6
+
7
+ attr_accessor :bank, :opening_balance, :opening_date
8
+
9
+ def self.parse_mt940(file)
10
+ file = File.open(file) if file.is_a?(String)
11
+ if file.is_a?(File) || file.is_a?(Tempfile)
12
+ first_line = file.readline
13
+ second_line = file.readline unless file.eof?
14
+ klass = determine_bank(first_line, second_line)
15
+ file.rewind
16
+ instance = klass.new(file)
17
+ file.close
18
+ instance.parse
19
+ else
20
+ raise ArgumentError.new('No file is given!')
21
+ end
22
+ end
23
+
24
+ def parse
25
+ @tag86 = false
26
+ @lines.each do |line|
27
+ @line = line
28
+ @line.match(MT_940_TAG_LINE) ? send("parse_tag_#{$1}".to_sym) : parse_line
29
+ end
30
+ @bank_statements
31
+ end
32
+
33
+ protected
34
+ def parse_description_after_tag(description_parts, tag)
35
+ description_start_index = description_parts.index { |part| part == tag }
36
+ if description_start_index
37
+ description_parts[description_start_index + 1].gsub(/\r|\n/, '')
38
+ else
39
+ ''
40
+ end
41
+ end
42
+
43
+
44
+ private
45
+
46
+ def self.determine_bank(*args)
47
+ Dir.foreach(File.dirname(__FILE__) + '/banks/') do |file|
48
+ if file.match(/\.rb$/)
49
+ klass = eval(file.gsub(/\.rb$/, '').capitalize)
50
+ bank = klass.determine_bank(*args)
51
+ return bank if bank
52
+ end
53
+ end
54
+ self
55
+ end
56
+
57
+ def initialize(file)
58
+ @bank_statements = {}
59
+ @transactions = []
60
+ @bank = self.class.to_s.split('::').last
61
+ @bank = 'Unknown' if @bank == 'Base'
62
+ temp_lines = file.readlines
63
+ @lines = []
64
+ index_of_temp_lines = 0
65
+ index_in_lines = 0
66
+ while index_of_temp_lines < temp_lines.size do
67
+ line = temp_lines[index_of_temp_lines].encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace) # remove invalid chars
68
+ if mt_940_start_line?(line)
69
+ @lines << line
70
+ index_in_lines+=1
71
+ else
72
+ @lines[index_in_lines-1] += line
73
+ end
74
+ index_of_temp_lines+=1
75
+ end
76
+ end
77
+
78
+ def mt_940_start_line?(line)
79
+ line.match /^:?\d{2}(\D?|\d?):?.*$/
80
+ end
81
+
82
+ def parse_tag_25
83
+ @line.gsub!('.', '')
84
+ case @line
85
+ when /^:\d{2}:NL/
86
+ @bank_account_iban = @line[4, 18]
87
+ @bank_account = @bank_account_iban.strip.split(//).last(10).join.sub(/^[0]*/,"")
88
+ @is_structured_format = true
89
+ when /^:\d{2}:\D*(\d*)/
90
+ @bank_account = $1.gsub(/\D/, '').gsub(/^0+/, '')
91
+ @is_structured_format = false
92
+ else
93
+ raise "Unknown format for tag 25: #{@line}"
94
+ end
95
+ @bank_statements[@bank_account] ||= []
96
+ @tag86 = false
97
+ end
98
+
99
+ def parse_tag_28
100
+ @bank_statement = BankStatement.new([], @bank_account, @bank_account_iban, 0, nil, nil)
101
+ @bank_statements[@bank_account] << @bank_statement
102
+ end
103
+
104
+ alias_method :parse_tag_28C, :parse_tag_28
105
+
106
+ def parse_tag_60F
107
+ @currency = @line[12..14]
108
+ balance_date = parse_date(@line[6..11])
109
+
110
+ type = @line[5] == 'D' ? -1 : 1
111
+ amount = @line[15..-1].gsub(",", ".").to_f * type
112
+ @bank_statement.previous_balance = Balance.new(amount, balance_date, @currency)
113
+ end
114
+
115
+ def parse_tag_62F
116
+ @currency = @line[12..14]
117
+ balance_date = parse_date(@line[6..11])
118
+
119
+ type = @line[5] == 'D' ? -1 : 1
120
+ amount = @line[15..-1].gsub(",", ".").to_f * type
121
+
122
+ @bank_statement.new_balance = Balance.new(amount, balance_date, @currency)
123
+ @tag86 = false
124
+ end
125
+
126
+ def parse_tag_61
127
+ if @line.match(/^:61:(\d{6})(C|D)(\d+),(\d{0,2})/)
128
+ type = $2 == 'D' ? -1 : 1
129
+ @transaction = MT940::Transaction.new(:bank_account => @bank_account, :amount => type * ($3 + '.' + $4).to_f, :bank => @bank, :currency => @currency)
130
+ @transaction.date = parse_date($1)
131
+ @bank_statement.transactions << @transaction
132
+ @tag86 = false
133
+ end
134
+ end
135
+
136
+ def parse_tag_86
137
+ if !@tag86 && @line.match(/^:86:\s?(.*)\Z/m)
138
+ @tag86 = true
139
+ @transaction.description = $1.gsub(/\n/, ' ').gsub(/>\d{2}/, '').strip
140
+ parse_contra_account
141
+ end
142
+ end
143
+
144
+ def parse_line
145
+ if @tag86 && @transaction.description
146
+ @transaction.description.lstrip!
147
+ @transaction.description += ' ' + @line.gsub(/\n/, ' ').gsub(/>\d{2}\s*/, '').gsub(/\-XXX/, '').gsub(/-$/, '').strip
148
+ @transaction.description.strip!
149
+ end
150
+ end
151
+
152
+ def parse_date(string)
153
+ Date.new(2000 + string[0..1].to_i, string[2..3].to_i, string[4..5].to_i) if string
154
+ end
155
+
156
+ def parse_contra_account
157
+ end
158
+
159
+ #Fail silently
160
+ def method_missing(*args)
161
+ end
162
+
163
+ end
164
+
165
+ end
@@ -0,0 +1,16 @@
1
+ module MT940::StructuredFormat
2
+ def parse_line
3
+ super unless @skip_parse_line
4
+ end
5
+
6
+ def read_all_description_lines!
7
+ @skip_parse_line = true
8
+ index = @lines.index(@line)
9
+ @lines[index+1..-1].each do |line|
10
+ break if line.match MT940::Base::MT_940_TAG_LINE
11
+ @transaction.description.lstrip!
12
+ @transaction.description += line.gsub(/\n/, '').gsub(/>\d{2}\s*/, '').gsub(/\-XXX/, '').gsub(/-$/, '').strip
13
+ @transaction.description.strip!
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module MT940
2
+
3
+ class Transaction
4
+
5
+ attr_accessor :bank_account, :bank_account_iban, :contra_account, :contra_account_iban, :amount, :type, :description, :contra_account_owner, :date, :bank, :currency
6
+
7
+ def initialize(attributes = {})
8
+ @bank_account = attributes[:bank_account]
9
+ @bank_account_iban = attributes[:bank_account_iban]
10
+ @bank = attributes[:bank]
11
+ @amount = attributes[:amount]
12
+ @type = attributes[:type]
13
+ @description = attributes[:description]
14
+ @date = attributes[:date]
15
+ @contra_account = attributes[:contra_account]
16
+ @contra_account_iban = attributes[:contra_account_iban]
17
+ @contra_account_owner = attributes[:contra_account_owner]
18
+ @currency = attributes[:currency]
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,3 @@
1
+ module MT940
2
+ VERSION = '1.0'
3
+ end
data/mt940.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ $:.push File.expand_path('../lib', __FILE__)
4
+ require 'mt940/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'zilverline-mt940'
8
+ s.version = MT940::VERSION
9
+ s.authors = ['Lars Vonk', 'Michael Franken']
10
+ s.description = %q{An extended MT940 parser with implementations for Dutch banks. Based on basic parser from http://github.com/dovadi/mt940}
11
+ s.summary = %q{MT940 parser}
12
+ s.email = %q{lvonk@zilverline.com mfranken@zilverline.com}
13
+
14
+ s.homepage = %q{https://github.com/zilverline/mt940}
15
+ s.licenses = ['MIT']
16
+
17
+ s.extra_rdoc_files = [
18
+ 'LICENSE.txt',
19
+ 'README.md'
20
+ ]
21
+
22
+ s.rubyforge_project = 'mt940'
23
+
24
+ s.add_development_dependency 'rspec'
25
+ s.add_development_dependency 'rake'
26
+
27
+ s.files = `git ls-files`.split(/\n/)
28
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split(/\n/)
29
+ s.executables = `git ls-files -- bin/*`.split(/\n/).map{ |f| File.basename(f) }
30
+ s.require_paths = ['lib']
31
+
32
+ end
@@ -0,0 +1,41 @@
1
+ ABNANL2A
2
+ 940
3
+ ABNANL2A
4
+ :20:ABN AMRO BANK NV
5
+ :25:517852257
6
+ :28:19321/1
7
+ :60F:C110522EUR3236,28
8
+ :61:1105240524D9,N192NONREF
9
+ :86:GIRO 428428 KPN - DIGITENNE BETALINGSKENM. 000000042188659
10
+ 5314606715 BETREFT FACTUUR D.D. 20-05-2011
11
+ INCL. 1,44 BTW
12
+ :61:1105210523D11,59N426NONREF
13
+ :86:BEA NR:XXX1234 21.05.11/12.54 DIRCKIII FIL2500 KATWIJK,PAS999
14
+ :61:1105230523D11,63N426NONREF
15
+ :86:BEA NR:XXX1234 23.05.11/09.08 DIGROS FIL1015 KATWIJK Z,PAS999
16
+ :61:1105220523D11,8N426NONREF
17
+ :86:BEA NR:XXX1234 22.05.11/14.25 MC DONALDS A44 LEIDEN,PAS999
18
+ :61:1105210523D13,45N426NONREF
19
+ :86:BEA NR:XXX1234 21.05.11/12.09 PRINCE FIL. 55 KATWIJK Z,PAS999
20
+ :61:1105210523D15,49N426NONREF
21
+ :86:BEA NR:XXX1234 21.05.11/12.55 DIRX FIL6017 KATWIJK ZH ,PAS999
22
+
23
+ :61:1105210523D107,N426NONREF
24
+ :86:BEA NR:XXX1234 21.05.11/12.04 HANS ANDERS OPT./056 KAT,PAS999
25
+ :61:1105220523D141,48N426NONREF
26
+ :86:BEA NR:XXX1234 22.05.11/13.45 MYCOM DEN HAAG S-GRAVEN,PAS999
27
+ :62F:C110523EUR876,84
28
+ -
29
+ ABNANL2A
30
+ 940
31
+ ABNANL2A
32
+ :20:ABN AMRO BANK NV
33
+ :25:517852257
34
+ :28:19322/1
35
+ :60F:C110523EUR2876,84
36
+ :61:1105240524D9,49N426NONREF
37
+ :86:BEA NR:XXX1234 24.05.11/09.18 PETS PLACE KATWIJK KATWI,PAS999
38
+ :61:1105240524D15,N426NONREF
39
+ :86:52.89.39.882 MYCOM DEN HAAG S-GRAVEN,PAS999
40
+ :62F:C110524EUR1849,75
41
+ -
@@ -0,0 +1,54 @@
1
+ ABNANL2A
2
+ 940
3
+ ABNANL2A
4
+ :20:ABN AMRO BANK NV
5
+ :25:123212321
6
+ :28:1301/1
7
+ :60F:C140112EUR10000,9
8
+ :61:1401110113D5,1N426NONREF
9
+ :86:BEA NR:MA1402 11.01.14/12.00 XXX XX XXXXXX AMSTERDAM ,PAS123
10
+ :61:1401130113D10,N426NONREF
11
+ :86:BEA NR:NND130 13.01.14/11.00 XXXXX 99 XXXXXX BV AMSTE,PAS123
12
+ :61:1401130113D10,N658NONREF
13
+ :86:/TRTP/SEPA OVERBOEKING/IBAN/NL25ABNA0987654321/BIC/ABNANL2A/NAME/
14
+ FOOBAR/REMI/SAVINGS/EREF/NOTPROVIDED/ORDP//ID/20
15
+ 3798473
16
+ :62F:C140113EUR9980,9
17
+ -
18
+ ABNANL2A
19
+ 940
20
+ ABNANL2A
21
+ :20:ABN AMRO BANK NV
22
+ :25:123212321
23
+ :28:2701/1
24
+ :60F:C140124EUR9980,9
25
+ :61:1401260127D4,N944NONREF
26
+ :86:SEPA IDEAL IBAN: NL70ABNA0888888888
27
+ BIC: ABNANL2A NAAM: NS GROEP INZAKE NSR IDEA
28
+ OMSCHRIJVING: 4851430136 0030000 735822580 NS E-TICKET(S)
29
+ KENMERK: 26-01-2014 18:14 003000 0735822580
30
+ :61:1401250127D1000,N422NONREF
31
+ :86:54.49.42.108 ABC BOOM KK
32
+
33
+ :61:1401260127D1000,N946NONREF
34
+ :86:SEPA ACCEPTGIROBETALING IBAN: NL86INGB0002445588
35
+ BIC: INGBNL2A NAAM: BELASTINGDIENST
36
+ BETALINGSKENM.: 1234567890098876 ID DEBITEUR: 777777777
37
+ :61:1401260127D1000,N946NONREF
38
+ :86:SEPA ACCEPTGIROBETALING IBAN: NL86INGB0002445588
39
+ BIC: INGBNL2A NAAM: BELASTINGDIENST
40
+ BETALINGSKENM.: 1234567890098876 ID DEBITEUR: 777777777
41
+ :61:1401260127D1000,N946NONREF
42
+ :86:SEPA ACCEPTGIROBETALING IBAN: NL86INGB0002445588
43
+ BIC: INGBNL2A NAAM: BELASTINGDIENST
44
+ BETALINGSKENM.: 1234567890098876 ID DEBITEUR: 777777777
45
+ :61:1401260127D1000,N946NONREF
46
+ :86:SEPA ACCEPTGIROBETALING IBAN: NL86INGB0002445588
47
+ BIC: INGBNL2A NAAM: BELASTINGDIENST
48
+ BETALINGSKENM.: 1234567890098876 ID DEBITEUR: 777777777
49
+ :61:1401260127D1000,N946NONREF
50
+ :86:SEPA ACCEPTGIROBETALING IBAN: NL86INGB0002445588
51
+ BIC: INGBNL2A NAAM: BELASTINGDIENST
52
+ BETALINGSKENM.: 1234567890098876 ID DEBITEUR: 777777777
53
+ :62F:C140127EUR3976,9
54
+ -
@@ -0,0 +1,24 @@
1
+ 0000 01INGBNL2AXXXX00001
2
+ 0000 01INGBNL2AXXXX00001
3
+ 940 00
4
+ :20:MPBZ
5
+ :25:0001234567
6
+ :28C:000
7
+ :60F:C100722EUR0,00
8
+ :61:100722D25,03NOV NONREF
9
+ :86: RC AFREKENING BETALINGSVERKEER
10
+ BETREFT REKENING 4715589 PERIODE: 01-10-2010 / 31-12-2010
11
+ ING Bank N.V. tarifering ING
12
+ :61:100722D3,03NOV NONREF
13
+ :86:0111111111 GPSEOUL SPOEDBETALING MPBZS1016000047 GPSEOUL
14
+ :61:100722D1,11NGT TMG TANGO
15
+ :86:0111111111 ING iDEAL KN: TMG TANGO TRANSACTIENR 0050000534527978 10­06­2010 15:32 TMG TANGO ING Bank inzake GPKyoto
16
+ :61:100722D20,00NGM NONREF
17
+ :86:0111111111 ABN AMRO BANK>AMSTERDAM 22­07­2010 09:57 002 5595781
18
+ :61:100722D1,10NGT NONREF
19
+ :86:0111111111 GPPeking 170000001AC
20
+ :61:100722C3,68NVZ NONREF
21
+ :86: EJ46GREENP100610T1456 CLIEOP TMG GPHONGKONG AMSTERDAM
22
+ :62F:C100723EUR3,47
23
+ :86:D000004C000002D25,24C28,71
24
+ -XXX
@@ -0,0 +1,31 @@
1
+ 0000 01INGBNL2AXXXX00001
2
+ 0000 01INGBNL2AXXXX00001
3
+ 940 00
4
+ :20:MPBZ
5
+ :25:0001234567
6
+ :28C:000
7
+ :60F:C130630EUR500,00
8
+ :61:130701D10,00NDV NONREF
9
+ :86: RC afrekening betalingsverkeer
10
+ Factuurnr. 123456 Betreft rekening 12.34.567
11
+ Periode: 01-04-2013 / 30-06-2013
12
+ :61:130701C300,00NOV NONREF
13
+ :86:0001234567 VAN Zkl Kwartaal Spaarrekening
14
+ :61:130701D400,00NGT EREF
15
+ :86:NL57ABNA0987654321 ABNANL2A J AAP NOTPROVIDED kilometervergoed
16
+ ing 2e kwartaal 2013
17
+ :61:130702D6,00NGT EREF
18
+ :86:NL57ABNA0987654321 ABNANL2A J AAP / FOO B.V. NOTPROVIDED parkeren
19
+ :61:130715D7000,00NGT 8850426741301240
20
+ :86:NL86INGB0002445588 INGBNL2A BELASTINGDIENST BTW 2e kwartaal 2013
21
+ SCOR/CUR/8850426741301240
22
+ :61:130715C400,00NOV NONREF
23
+ :86:0001234567 VAN Zkl Kwartaal Spaarrekening
24
+ :61:130930D100,00NGT EREF
25
+ :86:NL57ABNA0987654321 ABNANL2A J AAP kilometervergoeding 3e kwart
26
+ aal
27
+ :62F:C131001EUR400,00
28
+ :64:C131001EUR300,00
29
+ :65:C130630EUR200,00
30
+ :86:D000046C000017D10000,18C20000,00
31
+ -XXX
@@ -0,0 +1,140 @@
1
+ :940:
2
+ :20:940A121001
3
+ :25:2121.21.211EUR
4
+ :28:00000/00
5
+ :60F:C120928EUR000000017431,67
6
+ :61:121001D000000000050,00N0701313131319 J. DOE
7
+ :86:Incasso deposit Savings Account
8
+ :62F:C121001EUR000000017381,67
9
+ :20:940A121002
10
+ :25:2121.21.211EUR
11
+ :28:00000/00
12
+ :60F:C121001EUR000000017381,67
13
+ :62F:C121002EUR000000017381,67
14
+ :20:940A121003
15
+ :25:2121.21.211EUR
16
+ :28:00000/00
17
+ :60F:C121002EUR000000017381,67
18
+ :62F:C121003EUR000000017381,67
19
+ :20:940A121004
20
+ :25:2121.21.211EUR
21
+ :28:00000/00
22
+ :60F:C121003EUR000000017381,67
23
+ :61:121001D000000000030,25N093NONREF Kosten
24
+ :86:Periode 01-07-2012 t/m 30-09-2012
25
+ :62F:C121004EUR000000017351,42
26
+ :20:940A121005
27
+ :25:2121.21.211EUR
28
+ :28:00000/00
29
+ :60F:C121004EUR000000017351,42
30
+ :62F:C121005EUR000000017351,42
31
+ :20:940A121008
32
+ :25:2121.21.211EUR
33
+ :28:00000/00
34
+ :60F:C121005EUR000000017351,42
35
+ :61:121008D000000000190,14N0600101000731 INSURRANCE
36
+ :86:BETALINGSKENM. 490022201282
37
+ :86:ARBEIDS ONG. VERZ. 00333333333
38
+ :86:PERIODE 06.10.2012 - 06.11.2012
39
+ :62F:C121008EUR000000017161,28
40
+ :20:940A121009
41
+ :25:2121.21.211EUR
42
+ :28:00000/00
43
+ :60F:C121008EUR000000017161,28
44
+ :62F:C121009EUR000000017161,28
45
+ :20:940A121010
46
+ :25:2121.21.211EUR
47
+ :28:00000/00
48
+ :60F:C121009EUR000000017161,28
49
+ :62F:C121010EUR000000017161,28
50
+ :20:940A121011
51
+ :25:2121.21.211EUR
52
+ :28:00000/00
53
+ :60F:C121010EUR000000017161,28
54
+ :62F:C121011EUR000000017161,28
55
+ :20:940A121012
56
+ :25:2121.21.211EUR
57
+ :28:00000/00
58
+ :60F:C121011EUR000000017161,28
59
+ :62F:C121012EUR000000017161,28
60
+ :20:940A121015
61
+ :25:2121.21.211EUR
62
+ :28:00000/00
63
+ :60F:C121012EUR000000017161,28
64
+ :61:121014D000000000037,50N0710121212122 NEWPAPER
65
+ :86:L20129999 741
66
+ :61:121014D000000000037,50N0710121212122 NEWPAPER
67
+ :86:L20119999 741
68
+ :62F:C121015EUR000000017086,28
69
+ :20:940A121016
70
+ :25:2121.21.211EUR
71
+ :28:00000/00
72
+ :60F:C121015EUR000000017086,28
73
+ :62F:C121016EUR000000017086,28
74
+ :20:940A121017
75
+ :25:2121.21.211EUR
76
+ :28:00000/00
77
+ :60F:C121016EUR000000017086,28
78
+ :61:121017D000000000088,06N0710454545454 Accountant
79
+ :86:factuur 201232621
80
+ :61:121017C000000012100,00N1270987654321 COMPANY B.V.
81
+ :86:Invoice
82
+ :62F:C121017EUR000000029098,22
83
+ :20:940A121018
84
+ :25:2121.21.211EUR
85
+ :28:00000/00
86
+ :60F:C121017EUR000000029098,22
87
+ :62F:C121018EUR000000029098,22
88
+ :20:940A121019
89
+ :25:2121.21.211EUR
90
+ :28:00000/00
91
+ :60F:C121018EUR000000029098,22
92
+ :61:121019D000000004019,23N5090767676767 J. DOE EO
93
+ :86:salaris
94
+ :62F:C121019EUR000000025078,99
95
+ :20:940A121022
96
+ :25:2121.21.211EUR
97
+ :28:00000/00
98
+ :60F:C121019EUR000000025078,99
99
+ :62F:C121022EUR000000025078,99
100
+ :20:940A121023
101
+ :25:2121.21.211EUR
102
+ :28:00000/00
103
+ :60F:C121022EUR000000025078,99
104
+ :62F:C121023EUR000000025078,99
105
+ :20:940A121024
106
+ :25:2121.21.211EUR
107
+ :28:00000/00
108
+ :60F:C121023EUR000000025078,99
109
+ :62F:C121024EUR000000025078,99
110
+ :20:940A121025
111
+ :25:2121.21.211EUR
112
+ :28:00000/00
113
+ :60F:C121024EUR000000025078,99
114
+ :61:121025D000000003076,00N084P002445588 Belastingdienst
115
+ :86:BETALINGSKENM. 2828282828282828
116
+ :62F:C121025EUR000000022002,99
117
+ :20:940A121026
118
+ :25:2121.21.211EUR
119
+ :28:00000/00
120
+ :60F:C121025EUR000000022002,99
121
+ :61:121026D000000005327,00N084P002445588 Belastingdienst
122
+ :86:BETALINGSKENM. 3838383838383838
123
+ :61:121026D000000010000,00N0716666666666 J. DOE Holding B.V.
124
+ :62F:C121026EUR000000006675,99
125
+ :20:940A121029
126
+ :25:2121.21.211EUR
127
+ :28:00000/00
128
+ :60F:C121026EUR000000006675,99
129
+ :62F:C121029EUR000000006675,99
130
+ :20:940A121030
131
+ :25:2121.21.211EUR
132
+ :28:00000/00
133
+ :60F:C121029EUR000000006675,99
134
+ :62F:C121030EUR000000006675,99
135
+ :20:940A121031
136
+ :25:2121.21.211EUR
137
+ :28:00000/00
138
+ :60F:C121030EUR000000006675,99
139
+ :62F:C121031EUR000000006675,99
140
+