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
This commit is contained in:
parent
3db26fbfa3
commit
b3c82d6ad2
|
|
@ -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 `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 `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.)
|
||||||
|
|
|
||||||
|
|
@ -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 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ó).
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue