import { ITicketAuditedEntity, TicketPropertyValue } from './Common'; import { TicketConditionOperator } from './Workflow'; import { TicketDataClassification, TicketMaskingStrategy } from './Security'; export declare enum TicketFieldType { SHORT_TEXT = "SHORT_TEXT", LONG_TEXT = "LONG_TEXT", INTEGER = "INTEGER", DECIMAL = "DECIMAL", MONEY = "MONEY", BOOLEAN = "BOOLEAN", DATE = "DATE", DATE_TIME = "DATE_TIME", SINGLE_SELECT = "SINGLE_SELECT", MULTI_SELECT = "MULTI_SELECT", USER = "USER", GROUP = "GROUP", CONTACT = "CONTACT", FILE = "FILE", URL = "URL", EMAIL = "EMAIL", PHONE = "PHONE", OBJECT = "OBJECT", OBJECT_LIST = "OBJECT_LIST" } export declare enum TicketFieldScopeType { TENANT = "TENANT", CATEGORY = "CATEGORY", REQUEST_TYPE = "REQUEST_TYPE" } export declare enum TicketFieldBehavior { EDITABLE = "EDITABLE", READ_ONLY = "READ_ONLY", HIDDEN = "HIDDEN" } export declare enum TicketFieldConditionAction { SHOW = "SHOW", HIDE = "HIDE", REQUIRE = "REQUIRE", READ_ONLY = "READ_ONLY" } export interface ITicketFieldOption { value: string; label: string; description?: string; color?: string; order: number; enabled: boolean; } export interface ITicketObjectField { nameKey: string; label: string; type: TicketFieldType; required: boolean; options?: ITicketFieldOption[]; objectFields?: ITicketObjectField[]; } export interface ITicketFieldValidation { min?: number; max?: number; minLength?: number; maxLength?: number; pattern?: string; decimalPlaces?: number; allowedMimeTypes?: string[]; maxFileSizeBytes?: number; maxItems?: number; unique?: boolean; } export interface ITicketFieldCondition { fieldNameKey: string; operator: TicketConditionOperator; expectedValue?: TicketPropertyValue; action: TicketFieldConditionAction; } /** Defines and validates one configurable ticket property. nameKey is immutable after creation. */ export interface ITicketFieldDefinition extends ITicketAuditedEntity { nameKey: string; label: string; description?: string; placeholder?: string; type: TicketFieldType; isSystem: boolean; enabled: boolean; behavior: TicketFieldBehavior; required: boolean; requiredOnCreate: boolean; requiredForStatusIds?: string[]; defaultValue?: TicketPropertyValue; options?: ITicketFieldOption[]; objectFields?: ITicketObjectField[]; validation?: ITicketFieldValidation; scopeType: TicketFieldScopeType; version: number; categoryIds?: string[]; requestTypeIds?: string[]; conditions?: ITicketFieldCondition[]; readRoleIds?: string[]; writeRoleIds?: string[]; classification?: TicketDataClassification; maskingStrategy?: TicketMaskingStrategy; searchable?: boolean; filterable?: boolean; sortable?: boolean; exportable?: boolean; } export interface ICreateTicketFieldDefinitionDto { nameKey: string; label: string; description?: string; placeholder?: string; type: TicketFieldType; required?: boolean; requiredOnCreate?: boolean; defaultValue?: TicketPropertyValue; options?: ITicketFieldOption[]; objectFields?: ITicketObjectField[]; validation?: ITicketFieldValidation; scopeType: TicketFieldScopeType; categoryIds?: string[]; requestTypeIds?: string[]; } export interface IUpdateTicketFieldDefinitionDto extends Partial> { expectedVersion?: number; enabled?: boolean; behavior?: TicketFieldBehavior; requiredForStatusIds?: string[]; conditions?: ITicketFieldCondition[]; readRoleIds?: string[]; writeRoleIds?: string[]; searchable?: boolean; filterable?: boolean; sortable?: boolean; exportable?: boolean; }