mindee 3.12.0 → 3.14.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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/CHANGELOG.md +26 -0
  4. data/README.md +23 -23
  5. data/Rakefile +5 -0
  6. data/docs/bank_account_details_v2.md +5 -1
  7. data/docs/bank_check_v1.md +6 -2
  8. data/docs/bank_statement_fr_v1.md +3 -0
  9. data/docs/barcode_reader_v1.md +5 -1
  10. data/docs/bill_of_lading_v1.md +251 -0
  11. data/docs/carte_grise_v1.md +5 -1
  12. data/docs/carte_vitale_v1.md +5 -1
  13. data/docs/code_samples/bill_of_lading_v1_async.txt +19 -0
  14. data/docs/code_samples/energy_bill_fra_v1_async.txt +19 -0
  15. data/docs/code_samples/invoices_v4_async.txt +19 -0
  16. data/docs/code_samples/nutrition_facts_v1_async.txt +19 -0
  17. data/docs/code_samples/payslip_fra_v2_async.txt +19 -0
  18. data/docs/cropper_v1.md +6 -2
  19. data/docs/custom_v1.md +5 -3
  20. data/docs/energy_bill_fra_v1.md +309 -0
  21. data/docs/eu_driver_license_v1.md +6 -2
  22. data/docs/expense_receipts_v5.md +30 -5
  23. data/docs/financial_document_v1.md +43 -1
  24. data/docs/generated_v1.md +3 -0
  25. data/docs/getting_started.md +3 -0
  26. data/docs/idcard_fr_v2.md +15 -2
  27. data/docs/international_id_v2.md +13 -1
  28. data/docs/invoice_splitter_v1.md +16 -13
  29. data/docs/invoices_v4.md +70 -23
  30. data/docs/license_plates_v1.md +5 -1
  31. data/docs/multi_receipts_detector_v1.md +5 -1
  32. data/docs/nutrition_facts_v1.md +374 -0
  33. data/docs/passport_v1.md +5 -1
  34. data/docs/payslip_fra_v2.md +294 -0
  35. data/docs/proof_of_address_v1.md +5 -1
  36. data/docs/resume_v1.md +24 -1
  37. data/docs/us_driver_license_v1.md +6 -2
  38. data/docs/us_healthcare_cards_v1.md +5 -1
  39. data/docs/us_mail_v2.md +6 -2
  40. data/docs/us_w9_v1.md +6 -2
  41. data/examples/auto_invoice_splitter_extraction.rb +48 -0
  42. data/examples/auto_multi_receipts_detector_extraction.rb +31 -0
  43. data/lib/mindee/client.rb +20 -8
  44. data/lib/mindee/{image_extraction → extraction}/common/extracted_image.rb +1 -1
  45. data/lib/mindee/extraction/common/image_extractor.rb +192 -0
  46. data/lib/mindee/{image_extraction → extraction}/common.rb +1 -0
  47. data/lib/mindee/extraction/multi_receipts_extractor/multi_receipts_extractor.rb +32 -0
  48. data/lib/mindee/extraction/pdf_extractor/extracted_pdf.rb +55 -0
  49. data/lib/mindee/extraction/pdf_extractor/pdf_extractor.rb +111 -0
  50. data/lib/mindee/extraction/pdf_extractor.rb +4 -0
  51. data/lib/mindee/extraction/tax_extractor/tax_extractor.rb +322 -0
  52. data/lib/mindee/extraction/tax_extractor.rb +1 -320
  53. data/lib/mindee/extraction.rb +3 -0
  54. data/lib/mindee/http/endpoint.rb +18 -6
  55. data/lib/mindee/parsing/common/api_response.rb +1 -1
  56. data/lib/mindee/parsing/common/document.rb +31 -1
  57. data/lib/mindee/parsing/common/extras/cropper_extra.rb +29 -0
  58. data/lib/mindee/parsing/common/extras/extras.rb +50 -0
  59. data/lib/mindee/parsing/common/extras/full_text_ocr_extra.rb +32 -0
  60. data/lib/mindee/parsing/common/extras.rb +5 -0
  61. data/lib/mindee/parsing/common/page.rb +5 -0
  62. data/lib/mindee/parsing/standard/base_field.rb +1 -0
  63. data/lib/mindee/parsing/standard/date_field.rb +4 -0
  64. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1.rb +39 -0
  65. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_carrier.rb +52 -0
  66. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_carrier_item.rb +95 -0
  67. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_consignee.rb +58 -0
  68. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_document.rb +136 -0
  69. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_notify_party.rb +58 -0
  70. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_page.rb +32 -0
  71. data/lib/mindee/product/bill_of_lading/bill_of_lading_v1_shipper.rb +58 -0
  72. data/lib/mindee/product/financial_document/financial_document_v1_document.rb +11 -1
  73. data/lib/mindee/product/financial_document/financial_document_v1_line_item.rb +15 -1
  74. data/lib/mindee/product/financial_document/financial_document_v1_page.rb +1 -1
  75. data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2_bban.rb +4 -15
  76. data/lib/mindee/product/fr/energy_bill/energy_bill_v1.rb +41 -0
  77. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_document.rb +235 -0
  78. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_energy_consumer.rb +48 -0
  79. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_energy_supplier.rb +48 -0
  80. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_energy_usage.rb +97 -0
  81. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_meter_detail.rb +54 -0
  82. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_page.rb +34 -0
  83. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_subscription.rb +97 -0
  84. data/lib/mindee/product/fr/energy_bill/energy_bill_v1_taxes_and_contribution.rb +97 -0
  85. data/lib/mindee/product/fr/payslip/payslip_v2.rb +41 -0
  86. data/lib/mindee/product/fr/payslip/payslip_v2_bank_account_detail.rb +54 -0
  87. data/lib/mindee/product/fr/payslip/payslip_v2_document.rb +128 -0
  88. data/lib/mindee/product/fr/payslip/payslip_v2_employee.rb +78 -0
  89. data/lib/mindee/product/fr/payslip/payslip_v2_employer.rb +78 -0
  90. data/lib/mindee/product/fr/payslip/payslip_v2_employment.rb +72 -0
  91. data/lib/mindee/product/fr/payslip/payslip_v2_page.rb +34 -0
  92. data/lib/mindee/product/fr/payslip/payslip_v2_pay_detail.rb +100 -0
  93. data/lib/mindee/product/fr/payslip/payslip_v2_pay_period.rb +66 -0
  94. data/lib/mindee/product/fr/payslip/payslip_v2_pto.rb +56 -0
  95. data/lib/mindee/product/fr/payslip/payslip_v2_salary_detail.rb +81 -0
  96. data/lib/mindee/product/invoice/invoice_v4_document.rb +11 -1
  97. data/lib/mindee/product/invoice/invoice_v4_line_item.rb +15 -1
  98. data/lib/mindee/product/invoice/invoice_v4_page.rb +1 -1
  99. data/lib/mindee/product/invoice_splitter/invoice_splitter_v1_document.rb +1 -1
  100. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1.rb +39 -0
  101. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_added_sugar.rb +52 -0
  102. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_calorie.rb +52 -0
  103. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_cholesterol.rb +52 -0
  104. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_dietary_fiber.rb +52 -0
  105. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_document.rb +173 -0
  106. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_nutrient.rb +87 -0
  107. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_page.rb +32 -0
  108. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_protein.rb +52 -0
  109. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_saturated_fat.rb +52 -0
  110. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_serving_size.rb +46 -0
  111. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_sodium.rb +58 -0
  112. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_carbohydrate.rb +52 -0
  113. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_fat.rb +52 -0
  114. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_sugar.rb +52 -0
  115. data/lib/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_trans_fat.rb +52 -0
  116. data/lib/mindee/product/receipt/receipt_v5_line_item.rb +11 -1
  117. data/lib/mindee/product/resume/resume_v1_certificate.rb +11 -1
  118. data/lib/mindee/product/resume/resume_v1_education.rb +14 -1
  119. data/lib/mindee/product/resume/resume_v1_language.rb +9 -1
  120. data/lib/mindee/product/resume/resume_v1_professional_experience.rb +15 -1
  121. data/lib/mindee/product/resume/resume_v1_social_networks_url.rb +9 -1
  122. data/lib/mindee/product/us/healthcare_card/healthcare_card_v1_copay.rb +9 -1
  123. data/lib/mindee/product/us/us_mail/us_mail_v2_recipient_address.rb +14 -1
  124. data/lib/mindee/product/us/us_mail/us_mail_v2_sender_address.rb +5 -17
  125. data/lib/mindee/product.rb +5 -1
  126. data/lib/mindee/version.rb +1 -1
  127. metadata +71 -9
  128. data/lib/mindee/image_extraction/common/image_extractor.rb +0 -191
  129. data/lib/mindee/image_extraction/multi_receipts_extractor/multi_receipts_extractor.rb +0 -26
  130. data/lib/mindee/image_extraction.rb +0 -4
  131. /data/lib/mindee/{image_extraction → extraction}/multi_receipts_extractor.rb +0 -0
  132. /data/lib/mindee/extraction/{ocr_extractor.rb → tax_extractor/ocr_extractor.rb} +0 -0
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../parsing'
4
+
5
+ module Mindee
6
+ module Product
7
+ module FR
8
+ module Payslip
9
+ # Detailed information about the earnings.
10
+ class PayslipV2SalaryDetail < Mindee::Parsing::Standard::FeatureField
11
+ include Mindee::Parsing::Standard
12
+ # The amount of the earnings.
13
+ # @return [Float]
14
+ attr_reader :amount
15
+ # The base value of the earnings.
16
+ # @return [Float]
17
+ attr_reader :base
18
+ # The description of the earnings.
19
+ # @return [String]
20
+ attr_reader :description
21
+ # The rate of the earnings.
22
+ # @return [Float]
23
+ attr_reader :rate
24
+
25
+ # @param prediction [Hash]
26
+ # @param page_id [Integer, nil]
27
+ def initialize(prediction, page_id)
28
+ super(prediction, page_id)
29
+ @amount = prediction['amount']
30
+ @base = prediction['base']
31
+ @description = prediction['description']
32
+ @rate = prediction['rate']
33
+ @page_id = page_id
34
+ end
35
+
36
+ # @return [Hash]
37
+ def printable_values
38
+ printable = {}
39
+ printable[:amount] = @amount.nil? ? '' : Field.float_to_string(@amount)
40
+ printable[:base] = @base.nil? ? '' : Field.float_to_string(@base)
41
+ printable[:description] = format_for_display(@description)
42
+ printable[:rate] = @rate.nil? ? '' : Field.float_to_string(@rate)
43
+ printable
44
+ end
45
+
46
+ # @return [Hash]
47
+ def table_printable_values
48
+ printable = {}
49
+ printable[:amount] = @amount.nil? ? '' : Field.float_to_string(@amount)
50
+ printable[:base] = @base.nil? ? '' : Field.float_to_string(@base)
51
+ printable[:description] = format_for_display(@description, 36)
52
+ printable[:rate] = @rate.nil? ? '' : Field.float_to_string(@rate)
53
+ printable
54
+ end
55
+
56
+ # @return [String]
57
+ def to_table_line
58
+ printable = table_printable_values
59
+ out_str = String.new
60
+ out_str << format('| %- 13s', printable[:amount])
61
+ out_str << format('| %- 10s', printable[:base])
62
+ out_str << format('| %- 37s', printable[:description])
63
+ out_str << format('| %- 10s', printable[:rate])
64
+ out_str << '|'
65
+ end
66
+
67
+ # @return [String]
68
+ def to_s
69
+ printable = printable_values
70
+ out_str = String.new
71
+ out_str << "\n :Amount: #{printable[:amount]}"
72
+ out_str << "\n :Base: #{printable[:base]}"
73
+ out_str << "\n :Description: #{printable[:description]}"
74
+ out_str << "\n :Rate: #{printable[:rate]}"
75
+ out_str
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -6,7 +6,7 @@ require_relative 'invoice_v4_line_item'
6
6
  module Mindee
