first half of basic code impl

This commit is contained in:
2023-06-16 16:00:37 +02:00
parent 6534312e22
commit fa6087325a
29 changed files with 1064 additions and 0 deletions

73
Dakota/Dakota.csproj Normal file
View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{47331732-DD96-4075-869F-83AA9F3F9937}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Dakota</RootNamespace>
<AssemblyName>Dakota</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DakotaConfig.cs" />
<Compile Include="Dateneinheit.cs" />
<Compile Include="Datenelement.cs" />
<Compile Include="Datenelementgruppe.cs" />
<Compile Include="Nachricht.cs" />
<Compile Include="NachrichtSLGA.cs" />
<Compile Include="NachrichtSLLA.cs" />
<Compile Include="Nutzdatendatei.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Segmente\Segment.cs" />
<Compile Include="Segmente\SegmentSLGAFKT.cs" />
<Compile Include="Segmente\SegmentSLGAGES.cs" />
<Compile Include="Segmente\SegmentSLGANAM.cs" />
<Compile Include="Segmente\SegmentSLGAREC.cs" />
<Compile Include="Segmente\SegmentSLGASKO.cs" />
<Compile Include="Segmente\SegmentSLLAFKT.cs" />
<Compile Include="Segmente\SegmentSLLAINV.cs" />
<Compile Include="Segmente\SegmentSLLANAD.cs" />
<Compile Include="Segmente\SegmentSLLAREC.cs" />
<Compile Include="Segmente\SegmentSLLAURI.cs" />
<Compile Include="Segmente\SegmentSLLAIMG.cs" />
<Compile Include="Segmente\SegmentUNB.cs" />
<Compile Include="Segmente\SegmentUNH.cs" />
<Compile Include="Segmente\SegmentUNT.cs" />
<Compile Include="Segmente\SegmentUNZ.cs" />
<Compile Include="Segmente\SegmentSLGAUST.cs" />
<Compile Include="SozioTherapieDatei.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

16
Dakota/DakotaConfig.cs Normal file
View File

@@ -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 => "'";
}
}

13
Dakota/Dateneinheit.cs Normal file
View File

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

37
Dakota/Datenelement.cs Normal file
View File

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

View File

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

18
Dakota/Nachricht.cs Normal file
View File

@@ -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<Segment> Segmente { get; set; }
//public Nachricht()
//{
// Segmente = new List<Segment>();
//}
}
}

43
Dakota/NachrichtSLGA.cs Normal file
View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota
{
/// <summary>
/// Gesamtaufstellung der
/// Abrechnung(Rechnung)
/// </summary>
internal class NachrichtSLGA
{
/// <summary>
/// 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
/// </summary>
public SegmentSLGAFKT SegmentFKT { get; set; }
/// <summary>
/// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum.
/// </summary>
public SegmentSLGAREC SegmentREC { get; set; }
/// <summary>
/// Das Segment enthält Informationen zur Umsatzsteuer.
/// </summary>
public SegmentSLGAUST SegmentUST { get; set; }
/// <summary>
/// Das Segment enthält Informationen, ob Skonto gewährt wird
/// (Skonto in Prozent, Zahlungsziel).
/// </summary>
public SegmentSLGASKO SegmentSKO { get; set; }
/// <summary>
/// Das Segment enthält Rechnungssummen (Bruttobetrag, Zuzahlungsbetrag, Nettobetrag je Status).
/// </summary>
public SegmentSLGAGES SegmentGES { get; set; }
/// <summary>
/// Das Segment enthält den Namen und die Firmenbezeichnung des Leistungserbringers
/// </summary>
public SegmentSLGANAM SegmentNAM { get; set; }
}
}

49
Dakota/NachrichtSLLA.cs Normal file
View File

@@ -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
{
/// <summary>
/// Leistungserbringer
/// </summary>
internal class NachrichtSLLA
{
/// <summary>
/// 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.
/// </summary>
public SegmentSLLAFKT SegmentSLLAFKT { get; private set; }
/// <summary>
/// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum
/// </summary>
public SegmentSLLAREC SegmentSLLAREC { get; private set; }
/// <summary>
/// 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.
/// </summary>
public SegmentSLLAINV SegmentSLLAINV { get; private set; }
/// <summary>
/// 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
/// </summary>
public SegmentSLLAURI SegmentSLLAURI { get; private set; }
/// <summary>
/// Das Segment enthält den Namen und die Adressdaten des
/// Versicherten.
/// </summary>
public SegmentSLLANAD SegmentSLLANAD { get; private set; }
/// <summary>
/// Das Segment enthält den Imagenamen bei Übermittlung von
/// Imagearchiven durch den Absender.
/// </summary>

18
Dakota/Nutzdatendatei.cs Normal file
View File

@@ -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<Nachricht> Nachrichten { get; set; }
//public Nutzdatendatei()
//{
// Nachrichten = new List<Nachricht>();
//}
}
}

