mindee 1.2.0 → 2.1.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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +2 -2
  4. data/.yardopts +4 -0
  5. data/CHANGELOG.md +26 -0
  6. data/README.md +46 -23
  7. data/Rakefile +6 -1
  8. data/bin/mindee.rb +78 -61
  9. data/docs/ruby-api-builder.md +124 -0
  10. data/docs/ruby-getting-started.md +265 -0
  11. data/docs/ruby-invoice-ocr.md +260 -0
  12. data/docs/ruby-passport-ocr.md +156 -0
  13. data/docs/ruby-receipt-ocr.md +170 -0
  14. data/lib/mindee/client.rb +132 -93
  15. data/lib/mindee/document_config.rb +29 -169
  16. data/lib/mindee/geometry.rb +105 -8
  17. data/lib/mindee/http/endpoint.rb +80 -0
  18. data/lib/mindee/input/pdf_processing.rb +106 -0
  19. data/lib/mindee/input/sources.rb +97 -0
  20. data/lib/mindee/input.rb +3 -0
  21. data/lib/mindee/parsing/document.rb +31 -0
  22. data/lib/mindee/parsing/error.rb +22 -0
  23. data/lib/mindee/parsing/inference.rb +53 -0
  24. data/lib/mindee/parsing/page.rb +46 -0
  25. data/lib/mindee/parsing/prediction/base.rb +30 -0
  26. data/lib/mindee/{fields → parsing/prediction/common_fields}/amount.rb +5 -1
  27. data/lib/mindee/{fields → parsing/prediction/common_fields}/base.rb +16 -5
  28. data/lib/mindee/{fields → parsing/prediction/common_fields}/company_registration.rb +0 -0
  29. data/lib/mindee/{fields/datefield.rb → parsing/prediction/common_fields/date.rb} +0 -0
  30. data/lib/mindee/{fields → parsing/prediction/common_fields}/locale.rb +0 -0
  31. data/lib/mindee/{fields → parsing/prediction/common_fields}/payment_details.rb +0 -0
  32. data/lib/mindee/parsing/prediction/common_fields/position.rb +39 -0
  33. data/lib/mindee/{fields → parsing/prediction/common_fields}/tax.rb +7 -2
  34. data/lib/mindee/parsing/prediction/common_fields/text.rb +12 -0
  35. data/lib/mindee/parsing/prediction/common_fields.rb +11 -0
  36. data/lib/mindee/parsing/prediction/custom/custom_v1.rb +58 -0
  37. data/lib/mindee/{fields/custom_docs.rb → parsing/prediction/custom/fields.rb} +5 -5
  38. data/lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb +34 -0
  39. data/lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb +245 -0
  40. data/lib/mindee/parsing/prediction/financial_document/invoice_line_item.rb +58 -0
  41. data/lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb +40 -0
  42. data/lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb +49 -0
  43. data/lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb +84 -0
  44. data/lib/mindee/parsing/prediction/invoice/invoice_line_item.rb +58 -0
  45. data/lib/mindee/parsing/prediction/invoice/invoice_v4.rb +216 -0
  46. data/lib/mindee/parsing/prediction/passport/passport_v1.rb +184 -0
  47. data/lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb +82 -0
  48. data/lib/mindee/parsing/prediction/receipt/receipt_v4.rb +87 -0
  49. data/lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb +38 -0
  50. data/lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb +70 -0
  51. data/lib/mindee/parsing/prediction.rb +14 -0
  52. data/lib/mindee/parsing.rb +4 -0
  53. data/lib/mindee/version.rb +1 -1
  54. data/mindee.gemspec +2 -1
  55. metadata +60 -24
  56. data/lib/mindee/documents/base.rb +0 -35
  57. data/lib/mindee/documents/custom.rb +0 -65
  58. data/lib/mindee/documents/financial_doc.rb +0 -135
  59. data/lib/mindee/documents/invoice.rb +0 -162
  60. data/lib/mindee/documents/passport.rb +0 -163
  61. data/lib/mindee/documents/receipt.rb +0 -109
  62. data/lib/mindee/documents.rb +0 -7
  63. data/lib/mindee/endpoint.rb +0 -105
  64. data/lib/mindee/fields/orientation.rb +0 -26
  65. data/lib/mindee/fields.rb +0 -11
  66. data/lib/mindee/inputs.rb +0 -153
  67. data/lib/mindee/response.rb +0 -27
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mrz'
4
+
5
+ require_relative '../common_fields'
6
+ require_relative '../base'
7
+
8
+ module Mindee
9
+ module Prediction
10
+ # Passport document.
11
+ class ProofOfAddressV1 < Prediction
12
+ # ISO 639-1 code, works best with ca, de, en, es, fr, it, nl and pt.
13
+ # @return [Mindee::Locale]
14
+ attr_reader :locale
15
+ # ISO date yyyy-mm-dd. Works both for European and US dates.
16
+ # @return [Mindee::DateField]
17
+ attr_reader :date
18
+ # All extracted ISO date yyyy-mm-dd. Works both for European and US dates.
19
+ # @return [Array<Mindee::DateField>]
20
+ attr_reader :dates
21
+ # Address of the document's issuer.
22
+ # @return [Mindee::TextField]
23
+ attr_reader :issuer_address
24
+ # Generic: VAT NUMBER, TAX ID, COMPANY REGISTRATION NUMBER or country specific.
25
+ # @return [Array<Mindee::CompanyRegistration>]
26
+ attr_reader :issuer_company_registration
27
+ # Name of the person or company issuing the document.
28
+ # @return [Mindee::TextField]
29
+ attr_reader :issuer_name
30
+ # Address of the recipient.
31
+ # @return [Mindee::TextField]
32
+ attr_reader :recipient_address
33
+ # Generic: VAT NUMBER, TAX ID, COMPANY REGISTRATION NUMBER or country specific.
34
+ # @return [Array<Mindee::CompanyRegistration>]
35
+ attr_reader :recipient_company_registration
36
+ # Name of the document's recipient.
37
+ # @return [Mindee::TextField]
38
+ attr_reader :recipient_name
39
+
40
+ # @param prediction [Hash]
41
+ # @param page_id [Integer, nil]
42
+ def initialize(prediction, page_id)
43
+ super
44
+ @locale = Locale.new(prediction['locale'])
45
+ @date = DateField.new(prediction['date'], page_id)
46
+ @dates = []
47
+ prediction['dates'].each do |item|
48
+ @dates.push(DateField.new(item, page_id))
49
+ end
50
+ @issuer_name = TextField.new(prediction['issuer_name'], page_id)
51
+ @issuer_address = TextField.new(prediction['issuer_address'], page_id)
52
+ @issuer_company_registration = []
53
+ prediction['issuer_company_registration'].each do |item|
54
+ @issuer_company_registration.push(CompanyRegistration.new(item, page_id))
55
+ end
56
+ @recipient_name = TextField.new(prediction['recipient_name'], page_id)
57
+ @recipient_address = TextField.new(prediction['recipient_address'], page_id)
58
+ @recipient_company_registration = []
59
+ prediction['recipient_company_registration'].each do |item|
60
+ @recipient_company_registration.push(CompanyRegistration.new(item, page_id))
61
+ end
62
+ end
63
+
64
+ def to_s
65
+ recipient_company_registrations = @recipient_company_registration.join(' ')
66
+ issuer_company_registrations = @issuer_company_registration.join(' ')
67
+ dates = @dates.join("\n ")
68
+ out_str = String.new
69
+ out_str << "\n:Locale: #{@locale}".rstrip
70
+ out_str << "\n:Issuer name: #{@issuer_name}".rstrip
71
+ out_str << "\n:Issuer Address: #{@issuer_address}".rstrip
72
+ out_str << "\n:Issuer Company Registrations: #{issuer_company_registrations}".rstrip
73
+ out_str << "\n:Recipient name: #{@recipient_name}".rstrip
74
+ out_str << "\n:Recipient Address: #{@recipient_address}".rstrip
75
+ out_str << "\n:Recipient Company Registrations: #{recipient_company_registrations}".rstrip
76
+ out_str << "\n:Issuance date: #{@date}".rstrip
77
+ out_str << "\n:Dates: #{dates}".rstrip
78
+ out_str[1..].to_s
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../common_fields'
4
+ require_relative '../base'
5
+
6
+ module Mindee
7
+ module Prediction
8
+ # Receipt document.
9
+ class ReceiptV4 < Prediction
10
+ # Where the purchase was made, the language, and the currency.
11
+ # @return [Mindee::Locale]
12
+ attr_reader :locale
13
+ # Total including taxes
14
+ # @return [Mindee::AmountField]
15
+ attr_reader :total_amount
16
+ # Total amount of the purchase excluding taxes.
17
+ # @return [Mindee::AmountField]
18
+ attr_reader :total_net
19
+ # Total tax amount of the purchase.
20
+ # @return [Mindee::AmountField]
21
+ attr_reader :total_tax
22
+ # The purchase date.
23
+ # @return [Mindee::DateField]
24
+ attr_reader :date
25
+ # The name of the supplier or merchant, as seen on the receipt.
26
+ # @return [Mindee::TextField]
27
+ attr_reader :supplier
28
+ # List of taxes detected on the receipt.
29
+ # @return [Array<Mindee::TaxField>]
30
+ attr_reader :taxes
31
+ # Time as seen on the receipt in HH:MM format.
32
+ # @return [Mindee::TextField]
33
+ attr_reader :time
34
+ # The receipt category among predefined classes.
35
+ # @return [Mindee::TextField]
36
+ attr_reader :category
37
+ # The receipt sub-category among predefined classes.
38
+ # @return [Mindee::TextField]
39
+ attr_reader :subcategory
40
+ # Whether the document is an expense receipt or a credit card receipt.
41
+ # @return [Mindee::TextField]
42
+ attr_reader :document_type
43
+ # Total amount of tip and gratuity. Both typed and handwritten characters are supported.
44
+ # @return [Mindee::AmountField]
45
+ attr_reader :tip
46
+
47
+ # @param prediction [Hash]
48
+ # @param page_id [Integer, nil]
49
+ def initialize(prediction, page_id)
50
+ super
51
+ @locale = Locale.new(prediction['locale'])
52
+ @total_amount = AmountField.new(prediction['total_amount'], page_id)
53
+ @total_net = AmountField.new(prediction['total_net'], page_id)
54
+ @total_tax = AmountField.new(prediction['total_tax'], page_id)
55
+ @tip = AmountField.new(prediction['tip'], page_id)
56
+ @date = DateField.new(prediction['date'], page_id)
57
+ @category = TextField.new(prediction['category'], page_id)
58
+ @subcategory = TextField.new(prediction['subcategory'], page_id)
59
+ @document_type = TextField.new(prediction['document_type'], page_id)
60
+ @supplier = TextField.new(prediction['supplier'], page_id)
61
+ @time = TextField.new(prediction['time'], page_id)
62
+ @taxes = []
63
+ prediction['taxes'].each do |item|
64
+ @taxes.push(TaxField.new(item, page_id))
65
+ end
66
+ end
67
+
68
+ def to_s
69
+ taxes = @taxes.join("\n ")
70
+ out_str = String.new
71
+ out_str << "\n:Locale: #{@locale}".rstrip
72
+ out_str << "\n:Date: #{@date}".rstrip
73
+ out_str << "\n:Category: #{@category}".rstrip
74
+ out_str << "\n:Subcategory: #{@subcategory}".rstrip
75
+ out_str << "\n:Document type: #{@document_type}".rstrip
76
+ out_str << "\n:Time: #{@time}".rstrip
77
+ out_str << "\n:Supplier name: #{@supplier}".rstrip
78
+ out_str << "\n:Taxes: #{taxes}".rstrip
79
+ out_str << "\n:Total net: #{@total_net}".rstrip
80
+ out_str << "\n:Total taxes: #{@total_tax}".rstrip
81
+ out_str << "\n:Tip: #{@tip}".rstrip
82
+ out_str << "\n:Total amount: #{@total_amount}".rstrip
83
+ out_str[1..].to_s
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../common_fields'
4
+ require_relative '../base'
5
+
6
+ module Mindee
7
+ module Prediction
8
+ # License plate prediction.
9
+ class ShippingContainerV1 < Prediction
10
+ # ISO 6346 code for container owner prefix + equipment identifier.
11
+ # @return [Array<Mindee::TextField>]
12
+ attr_reader :owner
13
+ # ISO 6346 code for container serial number (6+1 digits).
14
+ # @return [Array<Mindee::TextField>]
15
+ attr_reader :serial_number
16
+ # ISO 6346 code for container length, height and type.
17
+ # @return [Array<Mindee::TextField>]
18
+ attr_reader :size_type
19
+
20
+ # @param prediction [Hash]
21
+ # @param page_id [Integer, nil]
22
+ def initialize(prediction, page_id)
23
+ super
24
+ @owner = TextField.new(prediction['owner'], page_id)
25
+ @serial_number = TextField.new(prediction['serial_number'], page_id)
26
+ @size_type = TextField.new(prediction['size_type'], page_id)
27
+ end
28
+
29
+ def to_s
30
+ out_str = String.new
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
34
+ out_str[1..].to_s
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../common_fields'
4
+ require_relative '../../base'
5
+
6
+ module Mindee
7
+ module Prediction
8
+ module US
9
+ # License plate prediction.
10
+ class BankCheckV1 < Prediction
11
+ # Payer's bank account number.
12
+ # @return [Array<Mindee::TextField>]
13
+ attr_reader :account_number
14
+ # Amount to be paid.
15
+ # @return [Array<Mindee::AmountField>]
16
+ attr_reader :amount
17
+ # The check number.
18
+ # @return [Mindee::TextField]
19
+ attr_reader :check_number
20
+ # Payer's bank account routing number.
21
+ # @return [Mindee::TextField]
22
+ attr_reader :routing_number
23
+ # Date the check was issued.
24
+ # @return [Mindee::DateField]
25
+ attr_reader :date
26
+ # The positions of the signatures on the image.
27
+ # @return [Array<Mindee::PositionField>]
28
+ attr_reader :signatures_positions
29
+ # Check's position in the image.
30
+ # @return [Mindee::PositionField]
31
+ attr_reader :check_position
32
+ # List of payees (full name or company name).
33
+ # @return [Array<Mindee::TextField>]
34
+ attr_reader :payees
35
+
36
+ # @param prediction [Hash]
37
+ # @param page_id [Integer, nil]
38
+ def initialize(prediction, page_id)
39
+ super
40
+ @account_number = TextField.new(prediction['account_number'], page_id)
41
+ @amount = AmountField.new(prediction['amount'], page_id)
42
+ @check_number = TextField.new(prediction['check_number'], page_id)
43
+ @date = DateField.new(prediction['date'], page_id)
44
+ @check_position = PositionField.new(prediction['check_position'], page_id)
45
+ @routing_number = TextField.new(prediction['routing_number'], page_id)
46
+ @signatures_positions = []
47
+ prediction['signatures_positions'].each do |item|
48
+ @signatures_positions.push(PositionField.new(item, page_id))
49
+ end
50
+ @payees = []
51
+ prediction['payees'].each do |item|
52
+ @payees.push(TextField.new(item, page_id))
53
+ end
54
+ end
55
+
56
+ def to_s
57
+ payees = @payees.map(&:value).join(', ')
58
+ out_str = String.new
59
+ out_str << "\n:Routing number: #{@routing_number}".rstrip
60
+ out_str << "\n:Account number: #{@account_number}".rstrip
61
+ out_str << "\n:Check number: #{@check_number}".rstrip
62
+ out_str << "\n:Date: #{@date}".rstrip
63
+ out_str << "\n:Amount: #{@amount}".rstrip
64
+ out_str << "\n:Payees: #{payees}".rstrip
65
+ out_str[1..].to_s
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'prediction/custom/custom_v1'
4
+ require_relative 'prediction/proof_of_address/proof_of_address_v1'
5
+ require_relative 'prediction/financial_document/financial_document_v1'
6
+ require_relative 'prediction/invoice/invoice_v4'
7
+ require_relative 'prediction/passport/passport_v1'
8
+ require_relative 'prediction/receipt/receipt_v4'
9
+ require_relative 'prediction/eu/license_plate/license_plate_v1'
10
+ require_relative 'prediction/shipping_container/shipping_container_v1'
11
+ require_relative 'prediction/us/bank_check/bank_check_v1'
12
+ require_relative 'prediction/fr/bank_account_details/bank_account_details_v1'
13
+ require_relative 'prediction/fr/carte_vitale/carte_vitale_v1'
14
+ require_relative 'prediction/fr/id_card/id_card_v1'
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'parsing/prediction'
4
+ require_relative 'parsing/document'
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Mindee
4
4
  module Mindee
