mindee 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +3 -0
  4. data/.yardopts +0 -1
  5. data/CHANGELOG.md +16 -0
  6. data/README.md +13 -9
  7. data/Rakefile +9 -1
  8. data/bin/mindee.rb +1 -1
  9. data/docs/code_samples/bank_account_details_v1.txt +14 -0
  10. data/docs/code_samples/bank_check_v1.txt +14 -0
  11. data/docs/code_samples/carte_vitale_v1.txt +14 -0
  12. data/docs/code_samples/custom_v1.txt +24 -0
  13. data/docs/code_samples/default.txt +16 -0
  14. data/docs/code_samples/expense_receipts_v4.txt +14 -0
  15. data/docs/code_samples/expense_receipts_v5.txt +14 -0
  16. data/docs/code_samples/financial_document_v1.txt +14 -0
  17. data/docs/code_samples/idcard_fr_v1.txt +14 -0
  18. data/docs/code_samples/invoices_v4.txt +14 -0
  19. data/docs/code_samples/license_plates_v1.txt +14 -0
  20. data/docs/code_samples/passport_v1.txt +14 -0
  21. data/docs/code_samples/proof_of_address_v1.txt +14 -0
  22. data/docs/code_samples/shipping_containers_v1.txt +14 -0
  23. data/docs/ruby-getting-started.md +1 -1
  24. data/docs/ruby-receipt-ocr.md +30 -17
  25. data/lib/mindee/client.rb +3 -0
  26. data/lib/mindee/parsing/prediction/common_fields/locale.rb +1 -1
  27. data/lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb +4 -4
  28. data/lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb +22 -30
  29. data/lib/mindee/parsing/prediction/{invoice/invoice_line_item.rb → financial_document/financial_document_v1_line_item.rb} +9 -9
  30. data/lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb +6 -6
  31. data/lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb +8 -8
  32. data/lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb +35 -34
  33. data/lib/mindee/parsing/prediction/invoice/invoice_v4.rb +14 -18
  34. data/lib/mindee/parsing/prediction/{financial_document/invoice_line_item.rb → invoice/invoice_v4_line_item.rb} +9 -9
  35. data/lib/mindee/parsing/prediction/passport/passport_v1.rb +0 -63
  36. data/lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb +36 -38
  37. data/lib/mindee/parsing/prediction/receipt/receipt_v5.rb +136 -0
  38. data/lib/mindee/parsing/prediction/receipt/receipt_v5_line_item.rb +37 -0
  39. data/lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb +2 -2
  40. data/lib/mindee/parsing/prediction.rb +1 -0
  41. data/lib/mindee/version.rb +1 -1
  42. data/mindee.gemspec +5 -6
  43. metadata +32 -30
@@ -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.0'
5
+ VERSION = '2.2.0'
6
6
 
7
7
  def self.find_platform
8
8
  host = RbConfig::CONFIG['host_os']
data/mindee.gemspec CHANGED
@@ -30,11 +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 'mrz', '~> 0.2'
34
- spec.add_runtime_dependency 'origamindee', '~> 3.1'
33
+ spec.add_runtime_dependency 'origamindee', '~> 3.1.0'
35
34
 
36
- spec.add_development_dependency 'rake', '~> 12.3.1'
37
- spec.add_development_dependency 'rspec', '~> 3.11'
38
- spec.add_development_dependency 'rubocop', '~> 1.41'
39
- spec.add_development_dependency 'yard', '0.9.28'
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'
40
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.0
4
+ version: 2.2.0
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-01-30 00:00:00.000000000 Z
11
+ date: 2023-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: marcel
@@ -24,90 +24,76 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.2
27
- - !ruby/object:Gem::Dependency
28
- name: mrz
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.2'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.2'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: origamindee
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '3.1'
33
+ version: 3.1.0
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '3.1'
40
+ version: 3.1.0
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: 12.3.1
47
+ version: 12.3.3
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: 12.3.1
54
+ version: 12.3.3
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '3.11'
61
+ version: 3.12.0
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '3.11'
68
+ version: 3.12.0
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rubocop
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '1.41'
75
+ version: 1.49.0
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '1.41'
82
+ version: 1.49.0
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: yard
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - '='
87
+ - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: 0.9.28
89
+ version: 0.9.34
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - '='
94
+ - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: 0.9.28
96
+ version: 0.9.34
111
97
  description: Quickly and easily connect to Mindee's API services using Ruby.
112
98
  email:
113
99
  - devrel@mindee.co
@@ -131,6 +117,20 @@ files:
131
117
  - Rakefile
132
118
  - bin/console
133
119
  - bin/mindee.rb
120
+ - docs/code_samples/bank_account_details_v1.txt
121
+ - docs/code_samples/bank_check_v1.txt
122
+ - docs/code_samples/carte_vitale_v1.txt
123
+ - docs/code_samples/custom_v1.txt
124
+ - docs/code_samples/default.txt
125
+ - docs/code_samples/expense_receipts_v4.txt
126
+ - docs/code_samples/expense_receipts_v5.txt
127
+ - docs/code_samples/financial_document_v1.txt
128
+ - docs/code_samples/idcard_fr_v1.txt
129
+ - docs/code_samples/invoices_v4.txt
130
+ - docs/code_samples/license_plates_v1.txt
131
+ - docs/code_samples/passport_v1.txt
132
+ - docs/code_samples/proof_of_address_v1.txt
133
+ - docs/code_samples/shipping_containers_v1.txt
134
134
  - docs/ruby-api-builder.md
135
135
  - docs/ruby-getting-started.md
136
136
  - docs/ruby-invoice-ocr.md
@@ -165,15 +165,17 @@ files:
165
165
  - lib/mindee/parsing/prediction/custom/fields.rb
166
166
  - lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb
167
167
  - lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb
168
- - lib/mindee/parsing/prediction/financial_document/invoice_line_item.rb
168
+ - lib/mindee/parsing/prediction/financial_document/financial_document_v1_line_item.rb
169
169
  - lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb
170
170
  - lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb
171
171
  - lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb
172
- - lib/mindee/parsing/prediction/invoice/invoice_line_item.rb
173
172
  - lib/mindee/parsing/prediction/invoice/invoice_v4.rb
173
+ - lib/mindee/parsing/prediction/invoice/invoice_v4_line_item.rb
174
174
  - lib/mindee/parsing/prediction/passport/passport_v1.rb
175
175
  - lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb
176
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
177
179
  - lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb
178
180
  - lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb
179
181
  - lib/mindee/version.rb