From: Ben Dangelmayr Date: Wed, 18 May 2022 13:08:39 +0000 (+0200) Subject: zugferd v2.2 partial update X-Git-Tag: 2.2.0~1^2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c4e6b2afc23f5ce0b4f56d294c07372c7934eec6;p=thirdparty%2Fpython-drafthorse.git zugferd v2.2 partial update --- diff --git a/drafthorse/models/accounting.py b/drafthorse/models/accounting.py index 893dbcf..85d8e77 100644 --- a/drafthorse/models/accounting.py +++ b/drafthorse/models/accounting.py @@ -2,11 +2,25 @@ from . import BASIC, COMFORT, EXTENDED, NS_RAM from .elements import Element from .fields import ( - CurrencyField, DateTimeField, DecimalField, IndicatorField, MultiField, - QuantityField, StringField, + CurrencyField, Field, DateTimeField, DecimalField, IndicatorField, MultiField, + QuantityField, StringField, IDField ) +class BillingSpecifiedPeriod(Element): + description = StringField(NS_RAM, "Description", required=True, profile=COMFORT, + _d="Freitext der Zahlungsbedingungen") + start = DateTimeField(NS_RAM, "StartDateTime", required=True, profile=COMFORT) + end = DateTimeField(NS_RAM, "EndDateTime", required=True, profile=COMFORT) + class Meta: + namespace = NS_RAM + tag = "BillingSpecifiedPeriod" +class SellerOrderReferencedDocument(Element): + issuer_ID = IDField(NS_RAM, "IssuerAssignedID", profile=COMFORT) + issue_date_time = DateTimeField(NS_RAM, "FormattedIssueDateTime", required=True, profile=EXTENDED) + class Meta: + namespace = NS_RAM + tag = "SellerOrderReferencedDocument" class LineApplicableTradeTax(Element): calculated_amount = DecimalField(NS_RAM, "CalculatedAmount", required=True, profile=BASIC, _d="Steuerbetrag") @@ -18,7 +32,6 @@ class LineApplicableTradeTax(Element): profile=COMFORT, _d="Steuerkategorie (Wert)") applicable_percent = DecimalField(NS_RAM, "ApplicablePercent", required=True, profile=BASIC) - class Meta: namespace = NS_RAM tag = "ApplicableTradeTax" @@ -45,7 +58,6 @@ class ApplicableTradeTax(Element): profile=COMFORT, _d="Steuerkategorie (Wert)") rate_applicable_percent = DecimalField(NS_RAM, "RateApplicablePercent", required=True, profile=BASIC) - class Meta: namespace = NS_RAM tag = "ApplicableTradeTax" @@ -90,15 +102,6 @@ class MonetarySummation(Element): tag = "SpecifiedTradeSettlementHeaderMonetarySummation" -class BillingSpecifiedPeriod(Element): - start = DateTimeField(NS_RAM, "StartDateTime", required=True, profile=COMFORT) - end = DateTimeField(NS_RAM, "EndDateTime", required=True, profile=COMFORT) - - class Meta: - namespace = NS_RAM - tag = "BillingSpecifiedPeriod" - - class AppliedTradeTax(Element): type_code = StringField(NS_RAM, "TypeCode", required=True, profile=COMFORT) category_code = StringField(NS_RAM, "CategoryCode", required=True, profile=COMFORT) diff --git a/drafthorse/models/party.py b/drafthorse/models/party.py index b4d4e2f..19fdbbf 100644 --- a/drafthorse/models/party.py +++ b/drafthorse/models/party.py @@ -14,6 +14,12 @@ class PostalTradeAddress(Element): namespace = NS_RAM tag = "PostalTradeAddress" +class URIUniversalCommunication(Element): + uri_ID = IDField(NS_RAM, "URIID", required=False, profile=BASIC) + + class Meta: + namespace = NS_RAM + tag = "URIUniversalCommunication" class TaxRegistration(Element): id = IDField(NS_RAM, "ID") @@ -22,7 +28,6 @@ class TaxRegistration(Element): namespace = NS_RAM tag = "SpecifiedTaxRegistration" - class PhoneNumber(Element): number = StringField(NS_RAM, "CompleteNumber", required=False, profile=EXTENDED) @@ -75,7 +80,14 @@ class TradeParty(Element): address = Field(PostalTradeAddress, required=False, profile=BASIC, _d="Anschrift des Käufers") tax_registrations = MultiField(TaxRegistration, required=False, profile=BASIC) + electronic_adress = MultiField(URIUniversalCommunication, required=False, profile=BASIC) + description = StringField(NS_RAM, "Description", required=True, profile=COMFORT, + _d="Freitext der Zahlungsbedingungen") +class SellerTaxRepresentativeTradeParty(TradeParty): + class Meta: + namespace = NS_RAM + tag = "SellerTaxRepresentativeTradeParty" class PayeeTradeParty(TradeParty): class Meta: diff --git a/drafthorse/models/payment.py b/drafthorse/models/payment.py index 3f7c94a..9d1f695 100644 --- a/drafthorse/models/payment.py +++ b/drafthorse/models/payment.py @@ -103,3 +103,4 @@ class PaymentTerms(Element): class Meta: namespace = NS_RAM tag = "SpecifiedTradePaymentTerms" + diff --git a/drafthorse/models/references.py b/drafthorse/models/references.py index d423b38..6e3ca2b 100644 --- a/drafthorse/models/references.py +++ b/drafthorse/models/references.py @@ -1,14 +1,24 @@ from . import COMFORT, EXTENDED, NS_RAM from .elements import Element -from .fields import DirectDateTimeField, StringField +from .fields import DirectDateTimeField, StringField, Field +class ProcuringProjectType(Element): + id = StringField(NS_RAM, "ID") + name = StringField(NS_RAM, "Name") + class Meta: + namespace = NS_RAM + tag = "ProcuringProjectType" class ReferencedDocument(Element): date_time_string = DirectDateTimeField(NS_RAM, "DateTimeString", required=False, profile=COMFORT) issuer_assigned_id = StringField(NS_RAM, "IssuerAssignedID", required=False, profile=COMFORT) - +class AttachmentBinaryObject(Element): + name = StringField(NS_RAM, "filename", profile=EXTENDED) + class Meta: + namespace = NS_RAM + tag = "AttachmentBinaryObject" class BuyerOrderReferencedDocument(ReferencedDocument): class Meta: @@ -30,11 +40,25 @@ class AdditionalReferencedDocument(Element): date_time_string = DirectDateTimeField(NS_RAM, "DateTimeString", required=False, profile=COMFORT) type_code = StringField(NS_RAM, "TypeCode", profile=EXTENDED, required=True) - + name = StringField(NS_RAM, "Name", profile=COMFORT, required=False) + attached_object = Field(AttachmentBinaryObject, required=False, profile=EXTENDED) class Meta: namespace = NS_RAM tag = "AdditionalReferencedDocument" +class InvoiceReferencedDocument(Element): + issuer_assigned_id = StringField(NS_RAM, "IssuerAssignedID", required=False, + profile=COMFORT) + + date_time_string = DirectDateTimeField(NS_RAM, "DateTimeString", required=True, + profile=COMFORT) + type_code = StringField(NS_RAM, "TypeCode", profile=EXTENDED, required=False) + + + class Meta: + namespace = NS_RAM + tag = "InvoiceReferencedDocument" + class UltimateCustomerOrderReferencedDocument(ReferencedDocument): class Meta: diff --git a/drafthorse/models/trade.py b/drafthorse/models/trade.py index c299606..ef30cef 100644 --- a/drafthorse/models/trade.py +++ b/drafthorse/models/trade.py @@ -1,23 +1,22 @@ from . import BASIC, COMFORT, EXTENDED, NS_RAM, NS_RSM from .accounting import ( - ApplicableTradeTax, AppliedTradeTax, BillingSpecifiedPeriod, - MonetarySummation, ReceivableAccountingAccount, TradeAllowanceCharge, + ApplicableTradeTax, AppliedTradeTax, + MonetarySummation, ReceivableAccountingAccount, TradeAllowanceCharge, BillingSpecifiedPeriod, SellerOrderReferencedDocument ) from .delivery import TradeDelivery from .elements import Element -from .fields import DecimalField, Field, MultiField, StringField +from .fields import DecimalField, Field, MultiField, StringField, IDField from .party import ( BuyerTradeParty, EndUserTradeParty, InvoiceeTradeParty, PayeeTradeParty, - SellerTradeParty, + SellerTradeParty, SellerTaxRepresentativeTradeParty, ) from .payment import PaymentMeans, PaymentTerms from .references import ( AdditionalReferencedDocument, BuyerOrderReferencedDocument, - ContractReferencedDocument, UltimateCustomerOrderReferencedDocument, + ContractReferencedDocument, UltimateCustomerOrderReferencedDocument, ProcuringProjectType, InvoiceReferencedDocument ) from .tradelines import LineItem - class DeliveryTerms(Element): type_code = StringField(NS_RAM, "DeliveryTypeCode", required=False, profile=EXTENDED, _d="Lieferbedingung (Code)") @@ -39,7 +38,11 @@ class TradeAgreement(Element): contract = Field(ContractReferencedDocument, required=False, profile=COMFORT) additional_references = MultiField(AdditionalReferencedDocument, required=False, profile=COMFORT) - + description = StringField(NS_RAM, "Description", required=False, + profile=COMFORT) + seller_tax_representative_party = Field(SellerTaxRepresentativeTradeParty, required=False) + order_document = Field(SellerOrderReferencedDocument, required=False) + procuring_project_type = Field(ProcuringProjectType, required=False) class Meta: namespace = NS_RAM tag = "ApplicableHeaderTradeAgreement" @@ -74,7 +77,10 @@ class TradeSettlement(Element): _d="Detailinformation zu Belegsummen") accounting_account = Field(ReceivableAccountingAccount, required=False, profile=EXTENDED, _d="Detailinformationen zur Buchungsreferenz") - + creditor_reference_ID = IDField(NS_RAM, "CreditorReferenceID") + period = Field(BillingSpecifiedPeriod, required=False, profile=BASIC) + tax_currency_code = StringField(NS_RAM, "TaxCurrencyCode", required=False, profile=COMFORT) + invoice_referenced_document = Field(InvoiceReferencedDocument, required=False, profile=BASIC) class Meta: namespace = NS_RAM tag = "ApplicableHeaderTradeSettlement" diff --git a/drafthorse/models/tradelines.py b/drafthorse/models/tradelines.py index 9ba88fb..dfda603 100644 --- a/drafthorse/models/tradelines.py +++ b/drafthorse/models/tradelines.py @@ -1,7 +1,7 @@ from . import BASIC, COMFORT, EXTENDED, NS_RAM from .accounting import ( AccountingAccount, ApplicableTradeTax, BillingSpecifiedPeriod, - TradeAllowanceCharge, + TradeAllowanceCharge, ReceivableAccountingAccount ) from .delivery import SupplyChainEvent from .elements import Element @@ -15,7 +15,7 @@ from .references import ( LineAdditionalReferencedDocument, LineBuyerOrderReferencedDocument, LineContractReferencedDocument, LineUltimateCustomerOrderReferencedDocument, LineDeliveryNoteReferencedDocument, LineDespatchAdviceReferencedDocument, - LineReceivingAdviceReferencedDocument, + LineReceivingAdviceReferencedDocument, InvoiceReferencedDocument ) @@ -106,11 +106,15 @@ class LineSummation(Element): class LineSettlement(Element): trade_tax = Field(ApplicableTradeTax, required=False, profile=COMFORT) - period = Field(BillingSpecifiedPeriod, required=False, profile=EXTENDED) accounting_account = Field(AccountingAccount, required=False, profile=EXTENDED, _d="Kostenstelle") monetary_summation = Field(LineSummation, required=False, profile=COMFORT) - + period = Field(BillingSpecifiedPeriod, required=False, profile=COMFORT) + allowance_charge = MultiField(TradeAllowanceCharge, required=False, profile=COMFORT, + _d="Schalter für Zu-/Abschlag") + invoice_referenced_document = Field(InvoiceReferencedDocument, required=False, profile=EXTENDED) + accounting_account = Field(ReceivableAccountingAccount, required=False, profile=EXTENDED, + _d="Detailinformationen zur Buchungsreferenz") class Meta: namespace = NS_RAM tag = "SpecifiedLineTradeSettlement" diff --git a/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd index 4803b82..1e0277d 100644 --- a/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd +++ b/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -458,6 +458,7 @@ + @@ -701,6 +702,9 @@ + + + diff --git a/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd index dac9f9c..66f338a 100644 --- a/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd +++ b/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -20,12 +20,13 @@ - + + @@ -63,9 +64,10 @@ + - + @@ -83,6 +85,7 @@ + @@ -94,6 +97,7 @@ + @@ -118,7 +122,7 @@ - + @@ -126,7 +130,7 @@ - + @@ -156,11 +160,12 @@ + - + @@ -177,11 +182,12 @@ - + + @@ -190,6 +196,7 @@ + @@ -204,7 +211,7 @@ - + diff --git a/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd index 20085d5..f9cd7dd 100644 --- a/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd +++ b/drafthorse/schema/FACTUR-X_BASIC_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -49,7 +49,7 @@ - + diff --git a/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd index 0aa4b17..aaa78d2 100644 --- a/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd +++ b/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -458,6 +458,7 @@ + @@ -702,6 +703,9 @@ + + + diff --git a/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd index 24fe52f..be4a4b0 100644 --- a/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd +++ b/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -26,7 +26,7 @@ - + @@ -77,7 +77,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -166,7 +166,7 @@ - + @@ -201,7 +201,7 @@ - + @@ -220,7 +220,7 @@ - + @@ -233,7 +233,7 @@ - + diff --git a/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd index b318b17..3aa4d00 100644 --- a/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd +++ b/drafthorse/schema/FACTUR-X_EN16931_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -73,7 +73,7 @@ - + diff --git a/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd b/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd index 5c88319..1deda10 100644 --- a/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd +++ b/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_QualifiedDataType_100.xsd @@ -227,6 +227,14 @@ + + + + + + + + @@ -474,6 +482,7 @@ + @@ -1318,14 +1327,34 @@ + + + + + + + + + + + + + + + + + + + + @@ -1349,30 +1378,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1456,6 +1533,14 @@ + + + + + + + + diff --git a/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd b/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd index 81bc460..8198576 100644 --- a/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd +++ b/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_100.xsd @@ -33,12 +33,13 @@ - + + @@ -68,13 +69,17 @@ + + + + @@ -101,6 +106,7 @@ + @@ -124,6 +130,7 @@ + @@ -150,8 +157,9 @@ + - + @@ -189,7 +197,7 @@ - + @@ -207,9 +215,11 @@ - + + + @@ -230,7 +240,7 @@ - + @@ -238,7 +248,7 @@ - + @@ -274,7 +284,7 @@ - + @@ -289,6 +299,7 @@ + @@ -296,7 +307,7 @@ - + @@ -309,7 +320,7 @@ - + @@ -317,9 +328,10 @@ + - + @@ -351,6 +363,7 @@ + @@ -361,8 +374,15 @@ + + + + + + + @@ -370,6 +390,7 @@ + @@ -396,6 +417,10 @@ + + + + @@ -417,7 +442,7 @@ - + diff --git a/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd b/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd index 5916ec2..a29d4fb 100644 --- a/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd +++ b/drafthorse/schema/FACTUR-X_EXTENDED_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_100.xsd @@ -38,7 +38,6 @@ - @@ -69,7 +68,7 @@ - + @@ -86,7 +85,7 @@ - + diff --git a/tests/samples/zugferd_2p1_EXTENDED_InnergemeinschLieferungMehrereBestellungen.xml b/tests/samples/zugferd_2p1_EXTENDED_InnergemeinschLieferungMehrereBestellungen.xml index 4287ee2..91faaf1 100644 --- a/tests/samples/zugferd_2p1_EXTENDED_InnergemeinschLieferungMehrereBestellungen.xml +++ b/tests/samples/zugferd_2p1_EXTENDED_InnergemeinschLieferungMehrereBestellungen.xml @@ -294,14 +294,14 @@ HRB Berlin 13086 K 0 - - - 20181001 - - - 20181031 - - + + + 20181001 + + + 20181031 + + 20181130