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.
- package/CHANGELOG.md +47 -18
- package/README.md +43 -127
- package/bin/mindee +3 -0
- package/dist/package.json +70 -0
- package/dist/src/api/endpoint.d.ts +29 -0
- package/dist/src/api/endpoint.js +148 -0
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.js +18 -0
- package/dist/src/api/response.d.ts +52 -0
- package/dist/src/api/response.js +107 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +117 -0
- package/dist/src/client.d.ts +48 -0
- package/dist/src/client.js +134 -0
- package/dist/src/constants.d.ts +13 -0
- package/dist/src/constants.js +54 -0
- package/dist/src/documents/custom.d.ts +14 -0
- package/dist/src/documents/custom.js +48 -0
- package/dist/src/documents/document.d.ts +38 -0
- package/dist/{documents → src/documents}/document.js +15 -35
- package/dist/src/documents/documentConfig.d.ts +44 -0
- package/dist/src/documents/documentConfig.js +121 -0
- package/dist/src/documents/financialDocument.d.ts +32 -0
- package/dist/src/documents/financialDocument.js +130 -0
- package/dist/src/documents/index.d.ts +12 -0
- package/dist/src/documents/index.js +20 -0
- package/dist/src/documents/invoice.d.ts +37 -0
- package/dist/src/documents/invoice.js +303 -0
- package/dist/src/documents/passport.d.ts +36 -0
- package/dist/src/documents/passport.js +218 -0
- package/dist/src/documents/receipt.d.ts +24 -0
- package/dist/src/documents/receipt.js +157 -0
- package/dist/src/errors/handler.d.ts +7 -0
- package/dist/{errors → src/errors}/handler.js +5 -4
- package/dist/src/fields/amount.d.ts +13 -0
- package/dist/{documents → src}/fields/amount.js +19 -6
- package/dist/src/fields/companyRegistration.d.ts +6 -0
- package/dist/src/fields/companyRegistration.js +11 -0
- package/dist/src/fields/customDocs.d.ts +42 -0
- package/dist/src/fields/customDocs.js +61 -0
- package/dist/src/fields/date.d.ts +12 -0
- package/dist/src/fields/date.js +25 -0
- package/dist/src/fields/field.d.ts +74 -0
- package/dist/{documents → src}/fields/field.js +48 -27
- package/dist/src/fields/fullText.d.ts +24 -0
- package/dist/src/fields/fullText.js +89 -0
- package/dist/src/fields/index.d.ts +11 -0
- package/dist/src/fields/index.js +27 -0
- package/dist/src/fields/locale.d.ts +13 -0
- package/dist/{documents → src}/fields/locale.js +20 -5
- package/dist/src/fields/orientation.d.ts +10 -0
- package/dist/{documents → src}/fields/orientation.js +5 -5
- package/dist/src/fields/paymentDetails.d.ts +31 -0
- package/dist/{documents → src}/fields/paymentDetails.js +14 -6
- package/dist/src/fields/tax.d.ts +30 -0
- package/dist/src/fields/tax.js +51 -0
- package/dist/src/geometry.d.ts +59 -0
- package/dist/src/geometry.js +113 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +12 -0
- package/dist/src/inputs.d.ts +69 -0
- package/dist/src/inputs.js +223 -0
- package/dist/src/logger.d.ts +20 -0
- package/dist/src/logger.js +35 -0
- package/package.json +45 -26
- package/.eslintrc +0 -24
- package/.mocharc.yaml +0 -2
- package/.nyc_output/f57ba3bc-1777-4ecc-81e1-230327c2a401.json +0 -1
- package/.nyc_output/processinfo/f57ba3bc-1777-4ecc-81e1-230327c2a401.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
- package/.prettierrc +0 -4
- package/.tool-versions +0 -1
- package/CODE_OF_CONDUCT.md +0 -63
- package/CONTRIBUTING.md +0 -84
- package/ISSUE_TEMPLATE.md +0 -45
- package/PULL_REQUEST_TEMPLATE.md +0 -45
- package/babel.config.json +0 -10
- package/coverage/coverage.json +0 -1
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -79
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -171
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -170
- package/coverage/lcov.info +0 -1595
- package/coverage.lcov +0 -1595
- package/dist/api/financialDocument.js +0 -51
- package/dist/api/index.js +0 -13
- package/dist/api/invoice.js +0 -59
- package/dist/api/object.js +0 -80
- package/dist/api/receipt.js +0 -45
- package/dist/api/request.js +0 -90
- package/dist/api/response.js +0 -91
- package/dist/documents/fields/date.js +0 -17
- package/dist/documents/fields/index.js +0 -17
- package/dist/documents/fields/tax.js +0 -42
- package/dist/documents/financialDocument.js +0 -216
- package/dist/documents/index.js +0 -13
- package/dist/documents/invoice.js +0 -361
- package/dist/documents/receipt.js +0 -231
- package/dist/index.js +0 -23
- package/dist/inputs.js +0 -208
- package/dist/logger.js +0 -34
- package/examples/.env.example +0 -2
- package/examples/documents/invoices/credit_note.pdf +0 -900
- package/examples/documents/invoices/invoice.pdf +0 -0
- package/examples/documents/invoices/invoice_6p.pdf +0 -0
- package/examples/documents/receipts/receipt.jpg +0 -0
- package/examples/financialDocument.js +0 -32
- package/examples/invoice.js +0 -74
- package/examples/receipt.js +0 -45
- package/lib/api/financialDocument.js +0 -59
- package/lib/api/index.js +0 -7
- package/lib/api/invoice.js +0 -73
- package/lib/api/object.js +0 -90
- package/lib/api/receipt.js +0 -58
- package/lib/api/request.js +0 -84
- package/lib/api/response.js +0 -92
- package/lib/documents/document.js +0 -97
- package/lib/documents/fields/amount.js +0 -35
- package/lib/documents/fields/date.js +0 -36
- package/lib/documents/fields/field.js +0 -102
- package/lib/documents/fields/index.js +0 -9
- package/lib/documents/fields/locale.js +0 -35
- package/lib/documents/fields/orientation.js +0 -33
- package/lib/documents/fields/paymentDetails.js +0 -71
- package/lib/documents/fields/tax.js +0 -57
- package/lib/documents/financialDocument.js +0 -280
- package/lib/documents/index.js +0 -7
- package/lib/documents/invoice.js +0 -451
- package/lib/documents/receipt.js +0 -332
- package/lib/errors/handler.js +0 -19
- package/lib/index.js +0 -40
- package/lib/inputs.js +0 -190
- package/lib/logger.js +0 -52
- package/mindee/api/financialDocument.js +0 -47
- package/mindee/api/index.js +0 -5
- package/mindee/api/invoice.js +0 -53
- package/mindee/api/object.js +0 -82
- package/mindee/api/receipt.js +0 -39
- package/mindee/api/request.js +0 -72
- package/mindee/api/response.js +0 -80
- package/mindee/documents/document.js +0 -69
- package/mindee/documents/fields/amount.js +0 -25
- package/mindee/documents/fields/date.js +0 -29
- package/mindee/documents/fields/field.js +0 -86
- package/mindee/documents/fields/index.js +0 -7
- package/mindee/documents/fields/locale.js +0 -30
- package/mindee/documents/fields/orientation.js +0 -24
- package/mindee/documents/fields/paymentDetails.js +0 -52
- package/mindee/documents/fields/tax.js +0 -47
- package/mindee/documents/financialDocument.js +0 -269
- package/mindee/documents/index.js +0 -5
- package/mindee/documents/invoice.js +0 -456
- package/mindee/documents/receipt.js +0 -287
- package/mindee/errors/handler.js +0 -16
- package/mindee/index.js +0 -36
- package/mindee/inputs.js +0 -158
- 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;
|