/* Options: Date: 2026-02-14 10:14:20 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: GetCreditNoteById.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * Credit Note */ // @Route("/creditNote/{Id}", "GET") // @Api(Description="Credit Note") // @ApiResponse(Description="Credit Note 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 GetCreditNoteById : IReturn, IGetDocumentById, Codable { public typealias Return = InvoiceMessage /** * Credit Note ID or Token */ // @ApiMember(Description="Credit Note ID or Token", ExcludeInSchema=true, ParameterType="path") public var id:String? required public init(){} } public class InvoiceMessage : Codable { public var header:Header? public var invoice:InvoiceClass? 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 InvoiceClass : BaseDocument { public var countryOfSupplyOfGoods:String? public var buyer:TransactionalParty? public var seller:TransactionalParty? public var payee:TransactionalParty? public var payer:TransactionalParty? public var shipFrom:TransactionalParty? public var shipTo:TransactionalParty? public var ultimateConsignee:TransactionalParty? public var supplierAccountReceivable:String? public var invoiceIdentification:String? public var invoice:Invoice? public var salesOrder:DocumentReference? public var purchaseOrder:DocumentReference? public var deliveryNote:DocumentReference? public var tradeAgreement:DocumentReference? public var shipmentTransportationInformation:ShipmentTransportationInformation? public var paymentTerms:String? public var invoiceLineItem:[InvoiceLineItem] = [] public var invoiceTotals:InvoiceTotals? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case countryOfSupplyOfGoods case buyer case seller case payee case payer case shipFrom case shipTo case ultimateConsignee case supplierAccountReceivable case invoiceIdentification case invoice case salesOrder case purchaseOrder case deliveryNote case tradeAgreement case shipmentTransportationInformation case paymentTerms case invoiceLineItem case invoiceTotals } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) countryOfSupplyOfGoods = try container.decodeIfPresent(String.self, forKey: .countryOfSupplyOfGoods) buyer = try container.decodeIfPresent(TransactionalParty.self, forKey: .buyer) seller = try container.decodeIfPresent(TransactionalParty.self, forKey: .seller) payee = try container.decodeIfPresent(TransactionalParty.self, forKey: .payee) payer = try container.decodeIfPresent(TransactionalParty.self, forKey: .payer) shipFrom = try container.decodeIfPresent(TransactionalParty.self, forKey: .shipFrom) shipTo = try container.decodeIfPresent(TransactionalParty.self, forKey: .shipTo) ultimateConsignee = try container.decodeIfPresent(TransactionalParty.self, forKey: .ultimateConsignee) supplierAccountReceivable = try container.decodeIfPresent(String.self, forKey: .supplierAccountReceivable) invoiceIdentification = try container.decodeIfPresent(String.self, forKey: .invoiceIdentification) invoice = try container.decodeIfPresent(Invoice.self, forKey: .invoice) salesOrder = try container.decodeIfPresent(DocumentReference.self, forKey: .salesOrder) purchaseOrder = try container.decodeIfPresent(DocumentReference.self, forKey: .purchaseOrder) deliveryNote = try container.decodeIfPresent(DocumentReference.self, forKey: .deliveryNote) tradeAgreement = try container.decodeIfPresent(DocumentReference.self, forKey: .tradeAgreement) shipmentTransportationInformation = try container.decodeIfPresent(ShipmentTransportationInformation.self, forKey: .shipmentTransportationInformation) paymentTerms = try container.decodeIfPresent(String.self, forKey: .paymentTerms) invoiceLineItem = try container.decodeIfPresent([InvoiceLineItem].self, forKey: .invoiceLineItem) ?? [] invoiceTotals = try container.decodeIfPresent(InvoiceTotals.self, forKey: .invoiceTotals) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if countryOfSupplyOfGoods != nil { try container.encode(countryOfSupplyOfGoods, forKey: .countryOfSupplyOfGoods) } if buyer != nil { try container.encode(buyer, forKey: .buyer) } if seller != nil { try container.encode(seller, forKey: .seller) } if payee != nil { try container.encode(payee, forKey: .payee) } if payer != nil { try container.encode(payer, forKey: .payer) } if shipFrom != nil { try container.encode(shipFrom, forKey: .shipFrom) } if shipTo != nil { try container.encode(shipTo, forKey: .shipTo) } if ultimateConsignee != nil { try container.encode(ultimateConsignee, forKey: .ultimateConsignee) } if supplierAccountReceivable != nil { try container.encode(supplierAccountReceivable, forKey: .supplierAccountReceivable) } if invoiceIdentification != nil { try container.encode(invoiceIdentification, forKey: .invoiceIdentification) } if invoice != nil { try container.encode(invoice, forKey: .invoice) } if salesOrder != nil { try container.encode(salesOrder, forKey: .salesOrder) } if purchaseOrder != nil { try container.encode(purchaseOrder, forKey: .purchaseOrder) } if deliveryNote != nil { try container.encode(deliveryNote, forKey: .deliveryNote) } if tradeAgreement != nil { try container.encode(tradeAgreement, forKey: .tradeAgreement) } if shipmentTransportationInformation != nil { try container.encode(shipmentTransportationInformation, forKey: .shipmentTransportationInformation) } if paymentTerms != nil { try container.encode(paymentTerms, forKey: .paymentTerms) } if invoiceLineItem.count > 0 { try container.encode(invoiceLineItem, forKey: .invoiceLineItem) } if invoiceTotals != nil { try container.encode(invoiceTotals, forKey: .invoiceTotals) } } } 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(){} } // @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 Invoice : Codable { public var creationDate:Date? public var revisionNumber:Int? public var entityIdentification:String? required public init(){} } public class ShipmentTransportationInformation : Codable { public var carrier:TransactionalParty? public var freightForwarder:TransactionalParty? required public init(){} } public class InvoiceLineItem : Codable { public var lineNumber:Int? public var parentLineItemNumber:String? public var invoicedQuantity:Quantity? public var transactionalTradeItem:TransactionalTradeItem? public var itemPriceBaseQuantity:Double? public var retailPriceExcludingExcise:Double? public var recommendedRetailPrice:Double? public var taxInformation:TaxInformation? public var amountExclusiveAllowancesCharges:Double? public var amountInclusiveAllowancesCharges:Double? public var itemPriceExclusiveAllowancesCharges:Double? public var itemPriceInclusiveAllowancesCharges:Double? public var tradeAgreement:String? public var deliveryNote:String? public var promotionalDeal:DocumentReference? public var invoiceAllowanceCharge:[InvoiceAllowanceCharge] = [] public var extendedProperties:Extension? required public init(){} } public class InvoiceTotals : Codable { public var baseAmount:Double? public var prepaidAmount:Double? public var prepaidAmountDate:Date? public var totalAmountInvoiceAllowancesCharges:Double? public var totalLineAmountInclusiveAllowancesCharges:Double? public var totalTaxAmount:Double? public var totalInvoiceAmount:Double? public var totalInvoiceAmountPayable:Double? 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 AllowanceCharge : Codable { public var allowanceChargeAmount:Double? public var allowanceChargePercentage:Double? public var allowanceChargeType:String? public var allowanceOrChargeType:String? public var amountPerUnit:Double? public var baseAmount:Double? public var baseNumberOfUnits:String? public var bracketIdentifier:String? public var effectiveDateType:Date? public var sequenceNumber:String? public var settlementType:String? public var specialServiceType:String? public var allowanceChargeDescription:String? 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 Quantity : Codable { public var value:Double? public var measurementUnitCode:String? public var codeListVersion:String? required public init(){} } public class TransactionalTradeItem : Codable { public var gtin:String? public var additionalTradeItemIdentification:[AvpList] = [] public var tradeItemQuantity:Double? public var tradeItemDescription:String? public var productVariantIdentifier:String? public var itemTypeCode:String? public var tradeItemDataOwner:String? public var butterFatReference:String? public var transactionalItemData:[TransactionalItemData] = [] public var colour:[Colour] = [] public var size:Size? public var tradeItemClassification:TradeItemClassification? public var avpList:[AvpList] = [] required public init(){} } public class TaxInformation : Codable { public var taxPercentage:Double? public var taxAmount:Double? required public init(){} } public class InvoiceAllowanceCharge : Codable { public var allowanceCharge:AllowanceCharge? public var leviedDutyFeeTax:TaxInformation? required public init(){} } public class Extension : 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 TransactionalItemData : Codable { public var availableForSaleDate:Date? public var batchNumber:String? public var bestBeforeDate:Date? public var countryOfOrigin:String? public var itemExpirationDate:Date? public var lotNumber:String? public var packagingDate:Date? public var productionDate:Date? public var productQualityIndication:String? public var sellByDate:Date? public var serialNumber:[String] = [] public var shelfLife:String? public var tradeItemQuantity:Int? public var itemInContactWithFoodProduct:Bool? public var transactionalItemWeight:[TransactionalItem] = [] public var transactionalItemVolume:[TransactionalItem] = [] public var serialNumberRange:[SerialNumberRange] = [] public var transactionalItemDimensions:[TransactionalItemDimension] = [] public var transactionalItemLogisticUnitInformation:TransactionalItemLogisticUnitInformation? public var transactionalItemDataCarrierAndIdentification:TransactionalItemDataCarrierAndIdentification? public var tradeItemWaste:[TradeItemWaste] = [] public var transactionalItemOrganicInformation:TransactionalItemOrganicInformation? public var avpList:[AvpList] = [] required public init(){} } public class Colour : Codable { public var colourCode:String? public var colourDescription:String? required public init(){} } public class Size : Codable { public var descriptiveSize:String? public var sizeCode:String? required public init(){} } public class TradeItemClassification : Codable { public var gpcCategoryCode:String? public var additionalTradeItemClassificationCode:[AvpList] = [] public var gpcCategoryName:String? public var gpcAttribute:[AvpList] = [] required public init(){} } public class TransactionalItem : Codable { public var measurementUnitCode:String? public var measurementType:String? public var measurementValue:String? required public init(){} } public class SerialNumberRange : Codable { public var maximumValue:String? public var minimumValue:String? required public init(){} } public class TransactionalItemDimension : Codable { public var measurementUnitCode:String? public var depth:String? public var height:String? public var width:String? required public init(){} } public class TransactionalItemLogisticUnitInformation : Codable { public var numberOfLayers:Int? public var numberOfUnitsPerLayer:Int? public var numberOfUnitsPerPallet:Int? public var packagingTerms:String? public var packageTypeCode:String? public var maximumStackingFactor:Int? public var returnablePackageTransportCostPayment:String? public var dimensionsOfLogisticUnit:[TransactionalItemDimension] = [] required public init(){} } public class TransactionalItemDataCarrierAndIdentification : Codable { public var gs1TransactionalItemIdentificationKey:String? public var dataCarrier:String? required public init(){} } public class TradeItemWaste : Codable { public var wasteIdentification:String? public var typeOfWaste:[AvpList] = [] required public init(){} } public class TransactionalItemOrganicInformation : Codable { public var isTradeItemOrganic:Bool? public var organicCertification:String? required public init(){} }