Kiosk Data Entry
Overview
The Clock In/Out screen is used by shift workers to clock in to and clock out from a workplace. This allows you to pay staff accurately for the number of hours worked.
The Clock In/Out screen has two buttons as follows:
- A "Clock In" button to start a shift (or end a break).
- A "Clock Out" button to end a shift (or start a break).
The text on the buttons can be changed by specifying the "in" and "out" options in the screen details. For example:
in=Start Shift, out=End Shift
The buttons can be further configured to allow you to collect data during your clock in and clock out events, using the following syntax:
in/out = <button>:<type>:<label>:<details>
where <button> is the button text, <type> is the type of data you want to capture , <label> is the name of the data field, and <details> are the type specific details.
Data Types
While all data types can be used at either Clock In or Clock Out, the following data types are typically used at Clock In:
- List. A data type of "list" is used to capture a selection from a list, such as a list of active projects.
- Dual. A data type of "dual" is used to capture values from two different lists, such as a project name and a work type.
- Nest. A data type of "nest" is used to capture values from two different lists, such as a project name and a work type, when the list of work types varies for each project.
- Tree. A data type of "tree" is used to capture values from a hierarchical list, such as a list of cost centers.
- Type. A data type of "type" is used to capture a selection from a list, where the list of options available differs by user type.
- Site. A data type of "site" is used to capture values from a hierarchical list where the top level of the hierarchy is the site name. For example, a site / department / position selection list.
- Api. A data type of "api" is used to capture a value from an external system, such as a blood alcohol reading from a breathalyser.
- Scan. A data type of "scan" is used to capture a value from a barcode or QR code.
And the following data types are typically used at Clock Out:
- Text. A data type of "text" is used to capture an alphanumeric string, such as a comment.
- Select. A data type of "select" is used to capture two-option attestations at the end of a shift.
- Break. A data type of "break" is used to capture paid rest breaks at the end of a shift.
- Sentiment. A data type of "sentiment" is used to capture employee sentiment at the end of a shift.
- Multi. A data type of "multi" is used to capture multiple selections from a list, such as shift conditions.
- Range. A data type of "range" is used to capture a numeric value, such as the number of boxes packed during a shift.
- Number. A data type of "number" is used to capture a numeric value, such as the number of miles travelled during a shift.
- Dollar. A data type of "dollar" is used to capture a dollar amount, such as tips, at the end of a shift.
- Flow. A data type of "flow" is used to capture multiple data items, one after the other, and can even support conditional logic. See the Tech Note Data Entry Flows for details.
Each of these data types is explained in more detail below.
List
A data type of "list" is used to capture a selection from a list, such as a list of active projects. The "in" or "out" option should be configured with the following colon separated components:
- The button label. eg: "Start Work"
- The data type. ie: "list"
- The label for the list attribute. eg: "Project".
- The list of options available (semi-colon separated).
- Optionally, a default value.
For example:
in=Start:list:Project:Airport;Tower One;Naval Base:Tower One
If you are synchronising your users with a system that supports global lists, you can specify your list values by providing the appropriate list number. For example:
in=Start:list:Project:$1
You can optionally filter the list to only include items that contain the current site name by specifying the "sitelist" option. For example:
in=Start Work:list:Position:$1, sitelist=true
Dual
A data type of "dual" is used to capture values from two different lists, such as a project name and a work type. The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Shift"
- The data type. ie: "dual"
- The label for the first list attribute. eg: "Project".
- The label for the second list attribute. eg: "Work Type".
- The semi-colon separated list values for the first list.
- The semi-colon separated list values for the second list.
- Optionally, a default for the first list.
- Optionally, a default for the second list.
For example:
in=Start Shift:dual:Project:Work Type:Airport;Tower One;Naval Base:Design;Construction;Maintenance:Airport
If you are synchronising your users with a system that supports global lists, you can specify your list values by providing the appropriate list numbers. For example:
in=Start:dual:Project:Work Type:$1:$2
You can optionally filter the first list to only include items that contain the current site name by specifying the "sitelist" option. For example:
in=Start Work:dual:Position:Time Entry Code:$1:$2,
sitelist=true

