using AyCode.Services.Nav.Ekaer; using AyCode.Services.Nav.Ekaer.Models; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Services.Ekaer; namespace FruitBank.Common.Server.Services.Ekaer; /// /// A FruitBank szerver-oldali EKÁER-fogyasztója: egy -et leképez EKÁER tradeCard-okra /// (a mapperrel), majd beküldi (az általános submit-orchestrátorral). Ez a vékony, projekt-specifikus réteg; /// az általános NAV/EKÁER logika (validátor, submit, manage) az AyCode.Services-ben él. /// public interface IFruitBankEkaerService { /// /// Leképezi és beküldi a szállítmányt. Az eredmény vagy validációs hibák (nem ment ki kérés), /// vagy a NAV-válasz — lásd . /// Task SubmitShippingAsync(Shipping shipping, OperationType operation = OperationType.Create, CancellationToken cancellationToken = default); /// /// Egy szállítólevélből legenerálja az EKÁER tradeCard XML-t és validálja — a (meglévő vagy új) /// rekordot tölti: XmlDoc + Status /// ( / ) + ErrorText. /// NEM perzisztál és NEM hív NAV-ot — a mentés (upsert) a hívó SignalR endpoint dolga. /// /// A szállítólevél a betöltött gráffal (Partner, Items+ProductDto, Shipping→járművek). /// A dokumentum meglévő rekordja (újrageneráláskor); null → új rekord készül. EkaerHistory GenerateEkaerXmlDocument(ShippingDocument document, EkaerHistory? ekaerHistory = null); /// /// Egy kimenő rendelésből () legenerálja az EKÁER tradeCard XML-t és validálja — /// a (meglévő vagy új) rekordot tölti (IsOutgoing = true). Mi vagyunk az /// ELADÓ, a vevő a CÍMZETT (belföldi értékesítés). NEM perzisztál és NEM hív NAV-ot — a mentés a hívó dolga. /// EkaerHistory GenerateEkaerXmlDocument(OrderDto order, EkaerHistory? ekaerHistory = null); /// /// Eldönti egy bejövő (Shipping, Partner) CSOPORT EKÁER-kötelezettségét: külföldi (a feladó és a címzett /// országkódja eltér) → mindig kötelező; belföld → az AGGREGÁLT tömeg/érték a küszöbhöz; érvénytelen országkód → /// . A küszöb-summa a csoport ÖSSZES dokumentumának tételeire megy. /// EkaerObligationResult EvaluateObligation(IReadOnlyCollection documents); /// Eldönti egy kimenő rendelés EKÁER-kötelezettségét (ugyanaz a logika, a rendelés tételeire). EkaerObligationResult EvaluateObligation(OrderDto order); }