callcredit 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6fd66f12894e3525ef98fd4192476f407c8b163
4
- data.tar.gz: f82113873639cb39ed16a22b8aeeaa7623ff7a07
3
+ metadata.gz: 53b5cefad92f98c5380ed32a4898b210c73cd455
4
+ data.tar.gz: 7afe3319d5e548c209f758d05bb6e859245e6619
5
5
  SHA512:
6
- metadata.gz: 5b67b4c59f4de25e394bd99a378f756b2896d51e98d676376a5cdfc1a1b251f45dfa828c9af8b1b1bbac1cc8769439c6cd6187c2a2ab8a43e0d05cbb38a1f994
7
- data.tar.gz: 78e6accb62801e823ad54f27819142ad75c26215bad8104b4cc202b52c92d865ebca50a1531236993473a4d6f00c54bf7e449ab334c1a9426ca642c31652c9f0
6
+ metadata.gz: 1db3d187a7e5bae829f89760ba02a04aec5ca562c5c1b1b9be105e7cd1268bd51f2266d5d3ae12b873181590ce4c0a400a56630fa31f161a8dd3a62c87786b1a
7
+ data.tar.gz: 13b1835f96b0e1fceb556d5bab3e255082fcfcdeab18e73cb6d3ccacb1dd15e61c8ea3512574c8860411bd00eb38a2a8aabd888ac961650751ee1227c97ca2ca
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.3.4 - February 24, 2014
2
+
3
+ - Validate input (including converting non-ASCII characters in names)
4
+
1
5
  ## 0.3.3 - February 19, 2014
2
6
 
3
7
  - Handle errors from Callcredit that aren't name-spaced to a module
data/README.md CHANGED
@@ -45,7 +45,7 @@ postcode).
45
45
  #### Other checks
46
46
  For any other check, simply pass the name of the check you'd like to perform
47
47
  into the `perform_check` method, along with details of the individual you're
48
- checking. Note that the gem **won't** validate your inputs for these checks.
48
+ checking.
49
49
 
50
50
  ```ruby
51
51
  data_hash = { personal_data: { first_name: "Grey", last_name: "Baker" } }
@@ -61,7 +61,7 @@ Callcredit.perform_check([:id_enhanced, :credit_score], data_hash)
61
61
  ```
62
62
 
63
63
  NOTE: Currently, this gem only supports checks on the payer's personal
64
- information (other information won't be passed through to Callsredit).
64
+ information (other information won't be passed through to Callcredit).
65
65
  Extending the gem should be trivial if Callcredit have given you access to
66
66
  other checks.
67
67
 
data/callcredit.gemspec CHANGED
@@ -5,6 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.add_runtime_dependency 'faraday_middleware', '>= 0.8.2'
6
6
  gem.add_runtime_dependency 'multi_xml', '~> 0.5.1'
7
7
  gem.add_runtime_dependency 'nokogiri', '~> 1.4'
8
+ gem.add_runtime_dependency 'unidecoder', '~> 1.1.2'
8
9
 
9
10
  gem.add_development_dependency 'rspec'
10
11
  gem.add_development_dependency 'webmock'
data/lib/callcredit.rb CHANGED
@@ -6,6 +6,7 @@ require 'callcredit/util'
6
6
  require 'callcredit/config'
7
7
  require 'callcredit/request'
8
8
  require 'callcredit/constants'
9
+ require 'callcredit/validations'
9
10
  require 'callcredit/client'
10
11
  require 'callcredit/response'
11
12
  require 'callcredit/checks/id_enhanced'
@@ -3,7 +3,49 @@ module Callcredit
3
3
  # Check types suported by the CallValidate API
4
4
  CHECKS = %w(BankStandard BankEnhanced CardLive CardEnhanced IDEnhanced
5
5
  NCOAAlert CallValidate3D TheAffordabilityReport DeliveryFraud
6
- EmailValidate CreditScore Zodiac IPAddress BankAccountPlus
7
- BankOFA CardOFA)
6
+ EmailValidate CreditScore Zodiac IPCountry)
7
+
8
+ INDIVIDUAL_DETAILS = {
9
+ date_of_birth: "Dateofbirth",
10
+ title: "Title",
11
+ first_name: "Firstname",
12
+ last_name: "Surname",
13
+ middle_names: "Othernames",
14
+ phone: "Phonenumber",
15
+ email: "Emailaddress",
16
+ moved_recently?: "addresslessthan12months",
17
+ passport_line_1: "Passportline1",
18
+ passport_line_2: "Passportline2",
19
+ driving_license: "Drivinglicensenumber",
20
+ passport_expiry: "PassportExpiryDate",
21
+ ip: "IPAddress"
22
+ }
23
+
24
+ ADDRESS_DETAILS = {
25
+ abode_number: "Abodenumber",
26
+ building_number: "Buildingnumber",
27
+ building_name: "Buildingname",
28
+ address_line_1: "Address1",
29
+ address_line_2: "Address2",
30
+ address_line_3: "Address3",
31
+ town: "Town",
32
+ postcode: "Postcode",
33
+ previous_abode_number: "Previousabodenumber",
34
+ previous_building_number: "Previousbuildingnumber",
35
+ previous_building_name: "Previousbuildingname",
36
+ previous_address_line_1: "Previousaddress1",
37
+ previous_address_line_2: "Previousaddress2",
38
+ previous_address_line_3: "Previousaddress3",
39
+ previous_town: "Previoustown",
40
+ previous_postcode: "Previouspostcode",
41
+ delivery_abode_number: "Deliveryabodenumber",
42
+ delivery_building_number: "Deliverybuildingnumber",
43
+ delivery_building_name: "Deliverybuildingname",
44
+ delivery_address_line_1: "Deliveryaddress1",
45
+ delivery_address_line_2: "Deliveryaddress2",
46
+ delivery_address_line_3: "Deliveryaddress3",
47
+ delivery_town: "Deliverytown",
48
+ delivery_postcode: "Deliverypostcode"
49
+ }
8
50
  end
9
51
  end
@@ -7,6 +7,7 @@ module Callcredit
7
7
 
8
8
  # Perform a credit check
9
9
  def perform(checks, check_data = {})
10
+ # check_data = Callcredit::Validator.clean_check_data(check_data)
10
11
  response = @connection.get do |request|
11
12
  request.path = @config[:api_endpoint]
12
13
  request.body = build_request_xml(checks, check_data).to_s
@@ -24,11 +25,11 @@ module Callcredit
24
25
  xml.sessions do
25
26
  xml.session do
26
27
  xml.data do
27
- required_checks(xml, checks)
28
28
  personal_data(xml, check_data[:personal_data])
29
29
  card_data(xml, check_data[:card_data])
30
30
  bank_data(xml, check_data[:bank_data])
31
31
  income_data(xml, check_data[:income_data])
32
+ required_checks(xml, checks)
32
33
  end
33
34
  end
34
35
  end
@@ -53,7 +54,7 @@ module Callcredit
53
54
  def required_checks(xml, checks)
54
55
  required_checks = [*checks].map { |c| Util.underscore(c).to_sym }
55
56
  xml.ChecksRequired do
56
- Callcredit::Constants::CHECKS.each do |check|
57
+ Constants::CHECKS.each do |check|
57
58
  included = required_checks.include?(Util.underscore(check).to_sym)
58
59
  xml.send(check, included ? "yes" : "no")
59
60
  end
@@ -63,29 +64,20 @@ module Callcredit
63
64
  def personal_data(xml, data)
64
65
  unless data.is_a? Hash
65
66
  raise InvalidRequestError.new(
66
- "All checks require personal_data",
67
- :personal_data)
68
- end
69
-
70
- if data[:date_of_birth].is_a? String
71
- data[:date_of_birth] = Date.parse(data[:date_of_birth])
67
+ "All checks require personal_data", :personal_data)
72
68
  end
