253 lines
13 KiB
C#
253 lines
13 KiB
C#
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;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Dakota
|
|
{
|
|
public class DakotaFileGenerator
|
|
{
|
|
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)
|
|
{
|
|
SozioTherapieEinzelnachweis = new SozioTherapieEinzelnachweis();
|
|
Created = DateTime.Now;
|
|
|
|
DatenaustauschreferenzCounter = counter;
|
|
NachrichtenreferenzCounter = 1;
|
|
AnzahlUNHCounter = 0;
|
|
SegmentSLGACounter = 0;
|
|
SegmentSLLACounter = 0;
|
|
}
|
|
|
|
public void Generate()
|
|
{
|
|
GenerateUNB();
|
|
GenerateBlockSLGA();
|
|
GenerateBlockSLLA();
|
|
GenerateUNZ();
|
|
|
|
IncrementCounter();
|
|
}
|
|
|
|
public void GenerateUNB()
|
|
{
|
|
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 GenerateBlockSLGA()
|
|
{
|
|
//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);
|
|
|
|
// 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()
|
|
{
|
|
SegmentUNZ.AnzahlNachrichten.SetFilledIntValue(AnzahlUNHCounter, 6);
|
|
var datenaustauschreferenz = SegmentUNB.Datenaustauschreferenz.GetValue();
|
|
SegmentUNZ.Datenaustauschreferenz.SetValue(datenaustauschreferenz);
|
|
}
|
|
|
|
public void IncrementCounter()
|
|
{
|
|
if (DatenaustauschreferenzCounter == 99999)
|
|
DatenaustauschreferenzCounter = 0;
|
|
|
|
DatenaustauschreferenzCounter++;
|
|
}
|
|
}
|
|
}
|