From b67d31f7ead645e0e41cf80cf323f29fb5eec031 Mon Sep 17 00:00:00 2001 From: Kojo Date: Wed, 24 Jun 2026 10:59:43 +0200 Subject: [PATCH] =?UTF-8?q?GKV-Abrechnung:=20Papierannahmestelle-Ermittlun?= =?UTF-8?q?g=20korrigiert,=20f=C3=BCr=20den=20Fall=20dass=20mehrere=20Eint?= =?UTF-8?q?r=C3=A4ge=20ermittelt=20werden=20und=20Unittests=20hinzugef?= =?UTF-8?q?=C3=BCgt=20SupportOID=3D157241?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dakota/Logic/DakotaKTDReader.cs | 5 +- DakotaUnitTest/DakotaReaderUnitTest.cs | 78 ++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) 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); + } } }