73
69
 
74
- xml.Personal do
75
- xml.Individual do
76
- xml.Dateofbirth data[:date_of_birth].strftime("%d/%m/%Y")
77
- xml.Title data[:title] || "Unknown"
78
- xml.Firstname data[:first_name]
79
- xml.Othernames data[:middle_names]
80
- xml.Surname data[:last_name]
81
- xml.Phonenumber data[:phone]
82
- xml.Drivinglicensenumber data[:driving_license]
70
+ xml.Personalinformation do
71
+ xml.IndividualDetails do
72
+ Constants::INDIVIDUAL_DETAILS.each do |param, element_name|
73
+ value = Validations.clean_param(param, data[param])
74
+ xml.send(element_name, value) if value
75
+ end
83
76
  end
84
- xml.Address do
85
- xml.Buildingnumber data[:building_number]
86
- xml.Buildingname data[:building_name]
87
- xml.Address1 data[:address_line_1]
88
- xml.Postcode data[:postcode]
77
+ xml.AddressDetails do
78
+ Constants::ADDRESS_DETAILS.each do |param, element_name|
79
+ xml.send(element_name, data[param]) if data[param]
80
+ end
89
81
  end
90
82
  end
91
83
  end
@@ -1,5 +1,3 @@
1
- require 'ostruct'
2
-
3
1
  module Callcredit
4
2
  class Response
5
3
  def initialize(response_data)
