/* Options: Date: 2026-10-16 00:21:01 SwiftVersion: 6.0 Version: 8.80 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: KpiV2DetailRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/v1/dashboard/kpiv2/detail", "POST,OPTIONS") public class KpiV2DetailRequest : IReturn, Codable { public typealias Return = KpiV2DetailResponse public var branchId:String? public var stationId:String? public var employeeId:String? public var fromDate:Date? public var toDate:Date? required public init(){} } public class KpiV2DetailResponse : Codable { public var responseStatus:ResponseStatus? public var detail:SvcDetail? required public init(){} } public class SvcDetail : Codable { public var kind:String? public var window:SvcWindowRow? public var clerk:SvcClerkRow? public var branchMetrics:SvcMetrics? public var perRowAverage:SvcAverage? public var sessions:[SvcSession] = [] public var services:[SvcServiceRow] = [] public var canSeeStaff:Bool? public var canSeeFinancial:Bool? public var canSeePay:Bool? required public init(){} } public class SvcMetrics : Codable { public var checkins:Int? public var walkins:Int? public var appts:Int? public var served:Int? public var noShows:Int? public var apptNoShows:Int? public var cancelledAtWindow:Int? public var abandoned:Int? public var called:Int? public var calledUp:Int? public var abandonRate:Double? public var noShowRate:Double? public var avgServiceSec:Double? public var medianServiceSec:Double? public var avgWaitSec:Double? public var maxWaitSec:Int? public var avgWalkUpSec:Double? public var expectedServiceSec:Double? public var signedSec:Int? public var servingSec:Int? public var pausedSec:Int? public var idleSec:Int? public var unstaffedSec:Int? public var utilization:Double? public var idleShare:Double? public var pausedShare:Double? public var sessions:Int? public var openDays:Int? public var feesEarned:Double? public var avgFee:Double? public var feesPerStaffedHour:Double? public var expectedFeesPerStaffedHour:Double? public var laborCost:Double? public var laborPartial:Bool? public var missingCostEmployeeIds:[String] = [] public var missingCost:[SvcNamedTime] = [] public var laborLocked:Bool? public var contribution:Double? public var lostFees:Double? public var lostNoShowFees:Double? public var mix:[String:Int] = [:] public var hourlyServed:[Int] = [] public var hourlyFees:[Double] = [] public var hourlyCost:[Double] = [] public var tints:[SvcTint] = [] required public init(){} } public class SvcServiceRow : Codable { public var lineId:String? public var name:String? public var completed:Int? public var avgServiceSec:Double? public var branchAvgServiceSec:Double? public var feesEarned:Double? public var feeCurrent:Double? public var feeMin:Double? public var feeMax:Double? public var feePerMinute:Double? public var branchFeePerMinute:Double? public var feeChanges:[SvcFeeChange] = [] required public init(){} } public class SvcWindowRow : Codable { public var stationId:String? public var name:String? public var clerks:[SvcNamedTime] = [] public var neverStaffed:Bool? public var lastStaffedUtc:Date? public var lastStaffedBy:String? public var metrics:SvcMetrics? required public init(){} } public class SvcClerkRow : Codable { public var employeeId:String? public var name:String? public var windows:[SvcNamedTime] = [] public var loadedRate:Double? public var rateSet:Bool? public var rateLocked:Bool? public var metrics:SvcMetrics? required public init(){} } public class SvcAverage : Codable { public var count:Int? public var served:Double? public var avgServiceSec:Double? public var medianServiceSec:Double? public var avgWaitSec:Double? public var utilization:Double? public var idleSec:Double? public var pausedSec:Double? public var noShows:Double? public var signedSec:Double? public var feesEarned:Double? public var feesPerStaffedHour:Double? public var laborCost:Double? public var contribution:Double? public var lostNoShowFees:Double? required public init(){} } public class SvcSession : Codable { public var sessionId:String? public var stationId:String? public var stationName:String? public var employeeId:String? public var employeeName:String? public var localIn:Date? public var localOut:Date? public var isOpen:Bool? public var endReason:String? public var pausedSec:Int? required public init(){} } public class SvcNamedTime : Codable { public var id:String? public var name:String? public var signedSec:Int? public var served:Int? required public init(){} } public class SvcTint : Codable { public var field:String? public var tone:String? public var reason:String? public var value:Double? public var reference:Double? public var branchValue:Double? required public init(){} } public class SvcFeeChange : Codable { public var locationId:String? public var onDate:Date? public var fromFee:Double? public var toFee:Double? required public init(){} }