From fa6087325a1438af225debbce19a2d61e7d4be59 Mon Sep 17 00:00:00 2001 From: rene Date: Fri, 16 Jun 2023 16:00:37 +0200 Subject: [PATCH] first half of basic code impl --- BeWoOhneReports.sln | 14 +++++ Dakota/Dakota.csproj | 73 +++++++++++++++++++++ Dakota/DakotaConfig.cs | 16 +++++ Dakota/Dateneinheit.cs | 13 ++++ Dakota/Datenelement.cs | 37 +++++++++++ Dakota/Datenelementgruppe.cs | 36 +++++++++++ Dakota/Nachricht.cs | 18 ++++++ Dakota/NachrichtSLGA.cs | 43 +++++++++++++ Dakota/NachrichtSLLA.cs | 49 +++++++++++++++ Dakota/Nutzdatendatei.cs | 18 ++++++ Dakota/Properties/AssemblyInfo.cs | 36 +++++++++++ Dakota/Segmente/Segment.cs | 21 +++++++ Dakota/Segmente/SegmentSLGAFKT.cs | 67 ++++++++++++++++++++ Dakota/Segmente/SegmentSLGAGES.cs | 82 ++++++++++++++++++++++++ Dakota/Segmente/SegmentSLGANAM.cs | 46 ++++++++++++++ Dakota/Segmente/SegmentSLGAREC.cs | 84 +++++++++++++++++++++++++ Dakota/Segmente/SegmentSLGASKO.cs | 43 +++++++++++++ Dakota/Segmente/SegmentSLGAUST.cs | 37 +++++++++++ Dakota/Segmente/SegmentSLLAFKT.cs | 12 ++++ Dakota/Segmente/SegmentSLLAIMG.cs | 12 ++++ Dakota/Segmente/SegmentSLLAINV.cs | 12 ++++ Dakota/Segmente/SegmentSLLANAD.cs | 12 ++++ Dakota/Segmente/SegmentSLLAREC.cs | 12 ++++ Dakota/Segmente/SegmentSLLAURI.cs | 12 ++++ Dakota/Segmente/SegmentUNB.cs | 101 ++++++++++++++++++++++++++++++ Dakota/Segmente/SegmentUNH.cs | 74 ++++++++++++++++++++++ Dakota/Segmente/SegmentUNT.cs | 34 ++++++++++ Dakota/Segmente/SegmentUNZ.cs | 35 +++++++++++ Dakota/SozioTherapieDatei.cs | 15 +++++ 29 files changed, 1064 insertions(+) create mode 100644 Dakota/Dakota.csproj create mode 100644 Dakota/DakotaConfig.cs create mode 100644 Dakota/Dateneinheit.cs create mode 100644 Dakota/Datenelement.cs create mode 100644 Dakota/Datenelementgruppe.cs create mode 100644 Dakota/Nachricht.cs create mode 100644 Dakota/NachrichtSLGA.cs create mode 100644 Dakota/NachrichtSLLA.cs create mode 100644 Dakota/Nutzdatendatei.cs create mode 100644 Dakota/Properties/AssemblyInfo.cs create mode 100644 Dakota/Segmente/Segment.cs create mode 100644 Dakota/Segmente/SegmentSLGAFKT.cs create mode 100644 Dakota/Segmente/SegmentSLGAGES.cs create mode 100644 Dakota/Segmente/SegmentSLGANAM.cs create mode 100644 Dakota/Segmente/SegmentSLGAREC.cs create mode 100644 Dakota/Segmente/SegmentSLGASKO.cs create mode 100644 Dakota/Segmente/SegmentSLGAUST.cs create mode 100644 Dakota/Segmente/SegmentSLLAFKT.cs create mode 100644 Dakota/Segmente/SegmentSLLAIMG.cs create mode 100644 Dakota/Segmente/SegmentSLLAINV.cs create mode 100644 Dakota/Segmente/SegmentSLLANAD.cs create mode 100644 Dakota/Segmente/SegmentSLLAREC.cs create mode 100644 Dakota/Segmente/SegmentSLLAURI.cs create mode 100644 Dakota/Segmente/SegmentUNB.cs create mode 100644 Dakota/Segmente/SegmentUNH.cs create mode 100644 Dakota/Segmente/SegmentUNT.cs create mode 100644 Dakota/Segmente/SegmentUNZ.cs create mode 100644 Dakota/SozioTherapieDatei.cs diff --git a/BeWoOhneReports.sln b/BeWoOhneReports.sln index 6a8978484..13075a9e8 100644 --- a/BeWoOhneReports.sln +++ b/BeWoOhneReports.sln @@ -29,6 +29,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReportingService", "ReportS EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatController", "..\Chat\ChatController\ChatController.csproj", "{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dakota", "Dakota\Dakota.csproj", "{47331732-DD96-4075-869F-83AA9F3F9937}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET = Debug|.NET @@ -139,6 +141,18 @@ Global {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Release|Any CPU.Build.0 = Release|Any CPU {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Debug|.NET.ActiveCfg = Debug|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Debug|.NET.Build.0 = Debug|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Release|.NET.ActiveCfg = Release|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Release|.NET.Build.0 = Release|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Release|Any CPU.Build.0 = Release|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {47331732-DD96-4075-869F-83AA9F3F9937}.Release|Mixed Platforms.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Dakota/Dakota.csproj b/Dakota/Dakota.csproj new file mode 100644 index 000000000..9a214e6bd --- /dev/null +++ b/Dakota/Dakota.csproj @@ -0,0 +1,73 @@ + + + + + Debug + AnyCPU + {47331732-DD96-4075-869F-83AA9F3F9937} + Library + Properties + Dakota + Dakota + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dakota/DakotaConfig.cs b/Dakota/DakotaConfig.cs new file mode 100644 index 000000000..a4472337e --- /dev/null +++ b/Dakota/DakotaConfig.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + public static class DakotaConfig + { + public static string TrennzeichenInnerhalb => ":"; + public static string Trennzeichen => "+"; + public static string Aufhebungszeichen => "?"; + public static string Segmentendezeichen => "'"; + } +} diff --git a/Dakota/Dateneinheit.cs b/Dakota/Dateneinheit.cs new file mode 100644 index 000000000..7b81c807f --- /dev/null +++ b/Dakota/Dateneinheit.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + internal abstract class Dateneinheit + { + public abstract string GetValue(); + } +} diff --git a/Dakota/Datenelement.cs b/Dakota/Datenelement.cs new file mode 100644 index 000000000..214d437be --- /dev/null +++ b/Dakota/Datenelement.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + internal class Datenelement : Dateneinheit + { + public string Value { get; set; } + public int MinStellen { get; set; } + public int MaxStellen { get; set; } + + public Datenelement() + { + + } + + public Datenelement(int min, int max) + { + MinStellen = min; + MaxStellen = max; + } + + public Datenelement(int count) + { + MinStellen = count; + MaxStellen = count; + } + + public override string GetValue() + { + return Value; + } + } +} diff --git a/Dakota/Datenelementgruppe.cs b/Dakota/Datenelementgruppe.cs new file mode 100644 index 000000000..60504d416 --- /dev/null +++ b/Dakota/Datenelementgruppe.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + internal class Datenelementgruppe : Dateneinheit + { + public Datenelement[] Datenelemente { get; set; } + + public Datenelementgruppe(int count) + { + if (count < 2) + throw new ArgumentOutOfRangeException("#37493218741616891269821"); + + Datenelemente = new Datenelement[count]; + } + + public void SetValue(int loc, string val) + { + Datenelemente[loc].Value = val; + } + + public string GetValue(int loc) + { + return Datenelemente[loc].GetValue(); + } + + public override string GetValue() + { + return string.Join(DakotaConfig.TrennzeichenInnerhalb, Datenelemente.Select(x => x.GetValue())); + } + } +} diff --git a/Dakota/Nachricht.cs b/Dakota/Nachricht.cs new file mode 100644 index 000000000..47b4a6f94 --- /dev/null +++ b/Dakota/Nachricht.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + internal class Nachricht + { + //public List Segmente { get; set; } + + //public Nachricht() + //{ + // Segmente = new List(); + //} + } +} diff --git a/Dakota/NachrichtSLGA.cs b/Dakota/NachrichtSLGA.cs new file mode 100644 index 000000000..83b7febbe --- /dev/null +++ b/Dakota/NachrichtSLGA.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + /// + /// Gesamtaufstellung der + /// Abrechnung(Rechnung) + /// + internal class NachrichtSLGA + { + /// + /// 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; } + } +} diff --git a/Dakota/NachrichtSLLA.cs b/Dakota/NachrichtSLLA.cs new file mode 100644 index 000000000..65ceebd6f --- /dev/null +++ b/Dakota/NachrichtSLLA.cs @@ -0,0 +1,49 @@ +using Dakota.Segmente; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + /// + /// Leistungserbringer + /// + internal class NachrichtSLLA + { + /// + /// 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; } + } +} diff --git a/Dakota/Nutzdatendatei.cs b/Dakota/Nutzdatendatei.cs new file mode 100644 index 000000000..11df8585f --- /dev/null +++ b/Dakota/Nutzdatendatei.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + internal class Nutzdatendatei + { + //public List Nachrichten { get; set; } + + //public Nutzdatendatei() + //{ + // Nachrichten = new List(); + //} + } +} diff --git a/Dakota/Properties/AssemblyInfo.cs b/Dakota/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..698714780 --- /dev/null +++ b/Dakota/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("Dakota")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Dakota")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("47331732-dd96-4075-869f-83aa9f3f9937")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Dakota/Segmente/Segment.cs b/Dakota/Segmente/Segment.cs new file mode 100644 index 000000000..f48ab3959 --- /dev/null +++ b/Dakota/Segmente/Segment.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal abstract class Segment + { + //public List Datenelemente { get; set; } + + public abstract string GetHead(); + public abstract List GetBody(); + + public string ToString() + { + return GetHead() + DakotaConfig.Trennzeichen + string.Join(DakotaConfig.Trennzeichen, GetBody().Select(x => x.GetValue())) + DakotaConfig.Segmentendezeichen; + } + } +} diff --git a/Dakota/Segmente/SegmentSLGAFKT.cs b/Dakota/Segmente/SegmentSLGAFKT.cs new file mode 100644 index 000000000..91d8129de --- /dev/null +++ b/Dakota/Segmente/SegmentSLGAFKT.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Das Segment ist je Nachricht einmal + /// zu übermitteln. + /// + internal class SegmentSLGAFKT : Segment + { + /// + /// siehe Schlüssel Verarbeitungskennzeichen Anlage 3 Abschnitt 8.1.7 + /// + public Datenelement Verarbeitungskennzeichen { get; private set; } + /// + /// Feld ist nur anzugeben und mit „J“ zu + /// füllen, wenn es sich um eine Sammelrechnung handelt + /// + public Datenelement Sammelrechnung { get; private set; } + /// + /// Es ist das IK des Leistungserbringers + /// anzugeben – mit folgender Ausnahme: + /// Erfolgt die Abrechnung über eine + /// Abrechnungsstelle mit Inkassovollmacht, so ist in der Sammelrechnungs-SLGA das IK der Abrechnungsstelle anzugeben. + /// + public Datenelement IKLeistungserbringers { get; private set; } + /// + /// Einzutragen ist das IK des Kostenträ- + /// gers auf den das IK der KV-Karte in + /// der Kostenträgerdatei verweist; diese + /// Angabe ist identisch mit dem IK des + /// Kostenträgers im FKT-Segment der + /// zugehörigen SLLA-Nachricht. + /// + public Datenelement IKKostenträger { get; private set; } + /// + /// IK der Krankenkasse von der KVKarte bzw. der ärztlichen Verordnung + /// ist zwingend anzugeben, außer es + /// handelt sich um eine Sammelrechnung-SLGA.Bei allen SLGA-Nachrichten als Gesamtrechnung ist diese + /// Angabe identisch mit SLLA.FKT.IK der + /// Krankenkasse der zugehörigen SLLANachricht. + /// + public Datenelement IKKrankenkasse { get; private set; } + /// + /// Einzutragen ist das IK des Absenders der Datei. Diese Angabe ist identisch mit UNB.Absender + /// + public Datenelement IKAbsender { get; private set; } + + public SegmentSLGAFKT() + { + Verarbeitungskennzeichen = new Datenelement(2); + Sammelrechnung = new Datenelement(1); + IKLeistungserbringers = new Datenelement(9); + IKKostenträger = new Datenelement(9); + IKKrankenkasse = new Datenelement(9); + IKAbsender = new Datenelement(9); + } + + public override string GetHead() => "FKT"; + public override List GetBody() + => new List() { Verarbeitungskennzeichen, Sammelrechnung }; + } +} diff --git a/Dakota/Segmente/SegmentSLGAGES.cs b/Dakota/Segmente/SegmentSLGAGES.cs new file mode 100644 index 000000000..ab9503b93 --- /dev/null +++ b/Dakota/Segmente/SegmentSLGAGES.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Das Segment muss je Nachricht mindestens zweimal und kann höchstens + /// neunmal vorkommen.Es ist stets ein + /// GES-Segment für den Summenstatus + /// 00 zuerst zu übermitteln.Diese + /// Summe ergibt sich aus der Addition + /// der nachfolgend anzugebenden Betragssummen des jeweiligen Versichertenstatus (SLGA). Die Betragssumme des Versichertenstatus + /// (SLGA) entspricht den Summen der + /// Abrechnungsfälle (SLLA), die diesen + /// Status beinhalten. + /// + internal class SegmentSLGAGES : Segment + { + /// + /// Siehe Schlüssel Summenstatus + /// Anlage 3 Abschnitt 8.1.6 + /// + public Datenelement Status { get; private set; } + /// + /// Bei Verarbeitungskennzeichen „01“, + /// „02“ und „04“: + /// Gesamtrechnungsbetrag(ggf.inklusive Mehrwertsteuer) + /// Berechnungsregel: + /// GES.Gesamtbruttobetrag minus + /// GES.Gesamtbetrag Zuzahlung und/oder Eigenanteil und/oder Pauschale + /// Korrekturbetrag. + /// Bei Verarbeitungskennzeichen „03“: + /// Entspricht dem Wert aus GES.Gesamtbetrag Zuzahlung und/oder Eigenanteil und/oder Pauschale Korrekturbetrag. + /// + public Datenelement Gesamtrechnungsbetrag { get; private set; } + /// + /// Bei Verarbeitungskennzeichen „01“, + /// „02“ und „04“: + /// Summe der Gesamtbruttobeträge der + /// Abrechnungsfälle(inklusive gesetzlicher Zuzahlungsbeträge oder Eigenanteil und/oder Pauschale Korrekturbetrag sowie ggf.Mehrwertsteuer) + /// aus BES. + /// Bei Verarbeitungskennzeichen „03“: + /// Ist der Gesamtbruttobetrag mit 0,00 + /// zu übermitteln. + /// + public Datenelement Gesamtbruttobetrag { get; private set; } + /// + /// Bei Verarbeitungskennzeichen „01“ + /// und „02“: + /// Summe der gesetzlichen Zuzahlungen und/oder der Eigenanteile der + /// Abrechnungsfälle aus BES + /// Berechnungsregel: + /// Summe aller Abrechnungsfälle(BES.Gesambetrag gesetzliche Zuzahlung + BES.Gesamtbetrag Eigenanteil). + /// Bei Verarbeitungskennzeichen „03“: + /// Summe der gesetzlichen Zuzahlungen und/oder der Eigenanteile der + /// Abrechnungsfälle aus GZF + /// Berechnungsregel: + /// Summe aller Abrechnungsfälle(GZF.Gesambetrag gesetzliche Zuzahlung + GZF.Gesamtbetrag Eigenanteil). + /// Bei Verarbeitungskennzeichen „04“: + /// Summe der gesetzlichen Zuzahlungen und/oder der Eigenanteile der + /// Abrechnungsfälle aus BES + /// Berechnungsregel: + /// Summe aller Abrechnungsfälle(BES.Gesambetrag gesetzliche Zuzahlung + BES.Gesamtbetrag Eigenanteil + BES.Pauschale Korrekturbetrag). + /// + public Datenelement GesamtbetragZuzahlung { get; private set; } + + public SegmentSLGAGES() + { + Status = new Datenelement(2); + Gesamtrechnungsbetrag = new Datenelement(3, 13); + Gesamtbruttobetrag = new Datenelement(3, 13); + GesamtbetragZuzahlung = new Datenelement(3, 13); + } + + public override string GetHead() => "GES"; + public override List GetBody() + => new List() { Status, Gesamtrechnungsbetrag, Gesamtbruttobetrag, GesamtbetragZuzahlung }; + } +} diff --git a/Dakota/Segmente/SegmentSLGANAM.cs b/Dakota/Segmente/SegmentSLGANAM.cs new file mode 100644 index 000000000..78c758cfe --- /dev/null +++ b/Dakota/Segmente/SegmentSLGANAM.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Das Segment ist je Nachricht einmal + /// zu übermitteln + /// + internal class SegmentSLGANAM : Segment + { + /// + /// Name bzw. Firmenbezeichnung des + /// Rechnungsstellers(Leistungserbringer oder Abrechnungsstelle + /// + public Datenelement Name1 { get; private set; } + /// + /// ggf. Ansprechpartner und Telefonnummer. + /// + public Datenelement Name2 { get; private set; } + /// + /// ggf. Ansprechpartner und Telefonnummer. + /// + public Datenelement Name3 { get; private set; } + /// + /// E-Mail-Adresse; + /// zugelassen sind Buchstaben und Ziffern, ausgenommen Umlaute + /// + public Datenelement Name4 { get; private set; } + + public SegmentSLGANAM() + { + Name1 = new Datenelement(0, 30); + Name2 = new Datenelement(0, 30); + Name3 = new Datenelement(0, 30); + Name4 = new Datenelement(0, 70); + } + + public override string GetHead() => "NAM"; + public override List GetBody() + => new List() { Name1, Name2, Name3, Name4 }; + } +} diff --git a/Dakota/Segmente/SegmentSLGAREC.cs b/Dakota/Segmente/SegmentSLGAREC.cs new file mode 100644 index 000000000..275d7f7a6 --- /dev/null +++ b/Dakota/Segmente/SegmentSLGAREC.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Das Segment ist je Nachricht einmal zu + /// übermitteln und ist identisch mit dem + /// REC-Segment der zugehörigen SLLANachricht. + /// + internal class SegmentSLGAREC : Segment + { + /// + /// Datenelementgruppe bestehend aus + /// Sammel-Rechnungsnummer:EinzelRechnungsnummer. + /// Einzutragen ist die eindeutige Rechnungsnummer, die der Rechnungssteller vergibt.Eine Rechnungsnummer ist + /// eindeutig, wenn sie über alle Rechnungsjahre hinweg - ohne Kombination mit anderen identifizierenden + /// Schlüsseln oder Merkmalen (z.B.IK des + /// Leistungserbringers, Rechnungsdatum) + /// – für eine Krankenkasse nur einer einzigen Rechnung zugeordnet werden + /// kann. + /// Diese Rechnungsnummer ist vollständig und unverändert auf die Urbelege + /// zu übernehmen (siehe Richtlinien § 4 + /// Abs.1 und § 3 des Richtlinientextes). + /// Außer bei der Sammelrechnung-SLGA + /// muss diese Angabe übereinstimmen + /// mit SLLA.REC.Rechnungsnummer der + /// zugehörigen SLLA-Nachricht.Die + /// Rechnungsnummer im Datensatz muss + /// identisch sein mit der Rechnungsnummer auf dem Begleitzettel(vgl.Anlage + /// 4). + /// Sonderzeichen(einschließlich Leerzeichen) sind nicht zugelassen, ausgenommen sind der Bindestrich „-„ und + /// der Schrägstrich „/“ als Gliederungszeichen.Aufeinanderfolgende Gliederungszeichen sind unzulässig.Die + /// Rechnungsnummer darf nicht mit einem Gliederungszeichen beginnen + /// bzw.enden. + /// + public Datenelementgruppe Rechnungsnummer { get; private set; } + /// + /// Die Einzel-Rechnungsnummer ist zusätzlich zur Sammel-Rechnungsnummer anzugeben, wenn eine SLGANachricht als Sammelrechnung zusätzlich in der Nutzdatendatei übermittelt + /// wird, ansonsten wird lediglich das Datenelement Sammel-Rechnungsnummer gefüllt und die Einzel-Rechnungsnummer auf „0“ gesetzt(zum Beispiel + /// 00234567:0 + /// + public Datenelement SammelRechnungsnummer { get; private set; } + /// + /// Ist der Absender der Datei eine Abrechnungsstelle mit Inkassovollmacht + /// erhält jeder Leistungserbringer innerhalb einer Rechnung eine eigene eindeutige Einzel-Rechnungsnummer. + /// Beispiel: Sammel-Rechnungsnummer + /// Abrechnungszentrum: 001, daraus + /// ergibt sich die Rechnungsnummer für + /// den 1. Leistungserbringer 001:1, für + /// den 2. Leistungserbringer 001 :2 usw + /// + public Datenelement EinzelRechnungsnummer { get; private set; } + /// + /// Rechnungsdatum JJJJMMTT + /// + public Datenelement Datum { get; private set; } + /// + /// Siehe Schlüssel Rechnungsart + /// Anlage 3 Abschnitt 8.1.4. + /// Dieser Schlüsselwert muss in der + /// Sammelrechnungs-SLGA und allen + /// zugehörigen SLGA-und SLLA-Nachrichten gleich sein. + /// + public Datenelement Rechnungsart { get; private set; } + + public SegmentSLGAREC() + { + Rechnungsnummer = new Datenelementgruppe(2); + SammelRechnungsnummer = Rechnungsnummer.Datenelemente[0] = new Datenelement(0, 14); + EinzelRechnungsnummer = Rechnungsnummer.Datenelemente[1] = new Datenelement(0, 6); + Datum = new Datenelement(8); + Rechnungsart = new Datenelement(1); + } + + public override List GetBody() + => new List() { Rechnungsnummer, Datum, Rechnungsart }; + + public override string GetHead() => "REC"; + } +} diff --git a/Dakota/Segmente/SegmentSLGASKO.cs b/Dakota/Segmente/SegmentSLGASKO.cs new file mode 100644 index 000000000..8c9d60284 --- /dev/null +++ b/Dakota/Segmente/SegmentSLGASKO.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Das Segment kann je Nachricht + /// mehrfach übermittelt werden. + /// Das Skonto ist bei Inanspruchnahme + /// durch den Kostenträger abzuziehen. + /// Der Leistungserbringer hat immer + /// den vollen Gesamtrechnungsbetrag + /// anzugeben. + /// + internal class SegmentSLGASKO : Segment + { + /// + /// Angabe des gewährten Skonto in + /// Prozent. Ohne führende 0 wenn. + /// xx,xy% + /// + public Datenelement SkontoProzent { get; private set; } + /// + /// Angabe des Zahlungsziels in Tagen. + /// Bei Zahlung innerhalb der hier angegebenen Tage wird Skonto gewährt + /// + public Datenelement Zahlungsziel { get; private set; } + + public SegmentSLGASKO() + { + SkontoProzent = new Datenelement(3, 5); + Zahlungsziel = new Datenelement(0, 3); + } + + public override string GetHead() => "SKO"; + + public override List GetBody() + => new List() { SkontoProzent, Zahlungsziel }; + } +} diff --git a/Dakota/Segmente/SegmentSLGAUST.cs b/Dakota/Segmente/SegmentSLGAUST.cs new file mode 100644 index 000000000..2862f66b3 --- /dev/null +++ b/Dakota/Segmente/SegmentSLGAUST.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Das Segment kann je Nachricht einmal übermittelt werden. Es ist nicht + /// in der Sammelrechnung-SLGA zu + /// übermitteln + /// + internal class SegmentSLGAUST : Segment + { + /// + /// Steuernummer gemäß § 14 Abs. 1a + /// UStG oder Umsatzsteuer-Identifikationsnummer. + /// + public Datenelement Steuernummer { get; private set; } + /// + /// "J" wenn befreit gem. § 4 UStG + /// + public Datenelement Kennung { get; private set; } + + public SegmentSLGAUST() + { + Steuernummer = new Datenelement(0, 20); + Kennung = new Datenelement(1); + } + + public override string GetHead() => "UST"; + + public override List GetBody() + => new List() { Steuernummer, Kennung }; + } +} diff --git a/Dakota/Segmente/SegmentSLLAFKT.cs b/Dakota/Segmente/SegmentSLLAFKT.cs new file mode 100644 index 000000000..cfe1e6482 --- /dev/null +++ b/Dakota/Segmente/SegmentSLLAFKT.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal class SegmentSLLAFKT + { + } +} diff --git a/Dakota/Segmente/SegmentSLLAIMG.cs b/Dakota/Segmente/SegmentSLLAIMG.cs new file mode 100644 index 000000000..c02d03239 --- /dev/null +++ b/Dakota/Segmente/SegmentSLLAIMG.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal class SegmentSLLAIMG + { + } +} diff --git a/Dakota/Segmente/SegmentSLLAINV.cs b/Dakota/Segmente/SegmentSLLAINV.cs new file mode 100644 index 000000000..f793cb104 --- /dev/null +++ b/Dakota/Segmente/SegmentSLLAINV.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal class SegmentSLLAINV + { + } +} diff --git a/Dakota/Segmente/SegmentSLLANAD.cs b/Dakota/Segmente/SegmentSLLANAD.cs new file mode 100644 index 000000000..f44a7f567 --- /dev/null +++ b/Dakota/Segmente/SegmentSLLANAD.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal class SegmentSLLANAD + { + } +} diff --git a/Dakota/Segmente/SegmentSLLAREC.cs b/Dakota/Segmente/SegmentSLLAREC.cs new file mode 100644 index 000000000..f48411451 --- /dev/null +++ b/Dakota/Segmente/SegmentSLLAREC.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal class SegmentSLLAREC + { + } +} diff --git a/Dakota/Segmente/SegmentSLLAURI.cs b/Dakota/Segmente/SegmentSLLAURI.cs new file mode 100644 index 000000000..13c6762e6 --- /dev/null +++ b/Dakota/Segmente/SegmentSLLAURI.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + internal class SegmentSLLAURI + { + } +} diff --git a/Dakota/Segmente/SegmentUNB.cs b/Dakota/Segmente/SegmentUNB.cs new file mode 100644 index 000000000..5e139e242 --- /dev/null +++ b/Dakota/Segmente/SegmentUNB.cs @@ -0,0 +1,101 @@ +using System.Collections.Generic; + +namespace Dakota.Segmente +{ + /// + /// Kopf-Segment einer Nutzdatendatei; es dient zur Eröffnung, + /// Identifizierung und Beschreibung der Datei.Eine Nutzdatendatei + /// besteht aus der Folge UNB bis UNZ.Sie beinhaltet die Nachrichten SLGA und SLLA, die mehrfach wiederholbar sind.So ist es + /// möglich, dass ein oder mehrere Leistungserbringer Abrechnungen für ein oder mehrere Kostenträger übermitteln. + /// + internal class SegmentUNB : Segment + { + /// + /// UNOC:3 + /// + public Datenelementgruppe Syntax { get; private set; } + /// + /// Vereinbarte EDIFACT-Syntax; + /// hier: UNOC = Groß- und Kleinbuchstaben, Umlaut + /// + public Datenelement SyntaxKennung { get; private set; } + /// + /// Vereinbarte Version der Syntax; + /// hier: Version 3 (derzeit aktuell) + /// + public Datenelement SyntaxVersionsnummer { get; private set; } + /// + /// IK des Absenders ( Abrechnungsstelle mit oder ohne Inkassobefugnis oder LE) + /// Genutzt werden die ersten 9 Stellen; + /// einzutragen ist das IK der absendenden Stelle. + /// Diese Angabe muss übereinstimmen mit SLGA.FKT.IK Absender der Datei. + /// + public Datenelement Absenderdatei { get; private set; } + /// + /// IK des Empfängers (d.h. Datenannahmestelle mit Entschlüsselungsbefugnis); + /// genutzt werden die ersten 9 Stellen; +/// einzutragen ist das IK der empfangenden Stelle + /// + public Datenelement Empfangdatei { get; private set; } + /// + /// JJJJMMTT:HHMM + /// + public Datenelementgruppe DatumUhrzeit { get; private set; } + /// + /// Erstelldatum der Datei + /// + public Datenelement Datum { get; private set; } + /// + /// Erstelluhrzeit der Datei + /// + public Datenelement Uhrzeit { get; private set; } + /// + /// Ab Version 12 ist die Datenaustauschreferenz zwingend zu füllen. + /// Genutzt werden die ersten 5 Stellen; + /// einzutragen ist die fortlaufende + /// Nummer der Lieferungen zwischen + /// Absender und Empfänger mit führenden Nullen. + /// Bei Überlauf der Datenaustauschreferenz („99999“) ist wieder + /// bei Eins(„00001“) zu beginnen + /// + public Dateneinheit Datenaustauschreferenz { get; private set; } + /// + /// Einzutragen ist der Leistungserbringer-Sammelgruppenschlüssel, + /// siehe Schlüssel Anlage 3 Abschnitt 8.1.14 + /// + public Datenelement Leistungsbereich { get; private set; } + /// + /// Genutzt werden die ersten 11 Stellen; + /// einzutragen ist der logische Dateiname s.Anhang 1 zur Anlage 1 + /// zum Kapitel 4. + /// + public Datenelement Anwengundsreferenz { get; private set; } + /// + /// Inhalt = 0 wenn Testdatei + /// Inhalt = 1 wenn Erprobungsdatei + /// Inhalt = 2 wenn Echtdatei + /// + public Datenelement Testindikator { get; private set; } + + public SegmentUNB() + { + Syntax = new Datenelementgruppe(2); + SyntaxKennung = Syntax.Datenelemente[0] = new Datenelement(4); + SyntaxVersionsnummer = Syntax.Datenelemente[1] = new Datenelement(1); + Absenderdatei = new Datenelement(0, 35); + Empfangdatei = new Datenelement(0, 35); + DatumUhrzeit = new Datenelementgruppe(2); + Datum = DatumUhrzeit.Datenelemente[0] = new Datenelement(8); + Uhrzeit = DatumUhrzeit.Datenelemente[1] = new Datenelement(4); + Datenaustauschreferenz = new Datenelement(0, 14); + Leistungsbereich = new Datenelement(1); + Anwengundsreferenz = new Datenelement(0, 14); + Testindikator = new Datenelement(1); + } + + public override string GetHead() => "UNB"; + + public override List GetBody() + => new List { Syntax, Absenderdatei, Empfangdatei, DatumUhrzeit, Datenaustauschreferenz, Leistungsbereich, Anwengundsreferenz, Testindikator }; + } +} diff --git a/Dakota/Segmente/SegmentUNH.cs b/Dakota/Segmente/SegmentUNH.cs new file mode 100644 index 000000000..405a7d6ea --- /dev/null +++ b/Dakota/Segmente/SegmentUNH.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Kopf-Segment einer Nachricht; es dient dazu, eine Nachricht zu + /// eröffnen, zu identifizieren und zu beschreiben.Eine Nachricht + /// besteht aus einer definierten Folge von Segmenten, die einmal + /// oder mehrfach vorkommen können oder nur bei bestimmten + /// Geschäftsvorfällen erforderlich sind + /// + internal class SegmentUNH : Segment + { + /// + /// Genutzt werden die ersten 5 Stellen; + /// einzutragen ist die fortlaufende + /// Nummer der UNH-Segmente zwischen UNB und UNZ mit führenden + /// Nullen, + /// z.B. 00001 für 1. UNH + /// + public Datenelement Nachrichtenreferenznummer { get; private set; } + /// + /// Bei Nachricht SLGA ist einzutragen: + /// SLGA:18:0:0 + /// Bei Nachricht SLLA ist einzutragen: + /// SLLA:18:0:0 + /// + public Datenelementgruppe Nachrichtenerkennung { get; private set; } + /// + /// Genutzt werden die ersten 4 Stellen; + /// einzutragen sind: SLGA oder SLLA + /// + public Datenelement NachrichtenTypKennung { get; private set; } + /// + /// Genutzt werden die ersten 2 Stellen; + /// einzutragen ist die Nummer der + /// benutzten Version des Nachrichtentypes lt.Abschnitt 5.5 dieser + /// Anlage; d.h.Version 18. + /// + public Datenelement Verionsnummer { get; private set; } + /// + /// Genutzt wird die erste Stelle; + /// Inhalt = 0 („Null“ muss angegeben + /// werden). + /// + public Datenelement FreigabeNrDesTypes { get; private set; } + /// + /// Genutzt wird die erste Stelle; + /// Inhalt = 0 („Null“ muss angegeben + /// werden). + /// + public Datenelement VerwaltendeOrganisation { get; private set; } + + + public SegmentUNH() + { + Nachrichtenreferenznummer = new Datenelement(0, 14); + Nachrichtenerkennung = new Datenelementgruppe(4); + NachrichtenTypKennung = Nachrichtenerkennung.Datenelemente[0] = new Datenelement(0, 6); + Verionsnummer = Nachrichtenerkennung.Datenelemente[1] = new Datenelement(0, 3); + FreigabeNrDesTypes = Nachrichtenerkennung.Datenelemente[2] = new Datenelement(0, 3); + VerwaltendeOrganisation = Nachrichtenerkennung.Datenelemente[3] = new Datenelement(0, 2); + } + + public override string GetHead() => "UNH"; + + public override List GetBody() + => new List { Nachrichtenreferenznummer, Nachrichtenerkennung}; + } +} diff --git a/Dakota/Segmente/SegmentUNT.cs b/Dakota/Segmente/SegmentUNT.cs new file mode 100644 index 000000000..ea5e8c022 --- /dev/null +++ b/Dakota/Segmente/SegmentUNT.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Ende-Segment einer Nachricht. Beendet eine Nachricht und ermöglicht die Prüfung auf Vollständigkeit + /// + internal class SegmentUNT : Segment + { + /// + /// Anzahl der Segmente in der Nachricht einschließlich der Segmente + /// UNH und UNT mit führenden Nullen. + /// + public Datenelement AnzahlEinheiten { get; private set; } + /// + /// wie in UNH + /// + public Datenelement Nachrichtenreferenznummer { get; private set; } + + public SegmentUNT() + { + AnzahlEinheiten = new Datenelement(6); + Nachrichtenreferenznummer = new Datenelement(0, 14); + } + + public override string GetHead() => "UNT"; + public override List GetBody() + => new List() { AnzahlEinheiten, Nachrichtenreferenznummer }; + } +} diff --git a/Dakota/Segmente/SegmentUNZ.cs b/Dakota/Segmente/SegmentUNZ.cs new file mode 100644 index 000000000..52ed06f92 --- /dev/null +++ b/Dakota/Segmente/SegmentUNZ.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota.Segmente +{ + /// + /// Ende-Segment einer Datei. Beendet eine Datei und ermöglicht + /// die Prüfung auf Vollständigkeit + /// + internal class SegmentUNZ : Segment + { + /// + /// Anzahl UNHs in der Nutzdatendatei + /// + public Datenelement AnzahlNachrichten { get; private set; } + /// + /// wie in UNB + /// + public Datenelement Datenaustauschreferenz { get; private set; } + + public SegmentUNZ() + { + AnzahlNachrichten = new Datenelement(6); + Datenaustauschreferenz = new Datenelement(0, 14); + } + + public override string GetHead() => "UNZ"; + + public override List GetBody() + => new List { AnzahlNachrichten, Datenaustauschreferenz}; + } +} diff --git a/Dakota/SozioTherapieDatei.cs b/Dakota/SozioTherapieDatei.cs new file mode 100644 index 000000000..641448ade --- /dev/null +++ b/Dakota/SozioTherapieDatei.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dakota +{ + internal class SozioTherapieDatei : Nutzdatendatei + { + public SegmentUNB UNB { get; set; } + + public SegmentUNZ UNZ { get; set; } + } +}