mikrowerk-edi-invoicing 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {mikrowerk_edi_invoicing-0.2.0/mikrowerk_edi_invoicing.egg-info → mikrowerk_edi_invoicing-0.3.0}/PKG-INFO +2 -3
  2. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/__init__.py +17 -0
  3. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/__init__.py +6 -0
  4. mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/x_mapper/drafthorse_elements_helper.py → mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/dom_elements_helper.py +7 -7
  5. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/__init__.py +10 -0
  6. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/accounting.py +246 -0
  7. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/container.py +94 -0
  8. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/delivery.py +65 -0
  9. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/document.py +112 -0
  10. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/elements.py +432 -0
  11. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/fields.py +343 -0
  12. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/note.py +13 -0
  13. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/party.py +198 -0
  14. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/payment.py +207 -0
  15. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/product.py +105 -0
  16. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/references.py +145 -0
  17. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/trade.py +225 -0
  18. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/models/tradelines.py +188 -0
  19. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/pdf.py +353 -0
  20. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/utils.py +22 -0
  21. {mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/x_mapper → mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser}/xml_cii_dom_parser.py +4 -5
  22. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/cii_dom_parser/xmp_schema.py +86 -0
  23. {mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/x_mapper → mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser}/cross_industry_invoice_mapper.py +12 -4
  24. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/model/__init__.py +4 -0
  25. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/edi_invoice_parser/model/x_rechnung.py +4 -1
  26. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/tests/__init__.py +3 -0
  27. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/edi_invoice_parser/tests/test_parse_x_rechnung.py +1 -1
  28. mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/ubl_sax_parser/__init__.py +3 -0
  29. {mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/x_mapper → mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/ubl_sax_parser}/xml_ubl_sax_parser.py +32 -3
  30. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0/mikrowerk_edi_invoicing.egg-info}/PKG-INFO +2 -3
  31. mikrowerk_edi_invoicing-0.3.0/mikrowerk_edi_invoicing.egg-info/SOURCES.txt +72 -0
  32. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/mikrowerk_edi_invoicing.egg-info/requires.txt +0 -1
  33. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/setup.py +3 -4
  34. mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/model/__init__.py +0 -3
  35. mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/tests/__init__.py +0 -4
  36. mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/util/__init__.py +0 -0
  37. mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/x_mapper/__init__.py +0 -8
  38. mikrowerk_edi_invoicing-0.2.0/mikrowerk_edi_invoicing.egg-info/SOURCES.txt +0 -36
  39. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/LICENSE +0 -0
  40. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/README.md +0 -0
  41. {mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser/x_mapper → mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/model}/xml_abstract_x_rechnung_parser.py +0 -0
  42. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/edi_invoice_parser/tests/test_iban_handling.py +0 -0
  43. {mikrowerk_edi_invoicing-0.2.0/edi_invoice_parser → mikrowerk_edi_invoicing-0.3.0/edi_invoice_parser/util}/__init__.py +0 -0
  44. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/edi_invoice_parser/util/file_helper.py +0 -0
  45. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/mikrowerk_edi_invoicing.egg-info/dependency_links.txt +0 -0
  46. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/mikrowerk_edi_invoicing.egg-info/top_level.txt +0 -0
  47. {mikrowerk_edi_invoicing-0.2.0 → mikrowerk_edi_invoicing-0.3.0}/setup.cfg +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mikrowerk_edi_invoicing
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Parser for EDI invoices in CII or UBL format
5
5
  Author: Mikrowerk a Gammadata Division
6
6
  Author-email: info@mikrowerk.com
7
- License: Affero-3
7
+ License: GNU Affero General Public License v3
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
10
10
  Classifier: Operating System :: OS Independent
@@ -18,7 +18,6 @@ Requires-Dist: isort
18
18
  Requires-Dist: black
19
19
  Requires-Dist: coverage
20
20
  Requires-Dist: codecov
21
- Requires-Dist: drafthorse~=2.4.0
22
21
  Requires-Dist: factur-x==3.6
23
22
  Requires-Dist: jsonpickle~=4.0.1
24
23
  Requires-Dist: parameterized