Nest
A data type of "nest" is used to capture values from two different lists, such as a project name and a work type, when the list of work types varies for each project. The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Shift"
- The data type. ie: "nest"
- The label for the first list attribute. eg: "Project".
- The semi-colon separated list values for the first list.
- Optionally, a default for the first list.
Then, for each value in the first list, you separtely define the values in the second list with the following colon separated components:
- The label for the attribute. eg: "Work Type"
- The semi-colon separated list values.
- Optionally, a default.
Each of the second lists is defined by the option "list1", "list2", etc, in the order of the options in the first list. For example:
in=Start Shift:nest:Project:Airport;Tower One;Naval Base,
list1=Work Type:Design;Construction;Maintenance,
list2=Work Type:Maintenance:Maintenance,
out=End Shift
Notice in this example that the Naval Base project does not have a corresponding list of Work Types, so it won't be necessary to select a Work Type for that project.
If you are synchronising your users with a system that supports global lists, and your list is hierarchical, you can specify your list values by providing the appropriate list number. For example:
in=Start Shift:nest:Work Type:$4

Tree
A data type of "tree" is used to capture values from a hierarchical list, such as a list of cost centers. Each level of the hierarchy is selected independently (one after the other), and searching is supported when a level has a large number of options. The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Work"
- The data type. ie: "tree"
- The semi-colon separated labels for each level in the hierarchy. eg: "Project;Work Type".
- The list number. eg: "$1".
- Optionally, the default value that should be auto selected. eg: "Maintenance".
- Optionally, the keyboard type (for searching). eg: "numeric".
- Optionally, if you want the parent of the select item recorded with the event.
For example, if your tree has two levels representing a Project and a Work Type:
in=Start Work:tree:Project;Work Type:$1
And if you wanted to default the Work Type and capture the Project:
in=Start Work:tree:Project;Work Type:$1:Maintenance::true
Type
A data type of "type" is used to capture a selection from a list, such as a list of work types, where the list of available options varies by user type.
Local Lists:
The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Work"
- The data type. ie: "type"
- The default label for the attribute (eg: Work Type).
- The default list of options.
For each user type that you want to have a different list of options, you can specify:
- The label for the attribute (eg: Work Type).
- The list of options available (semi-colon separated).
- Optionally, the default value.
For example:
in=Start Work:type:Work Type:General,
Maintenance=Work Type:Fencing;Buildings;Machinery,
Farm Hand=Work Type:Ploughing;Planting;Picking;Other
In this example, users with a user type of Maintenance will get to select from: Fencing, Buildings, or Machinery; users with a user type of Farm Hand will get to select from: Ploughing, Planting, Picking, or Other, and users with any other user type will only have one option to select from: General.
Global Lists:
A data type of "type" can be used when a hierarchical selection list is maintained in a workforce management platform, and the top level of the hierarchy is the type. NoahFace filters the selection list so that only the options that correspond to the user's type are displayed, simplifying the user experience. If there is only one option available for the type, it will be automatically selected.
The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Work"
- The data type. ie: "type"
- The label for the second tier of the list. eg: "Work Type". If you have three tiers in your list, you can semi-colon separate the labels. eg: "Department;Position".
- The global list identifier. eg: $1.
- Optionally, whether you want users to be able to clock in if no options are available for their type. eg: false.
For example:
in=Clock In:type:Department;Position:$1:false

