namespace AyCode.Services.Nav;
///
/// 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.
///
public interface INavCredentials
{
/// Technikai felhasználónév (EKÁER: user, Online Számla: login).
string User { get; }
/// A jelszó nyers értéke. Ebből számolódik a passwordHash (SHA-512). A hash-t küldjük, sosem a nyers jelszót.
string Password { get; }
/// A titkos aláírókulcs (XML aláírókulcs). A requestSignature számításához.
string SigningKey { get; }
/// Adószám (EKÁER: VATNumber, Online Számla: taxNumber).
string TaxNumber { get; }
/// A NAV service báziscíme, pl. https://import.ekaer.nav.gov.hu (záró perjel nélkül vagy azzal).
string BaseUrl { get; }
}
///
/// 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 partial class-szal implementálja (a property-nevek általában
/// már egyeznek, így implicit teljesül).
///
public interface INavRequestHeader
{
/// Egyedi kérés-azonosító (minden requestnél más).
string RequestId { get; set; }
/// A kérés keletkezésének ideje. Ugyanaz az időpont, amiből a requestSignature timestamp-része képződik.
DateTime Timestamp { get; set; }
}
///
/// A NAV request auth-headerének közös szerződése. A 2 hash-mező (PasswordHash, RequestSignature)
/// 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 partial-ja explicit map-eli, ha a generált név eltér — pl. EKÁER VatNumber → TaxNumber).
///
public interface INavUserHeader
{
string User { get; set; }
string PasswordHash { get; set; }
string TaxNumber { get; set; }
string RequestSignature { get; set; }
}
///
/// Egy NAV authentikált kérés szerződése: hozzáférést ad a base-headerhez és az auth-headerhez, hogy a
/// egységesen feltölthesse őket — API-független módon.
///
public interface INavRequest
{
INavRequestHeader RequestHeader { get; }
INavUserHeader UserHeader { get; }
}
///
/// A NAV válasz eredmény-blokkjának közös szerződése (funcCode/reasonCode/msg absztrakciója).
///
public interface INavResult
{
/// Igaz, ha a feldolgozás sikeres (funcCode == OK).
bool IsSuccess { get; }
/// A végrehajtási eredmény kódja (reasonCode), ha van.
string? ReasonCode { get; }
/// Szöveges üzenet, jellemzően hiba/figyelmeztetés esetén.
string? Message { get; }
}
///
/// 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.
///
public interface INavResponse
{
INavResult Result { get; }
}