350 lines
14 KiB
C#
350 lines
14 KiB
C#
using BeWo.Data.Entities;
|
|
using Dakota.Models.Infos;
|
|
using Dakota.Models.Schlüssels;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Dakota.Logic
|
|
{
|
|
public static class DakotaInfoCreator
|
|
{
|
|
public struct InfoCreatorParameter
|
|
{
|
|
public InvoiceItem InvoiceItem { get; set; }
|
|
public ServiceInvoicePeriod ServiceInvoicePeriod { get; set; }
|
|
public ServiceInvoice ServiceInvoice { get; set; }
|
|
public InvoiceBase InvoiceBase { get; set; }
|
|
public Customer Customer { get; set; }
|
|
|
|
public string IKKostentrager => "111222333";
|
|
public string IKKvkarte => "333444555";
|
|
public string Versichertenstatus => "55555";
|
|
public string Belegnummer => "444444test";
|
|
public string Identifikationsnummer => "111";
|
|
}
|
|
|
|
public struct InfoCreatorParameter2
|
|
{
|
|
private string _month;
|
|
private string Absenderklassifikation => "SL";
|
|
private string Dateiidentifizierer => "S";
|
|
|
|
public string IKAbsender => "109500969";
|
|
public string IKEmpfang => "108018007";
|
|
|
|
public DateTime Created { get; set; }
|
|
|
|
|
|
// SL
|
|
// Stellen 3 bis 8 von AbsenderIK
|
|
//
|
|
public string LogischerDateiname => $"{Absenderklassifikation}{IKAbsender.Substring(2, 6)}{Dateiidentifizierer}{_month}";
|
|
public string PhysikalischerDateiname => "idkidkid.txt";
|
|
|
|
public InfoCreatorParameter2(int month)
|
|
{
|
|
_month = month.ToString("D2");
|
|
Created = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
public static int NachrichtenRefenrenz { get; set; }
|
|
|
|
static DakotaInfoCreator()
|
|
{
|
|
Reset();
|
|
}
|
|
|
|
internal static void Reset()
|
|
{
|
|
NachrichtenRefenrenz = 0;
|
|
}
|
|
|
|
internal static int GetNextRefNumber()
|
|
{
|
|
return ++NachrichtenRefenrenz;
|
|
}
|
|
|
|
//internal static InfoFile GetDakotaInfoFile(InfoCreatorParameter para)
|
|
//{
|
|
// var info = new InfoFile();
|
|
|
|
// info.SyntaxKennung = "UNOC";
|
|
// info.SyntaxVersion = "3";
|
|
// info.Absenderbezeichnung = para.Absender;
|
|
// info.Empfangerbezeichnung = para.Empfang;
|
|
// info.Created = DateTime.Now;
|
|
// info.Datenaustauschreferenz = 1;
|
|
// info.Leistungsbereich = SchlüsselLeistungserbringerSammelgruppenschlussel.SoziotherapeutischerLeistungserbringer;
|
|
// info.Anwendungsreferenz = "testdateiaa";
|
|
// info.Testindikator = SchlüsselTestindikator.Testdatei;
|
|
|
|
// info.BlockKostentragers.Add(GetDakotaInfoBlockKostentrager(para));
|
|
|
|
// return info;
|
|
//}
|
|
|
|
internal static InfoDateiNutzdaten GetEmptyInfoNutzdatendatei(InfoCreatorParameter2 para)
|
|
{
|
|
var info = new InfoDateiNutzdaten();
|
|
|
|
info.SyntaxKennung = "UNOC";
|
|
info.SyntaxVersion = "3";
|
|
info.Absenderbezeichnung = para.IKAbsender;
|
|
info.Empfangerbezeichnung = para.IKEmpfang;
|
|
info.Created = para.Created;
|
|
info.Datenaustauschreferenz = 1;
|
|
info.Leistungsbereich = SchlüsselLeistungserbringerSammelgruppenschlussel.SoziotherapeutischerLeistungserbringer;
|
|
info.Anwendungsreferenz = para.LogischerDateiname;
|
|
info.Testindikator = SchlüsselTestindikator.Testdatei;
|
|
|
|
return info;
|
|
}
|
|
|
|
internal static InfoDateiAuftrags GetEmptyInfoAuftragsdatei(InfoCreatorParameter2 para)
|
|
{
|
|
var info = new InfoDateiAuftrags();
|
|
|
|
info.Identifikator = 500000;
|
|
info.Version = 1;
|
|
info.LangeAuftrag = 348;
|
|
info.SequenzNummer = 000;
|
|
info.VerfahrenKennung = "TSOL0";
|
|
info.TransferNummer = 000;
|
|
info.VerfahrenKennungSpezifikation = "SGB1K";
|
|
info.AbsenderEigner = para.IKAbsender;
|
|
info.AbsenderPhysikalisch = para.IKAbsender;
|
|
info.EmpfangerNutzer = para.IKEmpfang;
|
|
info.EmpfangerPhysikalisch = para.IKEmpfang;
|
|
info.FehlerNummer = 0;
|
|
info.FehlerMassnahme = 0;
|
|
info.Dateiname = "aok31052023";
|
|
info.DatumErstellung = para.Created.ToString("yyyyMMddhhmmss");
|
|
info.DatumUbertragungGesendet = para.Created.ToString("yyyyMMddhhmmss");
|
|
info.DatumUbertragungEmpfangenStart = "00000000000000";
|
|
info.DatumUbertragungEmpfangenEnde = "00000000000000";
|
|
info.DateiVersion = 0;
|
|
info.Korrektur = 0;
|
|
// info.DateigrosseNutzdaten = 0;
|
|
// info.DateigrosseUbertragung = 0;
|
|
info.Zeichensatz = "l1";
|
|
info.Komprimierung = 0;
|
|
info.Verschlusselungsart = 0;
|
|
info.ElektronischeUnterschrift = 0;
|
|
|
|
// info.Satzformat = "";
|
|
// info.Satzlange = 0;
|
|
// info.Blocklange = 0;
|
|
|
|
// Part 3 nicht vom Absender
|
|
|
|
info.EMailAdresseAbsender = "evertz@ownsoft.de";
|
|
|
|
return info;
|
|
}
|
|
|
|
internal static void AddDakotaInfoFile(this InfoDateiNutzdaten file, InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var blockkostentrager = file.GetDakotaInfoBlockKostentrager(para, para2);
|
|
var blockkvkarte = blockkostentrager.GetDakotaInfoBlockKvKarte(para, para2);
|
|
var abrechnungsfall = blockkvkarte.GetDakotaInfoAbrechnungsfall(para, para2);
|
|
var abrechnungsposition = abrechnungsfall.GetDakotaInfoAbrechnungsposition(para, para2);
|
|
|
|
abrechnungsfall.InfosAbrechnungsposition.Add(abrechnungsposition);
|
|
}
|
|
|
|
internal static InfoBlockKostentrager GetDakotaInfoBlockKostentrager(this InfoDateiNutzdaten file, InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var ikkostentrager = para.IKKostentrager;
|
|
var block = file.BlockKostentragers.FirstOrDefault(x => x.IKKostentrager == ikkostentrager);
|
|
|
|
if (block is null)
|
|
{
|
|
block = new InfoBlockKostentrager(ikkostentrager)
|
|
{
|
|
DakotaInfoSLGA = CreateDakotaInfoNachricht(true),
|
|
DakotaInfoNachrichtSLGA = CreateDakotaInfoNachrichtSLGA(para, para2)
|
|
};
|
|
file.BlockKostentragers.Add(block);
|
|
}
|
|
|
|
return block;
|
|
}
|
|
|
|
internal static InfoBlockKvKarte GetDakotaInfoBlockKvKarte(this InfoBlockKostentrager blockkostentrager, InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var ikkvkarte = para.IKKvkarte;
|
|
var block = blockkostentrager.BlockKvKarte.FirstOrDefault(x => x.IKKrankenkasseKVKarte == ikkvkarte);
|
|
|
|
if (block is null)
|
|
{
|
|
block = new InfoBlockKvKarte(ikkvkarte)
|
|
{
|
|
DakotaInfoSLGA = CreateDakotaInfoNachricht(true),
|
|
DakotaInfoNachrichtSLGA = CreateDakotaInfoNachrichtSLGA(para, para2),
|
|
DakotaInfoSLLA = CreateDakotaInfoNachricht(false),
|
|
DakotaInfoNachrichtSLLA = CreateDakotaInfoNachrichtSLLA(para, para2)
|
|
};
|
|
blockkostentrager.BlockKvKarte.Add(block);
|
|
}
|
|
|
|
return block;
|
|
}
|
|
|
|
internal static InfoAbrechnungsfall GetDakotaInfoAbrechnungsfall(this InfoBlockKvKarte block, InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var belegnummer = para.Belegnummer;
|
|
var fall = block.DakotaInfoNachrichtSLLA.Abrechnungsfalle.FirstOrDefault(x => x.Belegnummer == belegnummer);
|
|
|
|
if(fall is null)
|
|
{
|
|
fall = CreateDakotaInfoAbrechnungsfall(para);
|
|
block.DakotaInfoNachrichtSLLA.Abrechnungsfalle.Add(fall);
|
|
}
|
|
|
|
return fall;
|
|
}
|
|
|
|
internal static InfoAbrechnungsposition GetDakotaInfoAbrechnungsposition(this InfoAbrechnungsfall fall, InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var id = para.Identifikationsnummer;
|
|
var pos = CreateDakotaInfoAbrechnungsposition(para);
|
|
|
|
return pos;
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
private static InfoNachricht CreateDakotaInfoNachricht(bool isSLGA)
|
|
{
|
|
var info = new InfoNachricht();
|
|
var typ = isSLGA ? "SLGA" : "SLLA";
|
|
|
|
info.Nachrichtenreferenznummer = GetNextRefNumber();
|
|
info.NachrichtenTypKennung = typ;
|
|
info.NachrichtenVersionsnummer = "18";
|
|
info.NachrichtenFreigabeNrTages = "0";
|
|
info.NachrichtenVerwaltendeOrganisation = "0";
|
|
|
|
return info;
|
|
}
|
|
|
|
private static InfoNachrichtSLGA CreateDakotaInfoNachrichtSLGA(InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var info = new InfoNachrichtSLGA();
|
|
|
|
info.Verarbeitungskennzeichen = SchlüsselVerarbeitungskennzeichen.AbrechnungOhneBesonderheit;
|
|
info.IKAbsender = para2.IKAbsender;
|
|
info.IKKostentrager = para.IKKostentrager;
|
|
info.IKKvKarte = para.IKKvkarte;
|
|
info.IKLeistungserbringer = para2.IKAbsender;
|
|
|
|
info.Rechnungsnummer = para.InvoiceBase.InvoiceNumber;
|
|
info.Rechnungsdatum = para.InvoiceBase.InvoiceDate.Value;
|
|
info.Rechnungsart = SchlüsselRechnungsart.AbrechnungVonLeistungserbringer;
|
|
|
|
info.Summenstatus00 = SchlüsselSummenstatus.Gesamtsumme;
|
|
info.Gesamtbruttobetrag00 = para.InvoiceItem.AmountTotal.Value;
|
|
info.GesamtbetragZuzahlung00 = 5;
|
|
info.Gesamtrechnungsbetrag00 = info.Gesamtbruttobetrag00 - info.GesamtbetragZuzahlung00;
|
|
|
|
info.Summenstatus = SchlüsselSummenstatus.Mitglieder;
|
|
info.Gesamtbruttobetrag = para.InvoiceItem.AmountTotal.Value;
|
|
info.GesamtbetragZuzahlung = 5;
|
|
info.Gesamtrechnungsbetrag = info.Gesamtbruttobetrag00 - info.GesamtbetragZuzahlung00;
|
|
|
|
info.Name1 = "Name";
|
|
info.Name2 = "Ansprechpartner";
|
|
info.Name3 = "Nummer";
|
|
info.Name4 = "EMail";
|
|
|
|
return info;
|
|
}
|
|
|
|
private static InfoNachrichtSLLA CreateDakotaInfoNachrichtSLLA(InfoCreatorParameter para, InfoCreatorParameter2 para2)
|
|
{
|
|
var info = new InfoNachrichtSLLA();
|
|
|
|
info.Verarbeitungskennzeichen = SchlüsselVerarbeitungskennzeichen.AbrechnungOhneBesonderheit;
|
|
info.IKAbsender = para2.IKAbsender;
|
|
info.IKKostentrager = para.IKKostentrager;
|
|
info.IKKvKarte = para.IKKvkarte;
|
|
info.IKLeistungserbringer = para2.IKAbsender;
|
|
|
|
info.Rechnungsnummer = para.InvoiceBase.InvoiceNumber;
|
|
info.Rechnungsdatum = para.InvoiceBase.InvoiceDate.Value;
|
|
info.Rechnungsart = SchlüsselRechnungsart.AbrechnungVonLeistungserbringer;
|
|
|
|
info.Abrechnungsfalle = new List<InfoAbrechnungsfall>();
|
|
|
|
return info;
|
|
}
|
|
|
|
private static InfoAbrechnungsfall CreateDakotaInfoAbrechnungsfall(InfoCreatorParameter para)
|
|
{
|
|
var info = new InfoAbrechnungsfall();
|
|
|
|
info.VersichtertenNummer = para.IKKvkarte;
|
|
info.Versichertenstatus = para.Versichertenstatus;
|
|
info.Beleginformation = SchlüsselBeleginformation.KeineBeleguebermittlung;
|
|
info.Belegnummer = para.Belegnummer;
|
|
|
|
info.VersichtertenVorname = para.Customer.Person.FirstName;
|
|
info.VersichtertenNachname = para.Customer.Person.LastName;
|
|
info.VersichtertenGeburtstag = para.Customer.Person.DateOfBirth.Value;
|
|
info.VersichtertenStraßeNr = para.Customer.Person.Address.Street;
|
|
info.VersichtertenPLZ = para.Customer.Person.Address.PostalCode;
|
|
info.VersichtertenWohnort = para.Customer.Person.Address.Town;
|
|
info.VersichtertenLanderkennung = null;
|
|
|
|
// info.DakotaInfosAbrechnungsposition.Add(GetDakotaInfoAbrechnungsposition(para));
|
|
|
|
// Kann
|
|
|
|
// info.DakotaInfoDiagnosen.Add(GetDakotaInfoDiagnosen());
|
|
|
|
info.GesamtbetragGesetzlicheZuzahlung = 0;
|
|
info.GesamtbetragProzentualeZuzahlung = 0;
|
|
info.PauschalerZuzahlungsbetrag = 0;
|
|
info.GesamtbetragEigenanteil = 0;
|
|
info.GesamtbetragBrutto = 0;
|
|
|
|
return info;
|
|
}
|
|
|
|
private static InfoAbrechnungsposition CreateDakotaInfoAbrechnungsposition(InfoCreatorParameter para)
|
|
{
|
|
var info = new InfoAbrechnungsposition();
|
|
|
|
info.Identifikationsnummer = para.Identifikationsnummer;
|
|
info.Abrechnungscode = SchlüsselAbrechnungscodes.SoziotherapeutischerLeistungserbringer;
|
|
|
|
info.TarifkennzeichenBereich = SchlüsselTarifkennzeichenBereich.NordRheinWestfalen;
|
|
info.TarifkennzeichenSondertarif = SchlüsselTarifkennzeichenSondertarif.OhneBesonderheiten;
|
|
|
|
info.AbrechnungspositionArtDerEinrichtung = SchlüsselPosArtDerEinrichtung.SoziotherapeutischerLeistungserbringer;
|
|
info.AbrechnungspositionBehandlungsart = SchlüsselPosBehandlungsart.Einzelbehandlung;
|
|
info.AbrechnungspositionVergütungsart = SchlüsselPosVergütungsart.Gruppenbehandlung90Minuten9Teilnehmer;
|
|
|
|
info.AnzahlMenge = para.InvoiceItem.UnitCount.Value;
|
|
info.EinzelbetragAbrechnungsposition = para.InvoiceItem.AmountTotal.Value;
|
|
info.DatumDerLeistungserbringung = para.InvoiceBase.InvoiceDate.Value;
|
|
info.BetragZuzahlung = 0;
|
|
|
|
return info;
|
|
}
|
|
|
|
private static InfoBlockDiagnosen CreateDakotaInfoDiagnosen()
|
|
{
|
|
var info = new InfoBlockDiagnosen();
|
|
|
|
return info;
|
|
}
|
|
}
|
|
}
|