diff --git a/Dakota/Dakota.csproj b/Dakota/Dakota.csproj index 42546f2c8..78270f9f4 100644 --- a/Dakota/Dakota.csproj +++ b/Dakota/Dakota.csproj @@ -45,15 +45,19 @@ - - + + + + - - - + + + + + @@ -63,7 +67,7 @@ - + @@ -82,7 +86,8 @@ - + + \ No newline at end of file diff --git a/Dakota/DakotaFileGenerator.cs b/Dakota/DakotaFileGenerator.cs index 72266b483..c2375ed37 100644 --- a/Dakota/DakotaFileGenerator.cs +++ b/Dakota/DakotaFileGenerator.cs @@ -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(); + var abrechnungspositionen = new List(); + 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++; } } } diff --git a/Dakota/Models/Abrechnungsposition.cs b/Dakota/Models/Abrechnungsposition.cs new file mode 100644 index 000000000..b35e55afc --- /dev/null +++ b/Dakota/Models/Abrechnungsposition.cs @@ -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; } + /// + /// Mit diesem Segment können weitere Informationen, bezogen /// auf die abzurechnende Position übermittelt werden.Hier können u.a.die Uhrzeit und die gefahrenen Kilometer angegeben + /// werden. Es kann je abzurechnende Position einmal vorkommen + /// + public SegmentSLLASUT SegmentSLLASUT { get; private set; } + /// + /// Mit diesem Segment kann zu jeder abzurechnenden Position + /// ein Text(z.B.als Begründung) hinterlegt werden.Es kann je + /// abzurechnende Position einmal vorkommen. + /// + public SegmentSLLATXT SegmentSLLATXT { get; private set; } + /// + /// Mit diesem Segment kann zu jeder abzurechnenden Position /// Mehrwertsteuer angegeben werden.Benutzt werden soll das /// Segment nur dann, wenn dem in ENF genannten Einzelbetrag + /// die Mehrwertsteuer hinzuzurechnen ist. + /// + public SegmentSLLAMWS SegmentSLLAMWS { get; private set; } + /// + /// Das Segment enthält Angaben über die Zuzahlung. Das Segment ist bis auf weiteres nicht zu übermitteln. Das Segment ist + /// für spätere Ausprägungen reserviert. + /// + /// + + public Abrechnungsposition() + { + SegmentSLLAENF = new SegmentSLLAENF(); + SegmentSLLASUT = new SegmentSLLASUT(); + SegmentSLLATXT = new SegmentSLLATXT(); + SegmentSLLAMWS = new SegmentSLLAMWS(); + } + + public List GetSegments() + { + return new List() { SegmentSLLAENF, SegmentSLLASUT, SegmentSLLATXT, SegmentSLLAMWS }; + } + } +} diff --git a/Dakota/Models/BlockKostenträger.cs b/Dakota/Models/Datei/BlockKostenträger.cs similarity index 91% rename from Dakota/Models/BlockKostenträger.cs rename to Dakota/Models/Datei/BlockKostenträger.cs index 74d54e5d6..696f1aa76 100644 --- a/Dakota/Models/BlockKostenträger.cs +++ b/Dakota/Models/Datei/BlockKostenträger.cs @@ -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 { /// /// Wiederhole folgenden Block je IK des Kostenträgers diff --git a/Dakota/Models/BlockKrankenkarteVerordnung.cs b/Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs similarity index 61% rename from Dakota/Models/BlockKrankenkarteVerordnung.cs rename to Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs index a191db478..eeea9c0e8 100644 --- a/Dakota/Models/BlockKrankenkarteVerordnung.cs +++ b/Dakota/Models/Datei/BlockKrankenkarteVerordnung.cs @@ -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 { /// /// 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(); } } } diff --git a/Dakota/Models/Nutzdatendatei.cs b/Dakota/Models/Datei/Nutzdatendatei.cs similarity index 91% rename from Dakota/Models/Nutzdatendatei.cs rename to Dakota/Models/Datei/Nutzdatendatei.cs index 2948daffb..0c4b3fdd0 100644 --- a/Dakota/Models/Nutzdatendatei.cs +++ b/Dakota/Models/Datei/Nutzdatendatei.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models +namespace Dakota.Models.Datei { internal class Nutzdatendatei { diff --git a/Dakota/Models/SozioTherapieDatei.cs b/Dakota/Models/Datei/SozioTherapieDatei.cs similarity index 95% rename from Dakota/Models/SozioTherapieDatei.cs rename to Dakota/Models/Datei/SozioTherapieDatei.cs index d660b9d6a..20cc4125c 100644 --- a/Dakota/Models/SozioTherapieDatei.cs +++ b/Dakota/Models/Datei/SozioTherapieDatei.cs @@ -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 { diff --git a/Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs b/Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs new file mode 100644 index 000000000..d816f1f07 --- /dev/null +++ b/Dakota/Models/Datei/SozioTherapieEinzelnachweis.cs @@ -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()); + } + } +} diff --git a/Dakota/Models/Nachricht.cs b/Dakota/Models/Nachricht/Nachricht.cs similarity index 91% rename from Dakota/Models/Nachricht.cs rename to Dakota/Models/Nachricht/Nachricht.cs index abbc2b5cf..de7f2b488 100644 --- a/Dakota/Models/Nachricht.cs +++ b/Dakota/Models/Nachricht/Nachricht.cs @@ -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 { diff --git a/Dakota/Models/NachrichtSLGA.cs b/Dakota/Models/Nachricht/NachrichtSLGA.cs similarity index 98% rename from Dakota/Models/NachrichtSLGA.cs rename to Dakota/Models/Nachricht/NachrichtSLGA.cs index b71ae4d8d..52cd87268 100644 --- a/Dakota/Models/NachrichtSLGA.cs +++ b/Dakota/Models/Nachricht/NachrichtSLGA.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models +namespace Dakota.Models.Nachricht { /// /// Gesamtaufstellung der diff --git a/Dakota/Models/Nachricht/NachrichtSLGA2.cs b/Dakota/Models/Nachricht/NachrichtSLGA2.cs new file mode 100644 index 000000000..b8d5c18f2 --- /dev/null +++ b/Dakota/Models/Nachricht/NachrichtSLGA2.cs @@ -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 +{ + /// + /// Gesamtaufstellung der + /// Abrechnung(Rechnung) + /// + internal class NachrichtSLGA2 : Nachricht + { + /// + /// Das Segment enthält Informationen über die zu verarbeitende Rechnung, den Rechnungssteller + /// (Leistungserbringer oder Abrechnungsstelle) und das IK der Krankenkasse von + /// der Krankenversichertenkarte bzw.von der ärztlichen Verordnung + /// + public SegmentSLGAFKT SegmentFKT { get; set; } + /// + /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum. + /// + public SegmentSLGAREC SegmentREC { get; set; } + /// + /// Das Segment enthält Informationen zur Umsatzsteuer. + /// + public SegmentSLGAGES SegmentGES { get; set; } + /// + /// Das Segment enthält den Namen und die Firmenbezeichnung des Leistungserbringers + /// + public SegmentSLGAGES SegmentGES00 { get; set; } + /// + /// Das Segment enthält den Namen und die Firmenbezeichnung des Leistungserbringers + /// + 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 GetSegments() + { + return new List() { SegmentFKT, SegmentREC, SegmentGES00, SegmentGES, SegmentNAM }; + } + } +} diff --git a/Dakota/Models/NachrichtSLLA.cs b/Dakota/Models/Nachricht/NachrichtSLLA.cs similarity index 97% rename from Dakota/Models/NachrichtSLLA.cs rename to Dakota/Models/Nachricht/NachrichtSLLA.cs index f897fcaea..01e90795e 100644 --- a/Dakota/Models/NachrichtSLLA.cs +++ b/Dakota/Models/Nachricht/NachrichtSLLA.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models +namespace Dakota.Models.Nachricht { /// /// Leistungserbringer diff --git a/Dakota/Models/Nachricht/NachrichtSLLA2.cs b/Dakota/Models/Nachricht/NachrichtSLLA2.cs new file mode 100644 index 000000000..9870efc90 --- /dev/null +++ b/Dakota/Models/Nachricht/NachrichtSLLA2.cs @@ -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 +{ + /// + /// Leistungserbringer + /// + internal class NachrichtSLLA2 : Nachricht + { + /// + /// Das Segment enthält Informationen über den tatsächlichen + /// Leistungserbringer und das IK der Krankenkasse von der + /// Krankenversichertenkarte bzw.der ärztlichen Verordnung bezogen auf die folgenden Abrechnungsfälle.Es kommt je Nachricht nur einmal vor. + /// + public SegmentSLLAFKT SegmentSLLAFKT { get; private set; } + /// + /// Das Segment enthält die Rechnungsinformationen, wie Rechnungsnummer und Rechnungsdatum + /// + public SegmentSLLAREC SegmentSLLAREC { get; private set; } + /// + /// Das Segment enthält die Versichertendaten eines Abrechnungsfalles (Verordnung), und gilt gleichzeitig als BeginnSegment für einen Abrechnungsfall. Jeder Abrechnungsfall ist + /// mit einer eindeutigen Belegnummer zu kennzeichnen, die der + /// auf der Verordnung zu übertragenen Belegnummer(s. § 4 des + /// Richtlinientextes) entsprechen muss. + /// + public SegmentSLLAINV SegmentSLLAINV { get; private set; } + /// + /// Dieses Segment enthält bei Korrekturlieferungen die ursprünglichen Rechnungsinformationen. Es wird zunächst nur + /// in Abhängigkeit für die Verarbeitungskennzeichen + /// '02' Nachforderung, + /// ‚03‘ Zuzahlungsforderung und + /// ‚04‘ Korrekturrechnung + /// (Schlüsselverzeichnis Anlage 3, Kapitel 8.1.7) geliefert + /// + public SegmentSLLAURI SegmentSLLAURI { get; private set; } + /// + /// Das Segment enthält den Namen und die Adressdaten des + /// Versicherten. + /// + public SegmentSLLANAD SegmentSLLANAD { get; private set; } + /// + /// Das Segment enthält den Imagenamen bei Übermittlung von + /// Imagearchiven durch den Absender. + /// + public SegmentSLLAIMG SegmentSLLAIMG { get; private set; } + public List Abrechnungspositions { get; set; } + /// + /// Das Segment enthält allgemeine Angaben zum Abrechnungsfall (Verordnung) und ist zu übermitteln, wenn eine ärztliche /// Verordnung, ein Reparatur- oder Berechtigungsschein oder + /// Unfall/BVG vorliegt. + /// + public SegmentSLLAZUV SegmentSLLAZUV { get; private set; } + /// + /// Das Segment dient zur Angabe der Diagnose und ist so oft + /// wiederholbar, wie Diagnosen vorliegen + /// + public SegmentSLLADIA SegmentSLLADIA { get; private set; } + /// + /// Das Segment enthält Angaben über die von der Krankenkasse /// ausgesprochene Kostenzusage/Genehmigung und ist nur zu + /// übermitteln, wenn diese vorliegt. + /// + public SegmentSLLASKZ SegmentSLLASKZ { get; private set; } + /// + /// Das Segment enthält Angaben über den abzurechnenden Gesamtbruttobetrag eines Abrechnungsfalles (Verordnung) + /// (Summe aller ENF-Beträge ggf.zuzüglich der Mehrwertsteuer) + /// + public SegmentSLLABES SegmentSLLABES { get; private set; } + + public NachrichtSLLA2() + { + SegmentSLLAFKT = new SegmentSLLAFKT(); + SegmentSLLAREC = new SegmentSLLAREC(); + SegmentSLLAINV = new SegmentSLLAINV(); + SegmentSLLAURI = new SegmentSLLAURI(); + SegmentSLLANAD = new SegmentSLLANAD(); + SegmentSLLAIMG = new SegmentSLLAIMG(); + + Abrechnungspositions = new List(); + + SegmentSLLAZUV = new SegmentSLLAZUV(); + SegmentSLLADIA = new SegmentSLLADIA(); + SegmentSLLASKZ = new SegmentSLLASKZ(); + SegmentSLLABES = new SegmentSLLABES(); + } + + public void AddPosition(Abrechnungsposition pos) + { + Abrechnungspositions.Add(pos); + } + + public override List GetSegments() + { + var list = new List() { SegmentSLLAFKT, SegmentSLLAREC, SegmentSLLAINV, SegmentSLLAURI, SegmentSLLANAD, SegmentSLLAIMG }; + var list2 = new List() { SegmentSLLABES }; + //var list2 = new List() { SegmentSLLAZUZ, SegmentSLLAZUV, SegmentSLLADIA, SegmentSLLASKZ, SegmentSLLABES }; + + foreach (var seg in Abrechnungspositions) + { + list.AddRange(seg.GetSegments()); + } + + list.AddRange(list2); + + return list; + } + } +} diff --git a/Host/Multitenancy/debug.config b/Host/Multitenancy/debug.config index 464fef9e2..b88a40bf1 100644 --- a/Host/Multitenancy/debug.config +++ b/Host/Multitenancy/debug.config @@ -9,7 +9,7 @@ NHibernate.Connection.DriverConnectionProvider NHibernate.Driver.MySqlDataDriver - Password=root;Persist Security Info=True;User ID=BeWoUser;Initial Catalog=BeWo;Data Source=betreuwo + Password=root;Persist Security Info=True;User ID=BeWoUser;Initial Catalog=BeWo;Data Source=4000000000 NHibernate.Dialect.MySQLDialect diff --git a/Report/DefaultReportCreator.cs b/Report/DefaultReportCreator.cs index 76c725afa..0445106ad 100644 --- a/Report/DefaultReportCreator.cs +++ b/Report/DefaultReportCreator.cs @@ -255,26 +255,39 @@ namespace BeWo.Report var dcList = new List(); 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(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);