Grobe Datenstruktur #2

This commit is contained in:
2023-08-14 17:35:58 +02:00
parent d19c20cf82
commit 88dbab0b24
15 changed files with 499 additions and 47 deletions

View File

@@ -45,15 +45,19 @@
<Compile Include="DakotaEnums.cs" />
<Compile Include="DakotaFileGenerator.cs" />
<Compile Include="DakotaValidator.cs" />
<Compile Include="Models\BlockKostenträger.cs" />
<Compile Include="Models\BlockKrankenkarteVerordnung.cs" />
<Compile Include="Models\Abrechnungsposition.cs" />
<Compile Include="Models\Datei\BlockKostenträger.cs" />
<Compile Include="Models\Datei\BlockKrankenkarteVerordnung.cs" />
<Compile Include="Models\Datei\SozioTherapieEinzelnachweis.cs" />
<Compile Include="Models\Dateneinheit.cs" />
<Compile Include="Models\Datenelement.cs" />
<Compile Include="Models\Datenelementgruppe.cs" />
<Compile Include="Models\IRowable.cs" />
<Compile Include="Models\Nachricht.cs" />
<Compile Include="Models\NachrichtSLGA.cs" />
<Compile Include="Models\NachrichtSLLA.cs" />
<Compile Include="Models\Nachricht\Nachricht.cs" />
<Compile Include="Models\Nachricht\NachrichtSLGA.cs" />
<Compile Include="Models\Nachricht\NachrichtSLGA2.cs" />
<Compile Include="Models\Nachricht\NachrichtSLLA2.cs" />
<Compile Include="Models\Nachricht\NachrichtSLLA.cs" />
<Compile Include="Models\Segmente\SegmentSLLABES.cs" />
<Compile Include="Models\Segmente\SegmentSLLADIA.cs" />
<Compile Include="Models\Segmente\SegmentSLLAMWS.cs" />
@@ -63,7 +67,7 @@
<Compile Include="Models\Segmente\SegmentSLLATXT.cs" />
<Compile Include="Models\Segmente\SegmentSLLAZUV.cs" />
<Compile Include="Models\Segmente\SegmentSLLAZUZ.cs" />
<Compile Include="Models\Nutzdatendatei.cs" />
<Compile Include="Models\Datei\Nutzdatendatei.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Models\Segmente\Segment.cs" />
<Compile Include="Models\Segmente\SegmentSLGAFKT.cs" />
@@ -82,7 +86,8 @@
<Compile Include="Models\Segmente\SegmentUNT.cs" />
<Compile Include="Models\Segmente\SegmentUNZ.cs" />
<Compile Include="Models\Segmente\SegmentSLGAUST.cs" />
<Compile Include="Models\SozioTherapieDatei.cs" />
<Compile Include="Models\Datei\SozioTherapieDatei.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,4 +1,8 @@
using Dakota.Models;
using BS.Shared.DataContracts;
using Dakota.Models;
using Dakota.Models.Datei;
using Dakota.Models.Nachricht;
using Dakota.Models.Segmente;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,52 +13,240 @@ namespace Dakota
{
public class DakotaFileGenerator
{
internal SozioTherapieDatei SozioTherapieDatei { get; set; }
internal int Counter { get; private set; }
internal SozioTherapieEinzelnachweis SozioTherapieEinzelnachweis { get; set; }
internal DateTime Created { get; private set; }
internal int DatenaustauschreferenzCounter { get; private set; }
internal int NachrichtenreferenzCounter { get; private set; }
internal int AnzahlUNHCounter { get; set; }
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 string UNBAbsenderbezeichnung => string.Empty;
public string UNBEmpfangerbezeichnung => string.Empty;
public string UNBAnwendungsreferenz => string.Empty;
public string SLGAFKTIKRechnungssteller => string.Empty;
public string SLGAFKTIKKostentrager => string.Empty;
public string SLGAFKTIKKrankenkasse => string.Empty;
public DakotaFileGenerator(int counter)
{
SozioTherapieDatei = new SozioTherapieDatei();
Counter = counter;
SozioTherapieEinzelnachweis = new SozioTherapieEinzelnachweis();
Created = DateTime.Now;
DatenaustauschreferenzCounter = counter;
NachrichtenreferenzCounter = 1;
AnzahlUNHCounter = 0;
SegmentSLGACounter = 0;
SegmentSLLACounter = 0;
}
public void Generate()
{
GenerateUNB();
Generatexyz();
GenerateBlockSLGA();
GenerateBlockSLLA();
GenerateUNZ();
IncrementCounter();
}
public void GenerateUNB()
{
SozioTherapieDatei.UNB.SyntaxKennung.SetValue("UNOC");
SozioTherapieDatei.UNB.SyntaxVersionsnummer.SetValue("3");
//SozioTherapieDatei.UNB.Absenderdatei
// - IK
//SozioTherapieDatei.UNB.Empfangdatei
// - IK
SozioTherapieDatei.UNB.Datum.SetValue(Created.ToString("yyyyMMdd"));
SozioTherapieDatei.UNB.Uhrzeit.SetValue(Created.ToString("HHmm"));
SozioTherapieDatei.UNB.Datenaustauschreferenz.SetFilledIntValue(Counter, 5);
SozioTherapieDatei.UNB.Leistungsbereich.SetValue("O");
//SozioTherapieDatei.UNB.Anwengundsreferenz
// - Logischer Dateiname
SozioTherapieDatei.UNB.Testindikator.SetValue("0");
SegmentUNB.SyntaxKennung.SetValue("UNOC");
SegmentUNB.SyntaxVersionsnummer.SetValue("3");
SegmentUNB.Absenderdatei.SetValue(UNBAbsenderbezeichnung);
SegmentUNB.Empfangdatei.SetValue(UNBEmpfangerbezeichnung);
SegmentUNB.Datum.SetValue(Created.ToString("yyyyMMdd"));
SegmentUNB.Uhrzeit.SetValue(Created.ToString("HHmm"));
SegmentUNB.Datenaustauschreferenz.SetFilledIntValue(DatenaustauschreferenzCounter++, 5);
SegmentUNB.Leistungsbereich.SetValue("O");
SegmentUNB.Anwengundsreferenz.SetValue(UNBAnwendungsreferenz);
SegmentUNB.Testindikator.SetValue("0");
}
public void Generatexyz()
public void GenerateBlockSLGA()
{
var block = new BlockKostenträger();
//UNH, UNT, FKT, REC
SegmentSLGACounter += 2;
AnzahlUNHCounter++;
var nachrichtenreferenznummer = NachrichtenreferenzCounter++;
// Head
BlockSLGAUNH.Nachrichtenreferenznummer.SetFilledIntValue(nachrichtenreferenznummer, 5);
BlockSLGAUNH.NachrichtenTypKennung.SetValue("SLGA");
BlockSLGAUNH.Verionsnummer.SetValue("18");
BlockSLGAUNH.FreigabeNrDesTypes.SetValue("0");
BlockSLGAUNH.VerwaltendeOrganisation.SetValue("0");
// Body
// FKT
BlockSLGANachricht.SegmentFKT.Verarbeitungskennzeichen.SetValue("01");
BlockSLGANachricht.SegmentFKT.IKLeistungserbringers.SetValue(SLGAFKTIKRechnungssteller);
BlockSLGANachricht.SegmentFKT.IKKostenträger.SetValue(SLGAFKTIKKostentrager);
BlockSLGANachricht.SegmentFKT.IKKrankenkasse.SetValue(SLGAFKTIKKrankenkasse);
BlockSLGANachricht.SegmentFKT.IKAbsender.SetValue(UNBAbsenderbezeichnung);
// REC
BlockSLGANachricht.SegmentREC.SammelRechnungsnummer.SetValue(string.Empty);
BlockSLGANachricht.SegmentREC.EinzelRechnungsnummer.SetValue(string.Empty);
BlockSLGANachricht.SegmentREC.Datum.SetValue(string.Empty);
BlockSLGANachricht.SegmentREC.Rechnungsart.SetValue("1");
// UST - wird nicht gebraucht
//BlockSLGANachricht.SegmentUST.Steuernummer.SetValue(string.Empty);
//BlockSLGANachricht.SegmentUST.Kennung.SetValue(string.Empty);
// SKO - wird nicht gebraucht
//BlockSLGANachricht.SegmentSKO.SkontoProzent.SetValue(string.Empty);
//BlockSLGANachricht.SegmentSKO.Zahlungsziel.SetValue(string.Empty);
// GES00
BlockSLGANachricht.SegmentGES00.Status.SetValue(string.Empty);
BlockSLGANachricht.SegmentGES00.Gesamtrechnungsbetrag.SetValue(string.Empty);
BlockSLGANachricht.SegmentGES00.Gesamtbruttobetrag.SetValue(string.Empty);
BlockSLGANachricht.SegmentGES00.GesamtbetragZuzahlung.SetValue(string.Empty);
// GES
BlockSLGANachricht.SegmentGES.Status.SetValue(string.Empty);
BlockSLGANachricht.SegmentGES.Gesamtrechnungsbetrag.SetValue(string.Empty);
BlockSLGANachricht.SegmentGES.Gesamtbruttobetrag.SetValue(string.Empty);
BlockSLGANachricht.SegmentGES.GesamtbetragZuzahlung.SetValue(string.Empty);
// NAM
BlockSLGANachricht.SegmentNAM.Name1.SetValue(string.Empty);
BlockSLGANachricht.SegmentNAM.Name2.SetValue(string.Empty);
BlockSLGANachricht.SegmentNAM.Name3.SetValue(string.Empty);
BlockSLGANachricht.SegmentNAM.Name4.SetValue(string.Empty);
SozioTherapieDatei.BlockKostenträger.Add(block);
// End
BlockSLGAUNT.AnzahlEinheiten.SetFilledIntValue(SegmentSLGACounter, 6);
BlockSLGAUNT.Nachrichtenreferenznummer.SetFilledIntValue(nachrichtenreferenznummer, 5);
}
public void GenerateBlockSLLA()
{
SegmentSLLACounter++;
AnzahlUNHCounter++;
var nachrichtenreferenznummer = NachrichtenreferenzCounter++;
// Head
BlockSLLAUNH.Nachrichtenreferenznummer.SetFilledIntValue(NachrichtenreferenzCounter, 5);
BlockSLLAUNH.NachrichtenTypKennung.SetValue("SLLA");
BlockSLLAUNH.Verionsnummer.SetValue("18");
BlockSLLAUNH.FreigabeNrDesTypes.SetValue("0");
BlockSLLAUNH.VerwaltendeOrganisation.SetValue("0");
// Body
// FKT Funktion
BlockSLLANachricht.SegmentSLLAFKT.Verarbeitungskennzeichen.SetValue("01");
BlockSLLANachricht.SegmentSLLAFKT.IKLeistungserbringers.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAFKT.IKKostenträgers.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAFKT.IKKrankenkasse.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAFKT.IKRechnungsstellers.SetValue(string.Empty);
// REC
var slgarec = BlockSLGANachricht.SegmentREC;
BlockSLLANachricht.SegmentSLLAREC.SammelRechnungsnummer.SetValue(slgarec.SammelRechnungsnummer.GetValue());
BlockSLLANachricht.SegmentSLLAREC.EinzelRechnungsnummer.SetValue(slgarec.EinzelRechnungsnummer.GetValue());
BlockSLLANachricht.SegmentSLLAREC.Datum.SetValue(slgarec.Datum.GetValue());
BlockSLLANachricht.SegmentSLLAREC.Rechnungsart.SetValue(slgarec.Rechnungsart.GetValue());
// INV
// Information Versicherte
BlockSLLANachricht.SegmentSLLAINV.VersichertenNummer.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAINV.Versichertenstatus.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAINV.Beleginformation.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAINV.Belegnummer.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAINV.KennzeichenBesondereVersorgungsform.SetValue(string.Empty);
// URI
// Wird erst bei Korrekturen verwendet
// NAD
BlockSLLANachricht.SegmentSLLANAD.Nachname.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLANAD.Vorname.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLANAD.Geburtsdatum.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLANAD.StraßeNr.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLANAD.PLZ.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLANAD.Wohnort.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLANAD.Länderkennzeichen.SetValue(string.Empty);
// IMG
BlockSLLANachricht.SegmentSLLAIMG.Abrechnungsjahr.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAIMG.Abrechnungsmonat.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLAIMG.Identifikationsmerkmal.SetValue(string.Empty);
var test = new List<object>();
var abrechnungspositionen = new List<InvoiceItemDC>();
foreach (var position in abrechnungspositionen)
{
var pos = new Abrechnungsposition();
// ENF
pos.SegmentSLLAENF.Identifikationsnummer.SetValue(string.Empty);
pos.SegmentSLLAENF.Abrechnungscode.SetValue("69");
pos.SegmentSLLAENF.Tarifkennzeichen.SetValue(string.Empty);
pos.SegmentSLLAENF.ArtLeistung.SetValue(string.Empty);
pos.SegmentSLLAENF.AnzahlMenge.SetValue(string.Empty);
pos.SegmentSLLAENF.EinzelbetragAbrechnungsposition.SetValue(string.Empty);
pos.SegmentSLLAENF.DatumLeistungserbringung.SetValue(string.Empty);
pos.SegmentSLLAENF.BetragZuzahlung.SetValue(string.Empty);
// SUT
pos.SegmentSLLASUT.GefahreneKilometer.SetValue(string.Empty);
pos.SegmentSLLASUT.Uhrzeit.SetValue(string.Empty);
pos.SegmentSLLASUT.UhrzeitBis.SetValue(string.Empty);
pos.SegmentSLLASUT.Dauer.SetValue(string.Empty);
pos.SegmentSLLASUT.VersorgungszeitraumVon.SetValue(string.Empty);
pos.SegmentSLLASUT.VersorgungszeitraumBis.SetValue(string.Empty);
// TXT
pos.SegmentSLLATXT.Text.SetValue(string.Empty);
// MWS
pos.SegmentSLLAMWS.Mehrwertsteuersatz.SetValue(string.Empty);
pos.SegmentSLLAMWS.BetragMehrwertsteuer.SetValue(string.Empty);
BlockSLLANachricht.AddPosition(pos);
}
// ZUV
//BlockSLLANachricht.SegmentSLLAZUV.Betriebsstättennummer.SetValue(string.Empty);
//BlockSLLANachricht.SegmentSLLAZUV.LebenslangeArztnummer.SetValue(string.Empty);
//BlockSLLANachricht.SegmentSLLAZUV.VerordnungsAusstellEinsatzdatum.SetValue(string.Empty);
//BlockSLLANachricht.SegmentSLLAZUV.Zuzahlungskennzeichen.SetValue(string.Empty);
//BlockSLLANachricht.SegmentSLLAZUV.Unfallkennzeichen.SetValue(string.Empty);
//BlockSLLANachricht.SegmentSLLAZUV.KennzeichenBVGSonstiges.SetValue(string.Empty);
//BlockSLLANachricht.SegmentSLLAZUV.KennzeichenVerordnungsbesonderheiten.SetValue(string.Empty);
// BES
BlockSLLANachricht.SegmentSLLABES.GesamtbetragBrutto.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLABES.GesamtbetragGesetzlicheZuzahlung.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLABES.GesamtbetragProzentualeZuzahlung.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLABES.PauschalerZuzahlungsbetrag.SetValue(string.Empty);
BlockSLLANachricht.SegmentSLLABES.GesamtbetragEigenanteil.SetValue(string.Empty);
// End
BlockSLLAUNT.AnzahlEinheiten.SetFilledIntValue(SegmentSLLACounter, 6);
BlockSLLAUNT.Nachrichtenreferenznummer.SetFilledIntValue(nachrichtenreferenznummer, 5);
}
public void GenerateUNZ()
{
//SozioTherapieDatei.UNZ.AnzahlNachrichten
SozioTherapieDatei.UNZ.Datenaustauschreferenz.SetFilledIntValue(Counter, 5);
SegmentUNZ.AnzahlNachrichten.SetFilledIntValue(AnzahlUNHCounter, 6);
var datenaustauschreferenz = SegmentUNB.Datenaustauschreferenz.GetValue();
SegmentUNZ.Datenaustauschreferenz.SetValue(datenaustauschreferenz);
}
public void IncrementCounter()
{
if (DatenaustauschreferenzCounter == 99999)
DatenaustauschreferenzCounter = 0;
DatenaustauschreferenzCounter++;
}
}
}

