Skip to content

Commit 64388aa

Browse files
chg: ✨ Invoice v2 upgrade
chg: ✨ Invoice v2 upgrade
2 parents ccea204 + 1953ea3 commit 64388aa

File tree

12 files changed

+780
-95
lines changed

12 files changed

+780
-95
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Mindee python SDK
22

3+
## v1.1.0 (2020-12-02)
4+
5+
### Chg
6+
7+
* Updated invoice API endpoint to V2
8+
39
## v1.0.2 (2020-12-01)
410

511
### Fix

mindee/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def parse_invoice(
152152
self,
153153
file,
154154
input_type="path",
155-
version="1",
155+
version="2",
156156
cut_pdf=True,
157157
include_words=False
158158
):

mindee/documents/financial_document.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ def build_from_api_prediction(self, api_prediction, input_file, page_n=0):
120120
self.company_number = invoice.company_number
121121
self.orientation = invoice.orientation
122122
self.total_tax = invoice.total_tax
123-
self.vat_number = invoice.vat_number
124123
self.time = Field({"value": None, "probability": 0.})
125124
else:
126125
receipt = Receipt(api_prediction, input_file, page_n=page_n)
@@ -134,7 +133,6 @@ def build_from_api_prediction(self, api_prediction, input_file, page_n=0):
134133
self.merchant_name = receipt.merchant_name
135134
self.time = receipt.time
136135
self.total_tax = receipt.total_tax
137-
self.vat_number = Field({"value": None, "probability": 0.})
138136
self.invoice_number = Field({"value": None, "probability": 0.})
139137
self.payment_details = Field({"value": None, "probability": 0.})
140138
self.company_number = Field({"value": None, "probability": 0.})

