diff --git a/AyCode.Services/Nav/Ekaer/EkaerSubmitService.cs b/AyCode.Services/Nav/Ekaer/EkaerSubmitService.cs
index 0b23a30..3954287 100644
--- a/AyCode.Services/Nav/Ekaer/EkaerSubmitService.cs
+++ b/AyCode.Services/Nav/Ekaer/EkaerSubmitService.cs
@@ -22,9 +22,10 @@ public sealed class EkaerSubmitService : IEkaerSubmitService
{
ArgumentNullException.ThrowIfNull(operations);
- // 1) Validáció — bármilyen hiba esetén NEM küldünk; a teljes hibalistát visszaadjuk.
+ // 1) Validáció — csak BLOKKOLÓ (error) szintű hiba esetén NEM küldünk; a warning (pl. hiányzó rendszám,
+ // ami a felrakodásig pótolható) nem blokkol. A teljes üzenetlistát visszaadjuk (warningostul).
var errors = _validator.Validate(operations);
- if (errors.Count > 0)
+ if (errors.HasErrors())
return EkaerSubmitResult.Invalid(errors);
// 2) Request összeállítás. A Header/User példányt itt kell létrehozni (a generált ctor csak a
diff --git a/AyCode.Services/Nav/Ekaer/EkaerTradeCardValidator.cs b/AyCode.Services/Nav/Ekaer/EkaerTradeCardValidator.cs
index bbacb86..97aa306 100644
--- a/AyCode.Services/Nav/Ekaer/EkaerTradeCardValidator.cs
+++ b/AyCode.Services/Nav/Ekaer/EkaerTradeCardValidator.cs
@@ -84,7 +84,9 @@ public sealed class EkaerTradeCardValidator : IEkaerTradeCardValidator
}
// 3) Üzleti szabályok (az XSD nem jelöli [Required]-ként, de a NAV megköveteli).
- if (tradeCard.Vehicle is null) errors.Add(Error($"{path}.vehicle", "a vonó jármű (rendszám) kötelező — rendszám nélkül a NAV elutasítja a bejelentést"));
+ // A rendszám a NAV-nál legkésőbb a felrakodás megkezdéséig pótolható — a bejelentéskor NEM kötelező,
+ // ezért hiánya WARNING (a bejelentés beküldhető), nem blokkoló error. Lásd EKAER_OPERATIONS.md (create→finalize).
+ if (tradeCard.Vehicle is null) errors.Add(Warning($"{path}.vehicle", "a vonó jármű (rendszám) hiányzik — legkésőbb a felrakodás megkezdéséig pótolandó"));
if (tradeCard.Items.Count == 0) errors.Add(Error($"{path}.items", "legalább egy tétel szükséges"));
RequireText(tradeCard.SellerName, $"{path}.sellerName", "a feladó (eladó) neve kötelező", errors);
@@ -117,7 +119,7 @@ public sealed class EkaerTradeCardValidator : IEkaerTradeCardValidator
Validator.TryValidateProperty(property.GetValue(instance), context, local);
foreach (var result in local)
- errors.Add(new ValidationResult($"{path}.{property.Name}: {result.ErrorMessage}", result.MemberNames));
+ errors.Add(new EkaerValidationMessage(EkaerSeverity.Error, $"{path}.{property.Name}: {result.ErrorMessage}"));
}
}
@@ -127,5 +129,7 @@ public sealed class EkaerTradeCardValidator : IEkaerTradeCardValidator
errors.Add(Error(path, message));
}
- private static ValidationResult Error(string path, string message) => new($"{path}: {message}");
+ private static EkaerValidationMessage Error(string path, string message) => new(EkaerSeverity.Error, $"{path}: {message}");
+
+ private static EkaerValidationMessage Warning(string path, string message) => new(EkaerSeverity.Warning, $"{path}: {message}");
}
diff --git a/AyCode.Services/Nav/Ekaer/EkaerValidationMessage.cs b/AyCode.Services/Nav/Ekaer/EkaerValidationMessage.cs
new file mode 100644
index 0000000..a2cf304
--- /dev/null
+++ b/AyCode.Services/Nav/Ekaer/EkaerValidationMessage.cs
@@ -0,0 +1,37 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace AyCode.Services.Nav.Ekaer;
+
+/// Az EKÁER validációs üzenet súlyossága.
+public enum EkaerSeverity
+{
+ /// Nem blokkoló — a bejelentés beküldhető, de valamit pótolni kell (pl. a rendszám a felrakodásig).
+ Warning,
+
+ /// Blokkoló — a NAV elutasítaná; beküldés előtt javítandó.
+ Error,
+}
+
+///
+/// Súlyossággal (warning/error) bővített validációs eredmény. A -ból származik,
+/// így a meglévő fogyasztók (akik csak az ErrorMessage-et használják) változatlanul működnek; aki a
+/// szintet is akarja, a -t / a GetSeverity() kiterjesztést használja.
+///
+public sealed class EkaerValidationMessage(EkaerSeverity severity, string message) : ValidationResult(message)
+{
+ public EkaerSeverity Severity { get; } = severity;
+}
+
+/// Súlyosság-segédek a validációs eredmény-listához.
+public static class EkaerValidationExtensions
+{
+ /// A súlyosság; egy sima (nem ) eredmény konzervatívan .
+ public static EkaerSeverity GetSeverity(this ValidationResult result)
+ => result is EkaerValidationMessage m ? m.Severity : EkaerSeverity.Error;
+
+ /// Van-e blokkoló (error) szintű üzenet — ennek alapján NEM küldhető a bejelentés.
+ public static bool HasErrors(this IEnumerable results) => results.Any(r => r.GetSeverity() == EkaerSeverity.Error);
+
+ /// Van-e warning szintű üzenet (a beküldést nem blokkolja, de pótlandó).
+ public static bool HasWarnings(this IEnumerable results) => results.Any(r => r.GetSeverity() == EkaerSeverity.Warning);
+}