mindee 2.1.1 → 2.2.1

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 (26) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +3 -0
  4. data/CHANGELOG.md +11 -0
  5. data/bin/mindee.rb +1 -1
  6. data/docs/code_samples/expense_receipts_v5.txt +14 -0
  7. data/docs/ruby-receipt-ocr.md +30 -17
  8. data/lib/mindee/client.rb +3 -0
  9. data/lib/mindee/parsing/prediction/common_fields/locale.rb +1 -1
  10. data/lib/mindee/parsing/prediction/common_fields/tax.rb +4 -0
  11. data/lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb +4 -4
  12. data/lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb +15 -23
  13. data/lib/mindee/parsing/prediction/{invoice/invoice_line_item.rb → financial_document/financial_document_v1_line_item.rb} +9 -9
  14. data/lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb +6 -6
  15. data/lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb +8 -8
  16. data/lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb +35 -34
  17. data/lib/mindee/parsing/prediction/invoice/invoice_v4.rb +14 -18
  18. data/lib/mindee/parsing/prediction/{financial_document/invoice_line_item.rb → invoice/invoice_v4_line_item.rb} +9 -9
  19. data/lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb +36 -36
  20. data/lib/mindee/parsing/prediction/receipt/receipt_v5.rb +136 -0
  21. data/lib/mindee/parsing/prediction/receipt/receipt_v5_line_item.rb +37 -0
  22. data/lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb +2 -2
  23. data/lib/mindee/parsing/prediction.rb +1 -0
  24. data/lib/mindee/version.rb +1 -1
  25. data/mindee.gemspec +5 -5
  26. metadata +17 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 927e4d22c8f54feebaace71c40705a1e130d4737fce8487ae24b7c369f2aa3ea
4
- data.tar.gz: 99101cdf1573be19a82ee0cd04bd54cc45edff95bac113902174f45c3ae4de4d
3
+ metadata.gz: 2e72f138a729f4c2296fb6fa1913ae54b55b7e25e49134d20bc91c7a6a90c7ae
4
+ data.tar.gz: cf14c3229afc27d75017c2a184ef661fafdae38d22af046d5aed4651ad3aeb31
5
5
  SHA512:
6
- metadata.gz: 38b335f5baf0b8a4757e31956472314f11e01d901c24e8e24990f48e90292d0bac7c4aba79a30ea4db27188c88d7957282fc19d08c653b3b7fce489a923f6c9a
7
- data.tar.gz: 8f87a88fff6e4284a326c563f60e67c8a85e2516cb96f103ba648b5ac2366298e59fc1c60f120f4e797b738c71dc391dc881317bd1e9825d2a3f9513f9b63e5d
6
+ metadata.gz: 89dc112d3507a28af8fbc91f38715cc504772fbd4a47808b36ee138da1368966bad4a8629f4cc4de2a70a381635f599fe8f7105c11d432879bb949b17b1c3304
7
+ data.tar.gz: 24cd2c56da98a224aa6193d2bb0ba3d2dc7d0b397efcc7e2cd720d4e9d80a93c26b5adcc085ed1dd28d36e2619eb30cd86804ecb69dc3fc9901712cc830236ba
data/.gitignore CHANGED
@@ -15,6 +15,7 @@
15
15
  /test/tmp/
16
16
  /test/version_tmp/
17
17
  /tmp/
18
+ _test.rb
18
19
  /vendor
19
20
  /mindee-*/
20
21
 
data/.rubocop.yml CHANGED
@@ -9,6 +9,9 @@ AllCops:
9
9
  TargetRubyVersion: 2.6
10
10
  SuggestExtensions: false
11
11
 
12
+ Gemspec/DevelopmentDependencies:
13
+ EnforcedStyle: gemspec
14
+
12
15
  Style/TrailingCommaInHashLiteral:
13
16
  EnforcedStyleForMultiline: comma
14
17
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Mindee Ruby API Library Changelog
2
2
 
3
+ ## v2.2.1 - 2023-05-22
4
+ ### Fixes
5
+ * :bug: added base attribute to tax field
6
+
7
+
8
+ ## v2.2.0 - 2023-05-16
9
+ ### Changes
10
+ * :sparkles: add support for Receipts v5
11
+ * :pushpin: more specific dependency pinning; update some dependencies
12
+
13
+
3
14
  ## v2.1.1 - 2023-04-21
4
15
  ### Changes
5
16
  * :memo: minor docstring improvements
data/bin/mindee.rb CHANGED
@@ -24,7 +24,7 @@ DOCUMENTS = {
24
24
  },
25
25
  "receipt" => {
26
26
  help: "Expense Receipt",
27
- prediction: Mindee::Prediction::ReceiptV4,
27
+ prediction: Mindee::Prediction::ReceiptV5,
28
28
  },
