diff --git a/src/Mindee/Parsing/Common/AmountField.cs b/src/Mindee/Parsing/Common/AmountField.cs
index 720db80a..932e22ee 100644
--- a/src/Mindee/Parsing/Common/AmountField.cs
+++ b/src/Mindee/Parsing/Common/AmountField.cs
@@ -19,7 +19,7 @@ public class AmountField : BaseField
///
public override string ToString()
{
- return Value?.ToString("0.00");
+ return Value?.ToString(".00###");
}
}
}
diff --git a/src/Mindee/Parsing/Common/Locale.cs b/src/Mindee/Parsing/Common/Locale.cs
index 1e6683c1..f9bc8f6e 100644
--- a/src/Mindee/Parsing/Common/Locale.cs
+++ b/src/Mindee/Parsing/Common/Locale.cs
@@ -8,6 +8,8 @@ namespace Mindee.Parsing.Common
///
public class Locale
{
+ private string _language;
+
///
/// The confidence about the zone of the value extracted.
/// A value from 0 to 1.
@@ -28,7 +30,18 @@ public class Locale
///
/// fr
[JsonPropertyName("language")]
- public string Language { get; set; }
+ public string Language
+ {
+ get
+ {
+ return _language;
+ }
+ set
+ {
+ _language = value;
+ Value = value;
+ }
+ }
///
/// The country which has been detected.
@@ -37,6 +50,13 @@ public class Locale
[JsonPropertyName("country")]
public string Country { get; set; }
+ ///
+ /// Concatenation of lang and country codes.
+ ///
+ /// en-GB
+ [JsonPropertyName("value")]
+ public string Value { get; set; }
+
///
///
///
@@ -45,6 +65,10 @@ public override string ToString()
{
StringBuilder result = new StringBuilder();
+ if (!string.IsNullOrWhiteSpace(Value))
+ {
+ result.Append($"{Value}; ");
+ }
if (!string.IsNullOrWhiteSpace(Language))
{
result.Append($"{Language}; ");
diff --git a/src/Mindee/Parsing/Common/SummaryHelper.cs b/src/Mindee/Parsing/Common/SummaryHelper.cs
new file mode 100644
index 00000000..80e5550c
--- /dev/null
+++ b/src/Mindee/Parsing/Common/SummaryHelper.cs
@@ -0,0 +1,14 @@
+using System.Text.RegularExpressions;
+
+namespace Mindee.Parsing.Common
+{
+ internal static class SummaryHelper
+ {
+ public static string Clean(string summary)
+ {
+ Regex cleanSpace = new Regex(" \n", RegexOptions.Multiline);
+
+ return cleanSpace.Replace(summary, "\n");
+ }
+ }
+}
diff --git a/src/Mindee/Parsing/Common/Tax.cs b/src/Mindee/Parsing/Common/Tax.cs
index 0872f49f..140eb501 100644
--- a/src/Mindee/Parsing/Common/Tax.cs
+++ b/src/Mindee/Parsing/Common/Tax.cs
@@ -49,7 +49,7 @@ public override string ToString()
if (Rate != null)
{
- result.Append($" {Rate}%");
+ result.Append($" {Rate?.ToString("0.00")}%");
}
if (Code != null)
diff --git a/src/Mindee/Parsing/Cropper/CropperV1Prediction.cs b/src/Mindee/Parsing/Cropper/CropperV1Prediction.cs
index 86bafb37..b6093741 100644
--- a/src/Mindee/Parsing/Cropper/CropperV1Prediction.cs
+++ b/src/Mindee/Parsing/Cropper/CropperV1Prediction.cs
@@ -28,9 +28,7 @@ public override string ToString()
result.Append($"Cropping: {string.Join("\n ", Cropping?.Select(c => c))}\n");
result.Append("------------------------\n");
- Regex cleanSpace = new Regex(" \n", RegexOptions.Multiline);
-
- return cleanSpace.Replace(result.ToString(), "\n");
+ return SummaryHelper.Clean(result.ToString());
}
}
}
diff --git a/src/Mindee/Parsing/Invoice/InvoiceLineItem.cs b/src/Mindee/Parsing/Invoice/InvoiceLineItem.cs
index 86a32252..35a79e54 100644
--- a/src/Mindee/Parsing/Invoice/InvoiceLineItem.cs
+++ b/src/Mindee/Parsing/Invoice/InvoiceLineItem.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using System.Text;
using System.Text.Json.Serialization;
using Mindee.Parsing.Common;
@@ -77,11 +76,11 @@ public sealed class InvoiceLineItem : FinancialPredictionBase
public override string ToString()
{
string productCode = ProductCode?.ToString() ?? "";
- string quantity = Quantity?.ToString() ?? "";
- string unitPrice = UnitPrice?.ToString() ?? "";
- string totalAmount = TotalAmount?.ToString() ?? "";
- string tax = TotalAmount?.ToString() ?? "";
- tax += TaxRate != null ? $" ({TaxRate} %)" : "";
+ string quantity = Quantity?.ToString(".00###") ?? "";
+ string unitPrice = UnitPrice?.ToString(".00###") ?? "";
+ string totalAmount = TotalAmount?.ToString(".00###") ?? "";
+ string tax = TaxAmount?.ToString(".00###") ?? "";
+ tax += TaxRate != null ? $" ({TaxRate?.ToString(".00")}%)" : "";
string description = Description ?? "";
if (description.Length > 32)
{
@@ -93,7 +92,7 @@ public override string ToString()
quantity.PadRight(6),
unitPrice.PadRight(7),
totalAmount.PadRight(8),
- tax.PadRight(14),
+ tax.PadRight(16),
description
);
}
diff --git a/src/Mindee/Parsing/Invoice/InvoiceV3Prediction.cs b/src/Mindee/Parsing/Invoice/InvoiceV3Prediction.cs
index 4e0cb6dc..74e90375 100644
--- a/src/Mindee/Parsing/Invoice/InvoiceV3Prediction.cs
+++ b/src/Mindee/Parsing/Invoice/InvoiceV3Prediction.cs
@@ -99,15 +99,15 @@ public override string ToString()
result.Append($"Customer name: {Customer.Value}\n");
result.Append($"Customer company registration: {string.Join("; ", CustomerCompanyRegistrations.Select(c => c.Value))}\n");
result.Append($"Customer address: {string.Join("; ", CustomerAddress.Value)}\n");
- result.Append($"Payment details: {string.Join("\n ", PaymentDetails.Select(p => p))}\n");
- result.Append($"Company numbers: {string.Join("\n ", CompanyRegistrations.Select(c => c.Value))}\n");
+ result.Append($"Payment details: {string.Join("; ", PaymentDetails.Select(p => p))}\n");
+ result.Append($"Company numbers: {string.Join("; ", CompanyRegistrations.Select(c => c.Value))}\n");
result.Append($"Taxes: {string.Join("\n ", Taxes.Select(t => t))}\n");
result.Append($"Total taxes: {TotalTaxes}\n");
result.Append($"Locale: {Locale}\n");
result.Append("----------------------\n");
- return result.ToString();
+ return SummaryHelper.Clean(result.ToString());
}
}
}
diff --git a/src/Mindee/Parsing/Invoice/InvoiceV4Prediction.cs b/src/Mindee/Parsing/Invoice/InvoiceV4Prediction.cs
index 7435bd09..28199ddc 100644
--- a/src/Mindee/Parsing/Invoice/InvoiceV4Prediction.cs
+++ b/src/Mindee/Parsing/Invoice/InvoiceV4Prediction.cs
@@ -98,30 +98,30 @@ public override string ToString()
if (LineItems.Any())
{
lineItems =
- "\n Code | QTY | Price | Amount | Tax (Rate) | Description\n ";
+ "\n Code | QTY | Price | Amount | Tax (Rate) | Description\n ";
lineItems += string.Join("\n ", LineItems.Select(item => item.ToString()));
}
- StringBuilder result = new StringBuilder("----- Invoice v4 -----\n");
- result.Append($"Invoice number: {InvoiceNumber.Value}\n");
+ StringBuilder result = new StringBuilder("----- Invoice V4 -----\n");
result.Append($"Locale: {Locale}\n");
+ result.Append($"Invoice number: {InvoiceNumber.Value}\n");
result.Append($"Invoice date: {Date.Value}\n");
result.Append($"Invoice due date: {DueDate.Value}\n");
result.Append($"Supplier name: {SupplierName.Value}\n");
result.Append($"Supplier address: {SupplierAddress.Value}\n");
- result.Append($"Supplier company registrations: {string.Join("\n ", SupplierCompanyRegistrations.Select(c => c.Value))}\n");
- result.Append($"Supplier payment details: {string.Join("\n ", SupplierPaymentDetails.Select(p => p))}\n");
+ result.Append($"Supplier company registrations: {string.Join("; ", SupplierCompanyRegistrations.Select(c => c.Value))}\n");
+ result.Append($"Supplier payment details: {string.Join("; ", SupplierPaymentDetails.Select(p => p))}\n");
result.Append($"Customer name: {CustomerName.Value}\n");
result.Append($"Customer company registrations: {string.Join("; ", CustomerCompanyRegistrations.Select(c => c.Value))}\n");
result.Append($"Customer address: {string.Join("; ", CustomerAddress.Value)}\n");
+ result.Append($"Line Items: {lineItems}\n");
result.Append($"Taxes: {string.Join("\n ", Taxes.Select(t => t))}\n");
- result.Append($"Line items: {lineItems}\n");
result.Append($"Total taxes: {TotalTaxes}\n");
- result.Append($"Total amount including taxes: {TotalAmount.Value}\n");
result.Append($"Total amount excluding taxes: {TotalNet.Value}\n");
- result.Append("----------------------");
+ result.Append($"Total amount including taxes: {TotalAmount.Value}\n");
+ result.Append("----------------------\n");
- return result.ToString();
+ return SummaryHelper.Clean(result.ToString());
}
}
}
diff --git a/src/Mindee/Parsing/Receipt/ReceiptV4Prediction.cs b/src/Mindee/Parsing/Receipt/ReceiptV4Prediction.cs
index 07423da6..925d2a3d 100644
--- a/src/Mindee/Parsing/Receipt/ReceiptV4Prediction.cs
+++ b/src/Mindee/Parsing/Receipt/ReceiptV4Prediction.cs
@@ -58,21 +58,21 @@ public sealed class ReceiptV4Prediction : FinancialPredictionBase
///
public override string ToString()
{
- StringBuilder result = new StringBuilder("-----Receipt data-----\n");
- result.Append($"Total amount including taxes: {TotalAmount}\n");
- result.Append($"Total amount excluding taxes: {TotalNet}\n");
+ StringBuilder result = new StringBuilder("----- Receipt V4 -----\n");
+ result.Append($"Total amount: {TotalAmount}\n");
+ result.Append($"Total net: {TotalNet}\n");
result.Append($"Tip: {Tip}\n");
result.Append($"Date: {Date.Value}\n");
result.Append($"Category: {Category.Value}\n");
result.Append($"Time: {Time.Value}\n");
- result.Append($"Merchant name: {Supplier.Value}\n");
+ result.Append($"Supplier name: {Supplier.Value}\n");
result.Append($"Taxes: {string.Join("\n ", Taxes.Select(t => t))}\n");
result.Append($"Total taxes: {TotalTax}\n");
result.Append($"Locale: {Locale}\n");
- result.Append("----------------------");
+ result.Append("----------------------\n");
- return result.ToString();
+ return SummaryHelper.Clean(result.ToString());
}
}
}
diff --git a/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV3Test.cs b/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV3Test.cs
index cfc45866..9addeaf8 100644
--- a/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV3Test.cs
+++ b/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV3Test.cs
@@ -6,6 +6,38 @@ namespace Mindee.UnitTests.Parsing.Invoice
[Trait("Category", "Invoice V3")]
public class InvoiceV3Test
{
+ [Fact]
+ public async Task Predict_CheckSummary()
+ {
+ var mindeeAPi = GetMindeeApiForInvoice();
+ var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter());
+
+ var expected = File.ReadAllText("Resources/invoice/response_v3/doc_to_string.txt");
+
+ var indexFilename = expected.IndexOf("Filename");
+ var indexEOL = expected.IndexOf("\n", indexFilename);
+
+ Assert.Equal(
+ expected.Remove(indexFilename, indexEOL - indexFilename + 1),
+ prediction.Inference.Prediction.ToString());
+ }
+
+ [Fact]
+ public async Task Predict_CheckSummary_WithMultiplePages()
+ {
+ var mindeeAPi = GetMindeeApiForInvoice();
+ var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter());
+
+ var expected = File.ReadAllText("Resources/invoice/response_v3/page0_to_string.txt");
+
+ var indexFilename = expected.IndexOf("Filename");
+ var indexEOL = expected.IndexOf("\n", indexFilename);
+
+ Assert.Equal(
+ expected.Remove(indexFilename, indexEOL - indexFilename + 1),
+ prediction.Inference.Pages.First().Prediction.ToString());
+ }
+
[Fact]
public async Task Predict_MustSuccessForCustomer()
{
diff --git a/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV4Test.cs b/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV4Test.cs
index 7f2c44d4..b90262de 100644
--- a/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV4Test.cs
+++ b/tests/Mindee.UnitTests/Parsing/Invoice/InvoiceV4Test.cs
@@ -6,6 +6,38 @@ namespace Mindee.UnitTests.Parsing.Invoice
[Trait("Category", "Invoice V4")]
public class InvoiceV4Test
{
+ [Fact]
+ public async Task Predict_CheckSummary()
+ {
+ var mindeeAPi = GetMindeeApiForInvoice();
+ var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter());
+
+ var expected = File.ReadAllText("Resources/invoice/response_v4/doc_to_string.txt");
+
+ var indexFilename = expected.IndexOf("Filename");
+ var indexEOL = expected.IndexOf("\n", indexFilename);
+
+ Assert.Equal(
+ expected.Remove(indexFilename, indexEOL - indexFilename + 1),
+ prediction.Inference.Prediction.ToString());
+ }
+
+ [Fact]
+ public async Task Predict_CheckSummary_WithMultiplePages()
+ {
+ var mindeeAPi = GetMindeeApiForInvoice();
+ var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter());
+
+ var expected = File.ReadAllText("Resources/invoice/response_v4/page0_to_string.txt");
+
+ var indexFilename = expected.IndexOf("Filename");
+ var indexEOL = expected.IndexOf("\n", indexFilename);
+
+ Assert.Equal(
+ expected.Remove(indexFilename, indexEOL - indexFilename + 1),
+ prediction.Inference.Pages.First().Prediction.ToString());
+ }
+
[Fact]
public async Task Predict_MustSuccessForInvoiceNumber()
{
diff --git a/tests/Mindee.UnitTests/Parsing/Receipt/ReceiptV4Test.cs b/tests/Mindee.UnitTests/Parsing/Receipt/ReceiptV4Test.cs
index 3c6da182..4e252ece 100644
--- a/tests/Mindee.UnitTests/Parsing/Receipt/ReceiptV4Test.cs
+++ b/tests/Mindee.UnitTests/Parsing/Receipt/ReceiptV4Test.cs
@@ -6,15 +6,36 @@ namespace Mindee.UnitTests.Parsing.Receipt
[Trait("Category", "Receipt V4")]
public class ReceiptV4Test
{
- [Fact(Skip = "Waiting for the summary format update.")]
- public async Task Predict_MustSuccess()
+ [Fact]
+ public async Task Predict_CheckSummary()
{
var mindeeAPi = GetMindeeApiForReceipt();
var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter());
var expected = File.ReadAllText("Resources/receipt/response_v4/doc_to_string.txt");
- Assert.Equal(expected, prediction.ToString());
+ var indexFilename = expected.IndexOf("Filename");
+ var indexEOL = expected.IndexOf("\n", indexFilename);
+
+ Assert.Equal(
+ expected.Remove(indexFilename, indexEOL - indexFilename + 1),
+ prediction.Inference.Prediction.ToString());
+ }
+
+ [Fact]
+ public async Task Predict_CheckSummary_WithMultiplePages()
+ {
+ var mindeeAPi = GetMindeeApiForReceipt();
+ var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter());
+
+ var expected = File.ReadAllText("Resources/receipt/response_v4/page0_to_string.txt");
+
+ var indexFilename = expected.IndexOf("Filename");
+ var indexEOL = expected.IndexOf("\n", indexFilename);
+
+ Assert.Equal(
+ expected.Remove(indexFilename, indexEOL - indexFilename + 1),
+ prediction.Inference.Pages.First().Prediction.ToString());
}
[Fact]
diff --git a/tests/resources b/tests/resources
index 739128c6..7290bb01 160000
--- a/tests/resources
+++ b/tests/resources
@@ -1 +1 @@
-Subproject commit 739128c697362df42710dce47075cac8101caac5
+Subproject commit 7290bb01ace842b90e150ee68f533776d7527471