# Configuring Your SelfServ SCO

Welcome to customization heaven.


Your default configuration module, found under JSM | SelfCheckout V3 -> SystemConfig, is structured as follows:

--[[ 
	           _______ __  ___
	          / / ___//  |/  /
	     __  / /\__ \/ /|_/ / 
	    / /_/ /___/ / /  / /  
	    \____//____/_/  /_/
 	      Self Checkout v3
 	      © Whitehill Group
 	      
System Wide Configuration

Configure lane specific settings within each terminal.
Configure accounts in the "Accounts" script.

]]--
local Settings = { 
	-----------------------------------------------------------------
	["UITheme"] = "Default", 
	["CustomThemeLogo"] = nil,
	-----------------------------------------------------------------
	["Currency"] = "£",
	["JSMATMLocation"] = workspace["JSM | ATM V3"],
	["ContactlessLimit"] = 100,
	["InsertCardProximityPrompt"] = false, 
	["PromptForBags"] = true,
	["CarrierBagCharge"] = 0.05,
	-----------------------------------------------------------------
	["OperatorID"] = {
		["Enabled"] = false,
		["ShowPlayerWhenLoggedIn"] = true,
	},
	-----------------------------------------------------------------
	["Maintenance"] = { -- 
		["MaintenanceHatch-Users"] = { 
			112672616, -- Example (AlexG_1337)
			199830788, -- Example (Coco_Beagle)
			9109291923, -- Example (roaxcean)
		},
		["MaintenanceHatch-Groups"] = {
			["5150453"] = {255, 254, 253}, -- Example (Whitehill)
		},
		["DisableMaintenanceHatchWhitelist"] = false,
	},
	-----------------------------------------------------------------
	["ReceiptCustomisation"] = {
		["Enabled"] = true,
		["Heading"] = "JSM Self Checkout",
		["Subheading"] = "Customer Receipt",
		["Footer"] = "Thank you for shopping with us!",
		["PaperConsumption"] = 100,
	},
	-----------------------------------------------------------------
	["AutomaticIntegrations"] = {
		["Whitehill_RankCache"] = nil,
		["Applegate_VoCoVo"] = false,
		["Kybo_Walvo"] = true,
		
		["AllowPayWithPhoneAPI"] = false,
	},
	-----------------------------------------------------------------
	["InGameStaff"] = {
		["Enabled"] = false,
		["StaffUsers"] = { 
			112672616, -- Example (AlexG_1337)
			199830788, -- Example (Coco_Beagle)
			9109291923, -- Example (roaxcean)
		},
		["StaffGroups"] = { 
			["5150453"] = {255, 254, 253}, -- Example (Whitehill)
		},
		["StaffThreshold"] = 3,
	},
	-----------------------------------------------------------------
	["TransactionCompletion"] = {
		["DisableEAS"] = true,
		["AdditionalRemoval"] = { 
			"RandomEventTest",
		},
	},
	-----------------------------------------------------------------
	["MiscUISettings"] = {
		["StartCardOnlyMessage"] = "<b>Card Only</b>  No Coins/Notes Accepted",
		["StartCashOnlyMessage"] = "<b>Cash Only</b>  No Debit/Credit Cards Accepted",
		["StartNormMessage"] = "<b>Card</b> and <b>Cash</b> Payments Accepted",
		["TakeItemsMessage"] = "Please take your items",
		["RememberMessage"] = "Don't forget your receipt",
		["RememberMessageCash"] = "Don't forget your change & receipt",
		["FinishMessage"] = "Thanks for using this JSM Self Checkout",
		["PayButtonTotal"] = false,
		["DefaultUIAnimations"] = true,
	},
	-----------------------------------------------------------------
	["RemoteAttendantSettings"] = {
		-- Not Functional
	},
	-----------------------------------------------------------------
	["Scan&ShopSettings"] = {
		["TerminalSettings"] = {
			["IdleMessage"] = "Welcome to JSM Scan & Shop.",
			["WelcomeMessage"] = "Welcome to JSM Scan & Shop.",
			["AutoRelease"] = true,
			["ReleaseTimeout"] = 10,
			["LowHandsetWarning"] = 5,
			["ShowBoot"] = false, 
		},
		["HandsetSettings"] = {
			["WelcomeScreen"] = true,
			["ShowCurrency"] = true, 
			["ItemLimit"] = 200,
			["FinishMessage"] = "Thanks for using JSM Scan & Shop.", 
		},
		["CheckoutSettings"] = {
			["BarcodeType"] = 2,
		},
		["AutoReturn"] = true, 		
		["AllowExternal"] = false,
	},
	-----------------------------------------------------------------
	["HotkeySettings"] = {
		-- Not Functional
	},
	-----------------------------------------------------------------
}
return Settings

# Syntax

# UITheme

UI Preset to load. Set to Default for JSM v3 UI, any other value will load UI from JSM | UI Template if found in ServerStorage.


