]> git.ipfire.org Git - thirdparty/python-drafthorse.git/commitdiff
Validate against new schema
authorRaphael Michel <mail@raphaelmichel.de>
Mon, 30 Nov 2020 17:39:42 +0000 (18:39 +0100)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 30 Nov 2020 17:39:42 +0000 (18:39 +0100)
drafthorse/models/accounting.py
drafthorse/models/elements.py
drafthorse/models/trade.py
drafthorse/models/tradelines.py
tests/test_roundtrip.py

index 1b44ad18e3dde63aebf8edb16253bc4c74a09506..8cadcbe924c9dc0739de5f85f98b4286d364c4ab 100644 (file)
@@ -30,6 +30,8 @@ class ApplicableTradeTax(Element):
                             _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)")
     basis_amount = CurrencyField(NS_RAM, "BasisAmount", required=True,
                                  profile=BASIC, _d="Basisbetrag der Steuerberechnung")
     line_total_basis_amount = CurrencyField(NS_RAM, "LineTotalBasisAmount",
@@ -40,8 +42,8 @@ class ApplicableTradeTax(Element):
                                                   _d="Gesamtbetrag Zu- und Abschläge des Steuersatzes")
     category_code = StringField(NS_RAM, "CategoryCode", required=False,
                                 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:
         namespace = NS_RAM
@@ -84,7 +86,7 @@ class MonetarySummation(Element):
 
     class Meta:
         namespace = NS_RAM
-        tag = "SpecifiedTradeSettlementMonetarySummation"
+        tag = "SpecifiedTradeSettlementHeaderMonetarySummation"
 
 
 class BillingSpecifiedPeriod(Element):
index 7960ff81a62635414d7609ea8aa6075d0b819ad5..249d738a8c1af9e027b4cb0ac592ec5d34048008 100644 (file)
@@ -60,9 +60,9 @@ class Element(metaclass=BaseElementMeta):
         if self.required or list(el) or el.text:
             node.append(el)
 
-    def serialize(self):
+    def serialize(self, schema="FACTUR-X_BASIC"):
         xml = b"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + ET.tostring(self.to_etree(), "utf-8")
-        return validate_xml(xmlout=xml, schema="ZUGFeRD1p0")
+        return validate_xml(xmlout=xml, schema=schema)
 
     def from_etree(self, root):
         if hasattr(self, 'Meta') and hasattr(self.Meta, 'namespace') and root.tag != "{%s}%s" % (
index 52bad8209405778d5cbb18d954dff82fa3289927..6e48aae73040aae8441af3063b39516077b3cca7 100644 (file)
@@ -81,10 +81,10 @@ class TradeSettlement(Element):
 
 
 class TradeTransaction(Element):
+    items = MultiField(LineItem, required=True)
     agreement = Field(TradeAgreement, required=True)
     delivery = Field(TradeDelivery, required=True)
     settlement = Field(TradeSettlement, required=True)
-    items = MultiField(LineItem, required=True)
 
     class Meta:
         namespace = NS_RSM
index 632bff1f4c9132257c7a203c825a705793198eb3..82b0d7a47a01d39860cbb64b128914039ba95a4e 100644 (file)
@@ -101,7 +101,7 @@ class LineSummation(Element):
 
     class Meta:
         namespace = NS_RAM
-        tag = "SpecifiedTradeSettlementMonetarySummation"
+        tag = "SpecifiedTradeSettlementLineMonetarySummation"
 
 
 class LineSettlement(Element):
@@ -118,10 +118,10 @@ class LineSettlement(Element):
 
 class LineItem(Element):
     document = Field(LineDocument, required=True)
+    product = Field(TradeProduct)
     agreement = Field(LineAgreement)
     delivery = Field(LineDelivery)
     settlement = Field(LineSettlement, required=True)
-    product = Field(TradeProduct)
 
     class Meta:
         namespace = NS_RAM
index 863822c7127e03f593d62c8d682eb6faddecfeb0..520882c34d264ae66a0baeb42c78309b1834db98 100644 (file)
@@ -14,6 +14,7 @@ def test_sample_roundtrip(filename):
         open(os.path.join(os.path.dirname(__file__), 'samples', filename), 'rb').read(),
         remove_comments=True
     )
+    schema = 'FACTUR-X_' + filename.split('_')[2]
     doc = Invoice.parse(origxml)
-    generatedxml = prettify(doc.serialize())
+    generatedxml = prettify(doc.serialize(schema))
     assert origxml.decode().strip() == generatedxml.decode().strip()