diff --git a/AyCode.Services/Nav/docs/EKAER_VALIDATION.md b/AyCode.Services/Nav/docs/EKAER_VALIDATION.md index cc22cb5..78d3ebe 100644 --- a/AyCode.Services/Nav/docs/EKAER_VALIDATION.md +++ b/AyCode.Services/Nav/docs/EKAER_VALIDATION.md @@ -58,3 +58,15 @@ Normál bejelentésnél (`tradeCardType=N`) **mindig** kell fel- és lerakodási ## A `funcCode`/`reasonCode` C# leképezése A `BaseResultType` (funcCode/reasonCode/msg) a `Nav/NavInterfaces.cs` `INavResult`-jára húzódik rá (`IsSuccess` = `funcCode == OK`). A `NavReportServiceBase` ez alapján dob `NavReportException`-t a `reasonCode`-dal. + +## A validáció C# megvalósítása + +A fenti szabályokat a **`EkaerTradeCardValidator`** (`Nav/Ekaer/`) ellenőrzi a leképzett tradeCard-okon, **beküldés előtt**, hibalistával (nem áll meg az első hibánál): + +- **Séma-szint:** a generált modellek `[Required]` / `[RegularExpression]` / hossz-attribútumai (rekurzívan a tradeCard + tételek + jármű + helyszínek fölött), a `System.ComponentModel.DataAnnotations.Validator`-ral. A `*Value`/`*Specified` segéd-property-ket kihagyja (a default `DateTime` különben tévesen bukna a timestamp-patternen). +- **Üzleti szabályok** (az XSD-ben nem `[Required]`, de a NAV megköveteli): vonó jármű kötelező, legalább egy tétel, feladó/címzett név+adószám+ország. +- **`productVtsz` üres-string:** a modellen `[Required(AllowEmptyStrings=true)]` + pattern miatt az `""` elcsúszna a sémán (a `null` bukik, az `""` nem) — ezért a validátor külön lezárja. + +A **`EkaerSubmitService`** (`Nav/Ekaer/`) a kapu: `Validate` → ha a hibalista nem üres, **nem küld** (`EkaerSubmitResult.Invalid`); egyébként `EkaerManageService.ManageAsync`. + +> ⚠️ **Nyitott (value):** a tétel `value` a NAV szerint **2021-től > 0 kötelező** (lásd a Tétel-validáció szakaszt), a validátor viszont **jelenleg nem követeli** — mert a FruitBank-mapper a deviza/FX tisztázásáig nem tölti. Amíg ez nyitott, a NAV **elutasíthatja** a beküldést. Lezárandó: a value kitöltése (deviza→HUF) + a validátorban `value > 0` üzleti szabály. (Plugin `EKAER_TODO` #3/#10.) diff --git a/AyCode.Services/Nav/docs/README.md b/AyCode.Services/Nav/docs/README.md index c63e815..93168c7 100644 --- a/AyCode.Services/Nav/docs/README.md +++ b/AyCode.Services/Nav/docs/README.md @@ -23,4 +23,12 @@ A NAV adatszolgáltatás (jelenleg EKÁER) hivatalos forrásai + **LLM-barát ki ## A réteg-kód -A base réteg (interfészek, auth, send-flow) doksija: [`../README.md`](../README.md). A generált modellek: `Nav/Ekaer/Models/`. +A base réteg (interfészek, auth, send-flow) doksija: [`../README.md`](../README.md). + +Az EKÁER-kód a `Nav/Ekaer/`-ben: +- generált modellek: `Nav/Ekaer/Models/` (+ `EkaerNavAdapters.cs` — az `INav*` interfészek a generált típusokon) +- `EkaerManageService` / `EkaerQueryService` — NAV HTTP (manage / query) +- `EkaerTradeCardValidator` — a [`EKAER_VALIDATION.md`](EKAER_VALIDATION.md) szabályainak ellenőrzése (séma + üzleti), hibalistával +- `EkaerSubmitService` / `EkaerSubmitResult` — beküldés-orchestráció (validate → send) + +Ez mind **általános** NAV/EKÁER réteg. A FruitBank-specifikus leképezés (`Shipping → tradeCard`) NEM itt van, hanem a fogyasztó oldalon: `FruitBank.Common/Services/Ekaer/` (mapper) + `FruitBank.Common.Server/Services/Ekaer/` (fogyasztó).