internetkassa 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ (c) 2008 Fingertips, Eloy Duran <eloy@fngtps.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,5 @@
1
+ === ABN-AMRO Internetkassa
2
+
3
+ A library for integrating payments using ABN-AMRO Internetkassa (Dutch bank).
4
+
5
+ Need to write documentation and release 1.0.0
@@ -0,0 +1,64 @@
1
+ require 'rake/testtask'
2
+
3
+ namespace :gem do
4
+ directory 'pkg'
5
+
6
+ desc 'Build the gem'
7
+ task :build => :pkg do
8
+ sh 'gem build internetkassa.gemspec'
9
+ sh 'mv internetkassa-*.gem pkg/'
10
+ end
11
+
12
+ desc 'Install the gem'
13
+ task :install => :build do
14
+ sh 'sudo gem install pkg/internetkassa-*.gem'
15
+ end
16
+ end
17
+
18
+ Rake::TestTask.new do |t|
19
+ t.test_files = FileList['test/**/*_test.rb']
20
+ t.verbose = true
21
+ end
22
+
23
+ task :default => :test
24
+
25
+ namespace :test do
26
+ desc 'Renders a simple html file which contains a internetkassa form'
27
+ task :render do
28
+ require File.expand_path('../test/test_helper', __FILE__)
29
+
30
+ instance = AbnAmro::Internetkassa.new(
31
+ :order_id => Time.now.to_i,
32
+ :amount => 1031,
33
+ :description => "HappyHardcore vol. 123 - the ballads",
34
+ :endpoint_url => ENV['URL'] || "http://example.com/payments",
35
+ :TITLE => 'HappyHardcore vol. 123 - the ballads'
36
+ )
37
+
38
+ controller = TestController.new
39
+ controller.extend(ActionView::Helpers)
40
+ controller.extend(AbnAmro::Internetkassa::Helpers)
41
+
42
+ File.open('form_test.html', 'w') do |f|
43
+ f << %{
44
+ <html>
45
+ <body>
46
+ #{controller.internetkassa_form_tag(instance) { '<input type="submit" />' }}
47
+ </body>
48
+ </html>
49
+ }
50
+ end
51
+
52
+ sh 'open form_test.html'
53
+ end
54
+ end
55
+
56
+ begin
57
+ require 'jewelry_portfolio/tasks'
58
+ JewelryPortfolio::Tasks.new do |t|
59
+ t.account = 'Fingertips'
60
+ t.name = 'abn-amro_internetkassa'
61
+ end
62
+ rescue LoadError
63
+ puts "JewelryPortfolio not available. Install it with: sudo gem install Fingertips-jewelry_portfolio -s http://gems.github.com"
64
+ end
@@ -0,0 +1,98 @@
1
+ require 'abn-amro/internetkassa/response'
2
+ require "digest/sha1"
3
+ require "cgi"
4
+
5
+ module AbnAmro
6
+ class Internetkassa
7
+ class << self
8
+ attr_accessor :pspid, :shasign, :test
9
+
10
+ alias_method :merchant_id=, :pspid=
11
+ alias_method :merchant_id, :pspid
12
+
13
+ alias_method :passphrase=, :shasign=
14
+ alias_method :passphrase, :shasign
15
+
16
+ def test?
17
+ @test
18
+ end
19
+
20
+ def service_url
21
+ test? ? TEST_URL : PRODUCTION_URL
22
+ end
23
+ end
24
+
25
+ MANDATORY_VALUES = %w{ merchant_id order_id amount currency language }
26
+ DEFAULT_VALUES = { :currency => 'EUR', :language => 'nl_NL' }
27
+ PRODUCTION_URL = "https://internetkassa.abnamro.nl/ncol/prod/orderstandard.asp"
28
+ TEST_URL = "https://internetkassa.abnamro.nl/ncol/test/orderstandard.asp"
29
+
30
+ attr_reader :params
31
+
32
+ attr_accessor :order_id, :amount, :description, :currency, :language
33
+ attr_accessor :accept_url, :decline_url, :exception_url, :cancel_url
34
+ attr_accessor :url_variable, :endpoint_params
35
+
36
+ def initialize(params = {})
37
+ @params = {}
38
+
39
+ DEFAULT_VALUES.merge(params).each do |k,v|
40
+ if respond_to?("#{k}=")
41
+ send("#{k}=", v)
42
+ else
43
+ @params[k] = v
44
+ end
45
+ end
46
+ end
47
+
48
+ # Shortcut which sets the accept_url, decline_url, cancel_url,
49
+ # exception_url, and cancel_url to the specified +url+.
50
+ def endpoint_url=(url)
51
+ @accept_url = @decline_url = @exception_url = @cancel_url = url
52
+ end
53
+
54
+ def data
55
+ verify_values!
56
+ @params.merge(
57
+ :PSPID => merchant_id,
58
+ :orderID => @order_id,
59
+ :amount => @amount,
60
+ :currency => @currency,
61
+ :language => @language,
62
+ :COM => @description,
63
+ :SHASign => signature,
64
+ :PARAMVAR => @url_variable,
65
+ :PARAMPLUS => url_encoded_endpoint_params,
66
+ :accepturl => @accept_url,
67
+ :declineurl => @decline_url,
68
+ :exceptionurl => @exception_url,
69
+ :cancelurl => @cancel_url
70
+ ).delete_if { |key, value| value.nil? || value.to_s.empty? }
71
+ end
72
+
73
+ private
74
+
75
+ def merchant_id
76
+ self.class.merchant_id
77
+ end
78
+
79
+ def passphrase
80
+ self.class.passphrase
81
+ end
82
+
83
+ def verify_values!
84
+ MANDATORY_VALUES.each do |key|
85
+ raise ArgumentError, "`#{key}' can't be blank" if send(key).nil?
86
+ end
87
+ end
88
+
89
+ def signature
90
+ Digest::SHA1.hexdigest("#{@order_id}#{@amount}#{@currency}#{merchant_id}#{passphrase}").upcase
91
+ end
92
+
93
+ def url_encoded_endpoint_params
94
+ return unless @endpoint_params
95
+ @endpoint_params.map { |k,v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,13 @@
1
+ module AbnAmro
2
+ class Internetkassa
3
+ module Helpers
4
+ def internetkassa_form_tag(internetkassa_instance, &block)
5
+ form_tag(AbnAmro::Internetkassa.service_url) do
6
+ result = internetkassa_instance.data.map { |name, value| hidden_field_tag(name, value, :id => nil) }
7
+ result << capture(&block) if block_given?
8
+ "\n#{result.join("\n")}\n"
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,91 @@
1
+ require 'abn-amro/internetkassa/response_codes'
2
+
3
+ module AbnAmro
4
+ class Internetkassa
5
+ class Response
6
+ class SignatureInvalidError < StandardError; end
7
+
8
+ attr_reader :params
9
+
10
+ def initialize(params)
11
+ @params = params
12
+
13
+ unless valid?
14
+ raise SignatureInvalidError, "signature `#{signature}' does not match the signature calculated for this message `#{calculated_signature}'"
15
+ end
16
+ end
17
+
18
+ # attributes
19
+
20
+ def order_id; @params['orderID'] end
21
+ def payment_id; @params['PAYID'] end
22
+ def payment_method; @params['PM'] end
23
+ def acceptance; @params['ACCEPTANCE'] end
24
+ def currency; @params['currency'] end
25
+ def status_code; @params['STATUS'] end
26
+ def error_code; @params['NCERROR'] if @params['NCERROR'] != '0' end
27
+ def signature; @params['SHASIGN'] end
28
+ def customer_name; @params['CN'] end
29
+ def card_brand; @params['BRAND'] end
30
+ def card_number; @params['CARDNO'] end
31
+ def card_expiration_date; @params['ED'] end
32
+
33
+ def amount
34
+ @amount ||= (@params['amount'].to_f * 100).to_i
35
+ end
36
+
37
+ def transaction_date
38
+ @transaction_date ||= Date.parse(@params['TRXDATE'], true)
39
+ end
40
+
41
+ # methods
42
+
43
+ def valid?
44
+ signature == calculated_signature
45
+ end
46
+
47
+ def success?
48
+ error_code.nil? && (authorized? || captured?)
49
+ end
50
+
51
+ def authorized?
52
+ status_code == '5'
53
+ end
54
+
55
+ def captured?
56
+ status_code == '9'
57
+ end
58
+
59
+ def retry?
60
+ Codes::ERROR_CODES[error_code][:retry] if error_code
61
+ end
62
+
63
+ def status_message
64
+ Codes::STATUS_CODES[status_code]
65
+ end
66
+
67
+ def error_message
68
+ Codes::ERROR_CODES[error_code][:explanation] if error_code
69
+ end
70
+
71
+ private
72
+
73
+ def calculated_signature
74
+ message = ''
75
+ message << order_id
76
+ message << currency
77
+ message << @params['amount']
78
+ message << payment_method
79
+ message << acceptance
80
+ message << status_code
81
+ message << card_number
82
+ message << payment_id
83
+ message << @params['NCERROR']
84
+ message << card_brand
85
+ message << Internetkassa.passphrase
86
+
87
+ Digest::SHA1.hexdigest(message).upcase
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,477 @@
1
+ module AbnAmro
2
+ class Internetkassa
3
+ class Response
4
+ module Codes
5
+ STATUS_CODES = {
6
+ # normal statuses
7
+ "0" => "Incomplete or invalid",
8
+ "1" => "Cancelled by client",
9
+ "2" => "Authorization refused",
10
+ "4" => "Order stored",
11
+ "5" => "Authorized",
12
+ "6" => "Authorized and cancelled",
13
+ "7" => "Payment deleted",
14
+ "8" => "Refund",
15
+ "9" => "Payment requested",
16
+
17
+ # intermediate or abnormal statuses
18
+ "41" => "Waiting client payment",
19
+ "51" => "Authorization waiting",
20
+ "52" => "Authorization not known",
21
+ "55" => "Stand-by",
22
+ "59" => "Authoriz. to get manually",
23
+ "61" => "Author. deletion waiting",
24
+ "62" => "Author. deletion uncertain",
25
+ "63" => "Author. deletion refused",
26
+ "64" => "Authorized and cancelled",
27
+ "71" => "Payment deletion pending",
28
+ "72" => "Payment deletion uncertain",
29
+ "73" => "Payment deletion refused",
30
+ "74" => "Payment deleted",
31
+ "75" => "Deletion processed by merchant",
32
+ "81" => "Refund pending",
33
+ "82" => "Refund uncertain",
34
+ "83" => "Refund refused",
35
+ "84" => "Payment declined by the acquirer",
36
+ "85" => "Refund processed by merchant",
37
+ "91" => "Payment processing",
38
+ "92" => "Payment uncertain",
39
+ "93" => "Payment refused",
40
+ "94" => "Refund declined by the acquirer",
41
+ "95" => "Payment processed by merchant",
42
+ "99" => "Being processed",
43
+ }
44
+
45
+ ERROR_CODES = {
46
+ "0020001002" => { :retry => true, :explanation => "Authorization failed, please retry" },
47
+ "0020001003" => { :retry => true, :explanation => "Authorization failed, please retry" },
48
+ "0020001004" => { :retry => true, :explanation => "Authorization failed, please retry" },
49
+ "0020001005" => { :retry => true, :explanation => "Authorization failed, please retry" },
50
+ "0020001006" => { :retry => true, :explanation => "Authorization failed, please retry" },
51
+ "0020001007" => { :retry => true, :explanation => "Authorization failed, please retry" },
52
+ "0020001008" => { :retry => true, :explanation => "Authorization failed, please retry" },
53
+ "0020001009" => { :retry => true, :explanation => "Authorization failed, please retry" },
54
+ "0020001010" => { :retry => true, :explanation => "Authorization failed, please retry" },
55
+ "0030001999" => { :retry => false, :explanation => "Our payment system is currently under maintenance, please try later" },
56
+ "0050001005" => { :retry => false, :explanation => "Expiry date error" },
57
+ "0050001007" => { :retry => false, :explanation => "Requested Operation code not allowed" },
58
+ "0050001008" => { :retry => false, :explanation => "Invalid delay value" },
59
+ "0050001010" => { :retry => false, :explanation => "Input date in invalid format" },
60
+ "0050001013" => { :retry => false, :explanation => "Unable to parse socket input stream" },
61
+ "0050001014" => { :retry => false, :explanation => "Error in parsing stream content" },
62
+ "0050001015" => { :retry => false, :explanation => "Currency error" },
63
+ "0050001016" => { :retry => false, :explanation => "Transaction still posted at end of wait" },
64
+ "0050001017" => { :retry => false, :explanation => "Sync value not compatible with delay value" },
65
+ "0050001019" => { :retry => false, :explanation => "Transaction duplicate of a pre-existing transaction" },
66
+ "0050001020" => { :retry => false, :explanation => "Acceptation code empty while required for the transaction" },
67
+ "0050001024" => { :retry => false, :explanation => "Maintenance acquirer differs from original transaction acquirer" },
68
+ "0050001025" => { :retry => false, :explanation => "Maintenance merchant differs from original transaction merchant" },
69
+ "0050001028" => { :retry => false, :explanation => "Maintenance operation not accurate for the original transaction" },
70
+ "0050001031" => { :retry => false, :explanation => "Host application unknown for the transaction" },
71
+ "0050001032" => { :retry => false, :explanation => "Unable to perform requested operation with requested currency" },
72
+ "0050001033" => { :retry => false, :explanation => "Maintenance card number differs from original transaction card number" },
73
+ "0050001034" => { :retry => false, :explanation => "Operation code not allowed" },
74
+ "0050001035" => { :retry => false, :explanation => "Exception occurred in socket input stream treatment" },
75
+ "0050001036" => { :retry => false, :explanation => "Card length does not correspond to an acceptable value for the brand" },
76
+ "0050001068" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
77
+ "0050001069" => { :retry => false, :explanation => "Invalid check for CardID and Brand" },
78
+ "0050001070" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
79
+ "0050001116" => { :retry => false, :explanation => "Unknown origin IP" },
80
+ "0050001117" => { :retry => false, :explanation => "No origin IP detected" },
81
+ "0050001118" => { :retry => false, :explanation => "Merchant configuration problem, please contact support" },
82
+ "020001001" => { :retry => true, :explanation => "Authorization failed, please retry" },
83
+ "10001001" => { :retry => false, :explanation => "Communication failure" },
84
+ "10001002" => { :retry => false, :explanation => "Communication failure" },
85
+ "10001003" => { :retry => false, :explanation => "Communication failure" },
86
+ "10001004" => { :retry => false, :explanation => "Communication failure" },
87
+ "10001005" => { :retry => false, :explanation => "Communication failure" },
88
+ "20001001" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
89
+ "20001002" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
90
+ "20001003" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
91
+ "20001004" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
92
+ "20001005" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
93
+ "20001006" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
94
+ "20001007" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
95
+ "20001008" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
96
+ "20001009" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
97
+ "20001010" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
98
+ "20001101" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
99
+ "20001111" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
100
+ "20002001" => { :retry => false, :explanation => "Origin for the response of the bank can not be checked" },
101
+ "20002002" => { :retry => false, :explanation => "Beneficiary account number has been modified during processing" },
102
+ "20002003" => { :retry => false, :explanation => "Amount has been modified during processing" },
103
+ "20002004" => { :retry => false, :explanation => "Currency has been modified during processing" },
104
+ "20002005" => { :retry => false, :explanation => "No feedback from the bank server has been detected" },
105
+ "30001001" => { :retry => false, :explanation => "Payment refused by the acquirer" },
106
+ "30001002" => { :retry => false, :explanation => "Duplicate request" },
107
+ "30001010" => { :retry => true, :explanation => "A technical problem occurred, please contact helpdesk" },
108
+ "30001011" => { :retry => true, :explanation => "A technical problem occurred, please contact helpdesk" },
109
+ "30001012" => { :retry => false, :explanation => "Card black listed - Contact acquirer" },
110
+ "30001051" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
111
+ "30001054" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
112
+ "30001057" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
113
+ "30001058" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
114
+ "30001090" => { :retry => false, :explanation => "CVC check required by front end and returned invalid by acquirer" },
115
+ "30001091" => { :retry => false, :explanation => "ZIP check required by front end and returned invalid by acquirer" },
116
+ "30001092" => { :retry => false, :explanation => "Address check required by front end and returned as invalid by acquirer." },
117
+ "30001100" => { :retry => false, :explanation => "Unauthorized buyer's country" },
118
+ "30001101" => { :retry => false, :explanation => "IP country <> card country" },
119
+ "30001102" => { :retry => false, :explanation => "Number of different countries too high" },
120
+ "30001110" => { :retry => false, :explanation => "If the problem persists, please contact Support, or go to paysafecard's card balance page (https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet?language=en) to see when the amount reserved on your card will be available again." },
121
+ "30001120" => { :retry => false, :explanation => "IP address in merchant's black list" },
122
+ "30001130" => { :retry => false, :explanation => "BIN in merchant's black list" },
123
+ "30001140" => { :retry => false, :explanation => "Card in merchant's card blacklist" },
124
+ "30001141" => { :retry => false, :explanation => "Email in blacklist" },
125
+ "30001142" => { :retry => false, :explanation => "Passenger name in blacklist" },
126
+ "30001143" => { :retry => false, :explanation => "Card holder name in blacklist" },
127
+ "30001144" => { :retry => false, :explanation => "Passenger name different from owner name" },
128
+ "30001145" => { :retry => false, :explanation => "Time to departure too short" },
129
+ "30001150" => { :retry => false, :explanation => "Card not configured in the system for this customer (CSL)" },
130
+ "30001151" => { :retry => false, :explanation => "REF1 not allowed for this relationship (Contract number" },
131
+ "30001152" => { :retry => false, :explanation => "Card/Supplier Amount limit reached (CSL)" },
132
+ "30001153" => { :retry => false, :explanation => "Card not allowed for this supplier (Date out of contract bounds)" },
133
+ "30001154" => { :retry => false, :explanation => "You have reached the usage limit allowed" },
134
+ "30001155" => { :retry => false, :explanation => "You have reached the usage limit allowed" },
135
+ "30001156" => { :retry => false, :explanation => "You have reached the usage limit allowed" },
136
+ "30001157" => { :retry => false, :explanation => "Unauthorized IP country for itinerary" },
137
+ "30001158" => { :retry => false, :explanation => "email usage limit reached" },
138
+ "30001159" => { :retry => false, :explanation => "Unauthorized card country/IP country combination" },
139
+ "30001160" => { :retry => false, :explanation => "Postcode in highrisk group" },
140
+ "30001161" => { :retry => false, :explanation => "generic blacklist match" },
141
+ "30001180" => { :retry => false, :explanation => "maximum scoring reached" },
142
+ "30001997" => { :retry => false, :explanation => "Authorization canceled by simulation" },
143
+ "30001998" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
144
+ "30001999" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
145
+ "30002001" => { :retry => false, :explanation => "Payment refused by the financial institution" },
146
+ "30021001" => { :retry => false, :explanation => "Call acquirer support call number." },
147
+ "30031001" => { :retry => false, :explanation => "Invalid merchant number." },
148
+ "30041001" => { :retry => false, :explanation => "Retain card." },
149
+ "30051001" => { :retry => false, :explanation => "Authorization declined" },
150
+ "30071001" => { :retry => false, :explanation => "Retain card - special conditions." },
151
+ "30121001" => { :retry => false, :explanation => "Invalid transaction" },
152
+ "30131001" => { :retry => false, :explanation => "Invalid amount" },
153
+ "30131002" => { :retry => false, :explanation => "You have reached the total amount allowed" },
154
+ "30141001" => { :retry => false, :explanation => "Invalid card number" },
155
+ "30151001" => { :retry => false, :explanation => "Unknown acquiring institution." },
156
+ "30171001" => { :retry => false, :explanation => "Payment method cancelled by the buyer" },
157
+ "30171002" => { :retry => false, :explanation => "The maximum time allowed is elapsed." },
158
+ "30191001" => { :retry => false, :explanation => "Try again later." },
159
+ "30201001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
160
+ "30301001" => { :retry => false, :explanation => "Invalid format" },
161
+ "30311001" => { :retry => false, :explanation => "Unknown acquirer ID." },
162
+ "30331001" => { :retry => false, :explanation => "Card expired." },
163
+ "30341001" => { :retry => false, :explanation => "Suspicion of fraud." },
164
+ "30381001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
165
+ "30401001" => { :retry => false, :explanation => "Invalid functionM." },
166
+ "30411001" => { :retry => false, :explanation => "Lost card." },
167
+ "30431001" => { :retry => false, :explanation => "Stolen card, pick up" },
168
+ "30511001" => { :retry => false, :explanation => "Insufficient funds." },
169
+ "30541001" => { :retry => false, :explanation => "Card expired." },
170
+ "30551001" => { :retry => false, :explanation => "Invalid PIN." },
171
+ "30561001" => { :retry => false, :explanation => "Card not in authorizer's database." },
172
+ "30571001" => { :retry => false, :explanation => "Transaction not permitted on card." },
173
+ "30581001" => { :retry => false, :explanation => "Transaction interdite au terminal" },
174
+ "30591001" => { :retry => false, :explanation => "Suspicion of fraud." },
175
+ "30601001" => { :retry => false, :explanation => "The merchant must contact the acquirer." },
176
+ "30611001" => { :retry => true, :explanation => "Amount exceeds card ceiling." },
177
+ "30621001" => { :retry => false, :explanation => "Restricted card." },
178
+ "30631001" => { :retry => false, :explanation => "Security policy not respected." },
179
+ "30641001" => { :retry => false, :explanation => "Amount changed from ref. trn." },
180
+ "30681001" => { :retry => false, :explanation => "Tardy response." },
181
+ "30751001" => { :retry => false, :explanation => "PIN entered incorrectly too often" },
182
+ "30761001" => { :retry => false, :explanation => "Card holder already contesting." },
183
+ "30771001" => { :retry => false, :explanation => "PIN entry required." },
184
+ "30811001" => { :retry => false, :explanation => "Message flow error." },
185
+ "30821001" => { :retry => false, :explanation => "Authorization center unavailable" },
186
+ "30831001" => { :retry => false, :explanation => "Authorization center unavailable" },
187
+ "30901001" => { :retry => false, :explanation => "Temporary system shutdown." },
188
+ "30911001" => { :retry => false, :explanation => "Acquirer unavailable." },
189
+ "30921001" => { :retry => false, :explanation => "Invalid card type for acquirer." },
190
+ "30941001" => { :retry => false, :explanation => "Duplicate transaction" },
191
+ "30961001" => { :retry => true, :explanation => "Processing temporarily not possible" },
192
+ "30971001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
193
+ "30981001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
194
+ "31011001" => { :retry => false, :explanation => "Unknown acceptance code" },
195
+ "31021001" => { :retry => false, :explanation => "Invalid currency" },
196
+ "31031001" => { :retry => false, :explanation => "Acceptance code missing" },
197
+ "31041001" => { :retry => false, :explanation => "Inactive card" },
198
+ "31051001" => { :retry => false, :explanation => "Merchant not active" },
199
+ "31061001" => { :retry => false, :explanation => "Invalid expiration date" },
200
+ "31071001" => { :retry => false, :explanation => "Interrupted host communication" },
201
+ "31081001" => { :retry => false, :explanation => "Card refused" },
202
+ "31091001" => { :retry => false, :explanation => "Invalid password" },
203
+ "31101001" => { :retry => false, :explanation => "Plafond transaction (majoré du bonus) dépassé" },
204
+ "31111001" => { :retry => false, :explanation => "Plafond mensuel (majoré du bonus) dépassé" },
205
+ "31121001" => { :retry => false, :explanation => "Plafond centre de facturation dépassé" },
206
+ "31131001" => { :retry => false, :explanation => "Plafond entreprise dépassé" },
207
+ "31141001" => { :retry => false, :explanation => "Code MCC du fournisseur non autorisé pour la carte" },
208
+ "31151001" => { :retry => false, :explanation => "Numéro SIRET du fournisseur non autorisé pour la carte" },
209
+ "31161001" => { :retry => false, :explanation => "This is not a valid online banking account" },
210
+ "32001004" => { :retry => false, :explanation => "A technical problem occurred, please try again." },
211
+ "39991001" => { :retry => false, :explanation => "A technical problem occurred, please contact the helpdesk of your acquirer" },
212
+ "40001001" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
213
+ "40001002" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
214
+ "40001003" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
215
+ "40001004" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
216
+ "40001005" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
217
+ "40001006" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
218
+ "40001007" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
219
+ "40001008" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
220
+ "40001009" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
221
+ "40001010" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
222
+ "40001011" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
223
+ "40001012" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
224
+ "40001013" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
225
+ "40001016" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
226
+ "40001018" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
227
+ "40001019" => { :retry => true, :explanation => "Sorry, an error occurred during processing. Please retry the operation (use back button of the browser). If problem persists, contact your merchant's helpdesk." },
228
+ "40001050" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
229
+ "40001134" => { :retry => true, :explanation => "Authentication failed, please retry or cancel." },
230
+ "40001135" => { :retry => true, :explanation => "Authentication temporary unavailable, please retry or cancel." },
231
+ "40001136" => { :retry => true, :explanation => "Technical problem with your browser, please retry or cancel" },
232
+ "40001137" => { :retry => true, :explanation => "Your bank access control server is temporary unavailable, please retry or cancel" },
233
+ "40001998" => { :retry => false, :explanation => "Temporary technical problem. Please retry a little bit later." },
234
+ "50001001" => { :retry => false, :explanation => "Unknown card type" },
235
+ "50001002" => { :retry => false, :explanation => "Card number format check failed for given card number." },
236
+ "50001003" => { :retry => false, :explanation => "Merchant data error" },
237
+ "50001004" => { :retry => false, :explanation => "Merchant identification missing" },
238
+ "50001005" => { :retry => false, :explanation => "Expiry date error" },
239
+ "50001006" => { :retry => false, :explanation => "Amount is not a number" },
240
+ "50001007" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
241
+ "50001008" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
242
+ "50001009" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
243
+ "50001010" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
244
+ "50001011" => { :retry => false, :explanation => "Brand not supported for that merchant" },
245
+ "50001012" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
246
+ "50001013" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
247
+ "50001014" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
248
+ "50001015" => { :retry => false, :explanation => "Invalid currency code" },
249
+ "50001016" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
250
+ "50001017" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
251
+ "50001018" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
252
+ "50001019" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
253
+ "50001020" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
254
+ "50001021" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
255
+ "50001022" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
256
+ "50001023" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
257
+ "50001024" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
258
+ "50001025" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
259
+ "50001026" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
260
+ "50001027" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
261
+ "50001028" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
262
+ "50001029" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
263
+ "50001030" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
264
+ "50001031" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
265
+ "50001032" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
266
+ "50001033" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
267
+ "50001034" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
268
+ "50001035" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
269
+ "50001036" => { :retry => false, :explanation => "Card length does not correspond to an acceptable value for the brand" },
270
+ "50001037" => { :retry => false, :explanation => "Purchasing card number for a regular merchant" },
271
+ "50001038" => { :retry => false, :explanation => "Non Purchasing card for a Purchasing card merchant" },
272
+ "50001039" => { :retry => false, :explanation => "Details sent for a non-Purchasing card merchant, please contact helpdesk" },
273
+ "50001040" => { :retry => false, :explanation => "Details not sent for a Purchasing card transaction, please contact helpdesk" },
274
+ "50001041" => { :retry => false, :explanation => "Payment detail validation failed" },
275
+ "50001042" => { :retry => false, :explanation => "Given transactions amounts (tax,discount,shipping,net,etc…) do not compute correctly together" },
276
+ "50001043" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
277
+ "50001044" => { :retry => false, :explanation => "No acquirer configured for this operation" },
278
+ "50001045" => { :retry => false, :explanation => "No UID configured for this operation" },
279
+ "50001046" => { :retry => false, :explanation => "Operation not allowed for the merchant" },
280
+ "50001047" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
281
+ "50001048" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
282
+ "50001049" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
283
+ "50001050" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
284
+ "50001051" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
285
+ "50001052" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
286
+ "50001053" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
287
+ "50001054" => { :retry => false, :explanation => "Card detection routine did not find any brand that matches" },
288
+ "50001055" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
289
+ "50001056" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
290
+ "50001057" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
291
+ "50001058" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
292
+ "50001059" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
293
+ "50001060" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
294
+ "50001061" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
295
+ "50001062" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
296
+ "50001063" => { :retry => false, :explanation => "Card Issue Number does not correspond to range or not present" },
297
+ "50001064" => { :retry => false, :explanation => "Start Date not valid or not present" },
298
+ "50001066" => { :retry => false, :explanation => "Format of CVC code invalid" },
299
+ "50001067" => { :retry => false, :explanation => "The merchant is not enrolled for 3D-Secure" },
300
+ "50001068" => { :retry => false, :explanation => "The card number or account number (PAN) is invalid" },
301
+ "50001069" => { :retry => false, :explanation => "Invalid check for CardID and Brand" },
302
+ "50001070" => { :retry => false, :explanation => "The ECI value given is either not supported, or in conflict with other data in the transaction" },
303
+ "50001071" => { :retry => false, :explanation => "Incomplete TRN demat" },
304
+ "50001072" => { :retry => false, :explanation => "Incomplete PAY demat" },
305
+ "50001073" => { :retry => false, :explanation => "No demat APP" },
306
+ "50001074" => { :retry => false, :explanation => "Authorisation too old" },
307
+ "50001075" => { :retry => false, :explanation => "VERRes was an error message" },
308
+ "50001076" => { :retry => false, :explanation => "DCP amount greater than autorisation amount" },
309
+ "50001077" => { :retry => false, :explanation => "Details negative amount" },
310
+ "50001078" => { :retry => false, :explanation => "Details negative quantity" },
311
+ "50001079" => { :retry => false, :explanation => "Could not decode/decompress received PARes (3D-Secure)" },
312
+ "50001080" => { :retry => false, :explanation => "Received PARes was an erereor message from ACS (3D-Secure)" },
313
+ "50001081" => { :retry => false, :explanation => "Received PARes format was invalid according to the 3DS specifications (3D-Secure)" },
314
+ "50001082" => { :retry => false, :explanation => "PAReq/PARes reconciliation failure (3D-Secure)" },
315
+ "50001084" => { :retry => false, :explanation => "Maximum amount reached" },
316
+ "50001087" => { :retry => false, :explanation => "The transaction type requires authentication, please check with your bank." },
317
+ "50001090" => { :retry => false, :explanation => "CVC missing at input, but CVC check asked" },
318
+ "50001091" => { :retry => false, :explanation => "ZIP missing at input, but ZIP check asked" },
319
+ "50001092" => { :retry => false, :explanation => "Address missing at input, but Address check asked" },
320
+ "50001095" => { :retry => false, :explanation => "Invalid date of birth" },
321
+ "50001096" => { :retry => false, :explanation => "Invalid commodity code" },
322
+ "50001097" => { :retry => false, :explanation => "The requested currency and brand are incompatible." },
323
+ "50001111" => { :retry => false, :explanation => "Data validation error" },
324
+ "50001113" => { :retry => false, :explanation => "This order has already been processed" },
325
+ "50001114" => { :retry => false, :explanation => "Error pre-payment check page access" },
326
+ "50001115" => { :retry => false, :explanation => "Request not received in secure mode" },
327
+ "50001116" => { :retry => false, :explanation => "Unknown IP address origin" },
328
+ "50001117" => { :retry => false, :explanation => "NO IP address origin" },
329
+ "50001118" => { :retry => false, :explanation => "Pspid not found or not correct" },
330
+ "50001119" => { :retry => false, :explanation => "Password incorrect or disabled due to numbers of errors" },
331
+ "50001120" => { :retry => false, :explanation => "Invalid currency" },
332
+ "50001121" => { :retry => false, :explanation => "Invalid number of decimals for the currency" },
333
+ "50001122" => { :retry => false, :explanation => "Currency not accepted by the merchant" },
334
+ "50001123" => { :retry => false, :explanation => "Card type not active" },
335
+ "50001124" => { :retry => false, :explanation => "Number of lines don't match with number of payments" },
336
+ "50001125" => { :retry => false, :explanation => "Format validation error" },
337
+ "50001126" => { :retry => false, :explanation => "Overflow in data capture requests for the original order" },
338
+ "50001127" => { :retry => false, :explanation => "The original order is not in a correct status" },
339
+ "50001128" => { :retry => false, :explanation => "missing authorization code for unauthorized order" },
340
+ "50001129" => { :retry => false, :explanation => "Overflow in refunds requests" },
341
+ "50001130" => { :retry => false, :explanation => "Error access to original order" },
342
+ "50001131" => { :retry => false, :explanation => "Error access to original history item" },
343
+ "50001132" => { :retry => false, :explanation => "The Selected Catalog is empty" },
344
+ "50001133" => { :retry => false, :explanation => "Duplicate request" },
345
+ "50001134" => { :retry => false, :explanation => "Authentication failed, please retry or cancel." },
346
+ "50001135" => { :retry => false, :explanation => "Authentication temporary unavailable, please retry or cancel." },
347
+ "50001136" => { :retry => false, :explanation => "Technical problem with your browser, please retry or cancel" },
348
+ "50001137" => { :retry => false, :explanation => "Your bank access control server is temporary unavailable, please retry or cancel" },
349
+ "50001150" => { :retry => false, :explanation => "Fraud Detection, Technical error (IP not valid)" },
350
+ "50001151" => { :retry => false, :explanation => "Fraud detection : technical error (IPCTY unknown or error)" },
351
+ "50001152" => { :retry => false, :explanation => "Fraud detection : technical error (CCCTY unknown or error)" },
352
+ "50001153" => { :retry => false, :explanation => "Overflow in redo-authorisation requests" },
353
+ "50001170" => { :retry => false, :explanation => "Dynamic BIN check failed" },
354
+ "50001171" => { :retry => false, :explanation => "Dynamic country check failed" },
355
+ "50001172" => { :retry => false, :explanation => "Error in Amadeus signature" },
356
+ "60000001" => { :retry => false, :explanation => "account number unknown" },
357
+ "60000003" => { :retry => false, :explanation => "not credited dd-mm-yy" },
358
+ "60000005" => { :retry => false, :explanation => "name/number do not correspond" },
359
+ "60000007" => { :retry => false, :explanation => "account number blocked" },
360
+ "60000008" => { :retry => false, :explanation => "specific direct debit block" },
361
+ "60000009" => { :retry => false, :explanation => "account number WKA" },
362
+ "60000010" => { :retry => false, :explanation => "administrative reason" },
363
+ "60000011" => { :retry => false, :explanation => "account number expired" },
364
+ "60000012" => { :retry => false, :explanation => "no direct debit authorisation given" },
365
+ "60000013" => { :retry => false, :explanation => "debit not approved" },
366
+ "60000014" => { :retry => false, :explanation => "double payment" },
367
+ "60000018" => { :retry => false, :explanation => "name/address/city not entered" },
368
+ "60001001" => { :retry => false, :explanation => "no original direct debit for revocation" },
369
+ "60001002" => { :retry => false, :explanation => "payer’s account number format error" },
370
+ "60001004" => { :retry => false, :explanation => "payer’s account at different bank" },
371
+ "60001005" => { :retry => false, :explanation => "payee’s account at different bank" },
372
+ "60001006" => { :retry => false, :explanation => "payee’s account number format error" },
373
+ "60001007" => { :retry => false, :explanation => "payer’s account number blocked" },
374
+ "60001008" => { :retry => false, :explanation => "payer’s account number expired" },
375
+ "60001009" => { :retry => false, :explanation => "payee’s account number expired" },
376
+ "60001010" => { :retry => false, :explanation => "direct debit not possible" },
377
+ "60001011" => { :retry => false, :explanation => "creditor payment not possible" },
378
+ "60001012" => { :retry => false, :explanation => "payer’s account number unknown WKA-number" },
379
+ "60001013" => { :retry => false, :explanation => "payee’s account number unknown WKA-number" },
380
+ "60001014" => { :retry => false, :explanation => "impermissible WKA transaction" },
381
+ "60001015" => { :retry => false, :explanation => "period for revocation expired" },
382
+ "60001017" => { :retry => false, :explanation => "reason for revocation not correct" },
383
+ "60001018" => { :retry => false, :explanation => "original run number not numeric" },
384
+ "60001019" => { :retry => false, :explanation => "payment ID incorrect" },
385
+ "60001020" => { :retry => false, :explanation => "amount not numeric" },
386
+ "60001021" => { :retry => false, :explanation => "amount zero not permitted" },
387
+ "60001022" => { :retry => false, :explanation => "negative amount not permitted" },
388
+ "60001023" => { :retry => false, :explanation => "payer and payee giro account number" },
389
+ "60001025" => { :retry => false, :explanation => "processing code (verwerkingscode) incorrect" },
390
+ "60001028" => { :retry => false, :explanation => "revocation not permitted" },
391
+ "60001029" => { :retry => false, :explanation => "guaranteed direct debit on giro account number" },
392
+ "60001030" => { :retry => false, :explanation => "NBC transaction type incorrect" },
393
+ "60001031" => { :retry => false, :explanation => "description too large" },
394
+ "60001032" => { :retry => false, :explanation => "book account number not issued" },
395
+ "60001034" => { :retry => false, :explanation => "book account number incorrect" },
396
+ "60001035" => { :retry => false, :explanation => "payer’s account number not numeric" },
397
+ "60001036" => { :retry => false, :explanation => "payer’s account number not eleven-proof" },
398
+ "60001037" => { :retry => false, :explanation => "payer’s account number not issued" },
399
+ "60001039" => { :retry => false, :explanation => "payer’s account number of DNB/BGC/BLA" },
400
+ "60001040" => { :retry => false, :explanation => "payee’s account number not numeric" },
401
+ "60001041" => { :retry => false, :explanation => "payee’s account number not eleven-proof" },
402
+ "60001042" => { :retry => false, :explanation => "payee’s account number not issued" },
403
+ "60001044" => { :retry => false, :explanation => "payee’s account number unknown" },
404
+ "60001050" => { :retry => false, :explanation => "payee’s name missing" },
405
+ "60001051" => { :retry => false, :explanation => "indicate payee’s bank account number instead of 3102" },
406
+ "60001052" => { :retry => false, :explanation => "no direct debit contract" },
407
+ "60001053" => { :retry => false, :explanation => "amount beyond bounds" },
408
+ "60001054" => { :retry => false, :explanation => "selective direct debit block" },
409
+ "60001055" => { :retry => false, :explanation => "original run number unknown" },
410
+ "60001057" => { :retry => false, :explanation => "payer’s name missing" },
411
+ "60001058" => { :retry => false, :explanation => "payee’s account number missing" },
412
+ "60001059" => { :retry => false, :explanation => "restore not permitted" },
413
+ "60001060" => { :retry => false, :explanation => "bank’s reference (navraaggegeven) missing" },
414
+ "60001061" => { :retry => false, :explanation => "BEC/GBK number incorrect" },
415
+ "60001062" => { :retry => false, :explanation => "BEC/GBK code incorrect" },
416
+ "60001087" => { :retry => false, :explanation => "book account number not numeric" },
417
+ "60001090" => { :retry => false, :explanation => "cancelled on request" },
418
+ "60001091" => { :retry => false, :explanation => "cancellation order executed" },
419
+ "60001092" => { :retry => false, :explanation => "cancelled instead of bended" },
420
+ "60001093" => { :retry => false, :explanation => "book account number is a shortened account number" },
421
+ "60001094" => { :retry => false, :explanation => "instructing party account number not identical with payer" },
422
+ "60001095" => { :retry => false, :explanation => "payee unknown GBK acceptor" },
423
+ "60001097" => { :retry => false, :explanation => "instructing party account number not identical with payee" },
424
+ "60001099" => { :retry => false, :explanation => "clearing not permitted" },
425
+ "60001101" => { :retry => false, :explanation => "payer’s account number not spaces" },
426
+ "60001102" => { :retry => false, :explanation => "PAN length not numeric" },
427
+ "60001103" => { :retry => false, :explanation => "PAN length outside limits" },
428
+ "60001104" => { :retry => false, :explanation => "track number not numeric" },
429
+ "60001105" => { :retry => false, :explanation => "track number not valid" },
430
+ "60001106" => { :retry => false, :explanation => "PAN sequence number not numeric" },
431
+ "60001107" => { :retry => false, :explanation => "domestic PAN not numeric" },
432
+ "60001108" => { :retry => false, :explanation => "domestic PAN not eleven-proof" },
433
+ "60001109" => { :retry => false, :explanation => "domestic PAN not issued" },
434
+ "60001110" => { :retry => false, :explanation => "foreign PAN not numeric" },
435
+ "60001111" => { :retry => false, :explanation => "card valid date not numeric" },
436
+ "60001112" => { :retry => false, :explanation => "book period number (boekperiodenr) not numeric" },
437
+ "60001113" => { :retry => false, :explanation => "transaction number not numeric" },
438
+ "60001114" => { :retry => false, :explanation => "transaction time not numeric" },
439
+ "60001115" => { :retry => false, :explanation => "transaction no valid time" },
440
+ "60001116" => { :retry => false, :explanation => "transaction date not numeric" },
441
+ "60001117" => { :retry => false, :explanation => "transaction no valid date" },
442
+ "60001118" => { :retry => false, :explanation => "STAN not numeric" },
443
+ "60001119" => { :retry => false, :explanation => "instructing party’s name missing" },
444
+ "60001120" => { :retry => false, :explanation => "foreign amount (bedrag-vv) not numeric" },
445
+ "60001122" => { :retry => false, :explanation => "rate (verrekenkoers) not numeric" },
446
+ "60001125" => { :retry => false, :explanation => "number of decimals (aantaldecimalen) incorrect" },
447
+ "60001126" => { :retry => false, :explanation => "tariff (tarifering) not B/O/S" },
448
+ "60001127" => { :retry => false, :explanation => "domestic costs (kostenbinnenland) not numeric" },
449
+ "60001128" => { :retry => false, :explanation => "domestic costs (kostenbinnenland) not higher than zero" },
450
+ "60001129" => { :retry => false, :explanation => "foreign costs (kostenbuitenland) not numeric" },
451
+ "60001130" => { :retry => false, :explanation => "foreign costs (kostenbuitenland) not higher than zero" },
452
+ "60001131" => { :retry => false, :explanation => "domestic costs (kostenbinnenland) not zero" },
453
+ "60001132" => { :retry => false, :explanation => "foreign costs (kostenbuitenland) not zero" },
454
+ "60001134" => { :retry => false, :explanation => "Euro record not fully filled in" },
455
+ "60001135" => { :retry => false, :explanation => "Client currency incorrect" },
456
+ "60001136" => { :retry => false, :explanation => "Amount NLG not numeric" },
457
+ "60001137" => { :retry => false, :explanation => "Amount NLG not higher than zero" },
458
+ "60001138" => { :retry => false, :explanation => "Amount NLG not equal to Amount" },
459
+ "60001139" => { :retry => false, :explanation => "Amount NLG incorrectly converted" },
460
+ "60001140" => { :retry => false, :explanation => "Amount EUR not numeric" },
461
+ "60001141" => { :retry => false, :explanation => "Amount EUR not greater than zero" },
462
+ "60001142" => { :retry => false, :explanation => "Amount EUR not equal to Amount" },
463
+ "60001143" => { :retry => false, :explanation => "Amount EUR incorrectly converted" },
464
+ "60001144" => { :retry => false, :explanation => "Client currency not NLG" },
465
+ "60001145" => { :retry => false, :explanation => "rate euro-vv (Koerseuro-vv) not numeric" },
466
+ "60001146" => { :retry => false, :explanation => "comma rate euro-vv (Kommakoerseuro-vv) incorrect" },
467
+ "60001147" => { :retry => false, :explanation => "acceptgiro distributor not valid" },
468
+ "60001148" => { :retry => false, :explanation => "Original run number and/or BRN are missing" },
469
+ "60001149" => { :retry => false, :explanation => "Amount/Account number/ BRN different" },
470
+ "60001150" => { :retry => false, :explanation => "Direct debit already revoked/restored" },
471
+ "60001151" => { :retry => false, :explanation => "Direct debit already reversed/revoked/restored" },
472
+ "60001153" => { :retry => false, :explanation => "Payer’s account number not known" }
473
+ }
474
+ end
475
+ end
476
+ end
477
+ end