7
7
  module Product
8
8
  module Invoice
9
- # Invoice API version 4.7 document data.
9
+ # Invoice API version 4.8 document data.
10
10
  class InvoiceV4Document < Mindee::Parsing::Common::Prediction
11
11
  include Mindee::Parsing::Standard
12
12
  # The customer's address used for billing.
@@ -42,6 +42,12 @@ module Mindee
42
42
  # The locale detected on the document.
43
43
  # @return [Mindee::Parsing::Standard::LocaleField]
44
44
  attr_reader :locale
45
+ # The date on which the payment is due/ was full-filled.
46
+ # @return [Mindee::Parsing::Standard::DateField]
47
+ attr_reader :payment_date
48
+ # The purchase order number.
49
+ # @return [Mindee::Parsing::Standard::StringField]
50
+ attr_reader :po_number
45
51
  # List of Reference numbers, including PO number.
46
52
  # @return [Array<Mindee::Parsing::Standard::StringField>]
47
53
  attr_reader :reference_numbers
@@ -103,6 +109,8 @@ module Mindee
103
109
  @line_items.push(InvoiceV4LineItem.new(item, page_id))
104
110
  end
105
111
  @locale = LocaleField.new(prediction['locale'], page_id)
112
+ @payment_date = DateField.new(prediction['payment_date'], page_id)
113
+ @po_number = StringField.new(prediction['po_number'], page_id)
106
114
  @reference_numbers = []