Example:

["UITheme"] = "SomeCustomUI"

If set to nil, loads default ui associated with theme, either JSM or the theme creator, or loads the image id provided.


Example:

["CustomThemeLogo"] = "123456789"

# Currency

The specified character will be used as a prefix to all monetary values wherever a price is indicated.


Example:

["Currency"] = "€"

# JSMATMLocation

Where the JSM ATM v3 Folder is located. Set to nil if not using.


Example:

["JSMATMLocation"] = workspace["JSM | ATM V3"]

# ContactlessLimit

Contactless payment upper limit. Transactions worth more than the set value won't be able to be paid via contactless.


Example:

["ContactlessLimit"] = 250

# InsertCardProximityPrompt

Whether to insert a Proximity Prompt into the card reader instead of a Click Detector.


Example:

["InsertCardProximityPrompt"] = true

# PromptForBags

Whether to prompt for shopping bags before going to the payment screen.


Example:

["PromptForBags"] = true

# CarrierBagCharge

Price per one shopping bag. (If enabled.)


Example:

["CarrierBagCharge"] = 0.01

# OperatorID

# Enabled

Whether pins should be enabled.


Example:

["Enabled"] = false

# ShowPlayerWhenLoggedIn

Whether to show the player name instead of account name. If logged in with operator barcode player will be shown instead of account name, in all other situations account name is shown.


Example:

["ShowPlayerWhenLoggedIn"] = true

# Example Section:

["OperatorID"] = {
	["Enabled"] = false,
	["ShowPlayerWhenLoggedIn"] = true,
}

# Maintenance

# MaintenanceHatch-Users

A table of Roblox User IDs that are whitelisted to open the Maintenance Hatch.


Example:

["MaintenanceHatch-Users"] = { 
	112672616, -- Example (AlexG_1337)
	199830788, -- Example (Coco_Beagle)
	9109291923, -- Example (roaxcean)
}

# MaintenanceHatch-Groups

A dictionary of Roblox Community IDs holding Rank IDs that are whitelisted to open the Maintenance Hatch.


Example:

["MaintenanceHatch-Groups"] = {
	["5150453"] = {255, 254, 253}, -- Example (Whitehill)
}

# DisableMaintenanceHatchWhitelist

Whether to disable the Maintenance Hatch whitelist.


Example:

["DisableMaintenanceHatchWhitelist"] = false

# Example Section:

["Maintenance"] = {
	["MaintenanceHatch-Users"] = { 
		112672616, -- Example (AlexG_1337)
		199830788, -- Example (Coco_Beagle)
		9109291923, -- Example (roaxcean)
	},
	["MaintenanceHatch-Groups"] = {
		["5150453"] = {255, 254, 253}, -- Example (Whitehill)
	},
	["DisableMaintenanceHatchWhitelist"] = false,
}

# ReceiptCustomisation

# Enabled

Whether to enable receipt printing or not.


Example:

["Enabled"] = true

# Heading

Top text on the receipt.


Example:

["Heading"] = "JSM Self Checkout"

# Subheading

Subtitle below the heading text.


Example:

["Subheading"] = "Customer Receipt"

# Footer

The bottom-most text.


Example:

["Footer"] = "Thank you for shopping with us!"

# PaperConsumption

Consumption of printer paper.

  • 0 - No consumption.
  • >0 - How many receipts per roll.

Example:

["PaperConsumption"] = 100

# Example Section:

["ReceiptCustomisation"] = {
	["Enabled"] = true,
	["Heading"] = "JSM Self Checkout",
    ["Subheading"] = "Customer Receipt",
	["Footer"] = "Thank you for shopping with us!",
	["PaperConsumption"] = 100,
}

# AutomaticIntegrations

# Whitehill_RankCache

Location of the Whitehill RankCache library (if installed), set to nil if not being used.


Example:

["Whitehill_RankCache"] = nil

# Applegate_VoCoVo

Whether using the Applegate VoCoVo for Self Checkout notifications.


Example:

["Applegate_VoCoVo"] = false

# Kybo_Walvo

Whether using the Kybo Walvo for Self Checkout notifications.


Example:

["Kybo_Walvo"] = true

# AllowPayWithPhoneAPI

Integration with external payment devices.


Example:

["AllowPayWithPhoneAPI"] = false

# Example Section:

["AutomaticIntegrations"] = {
	["Whitehill_RankCache"] = nil,
	["Applegate_VoCoVo"] = false,
	["Kybo_Walvo"] = true,
	
	["AllowPayWithPhoneAPI"] = false,
}

# InGameStaff

# Enabled

Whether the in-game staff availability system is active.


Example:

["Enabled"] = false

# StaffUsers

A table of Roblox User IDs considered as staff for intervention handling.


Example:

["StaffUsers"] = {
	112672616, -- Example (AlexG_1337)
	199830788, -- Example (Coco_Beagle)
	9109291923, -- Example (roaxcean)
}

