Add Swiss QR Code extraction feature

Introduced DTOs for request and response to handle Swiss QR Code extraction from PDF documents. Implemented `ExtractSwissQrCodeHandler` to process the extraction using `ISwissQrCodeProcessor`. Added validation for the query with `ExtractSwissQrCodeValidator`. Developed unit tests to ensure correct behavior for successful and failure scenarios.
This commit is contained in:
OlgunR
2026-06-26 08:46:42 +02:00
parent 47cba50d0f
commit 586fd4a207
6 changed files with 233 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
namespace DocumentOperator.Application.Common.DTOs;
/// <summary>
/// Request to extract Swiss QR Code from a PDF document.
/// The QR code must be located on the last page of the document.
/// </summary>
/// <param name="References">Array of reference strings to pass through in the response</param>
/// <param name="Base64Pdf">PDF document encoded as Base64 string</param>
public record ExtractSwissQrCodeRequest(
IReadOnlyList<string> References,
string Base64Pdf
);

View File

@@ -0,0 +1,46 @@
namespace DocumentOperator.Application.Common.DTOs;
/// <summary>
/// Response containing extracted Swiss QR Code data and passed-through references.
/// </summary>
/// <param name="References">Reference strings passed through from the request</param>
/// <param name="QrCodeData">Parsed Swiss QR Code data from the last page of the PDF</param>
public record ExtractSwissQrCodeResponse(
IReadOnlyList<string> References,
SwissQrCodeDataDto QrCodeData
);
/// <summary>
/// Swiss QR Code data according to Swiss QR Bill Standard 2.0
/// </summary>
public record SwissQrCodeDataDto(
string QrType,
string Version,
string CodingType,
string Iban,
AddressDataDto Creditor,
AddressDataDto? UltimateCreditor,
decimal? Amount,
string Currency,
AddressDataDto? UltimateDebtor,
string ReferenceType,
string? Reference,
string? UnstructuredMessage,
string? BillInformation,
IReadOnlyList<string>? AlternativeProcedureParameters
);
/// <summary>
/// Address data (creditor or debtor) in Swiss QR Code
/// </summary>
public record AddressDataDto(
string AddressType,
string Name,
string? Street,
string? BuildingNumber,
string? AddressLine1,
string? AddressLine2,
string PostalCode,
string City,
string Country
);