Registration Client UI Specifications

Overview

The registration UI forms are rendered using respective UI specification JSON. This is derived from the ID Schema defined by a country. Here, we would be discussing about the properties used in the UI specification of Registration Client.
In the Registration Client, currently, Registration Tasks(process) forms are configurable using the UI specifications.
Each process has multiple screens and each screen is rendered with one or more fields.

Process/ Task spec JSON template

1
{
2
"id": "<NEW/UPDATE/LOST/BIOMETRIC_CORRECTION process name as passed in the packet>",
3
//order in which the process is displayed on the registration client home screen
4
"order": 1,
5
"flow": "<NEW/UPDATE/LOST/CORRECTION>",
6
//Multi-lingual labels displayed based on the logged in language
7
"label": {
8
"eng": "Registration",
9
"ara": "تسجيل",
10
"fra": "Inscription"
11
},
12
//screen details - follows screen spec structure
13
"screens": [{}],
14
//caption displays on-hover content
15
"caption": {
16
"eng": "Registration",
17
"ara": "تسجيل",
18
"fra": "Inscription"
19
},
20
//icon is the symbol that appears before the process label
21
"icon": "registration.png",
22
"isActive": true,
23
//group names that should be by default selected during UDPATE UIN process
24
"autoSelectedGroups": [""]
25
}
Copied!

Screen spec JSON template

1
{
2
//Order of the screen in registration page
3
"order": 1,
4
"name": "<unique identifier for the screen>",
5
"label": {
6
"ara": "شاشة عينة",
7
"fra": "Exemple d'écran",
8
"eng": "Sample screen"
9
},
10
"caption": {
11
"ara": "شاشة عينة",
12
"fra": "Exemple d'écran",
13
"eng": "Sample screen"
14
},
15
//field details - follows field spec structure
16
"fields": [{}],
17
"layoutTemplate": null,
18
//displays field to provide pre-reg application ID, data fetched from pre-reg application will be pre-filled in the current registration form
19
"preRegFetchRequired": true,
20
//enable below flag to capture additionalInfo request ID , applicable only during correction process
21
"additionalInfoRequestIdRequired" : false,
22
//show or hide screens
23
"active": true
24
}
Copied!

Field spec JSON template

1
{
2
"id": "<Unique identifier for the field, must be same as that described in the ID Schema>",
3
//inputRequired is used to identify if UI input is needed or not
4
"inputRequired": true,
5
//type defines the datatype of the field, must be same as that is defined in the ID Schema
6
"type": "<string/simpleType/documentType/biometricsType>",
7
"controlType": "textbox/fileupload/dropdown/checkbox/button/date/ageDate/html/biometrics",
8
//minimum- applicable only for date controlType(defined in days)
9
"minimum": 0,
10
//maximum- applicable only for date controlType(defined in days)
11
"maximum": 365,
12
"description": "<Field description>",
13
"label": {
14
"ara": "حقل العينة",
15
"fra": "Exemple de champ",
16
"eng": "Sample Field"
17
},
18
//fieldType is used to identify if it is a dynamic field
19
"fieldType": "<default/dynamic>",
20
//to validate the format should be in upper or lower case
21
"format": "<lowercase/uppercase/none>",
22
//list of validators for the field
23
"validators": [{
24
//type of validation engine (currently, only regex is supported)
25
"type": "regex",
26
//expression for the validation
27
"validator": "^([0-9]{10,30})quot;,
28
//list of arguments needed for the validator
29
"arguments": [],
30
//if null, its applicable for all languages, else validator expression can be provided for each langCode
31
"langCode": null,
32
/*error code to be used to display specific error message, if null, generic validation error message is displayed
33
There error codes must be configured in registration client i18n files*/
34
"errorCode" : "UI_100001"
35
}],
36
//determines sharing and longevity policies applicable as defined in ID Schema
37
"fieldCategory": "<pvt/evidence/kyc>",
38
"alignmentGroup": "<fields belonging to same alignment group are placed horizontally next to each other>",
39
//determines when to display and hide the field(set null if the field has to be displayed always)
40
"visible": {
41
"engine": "MVEL",
42
"expr": "identity.get('ageGroup') == 'INFANT' && (identity.get('introducerRID') == nil || identity.get('introducerRID') == empty)"
43
},
44
"contactType": null,
45
//used to group together the list of fields(only applicable in the Update UIN process)
46
"group": "<grouping used in update UIN process>",
47
"groupLabel": {
48
"eng" : "Sample group",
49
"ara" : "مجموعة العينة",
50
"fra" : "Groupe d'échantillons"
51
},
52
/*on change of the field value, configured Action will be triggered on other fields
53
Change action handlers should be implemented in registration client*/
54
"changeAction": null,
55
//enable or disable auto-transliteration
56
"transliterate": false,
57
/*provide the templateName(applicable only for html controlType fields)
58
These templates should be configured in templates table*/
59
"templateName": null,
60
"fieldLayout": null,
61
"locationHierarchy": null,
62
//On any biometric exception, Need to capture exception photo as proof if the below flag is enabled
63
"exceptionPhotoRequired" : true,
64
/*applicable only for BiometricsType field, defines the list of attributes to be captured
65
All the supported biometric attributes are listed down for reference*/
66
"bioAttributes": [
67
"leftEye",
68
"rightEye",
69
"rightIndex",
70
"rightLittle",
71
"rightRing",
72
"rightMiddle",
73
"leftIndex",
74
"leftLittle",
75
"leftRing",
76
"leftMiddle",
77
"leftThumb",
78
"rightThumb",
79
"face"
80
],
81
//capture of above mentioned bioAttributes can be conditionally mandated based on age group
82
"conditionalBioAttributes": [{
83
"ageGroup": "INFANT",
84
"process": "ALL",
85
"validationExpr": "face || (leftEye && rightEye)",
86
"bioAttributes": [
87
"face", "leftEye", "rightEye"
88
]
89
}],
90
//set true/false to mark the field as mandatory or optional
91
"required": true,
92
//if requiredOn is defined, the evaluation result of requiredOn.expr takes the priority over "required" attribute
93
"requiredOn": [{
94
"engine": "MVEL",
95
"expr": "identity.get('ageGroup') == 'INFANT' && (identity.get('introducerRID') == nil || identity.get('introducerRID') == empty)"
96
}],
97
//used to identify the type of field
98
"subType": "<document types / applicant / heirarchy level names>"
99
}
Copied!

