From 09402fc10b5a7de02e9e2b25f48b3322ba1b052f Mon Sep 17 00:00:00 2001 From: Kvin Date: Fri, 16 Dec 2022 15:15:39 +0100 Subject: [PATCH] feat: Support US Bank Check V1 --- src/Mindee/Parsing/Common/PositionField.cs | 9 +-- .../Us/BankCheck/BankCheckV1Prediction.cs | 81 +++++++++++++++++++ .../Parsing/Us/BankCheckV1Test.cs | 36 +++++++++ 3 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 src/Mindee/Parsing/Us/BankCheck/BankCheckV1Prediction.cs create mode 100644 tests/Mindee.UnitTests/Parsing/Us/BankCheckV1Test.cs diff --git a/src/Mindee/Parsing/Common/PositionField.cs b/src/Mindee/Parsing/Common/PositionField.cs index 8817ee99..2e2629b3 100644 --- a/src/Mindee/Parsing/Common/PositionField.cs +++ b/src/Mindee/Parsing/Common/PositionField.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Text; using System.Text.Json.Serialization; namespace Mindee.Parsing.Common @@ -13,25 +12,25 @@ public sealed class PositionField /// Straight rectangle. /// [JsonPropertyName("bounding_box")] - public List> BoundingBox { get; set; } + public List> BoundingBox { get; set; } = new List>(); /// /// Free polygon with up to 30 vertices. /// [JsonPropertyName("polygon")] - public List> Polygon { get; set; } + public List> Polygon { get; set; } = new List>(); /// /// Free polygon with 4 vertices. /// [JsonPropertyName("quadrangle")] - public List> Quadrangle { get; set; } + public List> Quadrangle { get; set; } = new List>(); /// /// Rectangle that may be oriented (can go beyond the canvas). /// [JsonPropertyName("rectangle")] - public List> Rectangle { get; set; } + public List> Rectangle { get; set; } = new List>(); /// /// A prettier reprensentation of the current model values. diff --git a/src/Mindee/Parsing/Us/BankCheck/BankCheckV1Prediction.cs b/src/Mindee/Parsing/Us/BankCheck/BankCheckV1Prediction.cs new file mode 100644 index 00000000..4a329cb2 --- /dev/null +++ b/src/Mindee/Parsing/Us/BankCheck/BankCheckV1Prediction.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using Mindee.Parsing.Common; + +namespace Mindee.Parsing.Us.BankCheck +{ + /// + /// The us bank check model for the v1. + /// + [Endpoint("bank_check", "1")] + public sealed class BankCheckV1Prediction : PredictionBase + { + /// + /// Payer's bank account number. + /// + [JsonPropertyName("account_number")] + public StringField AccountNumber { get; set; } + + /// + /// Total including taxes. + /// + [JsonPropertyName("amount")] + public AmountField Amount { get; set; } + + /// + /// Payer's bank account number. + /// + [JsonPropertyName("check_number")] + public StringField CheckNumber { get; set; } + + /// + /// Check's position in the image. + /// + [JsonPropertyName("check_position")] + public PositionField CheckPosition { get; set; } + + /// + /// Date the check was issued. + /// + [JsonPropertyName("date")] + public StringField IssuanceDate { get; set; } + + /// + /// List of payees (full name or company name). + /// + [JsonPropertyName("payees")] + public IList Payees { get; set; } = new List(); + + /// + /// Payer's bank account routing number. + /// + [JsonPropertyName("routing_number")] + public StringField RoutingNumber { get; set; } + + /// + /// Signatures' positions in the image. + /// + [JsonPropertyName("signatures_positions")] + public IList SignaturesPositions { get; set; } = new List(); + + /// + /// A prettier reprensentation of the current model values. + /// + public override string ToString() + { + StringBuilder result = new StringBuilder("----- US Bank Check V1 -----\n"); + result.Append($"Routing number: {RoutingNumber?.Value}\n"); + result.Append($"Account number: {AccountNumber?.Value}\n"); + result.Append($"Check number: {CheckNumber?.Value}\n"); + result.Append($"Date: {IssuanceDate?.Value}\n"); + result.Append($"Amount: {Amount?.Value}\n"); + result.Append($"Payees: {string.Join(", ", Payees.Select(gn => gn.Value))}\n"); + + result.Append("----------------------\n"); + + return SummaryHelper.Clean(result.ToString()); + } + } +} diff --git a/tests/Mindee.UnitTests/Parsing/Us/BankCheckV1Test.cs b/tests/Mindee.UnitTests/Parsing/Us/BankCheckV1Test.cs new file mode 100644 index 00000000..ccdfb98d --- /dev/null +++ b/tests/Mindee.UnitTests/Parsing/Us/BankCheckV1Test.cs @@ -0,0 +1,36 @@ +using Mindee.Parsing; +using Mindee.Parsing.Us.BankCheck; + +namespace Mindee.UnitTests.Parsing.ShippingContainer +{ + [Trait("Category", "US Bank Check")] + public class BankCheckV1Test + { + [Fact] + public async Task Predict_CheckSummary() + { + var mindeeAPi = GetMindeeApiForCarteVitale(); + var prediction = await mindeeAPi.PredictAsync(ParsingTestBase.GetFakePredictParameter()); + + var expected = File.ReadAllText("Resources/us/bank_check/response_v1/doc_to_string.txt"); + + Assert.Equal( + CleaningResult(expected), + prediction.Inference.Prediction.ToString()); + } + + private string CleaningResult(string expectedSummary) + { + var indexFilename = expectedSummary.IndexOf("Filename"); + var indexFilenameEOL = expectedSummary.IndexOf("\n", indexFilename); + string cleanedSummary = expectedSummary.Remove(indexFilename, indexFilenameEOL - indexFilename + 1); + + return cleanedSummary; + } + + private MindeeApi GetMindeeApiForCarteVitale(string fileName = "Resources/us/bank_check/response_v1/complete.json") + { + return ParsingTestBase.GetMindeeApi(fileName); + } + } +}