diff --git a/Dakota/Logic/DakotaKTDReader.cs b/Dakota/Logic/DakotaKTDReader.cs index bb2ec6e28..e20fd032d 100644 --- a/Dakota/Logic/DakotaKTDReader.cs +++ b/Dakota/Logic/DakotaKTDReader.cs @@ -83,7 +83,9 @@ namespace Dakota.Logic 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); + var datenannahmestellen = search.SegmentVKG + .Where(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.DatenannahmestelleMitEntschlusselungsbefugnis) + .ToList(); // Hat keinen Verweis auf Kostenträger oder Datenannahmestelle gefunden if (datenannahmestellen is null || !datenannahmestellen.Any()) @@ -92,16 +94,38 @@ namespace Dakota.Logic if (datenannahmestellen.Count() == 1) return GetIKNummern(datenannahmestellen.First(), kostentrager, ikkrankenkasse); - var datenannahmestellen_2 = datenannahmestellen.Where(x => x.Abrechnungscode == abrechnungscode); + // Abrechnungscode "69" <=> Sozio + var datenannahmestellen_2 = datenannahmestellen + .Where(x => x.Abrechnungscode == abrechnungscode) + .ToList(); if (datenannahmestellen_2.Count() == 1) return GetIKNummern(datenannahmestellen_2.First(), kostentrager, ikkrankenkasse); - var datenannahmestellen_3 = datenannahmestellen_2.Where(x => x.Tarifkennzeichen == tarifkennzeichen); + // Tarifkennzeichen + var datenannahmestellen_3 = datenannahmestellen_2 + .Where(x => x.Tarifkennzeichen == tarifkennzeichen) + .ToList(); if (datenannahmestellen_3.Count() == 1) return GetIKNummern(datenannahmestellen_3.First(), kostentrager, ikkrankenkasse); + // ArtDesÜbermittlungsmediums "1" <=> Datenfernübertragung + var filter_list = datenannahmestellen_3; + + if(!filter_list.Any()) + filter_list = datenannahmestellen_2; + + if (!filter_list.Any()) + filter_list = datenannahmestellen; + + filter_list = filter_list + .Where(x => x.ArtDesÜbermittlungsmediums == "1") + .ToList(); + + if (filter_list.Count() == 1) + return GetIKNummern(filter_list.First(), kostentrager, ikkrankenkasse); + return null; } diff --git a/DakotaUnitTest/DakotaReaderUnitTest.cs b/DakotaUnitTest/DakotaReaderUnitTest.cs index bd0b06abb..083f77c35 100644 --- a/DakotaUnitTest/DakotaReaderUnitTest.cs +++ b/DakotaUnitTest/DakotaReaderUnitTest.cs @@ -76,5 +76,19 @@ namespace DakotaUnitTest Assert.IsNull(test); } + + [TestMethod] + public void ValidateKnappschaft() + { + var test = Reader.Resolve("109905003", "69", "08000"); + + Assert.IsNotNull(test); + + Assert.IsTrue(test.Item1 == "109905003"); + + Assert.IsTrue(test.Item2 == "109905003"); + + Assert.IsTrue(test.Item3 == "109905003"); + } } }