107
115
  prediction['reference_numbers'].each do |item|
108
116
  @reference_numbers.push(StringField.new(item, page_id))
@@ -137,9 +145,11 @@ module Mindee
137
145
  out_str = String.new
138
146
  out_str << "\n:Locale: #{@locale}".rstrip
139
147
  out_str << "\n:Invoice Number: #{@invoice_number}".rstrip
148
+ out_str << "\n:Purchase Order Number: #{@po_number}".rstrip
140
149
  out_str << "\n:Reference Numbers: #{reference_numbers}".rstrip
141
150
  out_str << "\n:Purchase Date: #{@date}".rstrip
142
151
  out_str << "\n:Due Date: #{@due_date}".rstrip
152
+ out_str << "\n:Payment Date: #{@payment_date}".rstrip
143
153
  out_str << "\n:Total Net: #{@total_net}".rstrip
144
154
  out_str << "\n:Total Amount: #{@total_amount}".rstrip
145
155
  out_str << "\n:Total Tax: #{@total_tax}".rstrip
@@ -50,6 +50,20 @@ module Mindee
50
50
 
51
51
  # @return [Hash]
52
52
  def printable_values
53
+ printable = {}
54
+ printable[:description] = format_for_display(@description)
55
+ printable[:product_code] = format_for_display(@product_code)
56
+ printable[:quantity] = @quantity.nil? ? '' : Field.float_to_string(@quantity)
57
+ printable[:tax_amount] = @tax_amount.nil? ? '' : Field.float_to_string(@tax_amount)
58
+ printable[:tax_rate] = @tax_rate.nil? ? '' : Field.float_to_string(@tax_rate)
59
+ printable[:total_amount] = @total_amount.nil? ? '' : Field.float_to_string(@total_amount)
60
+ printable[:unit_measure] = format_for_display(@unit_measure)
61
+ printable[:unit_price] = @unit_price.nil? ? '' : Field.float_to_string(@unit_price)
62
+ printable
63
+ end
64
+
65
+ # @return [Hash]
66
+ def table_printable_values
53
67
  printable = {}