@@ -0,0 +1,17 @@
1
+ from .cross_industry_invoice_mapper import parse_and_map_x_rechnung
2
+ from .model.x_rechnung import (XRechnung, XRechnungTradeParty, XRechnungTradeAddress, XRechnungTradeContact,
3
+ XRechnungPaymentMeans, XRechnungBankAccount, XRechnungCurrency, XRechnungTradeLine,
4
+ XRechnungAppliedTradeTax, XRechnungFinancialCard)
5
+
6
+ __all__ = ["parse_and_map_x_rechnung",
7
+ "XRechnung",
8
+ "XRechnungTradeParty",
9
+ "XRechnungTradeAddress",
10
+ "XRechnungTradeContact",
11
+ "XRechnungPaymentMeans",
12
+ "XRechnungBankAccount",
13
+ "XRechnungCurrency",
14
+ "XRechnungTradeLine",
15
+ "XRechnungAppliedTradeTax",
16
+ "XRechnungFinancialCard"
17
+ ]
@@ -0,0 +1,6 @@
1
+ from .dom_elements_helper import get_string_from_text as get_string_from_text
2
+ from .xml_cii_dom_parser import XRechnungCIIXMLParser
3
+
4
+ __all__ = ['XRechnungCIIXMLParser']
5
+
6
+ version = "2.4.0"
@@ -1,10 +1,10 @@
1
- from drafthorse.models.elements import (StringElement, DirectDateTimeElement, DateTimeElement, DecimalElement,
2
- IndicatorElement, QuantityElement, CurrencyElement, ClassificationElement,
3
- Container)
4
- from drafthorse.models.party import EmailURI, PhoneNumber, FaxNumber
5
- from drafthorse.models.note import IncludedNote
6
- from drafthorse.models.payment import PaymentTerms
7
- from drafthorse.models.container import IDContainer, StringContainer, CurrencyContainer
1
+ from .models.elements import (StringElement, DirectDateTimeElement, DateTimeElement, DecimalElement,
2
+ IndicatorElement, QuantityElement, CurrencyElement, ClassificationElement,
3
+ Container)
4
+ from .models.party import EmailURI, PhoneNumber, FaxNumber
5
+ from .models.note import IncludedNote
6
+ from .models.payment import PaymentTerms
7
+ from .models.container import IDContainer, StringContainer, CurrencyContainer
8
8
 