View File

@@ -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")]

View File

@@ -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<Datenelement> Datenelemente { get; set; }
public abstract string GetHead();
public abstract List<Dateneinheit> GetBody();
public string ToString()
{
return GetHead() + DakotaConfig.Trennzeichen + string.Join(DakotaConfig.Trennzeichen, GetBody().Select(x => x.GetValue())) + DakotaConfig.Segmentendezeichen;
}
}
}

View File

@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// Das Segment ist je Nachricht einmal
/// zu übermitteln.
/// </summary>
internal class SegmentSLGAFKT : Segment
{
/// <summary>
/// siehe Schlüssel Verarbeitungskennzeichen Anlage 3 Abschnitt 8.1.7
/// </summary>
public Datenelement Verarbeitungskennzeichen { get; private set; }
/// <summary>
/// Feld ist nur anzugeben und mit „J“ zu
/// füllen, wenn es sich um eine Sammelrechnung handelt
/// </summary>
public Datenelement Sammelrechnung { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement IKLeistungserbringers { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement IKKostenträger { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement IKKrankenkasse { get; private set; }
/// <summary>
/// Einzutragen ist das IK des Absenders der Datei. Diese Angabe ist identisch mit UNB.Absender
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { Verarbeitungskennzeichen, Sammelrechnung };
}
}

View File

@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// 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.
/// </summary>
internal class SegmentSLGAGES : Segment
{
/// <summary>
/// Siehe Schlüssel Summenstatus
/// Anlage 3 Abschnitt 8.1.6
/// </summary>
public Datenelement Status { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement Gesamtrechnungsbetrag { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement Gesamtbruttobetrag { get; private set; }
/// <summary>
/// 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).
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { Status, Gesamtrechnungsbetrag, Gesamtbruttobetrag, GesamtbetragZuzahlung };
}
}

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// Das Segment ist je Nachricht einmal
/// zu übermitteln
/// </summary>
internal class SegmentSLGANAM : Segment
{
/// <summary>
/// Name bzw. Firmenbezeichnung des
/// Rechnungsstellers(Leistungserbringer oder Abrechnungsstelle
/// </summary>
public Datenelement Name1 { get; private set; }
/// <summary>
/// ggf. Ansprechpartner und Telefonnummer.
/// </summary>
public Datenelement Name2 { get; private set; }
/// <summary>
/// ggf. Ansprechpartner und Telefonnummer.
/// </summary>
public Datenelement Name3 { get; private set; }
/// <summary>
/// E-Mail-Adresse;
/// zugelassen sind Buchstaben und Ziffern, ausgenommen Umlaute
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { Name1, Name2, Name3, Name4 };
}
}

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// Das Segment ist je Nachricht einmal zu
/// übermitteln und ist identisch mit dem
/// REC-Segment der zugehörigen SLLANachricht.
/// </summary>
internal class SegmentSLGAREC : Segment
{
/// <summary>
/// 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.
/// </summary>
public Datenelementgruppe Rechnungsnummer { get; private set; }
/// <summary>
/// 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
/// </summary>
public Datenelement SammelRechnungsnummer { get; private set; }
/// <summary>
/// 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
/// </summary>
public Datenelement EinzelRechnungsnummer { get; private set; }
/// <summary>
/// Rechnungsdatum JJJJMMTT
/// </summary>
public Datenelement Datum { get; private set; }
/// <summary>
/// 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.
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { Rechnungsnummer, Datum, Rechnungsart };
public override string GetHead() => "REC";
}
}

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// 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.
/// </summary>
internal class SegmentSLGASKO : Segment
{
/// <summary>
/// Angabe des gewährten Skonto in
/// Prozent. Ohne führende 0 wenn.
/// xx,xy%
/// </summary>
public Datenelement SkontoProzent { get; private set; }
/// <summary>
/// Angabe des Zahlungsziels in Tagen.
/// Bei Zahlung innerhalb der hier angegebenen Tage wird Skonto gewährt
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { SkontoProzent, Zahlungsziel };
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// Das Segment kann je Nachricht einmal übermittelt werden. Es ist nicht
/// in der Sammelrechnung-SLGA zu
/// übermitteln
/// </summary>
internal class SegmentSLGAUST : Segment
{
/// <summary>
/// Steuernummer gemäß § 14 Abs. 1a
/// UStG oder Umsatzsteuer-Identifikationsnummer.
/// </summary>
public Datenelement Steuernummer { get; private set; }
/// <summary>
/// "J" wenn befreit gem. § 4 UStG
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { Steuernummer, Kennung };
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,101 @@
using System.Collections.Generic;
namespace Dakota.Segmente
{
/// <summary>
/// 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.
/// </summary>
internal class SegmentUNB : Segment
{
/// <summary>
/// UNOC:3
/// </summary>
public Datenelementgruppe Syntax { get; private set; }
/// <summary>
/// Vereinbarte EDIFACT-Syntax;
/// hier: UNOC = Groß- und Kleinbuchstaben, Umlaut
/// </summary>
public Datenelement SyntaxKennung { get; private set; }
/// <summary>
/// Vereinbarte Version der Syntax;
/// hier: Version 3 (derzeit aktuell)
/// </summary>
public Datenelement SyntaxVersionsnummer { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement Absenderdatei { get; private set; }
/// <summary>
/// IK des Empfängers (d.h. Datenannahmestelle mit Entschlüsselungsbefugnis);
/// genutzt werden die ersten 9 Stellen;
/// einzutragen ist das IK der empfangenden Stelle
/// </summary>
public Datenelement Empfangdatei { get; private set; }
/// <summary>
/// JJJJMMTT:HHMM
/// </summary>
public Datenelementgruppe DatumUhrzeit { get; private set; }
/// <summary>
/// Erstelldatum der Datei
/// </summary>
public Datenelement Datum { get; private set; }
/// <summary>
/// Erstelluhrzeit der Datei
/// </summary>
public Datenelement Uhrzeit { get; private set; }
/// <summary>
/// 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
/// </summary>
public Dateneinheit Datenaustauschreferenz { get; private set; }
/// <summary>
/// Einzutragen ist der Leistungserbringer-Sammelgruppenschlüssel,
/// siehe Schlüssel Anlage 3 Abschnitt 8.1.14
/// </summary>
public Datenelement Leistungsbereich { get; private set; }
/// <summary>
/// Genutzt werden die ersten 11 Stellen;
/// einzutragen ist der logische Dateiname s.Anhang 1 zur Anlage 1
/// zum Kapitel 4.
/// </summary>
public Datenelement Anwengundsreferenz { get; private set; }
/// <summary>
/// Inhalt = 0 wenn Testdatei
/// Inhalt = 1 wenn Erprobungsdatei
/// Inhalt = 2 wenn Echtdatei
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit> { Syntax, Absenderdatei, Empfangdatei, DatumUhrzeit, Datenaustauschreferenz, Leistungsbereich, Anwengundsreferenz, Testindikator };
}
}

View File

@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// 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
/// </summary>
internal class SegmentUNH : Segment
{
/// <summary>
/// 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
/// </summary>
public Datenelement Nachrichtenreferenznummer { get; private set; }
/// <summary>
/// Bei Nachricht SLGA ist einzutragen:
/// SLGA:18:0:0
/// Bei Nachricht SLLA ist einzutragen:
/// SLLA:18:0:0
/// </summary>
public Datenelementgruppe Nachrichtenerkennung { get; private set; }
/// <summary>
/// Genutzt werden die ersten 4 Stellen;
/// einzutragen sind: SLGA oder SLLA
/// </summary>
public Datenelement NachrichtenTypKennung { get; private set; }
/// <summary>
/// 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.
/// </summary>
public Datenelement Verionsnummer { get; private set; }
/// <summary>
/// Genutzt wird die erste Stelle;
/// Inhalt = 0 („Null“ muss angegeben
/// werden).
/// </summary>
public Datenelement FreigabeNrDesTypes { get; private set; }
/// <summary>
/// Genutzt wird die erste Stelle;
/// Inhalt = 0 („Null“ muss angegeben
/// werden).
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit> { Nachrichtenreferenznummer, Nachrichtenerkennung};
}
}

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// Ende-Segment einer Nachricht. Beendet eine Nachricht und ermöglicht die Prüfung auf Vollständigkeit
/// </summary>
internal class SegmentUNT : Segment
{
/// <summary>
/// Anzahl der Segmente in der Nachricht einschließlich der Segmente
/// UNH und UNT mit führenden Nullen.
/// </summary>
public Datenelement AnzahlEinheiten { get; private set; }
/// <summary>
/// wie in UNH
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit>() { AnzahlEinheiten, Nachrichtenreferenznummer };
}
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Segmente
{
/// <summary>
/// Ende-Segment einer Datei. Beendet eine Datei und ermöglicht
/// die Prüfung auf Vollständigkeit
/// </summary>
internal class SegmentUNZ : Segment
{
/// <summary>
/// Anzahl UNHs in der Nutzdatendatei
/// </summary>
public Datenelement AnzahlNachrichten { get; private set; }
/// <summary>
/// wie in UNB
/// </summary>
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<Dateneinheit> GetBody()
=> new List<Dateneinheit> { AnzahlNachrichten, Datenaustauschreferenz};
}
}

View File

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