29
29
  "passport" => {
30
30
  help: "Passport",
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client, specifying an API key
4
+ mindee_client = Mindee::Client.new(api_key: 'my-api-key')
5
+
6
+ # Load a file from disk and parse it
7
+ result = mindee_client.doc_from_path('/path/to/the/file.ext')
8
+ .parse(Mindee::Prediction::ReceiptV5)
9
+
10
+ # Print a full summary of the parsed data in RST format
11
+ puts result
12
+
13
+ # Print the document-level parsed data
14
+ # puts result.inference.prediction
@@ -2,7 +2,7 @@ The Ruby OCR SDK supports the [receipt API](https://developers.mindee.com/docs/
2
2
 
3
3
  Using this sample below, we are going to illustrate how to extract the data that we want using the OCR SDK.
4
4
 
5
- ![sample receipt](https://raw.githubusercontent.com/mindee/client-lib-test-data/main/receipt/receipt-with-tip.jpg)
5
+ ![sample receipt](https://raw.githubusercontent.com/mindee/client-lib-test-data/main/receipt/receipt.jpg)
6
6
 
7
7
  ## Quick Start
8
8
  ```ruby
@@ -11,27 +11,41 @@ require 'mindee'
11
11
  # Init a new client, specifying an API key
12
12
  mindee_client = Mindee::Client.new(api_key: 'my-api-key')
13
13
 
14
- # Send the file
15
- result = mindee_client.doc_from_path('/path/to/the/file.ext').parse(Mindee::Prediction::ReceiptV4)
14
+ # Load a file from disk and parse it
15
+ result = mindee_client.doc_from_path('/path/to/the/file.ext')
16
+ .parse(Mindee::Prediction::ReceiptV5)
16
17
 
17
- # Print a summary of the document prediction in RST format
18
+ # Print a full summary of the parsed data in RST format
19
+ # puts result
20
+
21
+ # Print the document-level parsed data
18
22
  puts result.inference.prediction
19
23
  ```
20
24
 
21
25
  Output:
22
26
  ```
23
- :Locale: en-US; en; US; USD;
24
- :Date: 2014-07-07
25
- :Category: food
26
- :Subcategory: restaurant
27
- :Document type: EXPENSE RECEIPT
28
- :Time: 20:20
29
- :Supplier name: LOGANS
30
- :Taxes: 3.34 TAX
31
- :Total net: 40.48
32
- :Total taxes: 3.34
33
- :Tip: 10.00
34
- :Total amount: 53.8
27
+ :Expense Locale: en-GB; en; GB; GBP;
28
+ :Expense Category: food
29
+ :Expense Sub Category: restaurant
30
+ :Document Type: EXPENSE RECEIPT
31
+ :Purchase Date: 2016-02-26
32
+ :Purchase Time: 15:20
33
+ :Total Amount: 10.20
34
+ :Total Excluding Taxes: 8.50
35
+ :Total Tax: 1.70
36
+ :Tip and Gratuity:
37
+ :Taxes: 1.70 20.00% VAT
38
+ :Supplier Name: CLACHAN
39
+ :Supplier Company Registrations: 232153895
40
+ 232153895
41
+ :Supplier Address: 34 kingley street w1b 5qh
42
+ :Supplier Phone Number: 02074940834
43
+ :Line Items:
44
+ +--------------------------------------+----------+--------------+------------+
45
+ | Description | Quantity | Total Amount | Unit Price |
46
+ +======================================+==========+==============+============+
47
+ | Meantime Pale | 2.00 | 10.20 | |
48
+ +--------------------------------------+----------+--------------+------------+
35
49
  ```
36
50
 
37
51
  ## Fields
@@ -50,7 +64,6 @@ Depending on the field type specified, additional attributes can be extracted in
50
64
 
51
65
  Using the above sample, the following are the basic fields that can be extracted:
52
66
 
53
- - [Orientation](#orientation)
54
67
  - [Category](#category)
55
68
  - [Date](#date)
56
69
  - [Locale](#locale)
data/lib/mindee/client.rb CHANGED
@@ -183,6 +183,9 @@ module Mindee
183
183
  @doc_configs[['mindee', Prediction::ReceiptV4.name]] = standard_document_config(
184
184
  Prediction::ReceiptV4, 'expense_receipts', '4'
185
185
  )
186
+ @doc_configs[['mindee', Prediction::ReceiptV5.name]] = standard_document_config(
187
+ Prediction::ReceiptV5, 'expense_receipts', '5'
188
+ )
186
189
  @doc_configs[['mindee', Prediction::PassportV1.name]] = standard_document_config(
187
190
  Prediction::PassportV1, 'passport', '1'
188
191
  )
@@ -20,7 +20,7 @@ module Mindee
20
20
  attr_reader :value
21
21
 
22
22
  # @param prediction [Hash]
23
- def initialize(prediction)
23
+ def initialize(prediction, _page_id = nil)
24
24
  value_key = if prediction.include? 'value'
25
25
  'value'
26
26
  else
@@ -14,6 +14,9 @@ module Mindee
14
14
  # Tax code
15
15
  # @return [String]
16
16
  attr_reader :code
17
+ # Tax base
18
+ # @return [Float]
19
+ attr_reader :base
17
20
 
18
21
  # @param prediction [Hash]
19
22
  # @param page_id [Integer, nil]
@@ -21,6 +24,7 @@ module Mindee
21
24
  super
22
25
  @value = @value.round(3) unless @value.nil?
23
26
  @rate = prediction['rate'].to_f unless prediction['rate'].nil?
27
+ @base = prediction['base'].to_f unless prediction['base'].nil?
24
28
  @code = prediction['code'] unless prediction['code'] == 'None'
25
29
  end
26
30
 
@@ -6,9 +6,9 @@ require_relative '../../base'
6
6
  module Mindee
7
7
  module Prediction
8
8
  module EU
9
- # License plate prediction.
9
+ # License Plate v1 prediction results.
10
10
  class LicensePlateV1 < Prediction
11
- # A list of license plates.
11
+ # List of all license plates found in the image.
12
12
  # @return [Array<Mindee::TextField>]
13
13
  attr_reader :license_plates
14
14
 
@@ -23,9 +23,9 @@ module Mindee
23
23
  end
24
24
 
25
25
  def to_s
26
- license_plates = @license_plates.map(&:value).join(', ')
26
+ license_plates = @license_plates.join("\n #{' ' * 16}")
27
27
  out_str = String.new
28
- out_str << "\n:License plates: #{license_plates}".rstrip
28
+ out_str << "\n:License Plates: #{license_plates}".rstrip
29
29
  out_str[1..].to_s
30
30
  end
31
31
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative '../common_fields'
4
4
  require_relative '../base'
5
- require_relative 'invoice_line_item'
5
+ require_relative 'financial_document_v1_line_item'
6
6
 
7
7
  module Mindee
8
8
  module Prediction
@@ -60,7 +60,7 @@ module Mindee
60
60
  # @return [Array<Mindee::CompanyRegistration>]
61
61
  attr_reader :supplier_company_registrations
62
62
  # Line items details.
63
- # @return [Array<Mindee::InvoiceLineItem>]
63
+ # @return [Array<Mindee::FinancialDocumentV1LineItem>]
64
64
  attr_reader :line_items
65
65
  # Time as seen on the receipt in HH:MM format.
66
66
  # @return [Mindee::TextField]
@@ -83,7 +83,6 @@ module Mindee
83
83
  # @param page_id [Integer, nil]
84
84
  def initialize(prediction, page_id) # rubocop:todo Metrics/AbcSize
85
85
  super
86
-
87
86
  @time = TextField.new(prediction['time'], page_id)
88
87
  @category = TextField.new(prediction['category'], page_id)
89
88
  @subcategory = TextField.new(prediction['subcategory'], page_id)
@@ -100,7 +99,6 @@ module Mindee
100
99
  @invoice_number = TextField.new(prediction['invoice_number'], page_id)
101
100
  @supplier_name = TextField.new(prediction['supplier_name'], page_id)
102
101
  @supplier_address = TextField.new(prediction['supplier_address'], page_id)
103
-
104
102
  @reference_numbers = []
105
103
  prediction['reference_numbers'].each do |item|
106
104
  @reference_numbers.push(TextField.new(item, page_id))
@@ -121,14 +119,12 @@ module Mindee
121
119
  prediction['supplier_company_registrations'].each do |item|
122
120
  @supplier_company_registrations.push(CompanyRegistration.new(item, page_id))
123
121
  end
124
-
125
122
  @total_tax = AmountField.new(
126
123
  { value: nil, confidence: 0.0 }, page_id
127
124
  )
128
-
129
125
  @line_items = []
130
126
  prediction['line_items'].each do |item|
131
- @line_items.push(InvoiceLineItem.new(item, page_id))
127
+ @line_items.push(FinancialDocumentV1LineItem.new(item, page_id))
132
128
  end
133
129
  reconstruct(page_id)
134
130
  end
@@ -153,39 +149,35 @@ module Mindee
153
149
  out_str << "\n:Supplier address: #{@supplier_address}".rstrip
154
150
  out_str << "\n:Supplier company registrations: #{supplier_company_registrations}".rstrip
155
151
  out_str << "\n:Supplier payment details: #{supplier_payment_details}".rstrip
156
-
157
152
  out_str << "\n:Customer name: #{@customer_name}".rstrip
158
153
  out_str << "\n:Customer address: #{@customer_address}".rstrip
159
154
  out_str << "\n:Customer company registrations: #{customer_company_registrations}".rstrip
160
-
161
155
  out_str << "\n:Tip: #{@tip}".rstrip
162
-
163
156
  out_str << "\n:Taxes: #{taxes}".rstrip
164
157
  out_str << "\n:Total taxes: #{@total_tax}".rstrip
165
158
  out_str << "\n:Total net: #{@total_net}".rstrip
166
159
  out_str << "\n:Total amount: #{@total_amount}".rstrip
167
-
160
+ out_str << "\n:Line Items:"
168
161
  out_str << line_items_to_s
169
-
170
162
  out_str[1..].to_s
171
163
  end
172
164
 
173
165
  private
174
166
 
167
+ def line_item_separator(char)
168
+ " +#{char * 22}+#{char * 9}+#{char * 9}+#{char * 10}+#{char * 18}+#{char * 38}+"
169
+ end
170
+
175
171
  def line_items_to_s
176
- line_item_separator = "#{'=' * 22} #{'=' * 8} #{'=' * 9} #{'=' * 10} #{'=' * 18} #{'=' * 36}"
177
- line_items = @line_items.map(&:to_s).join("\n")
172
+ return '' if @line_items.empty?
178
173
 
174
+ line_items = @line_items.map(&:to_s).join("\n#{line_item_separator('-')}\n ")
179
175
  out_str = String.new
180
- out_str << "\n\n:Line Items:"
181
-
182
- return out_str if line_items.empty?
183
-
184
- out_str << "\n#{line_item_separator}"
185
- out_str << "\nCode QTY Price Amount Tax (Rate) Description"
186
- out_str << "\n#{line_item_separator}"
187
- out_str << "\n#{line_items}"
188
- out_str << "\n#{line_item_separator}"
176
+ out_str << "\n#{line_item_separator('-')}"
177
+ out_str << "\n | Code#{' ' * 17}| QTY | Price | Amount | Tax (Rate) | Description#{' ' * 26}|"
178
+ out_str << "\n#{line_item_separator('=')}"
179
+ out_str << "\n #{line_items}"
180
+ out_str << "\n#{line_item_separator('-')}"
189
181
  end
190
182
 
191
183
  def reconstruct(page_id)
@@ -4,7 +4,7 @@ require_relative '../common_fields/base'
4
4
 
5
5
  module Mindee
6
6
  # Line items for invoices
7
- class InvoiceLineItem
7
+ class FinancialDocumentV1LineItem
8
8
  # @return [String] The product code referring to the item.
9
9
  attr_reader :product_code
10
10
  # @return [String]
@@ -39,20 +39,20 @@ module Mindee
39
39
  @page_id = page_id
40
40
  end
41
41
 
42
+ # @return String
42
43
  def to_s
43
44
  tax = Field.float_to_string(@tax_amount)
44
45
  tax << " (#{Field.float_to_string(@tax_rate)}%)" unless @tax_rate.nil?
45
-
46
46
  description = @description.nil? ? '' : @description
47
47
  description = "#{description[0..32]}..." if description.size > 35
48
-
49
48
  out_str = String.new
50
- out_str << format('%- 22s', @product_code)
51
- out_str << " #{format('%- 8s', Field.float_to_string(@quantity))}"
52
- out_str << " #{format('%- 9s', Field.float_to_string(@unit_price))}"
53
- out_str << " #{format('%- 10s', Field.float_to_string(@total_amount))}"
54
- out_str << " #{format('%- 18s', tax)}"
55
- out_str << " #{description}"
49
+ out_str << format('| %- 20s', @product_code)
50
+ out_str << " #{format('| %- 7s', Field.float_to_string(@quantity))}"
51
+ out_str << " #{format('| %- 7s', Field.float_to_string(@unit_price))}"
52
+ out_str << " #{format('| %- 8s', Field.float_to_string(@total_amount))}"
53
+ out_str << " #{format('| %- 16s', tax)}"
54
+ out_str << " #{format('| %- 37s', description)}"
55
+ out_str << '|'
56
56
  end
57
57
  end
58
58
  end
@@ -6,15 +6,15 @@ require_relative '../../base'
6
6
  module Mindee
7
7
  module Prediction
8
8
  module FR
9
- # French bank account information (RIB)
9
+ # Bank Account Details v1 prediction results.
10
10
  class BankAccountDetailsV1 < Prediction
11
- # The account's IBAN.
11
+ # The International Bank Account Number (IBAN).
12
12
  # @return [Mindee::TextField]
13
13
  attr_reader :iban
14
- # The account holder's name.
14
+ # The name of the account holder as seen on the document.
15
15
  # @return [Mindee::TextField]
16
16
  attr_reader :account_holder_name
17
- # The bank's SWIFT code.
17
+ # The bank's SWIFT Business Identifier Code (BIC).
18
18
  # @return [Mindee::TextField]
19
19
  attr_reader :swift
20
20
 
@@ -30,8 +30,8 @@ module Mindee
30
30
  def to_s
31
31
  out_str = String.new
32
32
  out_str << "\n:IBAN: #{@iban}".rstrip
33
- out_str << "\n:Account holder name: #{@account_holder_name}".rstrip
34
- out_str << "\n:SWIFT: #{@swift}".rstrip
33
+ out_str << "\n:Account Holder's Name: #{@account_holder_name}".rstrip
34
+ out_str << "\n:SWIFT Code: #{@swift}".rstrip
35
35
  out_str[1..].to_s
36
36
  end
37
37
  end
@@ -6,18 +6,18 @@ require_relative '../../base'
6
6
  module Mindee
7
7
  module Prediction
8
8
  module FR
9
- # French Carte Vitale
9
+ # Carte Vitale v1 prediction results.
10
10
  class CarteVitaleV1 < Prediction
11
- # List of given (first) names of the cardholder.
11
+ # The given name(s) of the card holder.
12
12
  # @return [Array<Mindee::TextField>]
13
13
  attr_reader :given_names
14
- # The surname (last name) of the cardholder.
14
+ # The surname of the card holder.
15
15
  # @return [Mindee::TextField]
16
16
  attr_reader :surname
17
- # The social security number of the cardholder.
17
+ # The Social Security Number (Numéro de Sécurité Sociale) of the card holder
18
18
  # @return [Mindee::TextField]
19
19
  attr_reader :social_security
20
- # The issuance date of the card.
20
+ # The date the card was issued.
21
21
  # @return [Mindee::DateField]
22
22
  attr_reader :issuance_date
23
23
 
@@ -35,12 +35,12 @@ module Mindee
35
35
  end
36
36
 
37
37
  def to_s
38
- given_names = @given_names.map(&:value).join(', ')
38
+ given_names = @given_names.join("\n #{' ' * 15}")
39
39
  out_str = String.new
40
- out_str << "\n:Given names: #{given_names}".rstrip
40
+ out_str << "\n:Given Name(s): #{given_names}".rstrip
41
41
  out_str << "\n:Surname: #{@surname}".rstrip
42
42
  out_str << "\n:Social Security Number: #{@social_security}".rstrip
43
- out_str << "\n:Issuance date: #{@issuance_date}".rstrip
43
+ out_str << "\n:Issuance Date: #{@issuance_date}".rstrip
44
44
  out_str[1..].to_s
45
45
  end
46
46
  end
@@ -6,39 +6,39 @@ require_relative '../../base'
6
6
  module Mindee
7
7
  module Prediction
8
8
  module FR
9
- # French national ID card
9
+ # Carte Nationale d'Identité v1 prediction results.
10
10
  class IdCardV1 < Prediction
11
- # The authority which has issued the card.
12
- # @return [Array<Mindee::TextField>]
13
- attr_reader :authority
14
- # Indicates if it is the recto side, the verso side or both.
11
+ # The side of the document which is visible.
15
12
  # @return [Mindee::TextField]
16
13
  attr_reader :document_side
17
- # The card number.
14
+ # The identification card number.
18
15
  # @return [Mindee::TextField]
19
16
  attr_reader :id_number
20
- # The expiration date of the card.
21
- # @return [Mindee::DateField]
22
- attr_reader :expiry_date
23
- # The surname (last name) of the cardholder.
17
+ # The given name(s) of the card holder.
18
+ # @return [Array<Mindee::TextField>]
19
+ attr_reader :given_names
20
+ # The surname of the card holder.
24
21
  # @return [Mindee::TextField]
25
22
  attr_reader :surname
26
- # List of first (given) names of the cardholder.
27
- # @return [Mindee::TextField]
28
- attr_reader :given_names
29
- # The date of birth of the cardholder.
23
+ # The date of birth of the card holder.
30
24
  # @return [Mindee::DateField]
31
25
  attr_reader :birth_date
32
- # The place of birth of the cardholder.
26
+ # The place of birth of the card holder.
33
27
  # @return [Mindee::TextField]
34
28
  attr_reader :birth_place
35
- # The sex or gender of the cardholder.
29
+ # The expiry date of the identification card.
30
+ # @return [Mindee::DateField]
31
+ attr_reader :expiry_date
32
+ # The name of the issuing authority.
33
+ # @return [Mindee::TextField]
34
+ attr_reader :authority
35
+ # The gender of the card holder.
36
36
  # @return [Mindee::TextField]
37
37
  attr_reader :gender
38
- # The value of the first MRZ line.
38
+ # Machine Readable Zone, first line
39
39
  # @return [Mindee::TextField]
40
40
  attr_reader :mrz1
41
- # The value of the second MRZ line.
41
+ # Machine Readable Zone, second line
42
42
  # @return [Mindee::TextField]
43
43
  attr_reader :mrz2
44
44
 
@@ -49,33 +49,34 @@ module Mindee
49
49
  @document_side = TextField.new(prediction['document_side'], page_id) if page_id
50
50
  @authority = TextField.new(prediction['authority'], page_id)
51
51
  @id_number = TextField.new(prediction['id_number'], page_id)
52
+ @given_names = []
53
+ prediction['given_names'].each do |item|
54
+ @given_names.push(TextField.new(item, page_id))
55
+ end
56
+ @surname = TextField.new(prediction['surname'], page_id)
52
57
  @birth_date = DateField.new(prediction['birth_date'], page_id)
53
- @expiry_date = DateField.new(prediction['expiry_date'], page_id)
54
58
  @birth_place = TextField.new(prediction['birth_place'], page_id)
59
+ @expiry_date = DateField.new(prediction['expiry_date'], page_id)
60
+ @authority = TextField.new(prediction['authority'], page_id)
55
61
  @gender = TextField.new(prediction['gender'], page_id)
56
- @surname = TextField.new(prediction['surname'], page_id)
57
62
  @mrz1 = TextField.new(prediction['mrz1'], page_id)
58
63
  @mrz2 = TextField.new(prediction['mrz2'], page_id)
59
- @given_names = []
60
- prediction['given_names'].each do |item|
61
- @given_names.push(TextField.new(item, page_id))
62
- end
63
64
  end
64
65
 
65
66
  def to_s
66
- given_names = @given_names.map(&:value).join(', ')
67
+ given_names = @given_names.join("\n #{' ' * 15}")
67
68
  out_str = String.new
68
- out_str << "\n:Document side: #{@document_side}".rstrip if @document_side
69
- out_str << "\n:Authority: #{@authority}".rstrip
70
- out_str << "\n:Given names: #{given_names}".rstrip
69
+ out_str << "\n:Document Side: #{@document_side}".rstrip if @document_side
70
+ out_str << "\n:Identity Number: #{@id_number}".rstrip
71
+ out_str << "\n:Given Name(s): #{given_names}".rstrip
71
72
  out_str << "\n:Surname: #{@surname}".rstrip
73
+ out_str << "\n:Date of Birth: #{@birth_date}".rstrip
74
+ out_str << "\n:Place of Birth: #{@birth_place}".rstrip
75
+ out_str << "\n:Expiry Date: #{@expiry_date}".rstrip
76
+ out_str << "\n:Issuing Authority: #{@authority}".rstrip
72
77
  out_str << "\n:Gender: #{@gender}".rstrip
73
- out_str << "\n:ID Number: #{@id_number}".rstrip
74
- out_str << "\n:Birth date: #{@birth_date}".rstrip
75
- out_str << "\n:Birth place: #{@birth_place}".rstrip
76
- out_str << "\n:Expiry date: #{@expiry_date}".rstrip
77
- out_str << "\n:MRZ 1: #{@mrz1}".rstrip
78
- out_str << "\n:MRZ 2: #{@mrz2}".rstrip
78
+ out_str << "\n:MRZ Line 1: #{@mrz1}".rstrip
79
+ out_str << "\n:MRZ Line 2: #{@mrz2}".rstrip
79
80
  out_str[1..].to_s
80
81
  end
81
82
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../common_fields'
4
- require_relative 'invoice_line_item'
5
4
  require_relative '../base'
5
+ require_relative 'invoice_v4_line_item'
6
6
 
7
7
  module Mindee
8
8
  module Prediction
@@ -60,7 +60,7 @@ module Mindee
60
60
  # @return [Array<Mindee::CompanyRegistration>]
61
61
  attr_reader :supplier_company_registrations
62
62
  # Line items details.
63
- # @return [Array<Mindee::InvoiceLineItem>]
63
+ # @return [Array<Mindee::InvoiceV4LineItem>]
64
64
  attr_reader :line_items
65
65
 
66
66
  # @param prediction [Hash]
@@ -78,7 +78,6 @@ module Mindee
78
78
  @invoice_number = TextField.new(prediction['invoice_number'], page_id)
79
79
  @supplier_name = TextField.new(prediction['supplier_name'], page_id)
80
80
  @supplier_address = TextField.new(prediction['supplier_address'], page_id)
81
-
82
81
  @reference_numbers = []
83
82
  prediction['reference_numbers'].each do |item|
84
83
  @reference_numbers.push(TextField.new(item, page_id))
@@ -99,14 +98,12 @@ module Mindee
99
98
  prediction['supplier_company_registrations'].each do |item|
100
99
  @supplier_company_registrations.push(CompanyRegistration.new(item, page_id))
101
100
  end
102
-
103
101
  @total_tax = AmountField.new(
104
102
  { value: nil, confidence: 0.0 }, page_id
105
103
  )
106
-
107
104
  @line_items = []
108
105
  prediction['line_items'].each do |item|
109
- @line_items.push(InvoiceLineItem.new(item, page_id))
106
+ @line_items.push(InvoiceV4LineItem.new(item, page_id))
110
107
  end
111
108
  reconstruct(page_id)
112
109
  end
@@ -124,39 +121,38 @@ module Mindee
124
121
  out_str << "\n:Reference numbers: #{reference_numbers}".rstrip
125
122
  out_str << "\n:Invoice date: #{@date}".rstrip
126
123
  out_str << "\n:Invoice due date: #{@due_date}".rstrip
127
-
128
124
  out_str << "\n:Supplier name: #{@supplier_name}".rstrip
129
125
  out_str << "\n:Supplier address: #{@supplier_address}".rstrip
130
126
  out_str << "\n:Supplier company registrations: #{supplier_company_registrations}".rstrip
131
127
  out_str << "\n:Supplier payment details: #{supplier_payment_details}".rstrip
132
-
133
128
  out_str << "\n:Customer name: #{@customer_name}".rstrip
134
129
  out_str << "\n:Customer address: #{@customer_address}".rstrip
135
130
  out_str << "\n:Customer company registrations: #{customer_company_registrations}".rstrip
136
-
137
131
  out_str << "\n:Taxes: #{taxes}".rstrip
138
132
  out_str << "\n:Total net: #{@total_net}".rstrip
139
133
  out_str << "\n:Total taxes: #{@total_tax}".rstrip
140
134
  out_str << "\n:Total amount: #{@total_amount}".rstrip
135
+ out_str << "\n:Line Items:"
141
136
  out_str << line_items_to_s
142
-
143
137
  out_str[1..].to_s
144
138
  end
145
139
 
146
140
  private
147
141
 
142
+ def line_item_separator(char)
143
+ " +#{char * 22}+#{char * 9}+#{char * 9}+#{char * 10}+#{char * 18}+#{char * 38}+"
144
+ end
145
+
148
146
  def line_items_to_s
149
147
  return '' if @line_items.empty?
150
148
 
151
- line_item_separator = "#{'=' * 22} #{'=' * 8} #{'=' * 9} #{'=' * 10} #{'=' * 18} #{'=' * 36}"
152
- line_items = @line_items.map(&:to_s).join("\n")
149
+ line_items = @line_items.map(&:to_s).join("\n#{line_item_separator('-')}\n ")
153
150
  out_str = String.new
154
- out_str << "\n\n:Line Items:"
155
- out_str << "\n#{line_item_separator}"
156
- out_str << "\nCode QTY Price Amount Tax (Rate) Description"
157
- out_str << "\n#{line_item_separator}"
158
- out_str << "\n#{line_items}"
159
- out_str << "\n#{line_item_separator}" unless line_items.empty?
151
+ out_str << "\n#{line_item_separator('-')}"
152
+ out_str << "\n | Code#{' ' * 17}| QTY | Price | Amount | Tax (Rate) | Description #{' ' * 25}|"
153
+ out_str << "\n#{line_item_separator('=')}"
154
+ out_str << "\n #{line_items}"
155
+ out_str << "\n#{line_item_separator('-')}"
160
156
  end
161
157
 
162
158
  def reconstruct(page_id)
@@ -4,7 +4,7 @@ require_relative '../common_fields/base'
4
4
 
5
5
  module Mindee
6
6
  # Line items for invoices
7
- class InvoiceLineItem
7
+ class InvoiceV4LineItem
8
8
  # @return [String] The product code referring to the item.
9
9
  attr_reader :product_code
10
10
  # @return [String]
@@ -39,20 +39,20 @@ module Mindee
39
39
  @page_id = page_id
40
40
  end
41
41
 
42
+ # @return String
42
43
  def to_s
43
44
  tax = Field.float_to_string(@tax_amount)
44
45
  tax << " (#{Field.float_to_string(@tax_rate)}%)" unless @tax_rate.nil?
45
-
46
46
  description = @description.nil? ? '' : @description
47
47
  description = "#{description[0..32]}..." if description.size > 35
48
-
49
48
  out_str = String.new
50
- out_str << format('%- 22s', @product_code)
51
- out_str << " #{format('%- 8s', Field.float_to_string(@quantity))}"
52
- out_str << " #{format('%- 9s', Field.float_to_string(@unit_price))}"
53
- out_str << " #{format('%- 10s', Field.float_to_string(@total_amount))}"
54
- out_str << " #{format('%- 18s', tax)}"
55
- out_str << " #{description}"
49
+ out_str << format('| %- 20s', @product_code)
50
+ out_str << " #{format('| %- 7s', Field.float_to_string(@quantity))}"
51
+ out_str << " #{format('| %- 7s', Field.float_to_string(@unit_price))}"
52
+ out_str << " #{format('| %- 8s', Field.float_to_string(@total_amount))}"
53
+ out_str << " #{format('| %- 16s', tax)}"
54
+ out_str << " #{format('| %- 37s', description)}"
55
+ out_str << '|'
56
56
  end
57
57
  end
58
58
  end
@@ -5,74 +5,74 @@ require_relative '../base'
5
5
 
6
6
  module Mindee
7
7
  module Prediction
8
- # Passport document.
8
+ # Proof of Address v1 prediction results.
9
9
  class ProofOfAddressV1 < Prediction
10
- # ISO 639-1 code, works best with ca, de, en, es, fr, it, nl and pt.
10
+ # The locale detected on the document.
11
11
  # @return [Mindee::Locale]
12
12
  attr_reader :locale
13
- # ISO date yyyy-mm-dd. Works both for European and US dates.
14
- # @return [Mindee::DateField]
15
- attr_reader :date
16
- # All extracted ISO date yyyy-mm-dd. Works both for European and US dates.
17
- # @return [Array<Mindee::DateField>]
18
- attr_reader :dates
19
- # Address of the document's issuer.
13
+ # The name of the person or company issuing the document.
20
14
  # @return [Mindee::TextField]
21
- attr_reader :issuer_address
22
- # Generic: VAT NUMBER, TAX ID, COMPANY REGISTRATION NUMBER or country specific.
23
- # @return [Array<Mindee::CompanyRegistration>]
15
+ attr_reader :issuer_name
16
+ # List of company registrations found for the issuer.
17
+ # @return [Array<Mindee::CompanyRegistrationField>]
24
18
  attr_reader :issuer_company_registration
25
- # Name of the person or company issuing the document.
19
+ # The address of the document's issuer.
26
20
  # @return [Mindee::TextField]
27
- attr_reader :issuer_name
28
- # Address of the recipient.
21
+ attr_reader :issuer_address
22
+ # The name of the person or company receiving the document.
29
23
  # @return [Mindee::TextField]
30
- attr_reader :recipient_address
31
- # Generic: VAT NUMBER, TAX ID, COMPANY REGISTRATION NUMBER or country specific.
32
- # @return [Array<Mindee::CompanyRegistration>]
24
+ attr_reader :recipient_name
25
+ # List of company registrations found for the recipient.
26
+ # @return [Array<Mindee::CompanyRegistrationField>]
33
27
  attr_reader :recipient_company_registration
34
- # Name of the document's recipient.
28
+ # The address of the recipient.
35
29
  # @return [Mindee::TextField]
36
- attr_reader :recipient_name
30
+ attr_reader :recipient_address
31
+ # List of dates found on the document.
32
+ # @return [Array<Mindee::DateField>]
33
+ attr_reader :dates
34
+ # The date the document was issued.
35
+ # @return [Mindee::DateField]
36
+ attr_reader :date
37
37
 
38
38
  # @param prediction [Hash]
39
39
  # @param page_id [Integer, nil]
40
40
  def initialize(prediction, page_id)
41
41
  super
42
- @locale = Locale.new(prediction['locale'])
43
- @date = DateField.new(prediction['date'], page_id)
44
- @dates = []
45
- prediction['dates'].each do |item|
46
- @dates.push(DateField.new(item, page_id))
47
- end
42
+ @locale = Locale.new(prediction['locale'], page_id)
48
43
  @issuer_name = TextField.new(prediction['issuer_name'], page_id)
49
- @issuer_address = TextField.new(prediction['issuer_address'], page_id)
50
44
  @issuer_company_registration = []
51
45
  prediction['issuer_company_registration'].each do |item|
52
46
  @issuer_company_registration.push(CompanyRegistration.new(item, page_id))
53
47
  end
48
+ @issuer_address = TextField.new(prediction['issuer_address'], page_id)
54
49
  @recipient_name = TextField.new(prediction['recipient_name'], page_id)
55
- @recipient_address = TextField.new(prediction['recipient_address'], page_id)
56
50
  @recipient_company_registration = []
57
51
  prediction['recipient_company_registration'].each do |item|
58
52
  @recipient_company_registration.push(CompanyRegistration.new(item, page_id))
59
53
  end
54
+ @recipient_address = TextField.new(prediction['recipient_address'], page_id)
55
+ @dates = []
56
+ prediction['dates'].each do |item|
57
+ @dates.push(DateField.new(item, page_id))
58
+ end
59
+ @date = DateField.new(prediction['date'], page_id)
60
60
  end
61
61
 
62
62
  def to_s
63
- recipient_company_registrations = @recipient_company_registration.join(' ')
64
- issuer_company_registrations = @issuer_company_registration.join(' ')
65
- dates = @dates.join("\n ")
63
+ issuer_company_registration = @issuer_company_registration.join("\n #{' ' * 30}")
64
+ recipient_company_registration = @recipient_company_registration.join("\n #{' ' * 33}")
65
+ dates = @dates.join("\n #{' ' * 7}")
66
66
  out_str = String.new
67
67
  out_str << "\n:Locale: #{@locale}".rstrip
68
- out_str << "\n:Issuer name: #{@issuer_name}".rstrip
68
+ out_str << "\n:Issuer Name: #{@issuer_name}".rstrip
69
+ out_str << "\n:Issuer Company Registrations: #{issuer_company_registration}".rstrip
69
70
  out_str << "\n:Issuer Address: #{@issuer_address}".rstrip
70
- out_str << "\n:Issuer Company Registrations: #{issuer_company_registrations}".rstrip
71
- out_str << "\n:Recipient name: #{@recipient_name}".rstrip
71
+ out_str << "\n:Recipient Name: #{@recipient_name}".rstrip
72
+ out_str << "\n:Recipient Company Registrations: #{recipient_company_registration}".rstrip
72
73
  out_str << "\n:Recipient Address: #{@recipient_address}".rstrip
73
- out_str << "\n:Recipient Company Registrations: #{recipient_company_registrations}".rstrip
74
- out_str << "\n:Issuance date: #{@date}".rstrip
75
74
  out_str << "\n:Dates: #{dates}".rstrip
75
+ out_str << "\n:Date of Issue: #{@date}".rstrip
76
76
  out_str[1..].to_s
77
77
  end
78
78
  end
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../common_fields'
4
+ require_relative '../base'
5
+ require_relative 'receipt_v5_line_item'
6
+
7
+ module Mindee
8
+ module Prediction
9
+ # Expense Receipt v5 prediction results.
10
+ class ReceiptV5 < Prediction
11
+ # The locale identifier in BCP 47 (RFC 5646) format: ISO language code, '-', ISO country code.
12
+ # @return [Mindee::Locale]
13
+ attr_reader :locale
14
+ # The receipt category among predefined classes.
15
+ # @return [Mindee::TextField]
16
+ attr_reader :category
17
+ # The receipt sub category among predefined classes for transport and food.
18
+ # @return [Mindee::TextField]
19
+ attr_reader :subcategory
20
+ # Whether the document is an expense receipt or a credit card receipt.
21
+ # @return [Mindee::TextField]
22
+ attr_reader :document_type
23
+ # The date the purchase was made.
24
+ # @return [Mindee::DateField]
25
+ attr_reader :date
26
+ # Time of purchase with 24 hours formatting (HH:MM).
27
+ # @return [Mindee::TextField]
28
+ attr_reader :time
29
+ # The total amount paid including taxes, discounts, fees, tips, and gratuity.
30
+ # @return [Mindee::AmountField]
31
+ attr_reader :total_amount
32
+ # The total amount excluding taxes.
33
+ # @return [Mindee::AmountField]
34
+ attr_reader :total_net
35
+ # The total amount of taxes.
36
+ # @return [Mindee::AmountField]
37
+ attr_reader :total_tax
38
+ # The total amount of tip and gratuity.
39
+ # @return [Mindee::AmountField]
40
+ attr_reader :tip
41
+ # List of tax lines information including: Amount, tax rate, tax base amount and tax code.
42
+ # @return [Array<Mindee::TaxField>]
43
+ attr_reader :taxes
44
+ # The name of the supplier or merchant.
45
+ # @return [Mindee::TextField]
46
+ attr_reader :supplier_name
47
+ # List of supplier company registrations or identifiers.
48
+ # @return [Array<Mindee::CompanyRegistration>]
49
+ attr_reader :supplier_company_registrations
50
+ # The address of the supplier or merchant returned as a single string.
51
+ # @return [Mindee::TextField]
52
+ attr_reader :supplier_address
53
+ # The Phone number of the supplier or merchant returned as a single string.
54
+ # @return [Mindee::TextField]
55
+ attr_reader :supplier_phone_number
56
+ # Full extraction of lines, including: description, quantity, unit price and total.
57
+ # @return [Array<Mindee::ReceiptV5LineItem>]
58
+ attr_reader :line_items
59
+
60
+ # @param prediction [Hash]
61
+ # @param page_id [Integer, nil]
62
+ def initialize(prediction, page_id)
63
+ super
64
+ @locale = Locale.new(prediction['locale'], page_id)
65
+ @category = TextField.new(prediction['category'], page_id)
66
+ @subcategory = TextField.new(prediction['subcategory'], page_id)
67
+ @document_type = TextField.new(prediction['document_type'], page_id)
68
+ @date = DateField.new(prediction['date'], page_id)
69
+ @time = TextField.new(prediction['time'], page_id)
70
+ @total_amount = AmountField.new(prediction['total_amount'], page_id)
71
+ @total_net = AmountField.new(prediction['total_net'], page_id)
72
+ @total_tax = AmountField.new(prediction['total_tax'], page_id)
73
+ @tip = AmountField.new(prediction['tip'], page_id)
74
+ @taxes = []
75
+ prediction['taxes'].each do |item|
76
+ @taxes.push(TaxField.new(item, page_id))
77
+ end
78
+ @supplier_name = TextField.new(prediction['supplier_name'], page_id)
79
+ @supplier_company_registrations = []
80
+ prediction['supplier_company_registrations'].each do |item|
81
+ @supplier_company_registrations.push(CompanyRegistration.new(item, page_id))
82
+ end
83
+ @supplier_address = TextField.new(prediction['supplier_address'], page_id)
84
+ @supplier_phone_number = TextField.new(prediction['supplier_phone_number'], page_id)
85
+ @line_items = []
86
+ prediction['line_items'].each do |item|
87
+ @line_items.push(ReceiptV5LineItem.new(item, page_id))
88
+ end
89
+ end
90
+
91
+ # @return String
92
+ def to_s
93
+ taxes = @taxes.join("\n #{' ' * 7}")
94
+ supplier_company_registrations = @supplier_company_registrations.join("\n #{' ' * 32}")
95
+ line_items = line_items_to_s
96
+ out_str = String.new
97
+ out_str << "\n:Expense Locale: #{@locale}".rstrip
98
+ out_str << "\n:Expense Category: #{@category}".rstrip
99
+ out_str << "\n:Expense Sub Category: #{@subcategory}".rstrip
100
+ out_str << "\n:Document Type: #{@document_type}".rstrip
101
+ out_str << "\n:Purchase Date: #{@date}".rstrip
102
+ out_str << "\n:Purchase Time: #{@time}".rstrip
103
+ out_str << "\n:Total Amount: #{@total_amount}".rstrip
104
+ out_str << "\n:Total Excluding Taxes: #{@total_net}".rstrip
105
+ out_str << "\n:Total Tax: #{@total_tax}".rstrip
106
+ out_str << "\n:Tip and Gratuity: #{@tip}".rstrip
107
+ out_str << "\n:Taxes: #{taxes}".rstrip
108
+ out_str << "\n:Supplier Name: #{@supplier_name}".rstrip
109
+ out_str << "\n:Supplier Company Registrations: #{supplier_company_registrations}".rstrip
110
+ out_str << "\n:Supplier Address: #{@supplier_address}".rstrip
111
+ out_str << "\n:Supplier Phone Number: #{@supplier_phone_number}".rstrip
112
+ out_str << "\n:Line Items:"
113
+ out_str << line_items
114
+ out_str[1..].to_s
115
+ end
116
+
117
+ private
118
+
119
+ def line_items_separator(char)
120
+ " +#{char * 38}+#{char * 10}+#{char * 14}+#{char * 12}+"
121
+ end
122
+
123
+ def line_items_to_s
124
+ return '' if @line_items.empty?
125
+
126
+ line_items = @line_items.map(&:to_s).join("\n#{line_items_separator('-')}\n ")
127
+ out_str = String.new
128
+ out_str << "\n#{line_items_separator('-')}"
129
+ out_str << "\n | Description #{' ' * 25}| Quantity | Total Amount | Unit Price |"
130
+ out_str << "\n#{line_items_separator('=')}"
131
+ out_str << "\n #{line_items}"
132
+ out_str << "\n#{line_items_separator('-')}"
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mindee
4
+ # Full extraction of lines, including: description, quantity, unit price and total.
5
+ class ReceiptV5LineItem
6
+ # The item description.
7
+ # @return [String]
8
+ attr_reader :description
9
+ # The item quantity.
10
+ # @return [Float]
11
+ attr_reader :quantity
12
+ # The item total amount.
13
+ # @return [Float]
14
+ attr_reader :total_amount
15
+ # The item unit price.
16
+ # @return [Float]
17
+ attr_reader :unit_price
18
+
19
+ def initialize(prediction, page_id)
20
+ @description = prediction['description']
21
+ @quantity = prediction['quantity']
22
+ @total_amount = prediction['total_amount']
23
+ @unit_price = prediction['unit_price']
24
+ @page_id = page_id
25
+ end
26
+
27
+ # @return String
28
+ def to_s
29
+ out_str = String.new
30
+ out_str << format('| %- 37s', @description)
31
+ out_str << format('| %- 9s', Field.float_to_string(@quantity))
32
+ out_str << format('| %- 13s', Field.float_to_string(@total_amount))
33
+ out_str << format('| %- 11s', Field.float_to_string(@unit_price))
34
+ out_str << '|'
35
+ end
36
+ end
37
+ end
@@ -29,8 +29,8 @@ module Mindee
29
29
  def to_s
30
30
  out_str = String.new
31
31
  out_str << "\n:Owner: #{@owner}".rstrip
32
- out_str << "\n:Serial number: #{@serial_number}".rstrip
33
- out_str << "\n:Size and type: #{@size_type}".rstrip
32
+ out_str << "\n:Serial Number: #{@serial_number}".rstrip
33
+ out_str << "\n:Size and Type: #{@size_type}".rstrip
34
34
  out_str[1..].to_s
35
35
  end
36
36
  end
@@ -6,6 +6,7 @@ require_relative 'prediction/financial_document/financial_document_v1'
6
6
  require_relative 'prediction/invoice/invoice_v4'
7
7
  require_relative 'prediction/passport/passport_v1'
8
8
  require_relative 'prediction/receipt/receipt_v4'
9
+ require_relative 'prediction/receipt/receipt_v5'
9
10
  require_relative 'prediction/eu/license_plate/license_plate_v1'
10
11
  require_relative 'prediction/shipping_container/shipping_container_v1'
11
12
  require_relative 'prediction/us/bank_check/bank_check_v1'
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Mindee
4
4
  module Mindee
5
- VERSION = '2.1.1'
5
+ VERSION = '2.2.1'
6
6
 
7
7
  def self.find_platform
8
8
  host = RbConfig::CONFIG['host_os']
data/mindee.gemspec CHANGED
@@ -30,10 +30,10 @@ Gem::Specification.new do |spec|
30
30
  spec.required_ruby_version = Gem::Requirement.new('>= 2.6')
31
31
 
32
32
  spec.add_runtime_dependency 'marcel', '~> 1.0.2'
33
- spec.add_runtime_dependency 'origamindee', '~> 3.1'
33
+ spec.add_runtime_dependency 'origamindee', '~> 3.1.0'
34
34
 
35
- spec.add_development_dependency 'rake', '~> 12.3'
36
- spec.add_development_dependency 'rspec', '~> 3.11'
37
- spec.add_development_dependency 'rubocop', '~> 1.41'
38
- spec.add_development_dependency 'yard', '~> 0.9'
35
+ spec.add_development_dependency 'rake', '~> 12.3.3'
36
+ spec.add_development_dependency 'rspec', '~> 3.12.0'
37
+ spec.add_development_dependency 'rubocop', '~> 1.49.0'
38
+ spec.add_development_dependency 'yard', '~> 0.9.34'
39
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mindee
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mindee, SA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-21 00:00:00.000000000 Z
11
+ date: 2023-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: marcel
@@ -30,70 +30,70 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.1'
33
+ version: 3.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.1'
40
+ version: 3.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '12.3'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '12.3'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.11'
61
+ version: 3.12.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.11'
68
+ version: 3.12.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.41'
75
+ version: 1.49.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.41'
82
+ version: 1.49.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: yard
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.9'
89
+ version: 0.9.34
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.9'
96
+ version: 0.9.34
97
97
  description: Quickly and easily connect to Mindee's API services using Ruby.
98
98
  email:
99
99
  - devrel@mindee.co
@@ -123,6 +123,7 @@ files:
123
123
  - docs/code_samples/custom_v1.txt
124
124
  - docs/code_samples/default.txt
125
125
  - docs/code_samples/expense_receipts_v4.txt
126
+ - docs/code_samples/expense_receipts_v5.txt
126
127
  - docs/code_samples/financial_document_v1.txt
127
128
  - docs/code_samples/idcard_fr_v1.txt
128
129
  - docs/code_samples/invoices_v4.txt
@@ -164,15 +165,17 @@ files:
164
165
  - lib/mindee/parsing/prediction/custom/fields.rb
165
166
  - lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb
166
167
  - lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb
167
- - lib/mindee/parsing/prediction/financial_document/invoice_line_item.rb
168
+ - lib/mindee/parsing/prediction/financial_document/financial_document_v1_line_item.rb
168
169
  - lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb
169
170
  - lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb
170
171
  - lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb
171
- - lib/mindee/parsing/prediction/invoice/invoice_line_item.rb
172
172
  - lib/mindee/parsing/prediction/invoice/invoice_v4.rb
173
+ - lib/mindee/parsing/prediction/invoice/invoice_v4_line_item.rb
173
174
  - lib/mindee/parsing/prediction/passport/passport_v1.rb
174
175
  - lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb
175
176
  - lib/mindee/parsing/prediction/receipt/receipt_v4.rb
177
+ - lib/mindee/parsing/prediction/receipt/receipt_v5.rb
178
+ - lib/mindee/parsing/prediction/receipt/receipt_v5_line_item.rb
176
179
  - lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb
177
180
  - lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb
178
181
  - lib/mindee/version.rb