/* Options: Date: 2026-02-14 11:50:06 SwiftVersion: 6.0 Version: 10.04 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://stf-api-uat.data-xchange.co.za //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: GetSettlementById.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * Settlement */ // @Route("/settlement/{Id}", "GET") // @Api(Description="Settlement") // @ApiResponse(Description="Settlement data", IsDefaultResponse=true, StatusCode=200) // @ApiResponse(Description="No Content", ResponseType=typeof(IReturnVoid), StatusCode=204) // @ApiResponse(Description="Specified argument was out of the range of valid values.", ResponseType=typeof(ArgumentOutOfRangeException), StatusCode=400) public class GetSettlementById : IReturn, IGetDocumentById, Codable { public typealias Return = SettlementMessage /** * Settlement ID or Token */ // @ApiMember(Description="Settlement ID or Token", ExcludeInSchema=true, ParameterType="path") public var id:String? required public init(){} } public class SettlementMessage : Codable { public var header:Header? public var settlement:Settlement? required public init(){} } public protocol IGetDocumentById : ISingleEntityQuery { } public protocol ISingleEntityQuery { var id:String? { get set } } // @DataContract public class Header : Codable { // @DataMember(Name="documentIdentification") public var documentIdentification:DocumentIdentification? // @DataMember(Name="sender") public var sender:Partner? // @DataMember(Name="receiver") public var receiver:Partner? required public init(){} } public class TransactionalParty : Ecom_PartyIdentificationType { public var contact:[Contact] = [] public var address:Address? public var communicationChannel:[AvpList] = [] public var financialInstitutionInformation:FinancialInstitutionInformation? public var dutyFeeTaxRegistration:String? public var entityIdentification:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case contact case address case communicationChannel case financialInstitutionInformation case dutyFeeTaxRegistration case entityIdentification } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) contact = try container.decodeIfPresent([Contact].self, forKey: .contact) ?? [] address = try container.decodeIfPresent(Address.self, forKey: .address) communicationChannel = try container.decodeIfPresent([AvpList].self, forKey: .communicationChannel) ?? [] financialInstitutionInformation = try container.decodeIfPresent(FinancialInstitutionInformation.self, forKey: .financialInstitutionInformation) dutyFeeTaxRegistration = try container.decodeIfPresent(String.self, forKey: .dutyFeeTaxRegistration) entityIdentification = try container.decodeIfPresent(String.self, forKey: .entityIdentification) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if contact.count > 0 { try container.encode(contact, forKey: .contact) } if address != nil { try container.encode(address, forKey: .address) } if communicationChannel.count > 0 { try container.encode(communicationChannel, forKey: .communicationChannel) } if financialInstitutionInformation != nil { try container.encode(financialInstitutionInformation, forKey: .financialInstitutionInformation) } if dutyFeeTaxRegistration != nil { try container.encode(dutyFeeTaxRegistration, forKey: .dutyFeeTaxRegistration) } if entityIdentification != nil { try container.encode(entityIdentification, forKey: .entityIdentification) } } } public enum DocumentAction : String, Codable { case ADD case CHANGE_BY_REFRESH case DELETE case REJECTED } public enum DocumentStatus : String, Codable { case ADDITIONAL_TRANSMISSION case COPY case ORIGINAL } public class AvpList : Codable { public var code:String? public var value:String? required public init(){} } public class BaseDocument : Codable { public var currencyCode:String? public var creationDateTime:Date? public var documentActionCode:DocumentAction? public var documentStatusCode:DocumentStatus? public var documentStructureVersion:String? public var lastUpdateDateTime:Date? public var revisionNumber:Int? public var avpList:[AvpList] = [] required public init(){} } public class Settlement : BaseDocument { public var batchIdentification:String? public var paymentEffectiveDate:Date? public var settlementCurrency:String? public var settlementHandlingTypeCode:String? public var totalAmount:Double? public var paymentMethod:PaymentMethod? public var payee:TransactionalParty? public var payer:TransactionalParty? public var remitTo:TransactionalParty? public var settlementIdentification:String? public var settlementLineItem:[SettlementLineItem] = [] public var `extension`:SettlementExtension? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case batchIdentification case paymentEffectiveDate case settlementCurrency case settlementHandlingTypeCode case totalAmount case paymentMethod case payee case payer case remitTo case settlementIdentification case settlementLineItem case `extension` } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) batchIdentification = try container.decodeIfPresent(String.self, forKey: .batchIdentification) paymentEffectiveDate = try container.decodeIfPresent(Date.self, forKey: .paymentEffectiveDate) settlementCurrency = try container.decodeIfPresent(String.self, forKey: .settlementCurrency) settlementHandlingTypeCode = try container.decodeIfPresent(String.self, forKey: .settlementHandlingTypeCode) totalAmount = try container.decodeIfPresent(Double.self, forKey: .totalAmount) paymentMethod = try container.decodeIfPresent(PaymentMethod.self, forKey: .paymentMethod) payee = try container.decodeIfPresent(TransactionalParty.self, forKey: .payee) payer = try container.decodeIfPresent(TransactionalParty.self, forKey: .payer) remitTo = try container.decodeIfPresent(TransactionalParty.self, forKey: .remitTo) settlementIdentification = try container.decodeIfPresent(String.self, forKey: .settlementIdentification) settlementLineItem = try container.decodeIfPresent([SettlementLineItem].self, forKey: .settlementLineItem) ?? [] `extension` = try container.decodeIfPresent(SettlementExtension.self, forKey: .`extension`) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if batchIdentification != nil { try container.encode(batchIdentification, forKey: .batchIdentification) } if paymentEffectiveDate != nil { try container.encode(paymentEffectiveDate, forKey: .paymentEffectiveDate) } if settlementCurrency != nil { try container.encode(settlementCurrency, forKey: .settlementCurrency) } if settlementHandlingTypeCode != nil { try container.encode(settlementHandlingTypeCode, forKey: .settlementHandlingTypeCode) } if totalAmount != nil { try container.encode(totalAmount, forKey: .totalAmount) } if paymentMethod != nil { try container.encode(paymentMethod, forKey: .paymentMethod) } if payee != nil { try container.encode(payee, forKey: .payee) } if payer != nil { try container.encode(payer, forKey: .payer) } if remitTo != nil { try container.encode(remitTo, forKey: .remitTo) } if settlementIdentification != nil { try container.encode(settlementIdentification, forKey: .settlementIdentification) } if settlementLineItem.count > 0 { try container.encode(settlementLineItem, forKey: .settlementLineItem) } if `extension` != nil { try container.encode(`extension`, forKey: .`extension`) } } } // @DataContract public class DocumentIdentification : Codable { // @DataMember(Name="identifier") public var identifier:String? // @DataMember(Name="type") public var type:String? // @DataMember(Name="creationDateAndTime") public var creationDateAndTime:Date? required public init(){} } // @DataContract public class Partner : Codable { // @DataMember(Name="identifier") public var identifier:Identifier? // @DataMember(Name="contactInformation") public var contactInformation:[ContactInformation] = [] required public init(){} } public class DocumentReference : Codable { public var creationDateTime:Date? public var revisionNumber:Int? public var lineItemNumber:Int? public var entityIdentification:String? required public init(){} } public class Contact : Codable { public var contactTypeCode:String? public var personName:String? public var departmentName:String? public var jobTitle:String? public var responsibility:String? public var communicationChannel:[CommunicationChannel] = [] required public init(){} } public class Address : Codable { public var streetAddressOne:String? public var streetAddressTwo:String? public var streetAddressThree:String? public var city:String? public var postalCode:String? public var provinceCode:String? public var countryCode:String? required public init(){} } public class FinancialInstitutionInformation : Codable { public var financialInstitutionBranchName:String? public var financialInstitutionName:String? public var financialRoutingNumber:FinancialRoutingNumber? public var financialAccount:FinancialAccount? public var swiftCode:String? public var exportersCode:String? required public init(){} } public class Ecom_PartyIdentificationType : Codable { public var gln:String? public var name:String? public var additionalPartyIdentification:[AvpList] = [] required public init(){} } public class PaymentMethod : Codable { public var automatedClearingHousePaymentFormat:String? public var paymentMethodCode:String? public var paymentMethodIdentification:String? required public init(){} } public class SettlementLineItem : Codable { public var amountPaid:Double? public var lineItemNumber:Int? public var originalAmount:Double? public var settlementAdjustment:[SettlementAdjustment] = [] public var avpList:AvpList? public var debitCreditAdvice:DocumentReference? public var invoice:InvoiceDocumentReference? public var requestForPayment:DocumentReference? public var settlementParty:[SettlementParty] = [] required public init(){} } public class SettlementExtension : Codable { public var settlementExtensionLineItem:[SettlementExtensionLineItem] = [] public var adjustmentAndDiscountSummary:[AdjustmentAndDiscountSummary] = [] public var totalAmountSplit:TotalAmountSplit? required public init(){} } // @DataContract public class Identifier : Codable { // @DataMember(Name="authority") public var authority:String? // @DataMember(Name="text") public var text:String? required public init(){} } // @DataContract public class ContactInformation : Codable { required public init(){} } public class CommunicationChannel : Codable { public var communicationChannelCode:String? public var communicationChannelName:String? public var communicationValue:String? required public init(){} } public class FinancialRoutingNumber : Codable { public var number:String? public var numberTypeCode:String? required public init(){} } public class FinancialAccount : Codable { public var number:String? public var numberTypeCode:String? public var name:String? required public init(){} } public class SettlementAdjustment : Codable { public var adjustmentAmount:Double? public var financialAdjusmentReasonPartyRoleCode:String? public var financialAdjustmentReasonCode:String? public var transactionalReference:TransactionalReference? required public init(){} } public class InvoiceDocumentReference : DocumentReference { public var invoiceTypeCode:String? public var contentOwner:ContentOwner? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case invoiceTypeCode case contentOwner } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) invoiceTypeCode = try container.decodeIfPresent(String.self, forKey: .invoiceTypeCode) contentOwner = try container.decodeIfPresent(ContentOwner.self, forKey: .contentOwner) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if invoiceTypeCode != nil { try container.encode(invoiceTypeCode, forKey: .invoiceTypeCode) } if contentOwner != nil { try container.encode(contentOwner, forKey: .contentOwner) } } } public class SettlementParty : Ecom_PartyIdentification { public var partyRoleCode:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case partyRoleCode } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) partyRoleCode = try container.decodeIfPresent(String.self, forKey: .partyRoleCode) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if partyRoleCode != nil { try container.encode(partyRoleCode, forKey: .partyRoleCode) } } } public class SettlementExtensionLineItem : Codable { public var number:Int? public var documentType:String? public var documentNumber:String? public var itemText:String? required public init(){} } public class AdjustmentAndDiscountSummary : Codable { public var amountTotal:Double? public var amountNett:Double? public var amountVat:Double? public var reasonMessage:String? required public init(){} } public class TotalAmountSplit : Codable { public var amountTotal:Double? public var amountNett:Double? public var amountVat:Double? required public init(){} } public class Ecom_PartyIdentification : Codable { public var additionalPartyIdentification:[AvpList] = [] public var gln:String? required public init(){} } public class TransactionalReference : DocumentReference { public var transactionalReferenceTypeCode:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case transactionalReferenceTypeCode } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) transactionalReferenceTypeCode = try container.decodeIfPresent(String.self, forKey: .transactionalReferenceTypeCode) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if transactionalReferenceTypeCode != nil { try container.encode(transactionalReferenceTypeCode, forKey: .transactionalReferenceTypeCode) } } } public class ContentOwner : Codable { public var gln:String? public var additionalPartyIdentification:[AvpList] = [] required public init(){} }