Site
A data type of "site" is intended to be used when a hierarchical selection list is maintained in a workforce management platform, and the top level of the hierarchy is the site. NoahFace filters the selection list so that only the options that correspond to the current site are displayed, simplifying the user experience. If there is only one option available to a user at the site, it will be automatically selected.
The "in" option should be configured with the following colon separated components:
- The button label. eg: "Clock In"
- The data type. ie: "site"
- The label for the second tier of the list. eg: "Department". If you have three tiers in your list, you can semi-colon separate the labels. eg: "Department;Position".
- The global list identifier. eg: $1.
- Optionally, whether you want users to be able to clock in if no options are available for them at this site. eg: false.
For example:
in=Clock In:site:Department;Position:$1:false
API
A data type of "api" is used to capture a value from an external system, such as a blood alcohol reading from a breathalyser. The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Work"
- The data type. ie: "api"
- The title. eg: "Breathalyser".
- The message.
- The mode, which can be either:
- auto. Automatically record events.
- man. Manually record events.
- deny. Manually record successful events only.
- The timeout in seconds.
- The URL to call.
Your URL will be passed query parameters containing information on the user (eg: firstname, lastname, etc) and the environment (eg: org, site, etc), and is expected to return an HTTP status of either:
- 200. Success.
- 403. Permission Denied.
- 500. Internal Error.
Your response body is expected to contain your value (eg: the blood alcohol reading). If you return an error, you can optionally return additional details by setting the field X-NOAHFACE-MESSAGE in your response header.
For example:
in=Start Work:api:Breathalyser:To start work please conduct a breath test using the adjacent breathalyser.:deny:120:http://192.254.1.100/breathtest, out=Stop Work