View File

@@ -0,0 +1,48 @@
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; }
/// <summary>
/// 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
/// </summary>
public SegmentSLLASUT SegmentSLLASUT { get; private set; }
/// <summary>
/// Mit diesem Segment kann zu jeder abzurechnenden Position
/// ein Text(z.B.als Begründung) hinterlegt werden.Es kann je
/// abzurechnende Position einmal vorkommen.
/// </summary>
public SegmentSLLATXT SegmentSLLATXT { get; private set; }
/// <summary>
/// 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.
/// </summary>
public SegmentSLLAMWS SegmentSLLAMWS { get; private set; }
/// <summary>
/// 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.
/// </summary>
///
public Abrechnungsposition()
{
SegmentSLLAENF = new SegmentSLLAENF();
SegmentSLLASUT = new SegmentSLLASUT();
SegmentSLLATXT = new SegmentSLLATXT();
SegmentSLLAMWS = new SegmentSLLAMWS();
}
public List<Segment> GetSegments()
{
return new List<Segment>() { SegmentSLLAENF, SegmentSLLASUT, SegmentSLLATXT, SegmentSLLAMWS };

View File

@@ -1,11 +1,12 @@
using Dakota.Models.Segmente;
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
namespace Dakota.Models.Datei
{
/// <summary>
/// Wiederhole folgenden Block je IK des Kostenträgers

View File

@@ -1,11 +1,12 @@
using Dakota.Models.Segmente;
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
namespace Dakota.Models.Datei
{
/// <summary>
/// Wiederhole folgenden Block je IK der Krankenkarte bzw der Verordnung
@@ -13,26 +14,26 @@ namespace Dakota.Models
internal class BlockKrankenkarteVerordnung : IRowable
{
public SegmentUNH SLGAUNH { get; private set; }
public NachrichtSLGA SLGANachricht { get; private set; }
public NachrichtSLGA2 SLGANachricht2 { get; private set; }
public SegmentUNT SLGAUNT { get; private set; }
public SegmentUNH SLLAUNH { get; private set; }
public NachrichtSLLA SLLANachricht { get; private set; }
public NachrichtSLLA2 SLLANachricht2 { get; private set; }
public SegmentUNT SLLAUNT { get; private set; }
public BlockKrankenkarteVerordnung()
{
SLGAUNH = new SegmentUNH();
SLGANachricht = new NachrichtSLGA();
SLGANachricht2 = new NachrichtSLGA2();
SLGAUNT = new SegmentUNT();
SLLAUNH = new SegmentUNH();
SLLANachricht = new NachrichtSLLA();
SLLANachricht2 = new NachrichtSLLA2();
SLLAUNT = new SegmentUNT();
}
public string GetRows()
{
return SLGAUNH.GetValue() + SLGANachricht.GetRows() + SLGAUNT.GetValue() +
SLLAUNH.GetValue() + SLLANachricht.GetRows() + SLLAUNT.GetValue();
return SLGAUNH.GetValue() + SLGANachricht2.GetRows() + SLGAUNT.GetValue() +
SLLAUNH.GetValue() + SLLANachricht2.GetRows() + SLLAUNT.GetValue();
}
}
}

View File

@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models
namespace Dakota.Models.Datei
{
internal class Nutzdatendatei
{

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models
namespace Dakota.Models.Datei
{
internal class SozioTherapieDatei : IRowable
{

View File

@@ -0,0 +1,28 @@
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.GetValue() + string.Join(string.Empty, BlockKrankenkarteVerordnung.GetRows() + UNZ.GetValue());
}
}
}

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models
namespace Dakota.Models.Nachricht
{
internal abstract class Nachricht : IRowable
{

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models
namespace Dakota.Models.Nachricht
{
/// <summary>
/// Gesamtaufstellung der

View File

@@ -0,0 +1,53 @@
using Dakota.Models.Segmente;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models.Nachricht
{
/// <summary>
/// Gesamtaufstellung der
/// Abrechnung(Rechnung)
/// </summary>
internal class NachrichtSLGA2 : Nachricht
{
/// <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 SegmentSLGAGES SegmentGES { get; set; }
/// <summary>
/// Das Segment enthält den Namen und die Firmenbezeichnung des Leistungserbringers
/// </summary>
public SegmentSLGAGES SegmentGES00 { get; set; }
/// <summary>
/// Das Segment enthält den Namen und die Firmenbezeichnung des Leistungserbringers
/// </summary>
public SegmentSLGANAM SegmentNAM { get; set; }
public NachrichtSLGA2()
{
SegmentFKT = new SegmentSLGAFKT();
SegmentREC = new SegmentSLGAREC();
SegmentGES = new SegmentSLGAGES();
SegmentGES00 = new SegmentSLGAGES();
SegmentNAM = new SegmentSLGANAM();
}
public override List<Segment> GetSegments()
{
return new List<Segment>() { SegmentFKT, SegmentREC, SegmentGES00, SegmentGES, SegmentNAM };
}
}
}

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models
namespace Dakota.Models.Nachricht
{
/// <summary>
/// Leistungserbringer

View File

@@ -0,0 +1,111 @@
using Dakota.Models.Segmente;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dakota.Models.Nachricht
{
/// <summary>
/// Leistungserbringer
/// </summary>
internal class NachrichtSLLA2 : Nachricht
{
/// <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>
public SegmentSLLAIMG SegmentSLLAIMG { get; private set; }
public List<Abrechnungsposition> Abrechnungspositions { get; set; }
/// <summary>
/// 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.
/// </summary>
public SegmentSLLAZUV SegmentSLLAZUV { get; private set; }
/// <summary>
/// Das Segment dient zur Angabe der Diagnose und ist so oft
/// wiederholbar, wie Diagnosen vorliegen
/// </summary>
public SegmentSLLADIA SegmentSLLADIA { get; private set; }
/// <summary>
/// Das Segment enthält Angaben über die von der Krankenkasse
/// ausgesprochene Kostenzusage/Genehmigung und ist nur zu
/// übermitteln, wenn diese vorliegt.
/// </summary>
public SegmentSLLASKZ SegmentSLLASKZ { get; private set; }
/// <summary>
/// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung)
/// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer)
/// </summary>
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<Abrechnungsposition>();
SegmentSLLAZUV = new SegmentSLLAZUV();
SegmentSLLADIA = new SegmentSLLADIA();
SegmentSLLASKZ = new SegmentSLLASKZ();
SegmentSLLABES = new SegmentSLLABES();
}
public void AddPosition(Abrechnungsposition pos)
{
Abrechnungspositions.Add(pos);
}
public override List<Segment> GetSegments()
{
var list = new List<Segment>() { SegmentSLLAFKT, SegmentSLLAREC, SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG };
var list2 = new List<Segment>() { SegmentSLLABES };
//var list2 = new List<Segment>() { SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES };
foreach (var seg in Abrechnungspositions)
{
list.AddRange(seg.GetSegments());
}
list.AddRange(list2);
return list;
}

View File

@@ -9,7 +9,7 @@
<session-factory xmlns='urn:nhibernate-configuration-2.2'>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="connection.connection_string">Password=root;Persist Security Info=True;User ID=BeWoUser;Initial Catalog=BeWo;Data Source=betreuwo</property>
<property name="connection.connection_string">Password=root;Persist Security Info=True;User ID=BeWoUser;Initial Catalog=BeWo;Data Source=4000000000</property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
<mapping assembly="BeWo.Data" />
</session-factory>

View File

@@ -255,26 +255,39 @@ namespace BeWo.Report
var dcList = new List<ServiceInvoiceDC>();
var dcidStrs = dcIds.Split(';');
// Gehe jede ServiceItem Reference durch
foreach (var oidStr in dcidStrs)
{
var oid = long.Parse(oidStr);
// Lade ServiceInvoice
var invoice = DAOFactory.GenericDAO.LoadByID<ServiceInvoice>(oid);
var dc = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(invoice);
// Füge dcListe hinzu
dcList.Add(dc);
// Falls ServiceInvoice Oid bereits in serviceInvoiceOid2CostbearerOid List (S2C List) ist, überspringe
if (serviceInvoiceOid2CostbearerId.ContainsKey(oid))
continue;
// ServiceInvoice Oid ist noch nicht in S2C List
// Frage, ob ServiceInvoice - InvoiceBase - InvoiceId nicht leer ist
if (!String.IsNullOrEmpty(invoice.InvoiceBase.InvoiceId))
// Falls ServiceInvoice - InvoiceBase - InvoiceId nicht leer ist, füge in S2C Liste ein
serviceInvoiceOid2CostbearerId.Add(oid, invoice.InvoiceBase.InvoiceId);
else
// Ab wann? Welcher Sinn?
{
// Falls ServiceInvoice - InvoiceBase - InvoiceId leer ist
// Gehe jede peroide von ServiceInvoice - ServiceInvoicePeriodList durch
foreach (var period in invoice.ServiceInvoicePeriodList)
{
try
{
if (period.SupportConceptApprovalPeriod != null)
{
// Falls periode - SupportConecptApprovalPeriod nicht leer ist, füge
AddCostBearerIdToDict(oid, serviceInvoiceOid2CostbearerId,
period.SupportConceptApprovalPeriod.CostBearer2SupportConcept);