5
- VERSION = '1.2.0'
5
+ VERSION = '2.1.0'
6
6
 
7
7
  def self.find_platform
8
8
  host = RbConfig::CONFIG['host_os']
data/mindee.gemspec CHANGED
@@ -31,9 +31,10 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_runtime_dependency 'marcel', '~> 1.0.2'
33
33
  spec.add_runtime_dependency 'mrz', '~> 0.2'
34
- spec.add_runtime_dependency 'origamindee', '~> 3.0'
34
+ spec.add_runtime_dependency 'origamindee', '~> 3.1'
35
35
 
36
36
  spec.add_development_dependency 'rake', '~> 12.3.1'
37
37
  spec.add_development_dependency 'rspec', '~> 3.11'
38
38
  spec.add_development_dependency 'rubocop', '~> 1.41'
39
+ spec.add_development_dependency 'yard', '0.9.28'
39
40
  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: 1.2.0
4
+ version: 2.1.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: 2022-12-26 00:00:00.000000000 Z
11
+ date: 2023-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: marcel
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.1'
48
48
  type: :runtime
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: '3.0'
54
+ version: '3.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.41'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.28
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.28
97
111
  description: Quickly and easily connect to Mindee's API services using Ruby.
98
112
  email:
99
113
  - devrel@mindee.co
