]> git.ipfire.org Git - thirdparty/python-drafthorse.git/commitdiff
Incorporate more data model changes
authorRaphael Michel <michel@rami.io>
Wed, 3 Aug 2022 15:32:41 +0000 (17:32 +0200)
committerRaphael Michel <michel@rami.io>
Wed, 3 Aug 2022 15:32:41 +0000 (17:32 +0200)
drafthorse/models/accounting.py
drafthorse/models/delivery.py
drafthorse/models/party.py
drafthorse/models/payment.py
drafthorse/models/references.py
drafthorse/models/trade.py
drafthorse/models/tradelines.py

index fe22161cda686ef9ec6010594340cb939c5becdd..cfa9072a238dbc9b3a1088e2a377ba33aaace8fa 100644 (file)
@@ -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,
index 4ca3e5c4780907b26fa887a768db250b15472db6..886a367f94a5fcbf6dfce28db642714ac2da727c 100644 (file)
@@ -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:
index 7417fbfc36df1df956b3b33ade91219914f02412..6aeb6fc8e0ab0bc9cf1daf7c069e0a4fea99e000 100644 (file)
@@ -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
index 55669f3a249b458d66ed09aac36f57caf9f934e0..6c3e6c00b94e4b67926f91b317d51534475c74b2 100644 (file)
@@ -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)
 
index bc198eda4aba0e39ebcfd21fea57ea1a5ab35e1d..30e4f877619f4a06d7b21e4a626f43254d3deafe 100644 (file)
@@ -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
index 9a97e47d60394f26150e92ac33267d1ec8a4b5d6..4840aaca11c2e47299b7e112662d353a4b9a0e2d 100644 (file)
@@ -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
     )
index 91623c63f6a9c6d2024dcc462c493b9e7177991f..79a69ad2ae2190f860ad980cd8184c66cad4fdab 100644 (file)
@@ -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,