bankserv 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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