mindee 3.2.0 → 3.3.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +10 -0
- data/bin/mindee.rb +1 -1
- data/docs/barcode_reader_v1.md +2 -2
- data/docs/carte_grise_v1.md +454 -0
- data/docs/code_samples/carte_grise_v1.txt +19 -0
- data/docs/cropper_v1.md +1 -1
- data/docs/custom_v1.md +9 -1
- data/docs/expense_receipts_v5.md +1 -1
- data/docs/financial_document_v1.md +6 -6
- data/docs/invoices_v4.md +68 -99
- data/docs/multi_receipts_detector_v1.md +1 -1
- data/docs/us_w9_v1.md +3 -3
- data/lib/mindee/http/endpoint.rb +5 -1
- data/lib/mindee/http/error.rb +1 -1
- data/lib/mindee/parsing/common/api_response.rb +3 -2
- data/lib/mindee/parsing/common/document.rb +4 -1
- data/lib/mindee/parsing/custom/list_field.rb +7 -5
- data/lib/mindee/parsing/standard/base_field.rb +1 -1
- data/lib/mindee/product/financial_document/financial_document_v1_document.rb +2 -2
- data/lib/mindee/product/fr/carte_grise/carte_grise_v1.rb +39 -0
- data/lib/mindee/product/fr/carte_grise/carte_grise_v1_document.rb +235 -0
- data/lib/mindee/product/fr/carte_grise/carte_grise_v1_page.rb +34 -0
- data/lib/mindee/product/invoice/invoice_v4.rb +1 -2
- data/lib/mindee/product/invoice/invoice_v4_document.rb +105 -145
- data/lib/mindee/product/invoice/invoice_v4_line_item.rb +54 -30
- data/lib/mindee/product/us/w9/w9_v1.rb +2 -2
- data/lib/mindee/product/us/w9/w9_v1_document.rb +1 -1
- data/lib/mindee/product/us/w9/w9_v1_page.rb +2 -2
- data/lib/mindee/product.rb +1 -0
- data/lib/mindee/version.rb +1 -1
- data/lib/mindee.rb +0 -3
- metadata +7 -2
@@ -0,0 +1,235 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../parsing'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Product
|
7
|
+
module FR
|
8
|
+
module CarteGrise
|
9
|
+
# Carte Grise V1 document prediction.
|
10
|
+
class CarteGriseV1Document < Mindee::Parsing::Common::Prediction
|
11
|
+
include Mindee::Parsing::Standard
|
12
|
+
# The vehicle's license plate number.
|
13
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
14
|
+
attr_reader :a
|
15
|
+
# The vehicle's first release date.
|
16
|
+
# @return [Mindee::Parsing::Standard::DateField]
|
17
|
+
attr_reader :b
|
18
|
+
# The vehicle owner's full name including maiden name.
|
19
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
20
|
+
attr_reader :c1
|
21
|
+
# The vehicle owner's address.
|
22
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
23
|
+
attr_reader :c3
|
24
|
+
# Number of owners of the license certificate.
|
25
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
26
|
+
attr_reader :c41
|
27
|
+
# Mentions about the ownership of the vehicle.
|
28
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
29
|
+
attr_reader :c4a
|
30
|
+
# The vehicle's brand.
|
31
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
32
|
+
attr_reader :d1
|
33
|
+
# The vehicle's commercial name.
|
34
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
35
|
+
attr_reader :d3
|
36
|
+
# The Vehicle Identification Number (VIN).
|
37
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
38
|
+
attr_reader :e
|
39
|
+
# The vehicle's maximum admissible weight.
|
40
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
41
|
+
attr_reader :f1
|
42
|
+
# The vehicle's maximum admissible weight within the license's state.
|
43
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
44
|
+
attr_reader :f2
|
45
|
+
# The vehicle's maximum authorized weight with coupling.
|
46
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
47
|
+
attr_reader :f3
|
48
|
+
# The document's formula number.
|
49
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
50
|
+
attr_reader :formula_number
|
51
|
+
# The vehicle's weight with coupling if tractor different than category M1.
|
52
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
53
|
+
attr_reader :g
|
54
|
+
# The vehicle's national empty weight.
|
55
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
56
|
+
attr_reader :g1
|
57
|
+
# The car registration date of the given certificate.
|
58
|
+
# @return [Mindee::Parsing::Standard::DateField]
|
59
|
+
attr_reader :i
|
60
|
+
# The vehicle's category.
|
61
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
62
|
+
attr_reader :j
|
63
|
+
# The vehicle's national type.
|
64
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
65
|
+
attr_reader :j1
|
66
|
+
# The vehicle's body type (CE).
|
67
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
68
|
+
attr_reader :j2
|
69
|
+
# The vehicle's body type (National designation).
|
70
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
71
|
+
attr_reader :j3
|
72
|
+
# Machine Readable Zone, first line.
|
73
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
74
|
+
attr_reader :mrz1
|
75
|
+
# Machine Readable Zone, second line.
|
76
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
77
|
+
attr_reader :mrz2
|
78
|
+
# The vehicle's owner first name.
|
79
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
80
|
+
attr_reader :owner_first_name
|
81
|
+
# The vehicle's owner surname.
|
82
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
83
|
+
attr_reader :owner_surname
|
84
|
+
# The vehicle engine's displacement (cm3).
|
85
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
86
|
+
attr_reader :p1
|
87
|
+
# The vehicle's maximum net power (kW).
|
88
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
89
|
+
attr_reader :p2
|
90
|
+
# The vehicle's fuel type or energy source.
|
91
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
92
|
+
attr_reader :p3
|
93
|
+
# The vehicle's administrative power (fiscal horsepower).
|
94
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
95
|
+
attr_reader :p6
|
96
|
+
# The vehicle's power to weight ratio.
|
97
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
98
|
+
attr_reader :q
|
99
|
+
# The vehicle's number of seats.
|
100
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
101
|
+
attr_reader :s1
|
102
|
+
# The vehicle's number of standing rooms (person).
|
103
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
104
|
+
attr_reader :s2
|
105
|
+
# The vehicle's sound level (dB).
|
106
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
107
|
+
attr_reader :u1
|
108
|
+
# The vehicle engine's rotation speed (RPM).
|
109
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
110
|
+
attr_reader :u2
|
111
|
+
# The vehicle's CO2 emission (g/km).
|
112
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
113
|
+
attr_reader :v7
|
114
|
+
# Next technical control date.
|
115
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
116
|
+
attr_reader :x1
|
117
|
+
# Amount of the regional proportional tax of the registration (in euros).
|
118
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
119
|
+
attr_reader :y1
|
120
|
+
# Amount of the additional parafiscal tax of the registration (in euros).
|
121
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
122
|
+
attr_reader :y2
|
123
|
+
# Amount of the additional CO2 tax of the registration (in euros).
|
124
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
125
|
+
attr_reader :y3
|
126
|
+
# Amount of the fee for managing the registration (in euros).
|
127
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
128
|
+
attr_reader :y4
|
129
|
+
# Amount of the fee for delivery of the registration certificate in euros.
|
130
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
131
|
+
attr_reader :y5
|
132
|
+
# Total amount of registration fee to be paid in euros.
|
133
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
134
|
+
attr_reader :y6
|
135
|
+
|
136
|
+
# rubocop:disable Metrics/AbcSize
|
137
|
+
# @param prediction [Hash]
|
138
|
+
# @param page_id [Integer, nil]
|
139
|
+
def initialize(prediction, page_id)
|
140
|
+
super()
|
141
|
+
@a = StringField.new(prediction['a'], page_id)
|
142
|
+
@b = DateField.new(prediction['b'], page_id)
|
143
|
+
@c1 = StringField.new(prediction['c1'], page_id)
|
144
|
+
@c3 = StringField.new(prediction['c3'], page_id)
|
145
|
+
@c41 = StringField.new(prediction['c41'], page_id)
|
146
|
+
@c4a = StringField.new(prediction['c4a'], page_id)
|
147
|
+
@d1 = StringField.new(prediction['d1'], page_id)
|
148
|
+
@d3 = StringField.new(prediction['d3'], page_id)
|
149
|
+
@e = StringField.new(prediction['e'], page_id)
|
150
|
+
@f1 = StringField.new(prediction['f1'], page_id)
|
151
|
+
@f2 = StringField.new(prediction['f2'], page_id)
|
152
|
+
@f3 = StringField.new(prediction['f3'], page_id)
|
153
|
+
@formula_number = StringField.new(prediction['formula_number'], page_id)
|
154
|
+
@g = StringField.new(prediction['g'], page_id)
|
155
|
+
@g1 = StringField.new(prediction['g1'], page_id)
|
156
|
+
@i = DateField.new(prediction['i'], page_id)
|
157
|
+
@j = StringField.new(prediction['j'], page_id)
|
158
|
+
@j1 = StringField.new(prediction['j1'], page_id)
|
159
|
+
@j2 = StringField.new(prediction['j2'], page_id)
|
160
|
+
@j3 = StringField.new(prediction['j3'], page_id)
|
161
|
+
@mrz1 = StringField.new(prediction['mrz1'], page_id)
|
162
|
+
@mrz2 = StringField.new(prediction['mrz2'], page_id)
|
163
|
+
@owner_first_name = StringField.new(prediction['owner_first_name'], page_id)
|
164
|
+
@owner_surname = StringField.new(prediction['owner_surname'], page_id)
|
165
|
+
@p1 = StringField.new(prediction['p1'], page_id)
|
166
|
+
@p2 = StringField.new(prediction['p2'], page_id)
|
167
|
+
@p3 = StringField.new(prediction['p3'], page_id)
|
168
|
+
@p6 = StringField.new(prediction['p6'], page_id)
|
169
|
+
@q = StringField.new(prediction['q'], page_id)
|
170
|
+
@s1 = StringField.new(prediction['s1'], page_id)
|
171
|
+
@s2 = StringField.new(prediction['s2'], page_id)
|
172
|
+
@u1 = StringField.new(prediction['u1'], page_id)
|
173
|
+
@u2 = StringField.new(prediction['u2'], page_id)
|
174
|
+
@v7 = StringField.new(prediction['v7'], page_id)
|
175
|
+
@x1 = StringField.new(prediction['x1'], page_id)
|
176
|
+
@y1 = StringField.new(prediction['y1'], page_id)
|
177
|
+
@y2 = StringField.new(prediction['y2'], page_id)
|
178
|
+
@y3 = StringField.new(prediction['y3'], page_id)
|
179
|
+
@y4 = StringField.new(prediction['y4'], page_id)
|
180
|
+
@y5 = StringField.new(prediction['y5'], page_id)
|
181
|
+
@y6 = StringField.new(prediction['y6'], page_id)
|
182
|
+
end
|
183
|
+
|
184
|
+
# @return [String]
|
185
|
+
def to_s
|
186
|
+
out_str = String.new
|
187
|
+
out_str << "\n:a: #{@a}".rstrip
|
188
|
+
out_str << "\n:b: #{@b}".rstrip
|
189
|
+
out_str << "\n:c1: #{@c1}".rstrip
|
190
|
+
out_str << "\n:c3: #{@c3}".rstrip
|
191
|
+
out_str << "\n:c41: #{@c41}".rstrip
|
192
|
+
out_str << "\n:c4a: #{@c4a}".rstrip
|
193
|
+
out_str << "\n:d1: #{@d1}".rstrip
|
194
|
+
out_str << "\n:d3: #{@d3}".rstrip
|
195
|
+
out_str << "\n:e: #{@e}".rstrip
|
196
|
+
out_str << "\n:f1: #{@f1}".rstrip
|
197
|
+
out_str << "\n:f2: #{@f2}".rstrip
|
198
|
+
out_str << "\n:f3: #{@f3}".rstrip
|
199
|
+
out_str << "\n:g: #{@g}".rstrip
|
200
|
+
out_str << "\n:g1: #{@g1}".rstrip
|
201
|
+
out_str << "\n:i: #{@i}".rstrip
|
202
|
+
out_str << "\n:j: #{@j}".rstrip
|
203
|
+
out_str << "\n:j1: #{@j1}".rstrip
|
204
|
+
out_str << "\n:j2: #{@j2}".rstrip
|
205
|
+
out_str << "\n:j3: #{@j3}".rstrip
|
206
|
+
out_str << "\n:p1: #{@p1}".rstrip
|
207
|
+
out_str << "\n:p2: #{@p2}".rstrip
|
208
|
+
out_str << "\n:p3: #{@p3}".rstrip
|
209
|
+
out_str << "\n:p6: #{@p6}".rstrip
|
210
|
+
out_str << "\n:q: #{@q}".rstrip
|
211
|
+
out_str << "\n:s1: #{@s1}".rstrip
|
212
|
+
out_str << "\n:s2: #{@s2}".rstrip
|
213
|
+
out_str << "\n:u1: #{@u1}".rstrip
|
214
|
+
out_str << "\n:u2: #{@u2}".rstrip
|
215
|
+
out_str << "\n:v7: #{@v7}".rstrip
|
216
|
+
out_str << "\n:x1: #{@x1}".rstrip
|
217
|
+
out_str << "\n:y1: #{@y1}".rstrip
|
218
|
+
out_str << "\n:y2: #{@y2}".rstrip
|
219
|
+
out_str << "\n:y3: #{@y3}".rstrip
|
220
|
+
out_str << "\n:y4: #{@y4}".rstrip
|
221
|
+
out_str << "\n:y5: #{@y5}".rstrip
|
222
|
+
out_str << "\n:y6: #{@y6}".rstrip
|
223
|
+
out_str << "\n:Formula Number: #{@formula_number}".rstrip
|
224
|
+
out_str << "\n:Owner's First Name: #{@owner_first_name}".rstrip
|
225
|
+
out_str << "\n:Owner's Surname: #{@owner_surname}".rstrip
|
226
|
+
out_str << "\n:MRZ Line 1: #{@mrz1}".rstrip
|
227
|
+
out_str << "\n:MRZ Line 2: #{@mrz2}".rstrip
|
228
|
+
out_str[1..].to_s
|
229
|
+
end
|
230
|
+
# rubocop:enable Metrics/AbcSize
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../parsing'
|
4
|
+
require_relative 'carte_grise_v1_document'
|
5
|
+
|
6
|
+
module Mindee
|
7
|
+
module Product
|
8
|
+
module FR
|
9
|
+
module CarteGrise
|
10
|
+
# Carte Grise V1 page.
|
11
|
+
class CarteGriseV1Page < Mindee::Parsing::Common::Page
|
12
|
+
# @param prediction [Hash]
|
13
|
+
def initialize(prediction)
|
14
|
+
super(prediction)
|
15
|
+
@prediction = CarteGriseV1PagePrediction.new(
|
16
|
+
prediction['prediction'],
|
17
|
+
prediction['id']
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Carte Grise V1 page prediction.
|
23
|
+
class CarteGriseV1PagePrediction < CarteGriseV1Document
|
24
|
+
# @return [String]
|
25
|
+
def to_s
|
26
|
+
out_str = String.new
|
27
|
+
out_str << "\n#{super}"
|
28
|
+
out_str
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -8,9 +8,8 @@ module Mindee
|
|
8
8
|
module Product
|
9
9
|
# Invoice module.
|
10
10
|
module Invoice
|
11
|
-
# Invoice
|
11
|
+
# Invoice V4 prediction inference.
|
12
12
|
class InvoiceV4 < Mindee::Parsing::Common::Inference
|
13
|
-
include Mindee::Parsing::Common
|
14
13
|
@endpoint_name = 'invoices'
|
15
14
|
@endpoint_version = '4'
|
16
15
|
|
@@ -9,202 +9,162 @@ module Mindee
|
|
9
9
|
# Invoice V4 document prediction.
|
10
10
|
class InvoiceV4Document < Mindee::Parsing::Common::Prediction
|
11
11
|
include Mindee::Parsing::Standard
|
12
|
-
|
13
|
-
#
|
14
|
-
|
15
|
-
|
16
|
-
#
|
12
|
+
# The address of the customer.
|
13
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
14
|
+
attr_reader :customer_address
|
15
|
+
# List of company registrations associated to the customer.
|
16
|
+
# @return [Array<Mindee::Parsing::Standard::CompanyRegistrationField>]
|
17
|
+
attr_reader :customer_company_registrations
|
18
|
+
# The name of the customer or client.
|
19
|
+
# @return [Mindee::Parsing::Standard::StringField]
|
20
|
+
attr_reader :customer_name
|
21
|
+
# The date the purchase was made.
|
22
|
+
# @return [Mindee::Parsing::Standard::DateField]
|
23
|
+
attr_reader :date
|
24
|
+
# One of: 'INVOICE', 'CREDIT NOTE'.
|
17
25
|
# @return [Mindee::Parsing::Standard::ClassificationField]
|
18
26
|
attr_reader :document_type
|
19
|
-
# The
|
20
|
-
# @return [Mindee::Parsing::Standard::AmountField]
|
21
|
-
attr_reader :total_amount
|
22
|
-
# The total amount without the tax value.
|
23
|
-
# @return [Mindee::Parsing::Standard::AmountField]
|
24
|
-
attr_reader :total_net
|
25
|
-
# The total tax.
|
26
|
-
# @return [Mindee::Parsing::Standard::AmountField]
|
27
|
-
attr_reader :total_tax
|
28
|
-
# The creation date of the invoice.
|
27
|
+
# The date on which the payment is due.
|
29
28
|
# @return [Mindee::Parsing::Standard::DateField]
|
30
|
-
attr_reader :
|
31
|
-
# The invoice number.
|
29
|
+
attr_reader :due_date
|
30
|
+
# The invoice number or identifier.
|
32
31
|
# @return [Mindee::Parsing::Standard::StringField]
|
33
32
|
attr_reader :invoice_number
|
34
|
-
# List of
|
35
|
-
# @return [Mindee::
|
33
|
+
# List of line item details.
|
34
|
+
# @return [Array<Mindee::Product::Invoice::InvoiceV4LineItem>]
|
35
|
+
attr_reader :line_items
|
36
|
+
# The locale detected on the document.
|
37
|
+
# @return [Mindee::Parsing::Standard::LocaleField]
|
38
|
+
attr_reader :locale
|
39
|
+
# List of Reference numbers, including PO number.
|
40
|
+
# @return [Array<Mindee::Parsing::Standard::StringField>]
|
36
41
|
attr_reader :reference_numbers
|
37
|
-
# The
|
38
|
-
# @return [Mindee::Parsing::Standard::DateField]
|
39
|
-
attr_reader :due_date
|
40
|
-
# The list of taxes.
|
41
|
-
# @return [Mindee::Parsing::Standard::Taxes]
|
42
|
-
attr_reader :taxes
|
43
|
-
# The name of the customer.
|
42
|
+
# The address of the supplier or merchant.
|
44
43
|
# @return [Mindee::Parsing::Standard::StringField]
|
45
|
-
attr_reader :
|
46
|
-
#
|
47
|
-
# @return [Mindee::Parsing::Standard::StringField]
|
48
|
-
attr_reader :customer_address
|
49
|
-
# The company registration information for the customer.
|
44
|
+
attr_reader :supplier_address
|
45
|
+
# List of company registrations associated to the supplier.
|
50
46
|
# @return [Array<Mindee::Parsing::Standard::CompanyRegistrationField>]
|
51
|
-
attr_reader :
|
52
|
-
# The supplier
|
47
|
+
attr_reader :supplier_company_registrations
|
48
|
+
# The name of the supplier or merchant.
|
53
49
|
# @return [Mindee::Parsing::Standard::StringField]
|
54
50
|
attr_reader :supplier_name
|
55
|
-
#
|
56
|
-
# @return [Mindee::Parsing::Standard::StringField]
|
57
|
-
attr_reader :supplier_address
|
58
|
-
# The payment information.
|
51
|
+
# List of payment details associated to the supplier.
|
59
52
|
# @return [Array<Mindee::Parsing::Standard::PaymentDetailsField>]
|
60
53
|
attr_reader :supplier_payment_details
|
61
|
-
#
|
62
|
-
# @return [
|
63
|
-
attr_reader :
|
64
|
-
#
|
65
|
-
# @return [
|
66
|
-
attr_reader :
|
54
|
+
# List of tax line details.
|
55
|
+
# @return [Mindee::Parsing::Standard::Taxes]
|
56
|
+
attr_reader :taxes
|
57
|
+
# The total amount paid: includes taxes, tips, fees, and other charges.
|
58
|
+
# @return [Mindee::Parsing::Standard::AmountField]
|
59
|
+
attr_reader :total_amount
|
60
|
+
# The net amount paid: does not include taxes, fees, and discounts.
|
61
|
+
# @return [Mindee::Parsing::Standard::AmountField]
|
62
|
+
attr_reader :total_net
|
67
63
|
|
68
64
|
# @param prediction [Hash]
|
69
65
|
# @param page_id [Integer, nil]
|
70
66
|
def initialize(prediction, page_id)
|
71
67
|
super()
|
72
|
-
@locale = LocaleField.new(prediction['locale'])
|
73
|
-
@document_type = ClassificationField.new(prediction['document_type'], page_id)
|
74
|
-
@total_amount = AmountField.new(prediction['total_amount'], page_id)
|
75
|
-
@total_net = AmountField.new(prediction['total_net'], page_id)
|
76
68
|
@customer_address = StringField.new(prediction['customer_address'], page_id)
|
69
|
+
@customer_company_registrations = []
|
70
|
+
prediction['customer_company_registrations'].each do |item|
|
71
|
+
@customer_company_registrations.push(CompanyRegistrationField.new(item, page_id))
|
72
|
+
end
|
77
73
|
@customer_name = StringField.new(prediction['customer_name'], page_id)
|
78
74
|
@date = DateField.new(prediction['date'], page_id)
|
75
|
+
@document_type = ClassificationField.new(prediction['document_type'], page_id)
|
79
76
|
@due_date = DateField.new(prediction['due_date'], page_id)
|
80
77
|
@invoice_number = StringField.new(prediction['invoice_number'], page_id)
|
81
|
-
@
|
82
|
-
|
78
|
+
@line_items = []
|
79
|
+
prediction['line_items'].each do |item|
|
80
|
+
@line_items.push(InvoiceV4LineItem.new(item, page_id))
|
81
|
+
end
|
82
|
+
@locale = LocaleField.new(prediction['locale'], page_id)
|
83
83
|
@reference_numbers = []
|
84
84
|
prediction['reference_numbers'].each do |item|
|
85
85
|
@reference_numbers.push(StringField.new(item, page_id))
|
86
86
|
end
|
87
|
-
@
|
88
|
-
prediction['customer_company_registrations'].each do |item|
|
89
|
-
@customer_company_registrations.push(CompanyRegistrationField.new(item, page_id))
|
90
|
-
end
|
91
|
-
@taxes = Taxes.new(prediction['taxes'], page_id)
|
92
|
-
@supplier_payment_details = []
|
93
|
-
prediction['supplier_payment_details'].each do |item|
|
94
|
-
@supplier_payment_details.push(PaymentDetailsField.new(item, page_id))
|
95
|
-
end
|
87
|
+
@supplier_address = StringField.new(prediction['supplier_address'], page_id)
|
96
88
|
@supplier_company_registrations = []
|
97
89
|
prediction['supplier_company_registrations'].each do |item|
|
98
90
|
@supplier_company_registrations.push(CompanyRegistrationField.new(item, page_id))
|
99
91
|
end
|
100
|
-
@
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
prediction['line_items'].each do |item|
|
105
|
-
@line_items.push(InvoiceV4LineItem.new(item, page_id))
|
92
|
+
@supplier_name = StringField.new(prediction['supplier_name'], page_id)
|
93
|
+
@supplier_payment_details = []
|
94
|
+
prediction['supplier_payment_details'].each do |item|
|
95
|
+
@supplier_payment_details.push(PaymentDetailsField.new(item, page_id))
|
106
96
|
end
|
107
|
-
|
97
|
+
@taxes = Taxes.new(prediction['taxes'], page_id)
|
98
|
+
@total_amount = AmountField.new(prediction['total_amount'], page_id)
|
99
|
+
@total_net = AmountField.new(prediction['total_net'], page_id)
|
108
100
|
end
|
109
101
|
|
110
102
|
# @return [String]
|
111
103
|
def to_s
|
112
|
-
|
113
|
-
supplier_payment_details = @supplier_payment_details.
|
114
|
-
supplier_company_registrations = @supplier_company_registrations.
|
115
|
-
|
104
|
+
reference_numbers = @reference_numbers.join("\n #{' ' * 19}")
|
105
|
+
supplier_payment_details = @supplier_payment_details.join("\n #{' ' * 26}")
|
106
|
+
supplier_company_registrations = @supplier_company_registrations.join("\n #{' ' * 32}")
|
107
|
+
customer_company_registrations = @customer_company_registrations.join("\n #{' ' * 32}")
|
108
|
+
line_items = line_items_to_s
|
116
109
|
out_str = String.new
|
117
110
|
out_str << "\n:Locale: #{@locale}".rstrip
|
118
|
-
out_str << "\n:
|
119
|
-
out_str << "\n:
|
120
|
-
out_str << "\n:
|
121
|
-
out_str << "\n:
|
122
|
-
out_str << "\n:
|
123
|
-
out_str << "\n:
|
124
|
-
out_str << "\n:Supplier address: #{@supplier_address}".rstrip
|
125
|
-
out_str << "\n:Supplier company registrations: #{supplier_company_registrations}".rstrip
|
126
|
-
out_str << "\n:Supplier payment details: #{supplier_payment_details}".rstrip
|
127
|
-
out_str << "\n:Customer name: #{@customer_name}".rstrip
|
128
|
-
out_str << "\n:Customer address: #{@customer_address}".rstrip
|
129
|
-
out_str << "\n:Customer company registrations: #{customer_company_registrations}".rstrip
|
111
|
+
out_str << "\n:Invoice Number: #{@invoice_number}".rstrip
|
112
|
+
out_str << "\n:Reference Numbers: #{reference_numbers}".rstrip
|
113
|
+
out_str << "\n:Purchase Date: #{@date}".rstrip
|
114
|
+
out_str << "\n:Due Date: #{@due_date}".rstrip
|
115
|
+
out_str << "\n:Total Net: #{@total_net}".rstrip
|
116
|
+
out_str << "\n:Total Amount: #{@total_amount}".rstrip
|
130
117
|
out_str << "\n:Taxes:#{@taxes}".rstrip
|
131
|
-
out_str << "\n:
|
132
|
-
out_str << "\n:
|
133
|
-
out_str << "\n:
|
118
|
+
out_str << "\n:Supplier Payment Details: #{supplier_payment_details}".rstrip
|
119
|
+
out_str << "\n:Supplier Name: #{@supplier_name}".rstrip
|
120
|
+
out_str << "\n:Supplier Company Registrations: #{supplier_company_registrations}".rstrip
|
121
|
+
out_str << "\n:Supplier Address: #{@supplier_address}".rstrip
|
122
|
+
out_str << "\n:Customer Name: #{@customer_name}".rstrip
|
123
|
+
out_str << "\n:Customer Company Registrations: #{customer_company_registrations}".rstrip
|
124
|
+
out_str << "\n:Customer Address: #{@customer_address}".rstrip
|
125
|
+
out_str << "\n:Document Type: #{@document_type}".rstrip
|
134
126
|
out_str << "\n:Line Items:"
|
135
|
-
out_str <<
|
127
|
+
out_str << line_items
|
136
128
|
out_str[1..].to_s
|
137
129
|
end
|
138
130
|
|
139
131
|
private
|
140
132
|
|
141
|
-
|
142
|
-
|
133
|
+
# @param char [String]
|
134
|
+
# @return [String]
|
135
|
+
def line_items_separator(char)
|
136
|
+
out_str = String.new
|
137
|
+
out_str << ' '
|
138
|
+
out_str << "+#{char * 38}"
|
139
|
+
out_str << "+#{char * 14}"
|
140
|
+
out_str << "+#{char * 10}"
|
141
|
+
out_str << "+#{char * 12}"
|
142
|
+
out_str << "+#{char * 14}"
|
143
|
+
out_str << "+#{char * 14}"
|
144
|
+
out_str << "+#{char * 12}"
|
145
|
+
out_str << '+'
|
146
|
+
out_str
|
143
147
|
end
|
144
148
|
|
149
|
+
# @return [String]
|
145
150
|
def line_items_to_s
|
146
151
|
return '' if @line_items.empty?
|
147
152
|
|
148
|
-
line_items = @line_items.map(&:
|
153
|
+
line_items = @line_items.map(&:to_table_line).join("\n#{line_items_separator('-')}\n ")
|
149
154
|
out_str = String.new
|
150
|
-
out_str << "\n#{
|
151
|
-
out_str << "\n |
|
152
|
-
out_str <<
|
155
|
+
out_str << "\n#{line_items_separator('-')}"
|
156
|
+
out_str << "\n |"
|
157
|
+
out_str << ' Description |'
|
158
|
+
out_str << ' Product code |'
|
159
|
+
out_str << ' Quantity |'
|
160
|
+
out_str << ' Tax Amount |'
|
161
|
+
out_str << ' Tax Rate (%) |'
|
162
|
+
out_str << ' Total Amount |'
|
163
|
+
out_str << ' Unit Price |'
|
164
|
+
out_str << "\n#{line_items_separator('=')}"
|
153
165
|
out_str << "\n #{line_items}"
|
154
|
-
out_str << "\n#{
|
155
|
-
|
156
|
-
|
157
|
-
def reconstruct(page_id)
|
158
|
-
construct_total_tax_from_taxes(page_id)
|
159
|
-
return unless page_id.nil?
|
160
|
-
|
161
|
-
construct_total_excl_from_tcc_and_taxes(page_id)
|
162
|
-
construct_total_incl_from_taxes_plus_excl(page_id)
|
163
|
-
construct_total_tax_from_totals(page_id)
|
164
|
-
end
|
165
|
-
|
166
|
-
def construct_total_excl_from_tcc_and_taxes(page_id)
|
167
|
-
return if @total_amount.value.nil? || taxes.empty? || !@total_net.value.nil?
|
168
|
-
|
169
|
-
total_excl = {
|
170
|
-
'value' => @total_amount.value - @taxes.map(&:value).sum,
|
171
|
-
'confidence' => StringField.array_confidence(@taxes) * @total_amount.confidence,
|
172
|
-
}
|
173
|
-
@total_net = AmountField.new(total_excl, page_id, reconstructed: true)
|
174
|
-
end
|
175
|
-
|
176
|
-
def construct_total_incl_from_taxes_plus_excl(page_id)
|
177
|
-
return if @total_net.value.nil? || @taxes.empty? || !@total_amount.value.nil?
|
178
|
-
|
179
|
-
total_incl = {
|
180
|
-
'value' => @taxes.map(&:value).sum + @total_net.value,
|
181
|
-
'confidence' => StringField.array_confidence(@taxes) * @total_net.confidence,
|
182
|
-
}
|
183
|
-
@total_amount = AmountField.new(total_incl, page_id, reconstructed: true)
|
184
|
-
end
|
185
|
-
|
186
|
-
def construct_total_tax_from_taxes(page_id)
|
187
|
-
return if @taxes.empty?
|
188
|
-
|
189
|
-
total_tax = {
|
190
|
-
'value' => @taxes.map(&:value).sum,
|
191
|
-
'confidence' => StringField.array_confidence(@taxes),
|
192
|
-
}
|
193
|
-
return unless total_tax['value'].positive?
|
194
|
-
|
195
|
-
@total_tax = AmountField.new(total_tax, page_id, reconstructed: true)
|
196
|
-
end
|
197
|
-
|
198
|
-
def construct_total_tax_from_totals(page_id)
|
199
|
-
return if !@total_tax.value.nil? || @total_amount.value.nil? || @total_net.value.nil?
|
200
|
-
|
201
|
-
total_tax = {
|
202
|
-
'value' => @total_amount.value - @total_net.value,
|
203
|
-
'confidence' => StringField.array_confidence(@taxes),
|
204
|
-
}
|
205
|
-
return unless total_tax['value'] >= 0
|
206
|
-
|
207
|
-
@total_tax = AmountField.new(total_tax, page_id, reconstructed: true)
|
166
|
+
out_str << "\n#{line_items_separator('-')}"
|
167
|
+
out_str
|
208
168
|
end
|
209
169
|
end
|
210
170
|
end
|