@@ -107,6 +121,7 @@ files:
107
121
  - ".gitignore"
108
122
  - ".gitmodules"
109
123
  - ".rubocop.yml"
124
+ - ".yardopts"
110
125
  - CHANGELOG.md
111
126
  - CODE_OF_CONDUCT.md
112
127
  - CONTRIBUTING.md
@@ -116,30 +131,51 @@ files:
116
131
  - Rakefile
117
132
  - bin/console
118
133
  - bin/mindee.rb
134
+ - docs/ruby-api-builder.md
135
+ - docs/ruby-getting-started.md
136
+ - docs/ruby-invoice-ocr.md
137
+ - docs/ruby-passport-ocr.md
138
+ - docs/ruby-receipt-ocr.md
119
139
  - lib/mindee.rb
120
140
  - lib/mindee/client.rb
121
141
  - lib/mindee/document_config.rb
122
- - lib/mindee/documents.rb
123
- - lib/mindee/documents/base.rb
124
- - lib/mindee/documents/custom.rb
125
- - lib/mindee/documents/financial_doc.rb
126
- - lib/mindee/documents/invoice.rb
127
- - lib/mindee/documents/passport.rb
128
- - lib/mindee/documents/receipt.rb
129
- - lib/mindee/endpoint.rb
130
- - lib/mindee/fields.rb
131
- - lib/mindee/fields/amount.rb
132
- - lib/mindee/fields/base.rb
133
- - lib/mindee/fields/company_registration.rb
134
- - lib/mindee/fields/custom_docs.rb
135
- - lib/mindee/fields/datefield.rb
136
- - lib/mindee/fields/locale.rb
137
- - lib/mindee/fields/orientation.rb
138
- - lib/mindee/fields/payment_details.rb
139
- - lib/mindee/fields/tax.rb
140
142
  - lib/mindee/geometry.rb
