DX STF Client API

<back to all web services

GetPurchaseConditionById

Purchase Conditions Requests

Purchase Conditions

Requires Authentication
The following routes are available for this service:
GET/api/purchaseCondition/{Id}Get specific Purchase Condition by PurchaseCondition Id
import Foundation
import ServiceStack

/**
* Purchase Conditions
*/
// @Api(Description="Purchase Conditions")
// @ApiResponse(Description="PurchaseCondition 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 GetPurchaseConditionById : IGetDocumentById, Codable
{
    /**
    * Purchase Condition ID or Token
    */
    // @ApiMember(Description="Purchase Condition ID or Token", ExcludeInSchema=true, ParameterType="path")
    public var id:String

    required public init(){}
}

public class PurchaseConditionsMessage : Codable
{
    public var header:Header
    public var purchaseConditions:PurchaseConditions

    required public init(){}
}

// @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(){}
}

// @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(){}
}

// @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 PurchaseConditions : BaseDocument
{
    public var purchaseConditionsCurrencyCode:String
    public var purchaseConditionsLocationInformation:[PurchaseConditionsLocationInformation] = []
    public var currencyExchangeRateInformation:CurrencyExchangeRateInformation
    public var buyer:TransactionalParty
    public var payee:TransactionalParty
    public var payer:TransactionalParty
    public var purchaseConditionsIdentification:String
    public var remitTo:TransactionalParty
    public var seller:TransactionalParty
    public var taxRepresentative:TransactionalParty

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case purchaseConditionsCurrencyCode
        case purchaseConditionsLocationInformation
        case currencyExchangeRateInformation
        case buyer
        case payee
        case payer
        case purchaseConditionsIdentification
        case remitTo
        case seller
        case taxRepresentative
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        purchaseConditionsCurrencyCode = try container.decodeIfPresent(String.self, forKey: .purchaseConditionsCurrencyCode)
        purchaseConditionsLocationInformation = try container.decodeIfPresent([PurchaseConditionsLocationInformation].self, forKey: .purchaseConditionsLocationInformation) ?? []
        currencyExchangeRateInformation = try container.decodeIfPresent(CurrencyExchangeRateInformation.self, forKey: .currencyExchangeRateInformation)
        buyer = try container.decodeIfPresent(TransactionalParty.self, forKey: .buyer)
        payee = try container.decodeIfPresent(TransactionalParty.self, forKey: .payee)
        payer = try container.decodeIfPresent(TransactionalParty.self, forKey: .payer)
        purchaseConditionsIdentification = try container.decodeIfPresent(String.self, forKey: .purchaseConditionsIdentification)
        remitTo = try container.decodeIfPresent(TransactionalParty.self, forKey: .remitTo)
        seller = try container.decodeIfPresent(TransactionalParty.self, forKey: .seller)
        taxRepresentative = try container.decodeIfPresent(TransactionalParty.self, forKey: .taxRepresentative)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if purchaseConditionsCurrencyCode != nil { try container.encode(purchaseConditionsCurrencyCode, forKey: .purchaseConditionsCurrencyCode) }
        if purchaseConditionsLocationInformation.count > 0 { try container.encode(purchaseConditionsLocationInformation, forKey: .purchaseConditionsLocationInformation) }
        if currencyExchangeRateInformation != nil { try container.encode(currencyExchangeRateInformation, forKey: .currencyExchangeRateInformation) }
        if buyer != nil { try container.encode(buyer, forKey: .buyer) }
        if payee != nil { try container.encode(payee, forKey: .payee) }
        if payer != nil { try container.encode(payer, forKey: .payer) }
        if purchaseConditionsIdentification != nil { try container.encode(purchaseConditionsIdentification, forKey: .purchaseConditionsIdentification) }
        if remitTo != nil { try container.encode(remitTo, forKey: .remitTo) }
        if seller != nil { try container.encode(seller, forKey: .seller) }
        if taxRepresentative != nil { try container.encode(taxRepresentative, forKey: .taxRepresentative) }
    }
}

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 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 PurchaseConditionsLocationInformation : Codable
{
    public var purchaseConditionsLineItem:[PurchaseConditionsLineItem] = []
    public var shipFrom:TransactionalParty
    public var shipTo:TransactionalParty

    required public init(){}
}

