diff --git a/Dakota/Logic/DakotaKTDReader.cs b/Dakota/Logic/DakotaKTDReader.cs index c544e8d1d..880bf9faf 100644 --- a/Dakota/Logic/DakotaKTDReader.cs +++ b/Dakota/Logic/DakotaKTDReader.cs @@ -265,8 +265,9 @@ namespace Dakota.Logic if (!filter_list.Any()) filter_list = papierannahmestellen; - if (filter_list.Count() == 1) - return filter_list.First().IKVerknüpfungspartners; + var distinctIKs = filter_list.Select(x => x.IKVerknüpfungspartners).Distinct().ToList(); + if (distinctIKs.Count == 1) + return distinctIKs.First(); return null; } diff --git a/DakotaUnitTest/DakotaReaderUnitTest.cs b/DakotaUnitTest/DakotaReaderUnitTest.cs index f60739095..e294dc18e 100644 --- a/DakotaUnitTest/DakotaReaderUnitTest.cs +++ b/DakotaUnitTest/DakotaReaderUnitTest.cs @@ -95,5 +95,83 @@ namespace DakotaUnitTest Assert.IsTrue(test.IKDatenannahmestelle == "109905003"); } + + // ----------------------------------------------------------------------- + // Papierannahmestellen-Tests + // Struktur der KT-Datei für Papierannahmestellen: + // VKG+09++...++' + // GetPapierIK() gibt das IK der Papierannahmestelle zurück. + // Resolve() befüllt dann GkvKostentragerdateiSummary.Papierannahmeanschrift + // aus den ANS-Segmenten des PapierIK-Eintrags (Prio: Haus > Postfach > GK). + // ----------------------------------------------------------------------- + + /// + /// AOK Nordost Region MVP (IK 100395611) hat genau einen VKG+09-Eintrag: + /// VKG+09+109519016+5++28+6+++00' → PapierIK = 109519016 + /// Eintrag 109519016 (AOK Nordost - Rechnungsannahme) besitzt: + /// ANS+1+14513+Teltow+Am Teltowkanal 8' (Hausanschrift – höchste Priorität) + /// ANS+2+14302+Berlin+140252' (Postfach – wird nicht verwendet) + /// + [TestMethod] + public void ValidateAokNordostMvp_Papierannahmestelle_Hausanschrift() + { + var test = Reader.Resolve("100395611", "69", "00000"); + + Assert.IsNotNull(test, "Resolve() soll nicht null zurückgeben."); + + var papier = test.Papierannahmeanschrift; + Assert.IsNotNull(papier, "Papierannahmeanschrift soll gesetzt sein (PapierIK = 109519016)."); + + Assert.AreEqual("AOK Nordost - Rechnungsannahme", papier.AddressLine1, + "AddressLine1 soll die Kurzbezeichnung des PapierIK-Eintrags enthalten."); + Assert.AreEqual("14513", papier.PostalCode); + Assert.AreEqual("Teltow", papier.Town); + Assert.AreEqual("Am Teltowkanal 8", papier.Street); + } + + /// + /// AOK Rheinland-Pfalz (IK 106215364) hat genau einen VKG+09-Eintrag: + /// VKG+09+106315285+5++28+6+++00' → PapierIK = 106315285 + /// Eintrag 106315285 (AOK Rheinland-Pfalz/Saarland) besitzt: + /// ANS+1+56070+Koblenz+Am Sender 1' (nur Hausanschrift) + /// + [TestMethod] + public void ValidateAokRheinlandPfalz_Papierannahmestelle_Hausanschrift() + { + var test = Reader.Resolve("106215364", "69", "00000"); + + Assert.IsNotNull(test, "Resolve() soll nicht null zurückgeben."); + + var papier = test.Papierannahmeanschrift; + Assert.IsNotNull(papier, "Papierannahmeanschrift soll gesetzt sein (PapierIK = 106315285)."); + + Assert.AreEqual("AOK Rheinland-Pfalz/Saarland", papier.AddressLine1); + Assert.AreEqual("56070", papier.PostalCode); + Assert.AreEqual("Koblenz", papier.Town); + Assert.AreEqual("Am Sender 1", papier.Street); + } + + /// + /// SECURVITA BKK (IK 101320032) hat zwei VKG+09-Einträge, die beide + /// auf dieselbe Papierannahmestelle zeigen: + /// VKG+09+107436557+5++28++++00' (ArtDerDatenlieferung 28) + /// VKG+09+107436557+5++29++++00' (ArtDerDatenlieferung 29) + /// + [TestMethod] + public void ValidateSecurvitaBkk_Papierannahmestelle_MehrereVkgGleichesPaperIK() + { + var test = Reader.Resolve("101320032", "69", "00000"); + + Assert.IsNotNull(test, "Resolve() soll nicht null zurückgeben."); + + var papier = test.Papierannahmeanschrift; + Assert.IsNotNull(papier, + "Papierannahmeanschrift null, obwohl zwei VKG+09-Einträge " + + "auf IK 107436557 (AZE Emmendingen) zeigen."); + + Assert.AreEqual("AZE Emmendingen", papier.AddressLine1); + Assert.AreEqual("79312", papier.PostalCode); + Assert.AreEqual("Emmendingen", papier.Town); + } } }