@@ -0,0 +1,61 @@
1
+ require 'unidecoder'
2
+
3
+ module Callcredit
4
+ module Validations
5
+
6
+ VALIDATIONS = {
7
+ date_of_birth: ->(value) { clean_date_of_birth(value) },
8
+ title: ->(value) { value || "Unknown" },
9
+ first_name: ->(value) { clean_first_name(value) },
10
+ last_name: ->(value) { clean_last_name(value) },
11
+ middle_names: ->(value) { clean_middle_names(value) },
12
+ postcode: ->(value) { clean_postcode(value) }
13
+ }
14
+
15
+ def self.clean_param(key, value)
16
+ validator = VALIDATIONS.fetch(key, ->(value){ value })
17
+ validator.call(value)
18
+ end
19
+
20
+ def self.clean_date_of_birth(date_of_birth)
21
+ date_of_birth = Date.parse(date_of_birth) if date_of_birth.is_a? String
22
+ date_of_birth.strftime("%d/%m/%Y")
23
+ rescue
24
+ input_error(:date_of_birth, date_of_birth)
25
+ end
26
+
27
+ def self.clean_first_name(name)
28
+ name = name && name.to_ascii
29
+ input_error(:first_name, name) unless name =~ /\A[a-z A-Z'-]{1,30}\z/
30
+ name
31
+ end
32
+
33
+ def self.clean_last_name(name)
34
+ name = name && name.to_ascii
35
+ input_error(:last_name, name) unless name =~ /\A[a-z A-Z'-]{1,30}\z/
36
+ name
37
+ end
38
+
39
+ def self.clean_middle_names(name)
40
+ return unless name
41
+ name = name.to_ascii
42
+ input_error(:middle_names, name) unless name =~ /\A[a-z A-Z'-]{1,30}\z/
43
+ name
44
+ end
45
+
46
+ def self.clean_postcode(postcode)
47
+ postcode = postcode && postcode.upcase.strip
48
+ input_error(:postcode, postcode) unless postcode =~ /\A[A-Z 0-9]{5,8}\z/
49
+ postcode
50
+ end
51
+
52
+ def self.input_error(param, value=nil)
53
+ msg = if value.nil?
54
+ "#{param} is a required param"
55
+ else
56
+ %{Invalid value "#{value}" for #{param}}
57
+ end
58
+ raise InvalidRequestError.new(msg, param)
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module Callcredit
2
- VERSION = '0.3.3'.freeze
2
+ VERSION = '0.3.4'.freeze
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -36,11 +36,11 @@ describe Callcredit::Client do
36
36
  end
37
37
 
38
38
  describe "#perform_check" do
39
- subject(:perform_check) { client.id_enhanced_check(check_data) }
39
+ subject(:perform_check) { client.perform_check(:check_type, check_data) }
40
40
 
41
41
  it "delegates to an instance of Request" do
42
42
  expect_any_instance_of(Callcredit::Request).to receive(:perform).once
43
- client.perform_check(:check_type, check_data)
43
+ perform_check
44
44
  end
45
45
  end
46
46
  end
@@ -0,0 +1,819 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- edited with XMLSpy v2013 rel. 2 sp2 (http://www.altova.com) by Jason Vo (Callcredit Ltd) -->
3
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="1.0">
4
+ <xs:element name="callvalidate" type="sessionsType" abstract="false" nillable="false">
5
+ <xs:annotation>
6
+ <xs:documentation>API for Callcredit CallValidate Services</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ <xs:complexType name="Individual" abstract="false" mixed="false">
10
+ <xs:annotation>
11
+ <xs:documentation>Structure for the Individual Complex Type</xs:documentation>
12
+ </xs:annotation>
13
+ <xs:sequence>
14
+ <xs:element name="IndividualDetails" type="IndividualDetails" nillable="false" minOccurs="0">
15
+ <xs:annotation>
16
+ <xs:documentation>This structure is required to identify the individual for, Bank Enhanced, Credit Card Enhanced, Card Live and Individual identity checks</xs:documentation>
17
+ </xs:annotation>
18
+ </xs:element>
19
+ <xs:element name="AddressDetails" type="Address" nillable="false" minOccurs="0">
20
+ <xs:annotation>
21
+ <xs:documentation>This structure is required to identify the individual for, Bank Enhanced, Credit Card Enhanced, Card Live, Delivery Fraud and Individual identity checks.
22
+
23
+ For ID checks, one of Abodenumber, Buildingnumber or Buidlingname must be present.
24
+
25
+ For all checks including ID checks Address1 and Postcode must be present</xs:documentation>
26
+ </xs:annotation>
27
+ </xs:element>
28
+ </xs:sequence>
29
+ </xs:complexType>
30
+ <xs:complexType name="CardDetails" abstract="false" mixed="false">
31
+ <xs:annotation>
32
+ <xs:documentation>Structure for the Card Details Complex Type</xs:documentation>
33
+ </xs:annotation>
34
+ <xs:sequence>
35
+ <xs:element name="Cardnumber" nillable="false">
36
+ <xs:simpleType>
37
+ <xs:restriction base="xs:string">
38
+ <xs:pattern value="[0-9]{16,25}"/>
39
+ </xs:restriction>
40
+ </xs:simpleType>
41
+ </xs:element>
42
+ <xs:element name="Cardexpirydate" nillable="false" minOccurs="0">
43
+ <xs:annotation>
44
+ <xs:documentation>Formatted as mm/yy with leading zeros required for single digit months and years (eg. 01/09)</xs:documentation>
45
+ </xs:annotation>
46
+ <xs:simpleType>
47
+ <xs:restriction base="xs:string">
48
+ <xs:pattern value="[0-9]{2}/[0-9]{2}"/>
49
+ </xs:restriction>
50
+ </xs:simpleType>
51
+ </xs:element>
52
+ <xs:element name="Cardstartdate" nillable="false" minOccurs="0">
53
+ <xs:annotation>
54
+ <xs:documentation>Formatted as mm/yy with leading zeros required for single digit months and years (eg. 01/09)
55
+
56
+
57
+
58
+ May be required for debit card transactions</xs:documentation>
59
+ </xs:annotation>
60
+ <xs:simpleType>
61
+ <xs:restriction base="xs:string">
62
+ <xs:pattern value="[0-9]{2}/[0-9]{2}"/>
63
+ </xs:restriction>
64
+ </xs:simpleType>
65
+ </xs:element>
66
+ <xs:element name="CardCV2" nillable="false" minOccurs="0">
67
+ <xs:annotation>
68
+ <xs:documentation>The security code present upon the signature strip of a payment card</xs:documentation>
69
+ </xs:annotation>
70
+ <xs:simpleType>
71
+ <xs:restriction base="xs:string">
72
+ <xs:pattern value="[0-9]{3,4}"/>
73
+ </xs:restriction>
74
+ </xs:simpleType>
75
+ </xs:element>
76
+ <xs:element name="Cardissuenumber" nillable="false" minOccurs="0">
77
+ <xs:annotation>
78
+ <xs:documentation>May be required for debit card transactions</xs:documentation>
79
+ </xs:annotation>
80
+ <xs:simpleType>
81
+ <xs:restriction base="xs:int">
82
+ <xs:pattern value="[0-9]{1,2}"/>
83
+ </xs:restriction>
84
+ </xs:simpleType>
85
+ </xs:element>
86
+ <xs:element name="Amount" nillable="false" minOccurs="0">
87
+ <xs:annotation>
88
+ <xs:documentation>Optional amount used when attempting to pre-authorise an card account against a specific amount value.</xs:documentation>
89
+ </xs:annotation>
90
+ <xs:simpleType>
91
+ <xs:restriction base="xs:decimal"/>
92
+ </xs:simpleType>
93
+ </xs:element>
94
+ <xs:element name="TransactionReference" nillable="false" minOccurs="0">
95
+ <xs:annotation>
96
+ <xs:documentation>Client transaction reference</xs:documentation>
97
+ </xs:annotation>
98
+ <xs:simpleType>
99
+ <xs:restriction base="xs:string">
100
+ <xs:minLength value="1" fixed="false"/>
101
+ <xs:maxLength value="50" fixed="false"/>
102
+ </xs:restriction>
103
+ </xs:simpleType>
104
+ </xs:element>
105
+ <xs:element name="Method" minOccurs="0">
106
+ <xs:annotation>
107
+ <xs:documentation>Used for payment transactions to select task:-
108
+
109
+
110
+
111
+ "pre" - pre-auth payment
112
+
113
+ "auth" - take payment
114
+
115
+ "fulfill" - fulfill pre-auth
116
+
117
+ "txn_refund" -refund transaction</xs:documentation>
118
+ </xs:annotation>
119
+ <xs:simpleType>
120
+ <xs:restriction base="xs:string">
121
+ <xs:enumeration value="pre"/>
122
+ <xs:enumeration value="auth"/>
123
+ <xs:enumeration value="fulfill"/>
124
+ <xs:enumeration value="txn_refund"/>
125
+ </xs:restriction>
126
+ </xs:simpleType>
127
+ </xs:element>
128
+ <xs:element name="PaymentTransactionReference" minOccurs="0">
129
+ <xs:annotation>
130
+ <xs:documentation>Payment reference from a previous transaction that is to be either refunded, fulfilled or a repeat payment taken</xs:documentation>
131
+ </xs:annotation>
132
+ <xs:simpleType>
133
+ <xs:restriction base="xs:string">
134
+ <xs:minLength value="1"/>
135
+ <xs:maxLength value="50"/>
136
+ </xs:restriction>
137
+ </xs:simpleType>
138
+ </xs:element>
139
+ <xs:element name="Authcode" minOccurs="0">
140
+ <xs:annotation>
141
+ <xs:documentation>Authorisation code of a pre transaction that is to be fulfilled</xs:documentation>
142
+ </xs:annotation>
143
+ <xs:simpleType>
144
+ <xs:restriction base="xs:string">
145
+ <xs:minLength value="3"/>
146
+ <xs:maxLength value="20"/>
147
+ </xs:restriction>
148
+ </xs:simpleType>
149
+ </xs:element>
150
+ <xs:element name="RepeatTransaction" minOccurs="0">
151
+ <xs:annotation>
152
+ <xs:documentation>Identifies transaction as a repeat transaction using same card details of a previous payment</xs:documentation>
153
+ </xs:annotation>
154
+ <xs:simpleType>
155
+ <xs:restriction base="xs:string">
156
+ <xs:enumeration value="yes"/>
157
+ </xs:restriction>
158
+ </xs:simpleType>
159
+ </xs:element>
160
+ </xs:sequence>
161
+ </xs:complexType>
162
+ <xs:complexType name="BankDetails" abstract="false" mixed="false">
163
+ <xs:annotation>
164
+ <xs:documentation>Structure for the Bank Details Complex Type</xs:documentation>
165
+ </xs:annotation>
166
+ <xs:sequence>
167
+ <xs:element name="Bankaccountnumber" nillable="false">
168
+ <xs:simpleType>
169
+ <xs:restriction base="xs:string">
170
+ <xs:minLength value="7"/>
171
+ <xs:maxLength value="8"/>
172
+ </xs:restriction>
173
+ </xs:simpleType>
174
+ </xs:element>
175
+ <xs:element name="Banksortcode" nillable="false">
176
+ <xs:annotation>
177
+ <xs:documentation>Bank sortcode may be formatted as nn-nn-nn or nnnnnn</xs:documentation>
178
+ </xs:annotation>
179
+ <xs:simpleType>
180
+ <xs:restriction base="xs:string">
181
+ <xs:minLength value="6"/>
182
+ <xs:maxLength value="8"/>
183
+ </xs:restriction>
184
+ </xs:simpleType>
185
+ </xs:element>
186
+ </xs:sequence>
187
+ </xs:complexType>
188
+ <xs:complexType name="IncomeDetails" abstract="false" mixed="false">
189
+ <xs:annotation>
190
+ <xs:documentation>Structure for the Income Details Complex Type. This is only applicable if accessing The Affordability Report module.</xs:documentation>
191
+ </xs:annotation>
192
+ <xs:sequence>
193
+ <xs:element name="netmonthlyincome" type="xs:int" minOccurs="0" maxOccurs="1">
194
+ <xs:annotation>
195
+ <xs:documentation>The net monthly income of the individual to be searched in this field. This value should be entered in pounds</xs:documentation>
196
+ </xs:annotation>
197
+ </xs:element>
198
+ <xs:element name="annualgrossincome" type="xs:int" minOccurs="0" maxOccurs="1">
199
+ <xs:annotation>
200
+ <xs:documentation>The gross annual income of the individual to be searched in this field. This value should be entered in pounds</xs:documentation>
201
+ </xs:annotation>
202
+ </xs:element>
203
+ </xs:sequence>
204
+ </xs:complexType>
205
+ <xs:complexType name="Authentication" abstract="false" mixed="false">
206
+ <xs:annotation>
207
+ <xs:documentation>Structure for the Authentication Complex Type</xs:documentation>
208
+ </xs:annotation>
209
+ <xs:sequence>
210
+ <xs:element name="company" minOccurs="0">
211
+ <xs:annotation>
212
+ <xs:documentation>Company name provided by Callcredit administrators.</xs:documentation>
213
+ </xs:annotation>
214
+ <xs:simpleType>
215
+ <xs:restriction base="xs:string">
216
+ <xs:minLength value="5"/>
217
+ <xs:maxLength value="30"/>
218
+ </xs:restriction>
219
+ </xs:simpleType>
220
+ </xs:element>
221
+ <xs:element name="username" nillable="false">
222
+ <xs:annotation>
223
+ <xs:documentation>Username provided by Callcredit administrators.</xs:documentation>
224
+ </xs:annotation>
225
+ <xs:simpleType>
226
+ <xs:restriction base="xs:string">
227
+ <xs:minLength value="5" fixed="false"/>
228
+ <xs:maxLength value="50" fixed="false"/>
229
+ </xs:restriction>
230
+ </xs:simpleType>
231
+ </xs:element>
232
+ <xs:element name="password" nillable="false">
233
+ <xs:annotation>
234
+ <xs:documentation>Password provided by Callcredit administrators.</xs:documentation>
235
+ </xs:annotation>
236
+ <xs:simpleType>
237
+ <xs:restriction base="xs:string">
238
+ <xs:minLength value="5" fixed="false"/>
239
+ <xs:maxLength value="30" fixed="false"/>
240
+ </xs:restriction>
241
+ </xs:simpleType>
242
+ </xs:element>
243
+ </xs:sequence>
244
+ </xs:complexType>
245
+ <xs:complexType name="IndividualDetails" abstract="false" mixed="false">
246
+ <xs:annotation>
247
+ <xs:documentation>Structure for the IndividualDetails Complex Type</xs:documentation>
248
+ </xs:annotation>
249
+ <xs:sequence>
250
+ <xs:element name="Dateofbirth" nillable="false" minOccurs="0">
251
+ <xs:annotation>
252
+ <xs:documentation>May be formatted as one of:
253
+
254
+
255
+
256
+ yyyy-mm-dd
257
+
258
+ dd-mm-yyyy
259
+
260
+ dd/mm/yyyy</xs:documentation>
261
+ </xs:annotation>
262
+ <xs:simpleType>
263
+ <xs:restriction base="xs:string">
264
+ <xs:minLength value="10"/>
265
+ <xs:maxLength value="10"/>
266
+ </xs:restriction>
267
+ </xs:simpleType>
268
+ </xs:element>
269
+ <xs:element name="Title" nillable="false">
270
+ <xs:annotation>
271
+ <xs:documentation>Title of individual, mandatory for all API submissions</xs:documentation>
272
+ </xs:annotation>
273
+ <xs:simpleType>
274
+ <xs:restriction base="xs:string">
275
+ <xs:minLength value="2" fixed="false"/>
276
+ <xs:maxLength value="30" fixed="false"/>
277
+ </xs:restriction>
278
+ </xs:simpleType>
279
+ </xs:element>
280
+ <xs:element name="Firstname" nillable="false">
281
+ <xs:annotation>
282
+ <xs:documentation>Firstname of individual</xs:documentation>
283
+ </xs:annotation>
284
+ <xs:simpleType>
285
+ <xs:restriction base="xs:string">
286
+ <xs:minLength value="1" fixed="false"/>
287
+ <xs:maxLength value="30" fixed="false"/>
288
+ </xs:restriction>
289
+ </xs:simpleType>
290
+ </xs:element>
291
+ <xs:element name="Othernames" nillable="false" minOccurs="0">
292
+ <xs:annotation>
293
+ <xs:documentation>Other (middle) names of individual, may be a single initial</xs:documentation>
294
+ </xs:annotation>
295
+ <xs:simpleType>
296
+ <xs:restriction base="xs:string">
297
+ <xs:minLength value="1" fixed="false"/>
298
+ <xs:maxLength value="30" fixed="false"/>
299
+ </xs:restriction>
300
+ </xs:simpleType>
301
+ </xs:element>
302
+ <xs:element name="Surname" nillable="false">
303
+ <xs:annotation>
304
+ <xs:documentation>Surname of individual, mandatory for API users</xs:documentation>
305
+ </xs:annotation>
306
+ <xs:simpleType>
307
+ <xs:restriction base="xs:string">
308
+ <xs:minLength value="1" fixed="false"/>
309
+ <xs:maxLength value="30" fixed="false"/>
310
+ </xs:restriction>
311
+ </xs:simpleType>
312
+ </xs:element>
313
+ <xs:element name="Phonenumber" type="xs:string" minOccurs="0"/>
314
+ <xs:element name="Emailaddress" minOccurs="0">
315
+ <xs:simpleType>
316
+ <xs:restriction base="xs:string">
317
+ <xs:minLength value="5"/>
318
+ <xs:maxLength value="255"/>
319
+ </xs:restriction>
320
+ </xs:simpleType>
321
+ </xs:element>
322
+ <xs:element name="addrlessthan12months" type="xs:boolean" minOccurs="0"/>
323
+ <xs:element name="Passportline1" minOccurs="0">
324
+ <xs:annotation>
325
+ <xs:documentation>First machine readable line of passport.
326
+
327
+ NOTE: Must be escaped in line with XML convention </xs:documentation>
328
+ </xs:annotation>
329
+ <xs:simpleType>
330
+ <xs:restriction base="xs:string">
331
+ <xs:maxLength value="50"/>
332
+ </xs:restriction>
333
+ </xs:simpleType>
334
+ </xs:element>
335
+ <xs:element name="Passportline2" minOccurs="0">
336
+ <xs:annotation>
337
+ <xs:documentation>Second machine readable line of passport
338
+
339
+ NOTE: Must be escaped in line with XML convention </xs:documentation>
340
+ </xs:annotation>
341
+ <xs:simpleType>
342
+ <xs:restriction base="xs:string">
343
+ <xs:maxLength value="50"/>
344
+ </xs:restriction>
345
+ </xs:simpleType>
346
+ </xs:element>
347
+ <xs:element name="Drivinglicensenumber" minOccurs="0">
348
+ <xs:annotation>
349
+ <xs:documentation>Driving license number</xs:documentation>
350
+ </xs:annotation>
351
+ <xs:simpleType>
352
+ <xs:restriction base="xs:string">
353
+ <xs:maxLength value="50"/>
354
+ </xs:restriction>
355
+ </xs:simpleType>
356
+ </xs:element>
357
+ <xs:element name="PassportExpiryDate" minOccurs="0">
358
+ <xs:annotation>
359
+ <xs:documentation>Expiry date of passport</xs:documentation>
360
+ </xs:annotation>
361
+ <xs:simpleType>
362
+ <xs:restriction base="xs:string">
363
+ <xs:maxLength value="50"/>
364
+ </xs:restriction>
365
+ </xs:simpleType>
366
+ </xs:element>
367
+ <xs:element name="IPAddress" minOccurs="0">
368
+ <xs:annotation>
369
+ <xs:documentation>IP Address used by individual in transaction</xs:documentation>
370
+ </xs:annotation>
371
+ <xs:simpleType>
372
+ <xs:restriction base="xs:string">
373
+ <xs:pattern value="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"/>
374
+ </xs:restriction>
375
+ </xs:simpleType>
376
+ </xs:element>
377
+ </xs:sequence>
378
+ </xs:complexType>
379
+ <xs:complexType name="Address" abstract="false" mixed="false">
380
+ <xs:annotation>
381
+ <xs:documentation>Structure for Address Complex Type</xs:documentation>
382
+ </xs:annotation>
383
+ <xs:sequence>
384
+ <xs:element name="Abodenumber" minOccurs="0">
385
+ <xs:annotation>
386
+ <xs:documentation>Number that identifies the specific abode where there may be more than one abode within a building. For example a flat number.</xs:documentation>
387
+ </xs:annotation>
388
+ <xs:simpleType>
389
+ <xs:restriction base="xs:string">
390
+ <xs:minLength value="0"/>
391
+ <xs:maxLength value="30"/>
392
+ </xs:restriction>
393
+ </xs:simpleType>
394
+ </xs:element>
395
+ <xs:element name="Buildingnumber" nillable="false" minOccurs="0">
396
+ <xs:annotation>
397
+ <xs:documentation>Number that identifies the building within a street or locality.</xs:documentation>
398
+ </xs:annotation>
399
+ <xs:simpleType>
400
+ <xs:restriction base="xs:string">
401
+ <xs:minLength value="0" fixed="false"/>
402
+ <xs:maxLength value="12" fixed="false"/>
403
+ </xs:restriction>
404
+ </xs:simpleType>
405
+ </xs:element>
406
+ <xs:element name="Buildingname" nillable="false" minOccurs="0">
407
+ <xs:annotation>
408
+ <xs:documentation>Name that identifies the building within a street or locality.</xs:documentation>
409
+ </xs:annotation>
410
+ <xs:simpleType>
411
+ <xs:restriction base="xs:string">
412
+ <xs:minLength value="0" fixed="false"/>
413
+ <xs:maxLength value="50" fixed="false"/>
414
+ </xs:restriction>
415
+ </xs:simpleType>
416
+ </xs:element>
417
+ <xs:element name="Address1" nillable="false" minOccurs="0">
418
+ <xs:simpleType>
419
+ <xs:restriction base="xs:string">
420
+ <xs:minLength value="1" fixed="false"/>
421
+ <xs:maxLength value="50" fixed="false"/>
422
+ </xs:restriction>
423
+ </xs:simpleType>
424
+ </xs:element>
425
+ <xs:element name="Address2" nillable="false" minOccurs="0">
426
+ <xs:simpleType>
427
+ <xs:restriction base="xs:string">
428
+ <xs:minLength value="1" fixed="false"/>
429
+ <xs:maxLength value="50" fixed="false"/>
430
+ </xs:restriction>
431
+ </xs:simpleType>
432
+ </xs:element>
433
+ <xs:element name="Address3" nillable="false" minOccurs="0">
434
+ <xs:simpleType>
435
+ <xs:restriction base="xs:string">
436
+ <xs:minLength value="1" fixed="false"/>
437
+ <xs:maxLength value="50" fixed="false"/>
438
+ </xs:restriction>
439
+ </xs:simpleType>
440
+ </xs:element>
441
+ <xs:element name="Town" nillable="false" minOccurs="0">
442
+ <xs:simpleType>
443
+ <xs:restriction base="xs:string">
444
+ <xs:minLength value="1" fixed="false"/>
445
+ <xs:maxLength value="25" fixed="false"/>
446
+ </xs:restriction>
447
+ </xs:simpleType>
448
+ </xs:element>
449
+ <xs:element name="Postcode" nillable="false" minOccurs="0">
450
+ <xs:annotation>
451
+ <xs:documentation>UK Postcode </xs:documentation>
452
+ </xs:annotation>
453
+ <xs:simpleType>
454
+ <xs:restriction base="xs:string">
455
+ <xs:minLength value="6" fixed="false"/>
456
+ <xs:maxLength value="8" fixed="false"/>
457
+ </xs:restriction>
458
+ </xs:simpleType>
459
+ </xs:element>
460
+ <xs:element name="Previousabodenumber" minOccurs="0">
461
+ <xs:annotation>
462
+ <xs:documentation>Previous address details of individual</xs:documentation>
463
+ </xs:annotation>
464
+ <xs:simpleType>
465
+ <xs:restriction base="xs:string">
466
+ <xs:minLength value="0"/>
467
+ <xs:maxLength value="30"/>
468
+ </xs:restriction>
469
+ </xs:simpleType>
470
+ </xs:element>
471
+ <xs:element name="Previousbuildingnumber" nillable="false" minOccurs="0">
472
+ <xs:simpleType>
473
+ <xs:restriction base="xs:string">
474
+ <xs:minLength value="1" fixed="false"/>
475
+ <xs:maxLength value="12" fixed="false"/>
476
+ </xs:restriction>
477
+ </xs:simpleType>
478
+ </xs:element>
479
+ <xs:element name="Previousbuildingname" nillable="false" minOccurs="0">
480
+ <xs:simpleType>
481
+ <xs:restriction base="xs:string">
482
+ <xs:minLength value="1" fixed="false"/>
483
+ <xs:maxLength value="50" fixed="false"/>
484
+ </xs:restriction>
485
+ </xs:simpleType>
486
+ </xs:element>
487
+ <xs:element name="Previousaddress1" nillable="false" minOccurs="0">
488
+ <xs:simpleType>
489
+ <xs:restriction base="xs:string">
490
+ <xs:minLength value="1" fixed="false"/>
491
+ <xs:maxLength value="50" fixed="false"/>
492
+ </xs:restriction>
493
+ </xs:simpleType>
494
+ </xs:element>
495
+ <xs:element name="Previousaddress2" nillable="false" minOccurs="0">
496
+ <xs:simpleType>
497
+ <xs:restriction base="xs:string">
498
+ <xs:minLength value="1" fixed="false"/>
499
+ <xs:maxLength value="50" fixed="false"/>
500
+ </xs:restriction>
501
+ </xs:simpleType>
502
+ </xs:element>
503
+ <xs:element name="Previousaddress3" nillable="false" minOccurs="0">
504
+ <xs:simpleType>
505
+ <xs:restriction base="xs:string">
506
+ <xs:minLength value="1" fixed="false"/>
507
+ <xs:maxLength value="50" fixed="false"/>
508
+ </xs:restriction>
509
+ </xs:simpleType>
510
+ </xs:element>
511
+ <xs:element name="Previoustown" nillable="false" minOccurs="0">
512
+ <xs:simpleType>
513
+ <xs:restriction base="xs:string">
514
+ <xs:minLength value="1" fixed="false"/>
515
+ <xs:maxLength value="25" fixed="false"/>
516
+ </xs:restriction>
517
+ </xs:simpleType>
518
+ </xs:element>
519
+ <xs:element name="Previouspostcode" nillable="false" minOccurs="0">
520
+ <xs:annotation>
521
+ <xs:documentation>Currently only UK postcodes are accepted</xs:documentation>
522
+ </xs:annotation>
523
+ <xs:simpleType>
524
+ <xs:restriction base="xs:string">
525
+ <xs:minLength value="6" fixed="false"/>
526
+ <xs:maxLength value="8" fixed="false"/>
527
+ </xs:restriction>
528
+ </xs:simpleType>
529
+ </xs:element>
530
+ <xs:element name="Deliveryabodenumber" minOccurs="0">
531
+ <xs:annotation>
532
+ <xs:documentation>Delivery address for goods</xs:documentation>
533
+ </xs:annotation>
534
+ <xs:simpleType>
535
+ <xs:restriction base="xs:string">
536
+ <xs:minLength value="0"/>
537
+ <xs:maxLength value="30"/>
538
+ </xs:restriction>
539
+ </xs:simpleType>
540
+ </xs:element>
541
+ <xs:element name="Deliverybuildingnumber" nillable="false" minOccurs="0">
542
+ <xs:simpleType>
543
+ <xs:restriction base="xs:string">
544
+ <xs:minLength value="1" fixed="false"/>
545
+ <xs:maxLength value="12" fixed="false"/>
546
+ </xs:restriction>
547
+ </xs:simpleType>
548
+ </xs:element>
549
+ <xs:element name="Deliverybuildingname" nillable="false" minOccurs="0">
550
+ <xs:simpleType>
551
+ <xs:restriction base="xs:string">
552
+ <xs:minLength value="1" fixed="false"/>
553
+ <xs:maxLength value="50" fixed="false"/>
554
+ </xs:restriction>
555
+ </xs:simpleType>
556
+ </xs:element>
557
+ <xs:element name="Deliveryaddress1" nillable="false" minOccurs="0">
558
+ <xs:simpleType>
559
+ <xs:restriction base="xs:string">
560
+ <xs:minLength value="1" fixed="false"/>
561
+ <xs:maxLength value="50" fixed="false"/>
562
+ </xs:restriction>
563
+ </xs:simpleType>
564
+ </xs:element>
565
+ <xs:element name="Deliveryaddress2" nillable="false" minOccurs="0">
566
+ <xs:simpleType>
567
+ <xs:restriction base="xs:string">
568
+ <xs:minLength value="1" fixed="false"/>
569
+ <xs:maxLength value="50" fixed="false"/>
570
+ </xs:restriction>
571
+ </xs:simpleType>
572
+ </xs:element>
573
+ <xs:element name="Deliveryaddress3" nillable="false" minOccurs="0">
574
+ <xs:simpleType>
575
+ <xs:restriction base="xs:string">
576
+ <xs:minLength value="1" fixed="false"/>
577
+ <xs:maxLength value="50" fixed="false"/>
578
+ </xs:restriction>
579
+ </xs:simpleType>
580
+ </xs:element>
581
+ <xs:element name="Deliverytown" nillable="false" minOccurs="0">
582
+ <xs:simpleType>
583
+ <xs:restriction base="xs:string">
584
+ <xs:minLength value="1" fixed="false"/>
585
+ <xs:maxLength value="25" fixed="false"/>
586
+ </xs:restriction>
587
+ </xs:simpleType>
588
+ </xs:element>
589
+ <xs:element name="Deliverypostcode" nillable="false" minOccurs="0">
590
+ <xs:annotation>
591
+ <xs:documentation>Currently only UK postcodes are accepted</xs:documentation>
592
+ </xs:annotation>
593
+ <xs:simpleType>
594
+ <xs:restriction base="xs:string">
595
+ <xs:minLength value="6" fixed="false"/>
596
+ <xs:maxLength value="8" fixed="false"/>
597
+ </xs:restriction>
598
+ </xs:simpleType>
599
+ </xs:element>
600
+ </xs:sequence>
601
+ </xs:complexType>
602
+ <xs:complexType name="sessionsType" abstract="false" mixed="false">
603
+ <xs:sequence>
604
+ <xs:element name="authentication" type="Authentication" nillable="false"/>
605
+ <xs:element name="sessions">
606
+ <xs:complexType>
607
+ <xs:sequence>
608
+ <xs:element name="session" nillable="false">
609
+ <xs:complexType mixed="false">
610
+ <xs:sequence>
611
+ <xs:element name="data" nillable="false">
612
+ <xs:complexType mixed="false">
613
+ <xs:sequence>
614
+ <xs:element name="Personalinformation" type="Individual" nillable="false" minOccurs="0">
615
+ <xs:annotation>
616
+ <xs:documentation>This structure is required for all checks that pertain to an individual </xs:documentation>
617
+ </xs:annotation>
618
+ </xs:element>
619
+ <xs:element name="Cardinformation" type="CardDetails" nillable="false" minOccurs="0">
620
+ <xs:annotation>
621
+ <xs:documentation>This information is required for Card Enhanced and Card Live checks</xs:documentation>
622
+ </xs:annotation>
623
+ </xs:element>
624
+ <xs:element name="Bankinformation" type="BankDetails" nillable="false" minOccurs="0">
625
+ <xs:annotation>
626
+ <xs:documentation>This information is required for Bank standard and Bank Enhanced checks</xs:documentation>
627
+ </xs:annotation>
628
+ </xs:element>
629
+ <xs:element name="IncomeDetails" type="IncomeDetails" nillable="false" minOccurs="0">
630
+ <xs:annotation>
631
+ <xs:documentation>This structure is required to identify the annual gross or monthly net income for an individual. . This is only applicable if accessing The Affordability Report module.</xs:documentation>
632
+ </xs:annotation>
633
+ </xs:element>
634
+ <xs:element name="ChecksRequired" type="ChecksRequired" minOccurs="0">
635
+ <xs:annotation>
636
+ <xs:documentation>This structure details which checks are to be carried out. If it is not provided, checks will be carried out based upon the data provided and the checks set up upon the account.</xs:documentation>
637
+ </xs:annotation>
638
+ </xs:element>
639
+ </xs:sequence>
640
+ </xs:complexType>
641
+ </xs:element>
642
+ </xs:sequence>
643
+ <xs:attribute name="RID" use="optional">
644
+ <xs:annotation>
645
+ <xs:documentation>The RID attribute is the user supplied reference for each transaction submitted. This will be returned within the XML Response message</xs:documentation>
646
+ </xs:annotation>
647
+ <xs:simpleType>
648
+ <xs:restriction base="xs:string">
649
+ <xs:minLength value="0"/>
650
+ <xs:maxLength value="50"/>
651
+ </xs:restriction>
652
+ </xs:simpleType>
653
+ </xs:attribute>
654
+ </xs:complexType>
655
+ </xs:element>
656
+ </xs:sequence>
657
+ </xs:complexType>
658
+ </xs:element>
659
+ <xs:element name="application">
660
+ <xs:annotation>
661
+ <xs:documentation>Used to select the API ruleset to be run. The values will be provided by a CallCredit administrator</xs:documentation>
662
+ </xs:annotation>
663
+ <xs:simpleType>
664
+ <xs:restriction base="xs:string">
665
+ <xs:minLength value="3"/>
666
+ <xs:maxLength value="30"/>
667
+ </xs:restriction>
668
+ </xs:simpleType>
669
+ </xs:element>
670
+ </xs:sequence>
671
+ </xs:complexType>
672
+ <xs:complexType name="ChecksRequired">
673
+ <xs:sequence>
674
+ <xs:element name="BankStandard">
675
+ <xs:annotation>
676
+ <xs:documentation>yes - Bank Standard check carried out</xs:documentation>
677
+ </xs:annotation>
678
+ <xs:simpleType>
679
+ <xs:restriction base="xs:string">
680
+ <xs:enumeration value="yes"/>
681
+ <xs:enumeration value="no"/>
682
+ </xs:restriction>
683
+ </xs:simpleType>
684
+ </xs:element>
685
+ <xs:element name="BankEnhanced">
686
+ <xs:annotation>
687
+ <xs:documentation>yes - Bank Enhanced check carried out</xs:documentation>
688
+ </xs:annotation>
689
+ <xs:simpleType>
690
+ <xs:restriction base="xs:string">
691
+ <xs:enumeration value="yes"/>
692
+ <xs:enumeration value="no"/>
693
+ </xs:restriction>
694
+ </xs:simpleType>
695
+ </xs:element>
696
+ <xs:element name="CardLive">
697
+ <xs:annotation>
698
+ <xs:documentation>yes - Card Live check carried out</xs:documentation>
699
+ </xs:annotation>
700
+ <xs:simpleType>
701
+ <xs:restriction base="xs:string">
702
+ <xs:enumeration value="yes"/>
703
+ <xs:enumeration value="no"/>
704
+ </xs:restriction>
705
+ </xs:simpleType>
706
+ </xs:element>
707
+ <xs:element name="CardEnhanced">
708
+ <xs:annotation>
709
+ <xs:documentation>yes - Card Enhanced check carried out</xs:documentation>
710
+ </xs:annotation>
711
+ <xs:simpleType>
712
+ <xs:restriction base="xs:string">
713
+ <xs:enumeration value="yes"/>
714
+ <xs:enumeration value="no"/>
715
+ </xs:restriction>
716
+ </xs:simpleType>
717
+ </xs:element>
718
+ <xs:element name="IDEnhanced">
719
+ <xs:annotation>
720
+ <xs:documentation>yes - ID Enhanced check carried out</xs:documentation>
721
+ </xs:annotation>
722
+ <xs:simpleType>
723
+ <xs:restriction base="xs:string">
724
+ <xs:enumeration value="yes"/>
725
+ <xs:enumeration value="no"/>
726
+ </xs:restriction>
727
+ </xs:simpleType>
728
+ </xs:element>
729
+ <xs:element name="NCOAAlert">
730
+ <xs:annotation>
731
+ <xs:documentation>yes - NCOA Alert check carried out</xs:documentation>
732
+ </xs:annotation>
733
+ <xs:simpleType>
734
+ <xs:restriction base="xs:string">
735
+ <xs:enumeration value="yes"/>
736
+ <xs:enumeration value="no"/>
737
+ </xs:restriction>
738
+ </xs:simpleType>
739
+ </xs:element>
740
+ <xs:element name="CallValidate3D">
741
+ <xs:annotation>
742
+ <xs:documentation>yes - CallValidate 3D check carried out</xs:documentation>
743
+ </xs:annotation>
744
+ <xs:simpleType>
745
+ <xs:restriction base="xs:string">
746
+ <xs:enumeration value="yes"/>
747
+ <xs:enumeration value="no"/>
748
+ </xs:restriction>
749
+ </xs:simpleType>
750
+ </xs:element>
751
+ <xs:element name="TheAffordabilityReport">
752
+ <xs:annotation>
753
+ <xs:documentation>yes - The Affordability Report (TACv2.2) check carried out</xs:documentation>
754
+ </xs:annotation>
755
+ <xs:simpleType>
756
+ <xs:restriction base="xs:string">
757
+ <xs:enumeration value="yes"/>
758
+ <xs:enumeration value="no"/>
759
+ </xs:restriction>
760
+ </xs:simpleType>
761
+ </xs:element>
762
+ <xs:element name="DeliveryFraud">
763
+ <xs:annotation>
764
+ <xs:documentation>yes - Delivery Fraud check carried out</xs:documentation>
765
+ </xs:annotation>
766
+ <xs:simpleType>
767
+ <xs:restriction base="xs:string">
768
+ <xs:enumeration value="yes"/>
769
+ <xs:enumeration value="no"/>
770
+ </xs:restriction>
771
+ </xs:simpleType>
772
+ </xs:element>
773
+ <xs:element name="EmailValidate">
774
+ <xs:annotation>
775
+ <xs:documentation>yes - Email Validate check carried out</xs:documentation>
776
+ </xs:annotation>
777
+ <xs:simpleType>
778
+ <xs:restriction base="xs:string">
779
+ <xs:enumeration value="yes"/>
780
+ <xs:enumeration value="no"/>
781
+ </xs:restriction>
782
+ </xs:simpleType>
783
+ </xs:element>
784
+ <xs:element name="CreditScore">
785
+ <xs:annotation>
786
+ <xs:documentation>yes - Credit Score provided</xs:documentation>
787
+ </xs:annotation>
788
+ <xs:simpleType>
789
+ <xs:restriction base="xs:string">
790
+ <xs:enumeration value="yes"/>
791
+ <xs:enumeration value="no"/>
792
+ </xs:restriction>
793
+ </xs:simpleType>
794
+ </xs:element>
795
+ <xs:element name="Zodiac">
796
+ <xs:annotation>
797
+ <xs:documentation>yes - sign of Zodiac returned for date of birth provided</xs:documentation>
798
+ </xs:annotation>
799
+ <xs:simpleType>
800
+ <xs:restriction base="xs:string">
801
+ <xs:enumeration value="yes"/>
802
+ <xs:enumeration value="no"/>
803
+ </xs:restriction>
804
+ </xs:simpleType>
805
+ </xs:element>
806
+ <xs:element name="IPCountry">
807
+ <xs:annotation>
808
+ <xs:documentation>yes - value added IP address checks carried out</xs:documentation>
809
+ </xs:annotation>
810
+ <xs:simpleType>
811
+ <xs:restriction base="xs:string">
812
+ <xs:enumeration value="yes"/>
813
+ <xs:enumeration value="no"/>
814
+ </xs:restriction>
815
+ </xs:simpleType>
816
+ </xs:element>
817
+ </xs:sequence>
818
+ </xs:complexType>
819
+ </xs:schema>