54
68
  printable[:description] = format_for_display(@description, 36)
55
69
  printable[:product_code] = format_for_display(@product_code, nil)
@@ -64,7 +78,7 @@ module Mindee
64
78
 
65
79
  # @return [String]
66
80
  def to_table_line
67
- printable = printable_values
81
+ printable = table_printable_values
68
82
  out_str = String.new
69
83
  out_str << format('| %- 37s', printable[:description])
70
84
  out_str << format('| %- 13s', printable[:product_code])
@@ -6,7 +6,7 @@ require_relative 'invoice_v4_document'
6
6
  module Mindee
7
7
  module Product
8
8
  module Invoice
9
- # Invoice API version 4.7 page data.
9
+ # Invoice API version 4.8 page data.
10
10
  class InvoiceV4Page < Mindee::Parsing::Common::Page
11
11
  # @param prediction [Hash]
12
12
  def initialize(prediction)
@@ -29,7 +29,7 @@ module Mindee
29
29
 
30
30
  # Invoice Splitter V1 document prediction.
31
31
  class InvoiceSplitterV1Document < Mindee::Parsing::Common::Prediction
32
- # @return[Array<Mindee::Product::InvoiceSplitterV1PageGroup>]
32
+ # @return[Array<Mindee::Product::InvoiceSplitter::InvoiceSplitterV1PageGroup>]
33
33
  attr_reader :invoice_page_groups
34
34
 
