using BS.Shared.DataContracts; using BS.Shared.DataContracts.GkvAbrechnung; using BS.Shared.Exceptions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BS.Shared.Core { public static class Validator { public static bool? IsValid(ValidationType val_type, string val_str) { if (string.IsNullOrEmpty(val_str)) return null; switch (val_type) { case ValidationType.CustomerVersichertenstatus: return IsVersichertenstatusValid(val_str); case ValidationType.CustomerVersichertennummer: return IsVersichertennummerValid(val_str); case ValidationType.OrganisationIKNumber: return IsIKNumberValid(val_str); case ValidationType.OrganisationLeistungserbringergruppe: return IsLeistungserbringergruppeValid(val_str); case ValidationType.OrganisationBezDatenannahmestelle: return IsBezDatenannahmestelleValid(val_str); } return false; } public static string InvalidTooltipTxt(ValidationType val_type) { switch (val_type) { case ValidationType.CustomerVersichertenstatus: return "CustomerVersichertenstatus invalid"; case ValidationType.CustomerVersichertennummer: return "CustomerVersichertennummer invalid"; case ValidationType.OrganisationIKNumber: return "OrganisationIKNumber invalid"; case ValidationType.OrganisationLeistungserbringergruppe: return "OrganisationLeistungserbringergruppe invalid"; case ValidationType.OrganisationBezDatenannahmestelle: return "OrganisationBezDatenannahmestelle invalid"; } return "xxx"; } public static string ValidateCustomer(string insuranceNumber, string versichertenStatus) { bool valid_number = IsVersichertennummerValid(insuranceNumber); bool valid_status = IsVersichertenstatusValid(versichertenStatus); if (!valid_number && !valid_status) return $"Versichtertennummer & -status des {Translation.Translator.Translate("Klient/in")} ungültig."; else if (!valid_number) return $"Versichertennummer des {Translation.Translator.Translate("Klient/in")} ungültig"; else if (!valid_status) return $"Versichertenstatus des {Translation.Translator.Translate("Klient/in")} ungültig"; return null; } public static void ValidateMandator(MandatorDC mandatordc) { if (mandatordc == null) throw new GkvException("Mandator ist null"); if (!Validator.IsIKNumberValid(mandatordc.IKLeistungserbringer)) throw new GkvException($"Die IK Nummer des Leistungserbringers \"{mandatordc.IKLeistungserbringer}\" ist ungültig."); } public static void ValidateCustomer(CustomerDC customerDC) { string error = null; if (customerDC == null) error = "Customer ist null"; else if (!IsVersichertennummerValid(customerDC.InsuranceNumber)) error = $"Klient/in \"{customerDC.LastName}, {customerDC.FirstName}\" hat keine gültige Versichertennummer"; else if (!IsVersichertenstatusValid(customerDC.VersichertenStatus)) error = $"Klient/in \"{customerDC.LastName}, {customerDC.FirstName}\" hat keinen gültigen Versichertenstatus"; if (error != null) throw new GkvException(error); } public static void ValidateOrganisation(OrganisationDC orga) { string error = null; if (orga == null) error = "Organisation ist null"; else if (!IsLeistungserbringergruppeValid(orga.Leistungserbringergruppe)) error = $"Die Organisation \"{orga.Name}\" hat keine gültige Leistungserbringergruppe: \"{orga.Leistungserbringergruppe}\". Erwarten werden 5 Stellen für das Tarifkennzeichen alleine oder 7 Stellen für den Abrechnungscode und für das Tarifkennzeichen zusammen."; else if (!IsIKNumberValid(orga.IKKrankenkasse)) error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Krankenkasse Kennzeichen: \"{orga.IKKrankenkasse}\"."; else if (!IsIKNumberValid(orga.IKKostentrager)) error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Kostenträger Kennzeichen: \"{orga.IKKostentrager}\"."; else if (!IsIKNumberValid(orga.IKDatenannahmestelle)) error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Datenannahmestelle Kennzeichen: \"{orga.IKDatenannahmestelle}\"."; else if (string.IsNullOrWhiteSpace(orga.BezDatenannahmestelle)) error = $"Die Organisation \"{orga.Name}\" hat keine gültige Bezeichnung Datenannahmestelle: \"{orga.BezDatenannahmestelle}\"."; if (error != null) throw new GkvException(error); } public static bool IsOrganisationInformationValid(string ik_datenannahmestelle, string ik_kostentrager, string ik_krankenkasse, string bez_datenannahmestelle) => IsIKNumberValid(ik_datenannahmestelle, ik_kostentrager, ik_krankenkasse) && IsBezDatenannahmestelleValid(bez_datenannahmestelle); public static bool IsIKNumberValid(params string[] iks) => iks?.All(IsIKNumberValid) ?? false; public static bool IsBezDatenannahmestelleValid(string bez_datenannahmestelle) { return !string.IsNullOrWhiteSpace(bez_datenannahmestelle); } public static bool IsIKNumberValid(string iknummer) { if (iknummer == null) return false; iknummer = iknummer.Trim(); if (iknummer.Length != 9) return false; return int.TryParse(iknummer, out int x); } public static bool IsVersichertennummerValid(string nummer) { if (nummer == null) return false; nummer = nummer.Trim(); if (nummer.Length < 6) return false; if (nummer.Length > 12) return false; return true; } public static bool IsVersichertenstatusValid(string status) { if (status == null) return false; status = status.Trim(); if (status.Length == 0) return false; if (status.Length == 6) return false; if (status.Length >= 8) return false; return true; } public static bool IsLeistungserbringergruppeValid(string code) { if (code == null) return false; code = code.Trim(); if (code.Length != 5 && code.Length != 7) return false; return true; } } }