mikrowerk-edi-invoicing 0.6.6__py3-none-any.whl → 0.7.0__py3-none-any.whl

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.
@@ -38,7 +38,7 @@ def get_currency(self) -> (any, any):
38
38
  return self._amount, self._amount
39
39
 
40
40
 
41
- def get_currencies(self) -> [(any, any)]:
41
+ def get_currencies(self) -> list[tuple[any, any]]:
42
42
  res = []
43
43
  if self.children:
44
44
  for currency in self.children:
@@ -13,20 +13,20 @@ from ..model.xml_abstract_x_rechnung_parser import XMLAbstractXRechnungParser
13
13
  class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
14
14
 
15
15
  @classmethod
16
- def parse_and_map_x_rechnung(cls, _xml: any) -> TradeDocument:
16
+ def parse_and_map_x_rechnung(cls, _xml) -> TradeDocument:
17
17
  doc = Document.parse(_xml)
18
- return cls().map_to_x_rechnung(doc)
18
+ return cls.map_to_x_rechnung(doc)
19
19
 
20
20
  @classmethod
21
- def map_to_x_rechnung(cls, doc: any) -> TradeDocument:
21
+ def map_to_x_rechnung(cls, doc) -> TradeDocument:
22
22
  """
23
23
  :param doc: Element, the parsed dom root element
24
24
  :return:
25
25
  """
26
26
 
