GKV-Abrechnung: Papierannahmestelle-Ermittlung korrigiert, für den Fall dass mehrere Einträge ermittelt werden und Unittests hinzugefügt

SupportOID=157241
This commit is contained in:
2026-06-24 10:59:43 +02:00
parent 7d1ac6d169
commit b67d31f7ea
2 changed files with 81 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -95,5 +95,83 @@ namespace DakotaUnitTest
Assert.IsTrue(test.IKDatenannahmestelle == "109905003");
}
// -----------------------------------------------------------------------
// Papierannahmestellen-Tests
// Struktur der KT-Datei für Papierannahmestellen:
// VKG+09+<PapierIK>+...+<Abrechnungscode>+<Tarifkennzeichen>'
// 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).
// -----------------------------------------------------------------------
/// <summary>
/// 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)
/// </summary>
[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);
}
/// <summary>
/// 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)
/// </summary>
[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);
}
/// <summary>
/// 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)
/// </summary>
[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);
}
}
}