mindee 4.5.0 → 4.7.0.pre.rc1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/README.md +21 -222
- data/docs/code_samples/default_v2.txt +28 -0
- data/docs/global_products/financial_document_v1.md +19 -4
- data/docs/global_products/invoices_v4.md +19 -4
- data/lib/mindee/client.rb +11 -30
- data/lib/mindee/client_v2.rb +109 -0
- data/lib/mindee/errors/mindee_http_error_v2.rb +26 -0
- data/lib/mindee/errors.rb +1 -0
- data/lib/mindee/geometry/point.rb +2 -2
- data/lib/mindee/geometry/quadrilateral.rb +4 -4
- data/lib/mindee/geometry/utils.rb +1 -0
- data/lib/mindee/http/api_settings_v2.rb +61 -0
- data/lib/mindee/http/endpoint.rb +12 -6
- data/lib/mindee/http/http_error_handler.rb +17 -4
- data/lib/mindee/http/mindee_api_v2.rb +148 -0
- data/lib/mindee/http/response_validation.rb +20 -1
- data/lib/mindee/http/workflow_endpoint.rb +2 -2
- data/lib/mindee/http.rb +2 -0
- data/lib/mindee/image/extracted_image.rb +1 -1
- data/lib/mindee/image/image_extractor.rb +10 -10
- data/lib/mindee/input/inference_parameters.rb +116 -0
- data/lib/mindee/input/local_response.rb +10 -1
- data/lib/mindee/input/polling_options.rb +26 -0
- data/lib/mindee/input/sources/base64_input_source.rb +2 -2
- data/lib/mindee/input/sources/local_input_source.rb +19 -12
- data/lib/mindee/input.rb +2 -0
- data/lib/mindee/page_options.rb +24 -0
- data/lib/mindee/parsing/common/api_request.rb +2 -2
- data/lib/mindee/parsing/common/api_response.rb +4 -0
- data/lib/mindee/parsing/common/execution.rb +1 -1
- data/lib/mindee/parsing/common/extras/extras.rb +2 -2
- data/lib/mindee/parsing/common/extras/rag_extra.rb +2 -0
- data/lib/mindee/parsing/common/inference.rb +1 -1
- data/lib/mindee/parsing/common/ocr/ocr.rb +4 -6
- data/lib/mindee/parsing/common/orientation.rb +2 -2
- data/lib/mindee/parsing/common/product.rb +6 -1
- data/lib/mindee/parsing/standard/address_field.rb +49 -0
- data/lib/mindee/parsing/standard/amount_field.rb +2 -2
- data/lib/mindee/parsing/standard/feature_field.rb +1 -1
- data/lib/mindee/parsing/standard/tax_field.rb +1 -1
- data/lib/mindee/parsing/standard.rb +1 -0
- data/lib/mindee/parsing/universal/universal_list_field.rb +2 -2
- data/lib/mindee/parsing/universal/universal_object_field.rb +7 -4
- data/lib/mindee/parsing/v2/common_response.rb +18 -0
- data/lib/mindee/parsing/v2/error_response.rb +36 -0
- data/lib/mindee/parsing/v2/field/base_field.rb +60 -0
- data/lib/mindee/parsing/v2/field/field_confidence.rb +91 -0
- data/lib/mindee/parsing/v2/field/field_location.rb +36 -0
- data/lib/mindee/parsing/v2/field/inference_fields.rb +96 -0
- data/lib/mindee/parsing/v2/field/list_field.rb +88 -0
- data/lib/mindee/parsing/v2/field/object_field.rb +102 -0
- data/lib/mindee/parsing/v2/field/simple_field.rb +56 -0
- data/lib/mindee/parsing/v2/field.rb +9 -0
- data/lib/mindee/parsing/v2/inference.rb +50 -0
- data/lib/mindee/parsing/v2/inference_file.rb +38 -0
- data/lib/mindee/parsing/v2/inference_model.rb +18 -0
- data/lib/mindee/parsing/v2/inference_response.rb +30 -0
- data/lib/mindee/parsing/v2/inference_result.rb +49 -0
- data/lib/mindee/parsing/v2/inference_result_options.rb +21 -0
- data/lib/mindee/parsing/v2/job.rb +86 -0
- data/lib/mindee/parsing/v2/job_response.rb +30 -0
- data/lib/mindee/parsing/v2/job_webhook.rb +60 -0
- data/lib/mindee/parsing/v2/raw_text.rb +21 -0
- data/lib/mindee/parsing/v2.rb +15 -0
- data/lib/mindee/pdf/extracted_pdf.rb +5 -3
- data/lib/mindee/pdf/pdf_extractor.rb +11 -7
- data/lib/mindee/pdf/pdf_processor.rb +6 -6
- data/lib/mindee/pdf/pdf_tools.rb +4 -2
- data/lib/mindee/product/financial_document/financial_document_v1_document.rb +8 -8
- data/lib/mindee/product/invoice/invoice_v4_document.rb +8 -8
- data/lib/mindee/product/universal/universal_prediction.rb +4 -4
- data/lib/mindee/version.rb +2 -2
- data/lib/mindee.rb +6 -0
- data/mindee.gemspec +1 -1
- data/sig/custom/mini_magick.rbs +14 -7
- data/sig/custom/net_http.rbs +4 -4
- data/sig/custom/origami.rbs +9 -4
- data/sig/mindee/client.rbs +14 -19
- data/sig/mindee/client_v2.rbs +17 -0
- data/sig/mindee/errors/mindee_http_error.rbs +6 -5
- data/sig/mindee/errors/mindee_http_error_v2.rbs +12 -0
- data/sig/mindee/errors/mindee_input_error.rbs +3 -2
- data/sig/mindee/geometry/min_max.rbs +4 -3
- data/sig/mindee/geometry/point.rbs +5 -6
- data/sig/mindee/geometry/polygon.rbs +3 -3
- data/sig/mindee/geometry/quadrilateral.rbs +5 -8
- data/sig/mindee/geometry/utils.rbs +8 -8
- data/sig/mindee/http/api_settings_v2.rbs +23 -0
- data/sig/mindee/http/endpoint.rbs +12 -11
- data/sig/mindee/http/http_error_handler.rbs +8 -3
- data/sig/mindee/http/mindee_api_v2.rbs +18 -0
- data/sig/mindee/http/response_validation.rbs +1 -0
- data/sig/mindee/http/workflow_endpoint.rbs +1 -1
- data/sig/mindee/image/extracted_image.rbs +2 -2
- data/sig/mindee/image/image_compressor.rbs +1 -1
- data/sig/mindee/image/image_extractor.rbs +5 -5
- data/sig/mindee/image/image_utils.rbs +10 -10
- data/sig/mindee/input/inference_parameters.rbs +30 -0
- data/sig/mindee/input/local_response.rbs +6 -5
- data/sig/mindee/input/polling_options.rbs +12 -0
- data/sig/mindee/input/sources/base64_input_source.rbs +1 -1
- data/sig/mindee/input/sources/local_input_source.rbs +10 -7
- data/sig/mindee/input/sources/url_input_source.rbs +1 -1
- data/sig/mindee/logging/logger.rbs +2 -0
- data/sig/mindee/page_options.rbs +11 -0
- data/sig/mindee/parsing/common/api_request.rbs +6 -6
- data/sig/mindee/parsing/common/api_response.rbs +2 -2
- data/sig/mindee/parsing/common/document.rbs +10 -10
- data/sig/mindee/parsing/common/execution.rbs +15 -14
- data/sig/mindee/parsing/common/execution_file.rbs +3 -3
- data/sig/mindee/parsing/common/extras/cropper_extra.rbs +3 -2
- data/sig/mindee/parsing/common/extras/extras.rbs +6 -5
- data/sig/mindee/parsing/common/extras/full_text_ocr_extra.rbs +2 -1
- data/sig/mindee/parsing/common/inference.rbs +16 -9
- data/sig/mindee/parsing/common/job.rbs +2 -2
- data/sig/mindee/parsing/common/ocr/mvision_v1.rbs +2 -2
- data/sig/mindee/parsing/common/ocr/ocr.rbs +22 -20
- data/sig/mindee/parsing/common/orientation.rbs +4 -3
- data/sig/mindee/parsing/common/page.rbs +6 -5
- data/sig/mindee/parsing/common/product.rbs +4 -4
- data/sig/mindee/parsing/common/workflow_response.rbs +8 -4
- data/sig/mindee/parsing/standard/abstract_field.rbs +1 -1
- data/sig/mindee/parsing/standard/address_field.rbs +18 -0
- data/sig/mindee/parsing/standard/amount_field.rbs +6 -4
- data/sig/mindee/parsing/standard/base_field.rbs +1 -1
- data/sig/mindee/parsing/standard/boolean_field.rbs +1 -1
- data/sig/mindee/parsing/standard/company_registration_field.rbs +3 -2
- data/sig/mindee/parsing/standard/date_field.rbs +6 -6
- data/sig/mindee/parsing/standard/locale_field.rbs +1 -1
- data/sig/mindee/parsing/standard/payment_details_field.rbs +7 -6
- data/sig/mindee/parsing/standard/position_field.rbs +2 -2
- data/sig/mindee/parsing/standard/string_field.rbs +1 -1
- data/sig/mindee/parsing/standard/tax_field.rbs +8 -7
- data/sig/mindee/parsing/universal/universal_list_field.rbs +4 -5
- data/sig/mindee/parsing/universal/universal_object_field.rbs +17 -11
- data/sig/mindee/parsing/v2/common_response.rbs +11 -0
- data/sig/mindee/parsing/v2/error_response.rbs +16 -0
- data/sig/mindee/parsing/v2/field/base_field.rbs +17 -0
- data/sig/mindee/parsing/v2/field/field_confidence.rbs +27 -0
- data/sig/mindee/parsing/v2/field/field_location.rbs +16 -0
- data/sig/mindee/parsing/v2/field/inference_fields.rbs +19 -0
- data/sig/mindee/parsing/v2/field/list_field.rbs +22 -0
- data/sig/mindee/parsing/v2/field/object_field.rbs +21 -0
- data/sig/mindee/parsing/v2/field/simple_field.rbs +16 -0
- data/sig/mindee/parsing/v2/inference.rbs +16 -0
- data/sig/mindee/parsing/v2/inference_file.rbs +15 -0
- data/sig/mindee/parsing/v2/inference_model.rbs +11 -0
- data/sig/mindee/parsing/v2/inference_response.rbs +12 -0
- data/sig/mindee/parsing/v2/inference_result.rbs +13 -0
- data/sig/mindee/parsing/v2/inference_result_options.rbs +11 -0
- data/sig/mindee/parsing/v2/job.rbs +22 -0
- data/sig/mindee/parsing/v2/job_response.rbs +12 -0
- data/sig/mindee/parsing/v2/job_webhook.rbs +17 -0
- data/sig/mindee/parsing/v2/raw_text.rbs +12 -0
- data/sig/mindee/pdf/extracted_pdf.rbs +6 -6
- data/sig/mindee/pdf/pdf_compressor.rbs +4 -4
- data/sig/mindee/pdf/pdf_extractor.rbs +8 -7
- data/sig/mindee/pdf/pdf_processor.rbs +4 -4
- data/sig/mindee/pdf/pdf_tools.rbs +22 -16
- data/sig/mindee/product/barcode_reader/barcode_reader_v1.rbs +1 -1
- data/sig/mindee/product/barcode_reader/barcode_reader_v1_document.rbs +1 -1
- data/sig/mindee/product/barcode_reader/barcode_reader_v1_page.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1.rbs +1 -1
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_carrier.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_carrier_item.rbs +3 -3
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_consignee.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_document.rbs +1 -1
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_notify_party.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_page.rbs +2 -2
- data/sig/mindee/product/bill_of_lading/bill_of_lading_v1_shipper.rbs +2 -2
- data/sig/mindee/product/business_card/business_card_v1.rbs +1 -1
- data/sig/mindee/product/business_card/business_card_v1_document.rbs +1 -1
- data/sig/mindee/product/business_card/business_card_v1_page.rbs +2 -2
- data/sig/mindee/product/cropper/cropper_v1.rbs +1 -1
- data/sig/mindee/product/cropper/cropper_v1_document.rbs +1 -1
- data/sig/mindee/product/cropper/cropper_v1_page.rbs +2 -2
- data/sig/mindee/product/delivery_note/delivery_note_v1.rbs +1 -1
- data/sig/mindee/product/delivery_note/delivery_note_v1_document.rbs +1 -1
- data/sig/mindee/product/delivery_note/delivery_note_v1_page.rbs +2 -2
- data/sig/mindee/product/driver_license/driver_license_v1.rbs +1 -1
- data/sig/mindee/product/driver_license/driver_license_v1_document.rbs +1 -1
- data/sig/mindee/product/driver_license/driver_license_v1_page.rbs +2 -2
- data/sig/mindee/product/financial_document/financial_document_v1.rbs +1 -1
- data/sig/mindee/product/financial_document/financial_document_v1_document.rbs +5 -5
- data/sig/mindee/product/financial_document/financial_document_v1_line_item.rbs +3 -3
- data/sig/mindee/product/financial_document/financial_document_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_bban.rbs +2 -2
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/bank_account_details/bank_account_details_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2.rbs +1 -1
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/bank_statement/bank_statement_v2_transaction.rbs +3 -3
- data/sig/mindee/product/fr/carte_grise/carte_grise_v1.rbs +1 -1
- data/sig/mindee/product/fr/carte_grise/carte_grise_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/carte_grise/carte_grise_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1.rbs +1 -1
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_consumer.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_supplier.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_energy_usage.rbs +3 -3
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_meter_detail.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_subscription.rbs +3 -3
- data/sig/mindee/product/fr/energy_bill/energy_bill_v1_taxes_and_contribution.rbs +3 -3
- data/sig/mindee/product/fr/health_card/health_card_v1.rbs +1 -1
- data/sig/mindee/product/fr/health_card/health_card_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/health_card/health_card_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/id_card/id_card_v1.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v1_document.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v1_page.rbs +2 -2
- data/sig/mindee/product/fr/id_card/id_card_v2.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/id_card/id_card_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v2_bank_account_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_document.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v2_employee.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_employer.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_employment.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_page.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_pay_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_pay_period.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_pto.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v2_salary_detail.rbs +3 -3
- data/sig/mindee/product/fr/payslip/payslip_v3.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v3_bank_account_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_document.rbs +1 -1
- data/sig/mindee/product/fr/payslip/payslip_v3_employee.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_employer.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_employment.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_page.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_paid_time_off.rbs +3 -3
- data/sig/mindee/product/fr/payslip/payslip_v3_pay_detail.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_pay_period.rbs +2 -2
- data/sig/mindee/product/fr/payslip/payslip_v3_salary_detail.rbs +3 -3
- data/sig/mindee/product/ind/indian_passport/indian_passport_v1.rbs +1 -1
- data/sig/mindee/product/ind/indian_passport/indian_passport_v1_document.rbs +1 -1
- data/sig/mindee/product/ind/indian_passport/indian_passport_v1_page.rbs +2 -2
- data/sig/mindee/product/international_id/international_id_v2.rbs +1 -1
- data/sig/mindee/product/international_id/international_id_v2_document.rbs +1 -1
- data/sig/mindee/product/international_id/international_id_v2_page.rbs +2 -2
- data/sig/mindee/product/invoice/invoice_v4.rbs +1 -1
- data/sig/mindee/product/invoice/invoice_v4_document.rbs +5 -5
- data/sig/mindee/product/invoice/invoice_v4_line_item.rbs +3 -3
- data/sig/mindee/product/invoice/invoice_v4_page.rbs +2 -2
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1.rbs +1 -1
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_document.rbs +1 -1
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rbs +3 -3
- data/sig/mindee/product/invoice_splitter/invoice_splitter_v1_page.rbs +2 -2
- data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1.rbs +1 -1
- data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_document.rbs +1 -1
- data/sig/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_page.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1.rbs +1 -1
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_added_sugar.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_calorie.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_cholesterol.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_dietary_fiber.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_document.rbs +1 -1
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_nutrient.rbs +3 -3
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_page.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_protein.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_saturated_fat.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_serving_size.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_sodium.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_carbohydrate.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_fat.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_total_sugar.rbs +2 -2
- data/sig/mindee/product/nutrition_facts_label/nutrition_facts_label_v1_trans_fat.rbs +2 -2
- data/sig/mindee/product/passport/passport_v1.rbs +1 -1
- data/sig/mindee/product/passport/passport_v1_document.rbs +1 -1
- data/sig/mindee/product/passport/passport_v1_page.rbs +2 -2
- data/sig/mindee/product/receipt/receipt_v5.rbs +1 -1
- data/sig/mindee/product/receipt/receipt_v5_document.rbs +1 -1
- data/sig/mindee/product/receipt/receipt_v5_line_item.rbs +3 -3
- data/sig/mindee/product/receipt/receipt_v5_page.rbs +2 -2
- data/sig/mindee/product/resume/resume_v1.rbs +1 -1
- data/sig/mindee/product/resume/resume_v1_certificate.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_document.rbs +1 -1
- data/sig/mindee/product/resume/resume_v1_education.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_language.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_page.rbs +2 -2
- data/sig/mindee/product/resume/resume_v1_professional_experience.rbs +3 -3
- data/sig/mindee/product/resume/resume_v1_social_networks_url.rbs +3 -3
- data/sig/mindee/product/universal/universal.rbs +5 -5
- data/sig/mindee/product/universal/universal_document.rbs +1 -1
- data/sig/mindee/product/universal/universal_page.rbs +2 -2
- data/sig/mindee/product/universal/universal_prediction.rbs +5 -5
- data/sig/mindee/product/us/bank_check/bank_check_v1.rbs +1 -1
- data/sig/mindee/product/us/bank_check/bank_check_v1_document.rbs +1 -1
- data/sig/mindee/product/us/bank_check/bank_check_v1_page.rbs +2 -2
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1.rbs +1 -1
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_copay.rbs +3 -3
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_document.rbs +1 -1
- data/sig/mindee/product/us/healthcare_card/healthcare_card_v1_page.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v2.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v2_document.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v2_page.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v2_recipient_address.rbs +3 -3
- data/sig/mindee/product/us/us_mail/us_mail_v2_sender_address.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v3.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v3_document.rbs +1 -1
- data/sig/mindee/product/us/us_mail/us_mail_v3_page.rbs +2 -2
- data/sig/mindee/product/us/us_mail/us_mail_v3_recipient_address.rbs +3 -3
- data/sig/mindee/product/us/us_mail/us_mail_v3_sender_address.rbs +2 -2
- data/sig/mindee/product/us/w9/w9_v1.rbs +1 -1
- data/sig/mindee/product/us/w9/w9_v1_document.rbs +1 -1
- data/sig/mindee/product/us/w9/w9_v1_page.rbs +2 -2
- data/sig/mindee/version.rbs +2 -2
- metadata +63 -6
@@ -27,7 +27,7 @@ module Mindee
|
|
27
27
|
attr_reader :filename
|
28
28
|
# @return [String]
|
29
29
|
attr_reader :file_mimetype
|
30
|
-
# @return [StringIO]
|
30
|
+
# @return [StringIO | File]
|
31
31
|
attr_reader :io_stream
|
32
32
|
|
33
33
|
# @param io_stream [StringIO, File]
|
@@ -60,7 +60,7 @@ module Mindee
|
|
60
60
|
# Attempts to fix pdf files if mimetype is rejected.
|
61
61
|
# "Broken PDFs" are often a result of third-party injecting invalid headers.
|
62
62
|
# This attempts to remove them and send the file
|
63
|
-
# @param stream [StringIO]
|
63
|
+
# @param stream [StringIO, File]
|
64
64
|
def rescue_broken_pdf(stream)
|
65
65
|
stream.gets('%PDF-')
|
66
66
|
raise Errors::MindeePDFError if stream.eof? || stream.pos > 500
|
@@ -78,7 +78,7 @@ module Mindee
|
|
78
78
|
@file_mimetype.to_s == 'application/pdf'
|
79
79
|
end
|
80
80
|
|
81
|
-
#
|
81
|
+
# Cuts a PDF file according to provided options.
|
82
82
|
# @param options [PageOptions, nil] Page cutting/merge options:
|
83
83
|
#
|
84
84
|
# * `:page_indexes` Zero-based list of page indexes.
|
@@ -86,14 +86,20 @@ module Mindee
|
|
86
86
|
# * `:KEEP_ONLY` - keep only the specified pages, and remove all others.
|
87
87
|
# * `:REMOVE` - remove the specified pages, and keep all others.
|
88
88
|
# * `:on_min_pages` Apply the operation only if document has at least this many pages.
|
89
|
-
def
|
89
|
+
def apply_page_options(options)
|
90
90
|
@io_stream.seek(0)
|
91
91
|
@io_stream = PDF::PDFProcessor.parse(@io_stream, options)
|
92
92
|
end
|
93
93
|
|
94
|
+
# @deprecated Use {#apply_page_options} instead.
|
95
|
+
# @see #apply_page_options
|
96
|
+
def process_pdf(options)
|
97
|
+
apply_page_options(options)
|
98
|
+
end
|
99
|
+
|
94
100
|
# Reads a document.
|
95
101
|
# @param close [bool]
|
96
|
-
# @return [Array
|
102
|
+
# @return [Array<>]
|
97
103
|
def read_contents(close: true)
|
98
104
|
logger.debug("Reading data from: #{@filename}")
|
99
105
|
@io_stream.seek(0)
|
@@ -101,20 +107,21 @@ module Mindee
|
|
101
107
|
data = @io_stream.read
|
102
108
|
@io_stream.rewind
|
103
109
|
@io_stream.close if close
|
104
|
-
[
|
110
|
+
[data, { filename: Mindee::Input::Source.convert_to_unicode_escape(@filename) }]
|
105
111
|
end
|
106
112
|
|
107
113
|
# Write the file to a given path. Uses the initial file name by default.
|
108
114
|
# @param path [String] Path to write the file to.
|
109
115
|
def write_to_file(path)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
116
|
+
t_path = if File.directory?(path || '') || path.to_s.end_with?('/')
|
117
|
+
File.join(path || '', @filename)
|
118
|
+
else
|
119
|
+
path
|
120
|
+
end
|
121
|
+
full_path = File.expand_path(t_path || '')
|
115
122
|
FileUtils.mkdir_p(File.dirname(full_path))
|
116
123
|
@io_stream.rewind
|
117
|
-
File.binwrite(full_path, @io_stream.read)
|
124
|
+
File.binwrite(full_path, @io_stream.read || '')
|
118
125
|
logger.debug("Wrote file successfully to #{full_path}")
|
119
126
|
@io_stream.rewind
|
120
127
|
end
|
data/lib/mindee/input.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
# Class for page options in parse calls.
|
5
|
+
# @!attribute page_indexes [Array[Integer]] Zero-based list of page indexes.
|
6
|
+
# @!attribute operation [:KEEP_ONLY, :REMOVE] Operation to apply on the document, given the specified page indexes:
|
7
|
+
# * `:KEEP_ONLY` - keep only the specified pages, and remove all others.
|
8
|
+
# * `:REMOVE` - remove the specified pages, and keep all others.
|
9
|
+
# @!attribute on_min_pages [Integer, nil] Apply the operation only if the document has at least this many pages.
|
10
|
+
class PageOptions
|
11
|
+
attr_accessor :page_indexes, :operation, :on_min_pages
|
12
|
+
|
13
|
+
def initialize(params: {})
|
14
|
+
params ||= {}
|
15
|
+
params = params.transform_keys(&:to_sym)
|
16
|
+
@page_indexes = params.fetch(
|
17
|
+
:page_indexes,
|
18
|
+
[] # : Array[Integer]
|
19
|
+
)
|
20
|
+
@operation = params.fetch(:operation, :KEEP_ONLY)
|
21
|
+
@on_min_pages = params.fetch(:on_min_pages, nil)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -8,7 +8,7 @@ module Mindee
|
|
8
8
|
# @return [Hash]
|
9
9
|
attr_reader :error
|
10
10
|
# @return [Array<String>]
|
11
|
-
attr_reader :
|
11
|
+
attr_reader :resources
|
12
12
|
# @return [RequestStatus, Symbol]
|
13
13
|
attr_reader :status
|
14
14
|
# @return [Integer]
|
@@ -18,7 +18,7 @@ module Mindee
|
|
18
18
|
|
19
19
|
def initialize(server_response)
|
20
20
|
@error = server_response['error']
|
21
|
-
@
|
21
|
+
@resources = server_response['resources']
|
22
22
|
|
23
23
|
@status = if server_response['status'] == 'failure'
|
24
24
|
RequestStatus::FAILURE
|
@@ -8,9 +8,13 @@ module Mindee
|
|
8
8
|
module Common
|
9
9
|
# Potential values for queue in asynchronous calls.
|
10
10
|
module JobStatus
|
11
|
+
# Job is waiting.
|
11
12
|
WAITING = :waiting
|
13
|
+
# Job is processing.
|
12
14
|
PROCESSING = :processing
|
15
|
+
# Job is done.
|
13
16
|
COMPLETED = :completed
|
17
|
+
# Job failed.
|
14
18
|
FAILURE = :failed
|
15
19
|
end
|
16
20
|
|
@@ -21,7 +21,7 @@ module Mindee
|
|
21
21
|
# @return [Mindee::Inference]
|
22
22
|
attr_reader :inference
|
23
23
|
# Priority of the execution.
|
24
|
-
# @return [ExecutionPriority]
|
24
|
+
# @return [ExecutionPriority, Symbol, nil]
|
25
25
|
attr_reader :priority
|
26
26
|
# The time at which the file was tagged as reviewed.
|
27
27
|
# @return [Time, nil]
|
@@ -11,7 +11,7 @@ module Mindee
|
|
11
11
|
class Extras
|
12
12
|
# @return [CropperExtra, nil]
|
13
13
|
attr_reader :cropper
|
14
|
-
# @return [Mindee::Parsing::Common::Extras::FullTextOCRExtra
|
14
|
+
# @return [Mindee::Parsing::Common::Extras::FullTextOCRExtra]
|
15
15
|
attr_reader :full_text_ocr
|
16
16
|
# @return [RAGExtra, nil]
|
17
17
|
attr_reader :rag
|
@@ -26,7 +26,7 @@ module Mindee
|
|
26
26
|
@rag = Mindee::Parsing::Common::Extras::RAGExtra.new(raw_prediction['rag']) if raw_prediction['rag']
|
27
27
|
|
28
28
|
raw_prediction.each do |key, value|
|
29
|
-
instance_variable_set("@#{key}", value) unless ['cropper', 'full_text_ocr', 'rag'].include?(key)
|
29
|
+
instance_variable_set("@#{key}", value) unless ['cropper', 'full_text_ocr', 'rag'].include?(key.to_s)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -53,7 +53,7 @@ module Mindee
|
|
53
53
|
out_str << "\n:Product: #{@product.name} v#{@product.version}"
|
54
54
|
out_str << "\n:Rotation applied: #{is_rotation_applied}"
|
55
55
|
out_str << "\n\nPrediction\n=========="
|
56
|
-
out_str << "\n#{
|
56
|
+
out_str << "\n#{"#{@prediction}\n" if @prediction.to_s.size.positive?}"
|
57
57
|
if @pages.any? { |page| !page.prediction.nil? }
|
58
58
|
out_str << "\nPage Predictions\n================\n\n"
|
59
59
|
out_str << @pages.map(&:to_s).join("\n\n")
|
@@ -11,7 +11,7 @@ module Mindee
|
|
11
11
|
class OCRWord
|
12
12
|
# The confidence score, value will be between 0.0 and 1.0
|
13
13
|
# @return [Float]
|
14
|
-
|
14
|
+
attr_reader :confidence
|
15
15
|
# @return [String]
|
16
16
|
attr_reader :text
|
17
17
|
# @return [Mindee::Geometry::Quadrilateral]
|
@@ -36,7 +36,7 @@ module Mindee
|
|
36
36
|
# A list of words which are on the same line.
|
37
37
|
class OCRLine < Array
|
38
38
|
# @param prediction [Hash, nil]
|
39
|
-
# @param from_array [Array
|
39
|
+
# @param from_array [Array<OCRWord>, nil]
|
40
40
|
def initialize(prediction = nil, from_array = nil)
|
41
41
|
if !prediction.nil?
|
42
42
|
super(prediction.map { |word_prediction| OCRWord.new(word_prediction) })
|
@@ -48,9 +48,7 @@ module Mindee
|
|
48
48
|
# Sort the words on the line from left to right.
|
49
49
|
# @return [OCRLine]
|
50
50
|
def sort_on_x
|
51
|
-
from_array =
|
52
|
-
Geometry.get_min_max_x(word1.polygon).min <=> Geometry.get_min_max_x(word2.polygon).min
|
53
|
-
end
|
51
|
+
from_array = sort_by { |word| Geometry.get_min_max_x(word.polygon).min }
|
54
52
|
OCRLine.new(nil, from_array)
|
55
53
|
end
|
56
54
|
|
@@ -104,7 +102,7 @@ module Mindee
|
|
104
102
|
# @param indexes [Array<Integer>]
|
105
103
|
# @param lines [Array<OCRLine>]
|
106
104
|
def parse_one(sorted_words, current, indexes, lines)
|
107
|
-
line = OCRLine.new([])
|
105
|
+
line = OCRLine.new(nil, [])
|
108
106
|
sorted_words.each_with_index do |word, idx|
|
109
107
|
next if indexes.include?(idx)
|
110
108
|
|
@@ -5,7 +5,7 @@ module Mindee
|
|
5
5
|
module Common
|
6
6
|
# Page orientation
|
7
7
|
class Orientation
|
8
|
-
# @return [Integer]
|
8
|
+
# @return [Integer, nil]
|
9
9
|
attr_reader :page_id
|
10
10
|
# A prediction among these 3 possible outputs:
|
11
11
|
# * 0 degrees: the page is already upright
|
@@ -15,7 +15,7 @@ module Mindee
|
|
15
15
|
attr_reader :value
|
16
16
|
|
17
17
|
# @param prediction [Hash]
|
18
|
-
# @param page_id [Integer]
|
18
|
+
# @param page_id [Integer, nil]
|
19
19
|
def initialize(prediction, page_id)
|
20
20
|
@value = prediction['value']
|
21
21
|
@page_id = page_id
|
@@ -5,7 +5,12 @@ module Mindee
|
|
5
5
|
module Common
|
6
6
|
# Product information
|
7
7
|
class Product
|
8
|
-
|
8
|
+
# @return [String] Name of the product.
|
9
|
+
attr_reader :name
|
10
|
+
# @return [String?] Type of product.
|
11
|
+
attr_reader :type
|
12
|
+
# @return [String] Product version.
|
13
|
+
attr_reader :version
|
9
14
|
|
10
15
|
# @param prediction [Hash]
|
11
16
|
def initialize(prediction)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'string_field'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module Standard
|
8
|
+
# Represents physical-address information.
|
9
|
+
class AddressField < Mindee::Parsing::Standard::StringField
|
10
|
+
# Street number
|
11
|
+
# @return [String, nil]
|
12
|
+
attr_reader :street_number
|
13
|
+
# Street name
|
14
|
+
# @return [String, nil]
|
15
|
+
attr_reader :street_name
|
16
|
+
# PO Box number
|
17
|
+
# @return [String, nil]
|
18
|
+
attr_reader :po_box
|
19
|
+
# Address complement
|
20
|
+
# @return [String, nil]
|
21
|
+
attr_reader :address_complement
|
22
|
+
# City name.
|
23
|
+
# @return [String, nil]
|
24
|
+
attr_reader :city
|
25
|
+
# Postal or ZIP code.
|
26
|
+
# @return [String, nil]
|
27
|
+
attr_reader :postal_code
|
28
|
+
# State, province or region.
|
29
|
+
# @return [String, nil]
|
30
|
+
attr_reader :state
|
31
|
+
# Country.
|
32
|
+
# @return [String, nil]
|
33
|
+
attr_reader :country
|
34
|
+
|
35
|
+
def initialize(prediction, page_id = nil, reconstructed: false)
|
36
|
+
super
|
37
|
+
@street_number = prediction['street_number']
|
38
|
+
@street_name = prediction['street_name']
|
39
|
+
@po_box = prediction['po_box']
|
40
|
+
@address_complement = prediction['address_complement']
|
41
|
+
@city = prediction['city']
|
42
|
+
@postal_code = prediction['postal_code']
|
43
|
+
@state = prediction['state']
|
44
|
+
@country = prediction['country']
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -13,12 +13,12 @@ module Mindee
|
|
13
13
|
|
14
14
|
def initialize(prediction, page_id, reconstructed: false)
|
15
15
|
super
|
16
|
-
@value = @value.round(3) unless @value.
|
16
|
+
@value = @value.to_f.round(3).to_f unless @value.to_s.empty?
|
17
17
|
end
|
18
18
|
|
19
19
|
# @return [String]
|
20
20
|
def to_s
|
21
|
-
BaseField.float_to_string(@value)
|
21
|
+
@value.nil? ? '' : BaseField.float_to_string(@value.to_f)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -16,7 +16,7 @@ module Mindee
|
|
16
16
|
return in_str.to_s if max_col_size.nil?
|
17
17
|
|
18
18
|
in_str = in_str.to_s.gsub(%r{[\n\r\t]}, "\n" => '\\n', "\r" => '\\r', "\t" => '\\t')
|
19
|
-
in_str.to_s.length <= max_col_size.to_i ? in_str.to_s : "#{in_str[0..max_col_size.to_i - 4]}..."
|
19
|
+
in_str.to_s.length <= max_col_size.to_i ? in_str.to_s : "#{in_str[0..(max_col_size.to_i - 4)]}..."
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -52,7 +52,7 @@ module Mindee
|
|
52
52
|
out_h[:code] = @code.nil? ? '' : @code
|
53
53
|
out_h[:base] = @base.nil? ? '' : print_float(@base)
|
54
54
|
out_h[:rate] = @rate.nil? ? '' : print_float(@rate).to_s
|
55
|
-
out_h[:value] = @value.
|
55
|
+
out_h[:value] = @value.to_s.empty? ? '' : print_float(@value.to_f).to_s
|
56
56
|
out_h
|
57
57
|
end
|
58
58
|
|
@@ -12,11 +12,11 @@ module Mindee
|
|
12
12
|
|
13
13
|
# ID of the page (as given by the API).
|
14
14
|
# @return [Integer]
|
15
|
-
|
15
|
+
attr_reader :page_id
|
16
16
|
|
17
17
|
# List of word values
|
18
18
|
# @return [Array<UniversalObjectField, StringField>]
|
19
|
-
|
19
|
+
attr_reader :values
|
20
20
|
|
21
21
|
# ID of the page the object was found on.
|
22
22
|
# List of word values.
|
@@ -15,15 +15,18 @@ module Mindee
|
|
15
15
|
# @return [Float]
|
16
16
|
attr_reader :confidence
|
17
17
|
# Value as String
|
18
|
-
# @return [
|
19
|
-
|
18
|
+
# @return [String]
|
19
|
+
attr_reader :raw_value
|
20
|
+
# All values
|
21
|
+
# @return [Hash]
|
22
|
+
attr_reader :all_values
|
20
23
|
|
21
24
|
# ID of the page the object was found on.
|
22
25
|
# Confidence with which the value was assessed.
|
23
26
|
# Raw unprocessed value, as it was sent by the server.
|
24
27
|
|
25
28
|
def initialize(raw_prediction, page_id = nil)
|
26
|
-
@all_values = {} # : Hash[
|
29
|
+
@all_values = {} # : Hash[String | Symbol, untyped]
|
27
30
|
item_page_id = nil
|
28
31
|
raw_prediction.each do |name, value|
|
29
32
|
case name
|
@@ -95,7 +98,7 @@ module Mindee
|
|
95
98
|
end
|
96
99
|
|
97
100
|
def handle_default_field(name, value)
|
98
|
-
@all_values[name] = value
|
101
|
+
@all_values[name] = value&.to_s
|
99
102
|
end
|
100
103
|
end
|
101
104
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Base class for inference and job responses on the V2 API.
|
7
|
+
class CommonResponse
|
8
|
+
# @return [Hash]
|
9
|
+
attr_reader :raw_http
|
10
|
+
|
11
|
+
# @param http_response [Hash]
|
12
|
+
def initialize(http_response)
|
13
|
+
@raw_http = http_response
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Encapsulates information returned by the API when an error occurs.
|
7
|
+
class ErrorResponse
|
8
|
+
# @return [Integer] HTTP status code.
|
9
|
+
attr_reader :status
|
10
|
+
# @return [String] Error detail.
|
11
|
+
attr_reader :detail
|
12
|
+
|
13
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
14
|
+
def initialize(server_response)
|
15
|
+
@status = server_response['status']
|
16
|
+
@detail = server_response['detail']
|
17
|
+
end
|
18
|
+
|
19
|
+
# String representation.
|
20
|
+
# @return [String]
|
21
|
+
def to_s
|
22
|
+
"Error\n=====\n:Status: #{@status}\n:Detail: #{@detail}"
|
23
|
+
end
|
24
|
+
|
25
|
+
# Hash representation
|
26
|
+
# @return [Hash] Hash representation of the object.
|
27
|
+
def as_hash
|
28
|
+
{
|
29
|
+
status: @status,
|
30
|
+
detail: @detail,
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
# Field submodule for V2.
|
7
|
+
module Field
|
8
|
+
# Base class for V2 fields.
|
9
|
+
class BaseField
|
10
|
+
# @return [Integer] Level of indentation for rst display.
|
11
|
+
attr_reader :indent_level
|
12
|
+
|
13
|
+
# @return [FieldConfidence, nil] Confidence score for the field.
|
14
|
+
attr_reader :confidence
|
15
|
+
|
16
|
+
# @return [Array<FieldLocation>] List of locations the field was found at.
|
17
|
+
attr_reader :locations
|
18
|
+
|
19
|
+
# @param raw_prediction [Hash] Raw prediction hash.
|
20
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
21
|
+
def initialize(raw_prediction, indent_level = 0)
|
22
|
+
@indent_level = indent_level
|
23
|
+
@confidence = raw_prediction.key?('confidence') ? raw_prediction['confidence'] : nil
|
24
|
+
@locations = if raw_prediction.key?('locations')
|
25
|
+
raw_prediction['locations'].map do |location|
|
26
|
+
FieldLocation.new(location)
|
27
|
+
end
|
28
|
+
else
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Factory method to create appropriate field types.
|
34
|
+
# @param raw_prediction [Hash] Raw prediction hash.
|
35
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
36
|
+
# @return [BaseField] Appropriate field instance.
|
37
|
+
# @raise [MindeeError] If the field type isn't recognized.
|
38
|
+
def self.create_field(raw_prediction, indent_level = 0)
|
39
|
+
if raw_prediction.key?('items')
|
40
|
+
require_relative 'list_field'
|
41
|
+
return ListField.new(raw_prediction, indent_level)
|
42
|
+
end
|
43
|
+
|
44
|
+
if raw_prediction.key?('fields')
|
45
|
+
require_relative 'object_field'
|
46
|
+
return ObjectField.new(raw_prediction, indent_level)
|
47
|
+
end
|
48
|
+
|
49
|
+
if raw_prediction.key?('value')
|
50
|
+
require_relative 'simple_field'
|
51
|
+
return SimpleField.new(raw_prediction, indent_level)
|
52
|
+
end
|
53
|
+
|
54
|
+
raise Errors::MindeeError, "Unrecognized field format in #{raw_prediction.to_json}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mindee
|
4
|
+
module Parsing
|
5
|
+
module V2
|
6
|
+
module Field
|
7
|
+
# Confidence level of a field as returned by the V2 API.
|
8
|
+
class FieldConfidence
|
9
|
+
# @return [String] The confidence level value.
|
10
|
+
attr_reader :value
|
11
|
+
|
12
|
+
# Absolute certainty about the field's extraction.
|
13
|
+
CERTAIN = 'Certain'
|
14
|
+
# High certainty about the field's extraction.
|
15
|
+
HIGH = 'High'
|
16
|
+
# Medium certainty about the field's extraction.
|
17
|
+
MEDIUM = 'Medium'
|
18
|
+
# Low certainty about the field's extraction.
|
19
|
+
LOW = 'Low'
|
20
|
+
|
21
|
+
# List of valid values, as frozen strings.
|
22
|
+
VALID_VALUES = [CERTAIN, HIGH, MEDIUM, LOW].freeze
|
23
|
+
|
24
|
+
# @param value [String] The confidence level value.
|
25
|
+
# @raise [ArgumentError] If the value is not a valid confidence level.
|
26
|
+
def initialize(value)
|
27
|
+
unless VALID_VALUES.include?(value)
|
28
|
+
raise ArgumentError,
|
29
|
+
"Invalid confidence level: #{value}. Must be one of: #{VALID_VALUES.join(', ')}"
|
30
|
+
end
|
31
|
+
|
32
|
+
@value = value
|
33
|
+
end
|
34
|
+
|
35
|
+
# Create a FieldConfidence from a string value.
|
36
|
+
# @param value [String] The confidence level string.
|
37
|
+
# @return [FieldConfidence] The confidence instance.
|
38
|
+
def self.from_string(value)
|
39
|
+
new(value)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Check if this is a certain confidence level.
|
43
|
+
# @return [Boolean] True if confidence is certain.
|
44
|
+
def certain?
|
45
|
+
@value == CERTAIN
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check if this is a high confidence level.
|
49
|
+
# @return [Boolean] True if confidence is high.
|
50
|
+
def high?
|
51
|
+
@value == HIGH
|
52
|
+
end
|
53
|
+
|
54
|
+
# Check if this is a medium confidence level.
|
55
|
+
# @return [Boolean] True if confidence is medium.
|
56
|
+
def medium?
|
57
|
+
@value == MEDIUM
|
58
|
+
end
|
59
|
+
|
60
|
+
# Check if this is a low confidence level.
|
61
|
+
# @return [Boolean] True if confidence is low.
|
62
|
+
def low?
|
63
|
+
@value == LOW
|
64
|
+
end
|
65
|
+
|
66
|
+
# String representation of the confidence level.
|
67
|
+
# @return [String] The confidence level value.
|
68
|
+
def to_s
|
69
|
+
@value
|
70
|
+
end
|
71
|
+
|
72
|
+
# Compare two FieldConfidence instances.
|
73
|
+
# @param other [FieldConfidence] The other confidence to compare.
|
74
|
+
# @return [Boolean] True if they have the same value.
|
75
|
+
def ==(other)
|
76
|
+
other.is_a?(FieldConfidence) && @value == other.value
|
77
|
+
end
|
78
|
+
|
79
|
+
# Make instances comparable and hashable
|
80
|
+
alias eql? ==
|
81
|
+
|
82
|
+
# Inspect method for debugging.
|
83
|
+
# @return [String] Debug representation.
|
84
|
+
def inspect
|
85
|
+
"#<#{self.class.name}:#{@value}>"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../geometry/polygon'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Parsing
|
7
|
+
module V2
|
8
|
+
module Field
|
9
|
+
# Location of a field.
|
10
|
+
class FieldLocation
|
11
|
+
# @return [Mindee::Geometry::Polygon, nil] Polygon corresponding to the field location.
|
12
|
+
attr_reader :polygon
|
13
|
+
|
14
|
+
# @return [Integer, nil] Page on which the field is located.
|
15
|
+
attr_reader :page
|
16
|
+
|
17
|
+
# @param server_response [Hash] Raw server response hash.
|
18
|
+
def initialize(server_response)
|
19
|
+
polygon_data = server_response['polygon'] || server_response[:polygon]
|
20
|
+
@polygon = polygon_data ? Mindee::Geometry::Polygon.new(polygon_data) : nil
|
21
|
+
|
22
|
+
page_id = server_response['page'] || server_response[:page]
|
23
|
+
@page = page_id.is_a?(Float) || page_id.is_a?(Integer) ? page_id.to_i : nil
|
24
|
+
end
|
25
|
+
|
26
|
+
# String representation of the polygon (empty string when none).
|
27
|
+
#
|
28
|
+
# @return [String]
|
29
|
+
def to_s
|
30
|
+
@polygon ? @polygon.to_s : ''
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|