AyCode.Core/AyCode.Services/Nav
Loretta b3c82d6ad2 Add FruitBank EKÁER mapping layer and validation docs
- Introduced IFruitBankEkaerService and implementation for mapping and submitting Shipping as EKÁER tradeCards
- Added IShippingToEkaerMapper and ShippingToEkaerMapper for domain-to-NAV mapping with normalization logic
- Created EkaerMappingOptions for config-driven mapping inputs
- Added unit tests for mapping logic (ShippingToEkaerMapperTests)
- Expanded EKAER_VALIDATION.md with C# validation implementation details
- Updated README.md to clarify mapping/submission flow and project boundaries
- Improved OrderClientTests assertions for nullability and clarity
- Updated settings.local.json with new dev workflow commands
2026-06-02 15:45:46 +02:00
..
Ekaer Add EKÁER submit/validation layer with tests 2026-06-02 15:23:42 +02:00
docs Add FruitBank EKÁER mapping layer and validation docs 2026-06-02 15:45:46 +02:00
NavAuthHelper.cs Add NAV/EKÁER reporting layer to AyCode.Services 2026-06-01 15:40:35 +02:00
NavInterfaces.cs Add NAV/EKÁER reporting layer to AyCode.Services 2026-06-01 15:40:35 +02:00
NavReportException.cs Add NAV/EKÁER reporting layer to AyCode.Services 2026-06-01 15:40:35 +02:00
NavReportServiceBase.cs Add NAV/EKÁER reporting layer to AyCode.Services 2026-06-01 15:40:35 +02:00
NavXmlHelper.cs Add NAV/EKÁER reporting layer to AyCode.Services 2026-06-01 15:40:35 +02:00
README.md Add NAV/EKÁER reporting layer to AyCode.Services 2026-06-01 15:40:35 +02:00

README.md

Nav — NAV adatszolgáltatás (általános base réteg)

Általános, API-független infrastruktúra a magyar NAV felé történő XML-adatszolgáltatáshoz (EKÁER, Online Számla, jövőbeli NAV-jelentések). A konkrét API-k (pl. EKÁER) ebből származnak — itt nincs API-specifikus típus.

Tervezési háttér és a réteg-felosztás indoklása: a NAV-rendszerek REST-szerű HTTP POST + XML body-t használnak (nem SOAP), közös SHA-512 aláírás-auth-hal. A típusok API-nként külön XML namespace-ben generálódnak (EKÁER EKAER/1.0, Online Számla NTCA/2.0/common), ezért a közös rész viselkedés + interfész, nem közös típus.

Fájlok

Fájl Szerep
NavInterfaces.cs Közös szerződések: INavCredentials, INavRequestHeader, INavUserHeader, INavRequest, INavResult, INavResponse. A generált API-modellek partial class-szal implementálják őket.
NavAuthHelper.cs SHA-512 hash-ek: passwordHash és requestSignature (nagybetűs hex).
NavXmlHelper.cs UTF-8 XML (de)szerializáció (Utf8StringWriter-rel, hogy az XML-deklaráció utf-8 legyen).
NavReportException.cs NAV hiba (HTTP-szintű vagy funcCode != OK).
NavReportServiceBase.cs Abstract base: a teljes send-flow (auth → szerializál → POST → deszerializál → sikeresség-ellenőrzés).

Egy konkrét NAV API bekötése (2. réteg)

// 1) A generált request/response/header típusokra ráhúzzuk az interfészeket (partial, nem invazív):
public partial class BasicHeaderType : INavRequestHeader { }          // RequestId, Timestamp már megvannak
public partial class UserHeaderType : INavUserHeader
{
    string INavUserHeader.TaxNumber { get => VatNumber; set => VatNumber = value; } // EKÁER: VATNumber → TaxNumber
}
public partial class BasicRequestType : INavRequest
{
    INavRequestHeader INavRequest.RequestHeader => Header;
    INavUserHeader INavRequest.UserHeader => User;
}

// 2) A konkrét service a base-ből származik:
public class EkaerReportService
    : NavReportServiceBase<ManageTradeCardsRequest, ManageTradeCardsResponse>
{
    public EkaerReportService(HttpClient http, INavCredentials creds) : base(http, creds) { }
    protected override string OperationPath => "TradeCardManagementService/customer/manageTradeCards";
}

Platform-függetlenség

A HttpClient-et a hívó injektálja — a réteg nem köthető szerverhez (egy jövőbeli standalone MAUI app közvetlenül hívhatja). Böngésző-WASM-ből CORS miatt nincs közvetlen NAV-hívás; ott SignalR-en át a szerver proxyzik.

Nyitott pont

  • Az aláírás-timestamp időzónája (CET vs UTC) a docs/eKAERManagementService_2.2.pdf-ből pontosítandó (NavReportServiceBase.ApplyAuthentication, TODO). A header- és a signature-timestamp ugyanaz az időpont.

Referenciák (NAV dokumentáció)

A NAV hivatalos forrásai + LLM-barát kivonatok a docs/ mappában — teljes index: docs/README.md.

Kezdd a kivonatokkal (token-takarékos, a 2.2 MB PDF helyett):

Hiteles forrás: docs/eKAERManagementService_2.2.pdf + docs/ekaermanagement.xsd / docs/common.xsd. Online: https://ekaer.nav.gov.hu/faq/?page_id=9

Modell-újragenerálás (ha a séma frissül) — a common és ekaermanagement XSD-namespace-t külön C# namespace-be kell tenni, különben a TradeCardType (common: enum S/N ↔ ekaermanagement: class) ütközik:

xscgen --nullable --separateFiles --output <out> \
  --namespace "http://schemas.nav.gov.hu/EKAER/1.0/ekaermanagement=AyCode.Services.Nav.Ekaer.Models" \
  --namespace "http://schemas.nav.gov.hu/EKAER/1.0/common=AyCode.Services.Nav.Ekaer.Models.Common" \
  docs/ekaermanagement.xsd

Az xscgen az enum-tagokat PascalCase-eli (OKOk); az XML-érték az [XmlEnum]-ban marad.