9
9
  """
10
10
  Code zur Beschreibung des Datumsformats
@@ -0,0 +1,10 @@
1
+ NS_RSM = "urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
2
+ NS_UDT = "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
3
+ NS_A = "urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
4
+ NS_RAM = (
5
+ "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
6
+ )
7
+ NS_QDT = "urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
8
+ BASIC = "BASIC"
9
+ COMFORT = "COMFORT"
10
+ EXTENDED = "EXTENDED"
@@ -0,0 +1,246 @@
1
+ from . import BASIC, COMFORT, EXTENDED, NS_RAM
2
+ from .elements import Element
3
+ from .fields import (
4
+ CurrencyField,
5
+ DateTimeField,
6
+ DecimalField,
7
+ IndicatorField,
8
+ MultiCurrencyField,
9
+ MultiField,
10
+ QuantityField,
11
+ StringField,
12
+ )
13
+
14
+
15
+ class BillingSpecifiedPeriod(Element):
16
+ description = StringField(
17
+ NS_RAM,
18
+ "Description",
19
+ required=True,
20
+ profile=COMFORT,
21
+ _d="Freitext der Zahlungsbedingungen",
22
+ )
23
+ start = DateTimeField(NS_RAM, "StartDateTime", required=True, profile=COMFORT)
24
+ end = DateTimeField(NS_RAM, "EndDateTime", required=True, profile=COMFORT)
25
+
26
+ class Meta:
27
+ namespace = NS_RAM
28
+ tag = "BillingSpecifiedPeriod"
29
+
30
+
31
+ class ApplicableTradeTax(Element):
32
+ calculated_amount = DecimalField(
33
+ NS_RAM, "CalculatedAmount", required=True, profile=BASIC, _d="Steuerbetrag"
34
+ )
35
+ type_code = StringField(
36
+ NS_RAM, "TypeCode", required=True, profile=BASIC, _d="Steuerart (Code)"
37
+ )
38
+ exemption_reason = StringField(
39
+ NS_RAM,
40
+ "ExemptionReason",
41
+ required=False,
42
+ profile=BASIC,
43
+ _d="Grund der Steuerbefreiung (Freitext)",
44
+ )
45
+ basis_amount = DecimalField(
46
+ NS_RAM,
47
+ "BasisAmount",
48
+ required=True,
49
+ profile=BASIC,
50
+ _d="Basisbetrag der Steuerberechnung",
51
+ )
52
+ line_total_basis_amount = DecimalField(
53
+ NS_RAM,
54
+ "LineTotalBasisAmount",
55
+ required=False,
56
+ profile=EXTENDED,
57
+ _d="Warenbetrag des Steuersatzes",
58
+ )
59
+ allowance_charge_basis_amount = DecimalField(
60
+ NS_RAM,
61
+ "AllowanceChargeBasisAmount",
62
+ required=False,
63
+ profile=EXTENDED,
64
+ _d="Gesamtbetrag Zu- und Abschläge des Steuersatzes",
65
+ )
66
+ category_code = StringField(
67
+ NS_RAM,
68
+ "CategoryCode",
69
+ required=False,
70
+ profile=BASIC,
71
+ _d="Steuerkategorie (Wert)",
72
+ )
73
+ exemption_reason_code = StringField(
74
+ NS_RAM,
75
+ "ExemptionReasonCode",
76
+ required=False,
77
+ profile=BASIC,
78
+ _d="Grund der Steuerbefreiung (Code)",
79
+ )
80
+ tax_point_date = DateTimeField(
81
+ NS_RAM, "TaxPointDate", required=False, profile=COMFORT
82
+ )
83
+ due_date_type_code = StringField(
84
+ NS_RAM,
85
+ "DueDateTypeCode",
86
+ required=False,
87
+ profile=BASIC,
88
+ )
89
+ rate_applicable_percent = DecimalField(
90
+ NS_RAM, "RateApplicablePercent", required=True, profile=BASIC
91
+ )
92
+
93
+ class Meta:
94
+ namespace = NS_RAM
95
+ tag = "ApplicableTradeTax"
96
+
97
+
98
+ class AccountingAccount(Element):
99
+ id = StringField(
100
+ NS_RAM, "ID", required=True, profile=EXTENDED, _d="Buchungsreferenz"
101
+ )
102
+
103
+ class Meta:
104
+ namespace = NS_RAM
105
+ tag = "SpecifiedTradeAccountingAccount"
106
+
107
+
108
+ class ReceivableAccountingAccount(Element):
109
+ id = StringField(
110
+ NS_RAM, "ID", required=True, profile=EXTENDED, _d="Buchungsreferenz"
111
+ )
112
+ type_code = StringField(NS_RAM, "TypeCode", required=True, profile=EXTENDED)
113
+
114
+ class Meta:
115
+ namespace = NS_RAM
116
+ tag = "ReceivableSpecifiedTradeAccountingAccount"
117
+
118
+
119
+ class MonetarySummation(Element):
120
+ line_total = DecimalField(
121
+ NS_RAM,
122
+ "LineTotalAmount",
123
+ required=True,
124
+ profile=BASIC,
125
+ _d="Gesamtbetrag der Positionen",
126
+ )
127
+ charge_total = DecimalField(
128
+ NS_RAM,
129
+ "ChargeTotalAmount",
130
+ required=True,
131
+ profile=BASIC,
132
+ _d="Gesamtbetrag der Zuschläge",
133
+ )
134
+ allowance_total = DecimalField(
135
+ NS_RAM,
136
+ "AllowanceTotalAmount",
137
+ required=True,
138
+ profile=BASIC,
139
+ _d="Gesamtbetrag der Abschläge",
140
+ )
141
+ tax_basis_total = CurrencyField(
142
+ NS_RAM,
143
+ "TaxBasisTotalAmount",
144
+ required=True,
145
+ profile=BASIC,
146
+ _d="Steuerbasisbetrag",
147
+ )
148
+ tax_total = CurrencyField(
149
+ NS_RAM, "TaxTotalAmount", required=True, profile=BASIC, _d="Steuergesamtbetrag"
150
+ )
151
+ tax_total_other_currency = MultiCurrencyField(
152
+ NS_RAM, "TaxTotalAmount", profile=EXTENDED, _d="Steuergesamtbetrag"
153
+ )
154
+ rounding_amount = DecimalField(
155
+ NS_RAM,
156
+ "RoundingAmount",
157
+ required=False,
158
+ profile=COMFORT,
159
+ )
160
+ grand_total = CurrencyField(
161
+ NS_RAM, "GrandTotalAmount", required=True, profile=BASIC, _d="Bruttosumme"
162
+ )
163
+ prepaid_total = DecimalField(
164
+ NS_RAM,
165
+ "TotalPrepaidAmount",
166
+ required=False,
167
+ profile=COMFORT,
168
+ _d="Anzahlungsbetrag",
169
+ )
170
+ due_amount = DecimalField(
171
+ NS_RAM, "DuePayableAmount", required=False, profile=COMFORT, _d="Zahlbetrag"
172
+ )
173
+
174
+ class Meta:
175
+ namespace = NS_RAM
176
+ tag = "SpecifiedTradeSettlementHeaderMonetarySummation"
177
+
178
+
179
+ class AppliedTradeTax(Element):
180
+ type_code = StringField(NS_RAM, "TypeCode", required=True, profile=COMFORT)
181
+ category_code = StringField(NS_RAM, "CategoryCode", required=True, profile=COMFORT)
182
+ rate_applicable_percent = DecimalField(
183
+ NS_RAM, "RateApplicablePercent", required=True, profile=COMFORT
184
+ )
185
+
186
+ class Meta:
187
+ namespace = NS_RAM
188
+ tag = "AppliedTradeTax"
189
+
190
+
191
+ class CategoryTradeTax(AppliedTradeTax):
192
+ class Meta:
193
+ namespace = NS_RAM
194
+ tag = "CategoryTradeTax"
195
+
196
+
197
+ class TradeAllowanceCharge(Element):
198
+ indicator = IndicatorField(
199
+ NS_RAM,
200
+ "ChargeIndicator",
201
+ required=False,
202
+ profile=COMFORT,
203
+ _d="Schalter für Zu-/Abschlag",
204
+ )
205
+ sequence_numeric = DecimalField(
206
+ NS_RAM,
207
+ "SequenceNumeric",
208
+ required=False,
209
+ profile=EXTENDED,
210
+ _d="Berechnungsreihenfolge",
211
+ )
212
+ calculation_percent = DecimalField( # TODO: Should be deprecated?
213
+ NS_RAM,
214
+ "CalculationPercent",
215
+ required=False,
216
+ profile=COMFORT,
217
+ _d="Rabatt in Prozent",
218
+ )
219
+ basis_amount = DecimalField( # TODO: Should be deprecated?
220
+ NS_RAM,
221
+ "BasisAmount",
222
+ required=False,
223
+ profile=COMFORT,
224
+ _d="Basisbetrag des Rabatts",
225
+ )
226
+ basis_quantity = QuantityField(
227
+ NS_RAM,
228
+ "BasisQuantity",
229
+ required=False,
230
+ profile=EXTENDED,
231
+ _d="Basismenge des Rabatts",
232
+ )
233
+ actual_amount = DecimalField(
234
+ NS_RAM,
235
+ "ActualAmount",
236
+ required=True,
237
+ profile=COMFORT,
238
+ _d="Betrag des Zu-/Abschlags",
239
+ )
240
+ reason_code = StringField(NS_RAM, "ReasonCode", required=False, profile=COMFORT)
241
+ reason = StringField(NS_RAM, "Reason", required=False, profile=COMFORT)
242
+ trade_tax = MultiField(CategoryTradeTax, required=False, profile=COMFORT)
243
+
244
+ class Meta:
245
+ namespace = NS_RAM
246
+ tag = "SpecifiedTradeAllowanceCharge"
@@ -0,0 +1,94 @@
1
+ class Container:
2
+ def __init__(self, child_type):
3
+ super().__init__()
4
+ self.children = []
5
+ self.child_type = child_type
6
+
7
+ def add(self, item):
8
+ if isinstance(self.child_type, type) and not isinstance(item, self.child_type):
9
+ raise TypeError("{} is not of type {}".format(item, self.child_type))
10
+ self.children.append(item)
11
+
12
+ def append_to(self, node):
13
+ for child in self.children:
14
+ child.append_to(node)
15
+
16
+ def get_tag(self):
17
+ return "{%s}%s" % (self.child_type.Meta.namespace, self.child_type.Meta.tag)
18
+
19
+ def empty_element(self):
20
+ return self.child_type()
21
+
22
+ def add_from_etree(self, root):
23
+ childel = self.empty_element()
24
+ childel.from_etree(root)
25
+ self.add(childel)
26
+
27
+
28
+ class SimpleContainer(Container):
29
+ def __init__(self, child_type, namespace, tag):
30
+ super().__init__(child_type)
31
+ self.namespace = namespace
32
+ self.tag = tag
33
+
34
+ def get_tag(self):
35
+ return "{%s}%s" % (self.namespace, self.tag)
36
+
37
+ def empty_element(self):
38
+ raise NotImplementedError()
39
+
40
+ def set_element(self, el, child):
41
+ raise NotImplementedError()
42
+
43
+ def append_to(self, node):
44
+ for child in self.children:
45
+ el = self.empty_element()
46
+ self.set_element(el, child)
47
+ el.append_to(node)
48
+
49
+ def add_from_etree(self, root):
50
+ self.add(root.text)
51
+
52
+
53
+ class CurrencyContainer(SimpleContainer):
54
+ def empty_element(self):
55
+ from .elements import CurrencyElement
56
+
57
+ return CurrencyElement(namespace=self.namespace, tag=self.tag)
58
+
59
+ def set_element(self, el, child):
60
+ el._amount = child[0]
61
+ el._currency = child[1]
62
+
63
+ def add_from_etree(self, root):
64
+ if root.attrib.get("currencyID"):
65
+ self.add((root.text, root.attrib["currencyID"]))
66
+ else:
67
+ self.add(root.text)
68
+
69
+
70
+ class IDContainer(SimpleContainer):
71
+ def empty_element(self):
72
+ from .elements import IDElement
73
+
74
+ return IDElement(namespace=self.namespace, tag=self.tag)
75
+
76
+ def set_element(self, el, child):
77
+ el._text = child[1]
78
+ el._scheme_id = child[0]
79
+
80
+ def add_from_etree(self, root):
81
+ self.add((root.attrib["schemeID"], root.text))
82
+
83
+
84
+ class StringContainer(SimpleContainer):
85
+ def empty_element(self):
86
+ from .elements import StringElement
87
+
88
+ return StringElement(namespace=self.namespace, tag=self.tag)
89
+
90
+ def set_element(self, el, child):
91
+ el._text = child
92
+
93
+ def add_from_etree(self, root):
94
+ self.add(root.text)
@@ -0,0 +1,65 @@
1
+ from . import BASIC, EXTENDED, NS_RAM
2
+ from .elements import Element
3
+ from .fields import DateTimeField, Field, StringField
4
+ from .party import (
5
+ ShipFromTradeParty,
6
+ ShipToTradeParty,
7
+ UltimateShipToTradeParty,
8
+ )
9
+ from .references import (
10
+ DeliveryNoteReferencedDocument,
11
+ DespatchAdviceReferencedDocument,
12
+ )
13
+
14
+
15
+ class SupplyChainEvent(Element):
16
+ occurrence = DateTimeField(
17
+ NS_RAM,
18
+ "OccurrenceDateTime",
19
+ required=False,
20
+ profile=BASIC,
21
+ _d="Tatsächlicher Lieferungszeitpunkt",
22
+ )
23
+
24
+ class Meta:
25
+ namespace = NS_RAM
26
+ tag = "ActualDeliverySupplyChainEvent"
27
+
28
+
29
+ class LogisticsTransportMovement(Element):
30
+ mode_code = StringField(NS_RAM, "ModeCode", required=False, profile=EXTENDED)
31
+
32
+ class Meta:
33
+ namespace = NS_RAM
34
+ tag = "SpecifiedLogisticsTransportMovement"
35
+
36
+
37
+ class SupplyChainConsignment(Element): # TODO: Deprecated?
38
+ movement = Field(LogisticsTransportMovement, required=False, profile=EXTENDED)
39
+
40
+ class Meta:
41
+ namespace = NS_RAM
42
+ tag = "RelatedSupplyChainConsignment"
43
+
44
+
45
+ class TradeDelivery(Element):
46
+ consignment = Field(
47
+ SupplyChainConsignment,
48
+ default=False,
49
+ required=False,
50
+ _d="Detailinformationen zur Konsignation oder Sendung",
51
+ )
52
+ ship_to = Field(ShipToTradeParty, required=False, profile=EXTENDED)
53
+ ultimate_ship_to = Field(UltimateShipToTradeParty, required=False, profile=EXTENDED)
54
+ ship_from = Field(ShipFromTradeParty, required=False, profile=EXTENDED)
55
+ event = Field(SupplyChainEvent, required=False, profile=BASIC)
56
+ despatch_advice = Field(
57
+ DespatchAdviceReferencedDocument, required=False, profile=EXTENDED
58
+ )
59
+ delivery_note = Field(
60
+ DeliveryNoteReferencedDocument, required=False, profile=EXTENDED
61
+ )
62
+
63
+ class Meta:
64
+ namespace = NS_RAM
65
+ tag = "ApplicableHeaderTradeDelivery"
@@ -0,0 +1,112 @@
1
+ import xml.etree.cElementTree as ET
2
+
3
+ from .note import IncludedNote
4
+
5
+ from . import BASIC, EXTENDED, NS_A, NS_QDT, NS_RAM, NS_RSM, NS_UDT
6
+ from .elements import Element
7
+ from .fields import (
8
+ DateTimeField,
9
+ Field,
10
+ IndicatorField,
11
+ MultiField,
12
+ MultiStringField,
13
+ StringField,
14
+ )
15
+ from .trade import TradeTransaction
16
+
17
+
18
+ class GuidelineDocumentContextParameter(Element):
19
+ id = StringField(NS_RAM, "ID")
20
+
21
+ class Meta:
22
+ namespace = NS_RAM
23
+ tag = "GuidelineSpecifiedDocumentContextParameter"
24
+
25
+
26
+ class BusinessDocumentContextParameter(Element):
27
+ id = StringField(NS_RAM, "ID")
28
+
29
+ class Meta:
30
+ namespace = NS_RAM
31
+ tag = "BusinessProcessSpecifiedDocumentContextParameter"
32
+
33
+
34
+ class DocumentContext(Element):
35
+ test_indicator = IndicatorField(
36
+ NS_RAM, "TestIndicator", required=False, profile=EXTENDED, _d="Testkennzeichen"
37
+ )
38
+ business_parameter = Field(
39
+ BusinessDocumentContextParameter,
40
+ required=False,
41
+ profile=EXTENDED,
42
+ _d="Geschäftsprozess, Wert",
43
+ )
44
+ guideline_parameter = Field(
45
+ GuidelineDocumentContextParameter,
46
+ required=True,
47
+ profile=BASIC,
48
+ _d="Anwendungsempfehlung",
49
+ )
50
+
51
+ class Meta:
52
+ namespace = NS_RSM
53
+ tag = "ExchangedDocumentContext"
54
+
55
+
56
+ class EffectivePeriod(Element):
57
+ complete = DateTimeField(NS_RAM, "CompleteDateTime")
58
+
59
+ class Meta:
60
+ namespace = NS_RAM
61
+ tag = "EffectiveSpecifiedPeriod"
62
+
63
+
64
+ class Header(Element):
65
+ id = StringField(NS_RAM, "ID", required=True, profile=BASIC, _d="Rechnungsnummer")
66
+ name = StringField(
67
+ NS_RAM, "Name", required=True, profile=BASIC, _d="Dokumentenart (Freitext)"
68
+ )
69
+ type_code = StringField(
70
+ NS_RAM, "TypeCode", required=True, profile=BASIC, _d="Dokumentenart (Code)"
71
+ )
72
+ issue_date_time = DateTimeField(
73
+ NS_RAM, "IssueDateTime", required=True, profile=BASIC, _d="Rechnungsdatum"
74
+ )
75
+ copy_indicator = IndicatorField(
76
+ NS_RAM,
77
+ "CopyIndicator",
78
+ required=False,
79
+ profile=EXTENDED,
80
+ _d="Indikator Original/Kopie",
81
+ )
82
+ languages = MultiStringField(NS_RAM, "LanguageID", required=False, profile=EXTENDED)
83
+ effective_period = Field(
84
+ EffectivePeriod,
85
+ required=False,
86
+ profile=EXTENDED,
87
+ _d="Vertragliches Fälligkeitsdatum der Rechnung",
88
+ )
89
+ notes = MultiField(IncludedNote)
90
+
91
+ class Meta:
92
+ namespace = NS_RSM
93
+ tag = "ExchangedDocument"
94
+
95
+
96
+ class Document(Element):
97
+ context = Field(DocumentContext, required=True)
98
+ header = Field(Header, required=True)
99
+ trade = Field(TradeTransaction, required=True)
100
+
101
+ def __init__(self):
102
+ super().__init__()
103
+ ET.register_namespace("a", NS_A)
104
+ ET.register_namespace("rsm", NS_RSM)
105
+ ET.register_namespace("qdt", NS_QDT)
106
+ ET.register_namespace("ram", NS_RAM)
107
+ ET.register_namespace("xsi", "http://www.w3.org/2001/XMLSchema")
108
+ ET.register_namespace("udt", NS_UDT)
109
+
110
+ class Meta:
111
+ namespace = NS_RSM
112
+ tag = "CrossIndustryInvoice"