# StaffGroups

A dictionary mapping group IDs to one or more staff ranks.


Example:

["StaffGroups"] = {
    ["5150453"] = {255, 254, 253}, -- Example (Whitehill)
}

# StaffThreshold

Minimum number of staff members required in-game to support intervention workflows.


Example:

["StaffThreshold"] = 3

# Example Section:

["InGameStaff"] = {
	["Enabled"] = false,
	["StaffUsers"] = { 
		112672616, -- Example (AlexG_1337)
		199830788, -- Example (Coco_Beagle)
		9109291923, -- Example (roaxcean)
	},
	["StaffGroups"] = { 
    	["5150453"] = {255, 254, 253}, -- Example (Whitehill)
	},
	["StaffThreshold"] = 3,
}

# TransactionCompletion

# DisableEAS

Determines whether EAS tags should be automatically deactivated on tools when a transaction is completed.


Example:

["DisableEAS"] = true

# AdditionalRemoval

A list of instance names to remove from the tool's Handle upon transaction finalization.


Example:

["AdditionalRemoval"] = {
    "RandomEventTest",
}

# Example Section:

["TransactionCompletion"] = {
	["DisableEAS"] = true,
	["AdditionalRemoval"] = {
		"RandomEventTest",
	},
}

# MiscUISettings

# StartCardOnlyMessage

Displayed on the welcome screen when the lane is configured for card-only transactions.


# StartCashOnlyMessage

Displayed when the lane only accepts cash.


# StartNormMessage

Displayed in standard operation (cash + card).


# TakeItemsMessage

Message shown on the final screen reminding customers to take their items.


# RememberMessage

Reminder to take receipts in card-only and mixed-payment modes.


# RememberMessageCash

Reminder to take both change and receipt when cash was used.


# FinishMessage

Finish message displayed when the transaction completes.


# PayButtonTotal

If true, the Pay button shows the total transaction price. If false, it displays "Finish & Pay".


# DefaultUIAnimations

When enabled, some parts of the UI will be animated.

# Example Section:

["MiscUISettings"] = {
	["StartCardOnlyMessage"] = "<b>Card Only</b>  No Coins/Notes Accepted",
	["StartCashOnlyMessage"] = "<b>Cash Only</b>  No Debit/Credit Cards Accepted",
	["StartNormMessage"] = "<b>Card</b> and <b>Cash</b> Payments Accepted",
	["TakeItemsMessage"] = "Please take your items",
	["RememberMessage"] = "Don't forget your receipt",
	["RememberMessageCash"] = "Don't forget your change & receipt",
	["FinishMessage"] = "Thanks for using this JSM Self Checkout",
	["PayButtonTotal"] = false,
	["DefaultUIAnimations"] = true,
}

# RemoteAttendantSettings


# Scan&ShopSettings

# IdleMessage

Shown when the terminal is idle.


# WelcomeMessage

Displayed when a customer begins a Scan & Shop session.


# AutoRelease

If true, handsets are dispensed automatically. If false, the customer must manually remove one.


# ReleaseTimeout

Time (seconds) the system waits before retracting the handset if not taken.


# LowHandsetWarning

Threshold of remaining handsets before a low-inventory warning is triggered.


# ShowBoot

If true, the terminal displays a boot animation on startup.


# WelcomeScreen

Determines whether a welcome screen appears when the handset initializes.


# ShowCurrency

Shows or hides the currency symbol on handset UI.


# ItemLimit

Maximum number of scannable items before the handset automatically clears excess entries.


# FinishMessage

Displayed when the handset transfers the transaction to the checkout.


# BarcodeType

Controls how barcodes are handled at checkout:

  • 0 — No barcode; S&S disabled
  • 1 — Physical barcode
  • 2 — Physical barcode + UI message
  • 3 — Physical barcode + UI message (S&S only)
  • 4 — Digital barcode
  • 5 — Digital barcode (S&S only)

# AutoReturn

If enabled, handsets automatically return to the terminal after transfer.

# AllowExternal

Whether third-party handsets may connect. Disabled by default for security.


# Example Section:

["Scan&ShopSettings"] = {
	["TerminalSettings"] = {
		["IdleMessage"] = "Welcome to JSM Scan & Shop.",
		["WelcomeMessage"] = "Welcome to JSM Scan & Shop.",
		["AutoRelease"] = true,
		["ReleaseTimeout"] = 10,
		["LowHandsetWarning"] = 5,
		["ShowBoot"] = false, 
	},
	["HandsetSettings"] = {
		["WelcomeScreen"] = true,
		["ShowCurrency"] = true, 
		["ItemLimit"] = 200,
		["FinishMessage"] = "Thanks for using JSM Scan & Shop.", 
	},
	["CheckoutSettings"] = {
		["BarcodeType"] = 2,
	},
	["AutoReturn"] = true, 		
	["AllowExternal"] = false,
}

# HotkeySettings