35
35
  # @param prediction [Hash]
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../parsing'
4
+ require_relative 'nutrition_facts_label_v1_document'
5
+ require_relative 'nutrition_facts_label_v1_page'
6
+
7
+ module Mindee
8
+ module Product
9
+ # Nutrition Facts Label module.
10
+ module NutritionFactsLabel
11
+ # Nutrition Facts Label API version 1 inference prediction.
12
+ class NutritionFactsLabelV1 < Mindee::Parsing::Common::Inference
13
+ @endpoint_name = 'nutrition_facts'
14
+ @endpoint_version = '1'
15
+
16
+ # @param prediction [Hash]
17
+ def initialize(prediction)
18
+ super
19
+ @prediction = NutritionFactsLabelV1Document.new(prediction['prediction'], nil)
20
+ @pages = []
21
+ prediction['pages'].each do |page|
22
+ if page.key?('prediction') && !page['prediction'].nil? && !page['prediction'].empty?
23
+ @pages.push(NutritionFactsLabelV1Page.new(page))
24
+ end
25
+ end
26
+ end
27
+
28
+ class << self
29
+ # Name of the endpoint for this product.
30
+ # @return [String]
31
+ attr_reader :endpoint_name
32
+ # Version for this product.
33
+ # @return [String]
34
+ attr_reader :endpoint_version
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../parsing'
4
+
5
+ module Mindee
6
+ module Product
7
+ module NutritionFactsLabel
8
+ # The amount of added sugars in the product.
9
+ class NutritionFactsLabelV1AddedSugar < Mindee::Parsing::Standard::FeatureField
10
+ include Mindee::Parsing::Standard
11
+ # DVs are the recommended amounts of added sugars to consume or not to exceed each day.
12
+ # @return [Float]
13
+ attr_reader :daily_value
14
+ # The amount of added sugars per 100g of the product.
15
+ # @return [Float]
16
+ attr_reader :per_100g
17
+ # The amount of added sugars per serving of the product.
18
+ # @return [Float]
19
+ attr_reader :per_serving
20
+
21
+ # @param prediction [Hash]
22
+ # @param page_id [Integer, nil]
23
+ def initialize(prediction, page_id)
24
+ super(prediction, page_id)
25
+ @daily_value = prediction['daily_value']
26
+ @per_100g = prediction['per_100g']
27
+ @per_serving = prediction['per_serving']
28
+ @page_id = page_id
29
+ end
30
+
31
+ # @return [Hash]
32
+ def printable_values
33
+ printable = {}
34
+ printable[:daily_value] = @daily_value.nil? ? '' : Field.float_to_string(@daily_value)
35
+ printable[:per_100g] = @per_100g.nil? ? '' : Field.float_to_string(@per_100g)
36
+ printable[:per_serving] = @per_serving.nil? ? '' : Field.float_to_string(@per_serving)
37
+ printable
38
+ end
39
+
40
+ # @return [String]
41
+ def to_s
42
+ printable = printable_values
43
+ out_str = String.new
44
+ out_str << "\n :Daily Value: #{printable[:daily_value]}"
45
+ out_str << "\n :Per 100g: #{printable[:per_100g]}"
46
+ out_str << "\n :Per Serving: #{printable[:per_serving]}"
47
+ out_str
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../parsing'
4
+
5
+ module Mindee
6
+ module Product
7
+ module NutritionFactsLabel
8
+ # The amount of calories in the product.
9
+ class NutritionFactsLabelV1Calorie < Mindee::Parsing::Standard::FeatureField
10
+ include Mindee::Parsing::Standard
11
+ # DVs are the recommended amounts of calories to consume or not to exceed each day.
12
+ # @return [Float]
13
+ attr_reader :daily_value
14
+ # The amount of calories per 100g of the product.
15
+ # @return [Float]
16
+ attr_reader :per_100g
17
+ # The amount of calories per serving of the product.
18
+ # @return [Float]
19
+ attr_reader :per_serving
20
+
21
+ # @param prediction [Hash]
22
+ # @param page_id [Integer, nil]
23
+ def initialize(prediction, page_id)
24
+ super(prediction, page_id)
25
+ @daily_value = prediction['daily_value']
26
+ @per_100g = prediction['per_100g']
27
+ @per_serving = prediction['per_serving']
28
+ @page_id = page_id
29
+ end
30
+
31
+ # @return [Hash]
32
+ def printable_values
33
+ printable = {}
34
+ printable[:daily_value] = @daily_value.nil? ? '' : Field.float_to_string(@daily_value)
35
+ printable[:per_100g] = @per_100g.nil? ? '' : Field.float_to_string(@per_100g)
36
+ printable[:per_serving] = @per_serving.nil? ? '' : Field.float_to_string(@per_serving)
37
+ printable
38
+ end
39
+
40
+ # @return [String]
41
+ def to_s
42
+ printable = printable_values
43
+ out_str = String.new
44
+ out_str << "\n :Daily Value: #{printable[:daily_value]}"
45
+ out_str << "\n :Per 100g: #{printable[:per_100g]}"
46
+ out_str << "\n :Per Serving: #{printable[:per_serving]}"
47
+ out_str
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../parsing'
4
+
5
+ module Mindee
6
+ module Product
7
+ module NutritionFactsLabel
8
+ # The amount of cholesterol in the product.
9
+ class NutritionFactsLabelV1Cholesterol < Mindee::Parsing::Standard::FeatureField
10
+ include Mindee::Parsing::Standard
11
+ # DVs are the recommended amounts of cholesterol to consume or not to exceed each day.
12
+ # @return [Float]
13
+ attr_reader :daily_value
14
+ # The amount of cholesterol per 100g of the product.
15
+ # @return [Float]
16
+ attr_reader :per_100g
17
+ # The amount of cholesterol per serving of the product.
18
+ # @return [Float]
19
+ attr_reader :per_serving
20
+
21
+ # @param prediction [Hash]
22
+ # @param page_id [Integer, nil]
23
+ def initialize(prediction, page_id)
24
+ super(prediction, page_id)
25
+ @daily_value = prediction['daily_value']
26
+ @per_100g = prediction['per_100g']
27
+ @per_serving = prediction['per_serving']
28
+ @page_id = page_id
29
+ end
30
+
31
+ # @return [Hash]
32
+ def printable_values
33
+ printable = {}
34
+ printable[:daily_value] = @daily_value.nil? ? '' : Field.float_to_string(@daily_value)
35
+ printable[:per_100g] = @per_100g.nil? ? '' : Field.float_to_string(@per_100g)
36
+ printable[:per_serving] = @per_serving.nil? ? '' : Field.float_to_string(@per_serving)
37
+ printable
38
+ end
39
+
40
+ # @return [String]
41
+ def to_s
42
+ printable = printable_values
43
+ out_str = String.new
44
+ out_str << "\n :Daily Value: #{printable[:daily_value]}"
45
+ out_str << "\n :Per 100g: #{printable[:per_100g]}"
46
+ out_str << "\n :Per Serving: #{printable[:per_serving]}"
47
+ out_str
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../parsing'
4
+
5
+ module Mindee
6
+ module Product
7
+ module NutritionFactsLabel
8
+ # The amount of dietary fiber in the product.
9
+ class NutritionFactsLabelV1DietaryFiber < Mindee::Parsing::Standard::FeatureField
10
+ include Mindee::Parsing::Standard
11
+ # DVs are the recommended amounts of dietary fiber to consume or not to exceed each day.
12
+ # @return [Float]
13
+ attr_reader :daily_value
14
+ # The amount of dietary fiber per 100g of the product.
15
+ # @return [Float]
16
+ attr_reader :per_100g
17
+ # The amount of dietary fiber per serving of the product.
18
+ # @return [Float]
19
+ attr_reader :per_serving
20
+
21
+ # @param prediction [Hash]
22
+ # @param page_id [Integer, nil]
23
+ def initialize(prediction, page_id)
24
+ super(prediction, page_id)
25
+ @daily_value = prediction['daily_value']
26
+ @per_100g = prediction['per_100g']
27
+ @per_serving = prediction['per_serving']
28
+ @page_id = page_id
29
+ end
30
+
31
+ # @return [Hash]
32
+ def printable_values
33
+ printable = {}
34
+ printable[:daily_value] = @daily_value.nil? ? '' : Field.float_to_string(@daily_value)
35
+ printable[:per_100g] = @per_100g.nil? ? '' : Field.float_to_string(@per_100g)
36
+ printable[:per_serving] = @per_serving.nil? ? '' : Field.float_to_string(@per_serving)
37
+ printable
38
+ end
39
+
40
+ # @return [String]
41
+ def to_s
42
+ printable = printable_values
43
+ out_str = String.new
44
+ out_str << "\n :Daily Value: #{printable[:daily_value]}"
45
+ out_str << "\n :Per 100g: #{printable[:per_100g]}"
46
+ out_str << "\n :Per Serving: #{printable[:per_serving]}"
47
+ out_str
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,173 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../parsing'
4
+ require_relative 'nutrition_facts_label_v1_serving_size'
5
+ require_relative 'nutrition_facts_label_v1_calorie'
6
+ require_relative 'nutrition_facts_label_v1_total_fat'
7
+ require_relative 'nutrition_facts_label_v1_saturated_fat'
8
+ require_relative 'nutrition_facts_label_v1_trans_fat'
9
+ require_relative 'nutrition_facts_label_v1_cholesterol'
10
+ require_relative 'nutrition_facts_label_v1_total_carbohydrate'
11
+ require_relative 'nutrition_facts_label_v1_dietary_fiber'
12
+ require_relative 'nutrition_facts_label_v1_total_sugar'
13
+ require_relative 'nutrition_facts_label_v1_added_sugar'
14
+ require_relative 'nutrition_facts_label_v1_protein'
15
+ require_relative 'nutrition_facts_label_v1_sodium'
16
+ require_relative 'nutrition_facts_label_v1_nutrient'
17
+
18
+ module Mindee
19
+ module Product
20
+ module NutritionFactsLabel
21
+ # Nutrition Facts Label API version 1.0 document data.
22
+ class NutritionFactsLabelV1Document < Mindee::Parsing::Common::Prediction
23
+ include Mindee::Parsing::Standard
24
+ # The amount of added sugars in the product.
25
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1AddedSugar]
26
+ attr_reader :added_sugars
27
+ # The amount of calories in the product.
28
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1Calorie]
29
+ attr_reader :calories
30
+ # The amount of cholesterol in the product.
31
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1Cholesterol]
32
+ attr_reader :cholesterol
33
+ # The amount of dietary fiber in the product.
34
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1DietaryFiber]
35
+ attr_reader :dietary_fiber
36
+ # The amount of nutrients in the product.
37
+ # @return [Array<Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1Nutrient>]
38
+ attr_reader :nutrients
39
+ # The amount of protein in the product.
40
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1Protein]
41
+ attr_reader :protein
42
+ # The amount of saturated fat in the product.
43
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1SaturatedFat]
44
+ attr_reader :saturated_fat
45
+ # The number of servings in each box of the product.
46
+ # @return [Mindee::Parsing::Standard::AmountField]
47
+ attr_reader :serving_per_box
48
+ # The size of a single serving of the product.
49
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1ServingSize]
50
+ attr_reader :serving_size
51
+ # The amount of sodium in the product.
52
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1Sodium]
53
+ attr_reader :sodium
54
+ # The total amount of carbohydrates in the product.
55
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1TotalCarbohydrate]
56
+ attr_reader :total_carbohydrate
57
+ # The total amount of fat in the product.
58
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1TotalFat]
59
+ attr_reader :total_fat
60
+ # The total amount of sugars in the product.
61
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1TotalSugar]
62
+ attr_reader :total_sugars
63
+ # The amount of trans fat in the product.
64
+ # @return [Mindee::Product::NutritionFactsLabel::NutritionFactsLabelV1TransFat]
65
+ attr_reader :trans_fat
66
+
67
+ # @param prediction [Hash]
68
+ # @param page_id [Integer, nil]
69
+ def initialize(prediction, page_id)
70
+ super()
71
+ @added_sugars = NutritionFactsLabelV1AddedSugar.new(prediction['added_sugars'], page_id)
72
+ @calories = NutritionFactsLabelV1Calorie.new(prediction['calories'], page_id)
73
+ @cholesterol = NutritionFactsLabelV1Cholesterol.new(prediction['cholesterol'], page_id)
74
+ @dietary_fiber = NutritionFactsLabelV1DietaryFiber.new(prediction['dietary_fiber'], page_id)
75
+ @nutrients = []
76
+ prediction['nutrients'].each do |item|
77
+ @nutrients.push(NutritionFactsLabelV1Nutrient.new(item, page_id))
78
+ end
79
+ @protein = NutritionFactsLabelV1Protein.new(prediction['protein'], page_id)
80
+ @saturated_fat = NutritionFactsLabelV1SaturatedFat.new(prediction['saturated_fat'], page_id)
81
+ @serving_per_box = AmountField.new(prediction['serving_per_box'], page_id)
82
+ @serving_size = NutritionFactsLabelV1ServingSize.new(prediction['serving_size'], page_id)
83
+ @sodium = NutritionFactsLabelV1Sodium.new(prediction['sodium'], page_id)
84
+ @total_carbohydrate = NutritionFactsLabelV1TotalCarbohydrate.new(prediction['total_carbohydrate'], page_id)
85
+ @total_fat = NutritionFactsLabelV1TotalFat.new(prediction['total_fat'], page_id)
86
+ @total_sugars = NutritionFactsLabelV1TotalSugar.new(prediction['total_sugars'], page_id)
87
+ @trans_fat = NutritionFactsLabelV1TransFat.new(prediction['trans_fat'], page_id)
88
+ end
89
+
90
+ # @return [String]
91
+ def to_s
92
+ serving_size = @serving_size.to_s
93
+ calories = @calories.to_s
94
+ total_fat = @total_fat.to_s
95
+ saturated_fat = @saturated_fat.to_s
96
+ trans_fat = @trans_fat.to_s
97
+ cholesterol = @cholesterol.to_s
98
+ total_carbohydrate = @total_carbohydrate.to_s
99
+ dietary_fiber = @dietary_fiber.to_s
100
+ total_sugars = @total_sugars.to_s
101
+ added_sugars = @added_sugars.to_s
102
+ protein = @protein.to_s
103
+ sodium = @sodium.to_s
104
+ nutrients = nutrients_to_s
105
+ out_str = String.new
106
+ out_str << "\n:Serving per Box: #{@serving_per_box}".rstrip
107
+ out_str << "\n:Serving Size:"
108
+ out_str << serving_size
109
+ out_str << "\n:Calories:"
110
+ out_str << calories
111
+ out_str << "\n:Total Fat:"
112
+ out_str << total_fat
113
+ out_str << "\n:Saturated Fat:"
114
+ out_str << saturated_fat
115
+ out_str << "\n:Trans Fat:"
116
+ out_str << trans_fat
117
+ out_str << "\n:Cholesterol:"
118
+ out_str << cholesterol
119
+ out_str << "\n:Total Carbohydrate:"
120
+ out_str << total_carbohydrate
121
+ out_str << "\n:Dietary Fiber:"
122
+ out_str << dietary_fiber
123
+ out_str << "\n:Total Sugars:"
124
+ out_str << total_sugars
125
+ out_str << "\n:Added Sugars:"
126
+ out_str << added_sugars
127
+ out_str << "\n:Protein:"
128
+ out_str << protein
129
+ out_str << "\n:sodium:"
130
+ out_str << sodium
131
+ out_str << "\n:nutrients:"
132
+ out_str << nutrients
133
+ out_str[1..].to_s
134
+ end
135
+
136
+ private
137
+
138
+ # @param char [String]
139
+ # @return [String]
140
+ def nutrients_separator(char)
141
+ out_str = String.new
142
+ out_str << ' '
143
+ out_str << "+#{char * 13}"
144
+ out_str << "+#{char * 22}"
145
+ out_str << "+#{char * 10}"
146
+ out_str << "+#{char * 13}"
147
+ out_str << "+#{char * 6}"
148
+ out_str << '+'
149
+ out_str
150
+ end
151
+
152
+ # @return [String]
153
+ def nutrients_to_s
154
+ return '' if @nutrients.empty?
155
+
156
+ line_items = @nutrients.map(&:to_table_line).join("\n#{nutrients_separator('-')}\n ")
157
+ out_str = String.new
158
+ out_str << "\n#{nutrients_separator('-')}"
159
+ out_str << "\n |"
160
+ out_str << ' Daily Value |'
161
+ out_str << ' Name |'
162
+ out_str << ' Per 100g |'
163
+ out_str << ' Per Serving |'
164
+ out_str << ' Unit |'
165
+ out_str << "\n#{nutrients_separator('=')}"
166
+ out_str << "\n #{line_items}"
167
+ out_str << "\n#{nutrients_separator('-')}"
168
+ out_str
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end