Документация
local schemas = {}
schemas.config = {}
schemas.workers = {}
schemas.workers._sortByProperty = {}
schemas.workers._sortByProperty.configOptions = {
	['func'] = {
		['type'] = 'string',
		--[[Имя обработчика. В конфиге указать: func = '_sortByProperty']]
	},
	['property'] = {
		['type'] = 'string',
		pattern = '^[Pp]%d+$',
		mandatory = true,
		--[[идентификатор свойства, по которому осуществляется сортировка.
			Например: property = 'P17']]
	},
	['propLabel'] = {
		['type'] = 'string',
		--[[метка свойства, вставляемая в имя категории. 
			Например: propLabel = 'страна'. Может быть пустой.]]
	},
	['ifEmptyPar'] = {
		['type'] = {'string', 'number'},
		valueIndex = 'ifEmptyVal',
		external = true,
		--[[имя параметра фрейма, содержащего значение, которое
			должно быть пустым. При непустом категория не ставится.]]
	},
	['ifNotEmptyPar'] = {
		['type'] = {'string', 'number'},
		valueIndex = 'ifNotEmptyVal',
		external = true,
		--[[имя параметра фрейма, содержащего значение, которое
			НЕ должно быть пустым. При непустом категория не ставится.]]
	},
	['ifPropContainsID'] = {
		['type'] = 'string', 
		pattern = '^[Pp]%d+$',
		--[[строка с идентификатором свойства, значение которого должно
			содержать значение, указанное в ifPropContainsVal. Если нет,
			категория не ставится]]
	},
	['ifPropContainsVal'] = {
		['type'] = 'string', 
		--[[строка со значением, (обычно 'Q...'), которое должно содержаться
			в свойстве, указанном в ifPropContainsID. Если не найдено,
			категория не ставится]]
	},
	['ifPropNotContainsID'] = {
		['type'] = 'string', 
		pattern = '^[Pp]%d+$',
		--[[строка с идентификатором свойства, значение которого НЕ должно
			содержать значение, указанное в ifPropNotContainsVal. Если оно 
			есть, категория не ставится]]
	},
	['ifPropNotContainsVal'] = {
		['type'] = 'string', 
		--[[строка со значением, (обычно 'Q...'), которое НЕ должно
			содержаться	в свойстве, указанном в ifPropNotContainsID. Если 
			такое найдено, категория не ставится]]
	},
	['ifEmptyProps'] = {
		['type'] = 'string',
		pattern = '^[Pp]%d+[Pp%d,%s]*',
		valueIndex = 'ifEmptyPropsVal',
		overrided = true -- 'ifEmptyPropsPar'
		--[[идентификаторы свойств, которые должны быть пустыми.
			При хотя бы одном непустом свойстве категория не ставится.
			Строка, разделённая запятыми.]]
	},
	['ifEmptyPropsPar'] = {
		['type'] = {'string', 'number'},
		valueIndex = 'ifEmptyPropsVal',
		valuePattern = '^[Pp]%d+[Pp%d,%s]*',
		external = true,
		-- overrides 'ifEmptyProps'
		--[[имя параметра, читаемого из фрейма, содержащего
			разделенные запятыми значения, перекрывающие ifEmptyProps]]
	},
	['ifNotEmptyProps'] = {
		['type'] = 'string',
		pattern = '^[Pp]%d+[Pp%d,%s]*',
		valueIndex = 'ifNotEmptyPropsVal',
		overrided = true -- 'ifNotEmptyPropsPar'
		--[[идентификаторы свойств, которые НЕ должны быть пустыми.
			При хотя бы одном непустом свойстве категория не ставится.
			Строка, разделённая запятыми.]]
	},
	['ifNotEmptyPropsPar'] = {
		['type'] = {'string', 'number'},
		valueIndex = 'ifNotEmptyPropsVal',
		valuePattern = '^[Pp]%d+[Pp%d,%s]*',
		external = true,
		-- overrides 'ifNotEmptyProps'
		--[[имя параметра, читаемого из фрейма, содержащего
			разделенные запятыми значения, перекрывающие ifNotEmptyProps]]
	},
	['propDefPar'] = {
		['type'] = {'string', 'number'},
		valueIndex = 'propDefVal',
		external = true,
		--[[имя параметра, читаемого из фрейма, содержащего 
			дефолтное значение свойства. Например: 'default-country']]
	},	
	['noValueLabel'] = {
		['type'] = 'string',
		default = '',
		--[[метка, вставляемая в имя категории в позиции "значение", если
			для свойства нет значения в ВД. Если пуст, то пустая строка]]
	},
	['noValuePropLabel'] = {
		['type'] = 'string',
		--[[метка, вставляемая в имя категории в позиции "ключ", если
			для свойства нет значения в ВД. Если пуст, то обычная]]
	},
	['noVaidCatLabel'] = {
		['type'] = 'string',
		default = '',
		--[[метка, вставляемая в имя категории в позиции "значение", если
			для свойства нет валидной категории. Если пуст, пустая строка]]
	},
	['noVaidCatPropLabel'] = {
		['type'] = 'string',
		--[[метка, вставляемая в имя категории в позиции "ключ", если
			для свойства нет валидной категории. Если пуст, то обычная]]
	},
	['noVaidCatSortByProp'] = {
		['type'] = 'boolean',
		default = true,
		--[[Если true, то при отсутствии валидной категории, к категориям
			добавляется ключ сортировки с именем метки. Если false, то нет]]
	},
	['thenByOnPropVal'] = {
		['type'] = 'string',
		default = nil,
		--[[строка со значением свойства, указанного в property, 
			при котором будет осуществляться рекурсивный вызов вложенной
			сортировки. Если пустой, то без ограничений.]]
	},
	['thenBy'] = {
		['type'] = 'table',
		default = nil,
		--[[таблица с параметрами для рекурсивного вызова. Параметры 
			внутри таблицы те же. 'func' внутри указывать не требуется.]]
	},
}

schemas.workers._sortByProperty.settingsTransform = {}

return schemas