mindee/documents/invoice.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from mindee.fields.amount import Amount
55
from mindee.fields.locale import Locale
66
from mindee.fields.orientation import Orientation
7+
from mindee.fields.payment_details import PaymentDetails
78
from mindee.fields.tax import Tax
89
from mindee.http import request
910
from mindee.benchmark import Benchmark
@@ -59,7 +60,6 @@ def __init__(
5960
self.supplier = None
6061
self.payment_details = None
6162
self.company_number = None
62-
self.vat_number = None
6363
self.orientation = None
6464
self.total_tax = None
6565

@@ -82,7 +82,6 @@ def __init__(
8282
self.invoice_number = Field({"value": invoice_number}, value_key="value", page_n=page_n)
8383
self.payment_details = Field({"value": payment_details}, value_key="value", page_n=page_n)
8484
self.company_number = Field({"value": company_number}, value_key="value", page_n=page_n)
85-
self.vat_number = Field({"value": vat_number}, value_key="value", page_n=page_n)
8685

8786
# Invoke Document constructor
8887
super(Invoice, self).__init__(input_file)
@@ -99,18 +98,27 @@ def build_from_api_prediction(self, api_prediction, page_n=0):
9998
:param page_n: Page number for multi pages pdf input
10099
:return: (void) set the object attributes with api prediction values
101100
"""
102-
self.locale = Locale(api_prediction["locale"], value_key="language", page_n=page_n)
103-
self.total_incl = Amount(api_prediction["total_incl"], page_n=page_n)
104-
self.total_excl = Amount(api_prediction["total_excl"], page_n=page_n)
105-
self.invoice_date = Date(api_prediction["invoice_date"], page_n=page_n)
101+
self.company_number = [
102+
Field(company_reg, extra_fields={"type"}, page_n=page_n) for company_reg in
103+
api_prediction["company_registration"]
104+
]
105+
self.invoice_date = Date(api_prediction["date"], value_key="value", page_n=page_n)
106+
self.due_date = Date(api_prediction["due_date"], value_key="value", page_n=page_n)
106107
self.invoice_number = Field(api_prediction["invoice_number"], page_n=page_n)
107-
self.due_date = Date(api_prediction["due_date"], page_n=page_n)
108-
self.taxes = [Tax(tax_prediction, page_n=page_n) for tax_prediction in api_prediction["taxes"]]
109-
self.supplier = Field(api_prediction["supplier"], page_n=page_n)
110-
self.payment_details = Field(api_prediction["payment_details"], value_key="iban", page_n=page_n)
111-
self.vat_number = Field(api_prediction["tax_id"], page_n=page_n)
112-
self.company_number = Field(api_prediction["company_number"], extra_fields={"type"}, page_n=page_n)
108+
self.locale = Locale(api_prediction["locale"], value_key="language", page_n=page_n)
113109
self.orientation = Orientation(api_prediction["orientation"], page_n=page_n)
110+
self.supplier = Field(api_prediction["supplier"], page_n=page_n)
111+
self.taxes = [
112+
Tax(tax_prediction, page_n=page_n, value_key="value") for tax_prediction in api_prediction["taxes"]
113+
]
114+
self.payment_details = [
115+
PaymentDetails(
116+
payment_detail,
117+
page_n=page_n
118+
) for payment_detail in api_prediction["payment_details"]
119+
]
120+
self.total_incl = Amount(api_prediction["total_incl"], value_key="value", page_n=page_n)
121+
self.total_excl = Amount(api_prediction["total_excl"], value_key="value", page_n=page_n)
114122
self.total_tax = Amount({"value": None, "probability": 0.}, value_key="value", page_n=page_n)
115123

116124
def __str__(self):
@@ -162,7 +170,7 @@ def request(
162170
input_file,
163171
base_url,
164172
invoice_token=None,
165-
version="1",
173+
version="2",
166174
include_words=False
167175
):
168176
"""

mindee/fields/payment_details.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
from mindee.fields import Field
2+
3+
4+
class PaymentDetails(Field):
5+
def __init__(
6+
self,
7+
payment_details_prediction,
8+
value_key="iban",
9+
account_number_key="account_number",
10+
iban_key="iban",
11+
routing_number_key="routing_number",
12+
swift_key="swift",
13+
reconstructed=False,
14+
page_n=None
15+
):
16+
"""
17+
:param payment_details_prediction: Payment detail prediction object from HTTP response
18+
:param value_key: Corresponds to iban
19+
:param account_number_key: Key to use for getting the account number in the payment_details_prediction dict
20+
:param iban_key: Key to use for getting the IBAN in the payment_details_prediction dict
21+
:param routing_number_key: Key to use for getting the Routing number in the payment_details_prediction dict
22+
:param swift_key: Key to use for getting the SWIFT in the payment_details_prediction dict
23+
:param reconstructed: Bool for reconstructed object (not extracted in the API)
24+
:param page_n: Page number for multi pages pdf
25+
"""
26+
super(PaymentDetails, self).__init__(
27+
payment_details_prediction,
28+
value_key=value_key,
29+
reconstructed=reconstructed,
30+
page_n=page_n
31+
)
32+
33+
self.account_number_key = None
34+
self.iban_key = None
35+
self.routing_number_key = None
36+
self.swift_key = None
37+
38+
try:
39+
assert type(payment_details_prediction[account_number_key]) == str
40+
self.account_number = str(payment_details_prediction[account_number_key])
41+
if self.account_number == "N/A":
42+
self.account_number = None
43+
except:
44+
self.account_number = None
45+
46+
try:
47+
assert type(payment_details_prediction[iban_key]) == str
48+
self.iban = str(payment_details_prediction[iban_key])
49+
if self.iban == "N/A":
50+
self.iban = None
51+
except:
52+
self.iban = None
53+
54+
try:
55+
assert type(payment_details_prediction[routing_number_key]) == str
56+
self.routing_number = str(payment_details_prediction[routing_number_key])
57+
if self.routing_number == "N/A":
58+
self.routing_number = None
59+
except:
60+
self.routing_number = None
61+
62+
try:
63+
assert type(payment_details_prediction[swift_key]) == str
64+
self.swift = str(payment_details_prediction[swift_key])
65+
if self.swift == "N/A":
66+
self.swift = None
67+
except:
68+
self.swift = None
69+
70+
def __str__(self):
71+
payment_str = ""
72+
if self.account_number is not None:
73+
payment_str += str(self.account_number)+"; "
74+
75+
if self.iban is not None:
76+
payment_str += str(self.iban)+"; "
77+
78+
if self.routing_number is not None:
79+
payment_str += str(self.routing_number)+"; "
80+
81+
if self.swift is not None:
82+
payment_str += str(self.swift)+"; "
83+
84+
return payment_str
85+
86+

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def make_requirements_list(file="requirements.txt", only_regular=True):
3535
python_requires=">=3.0",
3636
name=f"{PACKAGE_NAME}",
3737
description="Mindee API helper library for python",
38-
version="v1.0.1",
38+
version="v1.1.0",
3939
long_description=long_description,
4040
long_description_content_type="text/markdown",
4141
url=GIT_URL,

0 commit comments

Comments
 (0)