namespace DocumentOperator.Application.Common.DTOs;
///
/// Swiss QR Bill data transfer object (mapped from Codecrete Bill)
///
public record SwissQrBillDto
{
/// QR Bill standard version (e.g., "V2_0")
public required string Version { get; init; }
/// Payment amount (null if not specified)
public decimal? Amount { get; init; }
/// Payment currency (CHF or EUR)
public required string Currency { get; init; }
/// Creditor's IBAN account number
public required string Account { get; init; }
/// Creditor address
public required AddressDto Creditor { get; init; }
/// Payment reference type: "QRR", "SCOR", or "NON"
public required string ReferenceType { get; init; }
/// Payment reference (format depends on ReferenceType)
public string? Reference { get; init; }
/// Debtor address (optional)
public AddressDto? Debtor { get; init; }
/// Additional unstructured message (max 140 chars)
public string? UnstructuredMessage { get; init; }
/// Additional structured bill information
public string? BillInformation { get; init; }
/// Alternative payment schemes (max 2)
public IReadOnlyList? AlternativeSchemes { get; init; }
}
///
/// Address data transfer object (mapped from Codecrete Address)
///
public record AddressDto
{
/// Address type: "Structured" or "CombinedElements"
public required string Type { get; init; }
/// Name of person or company
public required string Name { get; init; }
/// Street name (structured address only)
public string? Street { get; init; }
/// House number (structured address only)
public string? HouseNo { get; init; }
///
/// Address line 1 (combined address only).
/// OBSOLETE: Use structured address instead. Will be removed when Codecrete v4 is adopted.
///
[Obsolete("Use structured address (Street + HouseNo) instead. This field will be removed when upgrading to Codecrete.SwissQRBill.Generator v4.x")]
public string? AddressLine1 { get; init; }
///
/// Address line 2 (combined address only).
/// OBSOLETE: Use structured address instead. Will be removed when Codecrete v4 is adopted.
///
[Obsolete("Use structured address (Street + HouseNo) instead. This field will be removed when upgrading to Codecrete.SwissQRBill.Generator v4.x")]
public string? AddressLine2 { get; init; }
/// Postal code
public required string PostalCode { get; init; }
/// Town/city name
public required string Town { get; init; }
/// Two-letter country code (ISO 3166-1 alpha-2)
public required string CountryCode { get; init; }
}
///
/// Alternative payment scheme (mapped from Codecrete AlternativeScheme)
///
public record AlternativeSchemeDto
{
/// Scheme name (e.g., "AV1", "AV2")
public required string Name { get; init; }
/// Scheme instruction/parameter
public required string Instruction { get; init; }
}