bankserv 0.1.3

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 (75) hide show
  1. data/.gitignore +6 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +16 -0
  4. data/Rakefile +8 -0
  5. data/bankserv.gemspec +31 -0
  6. data/config.ru +7 -0
  7. data/lib/bankserv.rb +48 -0
  8. data/lib/bankserv/account_holder_verification.rb +90 -0
  9. data/lib/bankserv/bank_account.rb +19 -0
  10. data/lib/bankserv/configuration.rb +67 -0
  11. data/lib/bankserv/credit.rb +70 -0
  12. data/lib/bankserv/debit.rb +94 -0
  13. data/lib/bankserv/eft.rb +83 -0
  14. data/lib/bankserv/engine.rb +183 -0
  15. data/lib/bankserv/engine/engine_configuration.rb +12 -0
  16. data/lib/bankserv/engine/engine_process.rb +3 -0
  17. data/lib/bankserv/request.rb +27 -0
  18. data/lib/bankserv/transaction.rb +22 -0
  19. data/lib/bankserv/transmission/document.rb +43 -0
  20. data/lib/bankserv/transmission/input_document.rb +84 -0
  21. data/lib/bankserv/transmission/output_document.rb +27 -0
  22. data/lib/bankserv/transmission/record.rb +13 -0
  23. data/lib/bankserv/transmission/reply_document.rb +27 -0
  24. data/lib/bankserv/transmission/set.rb +120 -0
  25. data/lib/bankserv/transmission/set/account_holder_verification.rb +81 -0
  26. data/lib/bankserv/transmission/set/account_holder_verification_output.rb +17 -0
  27. data/lib/bankserv/transmission/set/credit.rb +44 -0
  28. data/lib/bankserv/transmission/set/debit.rb +44 -0
  29. data/lib/bankserv/transmission/set/document.rb +45 -0
  30. data/lib/bankserv/transmission/set/eft.rb +228 -0
  31. data/lib/bankserv/transmission/set/eft_output.rb +12 -0
  32. data/lib/bankserv/transmission/set/eft_redirect.rb +18 -0
  33. data/lib/bankserv/transmission/set/eft_unpaid.rb +18 -0
  34. data/lib/bankserv/transmission/set/reply.rb +47 -0
  35. data/lib/bankserv/transmission/statement.rb +46 -0
  36. data/lib/bankserv/version.rb +3 -0
  37. data/lib/config/ahv.yml +9 -0
  38. data/lib/core_extensions.rb +37 -0
  39. data/lib/generators/active_record/bankserv_generator.rb +30 -0
  40. data/lib/generators/active_record/templates/migration.rb +141 -0
  41. data/spec/examples/ahv_input_file.txt +7 -0
  42. data/spec/examples/ahv_output_file.txt +7 -0
  43. data/spec/examples/credit_eft_input.txt +166 -0
  44. data/spec/examples/debit_eft_input_file.txt +20 -0
  45. data/spec/examples/eft_input_with_2_sets.txt +8 -0
  46. data/spec/examples/eft_output_file.txt +35 -0
  47. data/spec/examples/host2host/tmp.log +1 -0
  48. data/spec/examples/reply/rejected_transmission.txt +7 -0
  49. data/spec/examples/reply/reply_file.txt +5 -0
  50. data/spec/examples/statement4_unpacked.dat +51 -0
  51. data/spec/examples/tmp/OUTPUT0412153500.txt +35 -0
  52. data/spec/examples/tmp/REPLY0412153000.txt +5 -0
  53. data/spec/factories.rb +90 -0
  54. data/spec/internal/config/database.yml.sample +3 -0
  55. data/spec/internal/config/routes.rb +3 -0
  56. data/spec/internal/db/schema.rb +138 -0
  57. data/spec/internal/log/.gitignore +1 -0
  58. data/spec/internal/public/favicon.ico +0 -0
  59. data/spec/lib/bankserv/account_holder_verification_spec.rb +104 -0
  60. data/spec/lib/bankserv/configuration_spec.rb +34 -0
  61. data/spec/lib/bankserv/core_ext_spec.rb +43 -0
  62. data/spec/lib/bankserv/credit_spec.rb +92 -0
  63. data/spec/lib/bankserv/debit_spec.rb +187 -0
  64. data/spec/lib/bankserv/engine/engine_spec.rb +142 -0
  65. data/spec/lib/bankserv/transaction_spec.rb +32 -0
  66. data/spec/lib/bankserv/transmission/input_document_spec.rb +207 -0
  67. data/spec/lib/bankserv/transmission/output_document_spec.rb +210 -0
  68. data/spec/lib/bankserv/transmission/reply_document_spec.rb +117 -0
  69. data/spec/lib/bankserv/transmission/set/account_holder_verification_spec.rb +108 -0
  70. data/spec/lib/bankserv/transmission/set/credit_spec.rb +96 -0
  71. data/spec/lib/bankserv/transmission/set/debit_spec.rb +103 -0
  72. data/spec/lib/bankserv/transmission/statement_spec.rb +109 -0
  73. data/spec/spec_helper.rb +28 -0
  74. data/spec/support/helpers.rb +207 -0
  75. metadata +223 -0
