using AyCode.Services.Nav.Ekaer.Models; using TradeReasonType = AyCode.Services.Nav.Ekaer.Models.Common.TradeReasonType; namespace FruitBank.Common.Services.Ekaer; /// /// Irány-független, normalizált szállítmány-modell. A bejövő (ShippingDocument-csoport) és a kimenő /// (OrderDto) forrás EBBE képződik (a adapterei), és innen épül MIND a /// NAV tradeCard (), MIND a bejelentés-kötelezettség /// (). Így az irányfüggő tudás a két adapterre szorul, a közös logika egy helyen van. /// Szerver-oldali köztes típus — NEM megy a SignalR-dróton. /// /// /// A fel-/lerakodási hely és a jármű már a NAV-típus (, ), /// mert a saját telephely (company.Site) kész LocationType (Phone/Email/FELIR-mezőkkel) — azt átalakítás nélkül, /// MEZŐVESZTÉS nélkül kell átengedni. A normalizálás (kötelezettséghez számít) a feladó/címzett országkódjára és a /// tételek tömeg/érték-aggregálására korlátozódik. /// public sealed class EkaerConsignment { /// A forrás azonosítója (bejövőnél ShippingDocument.Id, kimenőnél Order.Id). Csoport-kiértékelésnél /// (több dokumentum) az első forrásé — a kötelezettség-döntés nem használja. public int ForeignKey { get; init; } public bool IsOutgoing { get; init; } /// Számla-pénznem (ISO 4217). A tétel már KISZÁMOLT HUF-ban. public string? Currency { get; init; } /// Feladó / eladó (a kötelezettség az országkódját nézi). public EkaerEndpoint Seller { get; init; } = new(); /// Címzett / vevő (a kötelezettség az országkódját nézi). public EkaerEndpoint Buyer { get; init; } = new(); /// Felrakodási hely (NAV LocationType — pl. a saját telephely átengedve). public LocationType? LoadLocation { get; init; } /// Lerakodási hely (NAV LocationType — pl. a saját telephely átengedve). public LocationType? UnloadLocation { get; init; } public IReadOnlyList Lines { get; init; } = []; public BasicVehicleDetailType? Vehicle { get; init; } public BasicVehicleDetailType? Trailer { get; init; } public string? CarrierName { get; init; } } /// Egy fél (feladó/címzett) normalizálatlan adatai a NAV seller/destination mezőkhöz ÉS a kötelezettség /// országkód-vizsgálatához. (A cím egysoros; a tagolt fel-/lerakodási helyet a /// / hordozza.) public sealed class EkaerEndpoint { public string? Name { get; init; } public string? VatNumber { get; init; } public string? CountryCode { get; init; } public string? FullAddress { get; init; } } /// Egy normalizált tétel. A és a már KISZÁMOLT (HUF-ban), /// hogy a küszöb-summa és a tradeCard ugyanazt használja (egyetlen érték-forrás). public sealed class EkaerLine { public string ExternalId { get; init; } = string.Empty; public string? Vtsz { get; init; } public string? Name { get; init; } public double WeightKg { get; init; } public long? ValueHuf { get; init; } public TradeReasonType TradeReason { get; init; } }