public class PurchaseConditionsLineItem : Codable
{
    public var discrepancyTolerancePercentage:Double?
    public var lineItemNumber:Int?
    public var packagingTypeCode:String
    public var parentLineItemNumber:Int?
    public var purchaseConditionsQuantity:Quantity
    public var purchaseConditionsCommitmentPeriod:[PurchaseConditionsCommitmentPeriod] = []
    public var purchaseConditionsPriceInformation:[PurchaseConditionsPriceInformation] = []
    public var allowanceCharge:[AllowanceCharge] = []
    public var transactionalTradeItem:TransactionalTradeItem
    public var leviedDutyFeeTax:LeviedDutyFeeTax
    public var avpList:[AvpList] = []
    public var effectivePeriod:DateTimeRange
    public var materialSpecification:DocumentReference
    public var purchaseConditionsQuantityRange:QuantityRange

    required public init(){}
}

public class Quantity : Codable
{
    public var value:Double?
    public var measurementUnitCode:String
    public var codeListVersion:String

    required public init(){}
}

public class PurchaseConditionsCommitmentPeriod : Codable
{
    public var commitmentPeriodDuration:TimeMeasurement
    public var purchaseConditionsCommitmentTypeCode:String

    required public init(){}
}

public class TimeMeasurement : Codable
{
    public var timeMeasurementUnitCode:String
    public var value:Double?

    required public init(){}
}

public class PurchaseConditionsPriceInformation : Codable
{
    public var itemPriceBaseQuantity:Quantity
    public var itemPriceExclusiveAllowancesCharges:Double?
    public var quantityRange:QuantityRange
    public var effectivePeriod:DateTimeRange

    required public init(){}
}

public class QuantityRange : Codable
{
    public var maximumQuantity:Quantity
    public var minimumQuantity:Quantity

    required public init(){}
}

