""" Options: Date: 2026-02-14 10:17:18 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: GetSettlement.* #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') class IDocument(IHaveToken): pass class IHaveToken: token: Optional[str] = None T = TypeVar('T') @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ResultItem(Generic[T], IDocument): token: Optional[str] = None item: Optional[T] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DocumentIdentification: identifier: Optional[str] = None type: Optional[str] = None creation_date_and_time: datetime.datetime = datetime.datetime(1, 1, 1) @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 ContactInformation: pass @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Partner: identifier: Optional[Identifier] = None contact_information: List[ContactInformation] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Header: document_identification: Optional[DocumentIdentification] = None sender: Optional[Partner] = None receiver: Optional[Partner] = None @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 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 PaymentMethod: automated_clearing_house_payment_format: Optional[str] = None payment_method_code: Optional[str] = None payment_method_identification: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DocumentReference: creation_date_time: Optional[datetime.datetime] = None revision_number: Optional[int] = None line_item_number: Optional[int] = None entity_identification: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TransactionalReference(DocumentReference): transactional_reference_type_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SettlementAdjustment: adjustment_amount: Optional[Decimal] = None financial_adjusment_reason_party_role_code: Optional[str] = None financial_adjustment_reason_code: Optional[str] = None transactional_reference: Optional[TransactionalReference] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContentOwner: gln: Optional[str] = None additional_party_identification: List[AvpList] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class InvoiceDocumentReference(DocumentReference): invoice_type_code: Optional[str] = None content_owner: Optional[ContentOwner] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Ecom_PartyIdentification: additional_party_identification: List[AvpList] = field(default_factory=list) gln: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SettlementParty(Ecom_PartyIdentification): party_role_code: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SettlementLineItem: amount_paid: Optional[Decimal] = None line_item_number: int = 0 original_amount: Optional[Decimal] = None settlement_adjustment: List[SettlementAdjustment] = field(default_factory=list) avp_list: Optional[AvpList] = None debit_credit_advice: Optional[DocumentReference] = None invoice: Optional[InvoiceDocumentReference] = None request_for_payment: Optional[DocumentReference] = None settlement_party: List[SettlementParty] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SettlementExtensionLineItem: number: int = 0 document_type: Optional[str] = None document_number: Optional[str] = None item_text: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AdjustmentAndDiscountSummary: amount_total: Decimal = decimal.Decimal(0) amount_nett: Decimal = decimal.Decimal(0) amount_vat: Decimal = decimal.Decimal(0) reason_message: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TotalAmountSplit: amount_total: Decimal = decimal.Decimal(0) amount_nett: Decimal = decimal.Decimal(0) amount_vat: Decimal = decimal.Decimal(0) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SettlementExtension: settlement_extension_line_item: List[SettlementExtensionLineItem] = field(default_factory=list) adjustment_and_discount_summary: List[AdjustmentAndDiscountSummary] = field(default_factory=list) total_amount_split: Optional[TotalAmountSplit] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Settlement(BaseDocument): batch_identification: Optional[str] = None payment_effective_date: datetime.datetime = datetime.datetime(1, 1, 1) settlement_currency: Optional[str] = None settlement_handling_type_code: Optional[str] = None total_amount: Optional[Decimal] = None payment_method: Optional[PaymentMethod] = None payee: Optional[TransactionalParty] = None payer: Optional[TransactionalParty] = None remit_to: Optional[TransactionalParty] = None settlement_identification: Optional[str] = None settlement_line_item: List[SettlementLineItem] = field(default_factory=list) extension: Optional[SettlementExtension] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SettlementMessage: header: Optional[Header] = None settlement: Optional[Settlement] = None # @Route("/settlement", "GET") # @Api(Description="Settlement") # @ApiResponse(Description="Settlement message", IsDefaultResponse=true, StatusCode=200) # @ApiResponse(Description="No Content", ResponseType=typeof(IReturnVoid), StatusCode=204) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetSettlement(IReturn[ResultItem[SettlementMessage]]): """ Settlement """ pass