141
- - lib/mindee/inputs.rb
142
- - lib/mindee/response.rb
143
+ - lib/mindee/http/endpoint.rb
144
+ - lib/mindee/input.rb
145
+ - lib/mindee/input/pdf_processing.rb
146
+ - lib/mindee/input/sources.rb
147
+ - lib/mindee/parsing.rb
148
+ - lib/mindee/parsing/document.rb
149
+ - lib/mindee/parsing/error.rb
150
+ - lib/mindee/parsing/inference.rb
151
+ - lib/mindee/parsing/page.rb
152
+ - lib/mindee/parsing/prediction.rb
153
+ - lib/mindee/parsing/prediction/base.rb
154
+ - lib/mindee/parsing/prediction/common_fields.rb
155
+ - lib/mindee/parsing/prediction/common_fields/amount.rb
156
+ - lib/mindee/parsing/prediction/common_fields/base.rb
157
+ - lib/mindee/parsing/prediction/common_fields/company_registration.rb
158
+ - lib/mindee/parsing/prediction/common_fields/date.rb
159
+ - lib/mindee/parsing/prediction/common_fields/locale.rb
160
+ - lib/mindee/parsing/prediction/common_fields/payment_details.rb
161
+ - lib/mindee/parsing/prediction/common_fields/position.rb
162
+ - lib/mindee/parsing/prediction/common_fields/tax.rb
163
+ - lib/mindee/parsing/prediction/common_fields/text.rb
164
+ - lib/mindee/parsing/prediction/custom/custom_v1.rb
165
+ - lib/mindee/parsing/prediction/custom/fields.rb
166
+ - lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb
167
+ - lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb
168
+ - lib/mindee/parsing/prediction/financial_document/invoice_line_item.rb
169
+ - lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb
170
+ - lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb
171
+ - lib/mindee/parsing/prediction/fr/id_card/id_card_v1.rb
172
+ - lib/mindee/parsing/prediction/invoice/invoice_line_item.rb
173
+ - lib/mindee/parsing/prediction/invoice/invoice_v4.rb
174
+ - lib/mindee/parsing/prediction/passport/passport_v1.rb
175
+ - lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb
176
+ - lib/mindee/parsing/prediction/receipt/receipt_v4.rb
177
+ - lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb
178
+ - lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb
143
179
  - lib/mindee/version.rb
