""" Options: Date: 2026-02-14 10:08:58 Version: 10.04 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://stf-api-uat.data-xchange.co.za #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetItemDataNotificationByIdentifier.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum Object = TypeVar('Object') @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AvpList: code: Optional[str] = None value: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Ecom_PartyIdentificationType: gln: Optional[str] = None name: Optional[str] = None additional_party_identification: List[AvpList] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CommunicationChannel: communication_channel_code: Optional[str] = None communication_channel_name: Optional[str] = None communication_value: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Contact: contact_type_code: Optional[str] = None person_name: Optional[str] = None department_name: Optional[str] = None job_title: Optional[str] = None responsibility: Optional[str] = None communication_channel: List[CommunicationChannel] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Address: street_address_one: Optional[str] = None street_address_two: Optional[str] = None street_address_three: Optional[str] = None city: Optional[str] = None postal_code: Optional[str] = None province_code: Optional[str] = None country_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FinancialRoutingNumber: number: Optional[str] = None number_type_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FinancialAccount: number: Optional[str] = None number_type_code: Optional[str] = None name: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FinancialInstitutionInformation: financial_institution_branch_name: Optional[str] = None financial_institution_name: Optional[str] = None financial_routing_number: Optional[FinancialRoutingNumber] = None financial_account: Optional[FinancialAccount] = None swift_code: Optional[str] = None exporters_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TransactionalParty(Ecom_PartyIdentificationType): contact: List[Contact] = field(default_factory=list) address: Optional[Address] = None communication_channel: List[AvpList] = field(default_factory=list) financial_institution_information: Optional[FinancialInstitutionInformation] = None duty_fee_tax_registration: Optional[str] = None entity_identification: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AdditionalTradeItemIdentification: value: Optional[str] = None code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Ecom_TradeItemIdentification: additional_trade_item_identification: List[AdditionalTradeItemIdentification] = field(default_factory=list) gtin: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class IdentifierType: value: Optional[str] = None identification_scheme_agency_code_code_list_version: Optional[str] = None identification_scheme_agency_name: Optional[str] = None identification_scheme_name: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AdditionalTradeItemClassificationCode: value: Optional[str] = None additional_trade_item_classification_code_list_code: Optional[str] = None additional_trade_item_classification_code_list_version: Optional[str] = None code_description: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Measurement: value: Optional[Decimal] = None code_list_version: Optional[str] = None measurement_unit_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataWeightAndDimension: depth: Optional[Measurement] = None diameter: Optional[Measurement] = None gross_weight: Optional[Measurement] = None height: Optional[Measurement] = None net_weight: Optional[Measurement] = None width: Optional[Measurement] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TemperatureMeasurement: value: Optional[Decimal] = None temperature_measurement_unit_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TemperatureRange: maximum_temperature: Optional[TemperatureMeasurement] = None minimum_temperature: Optional[TemperatureMeasurement] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class HandlingInstruction: handling_instruction_code: Optional[str] = None handling_instruction_text: Optional[str] = None printing_instruction_code: List[str] = field(default_factory=list) storage_temperature: Optional[TemperatureRange] = None transport_temperature: Optional[TemperatureRange] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Identifier: authority: Optional[str] = None text: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DangerousGoodsInformation: dangerous_goods_description: Optional[str] = None dangerous_goods_shipping_name: Optional[str] = None dangerous_goods_technical_name: Optional[str] = None dangerous_goods_u_n_identifier: Optional[Identifier] = None contact: List[Contact] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AdministrativeUnit: type_code: Optional[str] = None gln: Optional[str] = None internal_identification: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataTradingPartnerNeutral: cancelled_date_time: Optional[datetime.datetime] = None discontinued_date_time: Optional[datetime.datetime] = None effective_date_time: datetime.datetime = datetime.datetime(1, 1, 1) end_availability_date_time: Optional[datetime.datetime] = None maximum_stacking_factor: Optional[int] = None start_availability_date_time: datetime.datetime = datetime.datetime(1, 1, 1) trade_item_base_unit_of_measure: Optional[str] = None trade_item_classification_code: List[AdditionalTradeItemClassificationCode] = field(default_factory=list) warehouse_a_b_c_classification_code: Optional[str] = None item_data_weight_and_dimension: Optional[ItemDataWeightAndDimension] = None handling_instruction: List[HandlingInstruction] = field(default_factory=list) dangerous_goods_information: List[DangerousGoodsInformation] = field(default_factory=list) administrative_unit_of_logistic_service_buyer: Optional[AdministrativeUnit] = None avp_list: List[AvpList] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TimeMeasurement: time_measurement_unit_code: Optional[str] = None value: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Quantity: value: Optional[Decimal] = None measurement_unit_code: Optional[str] = None code_list_version: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Dimension: depth: Optional[Measurement] = None height: Optional[Measurement] = None width: Optional[Measurement] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataLogisticUnitInformation: gross_weight: Optional[Measurement] = None maximum_stacking_factor: Optional[int] = None net_weight: Optional[Measurement] = None number_of_layers: Optional[int] = None package_level_code: Optional[str] = None package_type_code: Optional[str] = None trade_item_quantity: Optional[Quantity] = None trade_item_quantity_per_layer: Optional[Quantity] = None avp_list: Optional[AvpList] = None dimensions_of_logistic_unit: List[Dimension] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataStockRequirements: required_stock_level: Optional[Quantity] = None required_stock_level_validity_date_time: Optional[datetime.datetime] = None stock_requirement_type_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TransactionalPartyInRole: party_role_code: Optional[str] = None transactional_party: Optional[TransactionalParty] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataTradingPartnerDependent: country_of_origin: Optional[str] = None minimum_remaining_shelf_life_inbound: Optional[TimeMeasurement] = None minimum_remaining_shelf_life_outbound: Optional[TimeMeasurement] = None order_quantity_maximum: Optional[Quantity] = None order_quantity_minimum: Optional[Quantity] = None order_quantity_multiple: Optional[Quantity] = None quality_control_code: Optional[str] = None quarantine_period: Optional[TimeMeasurement] = None trade_item_production_lead_time: Optional[TimeMeasurement] = None trade_item_shipment_lead_time: Optional[TimeMeasurement] = None trade_item_specific_unit_of_measure: Optional[str] = None trade_item_substitution_date_time: Optional[datetime.datetime] = None item_data_logistic_unit_information: List[ItemDataLogisticUnitInformation] = field(default_factory=list) item_data_stock_requirements: List[ItemDataStockRequirements] = field(default_factory=list) administrative_unit_of_receiver: List[AdministrativeUnit] = field(default_factory=list) avp_list: Optional[AvpList] = None originating_party: List[TransactionalPartyInRole] = field(default_factory=list) receiver: Optional[TransactionalParty] = None shipper: Optional[TransactionalParty] = None substitute_item: Optional[Ecom_TradeItemIdentification] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class LowerLevelTradeItem(Ecom_TradeItemIdentification): quantity_of_lower_level_trade_item: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataNotificationLineItem(Ecom_TradeItemIdentification): brand_name: Optional[str] = None gpc_category_code: Optional[str] = None is_the_product_variant_preferred: Optional[bool] = None line_item_number: Optional[int] = None parent_line_item_number: Optional[int] = None product_variant_identifier: Optional[IdentifierType] = None quantity_of_item_types: Optional[Decimal] = None quantity_of_item_units: Optional[Decimal] = None trade_item_description: List[str] = field(default_factory=list) trade_item_unit_descriptor_code: Optional[str] = None item_data_trading_partner_neutral: Optional[ItemDataTradingPartnerNeutral] = None item_data_trading_partner_dependent: List[ItemDataTradingPartnerDependent] = field(default_factory=list) lower_level_trade_item: List[LowerLevelTradeItem] = field(default_factory=list) avp_list: List[AvpList] = field(default_factory=list) class DocumentAction(str, Enum): ADD = 'ADD' CHANGE_BY_REFRESH = 'CHANGE_BY_REFRESH' DELETE = 'DELETE' REJECTED = 'REJECTED' class DocumentStatus(str, Enum): ADDITIONAL_TRANSMISSION = 'ADDITIONAL_TRANSMISSION' COPY = 'COPY' ORIGINAL = 'ORIGINAL' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class BaseDocument: currency_code: Optional[str] = None creation_date_time: datetime.datetime = datetime.datetime(1, 1, 1) document_action_code: Optional[DocumentAction] = None document_status_code: Optional[DocumentStatus] = None document_structure_version: Optional[str] = None last_update_date_time: Optional[datetime.datetime] = None revision_number: Optional[int] = None avp_list: List[AvpList] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ItemDataNotificationMessage(BaseDocument): data_recipient: Optional[TransactionalParty] = None data_source: Optional[TransactionalParty] = None item_data_notification_identification: Optional[str] = None item_data_notification_line_item: List[ItemDataNotificationLineItem] = field(default_factory=list) # @Route("/itemDataNotification/{OwnerGln}/{ItemDataNotificationIdentification}", "GET") # @Api(Description="Item Data Notification") # @ApiResponse(Description="ItemDataNotification 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) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetItemDataNotificationByIdentifier(IReturn[ItemDataNotificationMessage]): """ Item Data Notification """ # @ApiMember(Description="Owner GLN", ExcludeInSchema=true, ParameterType="path") owner_gln: Optional[str] = None """ Owner GLN """ # @ApiMember(Description="ItemDataNotification ID or Token", ExcludeInSchema=true, ParameterType="path") item_data_notification_identification: Optional[str] = None """ ItemDataNotification ID or Token """