Umstrikturierung (noch Rechnungsart 1) + Berechnungsregeln

This commit is contained in:
2023-11-29 13:18:44 +01:00
parent c05b2102f7
commit 14daf9bc45
10 changed files with 182 additions and 54 deletions

View File

@@ -65,9 +65,9 @@
<Compile Include="Models\Daten\DatenelementFiller.cs" />
<Compile Include="Models\Infos\InfoDateiAuftrags.cs" />
<Compile Include="Models\Infos\InfoDateiNutzdaten.cs" />
<Compile Include="Models\Blocke\BlockAbrechnungsfall.cs" />
<Compile Include="Models\Blocke\BlockKlient.cs" />
<Compile Include="Models\Blocke\BlockKostenträger.cs" />
<Compile Include="Models\Blocke\BlockKrankenkarteVerordnung.cs" />
<Compile Include="Models\Blocke\BlockKrankenkasse.cs" />
<Compile Include="Models\Infos\InfoAbrechnungsfall.cs" />
<Compile Include="Models\Infos\InfoAbrechnungsposition.cs" />
<Compile Include="Models\Infos\InfoBlockDiagnosen.cs" />

View File

@@ -18,12 +18,12 @@ namespace Dakota.Logic
public ServiceInvoice ServiceInvoice { get; set; }
public InvoiceBase InvoiceBase { get; set; }
public Customer Customer { get; set; }
public SozioInvoiceItem SozioInvoiceItem { 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
@@ -137,9 +137,9 @@ namespace Dakota.Logic
info.Verschlusselungsart = 0;
info.ElektronischeUnterschrift = 0;
// info.Satzformat = "";
// info.Satzlange = 0;
// info.Blocklange = 0;
info.Satzformat = " ";
info.Satzlange = 0;
info.Blocklange = 0;
// Part 3 nicht vom Absender
@@ -212,7 +212,6 @@ namespace Dakota.Logic
internal static InfoAbrechnungsposition GetDakotaInfoAbrechnungsposition(this InfoAbrechnungsfall fall, InfoCreatorParameter para, InfoCreatorParameter2 para2)
{
var id = para.Identifikationsnummer;
var pos = CreateDakotaInfoAbrechnungsposition(para);
return pos;
@@ -294,18 +293,6 @@ namespace Dakota.Logic
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;
}
@@ -313,19 +300,21 @@ namespace Dakota.Logic
{
var info = new InfoAbrechnungsposition();
info.Identifikationsnummer = para.Identifikationsnummer;
info.Abrechnungscode = SchlüsselAbrechnungscodes.SoziotherapeutischerLeistungserbringer;
info.Identifikationsnummer = para.SozioInvoiceItem.Identifikationsnummer;
info.TarifkennzeichenBereich = SchlüsselTarifkennzeichenBereich.NordRheinWestfalen;
info.TarifkennzeichenSondertarif = SchlüsselTarifkennzeichenSondertarif.OhneBesonderheiten;
info.Abrechnungscode = new SchlüsselAbrechnungscodes(para.SozioInvoiceItem.Abrechnungscode);
info.AbrechnungspositionArtDerEinrichtung = SchlüsselPosArtDerEinrichtung.SoziotherapeutischerLeistungserbringer;
info.AbrechnungspositionBehandlungsart = SchlüsselPosBehandlungsart.Einzelbehandlung;
info.AbrechnungspositionVergütungsart = SchlüsselPosVergütungsart.Gruppenbehandlung90Minuten9Teilnehmer;
info.TarifkennzeichenBereich = new SchlüsselTarifkennzeichenBereich(para.SozioInvoiceItem.TarifkennzeichenBereich);
info.TarifkennzeichenSondertarif = new SchlüsselTarifkennzeichenSondertarif(para.SozioInvoiceItem.TarifkennzeichenSondertarif);
info.AbrechnungspositionArtDerEinrichtung = new SchlüsselPosArtDerEinrichtung(para.SozioInvoiceItem.AbrechnungspositionArtDerEinrichtung);
info.AbrechnungspositionBehandlungsart = new SchlüsselPosBehandlungsart(para.SozioInvoiceItem.AbrechnungspositionBehandlungsart);
info.AbrechnungspositionVergütungsart = new SchlüsselPosVergütungsart(para.SozioInvoiceItem.AbrechnungspositionVergütungsart, para.SozioInvoiceItem.AbrechnungspositionVergütungsart2);
info.AnzahlMenge = para.InvoiceItem.UnitCount.Value;
info.EinzelbetragAbrechnungsposition = para.InvoiceItem.AmountTotal.Value;
info.DatumDerLeistungserbringung = para.InvoiceBase.InvoiceDate.Value;
info.EinzelbetragAbrechnungsposition = para.InvoiceItem.AmountPerUnit.Value;
info.DatumDerLeistungserbringung = para.InvoiceItem.ItemPeriodStart.Value;
info.BetragZuzahlung = 0;
return info;

View File

@@ -12,7 +12,7 @@ namespace Dakota.Models.Blocke
/// <summary>
/// Nutzdatendatei ohne Logik
/// </summary>
internal class BlockFile : Nachricht
internal class BlockFile : Block
{
public SegmentUNB SegmentUNB { get; private set; }
public List<BlockKostenträger> BlockKostenträger { get; private set; }
@@ -40,7 +40,7 @@ namespace Dakota.Models.Blocke
return list;
}
public int GetUNHCount()
public override int GetUNHCount()
{
int i = 0;

View File

@@ -10,7 +10,7 @@ using Dakota.Models.Infos;
namespace Dakota.Models.Blocke
{
internal class BlockAbrechnungsfall : Block
internal class BlockKlient : Block
{
/// <summary>
@@ -82,7 +82,7 @@ namespace Dakota.Models.Blocke
public decimal GesamtbetragProzentualeZuzahlung => SegmentSLLABES.GesamtbetragProzentualeZuzahlung.DecimalValue;
public decimal PauschalerZuzahlungsbetrag => SegmentSLLABES.PauschalerZuzahlungsbetrag.DecimalValue;
public BlockAbrechnungsfall()
public BlockKlient()
{
SegmentSLLAINV = new SegmentSLLAINV();
SegmentSLLAURI = new SegmentSLLAURI();

View File

@@ -19,14 +19,14 @@ namespace Dakota.Models.Blocke
public SegmentUNH SegmentUNH { get; private set; }
public NachrichtSLGA NachrichtSLGA { get; private set; }
public SegmentUNT SegmentUNT { get; private set; }
public List<BlockKrankenkarteVerordnung> BlockKrankenkarteVerordnung { get; private set; }
public List<BlockKrankenkasse> BlockKrankenkasse { get; private set; }
internal BlockKostenträger()
{
SegmentUNH = new SegmentUNH();
NachrichtSLGA = new NachrichtSLGA();
SegmentUNT = new SegmentUNT(NachrichtSLGA.GetSegmentLength);
BlockKrankenkarteVerordnung = new List<BlockKrankenkarteVerordnung>();
BlockKrankenkasse = new List<BlockKrankenkasse>();
}
public string IKKostenträger
@@ -43,7 +43,7 @@ namespace Dakota.Models.Blocke
list.AddRange(NachrichtSLGA.GetSegments());
list.Add(SegmentUNT);
foreach (var block in BlockKrankenkarteVerordnung)
foreach (var block in BlockKrankenkasse)
{
list.AddRange(block.GetSegments());
}
@@ -54,7 +54,7 @@ namespace Dakota.Models.Blocke
{
var i = 1;
foreach (var block in BlockKrankenkarteVerordnung)
foreach (var block in BlockKrankenkasse)
{
i += block.GetUNHCount();
}
@@ -62,9 +62,9 @@ namespace Dakota.Models.Blocke
return i;
}
public void Add(BlockKrankenkarteVerordnung block)
public void Add(BlockKrankenkasse block)
{
BlockKrankenkarteVerordnung.Add(block);
BlockKrankenkasse.Add(block);
}
public void Apply(InfoBlockKostentrager info)
{
@@ -78,7 +78,7 @@ namespace Dakota.Models.Blocke
foreach (var infoblock in info.BlockKvKarte)
{
var blockkvkarte = new BlockKrankenkarteVerordnung();
var blockkvkarte = new BlockKrankenkasse();
blockkvkarte.Apply(infoblock);
@@ -94,7 +94,7 @@ namespace Dakota.Models.Blocke
{
Dictionary<string, decimal[]> segments = new Dictionary<string, decimal[]>();
foreach (var block in BlockKrankenkarteVerordnung)
foreach (var block in BlockKrankenkasse)
{
// Gesamt
CalculateSLGAStep(segments, block.NachrichtSLGA.SegmentGES00);

View File

@@ -15,7 +15,7 @@ namespace Dakota.Models.Blocke
/// <summary>
/// Wiederhole folgenden Block je IK der Krankenkarte bzw der Verordnung
/// </summary>
internal class BlockKrankenkarteVerordnung : Block
internal class BlockKrankenkasse : Block
{
public SegmentUNH SegmentSLGAUNH { get; private set; }
public NachrichtSLGA NachrichtSLGA { get; private set; }
@@ -24,7 +24,7 @@ namespace Dakota.Models.Blocke
public NachrichtSLLA NachrichtSLLA { get; private set; }
public SegmentUNT SegmentSLLAUNT { get; private set; }
public BlockKrankenkarteVerordnung()
public BlockKrankenkasse()
{
SegmentSLGAUNH = new SegmentUNH();
NachrichtSLGA = new NachrichtSLGA();
@@ -104,7 +104,7 @@ namespace Dakota.Models.Blocke
Dictionary<int, decimal[]> segments = new Dictionary<int, decimal[]>();
foreach (var fall in NachrichtSLLA.Abrechnungsfalle)
foreach (var fall in NachrichtSLLA.BlockKlienten)
{
int status = 11;

View File

@@ -76,6 +76,7 @@ namespace Dakota.Models.Nachrichten
public void Apply(InfoNachrichtSLGA info)
{
SegmentFKT.Verarbeitungskennzeichen.SetValue(info.Verarbeitungskennzeichen);
SegmentFKT.Sammelrechnung.SetValue("J");
SegmentFKT.IKLeistungserbringers.SetValue(info.IKLeistungserbringer);
SegmentFKT.IKKostenträger.SetValue(info.IKKostentrager);
SegmentFKT.IKKrankenkasseKVKarte.SetValue(info.IKKvKarte);

View File

@@ -28,7 +28,7 @@ namespace Dakota.Models.Nachrichten
/// <summary>
/// Abrechnungsfälle (INV - BES)
/// </summary>
public List<BlockAbrechnungsfall> Abrechnungsfalle { get; set; }
public List<BlockKlient> BlockKlienten { get; set; }
@@ -37,14 +37,14 @@ namespace Dakota.Models.Nachrichten
SegmentSLLAFKT = new SegmentSLLAFKT();
SegmentSLLAREC = new SegmentSLLAREC();
Abrechnungsfalle = new List<BlockAbrechnungsfall>();
BlockKlienten = new List<BlockKlient>();
}
public override List<Segment> GetAllSegments()
{
var list = new List<Segment>() { SegmentSLLAFKT, SegmentSLLAREC };
foreach (var block in Abrechnungsfalle)
foreach (var block in BlockKlienten)
{
list.AddRange(block.GetSegments());
}
@@ -52,9 +52,9 @@ namespace Dakota.Models.Nachrichten
return list;
}
public void Add(BlockAbrechnungsfall fall)
public void Add(BlockKlient fall)
{
Abrechnungsfalle.Add(fall);
BlockKlienten.Add(fall);
}
public void Apply(InfoNachrichtSLLA info)
{
@@ -66,7 +66,7 @@ namespace Dakota.Models.Nachrichten
foreach (var infofall in info.Abrechnungsfalle)
{
var block = new BlockAbrechnungsfall();
var block = new BlockKlient();
block.Apply(infofall);

View File

@@ -11,15 +11,34 @@ namespace BeWo.Data.Entities
{
protected InvoiceItem _InvoiceItem;
protected ServiceRecord _ServiceRecord;
protected string _Identifikationsnummer;
protected string _Leistungsgruppe;
protected string _Abrechnungscode;
protected string _TarifkennzeichenBereich;
protected string _TarifkennzeichenSondertarif;
protected string _ArtDerAngegebenLeistung;
protected string _SchlüsselTarifkennzeichenBereich;
protected string _SchlüsselTarifkennzeichenSondertarif;
protected string _AbrechnungspositionArtDerEinrichtung;
protected string _AbrechnungspositionBehandlungsart;
protected string _AbrechnungspositionVergütungsart;
protected string _AbrechnungspositionVergütungsart2;
public SozioInvoiceItem() : base()
{
_Tid = TableID.SozioInvoiceItem;
}
public virtual DateTime TagDerLeistungserbringung => InvoiceItem.ItemPeriodStart.Value;
public virtual decimal GefahreneKilometer => ServiceRecord.DistanceInMeter.Value / 1000;
public virtual DateTime UhrzeitVon => ServiceRecord.Start.Value;
public virtual DateTime UhrzeitBis => ServiceRecord.End.Value;
public virtual int DauerRounded => (int)ServiceRecord.DurationMinutes;
public virtual string Text => string.Empty;
public virtual InvoiceItem InvoiceItem
{
get
@@ -34,6 +53,7 @@ namespace BeWo.Data.Entities
}
}
}
public virtual ServiceRecord ServiceRecord
{
get
@@ -62,17 +82,45 @@ namespace BeWo.Data.Entities
}
}
}
public virtual string Leistungsgruppe
public virtual string Abrechnungscode
{
get
{
return _Leistungsgruppe;
return _Abrechnungscode;
}
set
{
if (AreDifferent(_Leistungsgruppe, value))
if (AreDifferent(_Abrechnungscode, value))
{
_Leistungsgruppe = value;
_Abrechnungscode = value;
}
}
}
public virtual string TarifkennzeichenBereich
{
get
{
return _TarifkennzeichenBereich;
}
set
{
if (AreDifferent(_TarifkennzeichenBereich, value))
{
_TarifkennzeichenBereich = value;
}
}
}
public virtual string TarifkennzeichenSondertarif
{
get
{
return _TarifkennzeichenSondertarif;
}
set
{
if (AreDifferent(_TarifkennzeichenSondertarif, value))
{
_TarifkennzeichenSondertarif = value;
}
}
}
@@ -90,5 +138,89 @@ namespace BeWo.Data.Entities
}
}
}
public virtual string SchlüsselTarifkennzeichenBereich
{
get
{
return _SchlüsselTarifkennzeichenBereich;
}
set
{
if (AreDifferent(_SchlüsselTarifkennzeichenBereich, value))
{
_SchlüsselTarifkennzeichenBereich = value;
}
}
}
public virtual string SchlüsselTarifkennzeichenSondertarif
{
get
{
return _SchlüsselTarifkennzeichenSondertarif;
}
set
{
if (AreDifferent(_SchlüsselTarifkennzeichenSondertarif, value))
{
_SchlüsselTarifkennzeichenSondertarif = value;
}
}
}
public virtual string AbrechnungspositionArtDerEinrichtung
{
get
{
return _AbrechnungspositionArtDerEinrichtung;
}
set
{
if (AreDifferent(_AbrechnungspositionArtDerEinrichtung, value))
{
_AbrechnungspositionArtDerEinrichtung = value;
}
}
}
public virtual string AbrechnungspositionBehandlungsart
{
get
{
return _AbrechnungspositionBehandlungsart;
}
set
{
if (AreDifferent(_AbrechnungspositionBehandlungsart, value))
{
_AbrechnungspositionBehandlungsart = value;
}
}
}
public virtual string AbrechnungspositionVergütungsart
{
get
{
return _AbrechnungspositionVergütungsart;
}
set
{
if (AreDifferent(_AbrechnungspositionVergütungsart, value))
{
_AbrechnungspositionVergütungsart = value;
}
}
}
public virtual string AbrechnungspositionVergütungsart2
{
get
{
return _AbrechnungspositionVergütungsart2;
}
set
{
if (AreDifferent(_AbrechnungspositionVergütungsart2, value))
{
_AbrechnungspositionVergütungsart = value;
}
}
}
}
}

View File

@@ -7700,6 +7700,11 @@ namespace BeWo.Service.ServiceImplementations
}
}
public SozioInvoiceItem GetSozioInvoiceItem(InvoiceItem invoiceItem)
{
throw new NotImplementedException();
}
public string GetDakotaFileFormat(object param)
{
try
@@ -7723,6 +7728,7 @@ namespace BeWo.Service.ServiceImplementations
para.ServiceInvoicePeriod = period;
para.InvoiceBase = invoicebase;
para.Customer = period.Customer;
para.SozioInvoiceItem = GetSozioInvoiceItem(item);
paras.Add(para);
}