144
180
  - mindee.gemspec
145
181
  homepage: https://github.com/mindee/mindee-api-ruby
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mindee
4
- # Base document object.
5
- class Document
6
- # document type
7
- # @return [String]
8
- attr_reader :document_type
9
- # Validation checks for the document
10
- # @return [Hash<Symbol, Boolean>]
11
- attr_reader :checklist
12
- # Original filename of the document
13
- # @return [String, nil]
14
- attr_reader :filename
15
- # Detected MIME type of the document
16
- # @return [String, nil]
17
- attr_reader :file_mimetype
18
-
19
- # @param input_file [Mindee::InputDocument, nil]
20
- # @param document_type [String]
21
- def initialize(document_type, input_file: nil)
22
- @document_type = document_type
23
- unless input_file.nil?
24
- @filename = input_file.filename
25
- @file_mimetype = input_file.file_mimetype
26
- end
27
- @checklist = {}
28
- end
29
-
30
- # @return [Boolean]
31
- def all_checks
32
- @checklist.all? { |_, value| value == true }
33
- end
34
- end
35
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../fields'
4
- require_relative 'base'
5
-
6
- module Mindee
7
- # Custom document object.
8
- class CustomDocument < Document
9
- # All value fields in the document
10
- # @return [Hash<Symbol, Mindee::ListField>]
11
- attr_reader :fields
12
- # All classifications in the document
13
- # @return [Hash<Symbol, Mindee::ClassificationField>]
14
- attr_reader :classifications
15
-
16
- # @param document_type [String]
17
- # @param prediction [Hash]
18
- # @param input_file [Mindee::InputDocument, nil]
19
- # @param page_id [Integer, nil]
20
- def initialize(document_type, prediction, input_file: nil, page_id: nil)
21
- super(document_type, input_file: input_file)
22
- @fields = {}
23
- @classifications = {}
24
- prediction.each do |field_name, field_prediction|
25
- field_sym = field_name.to_sym
26
- complete_field = set_field(field_sym, field_prediction, page_id)
27
-
28
- # Create a dynamic accessor function for the field
29
- singleton_class.module_eval { attr_accessor field_sym }
30
- send("#{field_sym}=", complete_field)
31
- end
32
- end
33
-
34
- def to_s
35
- out_str = String.new
36
- out_str << "----- #{@document_type} -----"
37
- out_str << "\nFilename: #{@filename}".rstrip
38
- @classifications.each do |name, info|
39
- out_str << "\n#{name}: #{info}".rstrip
40
- end
41
- @fields.each do |name, info|
42
- out_str << "\n#{name}: #{info}".rstrip
43
- end
44
- out_str << "\n----------------------"
45
- out_str
46
- end
47
-
48
- private
49
-
50
- # @param field_prediction [Hash]
51
- def set_field(field_sym, field_prediction, page_id)
52
- # Currently two types of fields possible in a custom API response:
53
- # fields having a list of values, and classification fields.
54
- # Here we use the fact that only value lists have the 'values' attribute.
55
-
56
- if field_prediction.key? 'values'
57
- @fields[field_sym] = ListField.new(field_prediction, page_id)
58
- elsif field_prediction.key? 'value'
59
- @classifications[field_sym] = ClassificationField.new(field_prediction)
60
- else
61
- throw 'Unknown API field type'
62
- end
63
- end
64
- end
65
- end