mindee 1.3.2 → 2.0.0

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 (161) hide show
  1. package/CHANGELOG.md +47 -18
  2. package/README.md +43 -127
  3. package/bin/mindee +3 -0
  4. package/dist/package.json +70 -0
  5. package/dist/src/api/endpoint.d.ts +29 -0
  6. package/dist/src/api/endpoint.js +148 -0
  7. package/dist/src/api/index.d.ts +2 -0
  8. package/dist/src/api/index.js +18 -0
  9. package/dist/src/api/response.d.ts +52 -0
  10. package/dist/src/api/response.js +107 -0
  11. package/dist/src/cli.d.ts +1 -0
  12. package/dist/src/cli.js +117 -0
  13. package/dist/src/client.d.ts +48 -0
  14. package/dist/src/client.js +134 -0
  15. package/dist/src/constants.d.ts +13 -0
  16. package/dist/src/constants.js +54 -0
  17. package/dist/src/documents/custom.d.ts +14 -0
  18. package/dist/src/documents/custom.js +48 -0
  19. package/dist/src/documents/document.d.ts +38 -0
  20. package/dist/{documents → src/documents}/document.js +15 -35
  21. package/dist/src/documents/documentConfig.d.ts +44 -0
  22. package/dist/src/documents/documentConfig.js +121 -0
  23. package/dist/src/documents/financialDocument.d.ts +32 -0
  24. package/dist/src/documents/financialDocument.js +130 -0
  25. package/dist/src/documents/index.d.ts +12 -0
  26. package/dist/src/documents/index.js +20 -0
  27. package/dist/src/documents/invoice.d.ts +37 -0
  28. package/dist/src/documents/invoice.js +303 -0
  29. package/dist/src/documents/passport.d.ts +36 -0
  30. package/dist/src/documents/passport.js +218 -0
  31. package/dist/src/documents/receipt.d.ts +24 -0
  32. package/dist/src/documents/receipt.js +157 -0
  33. package/dist/src/errors/handler.d.ts +7 -0
  34. package/dist/{errors → src/errors}/handler.js +5 -4
  35. package/dist/src/fields/amount.d.ts +13 -0
  36. package/dist/{documents → src}/fields/amount.js +19 -6
  37. package/dist/src/fields/companyRegistration.d.ts +6 -0
  38. package/dist/src/fields/companyRegistration.js +11 -0
  39. package/dist/src/fields/customDocs.d.ts +42 -0
  40. package/dist/src/fields/customDocs.js +61 -0
  41. package/dist/src/fields/date.d.ts +12 -0
  42. package/dist/src/fields/date.js +25 -0
  43. package/dist/src/fields/field.d.ts +74 -0
  44. package/dist/{documents → src}/fields/field.js +48 -27
  45. package/dist/src/fields/fullText.d.ts +24 -0
  46. package/dist/src/fields/fullText.js +89 -0
  47. package/dist/src/fields/index.d.ts +11 -0
  48. package/dist/src/fields/index.js +27 -0
  49. package/dist/src/fields/locale.d.ts +13 -0
  50. package/dist/{documents → src}/fields/locale.js +20 -5
  51. package/dist/src/fields/orientation.d.ts +10 -0
  52. package/dist/{documents → src}/fields/orientation.js +5 -5
  53. package/dist/src/fields/paymentDetails.d.ts +31 -0
  54. package/dist/{documents → src}/fields/paymentDetails.js +14 -6
  55. package/dist/src/fields/tax.d.ts +30 -0
  56. package/dist/src/fields/tax.js +51 -0
  57. package/dist/src/geometry.d.ts +59 -0
  58. package/dist/src/geometry.js +113 -0
  59. package/dist/src/index.d.ts +2 -0
  60. package/dist/src/index.js +12 -0
  61. package/dist/src/inputs.d.ts +69 -0
  62. package/dist/src/inputs.js +223 -0
  63. package/dist/src/logger.d.ts +20 -0
  64. package/dist/src/logger.js +35 -0
  65. package/package.json +45 -26
  66. package/.eslintrc +0 -24
  67. package/.mocharc.yaml +0 -2
  68. package/.nyc_output/f57ba3bc-1777-4ecc-81e1-230327c2a401.json +0 -1
  69. package/.nyc_output/processinfo/f57ba3bc-1777-4ecc-81e1-230327c2a401.json +0 -1
  70. package/.nyc_output/processinfo/index.json +0 -1
  71. package/.prettierrc +0 -4
  72. package/.tool-versions +0 -1
  73. package/CODE_OF_CONDUCT.md +0 -63
  74. package/CONTRIBUTING.md +0 -84
  75. package/ISSUE_TEMPLATE.md +0 -45
  76. package/PULL_REQUEST_TEMPLATE.md +0 -45
  77. package/babel.config.json +0 -10
  78. package/coverage/coverage.json +0 -1
  79. package/coverage/lcov-report/base.css +0 -224
  80. package/coverage/lcov-report/block-navigation.js +0 -79
  81. package/coverage/lcov-report/favicon.png +0 -0
  82. package/coverage/lcov-report/index.html +0 -171
  83. package/coverage/lcov-report/prettify.css +0 -1
  84. package/coverage/lcov-report/prettify.js +0 -2
  85. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  86. package/coverage/lcov-report/sorter.js +0 -170
  87. package/coverage/lcov.info +0 -1595
  88. package/coverage.lcov +0 -1595
  89. package/dist/api/financialDocument.js +0 -51
  90. package/dist/api/index.js +0 -13
  91. package/dist/api/invoice.js +0 -59
  92. package/dist/api/object.js +0 -80
  93. package/dist/api/receipt.js +0 -45
  94. package/dist/api/request.js +0 -90
  95. package/dist/api/response.js +0 -91
  96. package/dist/documents/fields/date.js +0 -17
  97. package/dist/documents/fields/index.js +0 -17
  98. package/dist/documents/fields/tax.js +0 -42
  99. package/dist/documents/financialDocument.js +0 -216
  100. package/dist/documents/index.js +0 -13
  101. package/dist/documents/invoice.js +0 -361
  102. package/dist/documents/receipt.js +0 -231
  103. package/dist/index.js +0 -23
  104. package/dist/inputs.js +0 -208
  105. package/dist/logger.js +0 -34
  106. package/examples/.env.example +0 -2
  107. package/examples/documents/invoices/credit_note.pdf +0 -900
  108. package/examples/documents/invoices/invoice.pdf +0 -0
  109. package/examples/documents/invoices/invoice_6p.pdf +0 -0
  110. package/examples/documents/receipts/receipt.jpg +0 -0
  111. package/examples/financialDocument.js +0 -32
  112. package/examples/invoice.js +0 -74
  113. package/examples/receipt.js +0 -45
  114. package/lib/api/financialDocument.js +0 -59
  115. package/lib/api/index.js +0 -7
  116. package/lib/api/invoice.js +0 -73
  117. package/lib/api/object.js +0 -90
  118. package/lib/api/receipt.js +0 -58
  119. package/lib/api/request.js +0 -84
  120. package/lib/api/response.js +0 -92
  121. package/lib/documents/document.js +0 -97
  122. package/lib/documents/fields/amount.js +0 -35
  123. package/lib/documents/fields/date.js +0 -36
  124. package/lib/documents/fields/field.js +0 -102
  125. package/lib/documents/fields/index.js +0 -9
  126. package/lib/documents/fields/locale.js +0 -35
  127. package/lib/documents/fields/orientation.js +0 -33
  128. package/lib/documents/fields/paymentDetails.js +0 -71
  129. package/lib/documents/fields/tax.js +0 -57
  130. package/lib/documents/financialDocument.js +0 -280
  131. package/lib/documents/index.js +0 -7
  132. package/lib/documents/invoice.js +0 -451
  133. package/lib/documents/receipt.js +0 -332
  134. package/lib/errors/handler.js +0 -19
  135. package/lib/index.js +0 -40
  136. package/lib/inputs.js +0 -190
  137. package/lib/logger.js +0 -52
  138. package/mindee/api/financialDocument.js +0 -47
  139. package/mindee/api/index.js +0 -5
  140. package/mindee/api/invoice.js +0 -53
  141. package/mindee/api/object.js +0 -82
  142. package/mindee/api/receipt.js +0 -39
  143. package/mindee/api/request.js +0 -72
  144. package/mindee/api/response.js +0 -80
  145. package/mindee/documents/document.js +0 -69
  146. package/mindee/documents/fields/amount.js +0 -25
  147. package/mindee/documents/fields/date.js +0 -29
  148. package/mindee/documents/fields/field.js +0 -86
  149. package/mindee/documents/fields/index.js +0 -7
  150. package/mindee/documents/fields/locale.js +0 -30
  151. package/mindee/documents/fields/orientation.js +0 -24
  152. package/mindee/documents/fields/paymentDetails.js +0 -52
  153. package/mindee/documents/fields/tax.js +0 -47
  154. package/mindee/documents/financialDocument.js +0 -269
  155. package/mindee/documents/index.js +0 -5
  156. package/mindee/documents/invoice.js +0 -456
  157. package/mindee/documents/receipt.js +0 -287
  158. package/mindee/errors/handler.js +0 -16
  159. package/mindee/index.js +0 -36
  160. package/mindee/inputs.js +0 -158
  161. package/mindee/logger.js +0 -33
