From a881fa037b286e2ff262fd94fede5bcc04bd9068 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Fri, 15 Sep 2023 16:33:11 +0200 Subject: [PATCH] =?UTF-8?q?Zwischenstand:=20Counter=20z=C3=A4hlt=20korrekt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWoOhneReports.sln | 9 +- Dakota/Dakota.csproj | 29 +- Dakota/DakotaEnums.cs | 11 + Dakota/DakotaFile.cs | 159 ++++++++--- Dakota/DakotaFileCreator.cs | 145 ++++++++++ Dakota/DakotaFileInfo.cs | 18 +- Dakota/Models/Abrechnungsposition.cs | 47 ---- Dakota/Models/Block/BlockAbrechnungsfall.cs | 121 ++++++++ Dakota/Models/Block/BlockKostenträger.cs | 51 ++++ .../Block/BlockKrankenkarteVerordnung.cs | 55 ++++ Dakota/Models/Block/BlockNutzdatendatei.cs | 44 +++ Dakota/Models/Datei/BlockKostenträger.cs | 34 --- .../Datei/BlockKrankenkarteVerordnung.cs | 39 --- Dakota/Models/Datei/Nutzdatendatei.cs | 19 -- Dakota/Models/Datei/SozioTherapieDatei.cs | 26 -- .../Datei/SozioTherapieEinzelnachweis.cs | 28 -- Dakota/Models/DatenelementCounter.cs | 30 ++ Dakota/Models/IRowable.cs | 2 +- .../{Nachricht => Nachrichten}/Nachricht.cs | 9 +- .../NachrichtSLGA.cs | 3 +- .../NachrichtSLGA2.cs | 3 +- Dakota/Models/Nachrichten/NachrichtSLGA3.cs | 60 ++++ .../NachrichtSLLA.cs | 261 +++++++++--------- .../NachrichtSLLA2.cs | 235 ++++++++-------- Dakota/Models/Nachrichten/NachrichtSLLA3.cs | 50 ++++ ...lLeistungserbringerSammelgruppenschlussel.cs | 31 +++ Dakota/Models/Segmente/SLGA/SegmentSLGAFKT.cs | 4 +- Dakota/Models/Segmente/Segment.cs | 2 +- Dakota/Models/Segmente/SegmentUNT.cs | 6 +- Service/Service.csproj | 5 +- .../OperationsServiceImp.cs | 23 +- .../Generell/DakotaFileCreator.cs | 64 ----- 32 files changed, 1042 insertions(+), 581 deletions(-) create mode 100644 Dakota/DakotaFileCreator.cs delete mode 100644 Dakota/Models/Abrechnungsposition.cs create mode 100644 Dakota/Models/Block/BlockAbrechnungsfall.cs create mode 100644 Dakota/Models/Block/BlockKostenträger.cs create mode 100644 Dakota/Models/Block/BlockKrankenkarteVerordnung.cs create mode 100644 Dakota/Models/Block/BlockNutzdatendatei.cs delete mode 100644 Dakota/Models/Datei/BlockKostenträger.cs delete mode 100644 Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs delete mode 100644 Dakota/Models/Datei/Nutzdatendatei.cs delete mode 100644 Dakota/Models/Datei/SozioTherapieDatei.cs delete mode 100644 Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs create mode 100644 Dakota/Models/DatenelementCounter.cs rename Dakota/Models/{Nachricht => Nachrichten}/Nachricht.cs (64%) rename Dakota/Models/{Nachricht => Nachrichten}/NachrichtSLGA.cs (96%) rename Dakota/Models/{Nachricht => Nachrichten}/NachrichtSLGA2.cs (96%) create mode 100644 Dakota/Models/Nachrichten/NachrichtSLGA3.cs rename Dakota/Models/{Nachricht => Nachrichten}/NachrichtSLLA.cs (89%) rename Dakota/Models/{Nachricht => Nachrichten}/NachrichtSLLA2.cs (94%) create mode 100644 Dakota/Models/Nachrichten/NachrichtSLLA3.cs create mode 100644 Dakota/Models/Schlüssel/SchlüsselLeistungserbringerSammelgruppenschlussel.cs delete mode 100644 Service/ServiceUtils/Generell/DakotaFileCreator.cs diff --git a/BeWoOhneReports.sln b/BeWoOhneReports.sln index 13075a9e8..e99b93568 100644 --- a/BeWoOhneReports.sln +++ b/BeWoOhneReports.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2009 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33927.289 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client", "Client", "{E7543C39-A44C-40C9-82C9-E7FAA2D9A852}" EndProject @@ -31,6 +31,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatController", "..\Chat\C EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dakota", "Dakota\Dakota.csproj", "{47331732-DD96-4075-869F-83AA9F3F9937}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B6039E62-D43E-477A-BE82-EADB1057A3A2}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET diff --git a/Dakota/Dakota.csproj b/Dakota/Dakota.csproj index 32c984e69..c28ba3841 100644 --- a/Dakota/Dakota.csproj +++ b/Dakota/Dakota.csproj @@ -44,22 +44,26 @@ + - - - - + + + + - - - - - + + + + + + + + @@ -73,7 +77,6 @@ - @@ -92,9 +95,13 @@ - + + + {B0D73E3D-4AE7-4024-93A6-DB1F46D7CCEE} + Data + {2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4} Shared diff --git a/Dakota/DakotaEnums.cs b/Dakota/DakotaEnums.cs index ed1dbcc47..0c0fe2d70 100644 --- a/Dakota/DakotaEnums.cs +++ b/Dakota/DakotaEnums.cs @@ -17,4 +17,15 @@ namespace Dakota Alpha, Numerisch } + + public enum Kassenart + { + HKK, + AOK, + BKK, + IKK, + Knappschaft, + SVLFG, + VDEK + } } diff --git a/Dakota/DakotaFile.cs b/Dakota/DakotaFile.cs index 73925cfe0..88b828c7c 100644 --- a/Dakota/DakotaFile.cs +++ b/Dakota/DakotaFile.cs @@ -1,19 +1,21 @@ -using BS.Shared.DataContracts; +using BeWo.Data.Entities; +using BS.Shared.DataContracts; using Dakota.Models; -using Dakota.Models.Datei; -using Dakota.Models.Nachricht; +using Dakota.Models.Block; +using Dakota.Models.Nachrichten; using Dakota.Models.Segmente; using System; using System.Collections.Generic; +using System.Linq; namespace Dakota { /// - /// Interne Logik + /// Nutzdatendatei mit Logik /// - public class DakotaFile : IRowable + internal class DakotaFile : Nachricht { - internal SozioTherapieEinzelnachweis SozioTherapieEinzelnachweis { get; set; } + internal BlockNutzdatendatei Nutzdatendatei { get; private set; } internal DateTime Created { get; private set; } internal int NachrichtenCounter { get; set; } @@ -21,55 +23,120 @@ namespace Dakota internal int SegmentSLGACounter { get; set; } internal int SegmentSLLACounter { get; set; } - // UNB - internal SegmentUNB SegmentUNB => SozioTherapieEinzelnachweis.UNB; - // Block - internal BlockKrankenkarteVerordnung BlockKrankenkarteVerordnung => SozioTherapieEinzelnachweis.BlockKrankenkarteVerordnung; - // SLGA - internal SegmentUNH BlockSLGAUNH => BlockKrankenkarteVerordnung.SLGAUNH; - internal NachrichtSLGA2 BlockSLGANachricht => BlockKrankenkarteVerordnung.SLGANachricht2; - internal SegmentUNT BlockSLGAUNT => BlockKrankenkarteVerordnung.SLGAUNT; - // SLLA - internal SegmentUNH BlockSLLAUNH => BlockKrankenkarteVerordnung.SLLAUNH; - internal NachrichtSLLA2 BlockSLLANachricht => BlockKrankenkarteVerordnung.SLLANachricht2; - internal SegmentUNT BlockSLLAUNT => BlockKrankenkarteVerordnung.SLLAUNT; - // UNZ - internal SegmentUNZ SegmentUNZ => SozioTherapieEinzelnachweis.UNZ; - - public DakotaFile() + // Rene26 Comment + //// UNB + //internal SegmentUNB SegmentUNB => SozioTherapieEinzelnachweis.UNB; + //// Block + //internal + //internal BlockKrankenkarteVerordnung BlockKrankenkarteVerordnung => SozioTherapieEinzelnachweis.BlockKrankenkarteVerordnung; + //// SLGA + //internal SegmentUNH BlockSLGAUNH => BlockKrankenkarteVerordnung.SLGAUNH; + //internal NachrichtSLGA2 BlockSLGANachricht => BlockKrankenkarteVerordnung.SLGANachricht2; + //internal SegmentUNT BlockSLGAUNT => BlockKrankenkarteVerordnung.SLGAUNT; + //// SLLA + //internal SegmentUNH BlockSLLAUNH => BlockKrankenkarteVerordnung.SLLAUNH; + //internal NachrichtSLLA2 BlockSLLANachricht => BlockKrankenkarteVerordnung.SLLANachricht2; + //internal SegmentUNT BlockSLLAUNT => BlockKrankenkarteVerordnung.SLLAUNT; + //// UNZ + //internal SegmentUNZ SegmentUNZ => SozioTherapieEinzelnachweis.UNZ; + + internal DakotaFileInfo Info { get; set; } + + internal DakotaFile(DakotaFileInfo info) { - SozioTherapieEinzelnachweis = new SozioTherapieEinzelnachweis(); + Nutzdatendatei = new BlockNutzdatendatei(); + + Info = info; + Created = DateTime.Now; NachrichtenCounter = 1; AnzahlUNHCounter = 0; SegmentSLGACounter = 0; SegmentSLLACounter = 0; + + GenerateUNBSegment(); } - public void Generate(DakotaFileInfo info) + internal void AddInvoiceItem(InvoiceItem invoice) { - GenerateUNB(info); - GenerateBlockSLGA(info); - GenerateBlockSLLA(info); - GenerateUNZ(info); + var kostentrager = "123456789"; + var kostentragerblock = Nutzdatendatei.BlockKostenträger.FirstOrDefault(block => block.IKKostenträger == kostentrager); + + if (kostentragerblock is null) + { + kostentragerblock = GenerateBlockKostentrager(invoice); + + Nutzdatendatei.BlockKostenträger.Add(kostentragerblock); + } + + var krankenversichten = "987654321"; + var krankenversichtenblock = kostentragerblock.BlockKrankenkarteVerordnung.FirstOrDefault(block => block.IKKrankenkasseKVKarte == krankenversichten); + + AddInvoiceItemIntoBlock(krankenversichtenblock, invoice); + + kostentragerblock.Update(); } - public void GenerateUNB(DakotaFileInfo info) + internal void AddInvoiceItemIntoBlock(BlockKrankenkarteVerordnung block, InvoiceItem invoice) { - SegmentUNB.SyntaxKennung.SetValue("UNOC"); - SegmentUNB.SyntaxVersionsnummer.SetValue("3"); - SegmentUNB.Absenderdatei.SetValue(info.Absenderbezeichnung); - SegmentUNB.Empfangdatei.SetValue(info.Empfangerbezeichnung); - SegmentUNB.Datum.SetValue(Created.ToString("yyyyMMdd")); - SegmentUNB.Uhrzeit.SetValue(Created.ToString("HHmm")); - SegmentUNB.Datenaustauschreferenz.SetFilledIntValue(info.Datenaustauschreferenz, 5); - SegmentUNB.Leistungsbereich.SetValue("O"); - SegmentUNB.Anwengundsreferenz.SetValue(info.Anwendungsreferenz); - SegmentUNB.Testindikator.SetValue(info.Testindikator.Value); + // Wie soll das hier sein + + // SLLA } - public void GenerateBlockSLGA(DakotaFileInfo info) + private BlockKostenträger GenerateBlockKostentrager(InvoiceItem invoice) + { + var block = new BlockKostenträger(); + + var nachrefnum = ++AnzahlUNHCounter; + + block.SegmentUNH.Nachrichtenreferenznummer.SetFilledIntValue(nachrefnum, 5); + block.SegmentUNH.NachrichtenTypKennung.SetValue("SLGA"); + block.SegmentUNH.Verionsnummer.SetValue("18"); + block.SegmentUNH.FreigabeNrDesTypes.SetValue("0"); + block.SegmentUNH.VerwaltendeOrganisation.SetValue("0"); + + block.SegmentUNT.Nachrichtenreferenznummer.SetFilledIntValue(nachrefnum, 5); + // ! block.SegmentUNT.AnzahlEinheiten.SetValue("0"); + } + + private BlockKrankenkarteVerordnung GenerateBlockKrankenkarte(InvoiceItem invoice) + { + var block = new BlockKrankenkarteVerordnung(); + + var nachrefnum = ++AnzahlUNHCounter; + + block.SegmentSLGAUNH.Nachrichtenreferenznummer.SetFilledIntValue(nachrefnum, 5); + block.SegmentSLGAUNH.NachrichtenTypKennung.SetValue("SLGA"); + block.SegmentSLGAUNH.Verionsnummer.SetValue("18"); + block.SegmentSLGAUNH.FreigabeNrDesTypes.SetValue("0"); + block.SegmentSLGAUNH.VerwaltendeOrganisation.SetValue("0"); + + block.SegmentSLGAUNT.Nachrichtenreferenznummer.SetFilledIntValue(nachrefnum, 5); + // ! block.SegmentSLGAUNT.AnzahlEinheiten.SetValue("0"); + } + + internal void Finish() + { + GenerateUNZSegment(); + } + + private void GenerateUNBSegment() + { + Nutzdatendatei.SegmentUNB.SyntaxKennung.SetValue("UNOC"); + Nutzdatendatei.SegmentUNB.SyntaxVersionsnummer.SetValue("3"); + Nutzdatendatei.SegmentUNB.Absenderdatei.SetValue(Info.Absenderbezeichnung); + Nutzdatendatei.SegmentUNB.Empfangdatei.SetValue(Info.Empfangerbezeichnung); + Nutzdatendatei.SegmentUNB.Datum.SetValue(Created.ToString("yyyyMMdd")); + Nutzdatendatei.SegmentUNB.Uhrzeit.SetValue(Created.ToString("HHmm")); + Nutzdatendatei.SegmentUNB.Datenaustauschreferenz.SetFilledIntValue(Info.Datenaustauschreferenz, 5); + Nutzdatendatei.SegmentUNB.Leistungsbereich.SetValue(Info.Leistungsbereich.Value); + Nutzdatendatei.SegmentUNB.Anwengundsreferenz.SetValue(Info.Anwendungsreferenz); + Nutzdatendatei.SegmentUNB.Testindikator.SetValue(Info.Testindikator.Value); + } + + private void GenerateBlockSLGA(DakotaFileInfo info) { //UNH, UNT, FKT, REC, GES00, GES, NAM SegmentSLGACounter += 7; @@ -122,7 +189,7 @@ namespace Dakota BlockSLGAUNT.Nachrichtenreferenznummer.SetFilledIntValue(nachrefnum, 5); } - public void GenerateBlockSLLA(DakotaFileInfo info) + private void GenerateBlockSLLA(DakotaFileInfo info) { SegmentSLLACounter++; AnzahlUNHCounter++; @@ -221,10 +288,10 @@ namespace Dakota BlockSLLAUNT.Nachrichtenreferenznummer.SetFilledIntValue(nachrefnum, 5); } - public void GenerateUNZ(DakotaFileInfo info) + private void GenerateUNZSegment() { - SegmentUNZ.AnzahlNachrichten.SetFilledIntValue(AnzahlUNHCounter, 6); - SegmentUNZ.Datenaustauschreferenz.SetFilledIntValue(info.Datenaustauschreferenz, 5); + Nutzdatendatei.SegmentUNZ.AnzahlNachrichten.SetFilledIntValue(AnzahlUNHCounter, 6); + Nutzdatendatei.SegmentUNZ.Datenaustauschreferenz.SetFilledIntValue(Info.Datenaustauschreferenz, 5); } public void foo(long? invoiceBaseOid) @@ -283,9 +350,9 @@ namespace Dakota } - public string GetRows() + public override List GetSegments() { - return SozioTherapieEinzelnachweis.GetRows(); + return Nutzdatendatei.GetSegments(); } } } diff --git a/Dakota/DakotaFileCreator.cs b/Dakota/DakotaFileCreator.cs new file mode 100644 index 000000000..33521bc2b --- /dev/null +++ b/Dakota/DakotaFileCreator.cs @@ -0,0 +1,145 @@ +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BS.Shared.DataContracts; +using Dakota; +using Dakota.Models.Schlüssel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeWo.Service.ServiceUtils.Generell +{ + public static class DakotaFileCreator + { + internal struct DakotaKeyDictionary + { + public DateTime DateTime { get; set; } + public Kassenart Kassenart { get; set; } + public string Kostenträger { get; set; } + + public override bool Equals(object obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + + var objectToCompareWith = (DakotaKeyDictionary)obj; + + return objectToCompareWith.DateTime == DateTime && objectToCompareWith.Kassenart == Kassenart && + objectToCompareWith.Kostenträger == Kostenträger; + + } + } + + /// + /// Ein Datei erzeungnis + /// + /// + /// + //public static string generateasciicode(list invoiceitems) + //{ + // var info = loadinfo(invoiceitems); + + // var file = new dakotafile(info); + + // file.generate(); + + // return file.getrows(); + //} + + public static List GenerateDakotaFilesByMonth(int year, int month) + { + var dict = GenerateDakotaFiles(year, month); + + return dict.Values.Select(x => x.GetRows()).ToList(); + } + + internal static Dictionary GenerateDakotaFiles(int year, int month) + { + // Datum, Kassenart, Kostenträger + var res = new Dictionary(); + + var invoiceitems = DAOFactory.GenericDAO.GetAllActive(); + + var first = new DateTime(year, month, 1); + var last = new DateTime(year, month, 1).AddMonths(1).AddDays(-1); + + var filtered = invoiceitems.Where(x => x.ItemPeriodStart == first && x.ItemPeriodEnd == last); + + foreach (var invoice in filtered) + { + // Aufteilen + // 1. Monat/Jahr - erstmal gleich + // 2. Kassenart - aok, bkk, lkk + // Kostenträger - kt1, kt2, kt3 + // Leistungsbereich - immer soziotherapie + + + DakotaKeyDictionary currentkey = new DakotaKeyDictionary(); + currentkey.DateTime = first; + currentkey.Kassenart = Kassenart.BKK; + currentkey.Kostenträger = ""; + + var dakota = res.FirstOrDefault(keypair => keypair.Key.Equals(currentkey)).Value; + + if (dakota is null) + { + var info = LoadInfo(invoice); + + dakota = new DakotaFile(info); + + res.Add(currentkey, dakota); + } + + dakota.AddInvoiceItem(invoice); + } + + return res; + } + + public static DakotaFileInfo LoadInfo(InvoiceItem invoice) + { + throw new NotImplementedException(); + } + + public static DakotaFileInfo LoadInfos(List invoiceItems) + { + var res = new DakotaFileInfo(); + + res.Absenderbezeichnung = "123456789"; + res.Empfangerbezeichnung = "987654321"; + res.Datenaustauschreferenz = 1; + res.Leistungsbereich = SchlüsselLeistungserbringerSammelgruppenschlussel.SoziotherapeutischerLeistungserbringer; + res.Anwendungsreferenz = "abovollkra.txt"; + res.Testindikator = SchlüsselTestindikator.Testdatei; + + res.IKLeistungserbringers = "abovollkrass.txt"; + res.IKKostenträger = "abovollkrass.txt"; + res.IKKrankenkasse = "abovollkrass.txt"; + // res.Rechnungsnummer = dc.InvoiceBase.InvoiceNumber; + // Einheitlich monatlich + // res.Rechnungsdatum = dc.InvoiceBase.InvoiceDate.Value; + + res.Summenstatus = SchlüsselSummenstatus.Mitglieder; + res.Gesamtrechnungsbetrag = 3.5m; + res.Gesamtbruttobetrag = 3.5m; + res.GesamtbetragZuzahlung = 3.5m; + res.Rechnungsart = SchlüsselRechnungsart.AbrechnungVonLeistungserbringer; + res.Name1 = "nam7"; + res.Name2 = "nam4"; + res.Name3 = "nam3"; + res.Name4 = "nam1"; + + res.Verarbeitungskennzeichen = SchlüsselVerarbeitungskennzeichen.AbrechnungOhneBesonderheit; + + res.IKKrankenkasse = "abovollkrass.txt"; + + res.InvoiceItems = invoiceItems; + + return res; + } + } +} diff --git a/Dakota/DakotaFileInfo.cs b/Dakota/DakotaFileInfo.cs index a692ad9b3..89ba51179 100644 --- a/Dakota/DakotaFileInfo.cs +++ b/Dakota/DakotaFileInfo.cs @@ -1,5 +1,7 @@ -using Dakota.Models.Schlüssel; +using BS.Shared.DataContracts; +using Dakota.Models.Schlüssel; using System; +using System.Collections.Generic; namespace Dakota { @@ -50,6 +52,12 @@ namespace Dakota } } /// + /// Einzutragen ist der Leistungserbringer-Sammelgruppenschlüssel, + /// siehe Schlüssel Anlage 3 Abschnitt + /// 8.1.14. + /// + public SchlüsselLeistungserbringerSammelgruppenschlussel Leistungsbereich { get; set; } + /// /// Genutzt werden die ersten 11 Stellen; /// einzutragen ist der logische Dateiname s.Anhang 1 zur Anlage 1 /// zum Kapitel 4. @@ -145,10 +153,6 @@ namespace Dakota /// public decimal GesamtbetragZuzahlung { get; set; } /// - /// Name bzw. Firmenbezeichnung des - /// Rechnungsstellers(Leistungserbringer oder Abrechnungsstelle - /// - /// /// /// Siehe Schlüssel Rechnungsart /// Anlage 3 Abschnitt 8.1.4. /// Dieser Schlüsselwert muss in der @@ -156,6 +160,10 @@ namespace Dakota /// zugehörigen SLGA-und SLLA-Nachrichten gleich sein. /// public SchlüsselRechnungsart Rechnungsart { get; set; } + /// + /// Name bzw. Firmenbezeichnung des + /// Rechnungsstellers(Leistungserbringer oder Abrechnungsstelle + /// public string Name1 { get; set; } /// /// ggf. Ansprechpartner und Telefonnummer. diff --git a/Dakota/Models/Abrechnungsposition.cs b/Dakota/Models/Abrechnungsposition.cs deleted file mode 100644 index 2acfc4a6b..000000000 --- a/Dakota/Models/Abrechnungsposition.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models -{ - internal class Abrechnungsposition - { - public SegmentSLLAENF SegmentSLLAENF { get; private set; } - /// - /// Mit diesem Segment können weitere Informationen, bezogen /// auf die abzurechnende Position übermittelt werden.Hier können u.a.die Uhrzeit und die gefahrenen Kilometer angegeben - /// werden. Es kann je abzurechnende Position einmal vorkommen - /// - public SegmentSLLASUT SegmentSLLASUT { get; private set; } - /// - /// Mit diesem Segment kann zu jeder abzurechnenden Position - /// ein Text(z.B.als Begründung) hinterlegt werden.Es kann je - /// abzurechnende Position einmal vorkommen. - /// - public SegmentSLLATXT SegmentSLLATXT { get; private set; } - /// - /// Mit diesem Segment kann zu jeder abzurechnenden Position /// Mehrwertsteuer angegeben werden.Benutzt werden soll das /// Segment nur dann, wenn dem in ENF genannten Einzelbetrag - /// die Mehrwertsteuer hinzuzurechnen ist. - /// - ///public SegmentSLLAMWS SegmentSLLAMWS { get; private set; } - - /// - - public Abrechnungsposition() - { - SegmentSLLAENF = new SegmentSLLAENF(); - SegmentSLLASUT = new SegmentSLLASUT(); - SegmentSLLATXT = new SegmentSLLATXT(); - //SegmentSLLAMWS = new SegmentSLLAMWS(); - } - - public List GetSegments() - { - return new List() { SegmentSLLAENF, SegmentSLLASUT, SegmentSLLATXT, - }; - //SegmentSLLAMWS }; - } - } -} diff --git a/Dakota/Models/Block/BlockAbrechnungsfall.cs b/Dakota/Models/Block/BlockAbrechnungsfall.cs new file mode 100644 index 000000000..28ac2e723 --- /dev/null +++ b/Dakota/Models/Block/BlockAbrechnungsfall.cs @@ -0,0 +1,121 @@ +using Dakota.Models.Segmente; +using Dakota.Models.Nachrichten; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dakota.Models.Segmente.SLLA; + +namespace Dakota.Models.Block +{ + internal class BlockAbrechnungsfall : Nachricht + { + + /// + /// Das Segment enthält die Versichertendaten eines Abrechnungsfalles (Verordnung), und gilt gleichzeitig als BeginnSegment für einen Abrechnungsfall. Jeder Abrechnungsfall ist + /// mit einer eindeutigen Belegnummer zu kennzeichnen, die der + /// auf der Verordnung zu übertragenen Belegnummer(s. § 4 des + /// Richtlinientextes) entsprechen muss. + /// + public SegmentSLLAINV SegmentSLLAINV { get; private set; } + /// + /// Dieses Segment enthält bei Korrekturlieferungen die ursprünglichen Rechnungsinformationen. Es wird zunächst nur + /// in Abhängigkeit für die Verarbeitungskennzeichen + /// '02' Nachforderung, + /// ‚03‘ Zuzahlungsforderung und + /// ‚04‘ Korrekturrechnung + /// (Schlüsselverzeichnis Anlage 3, Kapitel 8.1.7) geliefert + /// + public SegmentSLLAURI SegmentSLLAURI { get; private set; } + /// + /// Das Segment enthält den Namen und die Adressdaten des + /// Versicherten. + /// + public SegmentSLLANAD SegmentSLLANAD { get; private set; } + /// + /// Das Segment enthält den Imagenamen bei Übermittlung von + /// Imagearchiven durch den Absender. + /// + public SegmentSLLAIMG SegmentSLLAIMG { get; private set; } + + /// + /// Das Segment dient zur Abrechnung der einzelnen Positionen, + /// die für den abzurechnenden Fall angefallen sind.Es ist so oft + /// wiederholbar, wie Abrechnungspositionen vorkommen. + /// + public SegmentSLLAENF SegmentSLLAENF { get; private set; } + /// + /// Mit diesem Segment können weitere Informationen, bezogen + /// auf die abzurechnende Position übermittelt werden.Hier können u.a.die Uhrzeit und die gefahrenen Kilometer angegeben + /// werden. Es kann je abzurechnende Position einmal vorkommen + /// + public SegmentSLLASUT SegmentSLLASUT { get; private set; } + /// + /// Mit diesem Segment kann zu jeder abzurechnenden Position + /// ein Text(z.B.als Begründung) hinterlegt werden.Es kann je + /// abzurechnende Position einmal vorkommen. + /// + public SegmentSLLATXT SegmentSLLATXT { get; private set; } + /// + /// Mit diesem Segment kann zu jeder abzurechnenden Position + /// Mehrwertsteuer angegeben werden.Benutzt werden soll das + /// Segment nur dann, wenn dem in ENF genannten Einzelbetrag + /// die Mehrwertsteuer hinzuzurechnen ist. + /// + public SegmentSLLAMWS SegmentSLLAMWS { get; private set; } + /// + /// Das Segment enthält Angaben über die Zuzahlung. Das Segment ist bis auf weiteres nicht zu übermitteln. Das Segment ist + /// für spätere Ausprägungen reserviert. + /// + public SegmentSLLAZUZ SegmentSLLAZUZ { get; private set; } + /// + /// Das Segment enthält allgemeine Angaben zum Abrechnungsfall (Verordnung) und ist zu übermitteln, wenn eine ärztliche + /// Verordnung, ein Reparatur- oder Berechtigungsschein oder + /// Unfall/BVG vorliegt. + /// + public SegmentSLLAZUV SegmentSLLAZUV { get; private set; } + /// + /// Das Segment dient zur Angabe der Diagnose und ist so oft + /// wiederholbar, wie Diagnosen vorliegen + /// + public SegmentSLLADIA SegmentSLLADIA { get; private set; } + /// + /// Das Segment enthält Angaben über die von der Krankenkasse + /// ausgesprochene Kostenzusage/Genehmigung und ist nur zu + /// übermitteln, wenn diese vorliegt. + /// + public SegmentSLLASKZ SegmentSLLASKZ { get; private set; } + /// + /// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung) + /// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer) + /// + public SegmentSLLABES SegmentSLLABES { get; private set; } + + public BlockAbrechnungsfall() + { + + SegmentSLLAINV = new SegmentSLLAINV(); + SegmentSLLAURI = new SegmentSLLAURI(); + SegmentSLLANAD = new SegmentSLLANAD(); + SegmentSLLAIMG = new SegmentSLLAIMG(); + + SegmentSLLAENF = new SegmentSLLAENF(); + SegmentSLLASUT = new SegmentSLLASUT(); + SegmentSLLATXT = new SegmentSLLATXT(); + SegmentSLLAMWS = new SegmentSLLAMWS(); + SegmentSLLAZUZ = new SegmentSLLAZUZ(); + SegmentSLLAZUV = new SegmentSLLAZUV(); + SegmentSLLADIA = new SegmentSLLADIA(); + SegmentSLLASKZ = new SegmentSLLASKZ(); + SegmentSLLABES = new SegmentSLLABES(); + } + + public override List GetSegments() + { + return new List() {SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG, + SegmentSLLAENF, SegmentSLLASUT, SegmentSLLATXT, SegmentSLLAMWS, + SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES}; + } + } +} diff --git a/Dakota/Models/Block/BlockKostenträger.cs b/Dakota/Models/Block/BlockKostenträger.cs new file mode 100644 index 000000000..b7a894a37 --- /dev/null +++ b/Dakota/Models/Block/BlockKostenträger.cs @@ -0,0 +1,51 @@ +using Dakota.Models.Nachrichten; +using Dakota.Models.Segmente; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Block +{ + /// + /// Wiederhole folgenden Block je IK des Kostenträgers + /// + internal class BlockKostenträger : Nachricht + { + public SegmentUNH SegmentUNH { get; private set; } + public NachrichtSLGA NachrichtSLGA { get; private set; } + public SegmentUNT SegmentUNT { get; private set; } + public List BlockKrankenkarteVerordnung { get; private set; } + + public string IKKostenträger + { + get { return NachrichtSLGA.SegmentFKT.IKKostenträger.GetValue(); } + set { NachrichtSLGA.SegmentFKT.IKKostenträger.SetValue(value); } + } + + internal BlockKostenträger() + { + SegmentUNH = new SegmentUNH(); + NachrichtSLGA = new NachrichtSLGA(); + SegmentUNT = new SegmentUNT(GetSegmentLength); + BlockKrankenkarteVerordnung = new List(); + } + + public override List GetSegments() + { + var list = new List(); + + list.Add(SegmentUNH); + list.AddRange(NachrichtSLGA.GetSegments()); + list.Add(SegmentUNT); + + foreach (var block in BlockKrankenkarteVerordnung) + { + list.AddRange(block.GetSegments()); + } + + return list; + } + } +} diff --git a/Dakota/Models/Block/BlockKrankenkarteVerordnung.cs b/Dakota/Models/Block/BlockKrankenkarteVerordnung.cs new file mode 100644 index 000000000..fab2ba01a --- /dev/null +++ b/Dakota/Models/Block/BlockKrankenkarteVerordnung.cs @@ -0,0 +1,55 @@ +using Dakota.Models.Nachrichten; +using Dakota.Models.Segmente; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Block +{ + /// + /// Wiederhole folgenden Block je IK der Krankenkarte bzw der Verordnung + /// + internal class BlockKrankenkarteVerordnung : Nachricht + { + public SegmentUNH SegmentSLGAUNH { get; private set; } + public NachrichtSLGA2 SLGANachricht2 { get; private set; } + public SegmentUNT SegmentSLGAUNT { get; private set; } + public SegmentUNH SegmentSLLAUNH { get; private set; } + public NachrichtSLLA2 SLLANachricht2 { get; private set; } + public SegmentUNT SegmentSLLAUNT { get; private set; } + + public BlockKrankenkarteVerordnung() + { + SegmentSLGAUNH = new SegmentUNH(); + SLGANachricht2 = new NachrichtSLGA2(); + SegmentSLGAUNT = new SegmentUNT(SLGASegmentLength); + SegmentSLLAUNH = new SegmentUNH(); + SLLANachricht2 = new NachrichtSLLA2(); + SegmentSLLAUNT = new SegmentUNT(SLLASegmentLength); + } + + public string IKKrankenkasseKVKarte + { + get { return SLGANachricht2.SegmentFKT.IKKrankenkasseKVKarte.GetValue(); } + set { SLGANachricht2.SegmentFKT.IKKrankenkasseKVKarte.SetValue(value); } + } + + public int SLGASegmentLength() => SLGANachricht2.GetSegmentLength() + 2; + public int SLLASegmentLength() => SLLANachricht2.GetSegmentLength() + 2; + + public override List GetSegments() + { + var list = new List() { SegmentSLGAUNH }; + list.AddRange(SLGANachricht2.GetSegments()); + list.Add(SegmentSLGAUNT); + + list.Add(SegmentSLLAUNH); + list.AddRange(SLLANachricht2.GetSegments()); + list.Add(SegmentSLLAUNT); + + return list; + } + } +} diff --git a/Dakota/Models/Block/BlockNutzdatendatei.cs b/Dakota/Models/Block/BlockNutzdatendatei.cs new file mode 100644 index 000000000..c7deb01ba --- /dev/null +++ b/Dakota/Models/Block/BlockNutzdatendatei.cs @@ -0,0 +1,44 @@ +using Dakota.Models.Nachrichten; +using Dakota.Models.Segmente; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Block +{ + /// + /// Nutzdatendatei ohne Logik + /// + internal class BlockNutzdatendatei : Nachricht + { + public SegmentUNB SegmentUNB { get; private set; } + public List BlockKostenträger { get; private set; } + public SegmentUNZ SegmentUNZ { get; private set; } + + internal BlockNutzdatendatei() + { + SegmentUNB = new SegmentUNB(); + BlockKostenträger = new List(); + SegmentUNZ = new SegmentUNZ(); + } + + public override List GetSegments() + { + var list = new List() + { + SegmentUNB + }; + + foreach (var block in BlockKostenträger) + { + list.AddRange(block.GetSegments()); + } + + list.Add(SegmentUNZ); + + return list; + } + } +} diff --git a/Dakota/Models/Datei/BlockKostenträger.cs b/Dakota/Models/Datei/BlockKostenträger.cs deleted file mode 100644 index 0b2aae291..000000000 --- a/Dakota/Models/Datei/BlockKostenträger.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Dakota.Models.Nachricht; -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Datei -{ - /// - /// Wiederhole folgenden Block je IK des Kostenträgers - /// - internal class BlockKostenträger : IRowable - { - public SegmentUNH UNH { get; private set; } - public NachrichtSLGA NachrichtSLGA { get; private set; } - public SegmentUNT UNT { get; private set; } - public List BlockKrankenkarteVerordnung { get; set; } - - internal BlockKostenträger() - { - UNH = new SegmentUNH(); - NachrichtSLGA = new NachrichtSLGA(); - UNT = new SegmentUNT(); - BlockKrankenkarteVerordnung = new List(); - } - - public string GetRows() - { - return UNH.GetRows() + NachrichtSLGA.GetRows() + UNT.GetRows() + string.Join("", BlockKrankenkarteVerordnung.Select(x => x.GetRows())); - } - } -} diff --git a/Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs b/Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs deleted file mode 100644 index ab95c1d43..000000000 --- a/Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Dakota.Models.Nachricht; -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Datei -{ - /// - /// Wiederhole folgenden Block je IK der Krankenkarte bzw der Verordnung - /// - internal class BlockKrankenkarteVerordnung : IRowable - { - public SegmentUNH SLGAUNH { get; private set; } - public NachrichtSLGA2 SLGANachricht2 { get; private set; } - public SegmentUNT SLGAUNT { get; private set; } - public SegmentUNH SLLAUNH { get; private set; } - public NachrichtSLLA2 SLLANachricht2 { get; private set; } - public SegmentUNT SLLAUNT { get; private set; } - - public BlockKrankenkarteVerordnung() - { - SLGAUNH = new SegmentUNH(); - SLGANachricht2 = new NachrichtSLGA2(); - SLGAUNT = new SegmentUNT(); - SLLAUNH = new SegmentUNH(); - SLLANachricht2 = new NachrichtSLLA2(); - SLLAUNT = new SegmentUNT(); - } - - public string GetRows() - { - return SLGAUNH.GetRows() + SLGANachricht2.GetRows() + SLGAUNT.GetRows() + - SLLAUNH.GetRows() + SLLANachricht2.GetRows() + SLLAUNT.GetRows(); - } - } -} diff --git a/Dakota/Models/Datei/Nutzdatendatei.cs b/Dakota/Models/Datei/Nutzdatendatei.cs deleted file mode 100644 index 0c4b3fdd0..000000000 --- a/Dakota/Models/Datei/Nutzdatendatei.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Datei -{ - internal class Nutzdatendatei - { - - //public List Nachrichten { get; set; } - - //public Nutzdatendatei() - //{ - // Nachrichten = new List(); - //} - } -} diff --git a/Dakota/Models/Datei/SozioTherapieDatei.cs b/Dakota/Models/Datei/SozioTherapieDatei.cs deleted file mode 100644 index 763faec9c..000000000 --- a/Dakota/Models/Datei/SozioTherapieDatei.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Datei -{ - internal class SozioTherapieDatei : IRowable - { - public SegmentUNB UNB { get; set; } - public List BlockKostenträger { get; set; } - public SegmentUNZ UNZ { get; set; } - - internal SozioTherapieDatei() - { - BlockKostenträger = new List(); - } - - public string GetRows() - { - return UNB.GetRows() + string.Join(string.Empty, BlockKostenträger.Select(x => x.GetRows())) + UNZ.GetRows(); - } - } -} diff --git a/Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs b/Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs deleted file mode 100644 index 61f146570..000000000 --- a/Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Datei -{ - internal class SozioTherapieEinzelnachweis : IRowable - { - public SegmentUNB UNB { get; set; } - public BlockKrankenkarteVerordnung BlockKrankenkarteVerordnung { get; set; } - public SegmentUNZ UNZ { get; set; } - - internal SozioTherapieEinzelnachweis() - { - UNB = new SegmentUNB(); - BlockKrankenkarteVerordnung = new BlockKrankenkarteVerordnung(); - UNZ = new SegmentUNZ(); - } - - public string GetRows() - { - return UNB.GetRows() + string.Join(string.Empty, BlockKrankenkarteVerordnung.GetRows() + UNZ.GetRows()); - } - } -} diff --git a/Dakota/Models/DatenelementCounter.cs b/Dakota/Models/DatenelementCounter.cs new file mode 100644 index 000000000..bbe6b65e7 --- /dev/null +++ b/Dakota/Models/DatenelementCounter.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models +{ + internal class DatenelementCounter : Datenelement + { + public Func Counter { get; private set; } + + public DatenelementCounter(string title, int count, Func counter) : base(title, count, Feldart.Muss) + { + Counter = counter; + } + + public void Update() + { + SetFilledIntValue(Counter(), MinStellen); + } + + public override string GetValue() + { + Update(); + + return base.GetValue(); + } + } +} diff --git a/Dakota/Models/IRowable.cs b/Dakota/Models/IRowable.cs index e424e319e..a3d9b3b07 100644 --- a/Dakota/Models/IRowable.cs +++ b/Dakota/Models/IRowable.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Dakota.Models { - public interface IRowable + internal interface IRow { string GetRows(); } diff --git a/Dakota/Models/Nachricht/Nachricht.cs b/Dakota/Models/Nachrichten/Nachricht.cs similarity index 64% rename from Dakota/Models/Nachricht/Nachricht.cs rename to Dakota/Models/Nachrichten/Nachricht.cs index de7f2b488..c7f4ce221 100644 --- a/Dakota/Models/Nachricht/Nachricht.cs +++ b/Dakota/Models/Nachrichten/Nachricht.cs @@ -5,11 +5,16 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models.Nachricht +namespace Dakota.Models.Nachrichten { - internal abstract class Nachricht : IRowable + internal abstract class Nachricht : IRow { public abstract List GetSegments(); + + public int GetSegmentLength() + { + return GetSegments().Count; + } public string GetRows() { diff --git a/Dakota/Models/Nachricht/NachrichtSLGA.cs b/Dakota/Models/Nachrichten/NachrichtSLGA.cs similarity index 96% rename from Dakota/Models/Nachricht/NachrichtSLGA.cs rename to Dakota/Models/Nachrichten/NachrichtSLGA.cs index 52cd87268..caddada42 100644 --- a/Dakota/Models/Nachricht/NachrichtSLGA.cs +++ b/Dakota/Models/Nachrichten/NachrichtSLGA.cs @@ -1,11 +1,12 @@ using Dakota.Models.Segmente; +using Dakota.Models.Segmente.SLGA; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models.Nachricht +namespace Dakota.Models.Nachrichten { /// /// Gesamtaufstellung der diff --git a/Dakota/Models/Nachricht/NachrichtSLGA2.cs b/Dakota/Models/Nachrichten/NachrichtSLGA2.cs similarity index 96% rename from Dakota/Models/Nachricht/NachrichtSLGA2.cs rename to Dakota/Models/Nachrichten/NachrichtSLGA2.cs index b8d5c18f2..0002cdb78 100644 --- a/Dakota/Models/Nachricht/NachrichtSLGA2.cs +++ b/Dakota/Models/Nachrichten/NachrichtSLGA2.cs @@ -1,11 +1,12 @@ using Dakota.Models.Segmente; +using Dakota.Models.Segmente.SLGA; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models.Nachricht +namespace Dakota.Models.Nachrichten { /// /// Gesamtaufstellung der diff --git a/Dakota/Models/Nachrichten/NachrichtSLGA3.cs b/Dakota/Models/Nachrichten/NachrichtSLGA3.cs new file mode 100644 index 000000000..a72c9327d --- /dev/null +++ b/Dakota/Models/Nachrichten/NachrichtSLGA3.cs @@ -0,0 +1,60 @@ +using Dakota.Models.Segmente; +using Dakota.Models.Segmente.SLGA; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Nachrichten +{ + /// + /// Gesamtaufstellung der + /// Abrechnung(Rechnung) + /// + internal class NachrichtSLGA3 : Nachricht + { + /// + /// Das Segment enthält Informationen über die zu verarbeitende Rechnung, den Rechnungssteller + /// (Leistungserbringer oder Abrechnungsstelle) und das IK der Krankenkasse von + /// der Krankenversichertenkarte bzw.von der ärztlichen Verordnung + /// + public SegmentSLGAFKT SegmentFKT { get; set; } + /// + /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum. + /// + public SegmentSLGAREC SegmentREC { get; set; } + /// + /// Das Segment enthält Informationen zur Umsatzsteuer. + /// + public SegmentSLGAUST SegmentUST { get; set; } + /// + /// Das Segment enthält Informationen, ob Skonto gewährt wird + /// (Skonto in Prozent, Zahlungsziel). + /// + public SegmentSLGASKO SegmentSKO { get; set; } + /// + /// Das Segment enthält Rechnungssummen (Bruttobetrag, Zuzahlungsbetrag, Nettobetrag je Status). + /// + public SegmentSLGAGES SegmentGES { get; set; } + /// + /// Das Segment enthält den Namen und die Firmenbezeichnung des Leistungserbringers + /// + public SegmentSLGANAM SegmentNAM { get; set; } + + public NachrichtSLGA3() + { + SegmentFKT = new SegmentSLGAFKT(); + SegmentREC = new SegmentSLGAREC(); + SegmentUST = new SegmentSLGAUST(); + SegmentSKO = new SegmentSLGASKO(); + SegmentGES = new SegmentSLGAGES(); + SegmentNAM = new SegmentSLGANAM(); + } + + public override List GetSegments() + { + return new List() { SegmentFKT, SegmentREC, SegmentUST, SegmentSKO, SegmentGES, SegmentNAM }; + } + } +} diff --git a/Dakota/Models/Nachricht/NachrichtSLLA.cs b/Dakota/Models/Nachrichten/NachrichtSLLA.cs similarity index 89% rename from Dakota/Models/Nachricht/NachrichtSLLA.cs rename to Dakota/Models/Nachrichten/NachrichtSLLA.cs index 01e90795e..48eba537a 100644 --- a/Dakota/Models/Nachricht/NachrichtSLLA.cs +++ b/Dakota/Models/Nachrichten/NachrichtSLLA.cs @@ -1,127 +1,134 @@ -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Nachricht -{ - /// - /// Leistungserbringer - /// - internal class NachrichtSLLA : Nachricht - { - /// - /// Das Segment enthält Informationen über den tatsächlichen - /// Leistungserbringer und das IK der Krankenkasse von der - /// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor. - /// - public SegmentSLLAFKT SegmentSLLAFKT { get; private set; } - /// - /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum - /// - public SegmentSLLAREC SegmentSLLAREC { get; private set; } - /// - /// Das Segment enthält die Versichertendaten eines Abrechnungsfalles (Verordnung), und gilt gleichzeitig als BeginnSegment für einen Abrechnungsfall. Jeder Abrechnungsfall ist - /// mit einer eindeutigen Belegnummer zu kennzeichnen, die der - /// auf der Verordnung zu übertragenen Belegnummer(s. § 4 des - /// Richtlinientextes) entsprechen muss. - /// - public SegmentSLLAINV SegmentSLLAINV { get; private set; } - /// - /// Dieses Segment enthält bei Korrekturlieferungen die ursprünglichen Rechnungsinformationen. Es wird zunächst nur - /// in Abhängigkeit für die Verarbeitungskennzeichen - /// '02' Nachforderung, - /// ‚03‘ Zuzahlungsforderung und - /// ‚04‘ Korrekturrechnung - /// (Schlüsselverzeichnis Anlage 3, Kapitel 8.1.7) geliefert - /// - public SegmentSLLAURI SegmentSLLAURI { get; private set; } - /// - /// Das Segment enthält den Namen und die Adressdaten des - /// Versicherten. - /// - public SegmentSLLANAD SegmentSLLANAD { get; private set; } - /// - /// Das Segment enthält den Imagenamen bei Übermittlung von - /// Imagearchiven durch den Absender. - /// - public SegmentSLLAIMG SegmentSLLAIMG { get; private set; } - - /// - /// Das Segment dient zur Abrechnung der einzelnen Positionen, /// die für den abzurechnenden Fall angefallen sind.Es ist so oft - /// wiederholbar, wie Abrechnungspositionen vorkommen. - /// - public SegmentSLLAENF SegmentSLLAENF { get; private set; } - /// - /// Mit diesem Segment können weitere Informationen, bezogen /// auf die abzurechnende Position übermittelt werden.Hier können u.a.die Uhrzeit und die gefahrenen Kilometer angegeben - /// werden. Es kann je abzurechnende Position einmal vorkommen - /// - public SegmentSLLASUT SegmentSLLASUT { get; private set; } - /// - /// Mit diesem Segment kann zu jeder abzurechnenden Position - /// ein Text(z.B.als Begründung) hinterlegt werden.Es kann je - /// abzurechnende Position einmal vorkommen. - /// - public SegmentSLLATXT SegmentSLLATXT { get; private set; } - /// - /// Mit diesem Segment kann zu jeder abzurechnenden Position /// Mehrwertsteuer angegeben werden.Benutzt werden soll das /// Segment nur dann, wenn dem in ENF genannten Einzelbetrag - /// die Mehrwertsteuer hinzuzurechnen ist. - /// - public SegmentSLLAMWS SegmentSLLAMWS { get; private set; } - /// - /// Das Segment enthält Angaben über die Zuzahlung. Das Segment ist bis auf weiteres nicht zu übermitteln. Das Segment ist - /// für spätere Ausprägungen reserviert. - /// - public SegmentSLLAZUZ SegmentSLLAZUZ { get; private set; } - /// - /// Das Segment enthält allgemeine Angaben zum Abrechnungsfall (Verordnung) und ist zu übermitteln, wenn eine ärztliche /// Verordnung, ein Reparatur- oder Berechtigungsschein oder - /// Unfall/BVG vorliegt. - /// - public SegmentSLLAZUV SegmentSLLAZUV { get; private set; } - /// - /// Das Segment dient zur Angabe der Diagnose und ist so oft - /// wiederholbar, wie Diagnosen vorliegen - /// - public SegmentSLLADIA SegmentSLLADIA { get; private set; } - /// - /// Das Segment enthält Angaben über die von der Krankenkasse /// ausgesprochene Kostenzusage/Genehmigung und ist nur zu - /// übermitteln, wenn diese vorliegt. - /// - public SegmentSLLASKZ SegmentSLLASKZ { get; private set; } - /// - /// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung) - /// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer) - /// - public SegmentSLLABES SegmentSLLABES { get; private set; } - - public NachrichtSLLA() - { - SegmentSLLAFKT = new SegmentSLLAFKT(); - SegmentSLLAREC = new SegmentSLLAREC(); - SegmentSLLAINV = new SegmentSLLAINV(); - SegmentSLLAURI = new SegmentSLLAURI(); - SegmentSLLANAD = new SegmentSLLANAD(); - SegmentSLLAIMG = new SegmentSLLAIMG(); - - SegmentSLLAENF = new SegmentSLLAENF(); - SegmentSLLASUT = new SegmentSLLASUT(); - SegmentSLLATXT = new SegmentSLLATXT(); - SegmentSLLAMWS = new SegmentSLLAMWS(); - SegmentSLLAZUZ = new SegmentSLLAZUZ(); - SegmentSLLAZUV = new SegmentSLLAZUV(); - SegmentSLLADIA = new SegmentSLLADIA(); - SegmentSLLASKZ = new SegmentSLLASKZ(); - SegmentSLLABES = new SegmentSLLABES(); - } - - public override List GetSegments() - { - return new List() { SegmentSLLAFKT, SegmentSLLAREC, SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG, - SegmentSLLAENF, SegmentSLLASUT, SegmentSLLATXT, SegmentSLLAMWS, - SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES - }; - } - } -} +using Dakota.Models.Segmente; +using Dakota.Models.Segmente.SLLA; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Nachrichten +{ + /// + /// Leistungserbringer + /// + internal class NachrichtSLLA : Nachricht + { + /// + /// Das Segment enthält Informationen über den tatsächlichen + /// Leistungserbringer und das IK der Krankenkasse von der + /// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor. + /// + public SegmentSLLAFKT SegmentSLLAFKT { get; private set; } + /// + /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum + /// + public SegmentSLLAREC SegmentSLLAREC { get; private set; } + /// + /// Das Segment enthält die Versichertendaten eines Abrechnungsfalles (Verordnung), und gilt gleichzeitig als BeginnSegment für einen Abrechnungsfall. Jeder Abrechnungsfall ist + /// mit einer eindeutigen Belegnummer zu kennzeichnen, die der + /// auf der Verordnung zu übertragenen Belegnummer(s. § 4 des + /// Richtlinientextes) entsprechen muss. + /// + public SegmentSLLAINV SegmentSLLAINV { get; private set; } + /// + /// Dieses Segment enthält bei Korrekturlieferungen die ursprünglichen Rechnungsinformationen. Es wird zunächst nur + /// in Abhängigkeit für die Verarbeitungskennzeichen + /// '02' Nachforderung, + /// ‚03‘ Zuzahlungsforderung und + /// ‚04‘ Korrekturrechnung + /// (Schlüsselverzeichnis Anlage 3, Kapitel 8.1.7) geliefert + /// + public SegmentSLLAURI SegmentSLLAURI { get; private set; } + /// + /// Das Segment enthält den Namen und die Adressdaten des + /// Versicherten. + /// + public SegmentSLLANAD SegmentSLLANAD { get; private set; } + /// + /// Das Segment enthält den Imagenamen bei Übermittlung von + /// Imagearchiven durch den Absender. + /// + public SegmentSLLAIMG SegmentSLLAIMG { get; private set; } + + /// + /// Das Segment dient zur Abrechnung der einzelnen Positionen, + /// die für den abzurechnenden Fall angefallen sind.Es ist so oft + /// wiederholbar, wie Abrechnungspositionen vorkommen. + /// + public SegmentSLLAENF SegmentSLLAENF { get; private set; } + /// + /// Mit diesem Segment können weitere Informationen, bezogen + /// auf die abzurechnende Position übermittelt werden.Hier können u.a.die Uhrzeit und die gefahrenen Kilometer angegeben + /// werden. Es kann je abzurechnende Position einmal vorkommen + /// + public SegmentSLLASUT SegmentSLLASUT { get; private set; } + /// + /// Mit diesem Segment kann zu jeder abzurechnenden Position + /// ein Text(z.B.als Begründung) hinterlegt werden.Es kann je + /// abzurechnende Position einmal vorkommen. + /// + public SegmentSLLATXT SegmentSLLATXT { get; private set; } + /// + /// Mit diesem Segment kann zu jeder abzurechnenden Position + /// Mehrwertsteuer angegeben werden.Benutzt werden soll das + /// Segment nur dann, wenn dem in ENF genannten Einzelbetrag + /// die Mehrwertsteuer hinzuzurechnen ist. + /// + public SegmentSLLAMWS SegmentSLLAMWS { get; private set; } + /// + /// Das Segment enthält Angaben über die Zuzahlung. Das Segment ist bis auf weiteres nicht zu übermitteln. Das Segment ist + /// für spätere Ausprägungen reserviert. + /// + public SegmentSLLAZUZ SegmentSLLAZUZ { get; private set; } + /// + /// Das Segment enthält allgemeine Angaben zum Abrechnungsfall (Verordnung) und ist zu übermitteln, wenn eine ärztliche + /// Verordnung, ein Reparatur- oder Berechtigungsschein oder + /// Unfall/BVG vorliegt. + /// + public SegmentSLLAZUV SegmentSLLAZUV { get; private set; } + /// + /// Das Segment dient zur Angabe der Diagnose und ist so oft + /// wiederholbar, wie Diagnosen vorliegen + /// + public SegmentSLLADIA SegmentSLLADIA { get; private set; } + /// + /// Das Segment enthält Angaben über die von der Krankenkasse + /// ausgesprochene Kostenzusage/Genehmigung und ist nur zu + /// übermitteln, wenn diese vorliegt. + /// + public SegmentSLLASKZ SegmentSLLASKZ { get; private set; } + /// + /// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung) + /// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer) + /// + public SegmentSLLABES SegmentSLLABES { get; private set; } + + public NachrichtSLLA() + { + SegmentSLLAFKT = new SegmentSLLAFKT(); + SegmentSLLAREC = new SegmentSLLAREC(); + SegmentSLLAINV = new SegmentSLLAINV(); + SegmentSLLAURI = new SegmentSLLAURI(); + SegmentSLLANAD = new SegmentSLLANAD(); + SegmentSLLAIMG = new SegmentSLLAIMG(); + + SegmentSLLAENF = new SegmentSLLAENF(); + SegmentSLLASUT = new SegmentSLLASUT(); + SegmentSLLATXT = new SegmentSLLATXT(); + SegmentSLLAMWS = new SegmentSLLAMWS(); + SegmentSLLAZUZ = new SegmentSLLAZUZ(); + SegmentSLLAZUV = new SegmentSLLAZUV(); + SegmentSLLADIA = new SegmentSLLADIA(); + SegmentSLLASKZ = new SegmentSLLASKZ(); + SegmentSLLABES = new SegmentSLLABES(); + } + + public override List GetSegments() + { + return new List() { SegmentSLLAFKT, SegmentSLLAREC, SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG, + SegmentSLLAENF, SegmentSLLASUT, SegmentSLLATXT, SegmentSLLAMWS, + SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES + }; + } + } +} diff --git a/Dakota/Models/Nachricht/NachrichtSLLA2.cs b/Dakota/Models/Nachrichten/NachrichtSLLA2.cs similarity index 94% rename from Dakota/Models/Nachricht/NachrichtSLLA2.cs rename to Dakota/Models/Nachrichten/NachrichtSLLA2.cs index 50e475c48..74001e25e 100644 --- a/Dakota/Models/Nachricht/NachrichtSLLA2.cs +++ b/Dakota/Models/Nachrichten/NachrichtSLLA2.cs @@ -1,116 +1,119 @@ -using Dakota.Models.Segmente; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dakota.Models.Nachricht -{ - /// - /// Leistungserbringer - /// - internal class NachrichtSLLA2 : Nachricht - { - /// - /// Das Segment enthält Informationen über den tatsächlichen - /// Leistungserbringer und das IK der Krankenkasse von der - /// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor. - /// - public SegmentSLLAFKT SegmentSLLAFKT { get; private set; } - /// - /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum - /// - public SegmentSLLAREC SegmentSLLAREC { get; private set; } - /// - /// Das Segment enthält die Versichertendaten eines Abrechnungsfalles (Verordnung), und gilt gleichzeitig als BeginnSegment für einen Abrechnungsfall. Jeder Abrechnungsfall ist - /// mit einer eindeutigen Belegnummer zu kennzeichnen, die der - /// auf der Verordnung zu übertragenen Belegnummer(s. § 4 des - /// Richtlinientextes) entsprechen muss. - /// - public SegmentSLLAINV SegmentSLLAINV { get; private set; } - /// - /// Dieses Segment enthält bei Korrekturlieferungen die ursprünglichen Rechnungsinformationen. Es wird zunächst nur - /// in Abhängigkeit für die Verarbeitungskennzeichen - /// '02' Nachforderung, - /// ‚03‘ Zuzahlungsforderung und - /// ‚04‘ Korrekturrechnung - /// (Schlüsselverzeichnis Anlage 3, Kapitel 8.1.7) geliefert - /// - public SegmentSLLAURI SegmentSLLAURI { get; private set; } - /// - /// Das Segment enthält den Namen und die Adressdaten des - /// Versicherten. - /// - public SegmentSLLANAD SegmentSLLANAD { get; private set; } - /// - /// Das Segment enthält den Imagenamen bei Übermittlung von - /// Imagearchiven durch den Absender. - /// - public SegmentSLLAIMG SegmentSLLAIMG { get; private set; } - /// - /// Das Segment dient zur Abrechnung der einzelnen Positionen, /// die für den abzurechnenden Fall angefallen sind. - /// Es ist so oft - /// wiederholbar, wie Abrechnungspositionen vorkommen. - /// - public List Abrechnungspositions { get; set; } - /// - /// Das Segment enthält Angaben über die Zuzahlung. Das Segment ist bis auf weiteres nicht zu übermitteln. Das Segment ist - /// für spätere Ausprägungen reserviert. - /// - public SegmentSLLAZUV SegmentSLLAZUV { get; private set; } - /// - /// Das Segment dient zur Angabe der Diagnose und ist so oft - /// wiederholbar, wie Diagnosen vorliegen - /// - public SegmentSLLADIA SegmentSLLADIA { get; private set; } - /// - /// Das Segment enthält Angaben über die von der Krankenkasse /// ausgesprochene Kostenzusage/Genehmigung und ist nur zu - /// übermitteln, wenn diese vorliegt. - /// - public SegmentSLLASKZ SegmentSLLASKZ { get; private set; } - /// - /// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung) - /// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer) - /// - public SegmentSLLABES SegmentSLLABES { get; private set; } - - public NachrichtSLLA2() - { - SegmentSLLAFKT = new SegmentSLLAFKT(); - SegmentSLLAREC = new SegmentSLLAREC(); - SegmentSLLAINV = new SegmentSLLAINV(); - SegmentSLLAURI = new SegmentSLLAURI(); - SegmentSLLANAD = new SegmentSLLANAD(); - SegmentSLLAIMG = new SegmentSLLAIMG(); - - Abrechnungspositions = new List(); - - SegmentSLLAZUV = new SegmentSLLAZUV(); - SegmentSLLADIA = new SegmentSLLADIA(); - SegmentSLLASKZ = new SegmentSLLASKZ(); - SegmentSLLABES = new SegmentSLLABES(); - } - - public void AddPosition(Abrechnungsposition pos) - { - Abrechnungspositions.Add(pos); - } - - public override List GetSegments() - { - var list = new List() { SegmentSLLAFKT, SegmentSLLAREC, SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG }; - var list2 = new List() { SegmentSLLABES }; - //var list2 = new List() { SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES }; - - foreach (var seg in Abrechnungspositions) - { - list.AddRange(seg.GetSegments()); - } - - list.AddRange(list2); - - return list; - } - } -} +using Dakota.Models.Segmente; +using Dakota.Models.Segmente.SLLA; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Nachrichten +{ + /// + /// Leistungserbringer + /// + internal class NachrichtSLLA2 : Nachricht + { + /// + /// Das Segment enthält Informationen über den tatsächlichen + /// Leistungserbringer und das IK der Krankenkasse von der + /// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor. + /// + public SegmentSLLAFKT SegmentSLLAFKT { get; private set; } + /// + /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum + /// + public SegmentSLLAREC SegmentSLLAREC { get; private set; } + /// + /// Das Segment enthält die Versichertendaten eines Abrechnungsfalles (Verordnung), und gilt gleichzeitig als BeginnSegment für einen Abrechnungsfall. Jeder Abrechnungsfall ist + /// mit einer eindeutigen Belegnummer zu kennzeichnen, die der + /// auf der Verordnung zu übertragenen Belegnummer(s. § 4 des + /// Richtlinientextes) entsprechen muss. + /// + public SegmentSLLAINV SegmentSLLAINV { get; private set; } + /// + /// Dieses Segment enthält bei Korrekturlieferungen die ursprünglichen Rechnungsinformationen. Es wird zunächst nur + /// in Abhängigkeit für die Verarbeitungskennzeichen + /// '02' Nachforderung, + /// ‚03‘ Zuzahlungsforderung und + /// ‚04‘ Korrekturrechnung + /// (Schlüsselverzeichnis Anlage 3, Kapitel 8.1.7) geliefert + /// + public SegmentSLLAURI SegmentSLLAURI { get; private set; } + /// + /// Das Segment enthält den Namen und die Adressdaten des + /// Versicherten. + /// + public SegmentSLLANAD SegmentSLLANAD { get; private set; } + /// + /// Das Segment enthält den Imagenamen bei Übermittlung von + /// Imagearchiven durch den Absender. + /// + public SegmentSLLAIMG SegmentSLLAIMG { get; private set; } + /// + /// Das Segment dient zur Abrechnung der einzelnen Positionen, + /// die für den abzurechnenden Fall angefallen sind. + /// Es ist so oft + /// wiederholbar, wie Abrechnungspositionen vorkommen. + /// + public List Abrechnungspositions { get; set; } + /// + /// Das Segment enthält Angaben über die Zuzahlung. Das Segment ist bis auf weiteres nicht zu übermitteln. Das Segment ist + /// für spätere Ausprägungen reserviert. + /// + public SegmentSLLAZUV SegmentSLLAZUV { get; private set; } + /// + /// Das Segment dient zur Angabe der Diagnose und ist so oft + /// wiederholbar, wie Diagnosen vorliegen + /// + public SegmentSLLADIA SegmentSLLADIA { get; private set; } + /// + /// Das Segment enthält Angaben über die von der Krankenkasse + /// ausgesprochene Kostenzusage/Genehmigung und ist nur zu + /// übermitteln, wenn diese vorliegt. + /// + public SegmentSLLASKZ SegmentSLLASKZ { get; private set; } + /// + /// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung) + /// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer) + /// + public SegmentSLLABES SegmentSLLABES { get; private set; } + + public NachrichtSLLA2() + { + SegmentSLLAFKT = new SegmentSLLAFKT(); + SegmentSLLAREC = new SegmentSLLAREC(); + SegmentSLLAINV = new SegmentSLLAINV(); + SegmentSLLAURI = new SegmentSLLAURI(); + SegmentSLLANAD = new SegmentSLLANAD(); + SegmentSLLAIMG = new SegmentSLLAIMG(); + + Abrechnungspositions = new List(); + + SegmentSLLAZUV = new SegmentSLLAZUV(); + SegmentSLLADIA = new SegmentSLLADIA(); + SegmentSLLASKZ = new SegmentSLLASKZ(); + SegmentSLLABES = new SegmentSLLABES(); + } + + public void AddPosition(Abrechnungsposition pos) + { + Abrechnungspositions.Add(pos); + } + + public override List GetSegments() + { + var list = new List() { SegmentSLLAFKT, SegmentSLLAREC, SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG }; + var list2 = new List() { SegmentSLLABES }; + //var list2 = new List() { SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES }; + + foreach (var seg in Abrechnungspositions) + { + list.AddRange(seg.GetSegments()); + } + + list.AddRange(list2); + + return list; + } + } +} diff --git a/Dakota/Models/Nachrichten/NachrichtSLLA3.cs b/Dakota/Models/Nachrichten/NachrichtSLLA3.cs new file mode 100644 index 000000000..6f06f1781 --- /dev/null +++ b/Dakota/Models/Nachrichten/NachrichtSLLA3.cs @@ -0,0 +1,50 @@ +using Dakota.Models.Block; +using Dakota.Models.Segmente; +using Dakota.Models.Segmente.SLLA; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Nachrichten +{ + /// + /// Leistungserbringer + /// + internal class NachrichtSLLA3 : Nachricht + { + /// + /// Das Segment enthält Informationen über den tatsächlichen + /// Leistungserbringer und das IK der Krankenkasse von der + /// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor. + /// + public SegmentSLLAFKT SegmentSLLAFKT { get; private set; } + /// + /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum + /// + public SegmentSLLAREC SegmentSLLAREC { get; private set; } + /// + /// Abrechnungsfälle (INV - BES) + /// + public List Abrechnungsfalle { get; set; } + + public NachrichtSLLA3() + { + SegmentSLLAFKT = new SegmentSLLAFKT(); + SegmentSLLAREC = new SegmentSLLAREC(); + } + + public override List GetSegments() + { + var list = new List() { SegmentSLLAFKT, SegmentSLLAREC }; + + foreach (var block in Abrechnungsfalle) + { + list.AddRange(block.GetSegments()); + } + + return list; + } + } +} diff --git a/Dakota/Models/Schlüssel/SchlüsselLeistungserbringerSammelgruppenschlussel.cs b/Dakota/Models/Schlüssel/SchlüsselLeistungserbringerSammelgruppenschlussel.cs new file mode 100644 index 000000000..62e48d4a3 --- /dev/null +++ b/Dakota/Models/Schlüssel/SchlüsselLeistungserbringerSammelgruppenschlussel.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Models.Schlüssel +{ + public class SchlüsselLeistungserbringerSammelgruppenschlussel : Schlüssel + { + public SchlüsselLeistungserbringerSammelgruppenschlussel(string val) : base(val) { } + + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonHilfsmitteln => new SchlüsselLeistungserbringerSammelgruppenschlussel("A"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonHeilmitteln => new SchlüsselLeistungserbringerSammelgruppenschlussel("B"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonHäuslicherKrankenpflege => new SchlüsselLeistungserbringerSammelgruppenschlussel("C"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonHaushaltshilfe => new SchlüsselLeistungserbringerSammelgruppenschlussel("D"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonKrankentransportleistungen => new SchlüsselLeistungserbringerSammelgruppenschlussel("E"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel Hebammen => new SchlüsselLeistungserbringerSammelgruppenschlussel("F"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel NichtArztlicheDialyseachleistung => new SchlüsselLeistungserbringerSammelgruppenschlussel("G"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonRehabilitationssport => new SchlüsselLeistungserbringerSammelgruppenschlussel("H"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerVonFunktionstraining => new SchlüsselLeistungserbringerSammelgruppenschlussel("I"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel WeitereSonstigeLeistungserbringer => new SchlüsselLeistungserbringerSammelgruppenschlussel("J"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerPräventions => new SchlüsselLeistungserbringerSammelgruppenschlussel("K"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerRehamassnahmen => new SchlüsselLeistungserbringerSammelgruppenschlussel("L"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel SozialpädiatrischeZentren => new SchlüsselLeistungserbringerSammelgruppenschlussel("M"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel SoziotherapeutischerLeistungserbringer => new SchlüsselLeistungserbringerSammelgruppenschlussel("N"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel SAPV => new SchlüsselLeistungserbringerSammelgruppenschlussel("O"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel LeistungserbringerNach132gSGB => new SchlüsselLeistungserbringerSammelgruppenschlussel("P"); + public static SchlüsselLeistungserbringerSammelgruppenschlussel Kurzzeitpflege => new SchlüsselLeistungserbringerSammelgruppenschlussel("Q"); + } +} diff --git a/Dakota/Models/Segmente/SLGA/SegmentSLGAFKT.cs b/Dakota/Models/Segmente/SLGA/SegmentSLGAFKT.cs index 1746f66a7..60e88daa3 100644 --- a/Dakota/Models/Segmente/SLGA/SegmentSLGAFKT.cs +++ b/Dakota/Models/Segmente/SLGA/SegmentSLGAFKT.cs @@ -44,7 +44,7 @@ namespace Dakota.Models.Segmente.SLGA /// Angabe identisch mit SLLA.FKT.IK der /// Krankenkasse der zugehörigen SLLANachricht. /// - public Datenelement IKKrankenkasse { get; private set; } + public Datenelement IKKrankenkasseKVKarte { get; private set; } /// /// Einzutragen ist das IK des Absenders der Datei. Diese Angabe ist identisch mit UNB.Absender /// @@ -56,7 +56,7 @@ namespace Dakota.Models.Segmente.SLGA Sammelrechnung = new Datenelement("Sammelrechnung", 1, Feldart.Kann); IKLeistungserbringers = new Datenelement("IKLeistungserbringers", 9, Feldart.Muss); IKKostenträger = new Datenelement("IKKostenträger", 9, Feldart.Muss); - IKKrankenkasse = new Datenelement("IKKrankenkasse", 9, Feldart.Kann); + IKKrankenkasseKVKarte = new Datenelement("IKKrankenkasse", 9, Feldart.Kann); IKAbsender = new Datenelement("IKAbsender", 9, Feldart.Muss); } diff --git a/Dakota/Models/Segmente/Segment.cs b/Dakota/Models/Segmente/Segment.cs index 60ebeffdb..80c353dba 100644 --- a/Dakota/Models/Segmente/Segment.cs +++ b/Dakota/Models/Segmente/Segment.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Dakota.Models.Segmente { - internal abstract class Segment : IRowable + internal abstract class Segment : IRow { //public List Datenelemente { get; set; } diff --git a/Dakota/Models/Segmente/SegmentUNT.cs b/Dakota/Models/Segmente/SegmentUNT.cs index 2f990be56..8a6329d8c 100644 --- a/Dakota/Models/Segmente/SegmentUNT.cs +++ b/Dakota/Models/Segmente/SegmentUNT.cs @@ -15,15 +15,15 @@ namespace Dakota.Models.Segmente /// Anzahl der Segmente in der Nachricht einschließlich der Segmente /// UNH und UNT mit führenden Nullen. /// - public Datenelement AnzahlEinheiten { get; private set; } + public DatenelementCounter AnzahlEinheiten { get; private set; } /// /// wie in UNH /// public Datenelement Nachrichtenreferenznummer { get; private set; } - public SegmentUNT() + public SegmentUNT(Func counter) { - AnzahlEinheiten = new Datenelement("AnzahlEinheiten", 6, Feldart.Muss); + AnzahlEinheiten = new DatenelementCounter("AnzahlEinheiten", 6, counter); Nachrichtenreferenznummer = new Datenelement("Nachrichtenreferenznummer", 0, 14, Feldart.Muss); } diff --git a/Service/Service.csproj b/Service/Service.csproj index fd7726661..1930c9934 100644 --- a/Service/Service.csproj +++ b/Service/Service.csproj @@ -478,7 +478,6 @@ - @@ -519,9 +518,13 @@ + + + .editorconfig + Designer diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs index 87df8d768..2eedcfbcc 100644 --- a/Service/ServiceImplementations/OperationsServiceImp.cs +++ b/Service/ServiceImplementations/OperationsServiceImp.cs @@ -7705,15 +7705,28 @@ namespace BeWo.Service.ServiceImplementations { try { - var baseoid = long.Parse((string)param); + // Hier Input Daten Aufbrechen und jeweils den Files zuordnen - var accounting = new AccountingServiceImp(); + // Dann jeweils Info erzeugen - var invoice = accounting.GetServiceInvoiceByInvoiceBaseOid(baseoid); + // Und final dann Datei(en) + + var year = 2023; + var month = 6; + + var rechnungsnummer = "xyz"; + + var code = DakotaFileCreator.GenerateDakotaFilesByMonth(year, month); + + //var baseoid = long.Parse((string)param); + + //var accounting = new AccountingServiceImp(); + + //var invoice = accounting.GetServiceInvoiceByInvoiceBaseOid(baseoid); - var code = DakotaFileCreator.GetAsciiCode(invoice); + //var code = DakotaFileCreator.GenerateAsciiCode(invoice); - return code; + return code.FirstOrDefault(); } catch (Exception e) { diff --git a/Service/ServiceUtils/Generell/DakotaFileCreator.cs b/Service/ServiceUtils/Generell/DakotaFileCreator.cs deleted file mode 100644 index 457c1c3b5..000000000 --- a/Service/ServiceUtils/Generell/DakotaFileCreator.cs +++ /dev/null @@ -1,64 +0,0 @@ -using BS.Shared.DataContracts; -using Dakota; -using Dakota.Models.Schlüssel; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BeWo.Service.ServiceUtils.Generell -{ - public static class DakotaFileCreator - { - public static string GetAsciiCode(ServiceInvoiceDC dc) - { - var info = LoadInfo(dc); - - var file = new DakotaFile(); - - file.Generate(info); - - return file.GetRows(); - } - - public static DakotaFileInfo LoadInfo(ServiceInvoiceDC dc) - { - var res = new DakotaFileInfo(); - - res.Absenderbezeichnung = "123456789"; - res.Empfangerbezeichnung = "987654321"; - res.Datenaustauschreferenz = 1; - res.Anwendungsreferenz = "abovollkra.txt"; - res.Testindikator = SchlüsselTestindikator.Testdatei; - - res.IKLeistungserbringers = "abovollkrass.txt"; - res.IKKostenträger = "abovollkrass.txt"; - res.IKKrankenkasse = "abovollkrass.txt"; - res.Rechnungsnummer = dc.InvoiceBase.InvoiceNumber; - // Einheitlich monatlich - res.Rechnungsdatum = dc.InvoiceBase.InvoiceDate.Value; - - res.Summenstatus = SchlüsselSummenstatus.Mitglieder; - res.Gesamtrechnungsbetrag = 3.5m; - res.Gesamtbruttobetrag = 3.5m; - res.GesamtbetragZuzahlung = 3.5m; - res.Rechnungsart = SchlüsselRechnungsart.AbrechnungVonLeistungserbringer; - res.Name1 = "nam7"; - res.Name2 = "nam4"; - res.Name3 = "nam3"; - res.Name4 = "nam1"; - - res.Verarbeitungskennzeichen = SchlüsselVerarbeitungskennzeichen.AbrechnungOhneBesonderheit; - - res.IKKrankenkasse = "abovollkrass.txt"; - res.IKKrankenkasse = "abovollkrass.txt"; - res.IKKrankenkasse = "abovollkrass.txt"; - res.IKKrankenkasse = "abovollkrass.txt"; - res.IKKrankenkasse = "abovollkrass.txt"; - res.IKKrankenkasse = "abovollkrass.txt"; - - return res; - } - } -}