Files
BeWoPlaner/Dakota/DakotaFileGenerator.cs
2023-08-14 17:35:58 +02:00

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