/* Options: Date: 2025-07-18 00:34:58 SwiftVersion: 5.0 Version: 6.40 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://hcbtas-q-albamfs-api.azurewebsites.net //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: ProjectionReq.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/members", "PUT") public class Member : Member, IReturn { public typealias Return = Member public var id:String? public var email:String? public var employeeGuidString:String? public var ignoreGender:Bool? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case id case email case employeeGuidString case ignoreGender } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) id = try container.decodeIfPresent(String.self, forKey: .id) email = try container.decodeIfPresent(String.self, forKey: .email) employeeGuidString = try container.decodeIfPresent(String.self, forKey: .employeeGuidString) ignoreGender = try container.decodeIfPresent(Bool.self, forKey: .ignoreGender) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if id != nil { try container.encode(id, forKey: .id) } if email != nil { try container.encode(email, forKey: .email) } if employeeGuidString != nil { try container.encode(employeeGuidString, forKey: .employeeGuidString) } if ignoreGender != nil { try container.encode(ignoreGender, forKey: .ignoreGender) } } } // @Route("/projection") public class ProjectionReq : IReturn, Codable { public typealias Return = AlbaProjection public var context:SiteContext? public var member:Member? required public init(){} } public class AlbaProjection : Codable { public var stochastic:StochasticProjectionDto? public var deterministic:MemberProjectionDto? public var member:Member? public var diagnostics:AlbaDiagnostics? public var parameterBag:[String:Object] = [:] required public init(){} } public enum Gender : String, Codable { case Female case Male case Other } public class Member : Entity, IProjectable { public var userId:String? public var systemId:String? public var schemeCode:String? public var sessionId:String? public var clientId:String? public var clientCode:String? public var isDefault:Bool? public var groupId:String? public var groupNameUpper:String? public var appName:String? public var appNameUpper:String? public var key:String? public var keyUpper:String? public var country:String? public var locale:String? public var ccy:String? public var cdy:String? public var status:String? public var statusCode:String? public var category:String? public var scheme:String? public var primarySalary:String? public var email:String? public var employer:Employer? public var roles:Roles? public var asAt:Date? public var calcDate:Date? public var nextEOFY:Date? public var periodToNextEOFY:Double? public var year:Int? public var hasPartner:Bool? public var includePartner:Bool? public var includePartnerInCalc:Bool? public var homeOwner:Bool? public var targetAge:Int? public var targetTime:Int? public var targetIncomeR:Double? public var targetIncomeRFreq:Double? public var targetIncomeRAnnual:Double? public var targetP:Double? public var includeSS:Bool? public var firstName:String? public var lastName:String? public var gender:Gender? public var dob:Date? public var salary:Double? public var people:[Person] = [] public var assets:[Asset] = [] public var includeAnnuities:Bool? public var annuities:[Annuity] = [] public var spending:Spending? public var investmentProperties:[InvestmentProperty] = [] public var incomeVectors:[String:[Double]] = [:] public var config:AssumptionsConfig? public var indexation:[RateSpec] = [] public var annuityDisc:[RateSpec] = [] public var indexationRates:[String:[Double]] = [:] public var annuityDiscRates:[String:[Double]] = [:] public var balance:Double? public var planSomeValue:String? public var flag1:Bool? public var flag2:Bool? public var isFriendly:Bool? public var financingOption:String? public var totalYears:Int? public var totalLoopYears:Int? public var age:Double? public var ageR:Double? public var intAge:Int? public var indexType:String? public var indexTypePre:String? public var indexTypePost:String? public var deflationType:String? public var custom:[String:String] = [:] public var countryCalcConfig:CountryCalculatorConfiguration? public var summary:MemberSummary? public var lastModified:Date? public var isReturningUser:Bool? public var clientCountryConfigCacheKey:String? public var personalAssets:Double? public var resultsSummary:Summary? public var totalContribution:TotalContribution? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case userId case systemId case schemeCode case sessionId case clientId case clientCode case isDefault case groupId case groupNameUpper case appName case appNameUpper case key case keyUpper case country case locale case ccy case cdy case status case statusCode case category case scheme case primarySalary case email case employer case roles case asAt case calcDate case nextEOFY case periodToNextEOFY case year case hasPartner case includePartner case includePartnerInCalc case homeOwner case targetAge case targetTime case targetIncomeR case targetIncomeRFreq case targetIncomeRAnnual case targetP case includeSS case firstName case lastName case gender case dob case salary case people case assets case includeAnnuities case annuities case spending case investmentProperties case incomeVectors case config case indexation case annuityDisc case indexationRates case annuityDiscRates case balance case planSomeValue case flag1 case flag2 case isFriendly case financingOption case totalYears case totalLoopYears case age case ageR case intAge case indexType case indexTypePre case indexTypePost case deflationType case custom case countryCalcConfig case summary case lastModified case isReturningUser case clientCountryConfigCacheKey case personalAssets case resultsSummary case totalContribution } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) userId = try container.decodeIfPresent(String.self, forKey: .userId) systemId = try container.decodeIfPresent(String.self, forKey: .systemId) schemeCode = try container.decodeIfPresent(String.self, forKey: .schemeCode) sessionId = try container.decodeIfPresent(String.self, forKey: .sessionId) clientId = try container.decodeIfPresent(String.self, forKey: .clientId) clientCode = try container.decodeIfPresent(String.self, forKey: .clientCode) isDefault = try container.decodeIfPresent(Bool.self, forKey: .isDefault) groupId = try container.decodeIfPresent(String.self, forKey: .groupId) groupNameUpper = try container.decodeIfPresent(String.self, forKey: .groupNameUpper) appName = try container.decodeIfPresent(String.self, forKey: .appName) appNameUpper = try container.decodeIfPresent(String.self, forKey: .appNameUpper) key = try container.decodeIfPresent(String.self, forKey: .key) keyUpper = try container.decodeIfPresent(String.self, forKey: .keyUpper) country = try container.decodeIfPresent(String.self, forKey: .country) locale = try container.decodeIfPresent(String.self, forKey: .locale) ccy = try container.decodeIfPresent(String.self, forKey: .ccy) cdy = try container.decodeIfPresent(String.self, forKey: .cdy) status = try container.decodeIfPresent(String.self, forKey: .status) statusCode = try container.decodeIfPresent(String.self, forKey: .statusCode) category = try container.decodeIfPresent(String.self, forKey: .category) scheme = try container.decodeIfPresent(String.self, forKey: .scheme) primarySalary = try container.decodeIfPresent(String.self, forKey: .primarySalary) email = try container.decodeIfPresent(String.self, forKey: .email) employer = try container.decodeIfPresent(Employer.self, forKey: .employer) roles = try container.decodeIfPresent(Roles.self, forKey: .roles) asAt = try container.decodeIfPresent(Date.self, forKey: .asAt) calcDate = try container.decodeIfPresent(Date.self, forKey: .calcDate) nextEOFY = try container.decodeIfPresent(Date.self, forKey: .nextEOFY) periodToNextEOFY = try container.decodeIfPresent(Double.self, forKey: .periodToNextEOFY) year = try container.decodeIfPresent(Int.self, forKey: .year) hasPartner = try container.decodeIfPresent(Bool.self, forKey: .hasPartner) includePartner = try container.decodeIfPresent(Bool.self, forKey: .includePartner) includePartnerInCalc = try container.decodeIfPresent(Bool.self, forKey: .includePartnerInCalc) homeOwner = try container.decodeIfPresent(Bool.self, forKey: .homeOwner) targetAge = try container.decodeIfPresent(Int.self, forKey: .targetAge) targetTime = try container.decodeIfPresent(Int.self, forKey: .targetTime) targetIncomeR = try container.decodeIfPresent(Double.self, forKey: .targetIncomeR) targetIncomeRFreq = try container.decodeIfPresent(Double.self, forKey: .targetIncomeRFreq) targetIncomeRAnnual = try container.decodeIfPresent(Double.self, forKey: .targetIncomeRAnnual) targetP = try container.decodeIfPresent(Double.self, forKey: .targetP) includeSS = try container.decodeIfPresent(Bool.self, forKey: .includeSS) firstName = try container.decodeIfPresent(String.self, forKey: .firstName) lastName = try container.decodeIfPresent(String.self, forKey: .lastName) gender = try container.decodeIfPresent(Gender.self, forKey: .gender) dob = try container.decodeIfPresent(Date.self, forKey: .dob) salary = try container.decodeIfPresent(Double.self, forKey: .salary) people = try container.decodeIfPresent([Person].self, forKey: .people) ?? [] assets = try container.decodeIfPresent([Asset].self, forKey: .assets) ?? [] includeAnnuities = try container.decodeIfPresent(Bool.self, forKey: .includeAnnuities) annuities = try container.decodeIfPresent([Annuity].self, forKey: .annuities) ?? [] spending = try container.decodeIfPresent(Spending.self, forKey: .spending) investmentProperties = try container.decodeIfPresent([InvestmentProperty].self, forKey: .investmentProperties) ?? [] incomeVectors = try container.decodeIfPresent([String:[Double]].self, forKey: .incomeVectors) ?? [:] config = try container.decodeIfPresent(AssumptionsConfig.self, forKey: .config) indexation = try container.decodeIfPresent([RateSpec].self, forKey: .indexation) ?? [] annuityDisc = try container.decodeIfPresent([RateSpec].self, forKey: .annuityDisc) ?? [] indexationRates = try container.decodeIfPresent([String:[Double]].self, forKey: .indexationRates) ?? [:] annuityDiscRates = try container.decodeIfPresent([String:[Double]].self, forKey: .annuityDiscRates) ?? [:] balance = try container.decodeIfPresent(Double.self, forKey: .balance) planSomeValue = try container.decodeIfPresent(String.self, forKey: .planSomeValue) flag1 = try container.decodeIfPresent(Bool.self, forKey: .flag1) flag2 = try container.decodeIfPresent(Bool.self, forKey: .flag2) isFriendly = try container.decodeIfPresent(Bool.self, forKey: .isFriendly) financingOption = try container.decodeIfPresent(String.self, forKey: .financingOption) totalYears = try container.decodeIfPresent(Int.self, forKey: .totalYears) totalLoopYears = try container.decodeIfPresent(Int.self, forKey: .totalLoopYears) age = try container.decodeIfPresent(Double.self, forKey: .age) ageR = try container.decodeIfPresent(Double.self, forKey: .ageR) intAge = try container.decodeIfPresent(Int.self, forKey: .intAge) indexType = try container.decodeIfPresent(String.self, forKey: .indexType) indexTypePre = try container.decodeIfPresent(String.self, forKey: .indexTypePre) indexTypePost = try container.decodeIfPresent(String.self, forKey: .indexTypePost) deflationType = try container.decodeIfPresent(String.self, forKey: .deflationType) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] countryCalcConfig = try container.decodeIfPresent(CountryCalculatorConfiguration.self, forKey: .countryCalcConfig) summary = try container.decodeIfPresent(MemberSummary.self, forKey: .summary) lastModified = try container.decodeIfPresent(Date.self, forKey: .lastModified) isReturningUser = try container.decodeIfPresent(Bool.self, forKey: .isReturningUser) clientCountryConfigCacheKey = try container.decodeIfPresent(String.self, forKey: .clientCountryConfigCacheKey) personalAssets = try container.decodeIfPresent(Double.self, forKey: .personalAssets) resultsSummary = try container.decodeIfPresent(Summary.self, forKey: .resultsSummary) totalContribution = try container.decodeIfPresent(TotalContribution.self, forKey: .totalContribution) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if userId != nil { try container.encode(userId, forKey: .userId) } if systemId != nil { try container.encode(systemId, forKey: .systemId) } if schemeCode != nil { try container.encode(schemeCode, forKey: .schemeCode) } if sessionId != nil { try container.encode(sessionId, forKey: .sessionId) } if clientId != nil { try container.encode(clientId, forKey: .clientId) } if clientCode != nil { try container.encode(clientCode, forKey: .clientCode) } if isDefault != nil { try container.encode(isDefault, forKey: .isDefault) } if groupId != nil { try container.encode(groupId, forKey: .groupId) } if groupNameUpper != nil { try container.encode(groupNameUpper, forKey: .groupNameUpper) } if appName != nil { try container.encode(appName, forKey: .appName) } if appNameUpper != nil { try container.encode(appNameUpper, forKey: .appNameUpper) } if key != nil { try container.encode(key, forKey: .key) } if keyUpper != nil { try container.encode(keyUpper, forKey: .keyUpper) } if country != nil { try container.encode(country, forKey: .country) } if locale != nil { try container.encode(locale, forKey: .locale) } if ccy != nil { try container.encode(ccy, forKey: .ccy) } if cdy != nil { try container.encode(cdy, forKey: .cdy) } if status != nil { try container.encode(status, forKey: .status) } if statusCode != nil { try container.encode(statusCode, forKey: .statusCode) } if category != nil { try container.encode(category, forKey: .category) } if scheme != nil { try container.encode(scheme, forKey: .scheme) } if primarySalary != nil { try container.encode(primarySalary, forKey: .primarySalary) } if email != nil { try container.encode(email, forKey: .email) } if employer != nil { try container.encode(employer, forKey: .employer) } if roles != nil { try container.encode(roles, forKey: .roles) } if asAt != nil { try container.encode(asAt, forKey: .asAt) } if calcDate != nil { try container.encode(calcDate, forKey: .calcDate) } if nextEOFY != nil { try container.encode(nextEOFY, forKey: .nextEOFY) } if periodToNextEOFY != nil { try container.encode(periodToNextEOFY, forKey: .periodToNextEOFY) } if year != nil { try container.encode(year, forKey: .year) } if hasPartner != nil { try container.encode(hasPartner, forKey: .hasPartner) } if includePartner != nil { try container.encode(includePartner, forKey: .includePartner) } if includePartnerInCalc != nil { try container.encode(includePartnerInCalc, forKey: .includePartnerInCalc) } if homeOwner != nil { try container.encode(homeOwner, forKey: .homeOwner) } if targetAge != nil { try container.encode(targetAge, forKey: .targetAge) } if targetTime != nil { try container.encode(targetTime, forKey: .targetTime) } if targetIncomeR != nil { try container.encode(targetIncomeR, forKey: .targetIncomeR) } if targetIncomeRFreq != nil { try container.encode(targetIncomeRFreq, forKey: .targetIncomeRFreq) } if targetIncomeRAnnual != nil { try container.encode(targetIncomeRAnnual, forKey: .targetIncomeRAnnual) } if targetP != nil { try container.encode(targetP, forKey: .targetP) } if includeSS != nil { try container.encode(includeSS, forKey: .includeSS) } if firstName != nil { try container.encode(firstName, forKey: .firstName) } if lastName != nil { try container.encode(lastName, forKey: .lastName) } if gender != nil { try container.encode(gender, forKey: .gender) } if dob != nil { try container.encode(dob, forKey: .dob) } if salary != nil { try container.encode(salary, forKey: .salary) } if people.count > 0 { try container.encode(people, forKey: .people) } if assets.count > 0 { try container.encode(assets, forKey: .assets) } if includeAnnuities != nil { try container.encode(includeAnnuities, forKey: .includeAnnuities) } if annuities.count > 0 { try container.encode(annuities, forKey: .annuities) } if spending != nil { try container.encode(spending, forKey: .spending) } if investmentProperties.count > 0 { try container.encode(investmentProperties, forKey: .investmentProperties) } if incomeVectors.count > 0 { try container.encode(incomeVectors, forKey: .incomeVectors) } if config != nil { try container.encode(config, forKey: .config) } if indexation.count > 0 { try container.encode(indexation, forKey: .indexation) } if annuityDisc.count > 0 { try container.encode(annuityDisc, forKey: .annuityDisc) } if indexationRates.count > 0 { try container.encode(indexationRates, forKey: .indexationRates) } if annuityDiscRates.count > 0 { try container.encode(annuityDiscRates, forKey: .annuityDiscRates) } if balance != nil { try container.encode(balance, forKey: .balance) } if planSomeValue != nil { try container.encode(planSomeValue, forKey: .planSomeValue) } if flag1 != nil { try container.encode(flag1, forKey: .flag1) } if flag2 != nil { try container.encode(flag2, forKey: .flag2) } if isFriendly != nil { try container.encode(isFriendly, forKey: .isFriendly) } if financingOption != nil { try container.encode(financingOption, forKey: .financingOption) } if totalYears != nil { try container.encode(totalYears, forKey: .totalYears) } if totalLoopYears != nil { try container.encode(totalLoopYears, forKey: .totalLoopYears) } if age != nil { try container.encode(age, forKey: .age) } if ageR != nil { try container.encode(ageR, forKey: .ageR) } if intAge != nil { try container.encode(intAge, forKey: .intAge) } if indexType != nil { try container.encode(indexType, forKey: .indexType) } if indexTypePre != nil { try container.encode(indexTypePre, forKey: .indexTypePre) } if indexTypePost != nil { try container.encode(indexTypePost, forKey: .indexTypePost) } if deflationType != nil { try container.encode(deflationType, forKey: .deflationType) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } if countryCalcConfig != nil { try container.encode(countryCalcConfig, forKey: .countryCalcConfig) } if summary != nil { try container.encode(summary, forKey: .summary) } if lastModified != nil { try container.encode(lastModified, forKey: .lastModified) } if isReturningUser != nil { try container.encode(isReturningUser, forKey: .isReturningUser) } if clientCountryConfigCacheKey != nil { try container.encode(clientCountryConfigCacheKey, forKey: .clientCountryConfigCacheKey) } if personalAssets != nil { try container.encode(personalAssets, forKey: .personalAssets) } if resultsSummary != nil { try container.encode(resultsSummary, forKey: .resultsSummary) } if totalContribution != nil { try container.encode(totalContribution, forKey: .totalContribution) } } } public class Member : IId, ITimestamp, Codable { public var id:Int? public var employeeGuid:String? public var employeeId:String? public var clientId:Int? public var configurationId:Int? public var lastName:String? public var firstName:String? public var companyName:String? public var employeeGroup:String? public var title:String? public var birthdate:Date? public var emailAddress:String? public var maritalStatus:MaritalStatuses? public var partnerBirthDate:Date? public var gender:IsoGenders? public var militaryMonthCount:Int16? public var annualSalary:Double? public var monthlySalary:Double? public var salaryFrequency:Int? public var deFederalState:GermanFederalStates? public var deTaxClass:GermanTaxClasses? public var deChurchTax:Bool? public var dePrivNursingInsurance:Double? public var pensionFinancingOption:String? public var hasPrivHealthInsurance:Bool? public var privHealthInsurance:Double? public var childrenCount:Int16? public var child1BirthDate:Date? public var child2BirthDate:Date? public var child3BirthDate:Date? public var child4BirthDate:Date? public var child5BirthDate:Date? public var child6BirthDate:Date? public var child7BirthDate:Date? public var child8BirthDate:Date? public var child9BirthDate:Date? public var child10BirthDate:Date? public var authId:String? public var authRegistrationDate:Date? public var activationCode:String? public var activationExpiringDate:Date? public var planInfoDate:Date? public var planInfoBag:String? public var inactive:Bool? public var dateCreated:Date? public var removeRequestDate:Date? public var timestamp:[UInt8] = [] public var client:Client? public var contributionDataDate:Date? public var beneficiaryFirstName:String? public var beneficiaryLastName:String? public var beneficiaryTitle:String? public var beneficiaryDateOfBirth:Date? public var addressLine1:String? public var addressLine2:String? public var addressLine3:String? public var phoneNumber:String? public var mobileNumber:String? public var dateCommencedService:Date? public var calculatorDataDate:Date? public var calculatorDataBag:String? public var periodStart:Date? public var periodEnd:Date? public var memberId:Int? public var infoBag:String? public var projectionInfoBag:String? public var companyPlanInfo:String? public var infoProviderReference:String? public var dateOfHire:Date? public var ssin:String? public var isProxy:Bool? public var isAllowedToVote:Bool? public var userId:String? public var participantStatus:String? public var investmentStrategy:String? public var isAllowedToUpdatePlan:Bool? public var pensionableSalary:Double? public var dateOfBirthSpouse:Date? public var dateOfBirthYoungestChild:Date? public var dateHiredOfPlan:Date? public var contractType:String? public var investmentRiskProfile:String? public var documents:[Document] = [] public var powensConnectionSyncs:[PowensConnectionSync] = [] public var members:[Member] = [] public var groupMembers:[GroupMember] = [] public var parent:Member? public var pensionFundManager:String? public var proxyAccesses:[ProxyAccess] = [] public var beneficiaries:[Beneficiary] = [] public var currentBalances:[CurrentBalance] = [] public var detailedBalances:[DetailedBalance] = [] public var votingPollAnswers:[VotingPollAnswer] = [] public var investmentAllocations:[InvestmentAllocation] = [] public var memberContributions:[MemberContribution] = [] public var participantStatusFormAnswers:[ParticipantStatusFormAnswer] = [] required public init(){} } public class Member : Codable { public var memberId:Int? public var employeeId:String? public var employeeGuid:String? public var email:String? public var title:String? public var firstName:String? public var companyName:String? public var employeeGroup:String? public var lastName:String? public var dateOfBirth:Date? public var gender:IsoGenders? public var maritalStatus:MaritalStatuses? public var numberOfChildren:Int? public var childrenCount:Int? public var monthlySalary:Double? public var annualSalary:Double? public var dkPensionTerms:DkPensionTerms? public var dkPrivateEmailAddress:String? public var dkEmployerName:String? public var dkContactConsent:Bool? public var dkPersonalMandate:Bool? public var deFederalState:GermanFederalStates? public var deTaxClass:GermanTaxClasses? public var deChurchTax:Bool? public var hasPrivHealthInsurance:Bool? public var privHealthInsurance:Double? public var dePrivNursingInsurance:Double? public var contributionDataDate:Date? public var beneficiaryFirstName:String? public var beneficiaryLastName:String? public var beneficiaryTitle:String? public var beneficiaryDateOfBirth:Date? public var addressLine1:String? public var addressLine2:String? public var addressLine3:String? public var phoneNumber:String? public var mobileNumber:String? public var dateCommencedService:Date? public var partnerBirthDate:Date? public var militaryMonthCount:Int16? public var child1BirthDate:Date? public var child2BirthDate:Date? public var child3BirthDate:Date? public var child4BirthDate:Date? public var child5BirthDate:Date? public var child6BirthDate:Date? public var child7BirthDate:Date? public var child8BirthDate:Date? public var child9BirthDate:Date? public var child10BirthDate:Date? public var infoBag:String? public var projectionInfoBag:String? public var clientId:Int? public var companyPlanInfo:String? public var pensionFundManager:String? public var dateOfHire:Date? public var powensConnections:[PowensConnection] = [] public var isPrivateClient:Bool? public var isProxy:Bool? public var beneficiaries:[Beneficiary] = [] public var currentBalances:[CurrentBalance] = [] public var detailedBalances:[DetailedBalance] = [] public var beneficiariesLatestSubmittedDate:Date? public var userId:String? public var participantStatus:String? public var investmentStrategy:String? public var isAllowedToUpdatePlan:Bool? public var pensionableSalary:Double? public var dateOfBirthSpouse:Date? public var dateOfBirthYoungestChild:Date? public var dateHiredOfPlan:Date? public var contractType:String? public var isAllowedToVote:Bool? public var votingPollAnswer:VotingPollAnswer? required public init(){} } public class DataSourceResult : Codable { public var d:DataSource? public var t:Int? required public init(){} } public class StochasticProjectionDto : Codable { public var member:Member? public var userId:String? public var key:String? public var invOption:String? public var invOptionR:String? public var stochasticDataKey:String? public var assumeSteadyIncome:Bool? public var solveTarget:SolveTarget? public var targetAge:Int? public var targetIncome:Double? public var targetP:Double? public var netIncome:Double? public var bal:Double? public var contributionsOutOfPocket:Double? public var pTarget:Double? public var countTarget:Double? public var incomeR:Double? public var avgIncomeRBreakdown:[String:Double] = [:] public var avgLumpSumSpend:Double? public var avgTaxableLumpSum:Double? public var avgLumpSumTax:Double? public var avgLumpSumNet:Double? public var ageR:Int? public var runOutAge:Int? public var savings:Double? public var balR:Double? public var residualBal:Double? public var balRFV:Double? public var solverCount:Int? public var solved:Bool? public var solvePath:[SolvePathEntry] = [] public var incomeRBreakdown:[String:Double] = [:] public var firstBalanceZeroAge:Int? public var simulationResults:[SimulationResultDto] = [] public var balRs:[Double] = [] public var projections:[String:[ProjectionBreakdownDto]] = [:] public var diagnostics:StochasticProjectionDiagnostics? public var avgAnnuityPurchaseAmount:Double? public var yearsInRetirement:Double? required public init(){} } public class MemberProjectionDto : Codable { public var count:Int? public var projection:[MemberPointDto] = [] public var people:[PersonProjectionDto] = [] public var assets:[AssetProjectionDto] = [] public var annuities:[AnnuitiesProjectionDto] = [] public var spending:[SpendingGoalProjectionDto] = [] public var investmentProperties:[InvestmentPropertyProjectionDto] = [] public var summary:SummaryProjectionDto? public var incomeR:Double? public var incomeRBreakdown:[String:Double] = [:] public var balR:Double? public var balRFV:Double? public var balanceRunOutAge:Int? public var incomeGapFlag:Bool? public var residualBalance:Bool? public var lumpSumRet:Double? public var incomeVectors:[String:[Double]] = [:] public var projections:[String:[ProjectionBreakdownDto]] = [:] public var inheritance:Double? public var inheritanceGoal:Double? public var balanceRunOutTime:Int? public var timeBothRetired:Int? public var yearsInRetirement:Int? public var annuityPurchaseAmount:Double? public var costToYou:Double? public var taxRelief:Double? public var employerMatch:Double? public var extraAmount:Double? public var youPay:Double? public var totalInvested:Double? public var solvePath:[SolvePathEntry] = [] public var solverCount:Int? required public init(){} } public class AlbaDiagnostics : Codable { public var setupDuration:Int? public var stochDuration:Int? public var detDuration:Int? public var memberSaveDuration:Int? public var webApiDuration:Int? public var preProjectionPipeDuration:Int? public var postProjectionPipeDuration:Int? public var preProjectionStepsDuration:[String:Int] = [:] public var postProjectionStepsDuration:[String:Int] = [:] required public init(){} } public enum PersonType : String, Codable { case Primary case Partner } public enum AssetType : String, Codable { case FinAsset case AUSuper case AUABP } public enum MinSpendRule : String, Codable { case NoMinimum case FullValue case AuAbpMin } public enum MaxSpendRule : String, Codable { case NoMaximum case AuSuper } public enum SocialSecurityTreatment : String, Codable { case Exempt case Deemed case Actual } public enum RatesSource : String, Codable { case DB case Member case MemberRates case ClientRates } public enum AnnuityPriceType : String, Codable { case Calc case Table } public enum AnnuityType : String, Codable { case Deferred case Immediate case TheOtherType } public enum AnnuityPurchaseType : String, Codable { case Perc case Income case Amount } public enum CallType : String, Codable { case Sync case Async } public enum SolveTarget : String, Codable { case NA case RunOutAge case Income case AgeR case Contributions } public enum ContributionType : String, Codable { case Employer case Employee case EmployerMatching } public enum DataSource : String, Codable { case Db case Cache case Parameter case NA } public enum ContributionType : String, Codable { case Fixed case Time case Lookup case Match } public class SolvePathEntry : Codable { public var v:Double? public var p:Double? public var r:Double? required public init(){} } public class SimulationResultDto : Codable { public var id:Int? public var targetIncome:Double? public var targetAge:Int? public var netIncome:Double? public var contributionsOutOfPocket:Double? public var incomeR:Double? public var incomeRBreakdown:[String:Double] = [:] public var runOutAge:Int? public var firstBalanceZeroAge:Int? public var ageR:Double? public var balR:Double? public var inheritanceGoal:Double? public var inheritance:Double? public var residualBal:Double? public var year1Pension:Double? public var projection:MemberProjectionDto? required public init(){} } public class StochasticProjectionDiagnostics : Codable { public var dataSources:[String:DataSourceResult] = [:] public var runTime:Date? public var runDuration:Int? public var projectionSvcDuration:Int? public var remoteProjectionSvcDuration:Int? public var webApiDuration:Int? public var remoteStochProjCallType:CallType? public var clientStochProjCallType:CallType? public var simCount:Int? required public init(){} } public class MemberPointDto : ProjectionPointDto { public var period:Double? public var bothAreRetired:Bool? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case period case bothAreRetired } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) period = try container.decodeIfPresent(Double.self, forKey: .period) bothAreRetired = try container.decodeIfPresent(Bool.self, forKey: .bothAreRetired) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if period != nil { try container.encode(period, forKey: .period) } if bothAreRetired != nil { try container.encode(bothAreRetired, forKey: .bothAreRetired) } } } public class PersonProjectionDto : Codable { public var item:PersonDto? public var count:Int? public var projection:[PersonPointDto] = [] public var otherIncomeProjections:[IncomeStreamProjectionDto] = [] public var socialSecurityProjection:SocialSecurityProjectionDto? public var dob:Date? required public init(){} } public class AssetProjectionDto : Codable { public var item:AssetDto? public var projection:[AssetPointDto] = [] public var dob:Date? public var assetIndex:Int? public var feeProjections:[FeeProjectionDto] = [] public var feeCapProjections:[FeeCapProjectionDto] = [] public var totalContributionProjection:TotalContributionProjectionDto? required public init(){} } public class AnnuitiesProjectionDto : Codable { public var item:AnnuityDto? public var count:Int? public var projection:[AnnuitiesPointDto] = [] required public init(){} } public class SpendingGoalProjectionDto : Codable { public var item:SpendingGoalDto? public var count:Int? public var projection:[SpendingGoalPointDto] = [] required public init(){} } public class InvestmentPropertyProjectionDto : Codable { public var item:InvestmentPropertyDto? public var projection:[InvestmentPropertyPointDto] = [] required public init(){} } public class SummaryProjectionDto : Codable { public var item:SummaryDto? public var count:Int? public var projection:[SummaryPointDto] = [] required public init(){} } public enum OtherIncomeType : String, Codable { case Pension case Investments case Income } public class ProjectionPointDto : Codable { public var t:Int? public var globalPeriod:Double? public var year:Int? public var age:Double? public var intAge:Int? public var indexation:Double? public var avgGrowthIndexation:Double? public var priceInflation:Double? required public init(){} } public class PersonDto : ProjectableDto { public var type:PersonType? public var index:Int? public var firstName:String? public var lastName:String? public var gender:Gender? public var isAgeInput:Bool? public var dob:Date? public var ageAtLast30June:Int? public var privateHealthInsurance:Bool? public var serviceDate:Date? public var service:Double? public var intService:Int? public var ageR:Int? public var ageRMonths:Int? public var email:String? public var salaries:[String:SalaryDto] = [:] public var salaryChangeSeries:[Double] = [] public var hasOtherIncome:Bool? public var otherIncome:[IncomeStreamDto] = [] public var socialSecurity:SocialSecurityDto? public var taxableDeductions:Double? public var nonTaxableDeductions:Double? public var careerChanges:CareerBreaksDto? public var custom:[String:String] = [:] public var salaryKey:String? public var annualProjectibleSalary:Double? public var projectionBreakdownCode:String? public var salary:Double? public var salaryFreq:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case type case index case firstName case lastName case gender case isAgeInput case dob case ageAtLast30June case privateHealthInsurance case serviceDate case service case intService case ageR case ageRMonths case email case salaries case salaryChangeSeries case hasOtherIncome case otherIncome case socialSecurity case taxableDeductions case nonTaxableDeductions case careerChanges case custom case salaryKey case annualProjectibleSalary case projectionBreakdownCode case salary case salaryFreq } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) type = try container.decodeIfPresent(PersonType.self, forKey: .type) index = try container.decodeIfPresent(Int.self, forKey: .index) firstName = try container.decodeIfPresent(String.self, forKey: .firstName) lastName = try container.decodeIfPresent(String.self, forKey: .lastName) gender = try container.decodeIfPresent(Gender.self, forKey: .gender) isAgeInput = try container.decodeIfPresent(Bool.self, forKey: .isAgeInput) dob = try container.decodeIfPresent(Date.self, forKey: .dob) ageAtLast30June = try container.decodeIfPresent(Int.self, forKey: .ageAtLast30June) privateHealthInsurance = try container.decodeIfPresent(Bool.self, forKey: .privateHealthInsurance) serviceDate = try container.decodeIfPresent(Date.self, forKey: .serviceDate) service = try container.decodeIfPresent(Double.self, forKey: .service) intService = try container.decodeIfPresent(Int.self, forKey: .intService) ageR = try container.decodeIfPresent(Int.self, forKey: .ageR) ageRMonths = try container.decodeIfPresent(Int.self, forKey: .ageRMonths) email = try container.decodeIfPresent(String.self, forKey: .email) salaries = try container.decodeIfPresent([String:SalaryDto].self, forKey: .salaries) ?? [:] salaryChangeSeries = try container.decodeIfPresent([Double].self, forKey: .salaryChangeSeries) ?? [] hasOtherIncome = try container.decodeIfPresent(Bool.self, forKey: .hasOtherIncome) otherIncome = try container.decodeIfPresent([IncomeStreamDto].self, forKey: .otherIncome) ?? [] socialSecurity = try container.decodeIfPresent(SocialSecurityDto.self, forKey: .socialSecurity) taxableDeductions = try container.decodeIfPresent(Double.self, forKey: .taxableDeductions) nonTaxableDeductions = try container.decodeIfPresent(Double.self, forKey: .nonTaxableDeductions) careerChanges = try container.decodeIfPresent(CareerBreaksDto.self, forKey: .careerChanges) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] salaryKey = try container.decodeIfPresent(String.self, forKey: .salaryKey) annualProjectibleSalary = try container.decodeIfPresent(Double.self, forKey: .annualProjectibleSalary) projectionBreakdownCode = try container.decodeIfPresent(String.self, forKey: .projectionBreakdownCode) salary = try container.decodeIfPresent(Double.self, forKey: .salary) salaryFreq = try container.decodeIfPresent(Double.self, forKey: .salaryFreq) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if type != nil { try container.encode(type, forKey: .type) } if index != nil { try container.encode(index, forKey: .index) } if firstName != nil { try container.encode(firstName, forKey: .firstName) } if lastName != nil { try container.encode(lastName, forKey: .lastName) } if gender != nil { try container.encode(gender, forKey: .gender) } if isAgeInput != nil { try container.encode(isAgeInput, forKey: .isAgeInput) } if dob != nil { try container.encode(dob, forKey: .dob) } if ageAtLast30June != nil { try container.encode(ageAtLast30June, forKey: .ageAtLast30June) } if privateHealthInsurance != nil { try container.encode(privateHealthInsurance, forKey: .privateHealthInsurance) } if serviceDate != nil { try container.encode(serviceDate, forKey: .serviceDate) } if service != nil { try container.encode(service, forKey: .service) } if intService != nil { try container.encode(intService, forKey: .intService) } if ageR != nil { try container.encode(ageR, forKey: .ageR) } if ageRMonths != nil { try container.encode(ageRMonths, forKey: .ageRMonths) } if email != nil { try container.encode(email, forKey: .email) } if salaries.count > 0 { try container.encode(salaries, forKey: .salaries) } if salaryChangeSeries.count > 0 { try container.encode(salaryChangeSeries, forKey: .salaryChangeSeries) } if hasOtherIncome != nil { try container.encode(hasOtherIncome, forKey: .hasOtherIncome) } if otherIncome.count > 0 { try container.encode(otherIncome, forKey: .otherIncome) } if socialSecurity != nil { try container.encode(socialSecurity, forKey: .socialSecurity) } if taxableDeductions != nil { try container.encode(taxableDeductions, forKey: .taxableDeductions) } if nonTaxableDeductions != nil { try container.encode(nonTaxableDeductions, forKey: .nonTaxableDeductions) } if careerChanges != nil { try container.encode(careerChanges, forKey: .careerChanges) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } if salaryKey != nil { try container.encode(salaryKey, forKey: .salaryKey) } if annualProjectibleSalary != nil { try container.encode(annualProjectibleSalary, forKey: .annualProjectibleSalary) } if projectionBreakdownCode != nil { try container.encode(projectionBreakdownCode, forKey: .projectionBreakdownCode) } if salary != nil { try container.encode(salary, forKey: .salary) } if salaryFreq != nil { try container.encode(salaryFreq, forKey: .salaryFreq) } } } public class PersonPointDto : ProjectionPointDto { public var isRetired:Bool? public var service:Double? public var contPeriod:Double? public var annualProjectibleSalary:Double? public var salaryPV:Double? public var salary:Double? public var salaryMOY:Double? public var preTaxDeductions:Double? public var otherTaxableIncome:Double? public var totalOtherTaxableIncome:Double? public var taxableIncome:Double? public var taxableIncomeWithConts:Double? public var taxableIncomeNoConts:Double? public var totalIncomeTax:Double? public var incomeTaxWithConts:Double? public var incomeTaxNoConts:Double? public var afterTaxEarnings:Double? public var afterTaxEarningsWithConts:Double? public var afterTaxEarningsNoConts:Double? public var postTaxDeductions:Double? public var totalAfterTaxDrawdown:Double? public var otherTaxFreeIncome:Double? public var afterTaxDeductions:Double? public var afterTaxDeductionsWithConts:Double? public var afterTaxDeductionsNoConts:Double? public var drawdowns:Double? public var totalAfterTax:Double? public var totalAfterTaxWithConts:Double? public var totalAfterTaxNoConts:Double? public var netIncome:Double? public var taxRatio:Double? public var pvFactorBOY:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case isRetired case service case contPeriod case annualProjectibleSalary case salaryPV case salary case salaryMOY case preTaxDeductions case otherTaxableIncome case totalOtherTaxableIncome case taxableIncome case taxableIncomeWithConts case taxableIncomeNoConts case totalIncomeTax case incomeTaxWithConts case incomeTaxNoConts case afterTaxEarnings case afterTaxEarningsWithConts case afterTaxEarningsNoConts case postTaxDeductions case totalAfterTaxDrawdown case otherTaxFreeIncome case afterTaxDeductions case afterTaxDeductionsWithConts case afterTaxDeductionsNoConts case drawdowns case totalAfterTax case totalAfterTaxWithConts case totalAfterTaxNoConts case netIncome case taxRatio case pvFactorBOY } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) isRetired = try container.decodeIfPresent(Bool.self, forKey: .isRetired) service = try container.decodeIfPresent(Double.self, forKey: .service) contPeriod = try container.decodeIfPresent(Double.self, forKey: .contPeriod) annualProjectibleSalary = try container.decodeIfPresent(Double.self, forKey: .annualProjectibleSalary) salaryPV = try container.decodeIfPresent(Double.self, forKey: .salaryPV) salary = try container.decodeIfPresent(Double.self, forKey: .salary) salaryMOY = try container.decodeIfPresent(Double.self, forKey: .salaryMOY) preTaxDeductions = try container.decodeIfPresent(Double.self, forKey: .preTaxDeductions) otherTaxableIncome = try container.decodeIfPresent(Double.self, forKey: .otherTaxableIncome) totalOtherTaxableIncome = try container.decodeIfPresent(Double.self, forKey: .totalOtherTaxableIncome) taxableIncome = try container.decodeIfPresent(Double.self, forKey: .taxableIncome) taxableIncomeWithConts = try container.decodeIfPresent(Double.self, forKey: .taxableIncomeWithConts) taxableIncomeNoConts = try container.decodeIfPresent(Double.self, forKey: .taxableIncomeNoConts) totalIncomeTax = try container.decodeIfPresent(Double.self, forKey: .totalIncomeTax) incomeTaxWithConts = try container.decodeIfPresent(Double.self, forKey: .incomeTaxWithConts) incomeTaxNoConts = try container.decodeIfPresent(Double.self, forKey: .incomeTaxNoConts) afterTaxEarnings = try container.decodeIfPresent(Double.self, forKey: .afterTaxEarnings) afterTaxEarningsWithConts = try container.decodeIfPresent(Double.self, forKey: .afterTaxEarningsWithConts) afterTaxEarningsNoConts = try container.decodeIfPresent(Double.self, forKey: .afterTaxEarningsNoConts) postTaxDeductions = try container.decodeIfPresent(Double.self, forKey: .postTaxDeductions) totalAfterTaxDrawdown = try container.decodeIfPresent(Double.self, forKey: .totalAfterTaxDrawdown) otherTaxFreeIncome = try container.decodeIfPresent(Double.self, forKey: .otherTaxFreeIncome) afterTaxDeductions = try container.decodeIfPresent(Double.self, forKey: .afterTaxDeductions) afterTaxDeductionsWithConts = try container.decodeIfPresent(Double.self, forKey: .afterTaxDeductionsWithConts) afterTaxDeductionsNoConts = try container.decodeIfPresent(Double.self, forKey: .afterTaxDeductionsNoConts) drawdowns = try container.decodeIfPresent(Double.self, forKey: .drawdowns) totalAfterTax = try container.decodeIfPresent(Double.self, forKey: .totalAfterTax) totalAfterTaxWithConts = try container.decodeIfPresent(Double.self, forKey: .totalAfterTaxWithConts) totalAfterTaxNoConts = try container.decodeIfPresent(Double.self, forKey: .totalAfterTaxNoConts) netIncome = try container.decodeIfPresent(Double.self, forKey: .netIncome) taxRatio = try container.decodeIfPresent(Double.self, forKey: .taxRatio) pvFactorBOY = try container.decodeIfPresent(Double.self, forKey: .pvFactorBOY) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if isRetired != nil { try container.encode(isRetired, forKey: .isRetired) } if service != nil { try container.encode(service, forKey: .service) } if contPeriod != nil { try container.encode(contPeriod, forKey: .contPeriod) } if annualProjectibleSalary != nil { try container.encode(annualProjectibleSalary, forKey: .annualProjectibleSalary) } if salaryPV != nil { try container.encode(salaryPV, forKey: .salaryPV) } if salary != nil { try container.encode(salary, forKey: .salary) } if salaryMOY != nil { try container.encode(salaryMOY, forKey: .salaryMOY) } if preTaxDeductions != nil { try container.encode(preTaxDeductions, forKey: .preTaxDeductions) } if otherTaxableIncome != nil { try container.encode(otherTaxableIncome, forKey: .otherTaxableIncome) } if totalOtherTaxableIncome != nil { try container.encode(totalOtherTaxableIncome, forKey: .totalOtherTaxableIncome) } if taxableIncome != nil { try container.encode(taxableIncome, forKey: .taxableIncome) } if taxableIncomeWithConts != nil { try container.encode(taxableIncomeWithConts, forKey: .taxableIncomeWithConts) } if taxableIncomeNoConts != nil { try container.encode(taxableIncomeNoConts, forKey: .taxableIncomeNoConts) } if totalIncomeTax != nil { try container.encode(totalIncomeTax, forKey: .totalIncomeTax) } if incomeTaxWithConts != nil { try container.encode(incomeTaxWithConts, forKey: .incomeTaxWithConts) } if incomeTaxNoConts != nil { try container.encode(incomeTaxNoConts, forKey: .incomeTaxNoConts) } if afterTaxEarnings != nil { try container.encode(afterTaxEarnings, forKey: .afterTaxEarnings) } if afterTaxEarningsWithConts != nil { try container.encode(afterTaxEarningsWithConts, forKey: .afterTaxEarningsWithConts) } if afterTaxEarningsNoConts != nil { try container.encode(afterTaxEarningsNoConts, forKey: .afterTaxEarningsNoConts) } if postTaxDeductions != nil { try container.encode(postTaxDeductions, forKey: .postTaxDeductions) } if totalAfterTaxDrawdown != nil { try container.encode(totalAfterTaxDrawdown, forKey: .totalAfterTaxDrawdown) } if otherTaxFreeIncome != nil { try container.encode(otherTaxFreeIncome, forKey: .otherTaxFreeIncome) } if afterTaxDeductions != nil { try container.encode(afterTaxDeductions, forKey: .afterTaxDeductions) } if afterTaxDeductionsWithConts != nil { try container.encode(afterTaxDeductionsWithConts, forKey: .afterTaxDeductionsWithConts) } if afterTaxDeductionsNoConts != nil { try container.encode(afterTaxDeductionsNoConts, forKey: .afterTaxDeductionsNoConts) } if drawdowns != nil { try container.encode(drawdowns, forKey: .drawdowns) } if totalAfterTax != nil { try container.encode(totalAfterTax, forKey: .totalAfterTax) } if totalAfterTaxWithConts != nil { try container.encode(totalAfterTaxWithConts, forKey: .totalAfterTaxWithConts) } if totalAfterTaxNoConts != nil { try container.encode(totalAfterTaxNoConts, forKey: .totalAfterTaxNoConts) } if netIncome != nil { try container.encode(netIncome, forKey: .netIncome) } if taxRatio != nil { try container.encode(taxRatio, forKey: .taxRatio) } if pvFactorBOY != nil { try container.encode(pvFactorBOY, forKey: .pvFactorBOY) } } } public class IncomeStreamProjectionDto : Codable { public var item:IncomeStreamDto? public var count:Int? public var projection:[IncomeStreamPointDto] = [] required public init(){} } public class SocialSecurityProjectionDto : Codable { public var item:SocialSecurityDto? public var projection:[SocialSecurityPointDto] = [] required public init(){} } public class AssetDto : ProjectableDto { public var type:AssetType? public var owner:PersonType? public var code:String? public var name:String? public var ccy:String? public var value:Double? public var change:Double? public var transferTo:Int? public var transferAge:Int? public var willSpend:Bool? public var minRule:MinSpendRule? public var maxRule:MaxSpendRule? public var ssTreatment:SocialSecurityTreatment? public var spendOnAnnuity:Bool? public var contTaxRate:Double? public var totalConts:Double? public var totalContsFreq:Double? public var totalLumpSumConts:Double? public var rebalance:Bool? public var retLumpSum:Bool? public var contributions:[ContributionDto] = [] public var fees:[FeeDto] = [] public var feeCapArrangements:[FeeCapArrangementDto] = [] public var alloc:[ProductAllocationDto] = [] public var ratesSource:RatesSource? public var custom:[String:String] = [:] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case type case owner case code case name case ccy case value case change case transferTo case transferAge case willSpend case minRule case maxRule case ssTreatment case spendOnAnnuity case contTaxRate case totalConts case totalContsFreq case totalLumpSumConts case rebalance case retLumpSum case contributions case fees case feeCapArrangements case alloc case ratesSource case custom } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) type = try container.decodeIfPresent(AssetType.self, forKey: .type) owner = try container.decodeIfPresent(PersonType.self, forKey: .owner) code = try container.decodeIfPresent(String.self, forKey: .code) name = try container.decodeIfPresent(String.self, forKey: .name) ccy = try container.decodeIfPresent(String.self, forKey: .ccy) value = try container.decodeIfPresent(Double.self, forKey: .value) change = try container.decodeIfPresent(Double.self, forKey: .change) transferTo = try container.decodeIfPresent(Int.self, forKey: .transferTo) transferAge = try container.decodeIfPresent(Int.self, forKey: .transferAge) willSpend = try container.decodeIfPresent(Bool.self, forKey: .willSpend) minRule = try container.decodeIfPresent(MinSpendRule.self, forKey: .minRule) maxRule = try container.decodeIfPresent(MaxSpendRule.self, forKey: .maxRule) ssTreatment = try container.decodeIfPresent(SocialSecurityTreatment.self, forKey: .ssTreatment) spendOnAnnuity = try container.decodeIfPresent(Bool.self, forKey: .spendOnAnnuity) contTaxRate = try container.decodeIfPresent(Double.self, forKey: .contTaxRate) totalConts = try container.decodeIfPresent(Double.self, forKey: .totalConts) totalContsFreq = try container.decodeIfPresent(Double.self, forKey: .totalContsFreq) totalLumpSumConts = try container.decodeIfPresent(Double.self, forKey: .totalLumpSumConts) rebalance = try container.decodeIfPresent(Bool.self, forKey: .rebalance) retLumpSum = try container.decodeIfPresent(Bool.self, forKey: .retLumpSum) contributions = try container.decodeIfPresent([ContributionDto].self, forKey: .contributions) ?? [] fees = try container.decodeIfPresent([FeeDto].self, forKey: .fees) ?? [] feeCapArrangements = try container.decodeIfPresent([FeeCapArrangementDto].self, forKey: .feeCapArrangements) ?? [] alloc = try container.decodeIfPresent([ProductAllocationDto].self, forKey: .alloc) ?? [] ratesSource = try container.decodeIfPresent(RatesSource.self, forKey: .ratesSource) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if type != nil { try container.encode(type, forKey: .type) } if owner != nil { try container.encode(owner, forKey: .owner) } if code != nil { try container.encode(code, forKey: .code) } if name != nil { try container.encode(name, forKey: .name) } if ccy != nil { try container.encode(ccy, forKey: .ccy) } if value != nil { try container.encode(value, forKey: .value) } if change != nil { try container.encode(change, forKey: .change) } if transferTo != nil { try container.encode(transferTo, forKey: .transferTo) } if transferAge != nil { try container.encode(transferAge, forKey: .transferAge) } if willSpend != nil { try container.encode(willSpend, forKey: .willSpend) } if minRule != nil { try container.encode(minRule, forKey: .minRule) } if maxRule != nil { try container.encode(maxRule, forKey: .maxRule) } if ssTreatment != nil { try container.encode(ssTreatment, forKey: .ssTreatment) } if spendOnAnnuity != nil { try container.encode(spendOnAnnuity, forKey: .spendOnAnnuity) } if contTaxRate != nil { try container.encode(contTaxRate, forKey: .contTaxRate) } if totalConts != nil { try container.encode(totalConts, forKey: .totalConts) } if totalContsFreq != nil { try container.encode(totalContsFreq, forKey: .totalContsFreq) } if totalLumpSumConts != nil { try container.encode(totalLumpSumConts, forKey: .totalLumpSumConts) } if rebalance != nil { try container.encode(rebalance, forKey: .rebalance) } if retLumpSum != nil { try container.encode(retLumpSum, forKey: .retLumpSum) } if contributions.count > 0 { try container.encode(contributions, forKey: .contributions) } if fees.count > 0 { try container.encode(fees, forKey: .fees) } if feeCapArrangements.count > 0 { try container.encode(feeCapArrangements, forKey: .feeCapArrangements) } if alloc.count > 0 { try container.encode(alloc, forKey: .alloc) } if ratesSource != nil { try container.encode(ratesSource, forKey: .ratesSource) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } } } public class AssetPointDto : ProjectionPointDto { public var period:Double? public var assetSwitchFlag:Bool? public var contReturn:Double? public var balCashFlowReturn:Double? public var balBOY:Double? public var balBOYPV:Double? public var balBOYPostTransfers:Double? public var balBOYPostTransfersPV:Double? public var balBOYPostTransfersSimple:Double? public var balBOYPostTransfersWOLS:Double? public var transfersOut:Double? public var transfersOutWithLS:Double? public var lumpSumAtRet:Double? public var drawdownEligibility:Double? public var minDrawdown:Double? public var intermediateMinDrawdown:Double? public var drawdownReturns:Double? public var contReturnPow:Double? public var balCashFlowReturnPow:Double? public var balPreDrawdown:Double? public var proportionOfAsset:Double? public var additionalDrawdown:Double? public var totalIntermediateDrawdown:Double? public var totalDrawdowns:Double? public var totalDrawdownsPV:Double? public var totalTaxableFees:Double? public var totalNonTaxableFees:Double? public var returnsForFees:Double? public var balanceForFees:Double? public var taxDeductions:Double? public var returns:Double? public var balEOY:Double? public var assetBalPurchase:Double? public var balBOYPostAnnuityPurchase:Double? public var balBOYPostAnnuityPurchasePerson:Double? public var ssBalBOYPostAnnuityPurchase:Double? public var totalCashflowBOY:Double? public var totalCashflowMOY:Double? public var totalContributionsMOY:Double? public var remainingDrawdownRequired:Double? public var totalDrawdownRequired:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case period case assetSwitchFlag case contReturn case balCashFlowReturn case balBOY case balBOYPV case balBOYPostTransfers case balBOYPostTransfersPV case balBOYPostTransfersSimple case balBOYPostTransfersWOLS case transfersOut case transfersOutWithLS case lumpSumAtRet case drawdownEligibility case minDrawdown case intermediateMinDrawdown case drawdownReturns case contReturnPow case balCashFlowReturnPow case balPreDrawdown case proportionOfAsset case additionalDrawdown case totalIntermediateDrawdown case totalDrawdowns case totalDrawdownsPV case totalTaxableFees case totalNonTaxableFees case returnsForFees case balanceForFees case taxDeductions case returns case balEOY case assetBalPurchase case balBOYPostAnnuityPurchase case balBOYPostAnnuityPurchasePerson case ssBalBOYPostAnnuityPurchase case totalCashflowBOY case totalCashflowMOY case totalContributionsMOY case remainingDrawdownRequired case totalDrawdownRequired } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) period = try container.decodeIfPresent(Double.self, forKey: .period) assetSwitchFlag = try container.decodeIfPresent(Bool.self, forKey: .assetSwitchFlag) contReturn = try container.decodeIfPresent(Double.self, forKey: .contReturn) balCashFlowReturn = try container.decodeIfPresent(Double.self, forKey: .balCashFlowReturn) balBOY = try container.decodeIfPresent(Double.self, forKey: .balBOY) balBOYPV = try container.decodeIfPresent(Double.self, forKey: .balBOYPV) balBOYPostTransfers = try container.decodeIfPresent(Double.self, forKey: .balBOYPostTransfers) balBOYPostTransfersPV = try container.decodeIfPresent(Double.self, forKey: .balBOYPostTransfersPV) balBOYPostTransfersSimple = try container.decodeIfPresent(Double.self, forKey: .balBOYPostTransfersSimple) balBOYPostTransfersWOLS = try container.decodeIfPresent(Double.self, forKey: .balBOYPostTransfersWOLS) transfersOut = try container.decodeIfPresent(Double.self, forKey: .transfersOut) transfersOutWithLS = try container.decodeIfPresent(Double.self, forKey: .transfersOutWithLS) lumpSumAtRet = try container.decodeIfPresent(Double.self, forKey: .lumpSumAtRet) drawdownEligibility = try container.decodeIfPresent(Double.self, forKey: .drawdownEligibility) minDrawdown = try container.decodeIfPresent(Double.self, forKey: .minDrawdown) intermediateMinDrawdown = try container.decodeIfPresent(Double.self, forKey: .intermediateMinDrawdown) drawdownReturns = try container.decodeIfPresent(Double.self, forKey: .drawdownReturns) contReturnPow = try container.decodeIfPresent(Double.self, forKey: .contReturnPow) balCashFlowReturnPow = try container.decodeIfPresent(Double.self, forKey: .balCashFlowReturnPow) balPreDrawdown = try container.decodeIfPresent(Double.self, forKey: .balPreDrawdown) proportionOfAsset = try container.decodeIfPresent(Double.self, forKey: .proportionOfAsset) additionalDrawdown = try container.decodeIfPresent(Double.self, forKey: .additionalDrawdown) totalIntermediateDrawdown = try container.decodeIfPresent(Double.self, forKey: .totalIntermediateDrawdown) totalDrawdowns = try container.decodeIfPresent(Double.self, forKey: .totalDrawdowns) totalDrawdownsPV = try container.decodeIfPresent(Double.self, forKey: .totalDrawdownsPV) totalTaxableFees = try container.decodeIfPresent(Double.self, forKey: .totalTaxableFees) totalNonTaxableFees = try container.decodeIfPresent(Double.self, forKey: .totalNonTaxableFees) returnsForFees = try container.decodeIfPresent(Double.self, forKey: .returnsForFees) balanceForFees = try container.decodeIfPresent(Double.self, forKey: .balanceForFees) taxDeductions = try container.decodeIfPresent(Double.self, forKey: .taxDeductions) returns = try container.decodeIfPresent(Double.self, forKey: .returns) balEOY = try container.decodeIfPresent(Double.self, forKey: .balEOY) assetBalPurchase = try container.decodeIfPresent(Double.self, forKey: .assetBalPurchase) balBOYPostAnnuityPurchase = try container.decodeIfPresent(Double.self, forKey: .balBOYPostAnnuityPurchase) balBOYPostAnnuityPurchasePerson = try container.decodeIfPresent(Double.self, forKey: .balBOYPostAnnuityPurchasePerson) ssBalBOYPostAnnuityPurchase = try container.decodeIfPresent(Double.self, forKey: .ssBalBOYPostAnnuityPurchase) totalCashflowBOY = try container.decodeIfPresent(Double.self, forKey: .totalCashflowBOY) totalCashflowMOY = try container.decodeIfPresent(Double.self, forKey: .totalCashflowMOY) totalContributionsMOY = try container.decodeIfPresent(Double.self, forKey: .totalContributionsMOY) remainingDrawdownRequired = try container.decodeIfPresent(Double.self, forKey: .remainingDrawdownRequired) totalDrawdownRequired = try container.decodeIfPresent(Double.self, forKey: .totalDrawdownRequired) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if period != nil { try container.encode(period, forKey: .period) } if assetSwitchFlag != nil { try container.encode(assetSwitchFlag, forKey: .assetSwitchFlag) } if contReturn != nil { try container.encode(contReturn, forKey: .contReturn) } if balCashFlowReturn != nil { try container.encode(balCashFlowReturn, forKey: .balCashFlowReturn) } if balBOY != nil { try container.encode(balBOY, forKey: .balBOY) } if balBOYPV != nil { try container.encode(balBOYPV, forKey: .balBOYPV) } if balBOYPostTransfers != nil { try container.encode(balBOYPostTransfers, forKey: .balBOYPostTransfers) } if balBOYPostTransfersPV != nil { try container.encode(balBOYPostTransfersPV, forKey: .balBOYPostTransfersPV) } if balBOYPostTransfersSimple != nil { try container.encode(balBOYPostTransfersSimple, forKey: .balBOYPostTransfersSimple) } if balBOYPostTransfersWOLS != nil { try container.encode(balBOYPostTransfersWOLS, forKey: .balBOYPostTransfersWOLS) } if transfersOut != nil { try container.encode(transfersOut, forKey: .transfersOut) } if transfersOutWithLS != nil { try container.encode(transfersOutWithLS, forKey: .transfersOutWithLS) } if lumpSumAtRet != nil { try container.encode(lumpSumAtRet, forKey: .lumpSumAtRet) } if drawdownEligibility != nil { try container.encode(drawdownEligibility, forKey: .drawdownEligibility) } if minDrawdown != nil { try container.encode(minDrawdown, forKey: .minDrawdown) } if intermediateMinDrawdown != nil { try container.encode(intermediateMinDrawdown, forKey: .intermediateMinDrawdown) } if drawdownReturns != nil { try container.encode(drawdownReturns, forKey: .drawdownReturns) } if contReturnPow != nil { try container.encode(contReturnPow, forKey: .contReturnPow) } if balCashFlowReturnPow != nil { try container.encode(balCashFlowReturnPow, forKey: .balCashFlowReturnPow) } if balPreDrawdown != nil { try container.encode(balPreDrawdown, forKey: .balPreDrawdown) } if proportionOfAsset != nil { try container.encode(proportionOfAsset, forKey: .proportionOfAsset) } if additionalDrawdown != nil { try container.encode(additionalDrawdown, forKey: .additionalDrawdown) } if totalIntermediateDrawdown != nil { try container.encode(totalIntermediateDrawdown, forKey: .totalIntermediateDrawdown) } if totalDrawdowns != nil { try container.encode(totalDrawdowns, forKey: .totalDrawdowns) } if totalDrawdownsPV != nil { try container.encode(totalDrawdownsPV, forKey: .totalDrawdownsPV) } if totalTaxableFees != nil { try container.encode(totalTaxableFees, forKey: .totalTaxableFees) } if totalNonTaxableFees != nil { try container.encode(totalNonTaxableFees, forKey: .totalNonTaxableFees) } if returnsForFees != nil { try container.encode(returnsForFees, forKey: .returnsForFees) } if balanceForFees != nil { try container.encode(balanceForFees, forKey: .balanceForFees) } if taxDeductions != nil { try container.encode(taxDeductions, forKey: .taxDeductions) } if returns != nil { try container.encode(returns, forKey: .returns) } if balEOY != nil { try container.encode(balEOY, forKey: .balEOY) } if assetBalPurchase != nil { try container.encode(assetBalPurchase, forKey: .assetBalPurchase) } if balBOYPostAnnuityPurchase != nil { try container.encode(balBOYPostAnnuityPurchase, forKey: .balBOYPostAnnuityPurchase) } if balBOYPostAnnuityPurchasePerson != nil { try container.encode(balBOYPostAnnuityPurchasePerson, forKey: .balBOYPostAnnuityPurchasePerson) } if ssBalBOYPostAnnuityPurchase != nil { try container.encode(ssBalBOYPostAnnuityPurchase, forKey: .ssBalBOYPostAnnuityPurchase) } if totalCashflowBOY != nil { try container.encode(totalCashflowBOY, forKey: .totalCashflowBOY) } if totalCashflowMOY != nil { try container.encode(totalCashflowMOY, forKey: .totalCashflowMOY) } if totalContributionsMOY != nil { try container.encode(totalContributionsMOY, forKey: .totalContributionsMOY) } if remainingDrawdownRequired != nil { try container.encode(remainingDrawdownRequired, forKey: .remainingDrawdownRequired) } if totalDrawdownRequired != nil { try container.encode(totalDrawdownRequired, forKey: .totalDrawdownRequired) } } } public class FeeProjectionDto : Codable { public var item:FeeDto? public var projection:[FeePointDto] = [] required public init(){} } public class FeeCapProjectionDto : Codable { public var item:FeeCapArrangementDto? public var count:Int? public var projection:[FeeCapPointDto] = [] required public init(){} } public class TotalContributionProjectionDto : Codable { public var item:TotalContributionDto? public var projection:[TotalContributionPointDto] = [] public var contributionProjections:[ContributionProjectionDto] = [] required public init(){} } public class AnnuityDto : ProjectableDto { public var priceType:AnnuityPriceType? public var price:Double? public var owner:PersonType? public var gender:Gender? public var ownerAge:Int? public var spouseAge:Int? public var type:AnnuityType? public var purchaseType:AnnuityPurchaseType? public var purchaseAmount:Double? public var percBalanceSpent:Double? public var amountSpent:Double? public var incomePurchased:Double? public var purchaseAge:Int? public var deferralPeriod:Int? public var indexationName:String? public var drStochastic:String? public var impliedInflationStochasticSeries:String? public var reversion:Double? public var guarantee:Double? public var timing:Double? public var scaleQx:Double? public var scaleImpr:Double? public var ageRating:Int? public var spouseAgeRating:Int? public var custom:[String:String] = [:] public var tableName:String? public var imprFactorTableName:String? public var spouseAgeAtPurchase:Int? public var expense:Double? public var cacheKey:String? public var targetTpx:Double? public var paymentTerm:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case priceType case price case owner case gender case ownerAge case spouseAge case type case purchaseType case purchaseAmount case percBalanceSpent case amountSpent case incomePurchased case purchaseAge case deferralPeriod case indexationName case drStochastic case impliedInflationStochasticSeries case reversion case guarantee case timing case scaleQx case scaleImpr case ageRating case spouseAgeRating case custom case tableName case imprFactorTableName case spouseAgeAtPurchase case expense case cacheKey case targetTpx case paymentTerm } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) priceType = try container.decodeIfPresent(AnnuityPriceType.self, forKey: .priceType) price = try container.decodeIfPresent(Double.self, forKey: .price) owner = try container.decodeIfPresent(PersonType.self, forKey: .owner) gender = try container.decodeIfPresent(Gender.self, forKey: .gender) ownerAge = try container.decodeIfPresent(Int.self, forKey: .ownerAge) spouseAge = try container.decodeIfPresent(Int.self, forKey: .spouseAge) type = try container.decodeIfPresent(AnnuityType.self, forKey: .type) purchaseType = try container.decodeIfPresent(AnnuityPurchaseType.self, forKey: .purchaseType) purchaseAmount = try container.decodeIfPresent(Double.self, forKey: .purchaseAmount) percBalanceSpent = try container.decodeIfPresent(Double.self, forKey: .percBalanceSpent) amountSpent = try container.decodeIfPresent(Double.self, forKey: .amountSpent) incomePurchased = try container.decodeIfPresent(Double.self, forKey: .incomePurchased) purchaseAge = try container.decodeIfPresent(Int.self, forKey: .purchaseAge) deferralPeriod = try container.decodeIfPresent(Int.self, forKey: .deferralPeriod) indexationName = try container.decodeIfPresent(String.self, forKey: .indexationName) drStochastic = try container.decodeIfPresent(String.self, forKey: .drStochastic) impliedInflationStochasticSeries = try container.decodeIfPresent(String.self, forKey: .impliedInflationStochasticSeries) reversion = try container.decodeIfPresent(Double.self, forKey: .reversion) guarantee = try container.decodeIfPresent(Double.self, forKey: .guarantee) timing = try container.decodeIfPresent(Double.self, forKey: .timing) scaleQx = try container.decodeIfPresent(Double.self, forKey: .scaleQx) scaleImpr = try container.decodeIfPresent(Double.self, forKey: .scaleImpr) ageRating = try container.decodeIfPresent(Int.self, forKey: .ageRating) spouseAgeRating = try container.decodeIfPresent(Int.self, forKey: .spouseAgeRating) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] tableName = try container.decodeIfPresent(String.self, forKey: .tableName) imprFactorTableName = try container.decodeIfPresent(String.self, forKey: .imprFactorTableName) spouseAgeAtPurchase = try container.decodeIfPresent(Int.self, forKey: .spouseAgeAtPurchase) expense = try container.decodeIfPresent(Double.self, forKey: .expense) cacheKey = try container.decodeIfPresent(String.self, forKey: .cacheKey) targetTpx = try container.decodeIfPresent(Double.self, forKey: .targetTpx) paymentTerm = try container.decodeIfPresent(Double.self, forKey: .paymentTerm) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if priceType != nil { try container.encode(priceType, forKey: .priceType) } if price != nil { try container.encode(price, forKey: .price) } if owner != nil { try container.encode(owner, forKey: .owner) } if gender != nil { try container.encode(gender, forKey: .gender) } if ownerAge != nil { try container.encode(ownerAge, forKey: .ownerAge) } if spouseAge != nil { try container.encode(spouseAge, forKey: .spouseAge) } if type != nil { try container.encode(type, forKey: .type) } if purchaseType != nil { try container.encode(purchaseType, forKey: .purchaseType) } if purchaseAmount != nil { try container.encode(purchaseAmount, forKey: .purchaseAmount) } if percBalanceSpent != nil { try container.encode(percBalanceSpent, forKey: .percBalanceSpent) } if amountSpent != nil { try container.encode(amountSpent, forKey: .amountSpent) } if incomePurchased != nil { try container.encode(incomePurchased, forKey: .incomePurchased) } if purchaseAge != nil { try container.encode(purchaseAge, forKey: .purchaseAge) } if deferralPeriod != nil { try container.encode(deferralPeriod, forKey: .deferralPeriod) } if indexationName != nil { try container.encode(indexationName, forKey: .indexationName) } if drStochastic != nil { try container.encode(drStochastic, forKey: .drStochastic) } if impliedInflationStochasticSeries != nil { try container.encode(impliedInflationStochasticSeries, forKey: .impliedInflationStochasticSeries) } if reversion != nil { try container.encode(reversion, forKey: .reversion) } if guarantee != nil { try container.encode(guarantee, forKey: .guarantee) } if timing != nil { try container.encode(timing, forKey: .timing) } if scaleQx != nil { try container.encode(scaleQx, forKey: .scaleQx) } if scaleImpr != nil { try container.encode(scaleImpr, forKey: .scaleImpr) } if ageRating != nil { try container.encode(ageRating, forKey: .ageRating) } if spouseAgeRating != nil { try container.encode(spouseAgeRating, forKey: .spouseAgeRating) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } if tableName != nil { try container.encode(tableName, forKey: .tableName) } if imprFactorTableName != nil { try container.encode(imprFactorTableName, forKey: .imprFactorTableName) } if spouseAgeAtPurchase != nil { try container.encode(spouseAgeAtPurchase, forKey: .spouseAgeAtPurchase) } if expense != nil { try container.encode(expense, forKey: .expense) } if cacheKey != nil { try container.encode(cacheKey, forKey: .cacheKey) } if targetTpx != nil { try container.encode(targetTpx, forKey: .targetTpx) } if paymentTerm != nil { try container.encode(paymentTerm, forKey: .paymentTerm) } } } public class AnnuitiesPointDto : ProjectionPointDto { public var purchaseYear:Int? public var discountRate:Double? public var stochAnnuityRateIndex:Int? public var inflation:Double? public var purchase:Bool? public var pensionPaymentPeriod:Bool? public var assetBalPurchaseTotal:Double? public var annuityIndexation:Double? public var purchasePrice:Double? public var purchaseAmount:Double? public var purchaseAmountPV:Double? public var annuityIncome:Double? public var annuityIncomePeriod:Double? public var annuityIncomePV:Double? public var annuityAssessableAsset:Double? public var annuityAssessableIncome:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case purchaseYear case discountRate case stochAnnuityRateIndex case inflation case purchase case pensionPaymentPeriod case assetBalPurchaseTotal case annuityIndexation case purchasePrice case purchaseAmount case purchaseAmountPV case annuityIncome case annuityIncomePeriod case annuityIncomePV case annuityAssessableAsset case annuityAssessableIncome } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) purchaseYear = try container.decodeIfPresent(Int.self, forKey: .purchaseYear) discountRate = try container.decodeIfPresent(Double.self, forKey: .discountRate) stochAnnuityRateIndex = try container.decodeIfPresent(Int.self, forKey: .stochAnnuityRateIndex) inflation = try container.decodeIfPresent(Double.self, forKey: .inflation) purchase = try container.decodeIfPresent(Bool.self, forKey: .purchase) pensionPaymentPeriod = try container.decodeIfPresent(Bool.self, forKey: .pensionPaymentPeriod) assetBalPurchaseTotal = try container.decodeIfPresent(Double.self, forKey: .assetBalPurchaseTotal) annuityIndexation = try container.decodeIfPresent(Double.self, forKey: .annuityIndexation) purchasePrice = try container.decodeIfPresent(Double.self, forKey: .purchasePrice) purchaseAmount = try container.decodeIfPresent(Double.self, forKey: .purchaseAmount) purchaseAmountPV = try container.decodeIfPresent(Double.self, forKey: .purchaseAmountPV) annuityIncome = try container.decodeIfPresent(Double.self, forKey: .annuityIncome) annuityIncomePeriod = try container.decodeIfPresent(Double.self, forKey: .annuityIncomePeriod) annuityIncomePV = try container.decodeIfPresent(Double.self, forKey: .annuityIncomePV) annuityAssessableAsset = try container.decodeIfPresent(Double.self, forKey: .annuityAssessableAsset) annuityAssessableIncome = try container.decodeIfPresent(Double.self, forKey: .annuityAssessableIncome) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if purchaseYear != nil { try container.encode(purchaseYear, forKey: .purchaseYear) } if discountRate != nil { try container.encode(discountRate, forKey: .discountRate) } if stochAnnuityRateIndex != nil { try container.encode(stochAnnuityRateIndex, forKey: .stochAnnuityRateIndex) } if inflation != nil { try container.encode(inflation, forKey: .inflation) } if purchase != nil { try container.encode(purchase, forKey: .purchase) } if pensionPaymentPeriod != nil { try container.encode(pensionPaymentPeriod, forKey: .pensionPaymentPeriod) } if assetBalPurchaseTotal != nil { try container.encode(assetBalPurchaseTotal, forKey: .assetBalPurchaseTotal) } if annuityIndexation != nil { try container.encode(annuityIndexation, forKey: .annuityIndexation) } if purchasePrice != nil { try container.encode(purchasePrice, forKey: .purchasePrice) } if purchaseAmount != nil { try container.encode(purchaseAmount, forKey: .purchaseAmount) } if purchaseAmountPV != nil { try container.encode(purchaseAmountPV, forKey: .purchaseAmountPV) } if annuityIncome != nil { try container.encode(annuityIncome, forKey: .annuityIncome) } if annuityIncomePeriod != nil { try container.encode(annuityIncomePeriod, forKey: .annuityIncomePeriod) } if annuityIncomePV != nil { try container.encode(annuityIncomePV, forKey: .annuityIncomePV) } if annuityAssessableAsset != nil { try container.encode(annuityAssessableAsset, forKey: .annuityAssessableAsset) } if annuityAssessableIncome != nil { try container.encode(annuityAssessableIncome, forKey: .annuityAssessableIncome) } } } public class SpendingGoalDto : ProjectableDto { public var name:String? public var amount:Double? public var freq:Double? public var effectiveFreq:Double? public var excludeFromProjection:Bool? public var fromAge:Int? public var toAge:Int? public var selectedPersonalised:String? public var tag:String? public var custom:[String:String] = [:] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case name case amount case freq case effectiveFreq case excludeFromProjection case fromAge case toAge case selectedPersonalised case tag case custom } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) name = try container.decodeIfPresent(String.self, forKey: .name) amount = try container.decodeIfPresent(Double.self, forKey: .amount) freq = try container.decodeIfPresent(Double.self, forKey: .freq) effectiveFreq = try container.decodeIfPresent(Double.self, forKey: .effectiveFreq) excludeFromProjection = try container.decodeIfPresent(Bool.self, forKey: .excludeFromProjection) fromAge = try container.decodeIfPresent(Int.self, forKey: .fromAge) toAge = try container.decodeIfPresent(Int.self, forKey: .toAge) selectedPersonalised = try container.decodeIfPresent(String.self, forKey: .selectedPersonalised) tag = try container.decodeIfPresent(String.self, forKey: .tag) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if name != nil { try container.encode(name, forKey: .name) } if amount != nil { try container.encode(amount, forKey: .amount) } if freq != nil { try container.encode(freq, forKey: .freq) } if effectiveFreq != nil { try container.encode(effectiveFreq, forKey: .effectiveFreq) } if excludeFromProjection != nil { try container.encode(excludeFromProjection, forKey: .excludeFromProjection) } if fromAge != nil { try container.encode(fromAge, forKey: .fromAge) } if toAge != nil { try container.encode(toAge, forKey: .toAge) } if selectedPersonalised != nil { try container.encode(selectedPersonalised, forKey: .selectedPersonalised) } if tag != nil { try container.encode(tag, forKey: .tag) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } } } public class SpendingGoalPointDto : ProjectionPointDto { public var freq:Double? public var yearsSinceFromAge:Double? public var period:Double? public var amount:Double? public var amountPV:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case freq case yearsSinceFromAge case period case amount case amountPV } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) freq = try container.decodeIfPresent(Double.self, forKey: .freq) yearsSinceFromAge = try container.decodeIfPresent(Double.self, forKey: .yearsSinceFromAge) period = try container.decodeIfPresent(Double.self, forKey: .period) amount = try container.decodeIfPresent(Double.self, forKey: .amount) amountPV = try container.decodeIfPresent(Double.self, forKey: .amountPV) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if freq != nil { try container.encode(freq, forKey: .freq) } if yearsSinceFromAge != nil { try container.encode(yearsSinceFromAge, forKey: .yearsSinceFromAge) } if period != nil { try container.encode(period, forKey: .period) } if amount != nil { try container.encode(amount, forKey: .amount) } if amountPV != nil { try container.encode(amountPV, forKey: .amountPV) } } } public class InvestmentPropertyDto : ProjectableDto { public var owner:PersonType? public var value:Double? public var rentYield:Double? public var expense:Double? public var downsize:Double? public var downsizeAge:Double? public var downsizeToAsset:Int? public var rates:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case owner case value case rentYield case expense case downsize case downsizeAge case downsizeToAsset case rates } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) owner = try container.decodeIfPresent(PersonType.self, forKey: .owner) value = try container.decodeIfPresent(Double.self, forKey: .value) rentYield = try container.decodeIfPresent(Double.self, forKey: .rentYield) expense = try container.decodeIfPresent(Double.self, forKey: .expense) downsize = try container.decodeIfPresent(Double.self, forKey: .downsize) downsizeAge = try container.decodeIfPresent(Double.self, forKey: .downsizeAge) downsizeToAsset = try container.decodeIfPresent(Int.self, forKey: .downsizeToAsset) rates = try container.decodeIfPresent(Double.self, forKey: .rates) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if owner != nil { try container.encode(owner, forKey: .owner) } if value != nil { try container.encode(value, forKey: .value) } if rentYield != nil { try container.encode(rentYield, forKey: .rentYield) } if expense != nil { try container.encode(expense, forKey: .expense) } if downsize != nil { try container.encode(downsize, forKey: .downsize) } if downsizeAge != nil { try container.encode(downsizeAge, forKey: .downsizeAge) } if downsizeToAsset != nil { try container.encode(downsizeToAsset, forKey: .downsizeToAsset) } if rates != nil { try container.encode(rates, forKey: .rates) } } } public class InvestmentPropertyPointDto : ProjectionPointDto { public var capitalGrowthRate:Double? public var valueBeforeDownsize:Double? public var downsize:Double? public var valueAfterDownsize:Double? public var rent:Double? public var expenses:Double? public var valueBeforeDownsizePV:Double? public var income:Double? public var netRent:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case capitalGrowthRate case valueBeforeDownsize case downsize case valueAfterDownsize case rent case expenses case valueBeforeDownsizePV case income case netRent } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) capitalGrowthRate = try container.decodeIfPresent(Double.self, forKey: .capitalGrowthRate) valueBeforeDownsize = try container.decodeIfPresent(Double.self, forKey: .valueBeforeDownsize) downsize = try container.decodeIfPresent(Double.self, forKey: .downsize) valueAfterDownsize = try container.decodeIfPresent(Double.self, forKey: .valueAfterDownsize) rent = try container.decodeIfPresent(Double.self, forKey: .rent) expenses = try container.decodeIfPresent(Double.self, forKey: .expenses) valueBeforeDownsizePV = try container.decodeIfPresent(Double.self, forKey: .valueBeforeDownsizePV) income = try container.decodeIfPresent(Double.self, forKey: .income) netRent = try container.decodeIfPresent(Double.self, forKey: .netRent) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if capitalGrowthRate != nil { try container.encode(capitalGrowthRate, forKey: .capitalGrowthRate) } if valueBeforeDownsize != nil { try container.encode(valueBeforeDownsize, forKey: .valueBeforeDownsize) } if downsize != nil { try container.encode(downsize, forKey: .downsize) } if valueAfterDownsize != nil { try container.encode(valueAfterDownsize, forKey: .valueAfterDownsize) } if rent != nil { try container.encode(rent, forKey: .rent) } if expenses != nil { try container.encode(expenses, forKey: .expenses) } if valueBeforeDownsizePV != nil { try container.encode(valueBeforeDownsizePV, forKey: .valueBeforeDownsizePV) } if income != nil { try container.encode(income, forKey: .income) } if netRent != nil { try container.encode(netRent, forKey: .netRent) } } } public class SummaryDto : ProjectableDto { required public init(){ super.init() } required public init(from decoder: Decoder) throws { try super.init(from: decoder) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) } } public class SummaryPointDto : ProjectionPointDto { public var period:Double? public var deflatorBOY:Double? public var deflatorMOY:Double? public var incomeNeeds:Double? public var incomeYou:Double? public var incomePartner:Double? public var socialSecurity:Double? public var incomeAssets:Double? public var totalIncome:Double? public var gap:Double? public var balanceAssets:Double? public var balanceProperty:Double? public var incomeAnnuities:Double? public var incomeProperty:Double? public var lumpSumSpend:Double? public var retPeriod:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case period case deflatorBOY case deflatorMOY case incomeNeeds case incomeYou case incomePartner case socialSecurity case incomeAssets case totalIncome case gap case balanceAssets case balanceProperty case incomeAnnuities case incomeProperty case lumpSumSpend case retPeriod } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) period = try container.decodeIfPresent(Double.self, forKey: .period) deflatorBOY = try container.decodeIfPresent(Double.self, forKey: .deflatorBOY) deflatorMOY = try container.decodeIfPresent(Double.self, forKey: .deflatorMOY) incomeNeeds = try container.decodeIfPresent(Double.self, forKey: .incomeNeeds) incomeYou = try container.decodeIfPresent(Double.self, forKey: .incomeYou) incomePartner = try container.decodeIfPresent(Double.self, forKey: .incomePartner) socialSecurity = try container.decodeIfPresent(Double.self, forKey: .socialSecurity) incomeAssets = try container.decodeIfPresent(Double.self, forKey: .incomeAssets) totalIncome = try container.decodeIfPresent(Double.self, forKey: .totalIncome) gap = try container.decodeIfPresent(Double.self, forKey: .gap) balanceAssets = try container.decodeIfPresent(Double.self, forKey: .balanceAssets) balanceProperty = try container.decodeIfPresent(Double.self, forKey: .balanceProperty) incomeAnnuities = try container.decodeIfPresent(Double.self, forKey: .incomeAnnuities) incomeProperty = try container.decodeIfPresent(Double.self, forKey: .incomeProperty) lumpSumSpend = try container.decodeIfPresent(Double.self, forKey: .lumpSumSpend) retPeriod = try container.decodeIfPresent(Double.self, forKey: .retPeriod) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if period != nil { try container.encode(period, forKey: .period) } if deflatorBOY != nil { try container.encode(deflatorBOY, forKey: .deflatorBOY) } if deflatorMOY != nil { try container.encode(deflatorMOY, forKey: .deflatorMOY) } if incomeNeeds != nil { try container.encode(incomeNeeds, forKey: .incomeNeeds) } if incomeYou != nil { try container.encode(incomeYou, forKey: .incomeYou) } if incomePartner != nil { try container.encode(incomePartner, forKey: .incomePartner) } if socialSecurity != nil { try container.encode(socialSecurity, forKey: .socialSecurity) } if incomeAssets != nil { try container.encode(incomeAssets, forKey: .incomeAssets) } if totalIncome != nil { try container.encode(totalIncome, forKey: .totalIncome) } if gap != nil { try container.encode(gap, forKey: .gap) } if balanceAssets != nil { try container.encode(balanceAssets, forKey: .balanceAssets) } if balanceProperty != nil { try container.encode(balanceProperty, forKey: .balanceProperty) } if incomeAnnuities != nil { try container.encode(incomeAnnuities, forKey: .incomeAnnuities) } if incomeProperty != nil { try container.encode(incomeProperty, forKey: .incomeProperty) } if lumpSumSpend != nil { try container.encode(lumpSumSpend, forKey: .lumpSumSpend) } if retPeriod != nil { try container.encode(retPeriod, forKey: .retPeriod) } } } public class SalaryDto : Codable { public var type:SalaryType? public var ccy:String? public var amount:Double? public var freq:Double? public var annualAmount:Double? public var indexType:String? public var salaryChanges:[SalaryChangeDto] = [] required public init(){} } public class IncomeStreamDto : Codable { public var name:String? public var indexType:String? public var type:OtherIncomeType? public var amount:Double? public var fromAge:Int? public var toAge:Int? public var isTaxable:Bool? public var custom:[String:String] = [:] required public init(){} } public class SocialSecurityDto : ProjectableDto { public var owner:PersonType? public var includeSS:Bool? public var isMarried:Bool? public var homeOwner:Bool? public var personalAssets:Double? public var numPeople:Int? public var dob:Date? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case owner case includeSS case isMarried case homeOwner case personalAssets case numPeople case dob } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) owner = try container.decodeIfPresent(PersonType.self, forKey: .owner) includeSS = try container.decodeIfPresent(Bool.self, forKey: .includeSS) isMarried = try container.decodeIfPresent(Bool.self, forKey: .isMarried) homeOwner = try container.decodeIfPresent(Bool.self, forKey: .homeOwner) personalAssets = try container.decodeIfPresent(Double.self, forKey: .personalAssets) numPeople = try container.decodeIfPresent(Int.self, forKey: .numPeople) dob = try container.decodeIfPresent(Date.self, forKey: .dob) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if owner != nil { try container.encode(owner, forKey: .owner) } if includeSS != nil { try container.encode(includeSS, forKey: .includeSS) } if isMarried != nil { try container.encode(isMarried, forKey: .isMarried) } if homeOwner != nil { try container.encode(homeOwner, forKey: .homeOwner) } if personalAssets != nil { try container.encode(personalAssets, forKey: .personalAssets) } if numPeople != nil { try container.encode(numPeople, forKey: .numPeople) } if dob != nil { try container.encode(dob, forKey: .dob) } } } public class CareerBreaksDto : Codable { public var willTake:Bool? public var breaks:[CareerBreakDto] = [] required public init(){} } public class ProjectableDto : Codable { public var asAt:Date? public var age:Double? public var intAge:Int? public var year:Int? public var periodToNextEOFY:Double? public var indexType:String? required public init(){} } public class IncomeStreamPointDto : ProjectionPointDto { public var incomePV:Double? public var income:Double? public var taxableAmount:Double? public var nonTaxableAmount:Double? public var taxableAmountPV:Double? public var nonTaxableAmountPV:Double? public var netIncome:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case incomePV case income case taxableAmount case nonTaxableAmount case taxableAmountPV case nonTaxableAmountPV case netIncome } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) incomePV = try container.decodeIfPresent(Double.self, forKey: .incomePV) income = try container.decodeIfPresent(Double.self, forKey: .income) taxableAmount = try container.decodeIfPresent(Double.self, forKey: .taxableAmount) nonTaxableAmount = try container.decodeIfPresent(Double.self, forKey: .nonTaxableAmount) taxableAmountPV = try container.decodeIfPresent(Double.self, forKey: .taxableAmountPV) nonTaxableAmountPV = try container.decodeIfPresent(Double.self, forKey: .nonTaxableAmountPV) netIncome = try container.decodeIfPresent(Double.self, forKey: .netIncome) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if incomePV != nil { try container.encode(incomePV, forKey: .incomePV) } if income != nil { try container.encode(income, forKey: .income) } if taxableAmount != nil { try container.encode(taxableAmount, forKey: .taxableAmount) } if nonTaxableAmount != nil { try container.encode(nonTaxableAmount, forKey: .nonTaxableAmount) } if taxableAmountPV != nil { try container.encode(taxableAmountPV, forKey: .taxableAmountPV) } if nonTaxableAmountPV != nil { try container.encode(nonTaxableAmountPV, forKey: .nonTaxableAmountPV) } if netIncome != nil { try container.encode(netIncome, forKey: .netIncome) } } } public class SocialSecurityPointDto : ProjectionPointDto { public var personalAssets:Double? public var assessableAssets:Double? public var fullPensionPP:Double? public var assetThreshold:Double? public var minPension:Double? public var assetMeansTest:Double? public var deemedIncomeThreshold:Double? public var deemedReturn:Double? public var actualIncome:Double? public var totalIncome:Double? public var incomeThreshold:Double? public var incomeTest:Double? public var totalSocialSecurity:Double? public var income:Double? public var fullPensionIndexation:Double? public var minPensionIndexation:Double? public var assetThresholdIndexation:Double? public var incomeThresholdIndexation:Double? public var deemedIncomeThresholdIndexation:Double? public var personalAssetsIndexation:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case personalAssets case assessableAssets case fullPensionPP case assetThreshold case minPension case assetMeansTest case deemedIncomeThreshold case deemedReturn case actualIncome case totalIncome case incomeThreshold case incomeTest case totalSocialSecurity case income case fullPensionIndexation case minPensionIndexation case assetThresholdIndexation case incomeThresholdIndexation case deemedIncomeThresholdIndexation case personalAssetsIndexation } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) personalAssets = try container.decodeIfPresent(Double.self, forKey: .personalAssets) assessableAssets = try container.decodeIfPresent(Double.self, forKey: .assessableAssets) fullPensionPP = try container.decodeIfPresent(Double.self, forKey: .fullPensionPP) assetThreshold = try container.decodeIfPresent(Double.self, forKey: .assetThreshold) minPension = try container.decodeIfPresent(Double.self, forKey: .minPension) assetMeansTest = try container.decodeIfPresent(Double.self, forKey: .assetMeansTest) deemedIncomeThreshold = try container.decodeIfPresent(Double.self, forKey: .deemedIncomeThreshold) deemedReturn = try container.decodeIfPresent(Double.self, forKey: .deemedReturn) actualIncome = try container.decodeIfPresent(Double.self, forKey: .actualIncome) totalIncome = try container.decodeIfPresent(Double.self, forKey: .totalIncome) incomeThreshold = try container.decodeIfPresent(Double.self, forKey: .incomeThreshold) incomeTest = try container.decodeIfPresent(Double.self, forKey: .incomeTest) totalSocialSecurity = try container.decodeIfPresent(Double.self, forKey: .totalSocialSecurity) income = try container.decodeIfPresent(Double.self, forKey: .income) fullPensionIndexation = try container.decodeIfPresent(Double.self, forKey: .fullPensionIndexation) minPensionIndexation = try container.decodeIfPresent(Double.self, forKey: .minPensionIndexation) assetThresholdIndexation = try container.decodeIfPresent(Double.self, forKey: .assetThresholdIndexation) incomeThresholdIndexation = try container.decodeIfPresent(Double.self, forKey: .incomeThresholdIndexation) deemedIncomeThresholdIndexation = try container.decodeIfPresent(Double.self, forKey: .deemedIncomeThresholdIndexation) personalAssetsIndexation = try container.decodeIfPresent(Double.self, forKey: .personalAssetsIndexation) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if personalAssets != nil { try container.encode(personalAssets, forKey: .personalAssets) } if assessableAssets != nil { try container.encode(assessableAssets, forKey: .assessableAssets) } if fullPensionPP != nil { try container.encode(fullPensionPP, forKey: .fullPensionPP) } if assetThreshold != nil { try container.encode(assetThreshold, forKey: .assetThreshold) } if minPension != nil { try container.encode(minPension, forKey: .minPension) } if assetMeansTest != nil { try container.encode(assetMeansTest, forKey: .assetMeansTest) } if deemedIncomeThreshold != nil { try container.encode(deemedIncomeThreshold, forKey: .deemedIncomeThreshold) } if deemedReturn != nil { try container.encode(deemedReturn, forKey: .deemedReturn) } if actualIncome != nil { try container.encode(actualIncome, forKey: .actualIncome) } if totalIncome != nil { try container.encode(totalIncome, forKey: .totalIncome) } if incomeThreshold != nil { try container.encode(incomeThreshold, forKey: .incomeThreshold) } if incomeTest != nil { try container.encode(incomeTest, forKey: .incomeTest) } if totalSocialSecurity != nil { try container.encode(totalSocialSecurity, forKey: .totalSocialSecurity) } if income != nil { try container.encode(income, forKey: .income) } if fullPensionIndexation != nil { try container.encode(fullPensionIndexation, forKey: .fullPensionIndexation) } if minPensionIndexation != nil { try container.encode(minPensionIndexation, forKey: .minPensionIndexation) } if assetThresholdIndexation != nil { try container.encode(assetThresholdIndexation, forKey: .assetThresholdIndexation) } if incomeThresholdIndexation != nil { try container.encode(incomeThresholdIndexation, forKey: .incomeThresholdIndexation) } if deemedIncomeThresholdIndexation != nil { try container.encode(deemedIncomeThresholdIndexation, forKey: .deemedIncomeThresholdIndexation) } if personalAssetsIndexation != nil { try container.encode(personalAssetsIndexation, forKey: .personalAssetsIndexation) } } } public class ContributionDto : ProjectableDto { public var code:String? public var index:Int? public var name:String? public var ccy:String? public var contTable:String? public var lookupKey:String? public var isEmployeeCont:Bool? public var employerFlag:Bool? public var type:ContributionType? public var sourceRate:String? public var isTaxable:Bool? public var amount:Double? public var coreAmount:Double? public var freq:Double? public var rate:Double? public var coreRate:Double? public var fromAge:Int? public var toAge:Int? public var salary:Double? public var annualAmount:Double? public var annualCoreAmount:Double? public var isAlwaysOneOff:Bool? public var isOneOff:Bool? public var custom:[String:String] = [:] public var memberRateLookup:[Int:Double] = [:] public var isFromSalary:Bool? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case code case index case name case ccy case contTable case lookupKey case isEmployeeCont case employerFlag case type case sourceRate case isTaxable case amount case coreAmount case freq case rate case coreRate case fromAge case toAge case salary case annualAmount case annualCoreAmount case isAlwaysOneOff case isOneOff case custom case memberRateLookup case isFromSalary } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) code = try container.decodeIfPresent(String.self, forKey: .code) index = try container.decodeIfPresent(Int.self, forKey: .index) name = try container.decodeIfPresent(String.self, forKey: .name) ccy = try container.decodeIfPresent(String.self, forKey: .ccy) contTable = try container.decodeIfPresent(String.self, forKey: .contTable) lookupKey = try container.decodeIfPresent(String.self, forKey: .lookupKey) isEmployeeCont = try container.decodeIfPresent(Bool.self, forKey: .isEmployeeCont) employerFlag = try container.decodeIfPresent(Bool.self, forKey: .employerFlag) type = try container.decodeIfPresent(ContributionType.self, forKey: .type) sourceRate = try container.decodeIfPresent(String.self, forKey: .sourceRate) isTaxable = try container.decodeIfPresent(Bool.self, forKey: .isTaxable) amount = try container.decodeIfPresent(Double.self, forKey: .amount) coreAmount = try container.decodeIfPresent(Double.self, forKey: .coreAmount) freq = try container.decodeIfPresent(Double.self, forKey: .freq) rate = try container.decodeIfPresent(Double.self, forKey: .rate) coreRate = try container.decodeIfPresent(Double.self, forKey: .coreRate) fromAge = try container.decodeIfPresent(Int.self, forKey: .fromAge) toAge = try container.decodeIfPresent(Int.self, forKey: .toAge) salary = try container.decodeIfPresent(Double.self, forKey: .salary) annualAmount = try container.decodeIfPresent(Double.self, forKey: .annualAmount) annualCoreAmount = try container.decodeIfPresent(Double.self, forKey: .annualCoreAmount) isAlwaysOneOff = try container.decodeIfPresent(Bool.self, forKey: .isAlwaysOneOff) isOneOff = try container.decodeIfPresent(Bool.self, forKey: .isOneOff) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] memberRateLookup = try container.decodeIfPresent([Int:Double].self, forKey: .memberRateLookup) ?? [:] isFromSalary = try container.decodeIfPresent(Bool.self, forKey: .isFromSalary) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if code != nil { try container.encode(code, forKey: .code) } if index != nil { try container.encode(index, forKey: .index) } if name != nil { try container.encode(name, forKey: .name) } if ccy != nil { try container.encode(ccy, forKey: .ccy) } if contTable != nil { try container.encode(contTable, forKey: .contTable) } if lookupKey != nil { try container.encode(lookupKey, forKey: .lookupKey) } if isEmployeeCont != nil { try container.encode(isEmployeeCont, forKey: .isEmployeeCont) } if employerFlag != nil { try container.encode(employerFlag, forKey: .employerFlag) } if type != nil { try container.encode(type, forKey: .type) } if sourceRate != nil { try container.encode(sourceRate, forKey: .sourceRate) } if isTaxable != nil { try container.encode(isTaxable, forKey: .isTaxable) } if amount != nil { try container.encode(amount, forKey: .amount) } if coreAmount != nil { try container.encode(coreAmount, forKey: .coreAmount) } if freq != nil { try container.encode(freq, forKey: .freq) } if rate != nil { try container.encode(rate, forKey: .rate) } if coreRate != nil { try container.encode(coreRate, forKey: .coreRate) } if fromAge != nil { try container.encode(fromAge, forKey: .fromAge) } if toAge != nil { try container.encode(toAge, forKey: .toAge) } if salary != nil { try container.encode(salary, forKey: .salary) } if annualAmount != nil { try container.encode(annualAmount, forKey: .annualAmount) } if annualCoreAmount != nil { try container.encode(annualCoreAmount, forKey: .annualCoreAmount) } if isAlwaysOneOff != nil { try container.encode(isAlwaysOneOff, forKey: .isAlwaysOneOff) } if isOneOff != nil { try container.encode(isOneOff, forKey: .isOneOff) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } if memberRateLookup.count > 0 { try container.encode(memberRateLookup, forKey: .memberRateLookup) } if isFromSalary != nil { try container.encode(isFromSalary, forKey: .isFromSalary) } } } public class FeeDto : ProjectableDto { public var name:String? public var ccy:String? public var amount:Double? public var freq:Double? public var annualAmount:Double? public var rate:Double? public var isTaxable:Bool? public var fromAge:Int? public var toAge:Int? public var custom:[String:String] = [:] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case name case ccy case amount case freq case annualAmount case rate case isTaxable case fromAge case toAge case custom } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) name = try container.decodeIfPresent(String.self, forKey: .name) ccy = try container.decodeIfPresent(String.self, forKey: .ccy) amount = try container.decodeIfPresent(Double.self, forKey: .amount) freq = try container.decodeIfPresent(Double.self, forKey: .freq) annualAmount = try container.decodeIfPresent(Double.self, forKey: .annualAmount) rate = try container.decodeIfPresent(Double.self, forKey: .rate) isTaxable = try container.decodeIfPresent(Bool.self, forKey: .isTaxable) fromAge = try container.decodeIfPresent(Int.self, forKey: .fromAge) toAge = try container.decodeIfPresent(Int.self, forKey: .toAge) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if name != nil { try container.encode(name, forKey: .name) } if ccy != nil { try container.encode(ccy, forKey: .ccy) } if amount != nil { try container.encode(amount, forKey: .amount) } if freq != nil { try container.encode(freq, forKey: .freq) } if annualAmount != nil { try container.encode(annualAmount, forKey: .annualAmount) } if rate != nil { try container.encode(rate, forKey: .rate) } if isTaxable != nil { try container.encode(isTaxable, forKey: .isTaxable) } if fromAge != nil { try container.encode(fromAge, forKey: .fromAge) } if toAge != nil { try container.encode(toAge, forKey: .toAge) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } } } public class FeeCapArrangementDto : ProjectableDto { public var name:String? public var amount:Double? public var indexationRateSeries:Int? public var rate:Double? public var feesIncluded:[Int] = [] public var fromTime:Int? public var toTime:Int? public var custom:[String:String] = [:] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case name case amount case indexationRateSeries case rate case feesIncluded case fromTime case toTime case custom } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) name = try container.decodeIfPresent(String.self, forKey: .name) amount = try container.decodeIfPresent(Double.self, forKey: .amount) indexationRateSeries = try container.decodeIfPresent(Int.self, forKey: .indexationRateSeries) rate = try container.decodeIfPresent(Double.self, forKey: .rate) feesIncluded = try container.decodeIfPresent([Int].self, forKey: .feesIncluded) ?? [] fromTime = try container.decodeIfPresent(Int.self, forKey: .fromTime) toTime = try container.decodeIfPresent(Int.self, forKey: .toTime) custom = try container.decodeIfPresent([String:String].self, forKey: .custom) ?? [:] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if name != nil { try container.encode(name, forKey: .name) } if amount != nil { try container.encode(amount, forKey: .amount) } if indexationRateSeries != nil { try container.encode(indexationRateSeries, forKey: .indexationRateSeries) } if rate != nil { try container.encode(rate, forKey: .rate) } if feesIncluded.count > 0 { try container.encode(feesIncluded, forKey: .feesIncluded) } if fromTime != nil { try container.encode(fromTime, forKey: .fromTime) } if toTime != nil { try container.encode(toTime, forKey: .toTime) } if custom.count > 0 { try container.encode(custom, forKey: .custom) } } } public class ProductAllocationDto : Codable { public var name:String? public var fromAge:Int? public var optAlloc:ProductAllocationMappingDto? public var totalAlloc:Double? required public init(){} } public class FeePointDto : ProjectionPointDto { public var yearsSinceFromAge:Double? public var period:Double? public var amount:Double? public var rateAmount:Double? public var totalTaxDeductible:Double? public var totalNonTaxDeductible:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case yearsSinceFromAge case period case amount case rateAmount case totalTaxDeductible case totalNonTaxDeductible } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) yearsSinceFromAge = try container.decodeIfPresent(Double.self, forKey: .yearsSinceFromAge) period = try container.decodeIfPresent(Double.self, forKey: .period) amount = try container.decodeIfPresent(Double.self, forKey: .amount) rateAmount = try container.decodeIfPresent(Double.self, forKey: .rateAmount) totalTaxDeductible = try container.decodeIfPresent(Double.self, forKey: .totalTaxDeductible) totalNonTaxDeductible = try container.decodeIfPresent(Double.self, forKey: .totalNonTaxDeductible) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if yearsSinceFromAge != nil { try container.encode(yearsSinceFromAge, forKey: .yearsSinceFromAge) } if period != nil { try container.encode(period, forKey: .period) } if amount != nil { try container.encode(amount, forKey: .amount) } if rateAmount != nil { try container.encode(rateAmount, forKey: .rateAmount) } if totalTaxDeductible != nil { try container.encode(totalTaxDeductible, forKey: .totalTaxDeductible) } if totalNonTaxDeductible != nil { try container.encode(totalNonTaxDeductible, forKey: .totalNonTaxDeductible) } } } public class FeeCapPointDto : ProjectionPointDto { public var period:Double? public var totalFeeCap:Double? public var taxDeductibleFees:Double? public var nonTaxDeductibleFees:Double? public var offsetTaxDeductible:Double? public var offsetNonTaxDeductible:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case period case totalFeeCap case taxDeductibleFees case nonTaxDeductibleFees case offsetTaxDeductible case offsetNonTaxDeductible } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) period = try container.decodeIfPresent(Double.self, forKey: .period) totalFeeCap = try container.decodeIfPresent(Double.self, forKey: .totalFeeCap) taxDeductibleFees = try container.decodeIfPresent(Double.self, forKey: .taxDeductibleFees) nonTaxDeductibleFees = try container.decodeIfPresent(Double.self, forKey: .nonTaxDeductibleFees) offsetTaxDeductible = try container.decodeIfPresent(Double.self, forKey: .offsetTaxDeductible) offsetNonTaxDeductible = try container.decodeIfPresent(Double.self, forKey: .offsetNonTaxDeductible) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if period != nil { try container.encode(period, forKey: .period) } if totalFeeCap != nil { try container.encode(totalFeeCap, forKey: .totalFeeCap) } if taxDeductibleFees != nil { try container.encode(taxDeductibleFees, forKey: .taxDeductibleFees) } if nonTaxDeductibleFees != nil { try container.encode(nonTaxDeductibleFees, forKey: .nonTaxDeductibleFees) } if offsetTaxDeductible != nil { try container.encode(offsetTaxDeductible, forKey: .offsetTaxDeductible) } if offsetNonTaxDeductible != nil { try container.encode(offsetNonTaxDeductible, forKey: .offsetNonTaxDeductible) } } } public class TotalContributionDto : ProjectableDto { required public init(){ super.init() } required public init(from decoder: Decoder) throws { try super.init(from: decoder) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) } } public class TotalContributionPointDto : ProjectionPointDto { public var contIndexation:Double? public var totalMemberNonTaxableSalaryCont:Double? public var totalMemberNonTaxableNonSalaryCont:Double? public var threshold:Double? public var coContAmt:Double? public var contCapsTotalEmployer:Double? public var transferBalanceCap:Double? public var contCapsTotalMemberTaxable:Double? public var contCapsTotalMemberNonTaxableSalary:Double? public var contCapsTotalMemberNonTaxableNonSalary:Double? public var cappedContTotalEmployer:Double? public var cappedContTotalMemberTaxable:Double? public var cappedContTotalMemberNonTaxableSalaryCont:Double? public var cappedContTotalMemberNonTaxableNonSalaryCont:Double? public var auLowIncomeSuperTaxOffset:Double? public var contTax:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case contIndexation case totalMemberNonTaxableSalaryCont case totalMemberNonTaxableNonSalaryCont case threshold case coContAmt case contCapsTotalEmployer case transferBalanceCap case contCapsTotalMemberTaxable case contCapsTotalMemberNonTaxableSalary case contCapsTotalMemberNonTaxableNonSalary case cappedContTotalEmployer case cappedContTotalMemberTaxable case cappedContTotalMemberNonTaxableSalaryCont case cappedContTotalMemberNonTaxableNonSalaryCont case auLowIncomeSuperTaxOffset case contTax } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) contIndexation = try container.decodeIfPresent(Double.self, forKey: .contIndexation) totalMemberNonTaxableSalaryCont = try container.decodeIfPresent(Double.self, forKey: .totalMemberNonTaxableSalaryCont) totalMemberNonTaxableNonSalaryCont = try container.decodeIfPresent(Double.self, forKey: .totalMemberNonTaxableNonSalaryCont) threshold = try container.decodeIfPresent(Double.self, forKey: .threshold) coContAmt = try container.decodeIfPresent(Double.self, forKey: .coContAmt) contCapsTotalEmployer = try container.decodeIfPresent(Double.self, forKey: .contCapsTotalEmployer) transferBalanceCap = try container.decodeIfPresent(Double.self, forKey: .transferBalanceCap) contCapsTotalMemberTaxable = try container.decodeIfPresent(Double.self, forKey: .contCapsTotalMemberTaxable) contCapsTotalMemberNonTaxableSalary = try container.decodeIfPresent(Double.self, forKey: .contCapsTotalMemberNonTaxableSalary) contCapsTotalMemberNonTaxableNonSalary = try container.decodeIfPresent(Double.self, forKey: .contCapsTotalMemberNonTaxableNonSalary) cappedContTotalEmployer = try container.decodeIfPresent(Double.self, forKey: .cappedContTotalEmployer) cappedContTotalMemberTaxable = try container.decodeIfPresent(Double.self, forKey: .cappedContTotalMemberTaxable) cappedContTotalMemberNonTaxableSalaryCont = try container.decodeIfPresent(Double.self, forKey: .cappedContTotalMemberNonTaxableSalaryCont) cappedContTotalMemberNonTaxableNonSalaryCont = try container.decodeIfPresent(Double.self, forKey: .cappedContTotalMemberNonTaxableNonSalaryCont) auLowIncomeSuperTaxOffset = try container.decodeIfPresent(Double.self, forKey: .auLowIncomeSuperTaxOffset) contTax = try container.decodeIfPresent(Double.self, forKey: .contTax) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if contIndexation != nil { try container.encode(contIndexation, forKey: .contIndexation) } if totalMemberNonTaxableSalaryCont != nil { try container.encode(totalMemberNonTaxableSalaryCont, forKey: .totalMemberNonTaxableSalaryCont) } if totalMemberNonTaxableNonSalaryCont != nil { try container.encode(totalMemberNonTaxableNonSalaryCont, forKey: .totalMemberNonTaxableNonSalaryCont) } if threshold != nil { try container.encode(threshold, forKey: .threshold) } if coContAmt != nil { try container.encode(coContAmt, forKey: .coContAmt) } if contCapsTotalEmployer != nil { try container.encode(contCapsTotalEmployer, forKey: .contCapsTotalEmployer) } if transferBalanceCap != nil { try container.encode(transferBalanceCap, forKey: .transferBalanceCap) } if contCapsTotalMemberTaxable != nil { try container.encode(contCapsTotalMemberTaxable, forKey: .contCapsTotalMemberTaxable) } if contCapsTotalMemberNonTaxableSalary != nil { try container.encode(contCapsTotalMemberNonTaxableSalary, forKey: .contCapsTotalMemberNonTaxableSalary) } if contCapsTotalMemberNonTaxableNonSalary != nil { try container.encode(contCapsTotalMemberNonTaxableNonSalary, forKey: .contCapsTotalMemberNonTaxableNonSalary) } if cappedContTotalEmployer != nil { try container.encode(cappedContTotalEmployer, forKey: .cappedContTotalEmployer) } if cappedContTotalMemberTaxable != nil { try container.encode(cappedContTotalMemberTaxable, forKey: .cappedContTotalMemberTaxable) } if cappedContTotalMemberNonTaxableSalaryCont != nil { try container.encode(cappedContTotalMemberNonTaxableSalaryCont, forKey: .cappedContTotalMemberNonTaxableSalaryCont) } if cappedContTotalMemberNonTaxableNonSalaryCont != nil { try container.encode(cappedContTotalMemberNonTaxableNonSalaryCont, forKey: .cappedContTotalMemberNonTaxableNonSalaryCont) } if auLowIncomeSuperTaxOffset != nil { try container.encode(auLowIncomeSuperTaxOffset, forKey: .auLowIncomeSuperTaxOffset) } if contTax != nil { try container.encode(contTax, forKey: .contTax) } } } public class ContributionProjectionDto : Codable { public var item:ContributionDto? public var projection:[ContributionPointDto] = [] required public init(){} } public enum SalaryType : String, Codable { case Gross case Net } public class SalaryChangeDto : Codable { public var fromAge:Int? public var amount:Double? required public init(){} } public class CareerBreakDto : Codable { public var fromAge:Int? public var toAge:Int? public var workingRate:Double? required public init(){} } public class ProductAllocationMappingDto : Codable { public var current:[String:Double] = [:] public var future:[String:Double] = [:] required public init(){} } public class ContributionPointDto : ProjectionPointDto { public var period:Double? public var salary:Double? public var rateLookupValue:String? public var linkedContRate:Double? public var rate:Double? public var amount:Double? public var rateAmount:Double? public var contAmount:Double? public var totalMemberTaxable:Double? public var totalMemberNonTaxable:Double? public var totalMemberNonTaxableSalary:Double? public var totalMemberNonTaxableNonSalary:Double? public var totalEmployer:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case period case salary case rateLookupValue case linkedContRate case rate case amount case rateAmount case contAmount case totalMemberTaxable case totalMemberNonTaxable case totalMemberNonTaxableSalary case totalMemberNonTaxableNonSalary case totalEmployer } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) period = try container.decodeIfPresent(Double.self, forKey: .period) salary = try container.decodeIfPresent(Double.self, forKey: .salary) rateLookupValue = try container.decodeIfPresent(String.self, forKey: .rateLookupValue) linkedContRate = try container.decodeIfPresent(Double.self, forKey: .linkedContRate) rate = try container.decodeIfPresent(Double.self, forKey: .rate) amount = try container.decodeIfPresent(Double.self, forKey: .amount) rateAmount = try container.decodeIfPresent(Double.self, forKey: .rateAmount) contAmount = try container.decodeIfPresent(Double.self, forKey: .contAmount) totalMemberTaxable = try container.decodeIfPresent(Double.self, forKey: .totalMemberTaxable) totalMemberNonTaxable = try container.decodeIfPresent(Double.self, forKey: .totalMemberNonTaxable) totalMemberNonTaxableSalary = try container.decodeIfPresent(Double.self, forKey: .totalMemberNonTaxableSalary) totalMemberNonTaxableNonSalary = try container.decodeIfPresent(Double.self, forKey: .totalMemberNonTaxableNonSalary) totalEmployer = try container.decodeIfPresent(Double.self, forKey: .totalEmployer) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if period != nil { try container.encode(period, forKey: .period) } if salary != nil { try container.encode(salary, forKey: .salary) } if rateLookupValue != nil { try container.encode(rateLookupValue, forKey: .rateLookupValue) } if linkedContRate != nil { try container.encode(linkedContRate, forKey: .linkedContRate) } if rate != nil { try container.encode(rate, forKey: .rate) } if amount != nil { try container.encode(amount, forKey: .amount) } if rateAmount != nil { try container.encode(rateAmount, forKey: .rateAmount) } if contAmount != nil { try container.encode(contAmount, forKey: .contAmount) } if totalMemberTaxable != nil { try container.encode(totalMemberTaxable, forKey: .totalMemberTaxable) } if totalMemberNonTaxable != nil { try container.encode(totalMemberNonTaxable, forKey: .totalMemberNonTaxable) } if totalMemberNonTaxableSalary != nil { try container.encode(totalMemberNonTaxableSalary, forKey: .totalMemberNonTaxableSalary) } if totalMemberNonTaxableNonSalary != nil { try container.encode(totalMemberNonTaxableNonSalary, forKey: .totalMemberNonTaxableNonSalary) } if totalEmployer != nil { try container.encode(totalEmployer, forKey: .totalEmployer) } } } public class SiteContext : Codable { public var echoUri:String? public var branding:Branding? public var modules:[String] = [] public var conditionalAccess:ConditionalAccess? public var colorScheme:ColorScheme? public var carriers:[ConfigurationVersionCarrier] = [] public var country:String? public var defaultLanguage:String? public var availableLanguages:[String] = [] public var currency:String? public var employer:Entity? public var carrier:CarrierEntity? public var consultant:Entity? public var member:Member? public var counsellingOptions:CounsellingOptions? public var dkCalculatorConfiguration:DkCalculatorConfiguration? public var dkPensionsInfoSsoTicket:SecurityToken? public var dkPensionsInfo:DkPensionsInfo? public var deCalculatorConfiguration:DeCalculatorConfiguration? public var disabilityInsurancePlan:DisabilityInsurancePlan? public var criticalIllnessInsurancePlan:CriticalIllnessInsurancePlan? public var deathInsurancePlan:DeathInsurancePlan? public var healthInsurancePlan:HealthInsurancePlan? public var accidentInsurancePlan:AccidentInsurancePlan? public var dentalInsurancePlan:DentalInsurancePlan? public var seniorCitizenConcept:SeniorCitizenConcept? public var retirementPlan:RetirementPlan? public var deRetirementPlans:DeRetirementPlans? public var preventiveTreatment:PreventiveTreatment? public var isPensionScheme:Bool? public var pathFinder:PathFinder? public var financialWellBeing:FinancialWellbeing? public var useInformalLanguage:Bool? public var usesSSO:Bool? public var authenticationMethod:AuthenticationMethod? public var cprNumberNeeded:Bool? public var activationCodeRequired:Bool? public var employerEmailDomain:String? public var version:String? public var taxPseudocodeURL:String? public var calculatorConfiguration:CalculatorData? public var configurationIds:ConfigurationIds? public var documentList:[Document] = [] public var newDocumentDaySpan:Int? public var sasTokenDurationInSeconds:Double? public var dataRetentionPeriodInYears:Int? public var periods:[Period] = [] public var groupConfig:ConfigurationVersionGroupConfig? public var memberDocumentConfig:ConfigurationVersionMemberDocumentConfig? public var pensionSightClient:PensionSightClient? public var userResultConfiguration:[UserResultConfiguration] = [] public var userSearchConfiguration:[UserSearchConfiguration] = [] public var userResultConfigurationAdminProxy:[UserResultConfigurationAdminProxy] = [] public var userSearchConfigurationAdminProxy:[UserSearchConfigurationAdminProxy] = [] public var frCompanyPlans:FrCompanyPlans? public var esRetirementPlans:EsRetirementPlans? public var frCalculatorConfiguration:FrCalculatorConfiguration? public var frFundSetups:[FrFundSetup] = [] public var frPlanSetups:[FrPlanSetup] = [] public var frPreviousPlansSetups:[FrPreviousPlansSetup] = [] public var frIndividualPlanFunds:[String] = [] public var beRetirementPlans:[BeRetirementPlans] = [] public var beContributions:BeContributions? public var privateClientProducts:[PrivateClientProduct] = [] public var contactUs:ConfigurationVersionEmailSetting? public var emailSettings:[ConfigurationVersionEmailSetting] = [] public var formTypeFieldsConfiguration:[FormTypeFieldsConfiguration] = [] public var formTypeLookupConfiguration:[FormTypeLookupConfiguration] = [] public var recommendation:ConfigurationVersionRecommendation? public var recommendationProduct:ConfigurationVersionRecommendationProduct? public var ptFundValues:[FundValue] = [] public var ptFundsSetups:[PtFund] = [] public var ptContributionData:PtContribution? public var ptInvestmentAllocations:[PtInvestmentAllocation] = [] public var ptInvestmentSetup:PtInvestmentSetup? public var ptFundLifecycleList:PtFundLifecycleList? public var ptParticipantStatusSetup:PtParticipantStatusSetup? public var ptMatchingContributionList:[PtMatchingContribution] = [] public var votingPollSetup:ConfigurationVersionVotingPollSetup? public var votingPollConfig:[ConfigurationVersionVotingPollConfig] = [] public var ptCalculatorConfiguration:PtCalculatorConfiguration? public var bookingInfo:DkBookingInfo? public var dkPublicContactUsSetup:ConfigurationVersionPublicContactUsSetup? required public init(){} }