27
27
  return TradeDocument(
28
- name=f"{cls().TYPE_CODES.get(doc.header.type_code.get_string(), 'Unknown doc type ')} {doc.header.id.get_string()}",
29
- doc_type_name=f"{cls().TYPE_CODES.get(doc.header.type_code.get_string(), 'Unknown doc type ')}",
28
+ name=f"{cls.TYPE_CODES.get(doc.header.type_code.get_string(), 'Unknown doc type ')} {doc.header.id.get_string()}",
29
+ doc_type_name=f"{cls.TYPE_CODES.get(doc.header.type_code.get_string(), 'Unknown doc type ')}",
30
30
  doc_id=doc.header.id.get_string(),
31
31
  doc_type_code=int(doc.header.type_code.get_string()) if doc.header.type_code else None,
32
32
  issued_date_time=doc.header.issue_date_time.get_value(),
@@ -40,59 +40,58 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
40
40
  allowance_total_amount=doc.trade.settlement.monetary_summation.allowance_total.get_value(),
41
41
  tax_basis_total_amount=TradeCurrency.from_currency_tuple(
42
42
  doc.trade.settlement.monetary_summation.tax_basis_total.get_currency()),
43
- tax_total_amount=[TradeCurrency.from_currency_tuple(tpl) for tpl in
44
- doc.trade.settlement.monetary_summation.tax_total_other_currency.get_currencies()],
45
- # list of currency
43
+ tax_total_amount=cls.map_total_tax(doc.trade.settlement.monetary_summation.tax_total_other_currency),
46
44
  grand_total_amount=TradeCurrency.from_currency_tuple(
47
45
  doc.trade.settlement.monetary_summation.grand_total.get_currency()),
48
46
  total_prepaid_amount=doc.trade.settlement.monetary_summation.prepaid_total.get_value(),
49
47
  due_payable_amount=doc.trade.settlement.monetary_summation.due_amount.get_value(),
50
48
  delivered_date_time=datetime.now(),
51
- payment_means=cls().map_payment_means(
49
+ payment_means=cls.map_payment_means(
52
50
  doc.trade.settlement.payment_means) if doc.trade.settlement.payment_means else None,
53
51
  payment_terms=doc.trade.settlement.terms.get_string_elements("\n"),
54
- sender=cls().map_trade_party(doc.trade.agreement.seller) if hasattr(doc.trade.agreement,
55
- "seller") else None,
56
- invoicee=cls().map_trade_party(doc.trade.agreement.invoicee) if hasattr(doc.trade.agreement,
57
- "invoicee") else None,
58
- receiver=cls().map_trade_party(doc.trade.agreement.buyer) if hasattr(doc.trade.agreement,
59
- "buyer") else None,
60
- payee=cls().map_trade_party(doc.trade.agreement.payee) if hasattr(doc.trade.agreement, "payee") else None,
61
- trade_line_items=cls().map_trade_line_items(doc.trade.items) if hasattr(doc.trade, "items") else None,
62
- applicable_trade_taxes=cls().map_trade_taxes(doc.trade.settlement.trade_tax) if hasattr(
52
+ sender=cls.map_trade_party(doc.trade.agreement.seller) if hasattr(doc.trade.agreement,
53
+ "seller") else None,
54
+ invoicee=cls.map_trade_party(doc.trade.agreement.invoicee) if hasattr(doc.trade.agreement,
55
+ "invoicee") else None,
56
+ receiver=cls.map_trade_party(doc.trade.agreement.buyer) if hasattr(doc.trade.agreement,
57
+ "buyer") else None,
58
+ payee=cls.map_trade_party(doc.trade.agreement.payee) if hasattr(doc.trade.agreement, "payee") else None,
59
+ trade_line_items=cls.map_trade_line_items(doc.trade.items) if hasattr(doc.trade, "items") else None,
60
+ applicable_trade_taxes=cls.map_trade_taxes(doc.trade.settlement.trade_tax) if hasattr(
63
61
  doc.trade.settlement,
64
- "trade_tax") else None
62
+ "trade_tax") else []
65
63
  )
66
64
 
67
65
  @classmethod
68
- def map_trade_party(cls, trade_party: any) -> TradeParty:
69
- _global_id_schema, _global_id = cls().map_first_id(trade_party.global_id)
66
+ def map_trade_party(cls, trade_party) -> TradeParty:
67
+ _global_id_schema, _global_id = cls.map_first_id(trade_party.global_id)
70
68
  return TradeParty(
71
69
  name=trade_party.name.get_string(),
72
70
  description=trade_party.description.get_string(),
73
71
  global_id=_global_id,
74
72
  global_id_schema=_global_id_schema,
75
- email=cls().map_electronic_address(trade_party.electronic_address, 'EM') if hasattr(trade_party,
76
- "electronic_address") else None,
77
- vat_registration_number=cls().map_tax_registration(trade_party.tax_registrations, 'VA') if hasattr(
73
+ email=cls.map_electronic_address(trade_party.electronic_address, 'EM') if hasattr(trade_party,
74
+ "electronic_address") else None,
75
+ vat_registration_number=cls.map_tax_registration(trade_party.tax_registrations, 'VA') if hasattr(
78
76
  trade_party, 'tax_registrations') else None,
79
- fiscal_registration_number=cls().map_tax_registration(trade_party.tax_registrations, 'FC') if hasattr(
77
+ fiscal_registration_number=cls.map_tax_registration(trade_party.tax_registrations, 'FC') if hasattr(
80
78
  trade_party, 'tax_registrations') else None,
81
- address=cls().map_trade_address(trade_party.address) if hasattr(trade_party, 'address') else None,
82
- contact=cls().map_trade_contact(trade_party.contact) if hasattr(trade_party, 'contact') else None,
79
+ address=cls.map_trade_address(trade_party.address) if hasattr(trade_party, 'address') else None,
80
+ contact=cls.map_trade_contact(trade_party.contact) if hasattr(trade_party, 'contact') else None,
83
81
  id=trade_party.id.get_string() if hasattr(trade_party, 'id') else None,
84
82
  )
85
83
 
86
84
  @staticmethod
87
- def map_first_id(global_id: any) -> (str, str):
85
+ def map_first_id(global_id) -> tuple[str | None, str | None]:
88
86
  if global_id is not None and hasattr(global_id, "children") and len(global_id.children) > 0:
89
87
  for child in global_id.children:
90
88
  return child
89
+ return None, None
91
90
  else:
92
91
  return None, None
93
92
 
94
93
  @staticmethod
95
- def map_electronic_address(electronic_address: any, schema_id: str) -> str | None:
94
+ def map_electronic_address(electronic_address, schema_id: str) -> str | None:
96
95
  if electronic_address is not None and hasattr(electronic_address, "children") and len(
97
96
  electronic_address.children) > 0:
98
97
  for child in electronic_address.children:
@@ -102,7 +101,7 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
102
101
  return None
103
102
 
104
103
  @staticmethod
105
- def map_tax_registration(tax_reg: any, schema_id: str) -> str | None:
104
+ def map_tax_registration(tax_reg, schema_id: str) -> str | None:
106
105
  if tax_reg is not None and hasattr(tax_reg, "children") and len(
107
106
  tax_reg.children) > 0:
108
107
  for child in tax_reg.children:
@@ -112,7 +111,7 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
112
111
  return None
113
112
 
114
113
  @staticmethod
115
- def map_trade_address(trade_address: any) -> TradePartyAddress:
114
+ def map_trade_address(trade_address) -> TradePartyAddress:
116
115
  return TradePartyAddress(
117
116
  city_name=trade_address.city_name.get_string(),
118
117
  country_id=trade_address.country_id.get_string(),
@@ -124,7 +123,7 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
124
123
  )
125
124
 
126
125
  @staticmethod
127
- def map_trade_contact(trade_contact: any) -> TradePartyContact:
126
+ def map_trade_contact(trade_contact) -> TradePartyContact:
128
127
  return TradePartyContact(
129
128
  name=trade_contact.person_name.get_string(),
130
129
  email=trade_contact.email.get_string(),
@@ -134,7 +133,7 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
134
133
  )
135
134
 
136
135
  @staticmethod
137
- def map_bank_account(payment_means: any) -> BankAccount:
136
+ def map_bank_account(payment_means) -> BankAccount:
138
137
  return BankAccount(
139
138
  iban="".join(payment_means.payee_account.iban.get_string().split()) if (hasattr(payment_means,
140
139
  'payee_account')
@@ -145,24 +144,24 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
145
144
  )
146
145
 
147
146
  @staticmethod
148
- def map_financial_card(financial_card: any) -> FinancialCard:
147
+ def map_financial_card(financial_card) -> FinancialCard:
149
148
  return FinancialCard(
150
149
  id=financial_card.id.get_string(),
151
150
  cardholder_name=financial_card.cardholder_name.get_string(),
152
151
  )
153
152
 
154
153
  @classmethod
155
- def map_payment_means(cls, payment_means: any) -> TradePaymentMeans:
154
+ def map_payment_means(cls, payment_means) -> TradePaymentMeans:
156
155
  return TradePaymentMeans(
157
156
  information=payment_means.information.get_string(),
158
157
  type_code=payment_means.type_code.get_string(),
159
- payee_account=cls().map_bank_account(payment_means) if hasattr(payment_means, 'payee_account') else None,
160
- financial_card=cls().map_financial_card(payment_means.financial_card) if hasattr(payment_means,
161
- 'financial_card') else None,
158
+ payee_account=cls.map_bank_account(payment_means) if hasattr(payment_means, 'payee_account') else None,
159
+ financial_card=cls.map_financial_card(payment_means.financial_card) if hasattr(payment_means,
160
+ 'financial_card') else None,
162
161
  )
163
162
 
164
163
  @staticmethod
165
- def map_trade_tax(trade_tax: any) -> AppliedTradeTax:
164
+ def map_trade_tax(trade_tax) -> AppliedTradeTax:
166
165
  return AppliedTradeTax(
167
166
  type_code=trade_tax.type_code.get_string(),
168
167
  name=f"{trade_tax.type_code.get_string()} {trade_tax.rate_applicable_percent.get_value()}",
@@ -173,14 +172,21 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
173
172
  )
174
173
 
175
174
  @classmethod
176
- def map_trade_taxes(cls, trade_taxes: any) -> [TradeLine]:
175
+ def map_trade_taxes(cls, trade_taxes) -> list[TradeLine]:
177
176
  res = []
178
177
  for child in trade_taxes.children:
179
- res.append(cls().map_trade_tax(child))
178
+ res.append(cls.map_trade_tax(child))
180
179
  return res
181
180
 
182
181
  @classmethod
183
- def map_trade_line(cls, trade_line: any) -> TradeLine:
182
+ def map_total_tax(cls, _tax_total_other_currency):
183
+ if _tax_total_other_currency and len(_tax_total_other_currency.get_currencies()) > 0:
184
+ return _tax_total_other_currency.get_currencies()[0]
185
+ else:
186
+ return None
187
+
188
+ @classmethod
189
+ def map_trade_line(cls, trade_line) -> TradeLine:
184
190
  return TradeLine(
185
191
  name=trade_line.product.name.get_string(),
186
192
  description=trade_line.product.description.get_string(),
@@ -195,12 +201,12 @@ class XRechnungCIIXMLParser(XMLAbstractXRechnungParser):
195
201
  seller_assigned_id=trade_line.product.seller_assigned_id.get_string(),
196
202
  buyer_assigned_id=trade_line.product.buyer_assigned_id.get_string(),
197
203
  global_product_scheme_id=trade_line.product.global_id._scheme_id,
198
- tax=cls().map_trade_tax(trade_line.settlement.trade_tax)
204
+ tax=cls.map_trade_tax(trade_line.settlement.trade_tax)
199
205
  )
200
206
 
201
207
  @classmethod
202
- def map_trade_line_items(cls, trade_line_items: any) -> [TradeLine]:
208
+ def map_trade_line_items(cls, trade_line_items) -> list[TradeLine]:
203
209
  res = []
204
210
  for child in trade_line_items.children:
205
- res.append(cls().map_trade_line(child))
211
+ res.append(cls.map_trade_line(child))
206
212
  return res
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass
2
- import datetime
2
+ from datetime import datetime
3
3
 
4
4
  """
5
5
  UBL Document Type (XML Root) Description UNCL 1001 Code (Example)
@@ -46,9 +46,9 @@ class TradePartyContact:
46
46
 
47
47
  @dataclass
48
48
  class TradeParty:
49
- name: str= None
49
+ name: str = None
50
50
  description: str = None # 'Description'
51
- global_id: int = 0 # 'Global ID'
51
+ global_id: str = None # 'Global ID'
52
52
  global_id_schema: str = None # 'Global Schema'
53
53
  id: str = None # 'id'
54
54
  address: TradePartyAddress | None = None
@@ -151,9 +151,9 @@ class TradeDocument:
151
151
  charge_total_amount: float = None # 'Charge Total Amount'
152
152
  allowance_total_amount: float = None # 'Allowance Total Amount'
153
153
  tax_basis_total_amount: TradeCurrency = None
154
- tax_total_amount: [TradeCurrency] = None # 'Tax Grand Total Amount'
154
+ tax_total_amount: TradeCurrency = None # 'Tax Grand Total Amount'
155
155
  grand_total_amount: TradeCurrency = None # 'Grand Total Amount'
156
156
  total_prepaid_amount: float = None # 'Total Prepaid Amount'
157
157
  due_payable_amount: float = None # 'Due Payable Amount'
158
- trade_line_items: [TradeLine] = None
159
- applicable_trade_taxes: [AppliedTradeTax] = None
158
+ trade_line_items: list[TradeLine] = None
159
+ applicable_trade_taxes: list[AppliedTradeTax] = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mikrowerk_edi_invoicing
3
- Version: 0.6.6
3
+ Version: 0.7.0
4
4
  Summary: Parser for EDI invoices in CII or UBL format or plain pdf with LLM support
5
5
  Author: Mikrowerk a Gammadata Division
6
6
  Author-email: info@mikrowerk.com
@@ -1,10 +1,10 @@
1
1
  edi_invoice_parser/__init__.py,sha256=jvA8QaZLZlEuNhHA0p58zdtZdkBatdrixYY4vPXfl4k,740
2
2
  edi_invoice_parser/cross_industry_invoice_mapper.py,sha256=PCByIKH0srVnXqKR3orcQsrAxcqAtp_ljcmhNIv2FS8,1402
3
3
  edi_invoice_parser/cii_dom_parser/__init__.py,sha256=J9O0f-t1570oDgC_zWT6-MpjOYA6o3whazbe9ffQqjE,188
4
- edi_invoice_parser/cii_dom_parser/dom_elements_helper.py,sha256=2w_6794DFMaBc-uQFzgjt7ciZT4FHia2tfuJsTXNZ3w,3922
4
+ edi_invoice_parser/cii_dom_parser/dom_elements_helper.py,sha256=u-RmUdlilKf3qZNhzWPmXPFy1QGfbPGiVOFd6QtgMDY,3931
5
5
  edi_invoice_parser/cii_dom_parser/pdf.py,sha256=1bbXWdqIGmrnYvkS284oc6ZVvH995vd9qB8-xdcDtf0,13270
6
6
  edi_invoice_parser/cii_dom_parser/utils.py,sha256=_ZaPPb1YeDWid3GP-9ojYDwm35HaJyXGGT_nIoiGSMw,624
7
- edi_invoice_parser/cii_dom_parser/xml_cii_dom_parser.py,sha256=_qUPvwGmuRw-dRFmSB_gJQg5rCUrwbTaOBEe98cWLqc,11371
7
+ edi_invoice_parser/cii_dom_parser/xml_cii_dom_parser.py,sha256=0CRxE0Uc-K-8LMJ-TswSHtEZlibxIh_oPtpipSGe7Lc,11458
8
8
  edi_invoice_parser/cii_dom_parser/xmp_schema.py,sha256=UXQnZT3L2PQMendI_vyjemddhw209gMjH5woIK07TEM,4085
9
9
  edi_invoice_parser/cii_dom_parser/models/__init__.py,sha256=LANSc9OLmHBP8iv5RKlvvv8ugBGJjWycantnRi5Lt0I,439
10
10
  edi_invoice_parser/cii_dom_parser/models/accounting.py,sha256=_ngHDoBruw6v5QbLeA23QarAQ0fOascCz0ISpnD9aPs,6714
@@ -21,7 +21,7 @@ edi_invoice_parser/cii_dom_parser/models/references.py,sha256=2LYJGJU5KkJse-UsUc
21
21
  edi_invoice_parser/cii_dom_parser/models/trade.py,sha256=exlMrVMzj9aMb0qI3c610G3GuB6Z5ttM4qkFfK5tn3o,6968
22
22
  edi_invoice_parser/cii_dom_parser/models/tradelines.py,sha256=262opVT4pWXKEc_-HTEqVjm4yqQhvz639QNckEQCthY,5650
23
23
  edi_invoice_parser/model/__init__.py,sha256=gdzehRQK27DRpc-datjXMSkcs5GvxPFtph02wLE1Kns,647
24
- edi_invoice_parser/model/trade_document_types.py,sha256=nmNzSG0bK9FCUzF1KmR1SUvgEx8ACaXezhLV_a97eYQ,5060
24
+ edi_invoice_parser/model/trade_document_types.py,sha256=z3UZonSKST8y4z41SDW2anWFdNxdjKlEfjPrnAzbWiw,5084
25
25
  edi_invoice_parser/model/xml_abstract_x_rechnung_parser.py,sha256=ufkXX4OP0_CjsB9pjF0-h_MJerkOx4JeY54nULi_BUA,691
26
26
  edi_invoice_parser/tests/__init__.py,sha256=KhEmBFKreDn5PGQFEnBzTAI7IkxtRj_H0dMxk_tuo54,160
27
27
  edi_invoice_parser/tests/test_iban_handling.py,sha256=suRaB9gxbNc2Dc7spjHmQyPBdXva98HF1js85wQWqPM,662
@@ -31,8 +31,8 @@ edi_invoice_parser/ubl_sax_parser/xml_ubl_sax_parser.py,sha256=eZETsQi0MZ7f0SvyR
31
31
  edi_invoice_parser/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  edi_invoice_parser/util/file_helper.py,sha256=4gdWbv8L9LSMraLKvGI1Z3NMcuGGy7JB1qFvNaW-yo4,767
33
33
  edi_invoice_parser/util/timer_helper.py,sha256=X1XSV03iLZ4xfjELj_axlvNxzR2sOrJInXiv9HU2Fyg,284
34
- mikrowerk_edi_invoicing-0.6.6.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
35
- mikrowerk_edi_invoicing-0.6.6.dist-info/METADATA,sha256=U0MD5izPgIf9rCAxqF0tUkeuib_7OqkWFptwQe3w2Ks,1080
36
- mikrowerk_edi_invoicing-0.6.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
- mikrowerk_edi_invoicing-0.6.6.dist-info/top_level.txt,sha256=OyIJDXDBfR9f0EvTDTmEHdXEFHscjRqX1MxeOeT2VKM,19
38
- mikrowerk_edi_invoicing-0.6.6.dist-info/RECORD,,
34
+ mikrowerk_edi_invoicing-0.7.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
35
+ mikrowerk_edi_invoicing-0.7.0.dist-info/METADATA,sha256=KQtdnz8NnvRxbxxOQL4oCC0oT2Ns2rqez3DB6TTHCDs,1080
36
+ mikrowerk_edi_invoicing-0.7.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
37
+ mikrowerk_edi_invoicing-0.7.0.dist-info/top_level.txt,sha256=OyIJDXDBfR9f0EvTDTmEHdXEFHscjRqX1MxeOeT2VKM,19
38
+ mikrowerk_edi_invoicing-0.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5