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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a4e7590c321e473df6da717d6854caf198ee8dc3d818502d6e588d14497c0da
4
- data.tar.gz: b9922d76cbc0115dff59489b9c77757decd69fcfd8a6da445e0a38229cd85023
3
+ metadata.gz: 508a1201e41623fdd4b7283a90f09aefbcf66582e610120547b5706017e62c6f
4
+ data.tar.gz: 552288d7cee7f8b5c38d641a991fb9864f3ebb6f3d7c5140e178ebabec082a84
5
5
  SHA512:
6
- metadata.gz: 01e9dce9c2ba44dea757f1061c4a368b9a675f75d8ab54dd74c06c7c70589aaa80fd320a241c51f618efec9d6ebae8aa9fa033233731e5c214e607464821deb1
7
- data.tar.gz: 0467da78b85085e0df6cdae33e6135be4dd1be6c8d28f2c2888127c2340c114b404314f80741f0304aca4d34b19c6462ae8798fcb3936d5f2130860610b4ded3
6
+ metadata.gz: a697ccd863ee69c721f8fe0199fc6321df1812a6daf9aa51031031d197ae3cd6578b4c09162ebe03cfba0008b26320533a62cd688fbc02c3acaee21488201c8b
7
+ data.tar.gz: ae97c33e5fd32bc1919b510e4057e0b3355892ca5178fc9e40d3769d55dbb41d3b10ac1b8153f4b028e36ec11d02df977299f0581fe3d3cbf8412be23f2bec33
data/.gitignore CHANGED
@@ -15,6 +15,7 @@
15
15
  /test/tmp/
16
16
  /test/version_tmp/
17
17
  /tmp/
18
+ /vendor
18
19
  /mindee-*/
19
20
 
20
21
  # Used by dotenv library to load environment variables.
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/.yardopts CHANGED
@@ -1,4 +1,3 @@
1
1
  --markup markdown
2
2
  --main README.md
3
- --files docs/ruby-getting-started.md,docs/ruby-invoice-ocr.md,docs/ruby-passport-ocr.md,docs/ruby-receipt-ocr.md
4
3
  --output-dir docs/_build
data/CHANGELOG.md CHANGED
@@ -1,10 +1,25 @@
1
1
  # Mindee Ruby API Library Changelog
2
2
 
3
+ ## v2.2.0 - 2023-05-16
4
+ ### Changes
5
+ * :sparkles: add support for Receipts v5
6
+ * :pushpin: more specific dependency pinning; update some dependencies
7
+
8
+
9
+ ## v2.1.1 - 2023-04-21
10
+ ### Changes
11
+ * :memo: minor docstring improvements
12
+ * :coffin: remove redundant local checks
13
+ * :memo: publish documentation
14
+ * :memo: add code samples
15
+
16
+
3
17
  ## v2.1.0 - 2023-01-30
4
18
  ### Changes
5
19
  * :sparkles: Add financial document v1 support (Co-authored-by: Oriol Gual)
6
20
  * :sparkles: Add Proof of Address v1 support
7
21
 
22
+
8
23
  ## v2.0.0 - 2023-01-13
9
24
  ### ¡Breaking Changes!
10
25
  * :sparkles: add improved PDF merge system
@@ -22,6 +37,7 @@
22
37
  * :white_check_mark: add testing on Ruby 3.2
23
38
  * :sparkles: allow setting the request timeout from env
24
39
 
40
+
25
41
  ## v1.2.0 - 2022-12-26
26
42
  ### Changes
27
43
  * :arrow_up: switch to origamindee => adds support for Ruby 3
data/README.md CHANGED
@@ -52,7 +52,7 @@ result = mindee_client.doc_from_path('/path/to/the/file.ext')
52
52
  .parse(Mindee::Prediction::EU::LicensePlateV1)
53
53
 
54
54
  # Print a full summary of the parsed data in RST format
