From e5fe4f35037795791a585185f6049109041de4d9 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Tue, 9 Jul 2024 13:07:01 +0200 Subject: [PATCH] Final tests, DakotaKTDReader funktioniert soweit --- Dakota/Logic/DakotaKTDReader.cs | 81 +++++++++++++++++++++++++- Dakota/Models/Schlüssels/Schlüssel.cs | 34 ++++++++++- DakotaUnitTest/DakotaReaderUnitTest.cs | 58 ++++++++++++++++++ DakotaUnitTest/DakotaUnitTest.csproj | 8 ++- DakotaUnitTest/UnitTest1.cs | 14 ----- 5 files changed, 178 insertions(+), 17 deletions(-) create mode 100644 DakotaUnitTest/DakotaReaderUnitTest.cs delete mode 100644 DakotaUnitTest/UnitTest1.cs diff --git a/Dakota/Logic/DakotaKTDReader.cs b/Dakota/Logic/DakotaKTDReader.cs index 4072c0088..1807b6da4 100644 --- a/Dakota/Logic/DakotaKTDReader.cs +++ b/Dakota/Logic/DakotaKTDReader.cs @@ -1,4 +1,6 @@ -using Dakota.Models.Nachrichten; +using Dakota.Models; +using Dakota.Models.Nachrichten; +using Dakota.Models.Segmente.KTD; using System; using System.Collections.Generic; using System.IO; @@ -29,6 +31,83 @@ namespace Dakota.Logic } } + public int GetFileCount() => FileDictionary.Count(); + + public int GetAllFileEntryCount() => FileDictionary.Sum(x => x.Value.Count); + + public Tuple GetIKNummern(string ikkrankenkasse, string abrechnungscode, string tarifkennzeichen) + { + foreach (var kv in FileDictionary) + { + var search = GetIKNummern(kv.Value, ikkrankenkasse, abrechnungscode, tarifkennzeichen); + + if (search is object) + return search; + } + + return null; + } + + internal Tuple GetIKNummern(Dictionary dict, string ikkrankenkasse, string abrechnungscode, string tarifkennzeichen, string kostentrager = null) + { + if (kostentrager is null) + kostentrager = ikkrankenkasse; + + var search = dict.SingleOrDefault(kv => kv.Key == kostentrager).Value; + + // Hat keinen Verweis auf eine KK gefunden + if (search is null) + return null; + + var verweis = search.SegmentVKG.FirstOrDefault(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.Kostentrager); + + // Hat Verweis auf weiteren Kostenträger gefunden + if (verweis is object && verweis.IKVerknüpfungspartners != kostentrager) + return GetIKNummern(dict, ikkrankenkasse, abrechnungscode, tarifkennzeichen, verweis.IKVerknüpfungspartners); + + var datenannahmestellen = search.SegmentVKG.Where(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.DatenannahmestelleMitEntschlusselungsbefugnis); + + // Hat keinen Verweis auf Kostenträger oder Datenannahmestelle gefunden + if (datenannahmestellen is null || !datenannahmestellen.Any()) + return null; + + if (datenannahmestellen.Count() == 1) + return GetIKNummern(datenannahmestellen.First(), kostentrager, ikkrankenkasse); + + var datenannahmestellen_2 = datenannahmestellen.Where(x => x.Abrechnungscode == abrechnungscode); + + if (datenannahmestellen_2.Count() == 1) + return GetIKNummern(datenannahmestellen_2.First(), kostentrager, ikkrankenkasse); + + var datenannahmestellen_3 = datenannahmestellen.Where(x => x.Tarifkennzeichen == tarifkennzeichen); + + if (datenannahmestellen_3.Count() == 1) + return GetIKNummern(datenannahmestellen_3.First(), kostentrager, ikkrankenkasse); + + throw new DakotaException($"Keine oder mehrere Datenannahmestellen für {ikkrankenkasse} gefunden."); + } + + internal Tuple GetIKNummern(SegmentKTDVKG vkg, string kostentrager, string ikkrankenkasse) + { + return new Tuple(vkg.IKVerknüpfungspartners, kostentrager, ikkrankenkasse); + } + + //internal NachrichtKTD FindNachricht(string ikkrankenkasse) + //{ + // foreach (var dict in FileDictionary.Values) + // { + // var search = FindNachrichtInDict(dict, ikkrankenkasse); + + // if (search is object) + // return search; + // } + + // return null; + //} + + //internal NachrichtKTD FindNachrichtInDict(Dictionary dict, string ikkrankenkasse) + // => dict.SingleOrDefault(kv => kv.Key == ikkrankenkasse).Value; + public void foo(string filename, string[] lines) { var length = lines.Length; diff --git a/Dakota/Models/Schlüssels/Schlüssel.cs b/Dakota/Models/Schlüssels/Schlüssel.cs index 58b1f9948..3a29c9b50 100644 --- a/Dakota/Models/Schlüssels/Schlüssel.cs +++ b/Dakota/Models/Schlüssels/Schlüssel.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace Dakota.Models.Schlüssels { [DebuggerDisplay("{Value}")] - public abstract class Schlüssel + public abstract class Schlüssel : IEquatable { public string Value { get; set; } @@ -27,5 +27,37 @@ namespace Dakota.Models.Schlüssels return null; } + + public static bool operator ==(Schlüssel obj1, Schlüssel obj2) + { + if (ReferenceEquals(obj1, obj2)) + return true; + if (ReferenceEquals(obj1, null)) + return false; + if (ReferenceEquals(obj2, null)) + return false; + return obj1.Equals(obj2); + } + public static bool operator !=(Schlüssel obj1, Schlüssel obj2) => !(obj1 == obj2); + + public bool Equals(Schlüssel other) + { + if (ReferenceEquals(other, null)) + return false; + if (ReferenceEquals(this, other)) + return true; + return Value.Equals(other.Value); + } + + public override bool Equals(object obj) => Equals(obj as Schlüssel); + + public override int GetHashCode() + { + unchecked + { + int hashCode = Value.GetHashCode(); + return hashCode; + } + } } } diff --git a/DakotaUnitTest/DakotaReaderUnitTest.cs b/DakotaUnitTest/DakotaReaderUnitTest.cs new file mode 100644 index 000000000..6abed3f27 --- /dev/null +++ b/DakotaUnitTest/DakotaReaderUnitTest.cs @@ -0,0 +1,58 @@ +using Dakota.Logic; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; + +namespace DakotaUnitTest +{ + [TestClass] + public class DakotaReaderUnitTest + { + public DakotaKTDReader Reader { get; set; } + + [TestInitialize] + public void Initialize() + { + var path = @"C:\GkvAbrechnung\KTDatei"; + + var reader = new DakotaKTDReader(path); + + Reader = reader; + } + + [TestMethod] + public void ValidateReaderLoaded() + { + Assert.IsTrue(Reader is object); + } + + [TestMethod] + public void ValidateFileCount() + { + var count = Reader.GetFileCount(); + + Assert.IsTrue(count == 6); + } + + [TestMethod] + public void ValidateFileEntryCount() + { + var count = Reader.GetAllFileEntryCount(); + + Assert.IsTrue(count == 1105); + } + + [TestMethod] + public void ValidateBkkGilletteOst() + { + var test = Reader.GetIKNummern("105328415", "69", "00000"); + + Assert.IsNotNull(test); + + Assert.IsTrue(test.Item1 == "661430035"); + + Assert.IsTrue(test.Item2 == "106492406"); + + Assert.IsTrue(test.Item3 == "105328415"); + } + } +} diff --git a/DakotaUnitTest/DakotaUnitTest.csproj b/DakotaUnitTest/DakotaUnitTest.csproj index acd12ca86..e6279dd28 100644 --- a/DakotaUnitTest/DakotaUnitTest.csproj +++ b/DakotaUnitTest/DakotaUnitTest.csproj @@ -49,12 +49,18 @@ - + + + + {47331732-DD96-4075-869F-83AA9F3F9937} + Dakota + + diff --git a/DakotaUnitTest/UnitTest1.cs b/DakotaUnitTest/UnitTest1.cs deleted file mode 100644 index 18c3b7b8f..000000000 --- a/DakotaUnitTest/UnitTest1.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; - -namespace DakotaUnitTest -{ - [TestClass] - public class UnitTest1 - { - [TestMethod] - public void TestMethod1() - { - } - } -}