diff --git a/BeWo/View/Master/FinanceView.xaml.cs b/BeWo/View/Master/FinanceView.xaml.cs
index 0571a156c..df743ed41 100644
--- a/BeWo/View/Master/FinanceView.xaml.cs
+++ b/BeWo/View/Master/FinanceView.xaml.cs
@@ -134,6 +134,24 @@ namespace BeWo.View.Master
{
tabitem_bargeldverwaltung.Visibility = Visibility.Collapsed;
}
+
+ if (!BeWoApp.AppSettings.AllowGkvAbrechnung)
+ {
+ tabitem_gkvabrechnung.Visibility = Visibility.Collapsed;
+ tabitem_gkvabrechnung_alt.Visibility = Visibility.Collapsed;
+ }
+
+ if (BeWoApp.AppSettings.AllowGkvAbrechnung)
+ {
+ tabitem_gkvabrechnung.Visibility = Visibility.Visible;
+ tabitem_gkvabrechnung_alt.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ tabitem_gkvabrechnung.Visibility = Visibility.Collapsed;
+ tabitem_gkvabrechnung_alt.Visibility = Visibility.Collapsed;
+ }
+
foreach (TabItem tabitem in root.Items)
{
if (tabitem.Visibility == Visibility.Visible)
@@ -142,12 +160,6 @@ namespace BeWo.View.Master
break;
}
}
-
- if (!BeWoApp.AppSettings.AllowGkvAbrechnung)
- {
- tabitem_gkvabrechnung.Visibility = Visibility.Collapsed;
- tabitem_gkvabrechnung_alt.Visibility = Visibility.Collapsed;
- }
}
private void tabitem_equityinvoice_Selected(object sender, RoutedEventArgs e)
diff --git a/Dakota/Dakota.csproj b/Dakota/Dakota.csproj
index 2c702aa8d..0476521d7 100644
--- a/Dakota/Dakota.csproj
+++ b/Dakota/Dakota.csproj
@@ -131,7 +131,7 @@
-
+
diff --git a/Dakota/Logic/DakotaInfoCreator.cs b/Dakota/Logic/DakotaInfoCreator.cs
index 385957ee8..4e17434ee 100644
--- a/Dakota/Logic/DakotaInfoCreator.cs
+++ b/Dakota/Logic/DakotaInfoCreator.cs
@@ -103,17 +103,17 @@ namespace Dakota.Logic
return info;
}
- internal static void AddInfoParameter(this InfoDateiNutzdaten file, InfoParameterInvoiceItem infoParameter)
+ internal static void AddInfoParameter(this InfoDateiNutzdaten file, InfoParameterInvoiceItem infoParameter, int version)
{
- var blockkostentrager = file.GetDakotaInfoBlockKostentrager(infoParameter);
- var blockkvkarte = blockkostentrager.GetDakotaInfoBlockKvKarte(infoParameter);
+ var blockkostentrager = file.GetDakotaInfoBlockKostentrager(infoParameter, version);
+ var blockkvkarte = blockkostentrager.GetDakotaInfoBlockKvKarte(infoParameter, version);
var abrechnungsfall = blockkvkarte.GetDakotaInfoAbrechnungsfall(infoParameter);
var abrechnungsposition = abrechnungsfall.GetDakotaInfoAbrechnungsposition(infoParameter);
abrechnungsfall.InfosAbrechnungsposition.Add(abrechnungsposition);
}
- internal static InfoBlockKostentrager GetDakotaInfoBlockKostentrager(this InfoDateiNutzdaten file, InfoParameterInvoiceItem infoParameter)
+ internal static InfoBlockKostentrager GetDakotaInfoBlockKostentrager(this InfoDateiNutzdaten file, InfoParameterInvoiceItem infoParameter, int version)
{
var ikkostentrager = infoParameter.IKKostentrager;
var block = file.BlockKostentragers.FirstOrDefault(x => x.IKKostentrager == ikkostentrager);
@@ -122,7 +122,7 @@ namespace Dakota.Logic
{
block = new InfoBlockKostentrager(ikkostentrager)
{
- DakotaInfoSLGA = CreateDakotaInfoNachricht(true),
+ DakotaInfoSLGA = CreateDakotaInfoNachricht(true, version),
DakotaInfoNachrichtSLGA = CreateDakotaInfoNachrichtSLGA(infoParameter)
};
file.BlockKostentragers.Add(block);
@@ -130,7 +130,7 @@ namespace Dakota.Logic
return block;
}
- internal static InfoBlockKrankenkasse GetDakotaInfoBlockKvKarte(this InfoBlockKostentrager blockkostentrager, InfoParameterInvoiceItem infoParameter)
+ internal static InfoBlockKrankenkasse GetDakotaInfoBlockKvKarte(this InfoBlockKostentrager blockkostentrager, InfoParameterInvoiceItem infoParameter, int version)
{
var ikkrankenkasse = infoParameter.IKKrankenkasse;
var block = blockkostentrager.BlockKvKarte.FirstOrDefault(x => x.IKKrankenkasse == ikkrankenkasse);
@@ -139,9 +139,9 @@ namespace Dakota.Logic
{
block = new InfoBlockKrankenkasse(ikkrankenkasse)
{
- DakotaInfoSLGA = CreateDakotaInfoNachricht(true),
+ DakotaInfoSLGA = CreateDakotaInfoNachricht(true, version),
DakotaInfoNachrichtSLGA = CreateDakotaInfoNachrichtSLGA(infoParameter),
- DakotaInfoSLLA = CreateDakotaInfoNachricht(false),
+ DakotaInfoSLLA = CreateDakotaInfoNachricht(false, version),
DakotaInfoNachrichtSLLA = CreateDakotaInfoNachrichtSLLA(infoParameter)
};
blockkostentrager.BlockKvKarte.Add(block);
@@ -173,14 +173,14 @@ namespace Dakota.Logic
// -----------------------------------------------------------------------------------------------------------------------------------
- private static InfoNachricht CreateDakotaInfoNachricht(bool isSLGA)
+ private static InfoNachricht CreateDakotaInfoNachricht(bool isSLGA, int version)
{
var info = new InfoNachricht();
var typ = isSLGA ? "SLGA" : "SLLA";
info.Nachrichtenreferenznummer = GetNextRefNumber();
info.NachrichtenTypKennung = typ;
- info.NachrichtenVersionsnummer = "18";
+ info.NachrichtenVersionsnummer = version.ToString();
info.NachrichtenFreigabeNrTages = "0";
info.NachrichtenVerwaltendeOrganisation = "0";
diff --git a/Dakota/Logic/DakotaManager.cs b/Dakota/Logic/DakotaManager.cs
index a50e21d6b..1c8303e72 100644
--- a/Dakota/Logic/DakotaManager.cs
+++ b/Dakota/Logic/DakotaManager.cs
@@ -12,15 +12,17 @@ namespace Dakota.Logic
public class DakotaManager
{
public int Month { get; set; }
+ public int Version { get; set; }
public Dictionary DakotaFileDict { get; set; }
public Dictionary DakotaInfoNutzDict { get; set; }
public Dictionary DakotaInfoAufDict { get; set; }
- public DakotaManager(int _month)
+ public DakotaManager(int month, DateTime dateTime)
{
- Month = _month;
+ Month = month;
+ Version = GetVersion(dateTime);
DakotaFileDict = new Dictionary();
@@ -29,7 +31,6 @@ namespace Dakota.Logic
}
public void Add(InfoParameterInvoiceItem info) => Add(info.ServiceInvoice, info.Organisation, info.Customer, info.Mandator);
-
public void Add(ServiceInvoiceDC serviceInvoice, OrganisationDC organisation, CustomerDC customer, MandatorDC mandator)
{
var ik_datenannahmestelle = organisation.IKDatenannahmestelle;
@@ -52,7 +53,7 @@ namespace Dakota.Logic
{
var info_nutz_item = new InfoParameterInvoiceItem(serviceInvoice, invoice, organisation, customer, mandator);
- nutzdaten.AddInfoParameter(info_nutz_item);
+ nutzdaten.AddInfoParameter(info_nutz_item, Version);
}
}
}
@@ -61,7 +62,7 @@ namespace Dakota.Logic
{
foreach (var ik_datenannahmestelle in DakotaInfoNutzDict.Keys)
{
- var file = new DakotaFile();
+ var file = new DakotaFile(DateTime.Now);
var info_nutz = DakotaInfoNutzDict[ik_datenannahmestelle];
var info_auf = DakotaInfoAufDict[ik_datenannahmestelle];
@@ -101,5 +102,22 @@ namespace Dakota.Logic
File.WriteAllBytes(pathauf, auftragsdatei2);
}
}
+
+ private int GetVersion(DateTime create4month)
+ {
+ if(create4month < new DateTime(2023, 7, 1))
+ throw new NotImplementedException("Keine Unterstützung von Version 17 oder niedriger");
+
+ if (create4month < new DateTime(2024, 1, 1))
+ return 18;
+
+ if (create4month < new DateTime(2024, 7, 1))
+ return 19;
+
+ if (create4month < new DateTime(2025, 1, 1))
+ return 20;
+
+ throw new NotImplementedException("Keine Unterstützung von Version 21 oder aufwärts");
+ }
}
}
diff --git a/Dakota/Models/Blocke/BlockKostenträger.cs b/Dakota/Models/Blocke/BlockKostenträger.cs
index f7073e8a0..6ec73775e 100644
--- a/Dakota/Models/Blocke/BlockKostenträger.cs
+++ b/Dakota/Models/Blocke/BlockKostenträger.cs
@@ -16,32 +16,37 @@ namespace Dakota.Models.Blocke
///
internal class BlockKostenträger : Block
{
+ public bool IsSammelrechnung { get; private set; }
+
public SegmentUNH SegmentUNH { get; private set; }
- public NachrichtSLGA NachrichtSLGA { get; private set; }
+ public NachrichtSLGA NachrichtSLGASammelrechnung { get; private set; }
public SegmentUNT SegmentUNT { get; private set; }
public List BlockKrankenkasse { get; private set; }
- internal BlockKostenträger()
+ internal BlockKostenträger(bool isSammelrechnung = false)
{
- SegmentUNH = new SegmentUNH();
- NachrichtSLGA = new NachrichtSLGA();
- SegmentUNT = new SegmentUNT(NachrichtSLGA.GetSegmentLength);
- BlockKrankenkasse = new List();
- }
+ IsSammelrechnung = isSammelrechnung;
- public string IKKostenträger
- {
- get { return NachrichtSLGA.SegmentFKT.IKKostenträger.GetValue(); }
- set { NachrichtSLGA.SegmentFKT.IKKostenträger.SetValue(value); }
+ if (isSammelrechnung)
+ {
+ SegmentUNH = new SegmentUNH();
+ NachrichtSLGASammelrechnung = new NachrichtSLGA();
+ SegmentUNT = new SegmentUNT(NachrichtSLGASammelrechnung.GetSegmentLength);
+ }
+
+ BlockKrankenkasse = new List();
}
public override List GetAllSegments()
{
var list = new List();
- list.Add(SegmentUNH);
- list.AddRange(NachrichtSLGA.GetSegments());
- list.Add(SegmentUNT);
+ if (IsSammelrechnung)
+ {
+ list.Add(SegmentUNH);
+ list.AddRange(NachrichtSLGASammelrechnung.GetSegments());
+ list.Add(SegmentUNT);
+ }
foreach (var block in BlockKrankenkasse)
{
@@ -52,7 +57,10 @@ namespace Dakota.Models.Blocke
}
public override int GetUNHCount()
{
- var i = 1;
+ var i = 0;
+
+ if (SegmentUNH is object)
+ i++;
foreach (var block in BlockKrankenkasse)
{
@@ -68,13 +76,16 @@ namespace Dakota.Models.Blocke
}
public void Apply(InfoBlockKostentrager info)
{
- SegmentUNH.Nachrichtenreferenznummer.SetValue(info.DakotaInfoSLGA.Nachrichtenreferenznummer);
- SegmentUNH.NachrichtenTypKennung.SetValue(info.DakotaInfoSLGA.NachrichtenTypKennung);
- SegmentUNH.Nachrichtenverionsnummer.SetValue(info.DakotaInfoSLGA.NachrichtenVersionsnummer);
- SegmentUNH.NachrichtenFreigabeNrDesTypes.SetValue(info.DakotaInfoSLGA.NachrichtenFreigabeNrTages);
- SegmentUNH.NachrichtenVerwaltendeOrganisation.SetValue(info.DakotaInfoSLGA.NachrichtenVerwaltendeOrganisation);
+ if (IsSammelrechnung)
+ {
+ SegmentUNH.Nachrichtenreferenznummer.SetValue(info.DakotaInfoSLGA.Nachrichtenreferenznummer);
+ SegmentUNH.NachrichtenTypKennung.SetValue(info.DakotaInfoSLGA.NachrichtenTypKennung);
+ SegmentUNH.Nachrichtenverionsnummer.SetValue(info.DakotaInfoSLGA.NachrichtenVersionsnummer);
+ SegmentUNH.NachrichtenFreigabeNrDesTypes.SetValue(info.DakotaInfoSLGA.NachrichtenFreigabeNrTages);
+ SegmentUNH.NachrichtenVerwaltendeOrganisation.SetValue(info.DakotaInfoSLGA.NachrichtenVerwaltendeOrganisation);
- NachrichtSLGA.Apply(info.DakotaInfoNachrichtSLGA);
+ NachrichtSLGASammelrechnung.Apply(info.DakotaInfoNachrichtSLGA);
+ }
foreach (var infoblock in info.BlockKvKarte)
{
@@ -85,9 +96,12 @@ namespace Dakota.Models.Blocke
Add(blockkvkarte);
}
- CalculateSLGA();
+ if (IsSammelrechnung)
+ {
+ CalculateSLGA();
- SegmentUNT.Nachrichtenreferenznummer.SetValue(info.DakotaInfoSLGA.Nachrichtenreferenznummer);
+ SegmentUNT.Nachrichtenreferenznummer.SetValue(info.DakotaInfoSLGA.Nachrichtenreferenznummer);
+ }
}
private void CalculateSLGA()
@@ -106,22 +120,25 @@ namespace Dakota.Models.Blocke
}
}
- foreach (var key in segments.Keys)
+ if (IsSammelrechnung)
{
- var array = segments[key];
-
- if(key == SchlüsselSummenstatus.Gesamtsumme.Value)
+ foreach (var key in segments.Keys)
{
- NachrichtSLGA.SegmentGES00.Status.SetValue(SchlüsselSummenstatus.Gesamtsumme);
- NachrichtSLGA.SegmentGES00.Gesamtrechnungsbetrag.SetValue(array[0]);
- NachrichtSLGA.SegmentGES00.Gesamtbruttobetrag.SetValue(array[1]);
- NachrichtSLGA.SegmentGES00.GesamtbetragZuzahlung.SetValue(array[2]);
- }
- else
- {
- var seg = new SegmentSLGAGES(key, array[0], array[1], array[2]);
+ var array = segments[key];
- NachrichtSLGA.ListSegmentGES.Add(seg);
+ if (key == SchlüsselSummenstatus.Gesamtsumme.Value)
+ {
+ NachrichtSLGASammelrechnung.SegmentGES00.Status.SetValue(SchlüsselSummenstatus.Gesamtsumme);
+ NachrichtSLGASammelrechnung.SegmentGES00.Gesamtrechnungsbetrag.SetValue(array[0]);
+ NachrichtSLGASammelrechnung.SegmentGES00.Gesamtbruttobetrag.SetValue(array[1]);
+ NachrichtSLGASammelrechnung.SegmentGES00.GesamtbetragZuzahlung.SetValue(array[2]);
+ }
+ else
+ {
+ var seg = new SegmentSLGAGES(key, array[0], array[1], array[2]);
+
+ NachrichtSLGASammelrechnung.ListSegmentGES.Add(seg);
+ }
}
}
}
diff --git a/Dakota/Models/Blocke/BlockFile.cs b/Dakota/Models/Blocke/Nutzdatendatei.cs
similarity index 96%
rename from Dakota/Models/Blocke/BlockFile.cs
rename to Dakota/Models/Blocke/Nutzdatendatei.cs
index 88668f3a3..8f9580a2c 100644
--- a/Dakota/Models/Blocke/BlockFile.cs
+++ b/Dakota/Models/Blocke/Nutzdatendatei.cs
@@ -12,7 +12,7 @@ namespace Dakota.Models.Blocke
///
/// Nutzdatendatei ohne Logik
///
- internal class BlockFile : Block
+ internal class Nutzdatendatei : Block
{
public DakotaFile Parent { get; set; }
@@ -20,7 +20,7 @@ namespace Dakota.Models.Blocke
public List BlockKostenträger { get; private set; }
public SegmentUNZ SegmentUNZ { get; private set; }
- internal BlockFile(DakotaFile parent)
+ internal Nutzdatendatei(DakotaFile parent)
{
SegmentUNB = new SegmentUNB();
BlockKostenträger = new List();
diff --git a/Dakota/Models/DakotaFile.cs b/Dakota/Models/DakotaFile.cs
index fcda89cad..e2a9a8ec5 100644
--- a/Dakota/Models/DakotaFile.cs
+++ b/Dakota/Models/DakotaFile.cs
@@ -17,7 +17,7 @@ namespace Dakota
///
public class DakotaFile
{
- internal BlockFile Nutzdatendatei { get; private set; }
+ internal Nutzdatendatei Nutzdatendatei { get; private set; }
internal Auftragsdatei Auftragsdatei { get; private set; }
public DateTime Created { get; set; }
@@ -25,11 +25,11 @@ namespace Dakota
internal string Verfahrenskennung => Auftragsdatei.AuftragssatzPart1.VerfahrenKennung.GetValue();
internal string Transfernummer => Auftragsdatei.AuftragssatzPart1.TransferNummer.GetValue();
- internal DakotaFile()
+ internal DakotaFile(DateTime created)
{
- Nutzdatendatei = new BlockFile(this);
+ Nutzdatendatei = new Nutzdatendatei(this);
Auftragsdatei = new Auftragsdatei(this);
- Created = DateTime.Now;
+ Created = created;
}
public string GetTransferName()
diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs
index df8c48596..c10a93674 100644
--- a/Service/ServiceImplementations/OperationsServiceImp.cs
+++ b/Service/ServiceImplementations/OperationsServiceImp.cs
@@ -8734,9 +8734,9 @@ namespace BeWo.Service.ServiceImplementations
{
var test_oid = Convert.ToInt64(param);
var test_invoicebase = DAOFactory.GenericDAO.GetByID(test_oid);
- var test_month = test_invoicebase.InvoiceDate.Value.Month;
+ var test_datetime = test_invoicebase.InvoiceDate.Value;
- var manager = new DakotaManager(test_month);
+ var manager = new DakotaManager(test_datetime.Month, DateTime.Now);
var oids = new List();
oids.Add(test_oid);