@@ -0,0 +1,12 @@
1
+ module Bankserv
2
+
3
+ module Transmission::UserSet
4
+
5
+ class EftOutput < Set
6
+
7
+
8
+ end
9
+
10
+ end
11
+
12
+ end
@@ -0,0 +1,18 @@
1
+ module Bankserv
2
+
3
+ module Transmission::UserSet
4
+
5
+ class EftRedirect < Set
6
+
7
+ def process
8
+ transactions.each do |transaction|
9
+ eft = Bankserv::Eft.for_internal_reference(transaction.reference).first
10
+ eft.process_response(transaction.data.merge(response_status: 'redirect')) if eft
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ module Bankserv
2
+
3
+ module Transmission::UserSet
4
+
5
+ class EftUnpaid < Set
6
+
7
+ def process
8
+ transactions.each do |transaction|
9
+ eft = Bankserv::Eft.for_internal_reference(transaction.reference).first
10
+ eft.process_response(transaction.data.merge(response_status: 'unpaid')) if eft
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,47 @@
1
+ module Bankserv
2
+
3
+ module Transmission::UserSet
4
+
5
+ class Reply < Set
6
+
7
+ def process
8
+ document = nil
9
+
10
+ transactions.each do |transaction|
11
+ case transaction.record_type
12
+ when "transmission_status"
13
+ document = Bankserv::InputDocument.for_transmission_number(transaction.data[:transmission_number])
14
+ document.reply_status = transaction.data[:transmission_status]
15
+ document.save!
16
+ when "transmission_rejected_reason"
17
+ document.error = {
18
+ code: transaction.data[:error_code],
19
+ message: transaction.data[:error_message]
20
+ }
21
+
22
+ document.save!
23
+ when "eft_status"
24
+ set = document.set_with_generation_number(transaction.data[:user_code_generation_number])
25
+ set.reply_status = transaction.data[:user_set_status]
26
+ set.save!
27
+ when "accepted_report_reply"
28
+ # what do we do here.. what is an accepted report reply?
29
+ when "rejected_message"
30
+ set = document.set_with_generation_number(transaction.data[:user_code_generation_number])
31
+ record = set.record_with_sequence_number(transaction.data[:user_sequence_number])
32
+
33
+ record.error = {
34
+ code: transaction.data[:error_code],
35
+ message: transaction.data[:error_message]
36
+ }
37
+
38
+ record.save!
39
+ end
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,46 @@
1
+ module Bankserv
2
+
3
+ class Statement < ActiveRecord::Base
4
+
5
+ has_many :transactions, :foreign_key => 'bankserv_statement_id'
6
+
7
+ def self.store(string)
8
+ options = Absa::Esd::Transmission::Document.hash_from_s(string)
9
+
10
+ raise "Expected a document set" unless options[:type] == "document"
11
+
12
+ client_code = options[:data][0][:data][0][:data][:client_code]
13
+
14
+ statement = new
15
+ statement.client_code = client_code
16
+ statement.data = options
17
+ statement.save!
18
+ statement
19
+ end
20
+
21
+ def process!
22
+ raise "Document already processed" if processed?
23
+
24
+ recon_account_detail_records.each do |record|
25
+ Bankserv::Transaction.create! data: record[:data], client_code: client_code, bankserv_statement_id: id
26
+ end
27
+
28
+ self.processed = true
29
+ self.save
30
+ end
31
+
32
+ def recon_transmission_data
33
+ data[:data][0][:data]
34
+ end
35
+
36
+ def recon_account_data
37
+ recon_transmission_data[1][:data]
38
+ end
39
+
40
+ def recon_account_detail_records
41
+ recon_account_data.select{|item| item[:type] == 'detail'}
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,3 @@
1
+ module Bankserv
2
+ VERSION = "0.1.3"
3
+ end
@@ -0,0 +1,9 @@
1
+ return_codes:
2
+ '0': 'match'
3
+ '1': 'no_match'
4
+ '2': 'no_match'
5
+ '3': 'no_match'
6
+ '4': 'no_match'
7
+ '77': 'not_validated'
8
+ '88': 'no_timely_response'
9
+ '99': 'account_number_does_not_exist'
@@ -0,0 +1,37 @@
1
+ class Hash
2
+
3
+ def symbolize_keys
4
+ dup.symbolize_keys!
5
+ end
6
+
7
+ def symbolize_keys!
8
+ keys.each do |key|
9
+ self[(key.to_sym rescue key) || key] = delete(key)
10
+ end
11
+ self
12
+ end
13
+
14
+ def only(keypers)
15
+ dup.only!(keypers)
16
+ end
17
+
18
+ def only!(keypers)
19
+ self.select! {|k,v| keypers.include?(k)}
20
+ self
21
+ end
22
+
23
+ def filter_attributes(model)
24
+ self.only(model.send(:attribute_names).map(&:to_sym))
25
+ end
26
+
27
+ end
28
+
29
+ class Date
30
+
31
+ def business_day?
32
+ return false if self.holiday?(:za)
33
+ return false if self.saturday? || self.sunday?
34
+ return true
35
+ end
36
+
37
+ end
@@ -0,0 +1,30 @@
1
+ module Bankserv
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ desc <<-CONTENT
9
+ Copies the bankserv migration file to the migrations
10
+ folder.
11
+
12
+ Please run rake db:migrate once the installer is
13
+ complete.
14
+
15
+ CONTENT
16
+
17
+ def self.next_migration_number(dirname) #:nodoc:
18
+ if ActiveRecord::Base.timestamped_migrations
19
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
20
+ else
21
+ "%.3d" % (current_migration_number(dirname) + 1)
22
+ end
23
+ end
24
+
25
+ def create_migration_file
26
+ migration_template 'migration.rb', 'db/migrate/create_bankserv_tables.rb'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,141 @@
1
+ class CreateBankservTables < ActiveRecord::Migration
2
+ def self.change
3
+
4
+ create_table :bankserv_statements, :force => true do |t|
5
+ t.boolean :processed, :default => false
6
+ t.string :client_code
7
+ t.text :data
8
+ t.timestamps
9
+ end
10
+
11
+ create_table :bankserv_transactions, :force => true do |t|
12
+ t.boolean :processed, :default => false
13
+ t.string :client_code
14
+ t.text :data
15
+ t.references :bankserv_statement
16
+ t.timestamps
17
+ end
18
+
19
+ create_table :bankserv_configurations, :force => true do |t|
20
+ t.boolean :active, :default => false
21
+ t.string :client_code
22
+ t.string :client_name
23
+ t.string :client_abbreviated_name
24
+ t.string :user_code
25
+ t.string :department_code
26
+ t.integer :transmission_number
27
+ t.integer :user_generation_number
28
+ t.string :internal_branch_code
29
+ t.boolean :live_env, :default => false
30
+ t.timestamps
31
+ end
32
+
33
+ create_table :bankserv_requests do |t|
34
+ t.string :type
35
+ t.text :data
36
+ t.boolean :processed, :default => false
37
+ t.string :status
38
+ t.text :response
39
+ t.boolean :test, :default => false
40
+ t.timestamps
41
+ end
42
+
43
+ create_table :bankserv_bank_accounts do |t|
44
+ t.string :branch_code
45
+ t.string :account_number
46
+ t.string :account_type
47
+ t.string :initials
48
+ t.string :account_name
49
+ t.string :id_number
50
+ t.timestamps
51
+ end
52
+
53
+ create_table :bankserv_account_holder_verifications do |t|
54
+ t.boolean :internal, :default => false
55
+ t.references :bankserv_bank_account
56
+ t.references :bankserv_request
57
+ t.string :status, :default => "new"
58
+ t.text :response
59
+ t.string :user_ref
60
+ t.string :internal_user_ref
61
+ t.timestamps
62
+ end
63
+
64
+ create_table :bankserv_debits do |t|
65
+ t.string :record_type
66
+ t.decimal :amount, :precision => 10, :scale => 2
67
+ t.string :action_date
68
+ t.references :bankserv_bank_account
69
+ t.references :bankserv_request
70
+ t.integer :batch_id
71
+ t.string :status, :default => "new"
72
+ t.text :response
73
+ t.string :user_ref
74
+ t.string :internal_user_ref
75
+ t.timestamps
76
+ end
77
+
78
+ create_table :bankserv_credits do |t|
79
+ t.string :record_type
80
+ t.decimal :amount, :precision => 10, :scale => 2
81
+ t.string :action_date
82
+ t.references :bankserv_bank_account
83
+ t.references :bankserv_request
84
+ t.integer :batch_id
85
+ t.string :status, :default => "new"
86
+ t.text :response
87
+ t.string :user_ref
88
+ t.string :internal_user_ref
89
+ t.timestamps
90
+ end
91
+
92
+ create_table :bankserv_documents do |t|
93
+ t.string :type
94
+ t.references :set
95
+ t.boolean :processed, :default => false
96
+ t.string :transmission_status
97
+ t.string :rec_status
98
+ t.string :transmission_number
99
+ t.string :reply_status
100
+ t.text :error
101
+ t.timestamps
102
+ end
103
+
104
+ create_table :bankserv_sets do |t|
105
+ t.references :set
106
+ t.string :type
107
+ t.string :generation_number
108
+ t.string :reply_status
109
+ t.timestamps
110
+ end
111
+
112
+ create_table :bankserv_records do |t|
113
+ t.references :set
114
+ t.string :record_type
115
+ t.string :reference
116
+ t.text :data
117
+ t.timestamps
118
+ end
119
+
120
+ create_table :bankserv_engine_configurations do |t|
121
+ t.integer :interval_in_minutes
122
+ t.string :input_directory
123
+ t.string :output_directory
124
+ t.string :archive_directory
125
+ end
126
+
127
+ create_table :bankserv_engine_processes do |t|
128
+ t.boolean :running
129
+ t.boolean :success
130
+ t.text :response
131
+ t.timestamps
132
+
133
+ t.datetime :completed_at
134
+ end
135
+
136
+ # default values
137
+ Bankserv::EngineConfiguration.create!(interval_in_minutes: 60, input_directory: "/tmp", output_directory: "/tmp", archive_directory: "/tmp")
138
+
139
+ end
140
+
141
+ end
@@ -0,0 +1,7 @@
1
+ 000L2009070302236TEST 000000000000
2
+ 030L0000001000001
3
+ 031L00000010000000010944025246703085829086M CHAUKE 00000000AHV1
4
+ 031L00000020000000029684746696103120039082A VAN MOLENDORF 00000000AHV2
5
+ 031L00000030000000024920081778801261110087U NKWEBA 00000000AHV3
6
+ 039L0000003000000006554885370
7
+ 999L000000007
@@ -0,0 +1,7 @@
1
+ 000L2009070302236TEST 00000001000000
2
+ 030L0000001000001
3
+ 031L00000010000000010944025246703085829086M CHAUKE 00000000AHV1
4
+ 031L00000020000000029684746696103120039082A VAN MOLENDORF 00020304AHV2
5
+ 031L00000030000000024920081778801261110087U NKWEBA 00000000AHV3
6
+ 039L0000003000000006554885370
7
+ 999L000000007
@@ -0,0 +1,166 @@
1
+ 000L2008080800986TESTTEST 000084600000
2
+ 020L0499990808080808150808080808110000780846BATCH YY
3
+ 020L1063200504068123456999900007805002100081136250100001500000080808880 TESTTEST _2055185_PAY USER DEWEY ASSOCIATES 00000000000000000000 21
4
+ 020L1063200504068123456999900007963200504051717311100000542380080808880 TESTTEST _2055184_PAY USER SURE SLIM WELLNESS CLINIC SA 00000000000000000000 21
5
+ 020L1063200504068123456999900008063200509193079313100000224500080808880 TESTTEST _2055183_PAY USER RUGGA KIDS EAST RAND 00000000000000000000 21
6
+ 020L1063200504068123456999900008110280901028268041100000114000080808880 TESTTEST _2055182_PAY USER RUGGA KIDS 00000000000000000000 21
7
+ 020L1063200504068123456999900008225065562162065752100000084000080808880 TESTTEST _2055181_PAY USER RUGGA KIDS WEST RAND 00000000000000000000 21
8
+ 020L1063200504068123456999900008322202662181078166100000248588080808880 TESTTEST _2055180_PAY USER MENLYN PAYROLL ADMINISTRATION 00000000000000000000 21
9
+ 020L1063200504068123456999900008405100100011986778100000046000080808880 TESTTEST _2055179_PAY USER SPUTNIC FINANSIELE ADVISEURS 00000000000000000000 21
10
+ 020L1063200504068123456999900008505100100001970534100000424650080808880 TESTTEST _2055178_PAY USER AMG 00000000000000000000 21
11
+ 020L1063200504068123456999900008663200504063350931100000175000080808880 TESTTEST _2055177_PAY USER CHEMC PUBLISHERS 00000000000000000000 21
12
+ 020L1063200504068123456999900008725065562099422190100000288270080808880 TESTTEST _2055176_PAY USER AMUCUS MAKELAARS 00000000000000000000 21
13
+ 020L1063200504068123456999900008805100100012784141100000015000080808880 TESTTEST _2055175_PAY USER DYNAMIC FINANCIAL SOLUTIONS 00000000000000000000 21
14
+ 020L1063200504068123456999900008925065562070310843100000179000080808880 TESTTEST _2055174_PAY USER PAYROLL MASTERS 00000000000000000000 21
15
+ 020L1063200504068123456999900009063200501220161923100000366300080808880 TESTTEST _2055173_PAY USER JCJ ROBBERTZE VENNOTE 00000000000000000000 21
16
+ 020L1063200504068123456999900009105100100000160180100001150603080808880 TESTTEST _2055172_PAY USER D BETE FINANCIALS 00000000000000000000 21
17
+ 020L1063200504068123456999900009225054562095194751100001269280080808880 TESTTEST _2055171_PAY USER THUKELA METERING CC 00000000000000000000 21
18
+ 020L1063200504068123456999900009363200504071395890100000495000080808880 TESTTEST _2055170_PAY USER EAST LONDON SELF STORAGE 00000000000000000000 21
19
+ 020L1063200504068123456999900009405100100071105301100001030000080808880 TESTTEST _2055169_PAY USER EMA CAPE TOWN 00000000000000000000 21
20
+ 020L1063200504068123456999900009526044952100657520100000288000080808880 TESTTEST _2055168_PAY USER DUIWELSKLOOF LAERSKOOL 00000000000000000000 21
21
+ 020L1063200504068123456999900009625134562054634128100000118269080808880 TESTTEST _2055167_PAY USER DANVILLE HULP PROJEK 00000000000000000000 21
22
+ 020L1063200504068123456999900009763200509103104540100000200000080808880 TESTTEST _2055166_PAY USER ACADEMY OF ADVANCED TECHNOLOG 00000000000000000000 21
23
+ 020L1063200504068123456999900009825400562028250570100000967207080808880 TESTTEST _2055165_PAY USER MOTION TELECOMMUNICATIONS 00000000000000000000 21
24
+ 020L1063200504068123456999900009919304201930012810100005165727080808880 TESTTEST _2055164_PAY USER JS INVESTMENTS T/A RENTA SHA 00000000000000000000 21
25
+ 020L1063200504068123456999900010063200504052569658100000104000080808880 TESTTEST _2055163_PAY USER SCUBAVERSITY 00000000000000000000 21
26
+ 020L1063200504068123456999900010101154500011948787100001680900080808880 TESTTEST _2055162_PAY USER INFOFX 00000000000000000000 21
27
+ 020L1063200504068123456999900010205001700080017436100000069500080808880 TESTTEST _2055161_PAY USER OLD GREYS UNION 00000000000000000000 21
28
+ 020L1063200504068123456999900010305255100033268088100000188435080808880 TESTTEST _2055160_PAY USER VAN WYK 00000000000000000000 21
29
+ 020L1063200504068123456999900010463200504062574748100000217068080808880 TESTTEST _2055159_PAY USER GARYP T/A PICTURE PERFECT 00000000000000000000 21
30
+ 020L1063200504068123456999900010516024501602339775100002639022080808880 TESTTEST _2055158_PAY USER G ERASMUS REKENKUNDIGE DIENST 00000000000000000000 21
31
+ 020L1063200504068123456999900010605100100411345060100000823365080808880 TESTTEST _2055157_PAY USER PICTURE PERFECT HATFIELD 00000000000000000000 21
32
+ 020L1063200504068123456999900010700995300421498757100000352000080808880 TESTTEST _2055156_PAY USER RUGGA KIDS SA PTY LTD 00000000000000000000 21
33
+ 020L1063200504068123456999900010805254600033165599100000792000080808880 TESTTEST _2055155_PAY USER RUGGA KIDS PRETORIA 00000000000000000000 21
34
+ 020L1063200504068123456999900010905100100023355743100000234000080808880 TESTTEST _2055154_PAY USER RUGGA KIDS SA PTY LTD 00000000000000000000 21
35
+ 020L1063200504068123456999900011051680509075905022100000921617080808880 TESTTEST _2055153_PAY USER EXCELL ACCOUNTING SERVICES 00000000000000000000 21
36
+ 020L1063200504068123456999900011114194901419089617100000145900080808880 TESTTEST _2055152_PAY USER EXCELLENT HOMEWARE 00000000000000000000 21
37
+ 020L1063200504068123456999900011205100100032985258100000775962080808880 TESTTEST _2055151_PAY USER LARIAT TECHNOLOGIES 00000000000000000000 21
38
+ 020L1063200504068123456999900011363200501003360675100001657500080808880 TESTTEST _2055150_PAY USER IAASA 00000000000000000000 21
39
+ 020L1063200504068123456999900011400630500200123475100003470160080808880 TESTTEST _2055149_PAY USER CCF ASSOCIATES 00000000000000000000 21
40
+ 020L1063200504068123456999900011563200509097479936100000468000080808880 TESTTEST _2055148_PAY USER SEEDCAP PTY LTD 00000000000000000000 21
41
+ 020L1063200504068123456999900011622052662092576027100002505200080808880 TESTTEST _2055147_PAY USER PICTURE PERFECT DUBAN 00000000000000000000 21
42
+ 020L1063200504068123456999900011705100100628303343100000334500080808880 TESTTEST _2055146_PAY USER FAERIE GLEN SELF STORAGE 00000000000000000000 21
43
+ 020L1063200504068123456999900011863200504053302079100001345000080808880 TESTTEST _2055145_PAY USER BULLIVANT ACCOUNTING TAX SER 00000000000000000000 21
44
+ 020L1063200504068123456999900011963200501063871270100002160000080808880 TESTTEST _2055144_PAY USER TIENERS IN CHRISTUS 00000000000000000000 21
45
+ 020L1063200504068123456999900012063200504049418620100000857521080808880 TESTTEST _2055143_PAY USER INTEGRITAS OUDITEURE 00000000000000000000 21
46
+ 020L1063200504068123456999900012105100100425288536100000282300080808880 TESTTEST _2055142_PAY USER POOL REPAIR CENTRE 00000000000000000000 21
47
+ 020L1063200504068123456999900012210264201026001439100001148000080808880 TESTTEST _2055141_PAY USER MANDRE EIENDOMS TRUST 00000000000000000000 21
48
+ 020L1063200504068123456999900012363200504058643395100000184094080808880 TESTTEST _2055140_PAY USER WESSEL SMALBERGER 00000000000000000000 21
49
+ 020L1063200504068123456999900012463200500010242886100000356340080808880 TESTTEST _2055139_PAY USER EAST RAND DOCUMENTS SOLUTIONS 00000000000000000000 21
50
+ 020L1063200504068123456999900012563200504058021573100001467466080808880 TESTTEST _2055138_PAY USER PICTURE PERFECT 00000000000000000000 21
51
+ 020L1063200504068123456999900012605100100071093664100000210000080808880 TESTTEST _2055137_PAY USER EMA KIDS FOUNDATION 00000000000000000000 21
52
+ 020L1063200504068123456999900012763200504052805995100000907000080808880 TESTTEST _2055136_PAY USER BIZ AFRICA PTY LTD VON WIEL 00000000000000000000 21
53
+ 020L1063200504068123456999900012853510504059290222100009918070080808880 TESTTEST _2055135_PAY USER SQUARE ONE CAPITAL PTY LTD 00000000000000000000 21
54
+ 020L1063200504068123456999900012919104201910177911100002147500080808880 TESTTEST _2055134_PAY USER STRYDOM PROKUREURS 00000000000000000000 21
55
+ 020L1063200504068123456999900013063200504063058446100000417000080808880 TESTTEST _2055133_PAY USER VIP BIN CLEANING MATLAND 00000000000000000000 21
56
+ 020L1063200504068123456999900013163200501430580201100001900300080808880 TESTTEST _2055132_PAY USER NED HERV KERK OOSMOOT 00000000000000000000 21
57
+ 020L1063200504068123456999900013212840501284101932100003028980080808880 TESTTEST _2055131_PAY USER PRESSED IN TIME 00000000000000000000 21
58
+ 020L1063200504068123456999900013305100100033211736100000125000080808880 TESTTEST _2055130_PAY USER LVP PROKUREURS 00000000000000000000 21
59
+ 020L1063200504068123456999900013411280501128016583100000050000080808880 TESTTEST _2055129_PAY USER THOMSON ACCOUNTANTS 00000000000000000000 21
60
+ 020L1063200504068123456999900013511280501128016583100000166481080808880 TESTTEST _2055128_PAY USER THOMSON ACCOUNTANTS 00000000000000000000 21
61
+ 020L1063200504068123456999900013611280501128016567100000152952080808880 TESTTEST _2055127_PAY USER THOMSON ACCOUNTANTS 00000000000000000000 21
62
+ 020L1063200504068123456999900013705100100402087259100000150000080808880 TESTTEST _2055126_PAY USER RUGGA KIDS SA PTY 00000000000000000000 21
63
+ 020L1063200504068123456999900013863200504063531692100000350000080808880 TESTTEST _2055125_PAY USER GAUTENG SOCIETY OF ADVOCATES 00000000000000000000 21
64
+ 020L1063200504068123456999900013905254600033190283100011022020080808880 TESTTEST _2055124_PAY USER JCM REKENMEESTERS BK 00000000000000000000 21
65
+ 020L1063200504068123456999900014000125500420056084100001581224080808880 TESTTEST _2055123_PAY USER NOESIS INC 00000000000000000000 21
66
+ 020L1063200504068123456999900014163200504066398308100001596360080808880 TESTTEST _2055122_PAY USER MSR SECURITY 00000000000000000000 21
67
+ 020L1063200504068123456999900014225165562056207527100000426407080808880 TESTTEST _2055121_PAY USER JUSTIN HOLMES REGISTERED FINA 00000000000000000000 21
68
+ 020L1063200504068123456999900014312840501284056899100000239500080808880 TESTTEST _2055120_PAY USER ATTI 00000000000000000000 21
69
+ 020L1063200504068123456999900014417560501756006202100001038000080808880 TESTTEST _2055119_PAY USER LINKSFIELD PRIMARY 00000000000000000000 21
70
+ 020L1063200504068123456999900014563200504052669723100000575058080808880 TESTTEST _2055118_PAY USER ODYSSEY SOFTWARE 00000000000000000000 21
71
+ 020L1063200504068123456999900014623073262121300347100000031500080808880 TESTTEST _2055117_PAY USER GARDEN OBSESSIONS 00000000000000000000 21
72
+ 020L1063200504068123456999900014705100100073192759100000138100080808880 TESTTEST _2055116_PAY USER LIFESTYLE BOOKS MANGANGXA 00000000000000000000 21
73
+ 020L1063200504068123456999900014816024501602117411100002076000080808880 TESTTEST _2055115_PAY USER WORLD MISSION CENTRE 00000000000000000000 21
74
+ 020L1063200504068123456999900014925675562064619962100000060000080808880 TESTTEST _2055114_PAY USER JABULANI KHAKIBOS KIDS 00000000000000000000 21
75
+ 020L1063200504068123456999900015063200504055472171100000058250080808880 TESTTEST _2055113_PAY USER SURE SLIM BENONI/SPRINGS 00000000000000000000 21
76
+ 020L1063200504068123456999900015112320901232026794100001825000080808880 TESTTEST _2055112_PAY USER TRISAVE HAMADA 00000000000000000000 21
77
+ 020L1063200504068123456999900015263200504042937322100001107149080808880 TESTTEST _2055111_PAY USER THE GUARDIAN GROUP 00000000000000000000 21
78
+ 020L1063200504068123456999900015311280501128016567100000086593080808880 TESTTEST _2055110_PAY USER THOMSON ACCOUNTANTS 00000000000000000000 21
79
+ 020L1063200504068123456999900015426014662071481205100000558000080808880 TESTTEST _2055109_PAY USER BUYS GENOTE MAKELAARS 00000000000000000000 21
80
+ 020L1063200504068123456999900015505100100022750665100001111500080808880 TESTTEST _2055108_PAY USER ACCOUNT N TAX CC 00000000000000000000 21
81
+ 020L1063200504068123456999900015621151762049896246100000054657080808880 TESTTEST _2055107_PAY USER FORTUIN FUNERAL HOME 00000000000000000000 21
82
+ 020L1063200504068123456999900015725065562112480893100000051500080808880 TESTTEST _2055106_PAY USER BLUE WATER 00000000000000000000 21
83
+ 020L1063200504068123456999900015863200504048782638100000149704080808880 TESTTEST _2055105_PAY USER DEO GLORIA 00000000000000000000 21
84
+ 020L1063200504068123456999900015963200501150161831100000080000080808880 TESTTEST _2055104_PAY USER PETROHOF 00000000000000000000 21
85
+ 020L1063200504068123456999900016025065562000440173100000115000080808880 TESTTEST _2055103_PAY USER BENDOR GARDENS 00000000000000000000 21
86
+ 020L1063200504068123456999900016125770562005438470100000341500080808880 TESTTEST _2055102_PAY USER POOL CLINQUE 00000000000000000000 21
87
+ 020L1063200504068123456999900016263200505260151306100003387600080808880 TESTTEST _2055101_PAY USER L/S MAGALIESKRUIN 00000000000000000000 21
88
+ 020L1063200504068123456999900016314114801411257154100000046000080808880 TESTTEST _2055100_PAY USER VIDA COURT 00000000000000000000 21
89
+ 020L1063200504068123456999900016425065562093414242100000056000080808880 TESTTEST _2055099_PAY USER VILLA MERZEE 00000000000000000000 21
90
+ 020L1063200504068123456999900016525065562149866222100000069480080808880 TESTTEST _2055098_PAY USER VILLA TIMONICE 00000000000000000000 21
91
+ 020L1063200504068123456999900016626034754200045473100000883920080808880 TESTTEST _2055097_PAY USER UNICORN SECURITY 00000000000000000000 21
92
+ 020L1063200504068123456999900016725214562101679994100001012000080808880 TESTTEST _2055096_PAY USER GLOBAL MISSIONS 00000000000000000000 21
93
+ 020L1063200504068123456999900016805100100221501223100000176000080808880 TESTTEST _2055095_PAY USER WIZARDWORX 00000000000000000000 21
94
+ 020L1063200504068123456999900016963200504043978795100000172000080808880 TESTTEST _2055094_PAY USER WA PIETERS ASS 00000000000000000000 21
95
+ 020L1063200504068123456999900017063200504048580705100000060000080808880 TESTTEST _2055093_PAY USER ZOE ACADEMY 00000000000000000000 21
96
+ 020L1063200504068123456999900017105100100020803907100004332000080808880 TESTTEST _2055092_PAY USER ELTRA AFRICA CC 00000000000000000000 21
97
+ 020L1063200504068123456999900017205100100235787396100000254522080808880 TESTTEST _2055091_PAY USER LIFESTYLE BOOKS BANDA 00000000000000000000 21
98
+ 020L1063200504068123456999900017363200509083437516100000600000080808880 TESTTEST _2055090_PAY USER HUIS OEBOENTOE 00000000000000000000 21
99
+ 020L1063200504068123456999900017463200504070648490100001009200080808880 TESTTEST _2055089_PAY USER BLOEM SELF STORAGE 00000000000000000000 21
100
+ 020L1063200504068123456999900017563200501030660109100001117600080808880 TESTTEST _2055088_PAY USER HENSTOCK VAN DEN HEEVER 00000000000000000000 21
101
+ 020L1063200504068123456999900017614114801411238753100000108500080808880 TESTTEST _2055087_PAY USER ADENHOF 00000000000000000000 21
102
+ 020L1063200504068123456999900017705100100021199418100000814000080808880 TESTTEST _2055086_PAY USER KUMON SHEARER 00000000000000000000 21
103
+ 020L1063200504068123456999900017821221760036499560100000360000080808880 TESTTEST _2055085_PAY USER MF ACCOUTING BOOKKEEPING SER 00000000000000000000 21
104
+ 020L1063200504068123456999900017963200501028411045100000175700080808880 TESTTEST _2055084_PAY USER LIFESTYLE BOOKS BARNARD 00000000000000000000 21
105
+ 020L1063200504068123456999900018016273401627024328100000479000080808880 TESTTEST _2055083_PAY USER STORAGE CITY 00000000000000000000 21
106
+ 020L1063200504068123456999900018163200504057772276100000126985080808880 TESTTEST _2055082_PAY USER POOL MAGIC 00000000000000000000 21
107
+ 020L1063200504068123456999900018216273401662054092100000060000080808880 TESTTEST _2055081_PAY USER CONCERNED EMPLOYERS ASSOCIATI 00000000000000000000 21
108
+ 020L1063200504068123456999900018319044201904176003100000323000080808880 TESTTEST _2055080_PAY USER POOL MAGIC ADVISORY 00000000000000000000 21
109
+ 020L1063200504068123456999900018425035562005080388100000014900080808880 TESTTEST _2055079_PAY USER RWFL GRAHAMSTOWN 00000000000000000000 21
110
+ 020L1063200504068123456999900018525035562005080388100000082933080808880 TESTTEST _2055078_PAY USER RWFL SHARONLEE 00000000000000000000 21
111
+ 020L1063200504068123456999900018625035562005080388100000012090080808880 TESTTEST _2055077_PAY USER RWFL TABLEVIEW 00000000000000000000 21
112
+ 020L1063200504068123456999900018725035562005080388100000062913080808880 TESTTEST _2055076_PAY USER RWFL OUDTSHOORM 00000000000000000000 21
113
+ 020L1063200504068123456999900018825035562005080388100000033283080808880 TESTTEST _2055075_PAY USER RWFL HILTON 00000000000000000000 21
114
+ 020L1063200504068123456999900018925035562005080388100000101812080808880 TESTTEST _2055074_PAY USER RWFL DIE MOOT 00000000000000000000 21
115
+ 020L1063200504068123456999900019025035562005080388100000042300080808880 TESTTEST _2055073_PAY USER RWFL MODDERFONTEIN 00000000000000000000 21
116
+ 020L1063200504068123456999900019125035562005080388100000022102080808880 TESTTEST _2055072_PAY USER RWFL PRETORIA NORTH 00000000000000000000 21
117
+ 020L1063200504068123456999900019225035562005080388100000012655080808880 TESTTEST _2055071_PAY USER RWFL BRAKPAN 00000000000000000000 21
118
+ 020L1063200504068123456999900019325035562005080388100000278704080808880 TESTTEST _2055070_PAY USER RWFL RUSTENBURG 00000000000000000000 21
119
+ 020L1063200504068123456999900019425035562005080388100000031487080808880 TESTTEST _2055069_PAY USER RWFL WELTEVREDENPARK AM PM 00000000000000000000 21
120
+ 020L1063200504068123456999900019525035562005080388100000011900080808880 TESTTEST _2055068_PAY USER RWFL SANDTON AM PM 00000000000000000000 21
121
+ 020L1063200504068123456999900019625035562005080388100000037882080808880 TESTTEST _2055067_PAY USER RWFL ROODEPOORT PM KRUGERS 00000000000000000000 21
122
+ 020L1063200504068123456999900019725035562005080388100000093364080808880 TESTTEST _2055066_PAY USER RWFL RANDBURG PM 00000000000000000000 21
123
+ 020L1063200504068123456999900019825035562005080388100000025205080808880 TESTTEST _2055065_PAY USER RWFL NORTHCLIFF PM 00000000000000000000 21
124
+ 020L1063200504068123456999900019999035562005080388100000020000080808880 TESTTEST _2055064_PAY USER RWFL MILNERTON PM 00000000000000000000 21
125
+ 020L1063200504068123456999900020025035562005080388100000060515080808880 TESTTEST _2055063_PAY USER RWFL MIDRAND PM 00000000000000000000 21
126
+ 020L1063200504068123456999900020125035562005080388100000075614080808880 TESTTEST _2055062_PAY USER RWFL KEMPTON PARK PM 00000000000000000000 21
127
+ 020L1063200504068123456999900020225035562005080388100000017112080808880 TESTTEST _2055061_PAY USER RWFL GARSFONTEIN PM 00000000000000000000 21
128
+ 020L1063200504068123456999900020325035562005080388100000078084080808880 TESTTEST _2055060_PAY USER RWFL GERMISTON PM 00000000000000000000 21
129
+ 020L1063200504068123456999900020425035562005080388100000019345080808880 TESTTEST _2055059_PAY USER RWFL FISH HOEK PM 00000000000000000000 21
130
+ 020L1063200504068123456999900020525035562005080388100000012655080808880 TESTTEST _2055058_PAY USER RWFL FOURWAYS PM 00000000000000000000 21
131
+ 020L1063200504068123456999900020625035562005080388100000121019080808880 TESTTEST _2055057_PAY USER RWFL EAST LONDON AM 00000000000000000000 21
132
+ 020L1063200504068123456999900020725035562005080388100000009645080808880 TESTTEST _2055056_PAY USER RWFL ELARDUS PARK PM 00000000000000000000 21
133
+ 020L1063200504068123456999900020825035562005080388100000030607080808880 TESTTEST _2055055_PAY USER RWFL EDENVALE PM 00000000000000000000 21
134
+ 020L1063200504068123456999900020925035562005080388100000010182080808880 TESTTEST _2055054_PAY USER RWFL CENTURION PM THE WILL 00000000000000000000 21
135
+ 020L1063200504068123456999900021025035562005080388100000007145080808880 TESTTEST _2055053_PAY USER RWFL BELLVILLE AM 00000000000000000000 21
136
+ 020L1063200504068123456999900021125035562005080388100000025233080808880 TESTTEST _2055052_PAY USER RWFL BRYANSTON PM RANDBURG 00000000000000000000 21
137
+ 020L1063200504068123456999900021225035562005080388100000017530080808880 TESTTEST _2055051_PAY USER RWFL BERGVLIET PM 00000000000000000000 21
138
+ 020L1063200504068123456999900021325035562005080388100000032700080808880 TESTTEST _2055050_PAY USER RWFL BEDFORDVIEW PM EDENVA 00000000000000000000 21
139
+ 020L1063200504068123456999900021425035562005080388100000012670080808880 TESTTEST _2055049_PAY USER RWFL BRYANSTON AM SUNNINGH 00000000000000000000 21
140
+ 020L1063200504068123456999900021525035562005080388100000043977080808880 TESTTEST _2055048_PAY USER RWFL BROOKLYN PM 00000000000000000000 21
141
+ 020L1063200504068123456999900021625035562005080388100000137411080808880 TESTTEST _2055047_PAY USER RWFL BOKSBURG PM/BEDFRODVIE 00000000000000000000 21
142
+ 020L1063200504068123456999900021725035562005080388100000068108080808880 TESTTEST _2055046_PAY USER RWFL AMANZINTOTI/BEREA 00000000000000000000 21
143
+ 020L1063200504068123456999900021825035562005080388100000086127080808880 TESTTEST _2055045_PAY USER RWFL ALBERTON/GLENVISTA 00000000000000000000 21
144
+ 020L1063200504068123456999900021911280501128016575100000190000080808880 TESTTEST _2055044_PAY USER THOMSON ACCOUNTANTS 00000000000000000000 21
145
+ 020L1063200504068123456999900022011280501128016575100000086000080808880 TESTTEST _2055043_PAY USER THOMSON ACCOUNTANTS 00000000000000000000 21
146
+ 020L1063200504068123456999900022119834101983141100100003276697080808880 TESTTEST _2055042_PAY USER DUNMAR REACTION SERVICES 00000000000000000000 21
147
+ 020L1063200504068123456999900022263200504061717092100004944500080808880 TESTTEST _2055041_PAY USER TEXTILE SECURITY SERVICES 00000000000000000000 21
148
+ 020L1063200504068123456999900022326044952104226149100000030000080808880 TESTTEST _2055040_PAY USER DR SPIES VENNOTE 00000000000000000000 21
149
+ 020L1063200504068123456999900022426034962096195344100000075500080808880 TESTTEST _2055039_PAY USER TOP COUNCILS LEGAL CONSUNTANC 00000000000000000000 21
150
+ 020L1063200504068123456999900022563200502140264523100000100000080808880 TESTTEST _2055038_PAY USER SIGMAFIN 00000000000000000000 21
151
+ 020L1063200504068123456999900022663200502840000365100000083000080808880 TESTTEST _2055037_PAY USER UJ GYM 00000000000000000000 21
152
+ 020L1063200504068123456999900022763200504055281954100000193077080808880 TESTTEST _2055036_PAY USER CENTRE SHELF DEVELOPERS T/A E 00000000000000000000 21
153
+ 020L1063200504068123456999900022826125162062107711100000039900080808880 TESTTEST _2055035_PAY USER MOTO GUIDE CC 00000000000000000000 21
154
+ 020L1063200504068123456999900022902650900078262496100000020000080808880 TESTTEST _2055034_PAY USER IMPACT THE NATION 00000000000000000000 21
155
+ 020L1063200504068123456999900023063200504070619188100004872990080808880 TESTTEST _2055033_PAY USER HENTIQ 2227 PTY LTD 00000000000000000000 21
156
+ 020L1063200504068123456999900023126125162115276603100004993500080808880 TESTTEST _2055032_PAY USER EVEREST STRATEGIC MANAGERS PT 00000000000000000000 21
157
+ 020L1063200504068123456999900023263200504057512949100000056600080808880 TESTTEST _2055031_PAY USER DIGITAL IP SOLUTIONS PTY LTD 00000000000000000000 21
158
+ 020L1063200504068123456999900023301564100021158932100001348800080808880 TESTTEST _2055030_PAY USER E MALAN ASS CC 00000000000000000000 21
159
+ 020L1063200504068123456999900023405100100030235642100000256210080808880 TESTTEST _2055029_PAY USER METHODIST CHURCH 00000000000000000000 21
160
+ 020L1063200504068123456999900023501800500221015566100004916193080808880 TESTTEST _2055028_PAY USER HEALING MINISTRIES TRUST 00000000000000000000 21
161
+ 020L1063200504068123456999900023600630500200589458100000047300080808880 TESTTEST _2055027_PAY USER WILLEMS VD WESTHUIZEN 00000000000000000000 21
162
+ 020L1063200504068123456999900023725204562032469836100000314250080808880 TESTTEST _2055026_PAY USER COMPACT ACCOUNTING 00000000000000000000 21
163
+ 020L1063200504068123456999900023816514501651343144100000086503080808880 TESTTEST _2055025_PAY USER BOSHOFF SMUTS ING 00000000000000000000 21
164
+ 020L1263200504068123456999900023963200504068123456100127221665080808100000TESTTEST CONTRA_0000846_PMT
165
+ 020L929999000078000239080808080811000001000161000001000127221665000127221665028905810181
166
+ 999L000000166