public class DateTimeRange : Codable
{
    public var beginDate:Date
    @TimeSpan public var beginTime:TimeInterval?
    public var endDate:Date?
    @TimeSpan public var endTime:TimeInterval?

    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(){}
}

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 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 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(){}
}

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 LeviedDutyFeeTax : Codable
{
    public var dutyFeeTaxAmount:Double?
    public var dutyFeeTaxBasisAmount:Double?
    public var dutyFeeTaxDescription:String
    public var dutyFeeTaxPercentage:Double?

    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 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 class Ecom_PartyIdentificationType : Codable
{
    public var gln:String
    public var name:String
    public var additionalPartyIdentification:[AvpList] = []

    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 CommunicationChannel : Codable
{
    public var communicationChannelCode:String
    public var communicationChannelName:String
    public var communicationValue:String

    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 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 CurrencyExchangeRateInformation : Codable
{
    public var currencyConversionFromCode:String
    public var currencyConversionToCode:String
    public var exchangeRate:Int?
    public var exchangeRateDateTime:Date?

    required public init(){}
}


Swift GetPurchaseConditionById DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /api/purchaseCondition/{Id} HTTP/1.1 
Host: stf-api-uat.data-xchange.co.za 
Accept: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	header: 
	{
		documentIdentification: 
		{
			identifier: String,
			type: String
		},
		sender: 
		{
			identifier: 
			{
				authority: String,
				text: String
			},
			contactInformation: 
			[
				{
					
				}
			]
		},
		receiver: 
		{
			identifier: 
			{
				authority: String,
				text: String
			},
			contactInformation: 
			[
				{
					
				}
			]
		}
	},
	purchaseConditions: 
	{
		purchaseConditionsCurrencyCode: String,
		purchaseConditionsLocationInformation: 
		[
			{
				purchaseConditionsLineItem: 
				[
					{
						discrepancyTolerancePercentage: 0,
						lineItemNumber: 0,
						packagingTypeCode: String,
						parentLineItemNumber: 0,
						purchaseConditionsQuantity: 
						{
							value: 0,
							measurementUnitCode: String,
							codeListVersion: String
						},
						purchaseConditionsCommitmentPeriod: 
						[
							{
								commitmentPeriodDuration: 
								{
									timeMeasurementUnitCode: String,
									value: 0
								},
								purchaseConditionsCommitmentTypeCode: String
							}
						],
						purchaseConditionsPriceInformation: 
						[
							{
								itemPriceBaseQuantity: 
								{
									value: 0,
									measurementUnitCode: String,
									codeListVersion: String
								},
								itemPriceExclusiveAllowancesCharges: 0,
								quantityRange: 
								{
									maximumQuantity: 
									{
										value: 0,
										measurementUnitCode: String,
										codeListVersion: String
									},
									minimumQuantity: 
									{
										value: 0,
										measurementUnitCode: String,
										codeListVersion: String
									}
								},
								effectivePeriod: 
								{
									beginDate: 0001-01-01,
									beginTime: PT0S,
									endDate: 0001-01-01,
									endTime: PT0S
								}
							}
						],
						allowanceCharge: 
						[
							{
								allowanceChargeAmount: 0,
								allowanceChargePercentage: 0,
								allowanceChargeType: String,
								allowanceOrChargeType: String,
								amountPerUnit: 0,
								baseAmount: 0,
								baseNumberOfUnits: String,
								bracketIdentifier: String,
								effectiveDateType: 0001-01-01,
								sequenceNumber: String,
								settlementType: String,
								specialServiceType: String,
								allowanceChargeDescription: String
							}
						],
						transactionalTradeItem: 
						{
							gtin: String,
							additionalTradeItemIdentification: 
							[
								{
									code: String,
									value: String
								}
							],
							tradeItemQuantity: 0,
							tradeItemDescription: String,
							productVariantIdentifier: String,
							itemTypeCode: String,
							tradeItemDataOwner: String,
							butterFatReference: String,
							transactionalItemData: 
							[
								{
									availableForSaleDate: 0001-01-01,
									batchNumber: String,
									bestBeforeDate: 0001-01-01,
									countryOfOrigin: String,
									itemExpirationDate: 0001-01-01,
									lotNumber: String,
									packagingDate: 0001-01-01,
									productionDate: 0001-01-01,
									productQualityIndication: String,
									sellByDate: 0001-01-01,
									serialNumber: 
									[
										String
									],
									shelfLife: String,
									tradeItemQuantity: 0,
									itemInContactWithFoodProduct: False,
									transactionalItemWeight: 
									[
										{
											measurementUnitCode: String,
											measurementType: String,
											measurementValue: String
										}
									],
									transactionalItemVolume: 
									[
										{
											measurementUnitCode: String,
											measurementType: String,
											measurementValue: String
										}
									],
									serialNumberRange: 
									[
										{
											maximumValue: String,
											minimumValue: String
										}
									],
									transactionalItemDimensions: 
									[
										{
											measurementUnitCode: String,
											depth: String,
											height: String,
											width: String
										}
									],
									transactionalItemLogisticUnitInformation: 
									{
										numberOfLayers: 0,
										numberOfUnitsPerLayer: 0,
										numberOfUnitsPerPallet: 0,
										packagingTerms: String,
										packageTypeCode: String,
										maximumStackingFactor: 0,
										returnablePackageTransportCostPayment: String,
										dimensionsOfLogisticUnit: 
										[
											{
												measurementUnitCode: String,
												depth: String,
												height: String,
												width: String
											}
										]
									},
									transactionalItemDataCarrierAndIdentification: 
									{
										gs1TransactionalItemIdentificationKey: String,
										dataCarrier: String
									},
									tradeItemWaste: 
									[
										{
											wasteIdentification: String,
											typeOfWaste: 
											[
												{
													code: String,
													value: String
												}
											]
										}
									],
									transactionalItemOrganicInformation: 
									{
										isTradeItemOrganic: False,
										organicCertification: String
									},
									avpList: 
									[
										{
											code: String,
											value: String
										}
									]
								}
							],
							colour: 
							[
								{
									colourCode: String,
									colourDescription: String
								}
							],
							size: 
							{
								descriptiveSize: String,
								sizeCode: String
							},
							tradeItemClassification: 
							{
								gpcCategoryCode: String,
								additionalTradeItemClassificationCode: 
								[
									{
										code: String,
										value: String
									}
								],
								gpcCategoryName: String,
								gpcAttribute: 
								[
									{
										code: String,
										value: String
									}
								]
							},
							avpList: 
							[
								{
									code: String,
									value: String
								}
							]
						},
						leviedDutyFeeTax: 
						{
							dutyFeeTaxAmount: 0,
							dutyFeeTaxBasisAmount: 0,
							dutyFeeTaxDescription: String,
							dutyFeeTaxPercentage: 0
						},
						avpList: 
						[
							{
								code: String,
								value: String
							}
						],
						effectivePeriod: 
						{
							beginDate: 0001-01-01,
							beginTime: PT0S,
							endDate: 0001-01-01,
							endTime: PT0S
						},
						materialSpecification: 
						{
							creationDateTime: 0001-01-01,
							revisionNumber: 0,
							lineItemNumber: 0,
							entityIdentification: String
						},
						purchaseConditionsQuantityRange: 
						{
							maximumQuantity: 
							{
								value: 0,
								measurementUnitCode: String,
								codeListVersion: String
							},
							minimumQuantity: 
							{
								value: 0,
								measurementUnitCode: String,
								codeListVersion: String
							}
						}
					}
				],
				shipFrom: 
				{
					contact: 
					[
						{
							contactTypeCode: String,
							personName: String,
							departmentName: String,
							jobTitle: String,
							responsibility: String,
							communicationChannel: 
							[
								{
									communicationChannelCode: String,
									communicationChannelName: String,
									communicationValue: String
								}
							]
						}
					],
					address: 
					{
						streetAddressOne: String,
						streetAddressTwo: String,
						streetAddressThree: String,
						city: String,
						postalCode: String,
						provinceCode: String,
						countryCode: String
					},
					communicationChannel: 
					[
						{
							code: String,
							value: String
						}
					],
					financialInstitutionInformation: 
					{
						financialInstitutionBranchName: String,
						financialInstitutionName: String,
						financialRoutingNumber: 
						{
							number: String,
							numberTypeCode: String
						},
						financialAccount: 
						{
							number: String,
							numberTypeCode: String,
							name: String
						},
						swiftCode: String,
						exportersCode: String
					},
					dutyFeeTaxRegistration: String,
					entityIdentification: String,
					gln: String,
					name: String,
					additionalPartyIdentification: 
					[
						{
							code: String,
							value: String
						}
					]
				},
				shipTo: 
				{
					contact: 
					[
						{
							contactTypeCode: String,
							personName: String,
							departmentName: String,
							jobTitle: String,
							responsibility: String,
							communicationChannel: 
							[
								{
									communicationChannelCode: String,
									communicationChannelName: String,
									communicationValue: String
								}
							]
						}
					],
					address: 
					{
						streetAddressOne: String,
						streetAddressTwo: String,
						streetAddressThree: String,
						city: String,
						postalCode: String,
						provinceCode: String,
						countryCode: String
					},
					communicationChannel: 
					[
						{
							code: String,
							value: String
						}
					],
					financialInstitutionInformation: 
					{
						financialInstitutionBranchName: String,
						financialInstitutionName: String,
						financialRoutingNumber: 
						{
							number: String,
							numberTypeCode: String
						},
						financialAccount: 
						{
							number: String,
							numberTypeCode: String,
							name: String
						},
						swiftCode: String,
						exportersCode: String
					},
					dutyFeeTaxRegistration: String,
					entityIdentification: String,
					gln: String,
					name: String,
					additionalPartyIdentification: 
					[
						{
							code: String,
							value: String
						}
					]
				}
			}
		],
		currencyExchangeRateInformation: 
		{
			currencyConversionFromCode: String,
			currencyConversionToCode: String,
			exchangeRate: 0,
			exchangeRateDateTime: 0001-01-01
		},
		buyer: 
		{
			contact: 
			[
				{
					contactTypeCode: String,
					personName: String,
					departmentName: String,
					jobTitle: String,
					responsibility: String,
					communicationChannel: 
					[
						{
							communicationChannelCode: String,
							communicationChannelName: String,
							communicationValue: String
						}
					]
				}
			],
			address: 
			{
				streetAddressOne: String,
				streetAddressTwo: String,
				streetAddressThree: String,
				city: String,
				postalCode: String,
				provinceCode: String,
				countryCode: String
			},
			communicationChannel: 
			[
				{
					code: String,
					value: String
				}
			],
			financialInstitutionInformation: 
			{
				financialInstitutionBranchName: String,
				financialInstitutionName: String,
				financialRoutingNumber: 
				{
					number: String,
					numberTypeCode: String
				},
				financialAccount: 
				{
					number: String,
					numberTypeCode: String,
					name: String
				},
				swiftCode: String,
				exportersCode: String
			},
			dutyFeeTaxRegistration: String,
			entityIdentification: String,
			gln: String,
			name: String,
			additionalPartyIdentification: 
			[
				{
					code: String,
					value: String
				}
			]
		},
		payee: 
		{
			contact: 
			[
				{
					contactTypeCode: String,
					personName: String,
					departmentName: String,
					jobTitle: String,
					responsibility: String,
					communicationChannel: 
					[
						{
							communicationChannelCode: String,
							communicationChannelName: String,
							communicationValue: String
						}
					]
				}
			],
			address: 
			{
				streetAddressOne: String,
				streetAddressTwo: String,
				streetAddressThree: String,
				city: String,
				postalCode: String,
				provinceCode: String,
				countryCode: String
			},
			communicationChannel: 
			[
				{
					code: String,
					value: String
				}
			],
			financialInstitutionInformation: 
			{
				financialInstitutionBranchName: String,
				financialInstitutionName: String,
				financialRoutingNumber: 
				{
					number: String,
					numberTypeCode: String
				},
				financialAccount: 
				{
					number: String,
					numberTypeCode: String,
					name: String
				},
				swiftCode: String,
				exportersCode: String
			},
			dutyFeeTaxRegistration: String,
			entityIdentification: String,
			gln: String,
			name: String,
			additionalPartyIdentification: 
			[
				{
					code: String,
					value: String
				}
			]
		},
		payer: 
		{
			contact: 
			[
				{
					contactTypeCode: String,
					personName: String,
					departmentName: String,
					jobTitle: String,
					responsibility: String,
					communicationChannel: 
					[
						{
							communicationChannelCode: String,
							communicationChannelName: String,
							communicationValue: String
						}
					]
				}
			],
			address: 
			{
				streetAddressOne: String,
				streetAddressTwo: String,
				streetAddressThree: String,
				city: String,
				postalCode: String,
				provinceCode: String,
				countryCode: String
			},
			communicationChannel: 
			[
				{
					code: String,
					value: String
				}
			],
			financialInstitutionInformation: 
			{
				financialInstitutionBranchName: String,
				financialInstitutionName: String,
				financialRoutingNumber: 
				{
					number: String,
					numberTypeCode: String
				},
				financialAccount: 
				{
					number: String,
					numberTypeCode: String,
					name: String
				},
				swiftCode: String,
				exportersCode: String
			},
			dutyFeeTaxRegistration: String,
			entityIdentification: String,
			gln: String,
			name: String,
			additionalPartyIdentification: 
			[
				{
					code: String,
					value: String
				}
			]
		},
		purchaseConditionsIdentification: String,
		remitTo: 
		{
			contact: 
			[
				{
					contactTypeCode: String,
					personName: String,
					departmentName: String,
					jobTitle: String,
					responsibility: String,
					communicationChannel: 
					[
						{
							communicationChannelCode: String,
							communicationChannelName: String,
							communicationValue: String
						}
					]
				}
			],
			address: 
			{
				streetAddressOne: String,
				streetAddressTwo: String,
				streetAddressThree: String,
				city: String,
				postalCode: String,
				provinceCode: String,
				countryCode: String
			},
			communicationChannel: 
			[
				{
					code: String,
					value: String
				}
			],
			financialInstitutionInformation: 
			{
				financialInstitutionBranchName: String,
				financialInstitutionName: String,
				financialRoutingNumber: 
				{
					number: String,
					numberTypeCode: String
				},
				financialAccount: 
				{
					number: String,
					numberTypeCode: String,
					name: String
				},
				swiftCode: String,
				exportersCode: String
			},
			dutyFeeTaxRegistration: String,
			entityIdentification: String,
			gln: String,
			name: String,
			additionalPartyIdentification: 
			[
				{
					code: String,
					value: String
				}
			]
		},
		seller: 
		{
			contact: 
			[
				{
					contactTypeCode: String,
					personName: String,
					departmentName: String,
					jobTitle: String,
					responsibility: String,
					communicationChannel: 
					[
						{
							communicationChannelCode: String,
							communicationChannelName: String,
							communicationValue: String
						}
					]
				}
			],
			address: 
			{
				streetAddressOne: String,
				streetAddressTwo: String,
				streetAddressThree: String,
				city: String,
				postalCode: String,
				provinceCode: String,
				countryCode: String
			},
			communicationChannel: 
			[
				{
					code: String,
					value: String
				}
			],
			financialInstitutionInformation: 
			{
				financialInstitutionBranchName: String,
				financialInstitutionName: String,
				financialRoutingNumber: 
				{
					number: String,
					numberTypeCode: String
				},
				financialAccount: 
				{
					number: String,
					numberTypeCode: String,
					name: String
				},
				swiftCode: String,
				exportersCode: String
			},
			dutyFeeTaxRegistration: String,
			entityIdentification: String,
			gln: String,
			name: String,
			additionalPartyIdentification: 
			[
				{
					code: String,
					value: String
				}
			]
		},
		taxRepresentative: 
		{
			contact: 
			[
				{
					contactTypeCode: String,
					personName: String,
					departmentName: String,
					jobTitle: String,
					responsibility: String,
					communicationChannel: 
					[
						{
							communicationChannelCode: String,
							communicationChannelName: String,
							communicationValue: String
						}
					]
				}
			],
			address: 
			{
				streetAddressOne: String,
				streetAddressTwo: String,
				streetAddressThree: String,
				city: String,
				postalCode: String,
				provinceCode: String,
				countryCode: String
			},
			communicationChannel: 
			[
				{
					code: String,
					value: String
				}
			],
			financialInstitutionInformation: 
			{
				financialInstitutionBranchName: String,
				financialInstitutionName: String,
				financialRoutingNumber: 
				{
					number: String,
					numberTypeCode: String
				},
				financialAccount: 
				{
					number: String,
					numberTypeCode: String,
					name: String
				},
				swiftCode: String,
				exportersCode: String
			},
			dutyFeeTaxRegistration: String,
			entityIdentification: String,
			gln: String,
			name: String,
			additionalPartyIdentification: 
			[
				{
					code: String,
					value: String
				}
			]
		},
		currencyCode: String,
		documentActionCode: ADD,
		documentStatusCode: ADDITIONAL_TRANSMISSION,
		documentStructureVersion: String,
		lastUpdateDateTime: 0001-01-01,
		revisionNumber: 0,
		avpList: 
		[
			{
				code: String,
				value: String
			}
		]
	}
}