55
- puts result.document
55
+ puts result
56
56
  ```
57
57
 
58
58
  ### Custom Document (API Builder)
@@ -61,13 +61,13 @@ require 'mindee'
61
61
 
62
62
  # Init a new client and configure your custom document
63
63
  mindee_client = Mindee::Client.new(api_key: 'my-api-key').add_endpoint(
64
- 'john',
65
- 'wnine'
64
+ 'my-account',
65
+ 'my-endpoint'
66
66
  )
67
67
 
68
68
  # Load a file from disk and parse it
69
69
  result = mindee_client.doc_from_path('/path/to/the/file.ext')
70
- .parse(Mindee::Prediction::CustomV1, endpoint_name: 'wnine')
70
+ .parse(Mindee::Prediction::CustomV1, endpoint_name: 'my-endpoint')
71
71
 
72
72
  # Print a full summary of the parsed data in RST format
73
73
  puts result
@@ -84,11 +84,15 @@ end
84
84
  There's more to it than that for those that need more features, or want to
85
85
  customize the experience.
86
86
 
87
- - [Ruby Overview](https://developers.mindee.com/docs/ruby-getting-started)
88
- - [Ruby Custom APIs OCR](https://developers.mindee.com/docs/ruby-api-builder)
89
- - [Ruby invoices OCR](https://developers.mindee.com/docs/ruby-invoice-ocr)
90
- - [Ruby receipts OCR](https://developers.mindee.com/docs/ruby-receipt-ocr)
91
- - [Ruby passports OCR](https://developers.mindee.com/docs/ruby-passport-ocr)
87
+ * [Ruby Overview](https://developers.mindee.com/docs/ruby-getting-started)
88
+ * [Ruby Custom APIs OCR](https://developers.mindee.com/docs/ruby-api-builder)
89
+ * [Ruby invoices OCR](https://developers.mindee.com/docs/ruby-invoice-ocr)
90
+ * [Ruby receipts OCR](https://developers.mindee.com/docs/ruby-receipt-ocr)
91
+ * [Ruby passports OCR](https://developers.mindee.com/docs/ruby-passport-ocr)
92
+
93
+ You can also take a look at the
94
+ [Reference Documentation](https://mindee.github.io/mindee-api-ruby/).
95
+
92
96
 
93
97
  ## License
94
98
  Copyright © Mindee, SA
data/Rakefile CHANGED
@@ -15,6 +15,14 @@ task default: :spec
15
15
 
16
16
  RSpec::Core::RakeTask.new(:spec)
17
17
 
18
- YARD::Rake::YardocTask.new do |task|
18
+ desc 'Generate documentation'
19
+ YARD::Rake::YardocTask.new(:doc) do |task|
19
20
  task.files = ['lib/**/*.rb']
20
21
  end
22
+
23
+ Rake::Task[:doc].enhance do
24
+ FileUtils.cp_r(
25
+ File.join('docs', 'code_samples'),
26
+ File.join('docs', '_build')
27
+ )
28
+ end
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
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::FR::BankAccountDetailsV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::US::BankCheckV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::FR::CarteVitaleV1)
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
@@ -0,0 +1,24 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client and configure your custom document
4
+ mindee_client = Mindee::Client.new(api_key: 'my-api-key').add_endpoint(
5
+ 'my-account',
6
+ 'my-endpoint'
7
+ )
8
+
9
+ # Load a file from disk and parse it
10
+ result = mindee_client.doc_from_path('/path/to/the/file.ext')
11
+ .parse(Mindee::Prediction::CustomV1, endpoint_name: 'my-endpoint')
12
+
13
+ # Print a full summary of the parsed data in RST format
14
+ puts result
15
+
16
+ # Print the document-level parsed data
17
+ # puts result.inference.prediction
18
+
19
+ # Looping over all prediction values
20
+ result.inference.prediction.fields.each do |field_name, field_data|
21
+ puts field_name
22
+ puts field_data.values
23
+ puts field_data.to_s
24
+ end
@@ -0,0 +1,16 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'net/https'
4
+
5
+ url = URI('https://api.mindee.net/v1/products/mindee/my-endpoint/my-version/predict')
6
+ file = '/path/to/the/file.ext'
7
+
8
+ http = Net::HTTP.new(url.host, url.port)
9
+ http.use_ssl = true
10
+
11
+ request = Net::HTTP::Post.new(url)
12
+ request['Authorization'] = 'Token my-api-key'
13
+ request.set_form([['document', File.open(file)]], 'multipart/form-data')
14
+
15
+ response = http.request(request)
16
+ puts response.read_body
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::ReceiptV4)
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
@@ -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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::FinancialDocumentV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::FR::IdCardV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::InvoiceV4)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::EU::LicensePlateV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::PassportV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::ProofOfAddressV1)
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
@@ -0,0 +1,14 @@
1
+ require 'mindee'
2
+
3
+ # Init a new client
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::ShippingContainerV1)
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
@@ -64,7 +64,7 @@ gem install mindee@<version>
64
64
  ## Usage
65
65
  Using Mindee's APIs can be broken down into the following steps:
66
66
 
67
- 1. [Initialize a `Client`](#initializing-the-client)
67
+ 1. [Initialize a Client](#initializing-the-client)
68
68
  2. [Load a File](#loading-a-document-file)
69
69
  3. [Send the File](#sending-a-file) to Mindee's API
70
70
  4. [Process the Result](#process-the-result) in some way
@@ -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
@@ -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
@@ -11,7 +11,7 @@ module Mindee
11
11
  # Locale information.
12
12
  # @return [Mindee::Locale]
13
13
  attr_reader :locale
14
- # The nature of the invoice.
14
+ # The nature of the document.
15
15
  # @return [Mindee::TextField]
16
16
  attr_reader :document_type
17
17
  # The total amount with tax included.
@@ -23,7 +23,7 @@ module Mindee
23
23
  # The total tax.
24
24
  # @return [Mindee::AmountField]
25
25
  attr_reader :total_tax
26
- # The creation date of the invoice.
26
+ # The creation date of the document.
27
27
  # @return [Mindee::DateField]
28
28
  attr_reader :date
29
29
  # The invoice number.
@@ -53,26 +53,26 @@ module Mindee
53
53
  # The supplier's address.
54
54
  # @return [Mindee::TextField]
55
55
  attr_reader :supplier_address
56
- # The payment information.
56
+ # The supplier's payment information.
57
57
  # @return [Array<Mindee::PaymentDetails>]
58
58
  attr_reader :supplier_payment_details
59
59
  # The supplier's company registration information.
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]
67
67
  attr_reader :time
68
- # The receipt category among predefined classes.
68
+ # The invoice or receipt category among predefined classes.
69
69
  # @return [Mindee::TextField]
70
70
  attr_reader :category
71
- # The receipt sub-category among predefined classes.
71
+ # The invoice or receipt sub-category among predefined classes.
72
72
  # @return [Mindee::TextField]
73
73
  attr_reader :subcategory
74
- # A classification field, that can return 4 values : 'EXPENSE RECEIPT' ,
75
- # 'CREDIT CARD RECEIPT', 'INVOICE', 'CREDIT NOTE'
74
+ # A classification field, that can return 4 values:
75
+ # `EXPENSE RECEIPT`, `CREDIT CARD RECEIPT`, `INVOICE`, `CREDIT NOTE`
76
76
  # @return [Mindee::TextField]
77
77
  attr_reader :document_type # rubocop:todo Lint/DuplicateMethods
78
78
  # Total amount of tip and gratuity. Both typed and handwritten characters are supported.
@@ -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)