Sample correction process SPEC: Biometric Correction

1
{
2
"id": "BIOMETRIC_CORRECTION",
3
"order": 4,
4
"flow": "CORRECTION"
5
"label": {
6
"eng": "Biometric correction",
7
"ara": "التصحيح البيومتري",
8
"fra": "Correction biométrique"
9
},
10
"screens": [{
11
"order": 1,
12
"name": "consentdet",
13
"label": {
14
"ara": "موافقة",
15
"fra": "Consentement",
16
"eng": "Consent"
17
},
18
"caption": {
19
"ara": "موافقة",
20
"fra": "Consentement",
21
"eng": "Consent"
22
},
23
"fields": [{
24
"id": "consentText",
25
"inputRequired": true,
26
"type": "simpleType",
27
"minimum": 0,
28
"maximum": 0,
29
"description": "Consent",
30
"label": {},
31
"controlType": "html",
32
"fieldType": "default",
33
"format": "none",
34
"validators": [],
35
"fieldCategory": "evidence",
36
"alignmentGroup": null,
37
"visible": null,
38
"contactType": null,
39
"group": "consentText",
40
"groupLabel": null,
41
"changeAction": null,
42
"transliterate": false,
43
"templateName": "Registration Consent",
44
"fieldLayout": null,
45
"locationHierarchy": null,
46
"conditionalBioAttributes": null,
47
"required": true,
48
"bioAttributes": null,
49
"requiredOn": [],
50
"subType": "consentText"
51
},
52
{
53
"id": "consent",
54
"inputRequired": true,
55
"type": "string",
56
"minimum": 0,
57
"maximum": 0,
58
"description": "consent accepted",
59
"label": {
60
"ara": "الاسم الكامل الكامل الكامل",
61
"fra": "J'ai lu et j'accepte les termes et conditions pour partager mes PII",
62
"eng": "I have read and accept terms and conditions to share my PII"
63
},
64
"controlType": "checkbox",
65
"fieldType": "default",
66
"format": "none",
67
"validators": [],
68
"fieldCategory": "evidence",
69
"alignmentGroup": null,
70
"visible": null,
71
"contactType": null,
72
"group": "consent",
73
"groupLabel": null,
74
"changeAction": null,
75
"transliterate": false,
76
"templateName": null,
77
"fieldLayout": null,
78
"locationHierarchy": null,
79
"conditionalBioAttributes": null,
80
"required": true,
81
"bioAttributes": null,
82
"requiredOn": [],
83
"subType": "consent"
84
}, {
85
"id": "preferredLang",
86
"inputRequired": true,
87
"type": "string",
88
"minimum": 0,
89
"maximum": 0,
90
"description": "user preferred Language",
91
"label": {
92
"ara": "لغة الإخطار",
93
"fra": "Langue de notification",
94
"eng": "Notification Langauge"
95
},
96
"controlType": "button",
97
"fieldType": "dynamic",
98
"format": "none",
99
"validators": [],
100
"fieldCategory": "pvt",
101
"alignmentGroup": "group1",
102
"visible": null,
103
"contactType": null,
104
"group": "PreferredLanguage",
105
"groupLabel": null,
106
"changeAction": null,
107
"transliterate": false,
108
"templateName": null,
109
"fieldLayout": null,
110
"locationHierarchy": null,
111
"conditionalBioAttributes": null,
112
"required": true,
113
"bioAttributes": null,
114
"requiredOn": [],
115
"subType": "preferredLang"
116
}
117
],
118
"layoutTemplate": null,
119
"preRegFetchRequired": false,
120
"additionalInfoRequestIdRequired": false,
121
"active": false
122
},
123
{
124
"order": 2,
125
"name": "BiometricDetails",
126
"label": {
127
"ara": "التفاصيل البيومترية",
128
"fra": "Détails biométriques",
129
"eng": "Biometric Details"
130
},
131
"caption": {
132
"ara": "التفاصيل البيومترية",
133
"fra": "Détails biométriques",
134
"eng": "Biometric Details"
135
},
136
"fields": [{
137
"id": "individualBiometrics",
138
"inputRequired": true,
139
"type": "biometricsType",
140
"minimum": 0,
141
"maximum": 0,
142
"description": "",
143
"label": {
144
"ara": "القياسات الحيوية الفردية",
145
"fra": "Applicant Biometrics",
146
"eng": "Applicant Biometrics"
147
},
148
"controlType": "biometrics",
149
"fieldType": "default",
150
"format": "none",
151
"validators": [],
152
"fieldCategory": "pvt",
153
"alignmentGroup": null,
154
"visible": null,
155
"contactType": null,
156
"group": "Biometrics",
157
"groupLabel": null,
158
"changeAction": null,
159
"transliterate": false,
160
"templateName": null,
161
"fieldLayout": null,
162
"locationHierarchy": null,
163
"conditionalBioAttributes": [{
164
"ageGroup": "INFANT",
165
"process": "ALL",
166
"validationExpr": "face",
167
"bioAttributes": [
168
"face"
169
]
170
}],
171
"required": true,
172
"bioAttributes": [
173
"leftEye",
174
"rightEye",
175
"rightIndex",
176
"rightLittle",
177
"rightRing",
178
"rightMiddle",
179
"leftIndex",
180
"leftLittle",
181
"leftRing",
182
"leftMiddle",
183
"leftThumb",
184
"rightThumb",
185
"face"
186
],
187
"requiredOn": [],
188
"subType": "applicant"
189
},
190
{
191
"id": "proofOfException",
192
"inputRequired": false,
193
"type": "documentType",
194
"minimum": 0,
195
"maximum": 0,
196
"description": "proofOfException",
197
"label": {
198
"ara": "إثبات الاستثناء",
199
"fra": "Exception Proof",
200
"eng": "Exception Proof"
201
},
202
"controlType": "fileupload",
203
"fieldType": "default",
204
"format": "none",
205
"validators": [],
206
"fieldCategory": "evidence",
207
"alignmentGroup": null,
208
"visible": null,
209
"contactType": null,
210
"group": "Documents",
211
"groupLabel": null,
212
"changeAction": null,
213
"transliterate": false,
214
"templateName": null,
215
"fieldLayout": null,
216
"locationHierarchy": null,
217
"conditionalBioAttributes": null,
218
"required": false,
219
"bioAttributes": null,
220
"requiredOn": [],
221
"subType": "POE"
222
}
223
],
224
"layoutTemplate": null,
225
"preRegFetchRequired": false,
226
"additionalInfoRequestIdRequired": true,
227
"active": false
228
}
229
],
230
"caption": {
231
"eng": "Biometric correction",
232
"ara": "التصحيح البيومتري",
233
"fra": "Correction biométrique"
234
},
235
"icon": "UINUpdate.png",
236
"isActive": true,
237
"autoSelectedGroups": null
238
}
Copied!