Scan
A data type of "scan" is used to capture a value from a barcode or QR code. The "in" option should be configured with the following colon separated components:
- The button label. eg: "Start Job"
- The data type. ie: "scan"
- The title. eg: "Job Number".
- The message. eg: "Please scan your job sheet.".
Barcodes must be large and clear to be read by the limited resolution of the front facing iPad camera. The following types of barcode are supported:
- Code 39
- Interleaved 2 of 5
- QR Codes
Only alpha and numeric values are supported, up to 40 characters in length.
For example:
in=Start Job:scan:Job Number:Please scan your job sheet., out=Complete
Text
A data type of "text" is used to capture an alphanumeric string, such as comments at the end of shifts. The "in" or "out" option should be configured with the following colon separated components:
- The button label. eg: "End Work"
- The data type. ie: "text"
- The label for the text attribute. eg: "Comment".
- Optionally, the minimum length, which defaults to 0.
- Optionally, the maximum length.
- Optionally, a keyboard type (eg: numeric, email-address).
- Optionally, a validation rule.
Validation rules can be expressed as either:
- A regular expression. eg: [0-9]*
- A global list. eg: $1
For example, to capture comments at the end of a shift, use:
out=End Shift:text:Comments
And to capture 4 to 6 character job numbers using a barcode gun, validated against a global list of job numbers, use:
in=Start Job:text:Job Number:4:6:numeric:$1
Select
A data type of "select" is used to capture two-option attestations at the end of a shift. The "out" option should be configured with the following colon separated components:
- The button label. eg: "End Shift"
- The data type. ie: "select"
- The label for the select window. eg: "Shift Confirmation".
- The instructions for the employee.
- The notes behaviour, either: "required", "optional", "negative" (ie: required if negative), or "hidden".
- The notes label. eg: "Comments", "Justification", "Notes".
- One or two option attestations (see example below).
- Optionally whether the attestations should default to be positive ("yes", "true"), negative ("no", "false"), or unselected ("none").
For example:
out=End Shift:select:Shift Confirmation:Please confirm that you worked your standard hours and you took your required rest breaks. Otherwise please provide a justification.:negative:Justification:Standard Hours:Extra Time Worked:Rest Breaks Taken:Breaks Not Taken:none
Break
A data type of "break" is used to capture the times of paid rest breaks at the end of a shift. The "out" option should be configured with the following colon separated components:
- The button label. eg: "End Shift"
- The data type. ie: "break"
- Whether to default breaks as taken ie: true/false.
- The break duration in minutes (eg: 10 = 10 mins).
- The time after a 1st break is due in hours (eg: 4 = 4 hours).
- The default time after the 1st break is taken (eg: 2 = 2 hours).
- The time after a 2nd break is due in hours (eg: 8 = 8 hours).
- The default time after the 2nd break is taken (eg: 6 = 6 hours).
For example:
out=End Shift:break:true:10:4:2:8:6
Sentiment
A data type of "sentiment" is used to capture employee sentiment at the end of a shift. The "out" option should be configured with the following colon separated components:
- The button label. eg: "Clock Out"
- The data type. ie: "sentiment"
- The label for the sentiment window. eg: "Clock Out".
- Optionally, the comments behaviour, either: "required", "optional", "negative" (ie: required if negative), or "hidden".
- Optionally, the sentiment question.
- Optionally, the comments prompt.
For example:
out=Clock Out:sentiment:Clock Out:negative
Multi
A data type of "multi" is used to capture multiple selections from a list, such as shift conditions which drive additional payments. The "in" or "out" option should be configured with the following colon separated components:
- The button label. eg: "End Shift"
- The data type. ie: "multi"
- The label for the list attribute. eg: "Conditions".
- The semi-colon separated list values.
- Optionally, the minimum number of selections, which defaults to 0.
For example:
out=Finish:multi:Conditions:Hot;Cold;Rain; Snow;Windy:1
Range
A data type of "range" is used to capture a numeric value, such as the number of boxes packed during a shift, to drive piecework payments. The "out" option should be configured with the following colon separated components:
- The button label. eg: "Done"
- The data type. ie: "range"
- The label for the attribute. eg: "Boxes".
- The minimum value.
- The maximum value.
- Optionally, the increment between values.
- Optionally, the default value.
For example:
out=Done:range:Boxes:1:100:1:20
Number
A data type of "number" is used to capture a numeric amount, such as the number of miles travelled during a shift, to drive allowances. The "in" or "out" option should be configured with the following colon separated components:
- The button label. eg: "End Shift"
- The data type. ie: "number"
- The label for the dollar attribute. eg: "Miles".
- Optionally, the minimum number of characters (default 0).
- Optionally, the maximum number of characters (default 5).
- Optionally, a validation rule.
Validation rules can be expressed as either:
- A regular expression. eg: [0-9]*
- A global list. eg: $1
For example, to capture the number of miles travelled during a shift, use:
out=End Shift:number:Miles:0:10
And to capture 4 to 6 character job numbers using a barcode gun, validated against a global list of job numbers, use:
in=Start Job:number:Job Number:4:6:$1
Dollar
A data type of "dollar" is used to capture a dollar amount, such as tips, at the end of a shift. The "out" option should be configured with the following colon separated components:
- The button label. eg: "Clock Out"
- The data type. ie: "dollar"
- The label for the dollar attribute. eg: "Tips".
- Optionally, the minimum number of characters (default 0).
- Optionally, the maximum number of characters (default 5).
- Optionally, whether cents should be allowed ie: true or false.
For example:
out=Clock Out:dollar:Tips:0:10:true
You can format your event data (for Clock In, Start Task, and Present events) by specifying the "format" option in your screen details. A number of examples are shown below:
Fixed Text
If you want to capture the words "Compliance Training" in the event data with each event, specify:
format=Compliance Training
Device Name
If you want to capture the device (access point) name in the event data with each event, specify:
format=#DEVICE
Device Identifier
If you want to capture the device (access point) identifier in the event data with each event, specify:
format=#DEVID
Site Name
If you want to capture the site name in the event data for each event, specify:
format=#SITE
Combination
If you want to combine together the site name, the device name, and the current event data, separating these by slashes, specify:
format=#SITE / #DEVICE / #DATA
Swapping Data
If you want to swap the order of two data items, specify:
format=#DATA2;#DATA1