From: Raphael Michel Date: Wed, 3 Aug 2022 15:32:41 +0000 (+0200) Subject: Incorporate more data model changes X-Git-Tag: 2.2.0~1^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=632361ac8bffcb2f9ed7e89c6334ef04fbc88060;p=thirdparty%2Fpython-drafthorse.git Incorporate more data model changes --- diff --git a/drafthorse/models/accounting.py b/drafthorse/models/accounting.py index fe22161..cfa9072 100644 --- a/drafthorse/models/accounting.py +++ b/drafthorse/models/accounting.py @@ -60,8 +60,8 @@ class LineApplicableTradeTax(Element): profile=COMFORT, _d="Steuerkategorie (Wert)", ) - applicable_percent = DecimalField( - NS_RAM, "ApplicablePercent", required=True, profile=BASIC + rate_applicable_percent = DecimalField( + NS_RAM, "RateApplicablePercent", required=True, profile=BASIC ) class Meta: @@ -90,6 +90,18 @@ class ApplicableTradeTax(Element): profile=EXTENDED, _d="Grund der Steuerbefreiung (Code)", ) + tax_point_date = DateTimeField( + NS_RAM, + "TaxPointDate", + required=False, + profile=COMFORT + ) + due_date_type_code = StringField( + NS_RAM, + "DueDateTypeCode", + required=False, + profile=BASIC, + ) basis_amount = DecimalField( NS_RAM, "BasisAmount", @@ -141,6 +153,9 @@ class ReceivableAccountingAccount(Element): id = StringField( NS_RAM, "ID", required=True, profile=EXTENDED, _d="Buchungsreferenz" ) + type_code = StringField( + NS_RAM, "TypeCode", required=True, profile=EXTENDED + ) class Meta: namespace = NS_RAM @@ -182,6 +197,9 @@ class MonetarySummation(Element): tax_total_other_currency = MultiCurrencyField( NS_RAM, "TaxTotalAmount", profile=EXTENDED, _d="Steuergesamtbetrag" ) + rounding_amount = DecimalField( + NS_RAM, "RoundingAmount", required=False, profile=COMFORT, + ) grand_total = CurrencyField( NS_RAM, "GrandTotalAmount", required=True, profile=BASIC, _d="Bruttosumme" ) @@ -204,7 +222,7 @@ class MonetarySummation(Element): class AppliedTradeTax(Element): type_code = StringField(NS_RAM, "TypeCode", required=True, profile=COMFORT) category_code = StringField(NS_RAM, "CategoryCode", required=True, profile=COMFORT) - rate_applicable_percent = StringField( + rate_applicable_percent = DecimalField( NS_RAM, "RateApplicablePercent", required=True, profile=COMFORT ) @@ -234,14 +252,14 @@ class TradeAllowanceCharge(Element): profile=EXTENDED, _d="Berechnungsreihenfolge", ) - calculation_percent = DecimalField( + calculation_percent = DecimalField( # TODO: Should be deprecated? NS_RAM, "CalculationPercent", required=False, profile=EXTENDED, _d="Rabatt in Prozent", ) - basis_amount = DecimalField( + basis_amount = DecimalField( # TODO: Should be deprecated? NS_RAM, "BasisAmount", required=False, diff --git a/drafthorse/models/delivery.py b/drafthorse/models/delivery.py index 4ca3e5c..886a367 100644 --- a/drafthorse/models/delivery.py +++ b/drafthorse/models/delivery.py @@ -27,7 +27,7 @@ class LogisticsTransportMovement(Element): tag = "SpecifiedLogisticsTransportMovement" -class SupplyChainConsignment(Element): +class SupplyChainConsignment(Element): # TODO: Deprecated? movement = Field(LogisticsTransportMovement, required=False, profile=EXTENDED) class Meta: diff --git a/drafthorse/models/party.py b/drafthorse/models/party.py index 7417fbf..6aeb6fc 100644 --- a/drafthorse/models/party.py +++ b/drafthorse/models/party.py @@ -7,7 +7,9 @@ class PostalTradeAddress(Element): postcode = StringField(NS_RAM, "PostcodeCode", required=False, profile=BASIC) line_one = StringField(NS_RAM, "LineOne", required=False, profile=BASIC) line_two = StringField(NS_RAM, "LineTwo", required=False, profile=BASIC) + line_three = StringField(NS_RAM, "LineThree", required=False, profile=BASIC) city_name = StringField(NS_RAM, "CityName", required=False, profile=BASIC) + country_subdivision = StringField(NS_RAM, "CountrySubDivisionName", required=False, profile=EXTENDED) country_id = StringField(NS_RAM, "CountryID", required=False, profile=BASIC) class Meta: @@ -81,6 +83,7 @@ class TradeParty(Element): _d="Globaler Identifier des Verkäufers", ) name = StringField(NS_RAM, "Name", required=False, profile=BASIC) + # TODO: SpecifiedLegalOrganization description = StringField( NS_RAM, "Description", @@ -112,6 +115,12 @@ class PayeeTradeParty(TradeParty): tag = "PayeeTradeParty" +class InvoicerTradeParty(TradeParty): + class Meta: + namespace = NS_RAM + tag = "InvoicerTradeParty" + + class InvoiceeTradeParty(TradeParty): class Meta: namespace = NS_RAM diff --git a/drafthorse/models/payment.py b/drafthorse/models/payment.py index 55669f3..6c3e6c0 100644 --- a/drafthorse/models/payment.py +++ b/drafthorse/models/payment.py @@ -11,6 +11,15 @@ from .fields import ( ) +class FinancialCard(Element): + id = StringField(NS_RAM, "ID") + cardholder_name = StringField(NS_RAM, "CardholderName") + + class Meta: + namespace = NS_RAM + tag = "ApplicableTradeSettlementFinancialCard" + + class PayerFinancialAccount(Element): iban = StringField(NS_RAM, "IBANID") @@ -29,14 +38,6 @@ class PayeeFinancialAccount(Element): tag = "PayeePartyCreditorFinancialAccount" -class PayerFinancialInstitution(Element): - bic = StringField(NS_RAM, "BICID") - - class Meta: - namespace = NS_RAM - tag = "PayerSpecifiedDebtorFinancialInstitution" - - class PayeeFinancialInstitution(Element): bic = StringField(NS_RAM, "BICID") @@ -50,8 +51,8 @@ class PaymentMeans(Element): information = MultiStringField( NS_RAM, "Information", required=False, profile=COMFORT ) + financial_card = Field(FinancialCard) payer_account = Field(PayerFinancialAccount) - payer_institution = Field(PayerFinancialInstitution) payee_account = Field(PayeeFinancialAccount) payee_institution = Field(PayeeFinancialInstitution) diff --git a/drafthorse/models/references.py b/drafthorse/models/references.py index bc198ed..30e4f87 100644 --- a/drafthorse/models/references.py +++ b/drafthorse/models/references.py @@ -123,13 +123,21 @@ class LineAdditionalReferencedDocument(Element): issuer_assigned_id = StringField( NS_RAM, "IssuerAssignedID", required=False, profile=COMFORT ) + uri_id = StringField(NS_RAM, "URIID", required=False, profile=EXTENDED) line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) + type_code = StringField( + NS_RAM, "TypeCode", required=False, profile=EXTENDED + ) + name = StringField( + NS_RAM, "Name", required=False, profile=EXTENDED + ) date_time_string = DirectDateTimeField( - NS_RAM, "DateTimeString", required=False, profile=COMFORT + NS_RAM, "FormattedIssueDateTime", required=False, profile=COMFORT ) reference_type_code = StringField( NS_RAM, "ReferenceTypeCode", profile=EXTENDED, required=True ) + # todo: AttachmentBinaryObject class Meta: namespace = NS_RAM diff --git a/drafthorse/models/trade.py b/drafthorse/models/trade.py index 9a97e47..4840aac 100644 --- a/drafthorse/models/trade.py +++ b/drafthorse/models/trade.py @@ -10,23 +10,22 @@ from .accounting import ( ) from .delivery import TradeDelivery from .elements import Element -from .fields import DecimalField, Field, MultiField, StringField +from .fields import DecimalField, Field, MultiField, StringField, DateTimeField from .party import ( BuyerTradeParty, EndUserTradeParty, InvoiceeTradeParty, PayeeTradeParty, SellerTradeParty, - SellerTaxRepresentativeTradeParty, + SellerTaxRepresentativeTradeParty, InvoicerTradeParty, ) from .payment import PaymentMeans, PaymentTerms, TaxApplicableTradeCurrencyExchange from .references import ( AdditionalReferencedDocument, - BuyerOrderReferencedDocument, ContractReferencedDocument, UltimateCustomerOrderReferencedDocument, ProcuringProjectType, - InvoiceReferencedDocument, + InvoiceReferencedDocument, BuyerOrderReferencedDocument, ) from .tradelines import LineItem @@ -61,12 +60,12 @@ class TradeAgreement(Element): EndUserTradeParty, required=False, _d="Abweichender Endverbraucher" ) delivery_terms = Field(DeliveryTerms, required=False, profile=EXTENDED) - buyer_order = Field(BuyerOrderReferencedDocument, required=False, profile=COMFORT) + seller_order = Field(SellerOrderReferencedDocument, required=False, profile=COMFORT) + buyer_order = Field(BuyerOrderReferencedDocument, required=False) customer_order = Field( UltimateCustomerOrderReferencedDocument, required=False, profile=COMFORT ) contract = Field(ContractReferencedDocument, required=False, profile=COMFORT) - order_document = Field(SellerOrderReferencedDocument, required=False) additional_references = MultiField( AdditionalReferencedDocument, required=False, profile=COMFORT ) @@ -103,13 +102,64 @@ class LogisticsServiceCharge(Element): tag = "SpecifiedLogisticsServiceCharge" +class IncludedTradeTax(Element): + calculated_amount = DecimalField( + NS_RAM, "CalculatedAmount", required=True, profile=BASIC, _d="Steuerbetrag" + ) + type_code = StringField( + NS_RAM, "TypeCode", required=True, profile=BASIC, _d="Steuerart (Code)" + ) + exemption_reason = StringField( + NS_RAM, + "ExemptionReason", + required=False, + profile=COMFORT, + _d="Grund der Steuerbefreiung (Freitext)", + ) + exemption_reason_code = StringField( + NS_RAM, + "ExemptionReasonCode", + required=False, + profile=EXTENDED, + _d="Grund der Steuerbefreiung (Code)", + ) + category_code = StringField( + NS_RAM, + "CategoryCode", + required=False, + profile=COMFORT, + _d="Steuerkategorie (Wert)", + ) + rate_applicable_percent = DecimalField( + NS_RAM, "RateApplicablePercent", required=True, profile=BASIC + ) + + class Meta: + namespace = NS_RAM + tag = "IncludedTradeTax" + + +class AdvancePayment(Element): + paid_amount = DecimalField(NS_RAM, "PaidAmount") + received_date = DateTimeField(NS_RAM, "FormattedReceivedDateTime") + included_trade_tax = MultiField(IncludedTradeTax) + + class Meta: + namespace = NS_RAM + tag = "SpecifiedAdvancePayment" + + class TradeSettlement(Element): - creditor_reference_ID = StringField(NS_RAM, "CreditorReferenceID") + creditor_reference_id = StringField(NS_RAM, "CreditorReferenceID") payment_reference = StringField(NS_RAM, "PaymentReference") tax_currency_code = StringField( NS_RAM, "TaxCurrencyCode", required=False, profile=COMFORT ) currency_code = StringField(NS_RAM, "InvoiceCurrencyCode") + issuer_reference = StringField(NS_RAM, "InvoiceIssuerReference", profile=EXTENDED) + invoicer = Field( + InvoicerTradeParty, required=False, profile=COMFORT, _d="Rechnungsaussteller" + ) invoicee = Field( InvoiceeTradeParty, required=False, profile=COMFORT, _d="Rechnungsempfänger" ) @@ -140,6 +190,9 @@ class TradeSettlement(Element): profile=EXTENDED, _d="Detailinformationen zur Buchungsreferenz", ) + advance_payment = MultiField( + AdvancePayment, required=False, profile=EXTENDED + ) invoice_referenced_document = Field( InvoiceReferencedDocument, required=False, profile=BASIC ) diff --git a/drafthorse/models/tradelines.py b/drafthorse/models/tradelines.py index 91623c6..79a69ad 100644 --- a/drafthorse/models/tradelines.py +++ b/drafthorse/models/tradelines.py @@ -8,7 +8,7 @@ from .accounting import ( ) from .delivery import SupplyChainEvent from .elements import Element -from .fields import DecimalField, Field, MultiField, QuantityField, StringField +from .fields import DecimalField, Field, MultiField, QuantityField, StringField, DateTimeField from .note import IncludedNote from .party import ShipToTradeParty, UltimateShipToTradeParty from .product import TradeProduct @@ -49,6 +49,7 @@ class NetPrice(Element): basis_quantity = QuantityField( NS_RAM, "BasisQuantity", required=False, profile=COMFORT, _d="Preisbasismenge" ) + # TODO: IncludedTradeTax missing class Meta: namespace = NS_RAM @@ -57,6 +58,8 @@ class NetPrice(Element): class LineDocument(Element): line_id = StringField(NS_RAM, "LineID") + line_status_code = StringField(NS_RAM, "LineStatusCode") + line_status_reason_code = StringField(NS_RAM, "LineStatusReasonCode") notes = MultiField(IncludedNote) class Meta: @@ -143,9 +146,6 @@ class LineSummation(Element): class LineSettlement(Element): trade_tax = Field(ApplicableTradeTax, required=False, profile=COMFORT) - accounting_account = Field( - AccountingAccount, required=False, profile=EXTENDED, _d="Kostenstelle" - ) period = Field(BillingSpecifiedPeriod, required=False, profile=COMFORT) allowance_charge = MultiField( TradeAllowanceCharge, @@ -157,6 +157,9 @@ class LineSettlement(Element): invoice_referenced_document = Field( InvoiceReferencedDocument, required=False, profile=EXTENDED ) + additional_referenced_document = Field( + LineAdditionalReferencedDocument, required=False, profile=EXTENDED + ) accounting_account = Field( ReceivableAccountingAccount, required=False,