# Receipt OCR .NET The .NET OCR SDK supports the Receipt API . Using the sample below , we are going to illustrate how to extract the data that we want using the OCR SDK. Quick-Start using Mindee; using Mindee.Input; using Mindee.Product.Receipt; string apiKey = "my-api-key"; string filePath = "/path/to/the/file.ext";... The .NET OCR SDK supports the [Receipt API](https://platform.mindee.com/mindee/expense_receipts). Using the [sample below](https://github.com/mindee/client-lib-test-data/blob/main/products/expense_receipts/default_sample.jpg), we are going to illustrate how to extract the data that we want using the OCR SDK. ![Receipt sample](https://github.com/mindee/client-lib-test-data/blob/main/products/expense_receipts/default_sample.jpg?raw=true) # Quick-Start ```csharp using Mindee; using Mindee.Input; using Mindee.Product.Receipt; string apiKey = "my-api-key"; string filePath = "/path/to/the/file.ext"; // Construct a new client MindeeClient mindeeClient = new MindeeClient(apiKey); // Load an input source as a path string // Other input types can be used, as mentioned in the docs var inputSource = new LocalInputSource(filePath); // Call the API and parse the input var response = await mindeeClient .ParseAsync(inputSource); // Print a summary of all the predictions System.Console.WriteLine(response.Document.ToString()); // Print only the document-level predictions // System.Console.WriteLine(response.Document.Inference.Prediction.ToString()); ``` You can also call this product asynchronously: ```csharp using Mindee; using Mindee.Input; using Mindee.Product.Receipt; string apiKey = "my-api-key"; string filePath = "/path/to/the/file.ext"; // Construct a new client MindeeClient mindeeClient = new MindeeClient(apiKey); // Load an input source as a path string // Other input types can be used, as mentioned in the docs var inputSource = new LocalInputSource(filePath); // Call the product asynchronously with auto-polling var response = await mindeeClient .EnqueueAndParseAsync(inputSource); // Print a summary of all the predictions System.Console.WriteLine(response.Document.ToString()); // Print only the document-level predictions // System.Console.WriteLine(response.Document.Inference.Prediction.ToString()); ``` **Output (RST):** ```rst ######## Document ######## :Mindee ID: d96fb043-8fb8-4adc-820c-387aae83376d :Filename: default_sample.jpg Inference ######### :Product: mindee/expense_receipts v5.3 :Rotation applied: Yes Prediction ========== :Expense Locale: en-GB; en; GB; GBP; :Purchase Category: food :Purchase Subcategory: restaurant :Document Type: EXPENSE RECEIPT :Purchase Date: 2016-02-26 :Purchase Time: 15:20 :Total Amount: 10.20 :Total Net: 8.50 :Total Tax: 1.70 :Tip and Gratuity: :Taxes: +---------------+--------+----------+---------------+ | Base | Code | Rate (%) | Amount | +===============+========+==========+===============+ | 8.50 | VAT | 20.00 | 1.70 | +---------------+--------+----------+---------------+ :Supplier Name: Clachan :Supplier Company Registrations: Type: VAT NUMBER, Value: 232153895 Type: VAT NUMBER, Value: 232153895 :Supplier Address: 34 Kingley Street W1B 50H :Supplier Phone Number: 02074940834 :Receipt Number: 54/7500 :Line Items: +--------------------------------------+----------+--------------+------------+ | Description | Quantity | Total Amount | Unit Price | +======================================+==========+==============+============+ | Meantime Pale | 2.00 | 10.20 | | +--------------------------------------+----------+--------------+------------+ Page Predictions ================ Page 0 ------ :Expense Locale: en-GB; en; GB; GBP; :Purchase Category: food :Purchase Subcategory: restaurant :Document Type: EXPENSE RECEIPT :Purchase Date: 2016-02-26 :Purchase Time: 15:20 :Total Amount: 10.20 :Total Net: 8.50 :Total Tax: 1.70 :Tip and Gratuity: :Taxes: +---------------+--------+----------+---------------+ | Base | Code | Rate (%) | Amount | +===============+========+==========+===============+ | 8.50 | VAT | 20.00 | 1.70 | +---------------+--------+----------+---------------+ :Supplier Name: Clachan :Supplier Company Registrations: Type: VAT NUMBER, Value: 232153895 Type: VAT NUMBER, Value: 232153895 :Supplier Address: 34 Kingley Street W1B 50H :Supplier Phone Number: 02074940834 :Receipt Number: 54/7500 :Line Items: +--------------------------------------+----------+--------------+------------+ | Description | Quantity | Total Amount | Unit Price | +======================================+==========+==============+============+ | Meantime Pale | 2.00 | 10.20 | | +--------------------------------------+----------+--------------+------------+ ``` # Field Types ## Standard Fields These fields are generic and used in several products. ### BaseField Each prediction object contains a set of fields that inherit from the generic `BaseField` class. A typical `BaseField` object will have the following attributes: * **Confidence** (`double?`): the confidence score of the field prediction. * **BoundingBox** (`BoundingBox`): contains exactly 4 relative vertices (points) coordinates of a right rectangle containing the field in the document. * **Polygon** (`Polygon`): contains the relative vertices coordinates (`Polygon` extends `List`) of a polygon containing the field in the image. * **PageId** (`int?`): the ID of the page, always `null` when at document-level. > **Note:** A `Point` simply refers to a List of `double`. Aside from the previous attributes, all basic fields have access to a custom `ToString` method that can be used to print their value as a string. ### AmountField An amount field `AmountField` extends `BaseField`, but also implements: * **Value** (`double?`): corresponds to the field value. Can be `null` if no value was extracted. ### ClassificationField The classification field `ClassificationField` extends `BaseField`, but also implements: * **Value** (`strong`): corresponds to the field value. > Note: a classification field's `value is always a `string`. ### CompanyRegistration Aside from the basic `BaseField` attributes, the company registration field `CompanyRegistration` also implements the following: * **Type** (`string`): the type of company. * **Value** (`string`): corresponds to the field value. * **ToTableLine()**: a method that formats the data to fit in a .rst display. ### StringField The text field `StringField` extends `BaseField`, but also implements: * **Value** (`string`): corresponds to the field value. * **RawValue** (`string`): corresponds to the raw value as it appears on the document. ### DateField The date field `DateField` extends `StringField`, but also implements: * **DateObject** (`DateTime?`): an accessible representation of the value as a C# object. Can be `null`. ### Locale The locale field `Locale` extends `BaseField`, but also implements: * **Language** (`string`): ISO 639-1 language code (e.g.: `en` for English). Can be `null`. * **Country** (`string`): ISO 3166-1 alpha-2 or ISO 3166-1 alpha-3 code for countries (e.g.: `GRB` or `GB` for "Great Britain"). Can be `null`. * **Currency** (`string`): ISO 4217 code for currencies (e.g.: `USD` for "US Dollars"). Can be `null`. ### Taxes #### Tax Aside from the basic `BaseField` attributes, the tax field `Tax` also implements the following: * **Rate** (`double?`): the tax rate applied to an item expressed as a percentage. Can be `null`. * **Code** (`string`): tax code (or equivalent, depending on the origin of the document). * **Base** (`double`): base amount used for the tax. Can be `null`. * **Value** (`double`): the value of the tax. Can be `null`. > Note: currently `Tax` is not used on its own, and is accessed through a parent `Taxes` object, a list-like structure. #### Taxes (List) The `Taxes` field represents a List of `Tax` objects. As it is the representation of several objects, it has access to a custom `ToString` method that can render a `Tax` object as a table line. ## Specific Fields Fields which are specific to this product; they are not used in any other product. ### Line Items Field List of all line items on the receipt. A `ReceiptV5LineItem` implements the following attributes: * **Description** (`string`): The item description. * **Quantity** (`double`): The item quantity. * **TotalAmount** (`double`): The item total amount. * **UnitPrice** (`double`): The item unit price. # Attributes The following fields are extracted for Receipt V5: ## Purchase Category **Category**: The purchase category of the receipt. #### Possible values include: - 'toll' - 'food' - 'parking' - 'transport' - 'accommodation' - 'gasoline' - 'telecom' - 'miscellaneous' - 'software' - 'shopping' - 'energy' ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.Category.Value); ``` ## Purchase Date **Date**: The date the purchase was made. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.Date.Value); ``` ## Document Type **DocumentType**: The type of receipt: EXPENSE RECEIPT or CREDIT CARD RECEIPT. #### Possible values include: - 'EXPENSE RECEIPT' - 'CREDIT CARD RECEIPT' ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.DocumentType.Value); ``` ## Line Items **LineItems**(List<[ReceiptV5LineItem](#line-items-field)>): List of all line items on the receipt. ```csharp foreach (var LineItemsElem in result.Document.Inference.Prediction.LineItems) { System.Console.WriteLine(LineItemsElem.Value); } ``` ## Expense Locale **Locale**: The locale of the document. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.Locale.Value); ``` ## Receipt Number **ReceiptNumber**: The receipt number or identifier. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.ReceiptNumber.Value); ``` ## Purchase Subcategory **Subcategory**: The purchase subcategory of the receipt for transport and food. #### Possible values include: - 'plane' - 'taxi' - 'train' - 'restaurant' - 'shopping' - 'other' - 'groceries' - 'cultural' - 'electronics' - 'office_supplies' - 'micromobility' - 'car_rental' - 'public' - 'delivery' - null ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.Subcategory.Value); ``` ## Supplier Address **SupplierAddress**: The address of the supplier or merchant. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.SupplierAddress.Value); ``` ## Supplier Company Registrations **SupplierCompanyRegistrations**: List of company registration numbers associated to the supplier. ```csharp foreach (var SupplierCompanyRegistrationsElem in result.Document.Inference.Prediction.SupplierCompanyRegistrations) { System.Console.WriteLine(SupplierCompanyRegistrationsElem.Value); } ``` ## Supplier Name **SupplierName**: The name of the supplier or merchant. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.SupplierName.Value); ``` ## Supplier Phone Number **SupplierPhoneNumber**: The phone number of the supplier or merchant. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.SupplierPhoneNumber.Value); ``` ## Taxes **Taxes**: The list of taxes present on the receipt. ```csharp foreach (var TaxesElem in result.Document.Inference.Prediction.Taxes) { System.Console.WriteLine(TaxesElem.Value); } ``` ## Purchase Time **Time**: The time the purchase was made. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.Time.Value); ``` ## Tip and Gratuity **Tip**: The total amount of tip and gratuity. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.Tip.Value); ``` ## Total Amount **TotalAmount**: The total amount paid: includes taxes, discounts, fees, tips, and gratuity. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.TotalAmount.Value); ``` ## Total Net **TotalNet**: The net amount paid: does not include taxes, fees, and discounts. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.TotalNet.Value); ``` ## Total Tax **TotalTax**: The sum of all taxes. ```csharp System.Console.WriteLine(result.Document.Inference.Prediction.TotalTax.Value); ``` # Questions? [Join our Slack](https://join.slack.com/t/mindee-community/shared_invite/zt-2d0ds7dtz-DPAF81ZqTy20chsYpQBW5g)