84 lines
3.3 KiB
C#
84 lines
3.3 KiB
C#
namespace AyCode.Services.Nav;
|
|
|
|
/// <summary>
|
|
/// NAV API hitelesítő adatok. A konkrét megvalósítás konfigurációból (appsettings / secret store) tölti —
|
|
/// soha NEM hardcode-olva a forráskódban.
|
|
/// </summary>
|
|
public interface INavCredentials
|
|
{
|
|
/// <summary>Technikai felhasználónév (EKÁER: <c>user</c>, Online Számla: <c>login</c>).</summary>
|
|
string User { get; }
|
|
|
|
/// <summary>A jelszó nyers értéke. Ebből számolódik a <c>passwordHash</c> (SHA-512). A hash-t küldjük, sosem a nyers jelszót.</summary>
|
|
string Password { get; }
|
|
|
|
/// <summary>A titkos aláírókulcs (XML aláírókulcs). A <c>requestSignature</c> számításához.</summary>
|
|
string SigningKey { get; }
|
|
|
|
/// <summary>Adószám (EKÁER: <c>VATNumber</c>, Online Számla: <c>taxNumber</c>).</summary>
|
|
string TaxNumber { get; }
|
|
|
|
/// <summary>A NAV service báziscíme, pl. <c>https://import.ekaer.nav.gov.hu</c> (záró perjel nélkül vagy azzal).</summary>
|
|
string BaseUrl { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// A NAV request alap-headerének közös szerződése (requestId + timestamp). A NAV-rendszerek mind hordozzák ezt.
|
|
/// Az adott NAV API generált header-típusa <c>partial class</c>-szal implementálja (a property-nevek általában
|
|
/// már egyeznek, így implicit teljesül).
|
|
/// </summary>
|
|
public interface INavRequestHeader
|
|
{
|
|
/// <summary>Egyedi kérés-azonosító (minden requestnél más).</summary>
|
|
string RequestId { get; set; }
|
|
|
|
/// <summary>A kérés keletkezésének ideje. Ugyanaz az időpont, amiből a <c>requestSignature</c> timestamp-része képződik.</summary>
|
|
DateTime Timestamp { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// A NAV request auth-headerének közös szerződése. A 2 hash-mező (<c>PasswordHash</c>, <c>RequestSignature</c>)
|
|
/// elem-neve azonos minden NAV API-ban; a felhasználó- és adószám-mező C#-szinten egységesítve (a generált
|
|
/// típus <c>partial</c>-ja explicit map-eli, ha a generált név eltér — pl. EKÁER <c>VatNumber</c> → <c>TaxNumber</c>).
|
|
/// </summary>
|
|
public interface INavUserHeader
|
|
{
|
|
string User { get; set; }
|
|
string PasswordHash { get; set; }
|
|
string TaxNumber { get; set; }
|
|
string RequestSignature { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Egy NAV authentikált kérés szerződése: hozzáférést ad a base-headerhez és az auth-headerhez, hogy a
|
|
/// <see cref="NavReportServiceBase{TRequest,TResponse}"/> egységesen feltölthesse őket — API-független módon.
|
|
/// </summary>
|
|
public interface INavRequest
|
|
{
|
|
INavRequestHeader RequestHeader { get; }
|
|
INavUserHeader UserHeader { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// A NAV válasz eredmény-blokkjának közös szerződése (funcCode/reasonCode/msg absztrakciója).
|
|
/// </summary>
|
|
public interface INavResult
|
|
{
|
|
/// <summary>Igaz, ha a feldolgozás sikeres (funcCode == OK).</summary>
|
|
bool IsSuccess { get; }
|
|
|
|
/// <summary>A végrehajtási eredmény kódja (reasonCode), ha van.</summary>
|
|
string? ReasonCode { get; }
|
|
|
|
/// <summary>Szöveges üzenet, jellemzően hiba/figyelmeztetés esetén.</summary>
|
|
string? Message { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Egy NAV válasz szerződése: hozzáférést ad az eredmény-blokkhoz, hogy a base egységesen ellenőrizhesse a sikerességet.
|
|
/// </summary>
|
|
public interface INavResponse
|
|
{
|
|
INavResult Result { get; }
|
|
}
|