@@ -1,47 +0,0 @@
1
- const Field = require("./field");
2
-
3
- class Tax extends Field {
4
- /**
5
- * @param {Object} prediction - Prediction object from HTTP response
6
- * @param {String} valueKey - Key to use in the prediction dict to get the tax value
7
- * @param {String} rateKey - Key to use to get the tax rate in the prediction dict
8
- * @param {String} codeKey - Key to use to get the tax code in the prediction dict
9
- * @param {Boolean} reconstructed - Does the object is reconstructed (not extracted by the API)
10
- * @param {Integer} pageNumber - Page number for multi pages pdf
11
- */
12
- constructor({
13
- prediction,
14
- valueKey = "value",
15
- rateKey = "rate",
16
- codeKey = "code",
17
- reconstructed = false,
18
- pageNumber = 0,
19
- }) {
20
- super({ prediction, valueKey, reconstructed, pageNumber });
21
-
22
- this.rate = parseFloat(prediction[rateKey]);
23
- if (isNaN(this.rate)) this.rate = undefined;
24
-
25
- this.code = prediction[codeKey]?.toString();
26
- if (this.code === "N/A") this.code = undefined;
27
-
28
- this.value = parseFloat(prediction[valueKey]);
29
- if (isNaN(this.value)) {
30
- this.value = undefined;
31
- this.probability = 0.0;
32
- }
33
- }
34
-
35
- toString() {
36
- let str = "";
37
- const keys = ["value", "rate", "code"];
38
- for (const [i, key] of keys.entries()) {
39
- const value = this[key] === undefined ? "_" : this[key].toString();
40
- if (i < keys.length - 1) str += `${value}${key === "rate" ? "%" : ""}; `;
41
- else str += value;
42
- }
43
- return str;
44
- }
45
- }
46
-
47
- module.exports = Tax;
@@ -1,269 +0,0 @@
1
- const Document = require("./document");
2
- const Invoice = require("./invoice");
3
- const Receipt = require("./receipt");
4
- const Field = require("./fields").field;
5
- const Date = require("./fields").date;
6
- const Amount = require("./fields").amount;
7
- const Locale = require("./fields").locale;
8
- const Orientation = require("./fields").orientation;
9
- const Tax = require("./fields").tax;
10
-
11
- class FinancialDocument extends Document {
12
- /**
13
- * @param {Object} apiPrediction - Json parsed prediction from HTTP response
14
- * @param {Input} input - Input object
15
- * @param {Integer} pageNumber - Page number for multi pages pdf input
16
- * @param {Object} locale - locale value for creating FinancialDocument object from scratch
17
- * @param {Object} totalIncl - total tax included value for creating FinancialDocument object from scratch
18
- * @param {Object} totalExcl - total tax excluded value for creating FinancialDocument object from scratch
19
- * @param {Object} Date - date value for creating FinancialDocument object from scratch
20
- * @param {Object} InvoiceNumber - Invoice number value for creating FinancialDocument object from scratch
21
- * @param {Object} taxes - taxes value for creating FinancialDocument object from scratch
22
- * @param {Object} supplier - supplier value for creating FinancialDocument object from scratch
23
- * @param {Object} supplierAddress - supplier address value for creating FinancialDocument object from scratch
24
- * @param {Object} paymentDetails - payment details value for creating FinancialDocument object from scratch
25
- * @param {Object} companyNumber - company number value for creating FinancialDocument object from scratch
26
- * @param {Object} vatNumber - vat number value for creating FinancialDocument object from scratch
27
- * @param {Object} orientation - orientation value for creating FinancialDocument object from scratch
28
- * @param {Object} totalTax - total tax value for creating FinancialDocument object from scratch
29
- * @param {Object} time - time value for creating FinancialDocument object from scratch
30
- * @param {Object} customerName - customer name value for creating FinancialDocument object from scratch
31
- * @param {Object} customerAddress - customer address value for creating FinancialDocument object from scratch
32
- * @param {Object} customerCompanyRegistration - customer company registration value for creating FinancialDocument object from scratch
33
- * @param {Object} pageNumber - pageNumber for multi pages pdf input
34
- * @param {String} level - specify whether object is built from "page" level or "document" level prediction
35
- */
36
- constructor({
37
- apiPrediction = undefined,
38
- inputFile = undefined,
39
- locale = undefined,
40
- totalIncl = undefined,
41
- totalExcl = undefined,
42
- date = undefined,
43
- invoiceNumber = undefined,
44
- dueDate = undefined,
45
- taxes = undefined,
46
- supplier = undefined,
47
- supplierAddress = undefined,
48
- paymentDetails = undefined,
49
- companyNumber = undefined,
50
- vatNumber = undefined,
51
- orientation = undefined,
52
- totalTax = undefined,
53
- time = undefined,
54
- customerName = undefined,
55
- customerAddress = undefined,
56
- customerCompanyRegistration = undefined,
57
- words = undefined,
58
- pageNumber = 0,
59
- level = "page",
60
- }) {
61
- super(inputFile);
62
- this.level = level;
63
- if (apiPrediction === undefined) {
64
- this.#initFromScratch({
65
- locale,
66
- totalIncl,
67
- totalExcl,
68
- date,
69
- invoiceNumber,
70
- dueDate,
71
- taxes,
72
- supplier,
73
- supplierAddress,
74
- paymentDetails,
75
- companyNumber,
76
- vatNumber,
77
- orientation,
78
- pageNumber,
79
- totalTax,
80
- time,
81
- customerName,
82
- customerAddress,
83
- customerCompanyRegistration,
84
- });
85
- } else {
86
- this.#initFromApiPrediction(apiPrediction, inputFile, pageNumber, words);
87
- }
88
- this.#checklist();
89
- }
90
-
91
- #initFromScratch({
92
- locale,
93
- totalIncl,
94
- totalExcl,
95
- totalTax,
96
- date,
97
- invoiceNumber,
98
- dueDate,
99
- taxes,
100
- paymentDetails,
101
- companyNumber,
102
- vatNumber,
103
- orientation,
104
- pageNumber,
105
- supplier,
106
- supplierAddress,
107
- time,
108
- customerName,
109
- customerAddress,
110
- customerCompanyRegistration,
111
- }) {
112
- const constructPrediction = function (item) {
113
- return { prediction: { value: item }, valueKey: "value", pageNumber };
114
- };
115
- this.locale = new Locale(constructPrediction(locale));
116
- this.totalIncl = new Amount(constructPrediction(totalIncl));
117
- this.totalExcl = new Amount(constructPrediction(totalExcl));
118
- this.totalTax = new Amount(constructPrediction(totalTax));
119
- this.date = new Date(constructPrediction(date));
120
- this.dueDate = new Date(constructPrediction(dueDate));
121
- this.supplier = new Field(constructPrediction(supplier));
122
- this.supplierAddress = new Field(this.constructPrediction(supplierAddress));
123
- this.time = new Field(constructPrediction(time));
124
- this.orientation = new Orientation(constructPrediction(orientation));
125
- this.invoiceNumber = new Field(constructPrediction(invoiceNumber));
126
- this.paymentDetails = new Field(constructPrediction(paymentDetails));
127
- this.companyNumber = new Field(constructPrediction(companyNumber));
128
- this.vatNumber = new Field(constructPrediction(vatNumber));
129
- this.customerName = new Field(this.constructPrediction(customerName));
130
- this.customerAddress = new Field(this.constructPrediction(customerAddress));
131
- this.customerCompanyRegistration = new Field(
132
- this.constructPrediction(customerCompanyRegistration)
133
- );
134
- if (taxes !== undefined) {
135
- this.taxes = [];
136
- for (const t of taxes) {
137
- this.taxes.push(
138
- new Tax({
139
- prediction: { value: t[0], rate: t[1] },
140
- pageNumber,
141
- valueKey: "value",
142
- rateKey: "rate",
143
- })
144
- );
145
- }
146
- }
147
- }
148
-
149
- #initFromApiPrediction(apiPrediction, inputFile, pageNumber, words) {
150
- if (Object.keys(apiPrediction).includes("invoice_number")) {
151
- const invoice = new Invoice({
152
- apiPrediction,
153
- inputFile,
154
- pageNumber,
155
- level: this.level,
156
- words: words,
157
- });
158
- this.locale = invoice.locale;
159
- this.totalIncl = invoice.totalIncl;
160
- this.totalExcl = invoice.totalExcl;
161
- this.date = invoice.invoiceDate;
162
- this.invoiceNumber = invoice.invoiceNumber;
163
- this.dueDate = invoice.dueDate;
164
- this.taxes = invoice.taxes;
165
- this.supplier = invoice.supplier;
166
- this.supplierAddress = invoice.supplierAddress;
167
- this.paymentDetails = invoice.paymentDetails;
168
- this.companyNumber = invoice.companyNumber;
169
- this.orientation = invoice.orientation;
170
- this.totalTax = invoice.totalTax;
171
- if (invoice.words) this.words = invoice.words;
172
- this.time = new Field({
173
- prediction: { value: undefined, confidence: 0.0 },
174
- });
175
- this.customerName = invoice.customerName;
176
- this.customerAddress = invoice.customerAddress;
177
- this.customerCompanyRegistration = invoice.customerCompanyRegistration;
178
- } else {
179
- const receipt = new Receipt({
180
- apiPrediction,
181
- inputFile,
182
- pageNumber,
183
- level: this.level,
184
- words: words,
185
- });
186
- this.orientation = receipt.orientation;
187
- this.date = receipt.date;
188
- this.dueDate = receipt.date;
189
- this.taxes = receipt.taxes;
190
- this.locale = receipt.locale;
191
- this.totalIncl = receipt.totalIncl;
192
- this.totalExcl = receipt.totalExcl;
193
- this.supplier = receipt.merchantName;
194
- this.supplierAddress = new Field({
195
- prediction: { value: undefined, confidence: 0.0 },
196
- });
197
- this.time = receipt.time;
198
- this.totalTax = receipt.totalTax;
199
- this.invoiceNumber = new Field({
200
- prediction: { value: undefined, confidence: 0.0 },
201
- });
202
- this.paymentDetails = new Field({
203
- prediction: { value: undefined, confidence: 0.0 },
204
- });
205
- this.companyNumber = new Field({
206
- prediction: { value: undefined, confidence: 0.0 },
207
- });
208
- this.customerName = new Field({
209
- prediction: { value: undefined, confidence: 0.0 },
210
- });
211
- this.customerAddress = new Field({
212
- prediction: { value: undefined, confidence: 0.0 },
213
- });
214
- this.customerCompanyRegistration = [];
215
- if (receipt.words) this.words = receipt.words;
216
- }
217
- }
218
-
219
- toString() {
220
- return `
221
- -----Financial document-----
222
- Filename: ${this.filename}
223
- Total amount: ${this.totalIncl.value}
224
- Date: ${this.date.value}
225
- Supplier: ${this.supplier.value}
226
- Total taxes: ${this.totalTax.value}
227
- `;
228
- }
229
-
230
- #checklist() {
231
- this.checklist = {
232
- taxesMatchTotalIncl: this.#taxesMatchTotalIncl(),
233
- };
234
- }
235
-
236
- #taxesMatchTotalIncl() {
237
- // Check taxes and total include exist
238
- if (this.taxes.length === 0 || this.totalIncl.value === undefined)
239
- return false;
240
-
241
- // Reconstruct totalIncl from taxes
242
- let totalVat = 0;
243
- let reconstructedTotal = 0;
244
- this.taxes.forEach((tax) => {
245
- if (tax.value === undefined || !tax.rate) return false;
246
- totalVat += tax.value;
247
- reconstructedTotal += tax.value + (100 * tax.value) / tax.rate;
248
- });
249
-
250
- // Sanity check
251
- if (totalVat <= 0) return false;
252
-
253
- // Crate epsilon
254
- const eps = 1 / (100 * totalVat);
255
-
256
- if (
257
- this.totalIncl.value * (1 - eps) - 0.02 <= reconstructedTotal &&
258
- reconstructedTotal <= this.totalIncl.value * (1 + eps) + 0.02
259
- ) {
260
- this.taxes = this.taxes.map((tax) => ({ ...tax, confidence: 1.0 }));
261
- this.totalTax.probability = 1.0;
262
- this.totalIncl.probability = 1.0;
263
- return true;
264
- }
265
- return false;
266
- }
267
- }
268
-
269
- module.exports = FinancialDocument;
@@ -1,5 +0,0 @@
1
- exports.fields = require("./fields");
2
- exports.document = require("./document");
3
- exports.receipt = require("./receipt");
4
- exports.invoice = require("./invoice");
5
- exports.financialDocument = require("./financialDocument");