IK Nummern über Organisation direkt abholbar
-> Felder ausgeblendet, wenn keine Recht -> Erprobung neuer Default -> Debug kann auch Test einstellen
This commit is contained in:
@@ -1755,6 +1755,7 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Priority))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Status))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.QBFilterEnum))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvVerfahrensstufe))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactWohnheimDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactOrganisationDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactPersonDC>))]
|
||||
@@ -2093,6 +2094,7 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferFehlerlevel))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvAbrechnungApp8RequestTypeDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC))]
|
||||
@@ -2102,6 +2104,10 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Request))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Response))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
||||
@@ -5981,6 +5987,7 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Priority))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Status))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.QBFilterEnum))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvVerfahrensstufe))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactWohnheimDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactOrganisationDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Compact.CompactPersonDC>))]
|
||||
@@ -6319,6 +6326,7 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferFehlerlevel))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvAbrechnungApp8RequestTypeDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC>))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC))]
|
||||
@@ -6328,6 +6336,10 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Request))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Response))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
||||
@@ -9705,6 +9717,10 @@ namespace BeWo.ServiceProxy
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendNewGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/SendNewGkvAbrechnungResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC req);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendApp8GetIKRequest", ReplyAction="http://tempuri.org/IAccountingService/SendApp8GetIKRequestResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendApp8GetIKRequestBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse SendApp8GetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest req);
|
||||
}
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||
@@ -9930,6 +9946,11 @@ namespace BeWo.ServiceProxy
|
||||
{
|
||||
return base.Channel.SendNewGkvAbrechnung(req);
|
||||
}
|
||||
|
||||
public BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse SendApp8GetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest req)
|
||||
{
|
||||
return base.Channel.SendApp8GetIKRequest(req);
|
||||
}
|
||||
}
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||
|
||||
@@ -136,4 +136,18 @@
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="HideDisabledButtonSmall"
|
||||
BasedOn="{StaticResource HideDisabledButton}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Setter Property="Height" Value="21" />
|
||||
</Style>
|
||||
|
||||
<Style
|
||||
x:Key="PrimaryButtonSmall"
|
||||
BasedOn="{StaticResource PrimaryButton}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Setter Property="Height" Value="21" />
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using BS.Shared.Extensions;
|
||||
using BS.Shared.Translation;
|
||||
using DevExpress.Xpf.Grid;
|
||||
@@ -59,6 +60,13 @@ namespace BeWo.View.Detail
|
||||
{
|
||||
tabitem_documents.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
|
||||
#else
|
||||
label_verfahrensstufe.Visibility = Visibility.Collapsed;
|
||||
radiobuttons_verfahrensstufe.Visibility = Visibility.Collapsed;
|
||||
#endif
|
||||
}
|
||||
|
||||
public event EventHandler<EventArgs<OrganisationVM>> OrganisationSavedOrUpdated;
|
||||
@@ -302,9 +310,32 @@ namespace BeWo.View.Detail
|
||||
ov.Margin = new Thickness(0, 10, 0, 0);
|
||||
Grid.SetRow(ov, 1);
|
||||
GridSBD.Children.Add(ov);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void IKNumber_Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var req = new GkvApp8GetIKRequest();
|
||||
|
||||
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
|
||||
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
|
||||
|
||||
ServiceFacade.DoAccountingServiceAsync(x => x.SendApp8GetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
|
||||
}
|
||||
|
||||
private void IKRequestCallback(GkvApp8GetIKRequest req, GkvApp8GetIKResponse response)
|
||||
{
|
||||
if (!response.Gefunden)
|
||||
{
|
||||
MessageBox.Show($"Für die Organisation mit dem IK \"{req.IKKrankenkasse}\" und Leistungserbringergruppe \"{req.Leistungserbringergruppe}\" konnte keine Datenannahmestelle gefunden werden. " +
|
||||
$"Bitte informieren Sie sich bei der Krankenkasse, ob zum elektronischen Datenaustausch " +
|
||||
$"eine seperate Anmeldung benötigt wird.");
|
||||
return;
|
||||
}
|
||||
|
||||
ViewModel.BezDatenannahmestelle = response.BezDatenannahmestelle;
|
||||
ViewModel.IKKostentrager = response.IKKostentrager;
|
||||
ViewModel.IKDatenannahmestelle = response.IKDatenannahmestelle;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -769,20 +769,25 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsIKNumberValid
|
||||
=> DakotaValidator.ValidateIKNumber(IKKrankenkasse)
|
||||
&& DakotaValidator.ValidateLeistungserbringergruppe(Leistungserbringergruppe);
|
||||
|
||||
public string IKKrankenkasse
|
||||
{
|
||||
get { return this._IKKrankenkasse; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._IKKrankenkasse, value))
|
||||
{
|
||||
this._IKKrankenkasse = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IKKrankenkasse, value), nameof(IKKrankenkasse));
|
||||
this.FirePropertyChanged(nameof(IKKrankenkasse));
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
if (!AreDifferent(_IKKrankenkasse, value))
|
||||
return;
|
||||
|
||||
_IKKrankenkasse = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.IKKrankenkasse, value), nameof(IKKrankenkasse));
|
||||
FirePropertyChanged(nameof(IKKrankenkasse));
|
||||
FirePropertyChanged(nameof(IsIKNumberValid));
|
||||
}
|
||||
}
|
||||
|
||||
public string IKKostentrager
|
||||
{
|
||||
@@ -831,18 +836,19 @@ namespace BeWo.ViewModel
|
||||
|
||||
public string Leistungserbringergruppe
|
||||
{
|
||||
get { return this._Leistungserbringergruppe; }
|
||||
get { return _Leistungserbringergruppe; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._Leistungserbringergruppe, value))
|
||||
{
|
||||
this._Leistungserbringergruppe = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Leistungserbringergruppe, value), nameof(Leistungserbringergruppe));
|
||||
this.FirePropertyChanged(nameof(Leistungserbringergruppe));
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
if (!AreDifferent(_Leistungserbringergruppe, value))
|
||||
return;
|
||||
|
||||
_Leistungserbringergruppe = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.Leistungserbringergruppe, value), nameof(Leistungserbringergruppe));
|
||||
FirePropertyChanged(nameof(Leistungserbringergruppe));
|
||||
FirePropertyChanged(nameof(IsIKNumberValid));
|
||||
}
|
||||
}
|
||||
|
||||
public string BusinessPartnerId
|
||||
{
|
||||
@@ -870,6 +876,8 @@ namespace BeWo.ViewModel
|
||||
this._Verfahrensstufe = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Verfahrensstufe, value), nameof(Verfahrensstufe));
|
||||
this.FirePropertyChanged(nameof(Verfahrensstufe));
|
||||
this.FirePropertyChanged(nameof(VerfahrensstufeInt));
|
||||
this.FirePropertyChanged(nameof(Echtverfahren));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -884,7 +892,22 @@ namespace BeWo.ViewModel
|
||||
return;
|
||||
|
||||
Verfahrensstufe = (GkvVerfahrensstufe)value;
|
||||
//FirePropertyChanged(nameof(VerfahrensstufeInt));
|
||||
}
|
||||
}
|
||||
|
||||
public bool Echtverfahren
|
||||
{
|
||||
get { return Verfahrensstufe == GkvVerfahrensstufe.Echt; }
|
||||
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(Echtverfahren, value))
|
||||
return;
|
||||
|
||||
if (value)
|
||||
Verfahrensstufe = GkvVerfahrensstufe.Echt;
|
||||
else
|
||||
Verfahrensstufe = GkvVerfahrensstufe.Erprobung;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DakotaConfig.cs" />
|
||||
<Compile Include="DakotaUtils.cs" />
|
||||
<Compile Include="Logic\DakotaKTDReader.cs" />
|
||||
<Compile Include="Logic\DakotaManager.cs" />
|
||||
<Compile Include="Logic\DakotaUtils.cs" />
|
||||
<Compile Include="Models\Auftragsdatei\Auftragsdatei.cs" />
|
||||
<Compile Include="Models\Auftragsdatei\AuftragssatzPart2.cs" />
|
||||
<Compile Include="Models\Auftragsdatei\AuftragssatzPart3.cs" />
|
||||
@@ -54,7 +54,6 @@
|
||||
<Compile Include="DakotaExtensions.cs" />
|
||||
<Compile Include="Models\DakotaException.cs" />
|
||||
<Compile Include="Models\DakotaFile.cs" />
|
||||
<Compile Include="DakotaValidator.cs" />
|
||||
<Compile Include="Models\Auftragsdatei\AuftragssatzPart1.cs" />
|
||||
<Compile Include="Models\Blocke\Block.cs" />
|
||||
<Compile Include="Models\Blocke\BlockAbrechnungsposition.cs" />
|
||||
|
||||
146
Dakota/DakotaUtils.cs
Normal file
146
Dakota/DakotaUtils.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using BeWo.Data.Entities;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using Dakota.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Dakota
|
||||
{
|
||||
public static class DakotaUtils
|
||||
{
|
||||
public static string FillFromLeft(string input, int length, char filler)
|
||||
{
|
||||
if (input.Length > length)
|
||||
return input;
|
||||
|
||||
if (input.Length == length)
|
||||
return input;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
for (int i = 0; i < length - input.Length; i++)
|
||||
{
|
||||
sb.Append(filler);
|
||||
}
|
||||
sb.Append(input);
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string FillFromRight(string input, int length, char filler)
|
||||
{
|
||||
if (input.Length > length)
|
||||
return input;
|
||||
|
||||
if (input.Length == length)
|
||||
return input;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(input);
|
||||
for (int i = 0; i < length - input.Length; i++)
|
||||
{
|
||||
sb.Append(filler);
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string GetAbrechnungscode(string leistungserbringergruppe)
|
||||
{
|
||||
var len = leistungserbringergruppe.Length;
|
||||
|
||||
if (len == 5)
|
||||
{
|
||||
return "69";
|
||||
}
|
||||
else if (len == 7)
|
||||
{
|
||||
return leistungserbringergruppe.Substring(0, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Leistungserbringergruppe \"{leistungserbringergruppe}\" hat ungültige Anzahl Stellen");
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetTarifkennzeichen(string leistungserbringergruppe)
|
||||
{
|
||||
var len = leistungserbringergruppe.Length;
|
||||
|
||||
if (len == 5)
|
||||
{
|
||||
return leistungserbringergruppe;
|
||||
}
|
||||
else if (len == 7)
|
||||
{
|
||||
return leistungserbringergruppe.Substring(2);
|
||||
// return leistungserbringergruppe.Substring(2, 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Leistungserbringergruppe \"{leistungserbringergruppe}\" hat ungültige Anzahl Stellen");
|
||||
}
|
||||
}
|
||||
|
||||
public static string ClearTextString(string input)
|
||||
{
|
||||
foreach (var specialChar in DakotaConfig.SpecialCollection)
|
||||
{
|
||||
input = input.Replace(specialChar, DakotaConfig.Aufhebungszeichen + specialChar);
|
||||
}
|
||||
|
||||
return input.Trim();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validiert in erster Phase den Mandator.
|
||||
/// </summary>
|
||||
public static void ValidateMandator(MandatorDC mandatordc)
|
||||
{
|
||||
if (mandatordc == null)
|
||||
throw new DakotaException("Mandator ist null");
|
||||
|
||||
if (!DakotaValidator.ValidateIKNumber(mandatordc.IKLeistungserbringer))
|
||||
throw new DakotaException($"Die IK Nummer des Leistungserbringers \"{mandatordc.IKLeistungserbringer}\" ist ungültig.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validiert in zweiter Phase die Daten. Bei Fehler wird eine DakotaException geworfen.
|
||||
/// </summary>
|
||||
public static void ValidateCustomer(CustomerDC customerDC)
|
||||
{
|
||||
string error = null;
|
||||
|
||||
if (customerDC == null)
|
||||
error = "Customer ist null";
|
||||
else if (!DakotaValidator.ValidateVersichertenstatus(customerDC.VersichertenStatus))
|
||||
error = $"Klient/in \"{customerDC.LastName}, {customerDC.FirstName}\" hat keinen gültigen Versichertenstatus";
|
||||
|
||||
if (error != null)
|
||||
throw new DakotaException(error);
|
||||
}
|
||||
|
||||
public static void ValidateOrganisation(Organisation orga)
|
||||
{
|
||||
string error = null;
|
||||
|
||||
if (orga == null)
|
||||
error = "Organisation ist null";
|
||||
else if (!DakotaValidator.ValidateLeistungserbringergruppe(orga.Leistungserbringergruppe))
|
||||
error = $"Die Organisation \"{orga.Name}\" hat keine gültige Leistungserbringergruppe: \"{orga.Leistungserbringergruppe}\". Erwarten werden 5 Stellen für das Tarifkennzeichen alleine oder 7 Stellen für den Abrechnungscode und für das Tarifkennzeichen zusammen.";
|
||||
else if (!DakotaValidator.ValidateIKNumber(orga.IKKrankenkasse))
|
||||
error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Krankenkasse Kennzeichen: \"{orga.IKKrankenkasse}\".";
|
||||
else if (!DakotaValidator.ValidateIKNumber(orga.IKKostentrager))
|
||||
error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Kostenträger Kennzeichen: \"{orga.IKKostentrager}\".";
|
||||
else if (!DakotaValidator.ValidateIKNumber(orga.IKDatenannahmestelle))
|
||||
error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Datenannahmestelle Kennzeichen: \"{orga.IKDatenannahmestelle}\".";
|
||||
|
||||
if (error != null)
|
||||
throw new DakotaException(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
using BeWo.Data.Entities;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using Dakota.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Dakota
|
||||
{
|
||||
public static class DakotaValidator
|
||||
{
|
||||
public static string ClearTextString(string input)
|
||||
{
|
||||
foreach (var specialChar in DakotaConfig.SpecialCollection)
|
||||
{
|
||||
input = input.Replace(specialChar, DakotaConfig.Aufhebungszeichen + specialChar);
|
||||
}
|
||||
|
||||
return input.Trim();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validiert in erster Phase den Mandator.
|
||||
/// </summary>
|
||||
public static void ValidateMandator(MandatorDC mandatordc)
|
||||
{
|
||||
if (mandatordc == null)
|
||||
throw new DakotaException("Mandator ist null");
|
||||
|
||||
if (!ValidateIKNumber(mandatordc.IKLeistungserbringer))
|
||||
throw new DakotaException($"Die IK Nummer des Leistungserbringers \"{mandatordc.IKLeistungserbringer}\" ist ungültig.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validiert in zweiter Phase die Daten. Bei Fehler wird eine DakotaException geworfen.
|
||||
/// </summary>
|
||||
public static void ValidateCustomer(CustomerDC customerDC)
|
||||
{
|
||||
string error = null;
|
||||
|
||||
if (customerDC == null)
|
||||
error = "Customer ist null";
|
||||
else if (!ValidateVersichertenstatus(customerDC.VersichertenStatus))
|
||||
error = $"Klient/in \"{customerDC.LastName}, {customerDC.FirstName}\" hat keinen gültigen Versichertenstatus";
|
||||
|
||||
if (error != null)
|
||||
throw new DakotaException(error);
|
||||
}
|
||||
|
||||
public static void ValidateOrganisation(Organisation orga)
|
||||
{
|
||||
string error = null;
|
||||
|
||||
if (orga == null)
|
||||
error = "Organisation ist null";
|
||||
else if (!ValidateLeistungserbringergruppe(orga.Leistungserbringergruppe))
|
||||
error = $"Die Organisation \"{orga.Name}\" hat keine gültige Leistungserbringergruppe: \"{orga.Leistungserbringergruppe}\". Erwarten werden 5 Stellen für das Tarifkennzeichen alleine oder 7 Stellen für den Abrechnungscode und für das Tarifkennzeichen zusammen.";
|
||||
else if (!ValidateIKNumber(orga.IKKrankenkasse))
|
||||
error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Kennzeichen: \"{orga.IKKrankenkasse}\".";
|
||||
|
||||
if (error != null)
|
||||
throw new DakotaException(error);
|
||||
}
|
||||
|
||||
public static bool ValidateOrganisationInformations(Organisation orga)
|
||||
=> ValidateIKNumbers(orga.IKDatenannahmestelle, orga.IKKostentrager, orga.IKKrankenkasse) && !string.IsNullOrEmpty(orga.BezDatenannahmestelle);
|
||||
private static bool ValidateIKNumbers(params string[] iks)
|
||||
=> iks?.All(ValidateIKNumber) ?? false;
|
||||
|
||||
private static bool ValidateIKNumber(string iknummer)
|
||||
{
|
||||
if (iknummer == null)
|
||||
return false;
|
||||
|
||||
if (iknummer.Length != 9)
|
||||
return false;
|
||||
|
||||
return int.TryParse(iknummer, out int x);
|
||||
}
|
||||
|
||||
private static bool ValidateVersichertenstatus(string status)
|
||||
{
|
||||
if (status == null)
|
||||
return false;
|
||||
|
||||
if (status.Length != 5 && status.Length != 7)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool ValidateLeistungserbringergruppe(string code)
|
||||
{
|
||||
if (code == null)
|
||||
return false;
|
||||
|
||||
if (code.Length != 5 && code.Length != 7)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Dakota.Logic
|
||||
{
|
||||
public static class DakotaUtils
|
||||
{
|
||||
public static string FillFromLeft(string input, int length, char filler)
|
||||
{
|
||||
if (input.Length > length)
|
||||
return input;
|
||||
|
||||
if (input.Length == length)
|
||||
return input;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
for (int i = 0; i < length - input.Length; i++)
|
||||
{
|
||||
sb.Append(filler);
|
||||
}
|
||||
sb.Append(input);
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string FillFromRight(string input, int length, char filler)
|
||||
{
|
||||
if (input.Length > length)
|
||||
return input;
|
||||
|
||||
if (input.Length == length)
|
||||
return input;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(input);
|
||||
for (int i = 0; i < length - input.Length; i++)
|
||||
{
|
||||
sb.Append(filler);
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string GetAbrechnungscode(string leistungserbringergruppe)
|
||||
{
|
||||
var len = leistungserbringergruppe.Length;
|
||||
|
||||
if(len == 5)
|
||||
{
|
||||
return "69";
|
||||
}
|
||||
else if(len == 7)
|
||||
{
|
||||
return leistungserbringergruppe.Substring(0, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Leistungserbringergruppe \"{leistungserbringergruppe}\" hat ungültige Anzahl Stellen");
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetTarifkennzeichen(string leistungserbringergruppe)
|
||||
{
|
||||
var len = leistungserbringergruppe.Length;
|
||||
|
||||
if (len == 5)
|
||||
{
|
||||
return leistungserbringergruppe;
|
||||
}
|
||||
else if (len == 7)
|
||||
{
|
||||
return leistungserbringergruppe.Substring(2);
|
||||
// return leistungserbringergruppe.Substring(2, 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Leistungserbringergruppe \"{leistungserbringergruppe}\" hat ungültige Anzahl Stellen");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -97,7 +97,7 @@ namespace Dakota.Models.Daten
|
||||
throw new DakotaException($"Das Feld \"{Title}\" hat bei der Erstellung {_Value.Length} Stellen ergeben! Nach Vorgabe darf es jedoch maximal {MaxStellen} Stellen haben");
|
||||
}
|
||||
|
||||
var mod_value = DakotaValidator.ClearTextString(value);
|
||||
var mod_value = DakotaUtils.ClearTextString(value);
|
||||
|
||||
_Value = mod_value;
|
||||
}
|
||||
|
||||
@@ -36,359 +36,362 @@ using Dakota.Logic;
|
||||
|
||||
namespace Host
|
||||
{
|
||||
public partial class GkvAbrechnungView : Page
|
||||
{
|
||||
public const int PROCESS_WAITFOREXIT_MS = 10 * 1000;
|
||||
public partial class GkvAbrechnungView : Page
|
||||
{
|
||||
public const int PROCESS_WAITFOREXIT_MS = 10 * 1000;
|
||||
|
||||
private string GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0";
|
||||
private string LOGINSERVER_URL = "{0}/Login.aspx";
|
||||
private string GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0";
|
||||
private string LOGINSERVER_URL = "{0}/Login.aspx";
|
||||
|
||||
private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
|
||||
private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath");
|
||||
private string KostentragerdateiFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvKostentragerdateiFolderPath");
|
||||
private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
|
||||
private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath");
|
||||
private string KostentragerdateiFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvKostentragerdateiFolderPath");
|
||||
|
||||
public GkvApp8Request GkvRequest { get; set; }
|
||||
public GkvApp8Request GkvRequest { get; set; }
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
//https://app8.bewoplaner.de/Host/GkvAbrechungview?tenant=12345
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
//https://app8.bewoplaner.de/Host/GkvAbrechungview?tenant=12345
|
||||
|
||||
var str = new StreamReader(Request.InputStream).ReadToEnd();
|
||||
var str = new StreamReader(Request.InputStream).ReadToEnd();
|
||||
|
||||
if (string.IsNullOrEmpty(str))
|
||||
SendErrorResponse("Ungültige Eingabe");
|
||||
if (string.IsNullOrEmpty(str))
|
||||
SendErrorResponse("Ungültige Eingabe");
|
||||
|
||||
GkvRequest = JsonConvert.DeserializeObject<GkvApp8Request>(str);
|
||||
GkvRequest = JsonConvert.DeserializeObject<GkvApp8Request>(str);
|
||||
|
||||
if (!CheckValues())
|
||||
SendErrorResponse("Check Fehlgeschlagen");
|
||||
if (!CheckValues())
|
||||
SendErrorResponse("Check Fehlgeschlagen");
|
||||
|
||||
if (!TryLogin())
|
||||
SendErrorResponse("Login Fehlgeschlagen");
|
||||
if (!TryLogin())
|
||||
SendErrorResponse("Login Fehlgeschlagen");
|
||||
|
||||
switch (GkvRequest.Type)
|
||||
{
|
||||
case GkvAbrechnungApp8RequestTypeDC.SendNew:
|
||||
SendNew(JsonConvert.DeserializeObject<GkvApp8SendNewRequest>(str));
|
||||
return;
|
||||
case GkvAbrechnungApp8RequestTypeDC.GetStatus:
|
||||
GetStatus(JsonConvert.DeserializeObject<GkvApp8GetStatusRequest>(str));
|
||||
return;
|
||||
case GkvAbrechnungApp8RequestTypeDC.GetIKNumber:
|
||||
GetIK(JsonConvert.DeserializeObject<GkvApp8GetIKRequest>(str));
|
||||
return;
|
||||
default:
|
||||
SendErrorResponse("GkvAbrechnungType unbekannt.");
|
||||
return;
|
||||
}
|
||||
switch (GkvRequest.Type)
|
||||
{
|
||||
case GkvAbrechnungApp8RequestTypeDC.SendNew:
|
||||
SendNew(JsonConvert.DeserializeObject<GkvApp8SendNewRequest>(str));
|
||||
return;
|
||||
case GkvAbrechnungApp8RequestTypeDC.GetStatus:
|
||||
GetStatus(JsonConvert.DeserializeObject<GkvApp8GetStatusRequest>(str));
|
||||
return;
|
||||
case GkvAbrechnungApp8RequestTypeDC.GetIKNumber:
|
||||
GetIK(JsonConvert.DeserializeObject<GkvApp8GetIKRequest>(str));
|
||||
return;
|
||||
default:
|
||||
SendErrorResponse("GkvAbrechnungType unbekannt.");
|
||||
return;
|
||||
}
|
||||
|
||||
SendErrorResponse("Unbekannter Fehler");
|
||||
}
|
||||
catch (ThreadAbortException eee)
|
||||
{
|
||||
SendErrorResponse("Unbekannter Fehler");
|
||||
}
|
||||
catch (ThreadAbortException eee)
|
||||
{
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var ex_text = ex.Message + "\n" + ex.StackTrace;
|
||||
SendErrorResponse(ex_text);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var ex_text = ex.Message + "\n" + ex.StackTrace;
|
||||
SendErrorResponse(ex_text);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void SendErrorResponse(string message)
|
||||
{
|
||||
var response = new GkvApp8Response();
|
||||
private void SendErrorResponse(string message)
|
||||
{
|
||||
var response = new GkvApp8Response();
|
||||
|
||||
response.Success = false;
|
||||
response.Message = message;
|
||||
response.Success = false;
|
||||
response.Message = message;
|
||||
|
||||
SendResponse(JsonConvert.SerializeObject(response));
|
||||
}
|
||||
private void SendResponse(object res) => SendResponse(JsonConvert.SerializeObject(res));
|
||||
private void SendResponse(string str)
|
||||
{
|
||||
Response.Write(str);
|
||||
SendResponse(JsonConvert.SerializeObject(response));
|
||||
}
|
||||
private void SendResponse(object res) => SendResponse(JsonConvert.SerializeObject(res));
|
||||
private void SendResponse(string str)
|
||||
{
|
||||
Response.Write(str);
|
||||
|
||||
Response.End();
|
||||
//Context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
Response.End();
|
||||
//Context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
|
||||
private bool CheckValues() => CheckValues(GkvRequest);
|
||||
private bool CheckValues(GkvApp8Request request)
|
||||
{
|
||||
if (request == null)
|
||||
return false;
|
||||
if (request.Type == GkvAbrechnungApp8RequestTypeDC.Default)
|
||||
return false;
|
||||
if (string.IsNullOrWhiteSpace(request.Username))
|
||||
return false;
|
||||
if (string.IsNullOrWhiteSpace(request.Tenant))
|
||||
return false;
|
||||
if (string.IsNullOrWhiteSpace(request.Password))
|
||||
return false;
|
||||
private bool CheckValues() => CheckValues(GkvRequest);
|
||||
private bool CheckValues(GkvApp8Request request)
|
||||
{
|
||||
if (request == null)
|
||||
return false;
|
||||
if (request.Type == GkvAbrechnungApp8RequestTypeDC.Default)
|
||||
return false;
|
||||
if (string.IsNullOrWhiteSpace(request.Username))
|
||||
return false;
|
||||
if (string.IsNullOrWhiteSpace(request.Tenant))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool TryLogin() => TryLogin(GkvRequest);
|
||||
private bool TryLogin(GkvApp8Request gkv_request)
|
||||
{
|
||||
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
|
||||
{
|
||||
gkv_request.Tenant = "7375324044";
|
||||
return true;
|
||||
}
|
||||
|
||||
var server = GetServerFromTenant(gkv_request.Tenant);
|
||||
var loginurl = string.Format(LOGINSERVER_URL, $"https://{server}/service");
|
||||
|
||||
#if DEBUG
|
||||
//loginurl = string.Format(LOGINSERVER_URL, "https://app4.bewoplaner.de");
|
||||
loginurl = string.Format(LOGINSERVER_URL, "http://localhost:3777/Host");
|
||||
#if !DEBUG
|
||||
if (string.IsNullOrWhiteSpace(request.Password))
|
||||
return false;
|
||||
#endif
|
||||
|
||||
bool successful = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using (WebClient client = new WebClient())
|
||||
{
|
||||
var nvc = new NameValueCollection();
|
||||
nvc.Add("password", gkv_request.Password);
|
||||
nvc.Add("username", gkv_request.Username);
|
||||
nvc.Add("tenant", gkv_request.Tenant);
|
||||
private bool TryLogin() => TryLogin(GkvRequest);
|
||||
private bool TryLogin(GkvApp8Request gkv_request)
|
||||
{
|
||||
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
|
||||
{
|
||||
gkv_request.Tenant = "7375324044";
|
||||
return true;
|
||||
}
|
||||
|
||||
var loginresponse = client.UploadValues(loginurl, "POST", nvc);
|
||||
var server = GetServerFromTenant(gkv_request.Tenant);
|
||||
var loginurl = string.Format(LOGINSERVER_URL, $"https://{server}/service");
|
||||
|
||||
successful = BitConverter.ToBoolean(loginresponse, 0);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new DakotaException($"loginurl: {loginurl} | " + e.ToString());
|
||||
}
|
||||
#if DEBUG
|
||||
//loginurl = string.Format(LOGINSERVER_URL, "https://app4.bewoplaner.de");
|
||||
loginurl = string.Format(LOGINSERVER_URL, "http://localhost:3777/Host");
|
||||
#endif
|
||||
|
||||
return successful;
|
||||
}
|
||||
bool successful = false;
|
||||
|
||||
private void SendNew(GkvApp8SendNewRequest req)
|
||||
{
|
||||
// Response
|
||||
var response = new GkvApp8SendNewResponse(false);
|
||||
try
|
||||
{
|
||||
using (WebClient client = new WebClient())
|
||||
{
|
||||
var nvc = new NameValueCollection();
|
||||
nvc.Add("password", gkv_request.Password);
|
||||
nvc.Add("username", gkv_request.Username);
|
||||
nvc.Add("tenant", gkv_request.Tenant);
|
||||
|
||||
var protokoll = req.GkvTransferProtokoll;
|
||||
var loginresponse = client.UploadValues(loginurl, "POST", nvc);
|
||||
|
||||
try
|
||||
{
|
||||
SaveFileInFileSystem(req, true);
|
||||
successful = BitConverter.ToBoolean(loginresponse, 0);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new DakotaException($"loginurl: {loginurl} | " + e.ToString());
|
||||
}
|
||||
|
||||
req.GkvTransferProtokoll.SentSuccess = true;
|
||||
return successful;
|
||||
}
|
||||
|
||||
response.Success = true;
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
protokoll.Fehlertitel = "App8";
|
||||
protokoll.Fehlernachricht = e.Message;
|
||||
private void SendNew(GkvApp8SendNewRequest req)
|
||||
{
|
||||
// Response
|
||||
var response = new GkvApp8SendNewResponse(false);
|
||||
|
||||
response.Message = e.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
protokoll.Fehlertitel = "App8";
|
||||
protokoll.Fehlernachricht = e.Message;
|
||||
var protokoll = req.GkvTransferProtokoll;
|
||||
|
||||
response.Message = e.Message;
|
||||
}
|
||||
try
|
||||
{
|
||||
SaveFileInFileSystem(req, true);
|
||||
|
||||
response.GkvTransferProtokollDC = protokoll;
|
||||
req.GkvTransferProtokoll.SentSuccess = true;
|
||||
|
||||
SendResponse(response);
|
||||
}
|
||||
private void GetStatus(GkvApp8GetStatusRequest req)
|
||||
{
|
||||
var response = new GkvApp8GetStatusResponse(false);
|
||||
response.Success = true;
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
protokoll.Fehlertitel = "App8";
|
||||
protokoll.Fehlernachricht = e.Message;
|
||||
|
||||
var tuple_count = req.Oids.Length;
|
||||
response.Message = e.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
protokoll.Fehlertitel = "App8";
|
||||
protokoll.Fehlernachricht = e.Message;
|
||||
|
||||
response.Fehler = new GkvApp8FehlerDC[tuple_count];
|
||||
response.Message = e.Message;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Load XML Info
|
||||
var results = GetResultFile(GkvRequest.Tenant);
|
||||
response.GkvTransferProtokollDC = protokoll;
|
||||
|
||||
if (results is object)
|
||||
for (int i = 0; i < tuple_count; i++)
|
||||
{
|
||||
var gkv_transfer_oid = req.Oids[i];
|
||||
SendResponse(response);
|
||||
}
|
||||
private void GetStatus(GkvApp8GetStatusRequest req)
|
||||
{
|
||||
var response = new GkvApp8GetStatusResponse(false);
|
||||
|
||||
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
|
||||
{
|
||||
response.Fehler[i] = fehlerDC;
|
||||
}
|
||||
}
|
||||
var tuple_count = req.Oids.Length;
|
||||
|
||||
ClearResultFolder(GkvRequest.Tenant, req.Oids);
|
||||
response.Fehler = new GkvApp8FehlerDC[tuple_count];
|
||||
|
||||
response.Success = true;
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
response.Message = e.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
response.Message = e.ToString();
|
||||
}
|
||||
try
|
||||
{
|
||||
// Load XML Info
|
||||
var results = GetResultFile(GkvRequest.Tenant);
|
||||
|
||||
SendResponse(response);
|
||||
if (results is object)
|
||||
for (int i = 0; i < tuple_count; i++)
|
||||
{
|
||||
var gkv_transfer_oid = req.Oids[i];
|
||||
|
||||
return;
|
||||
}
|
||||
private void GetIK(GkvApp8GetIKRequest req)
|
||||
{
|
||||
var ktd_reader = new DakotaKTDReader(KostentragerdateiFolderPath);
|
||||
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
|
||||
{
|
||||
response.Fehler[i] = fehlerDC;
|
||||
}
|
||||
}
|
||||
|
||||
var resolved = ktd_reader.Resolve(req.IKKrankenkasse, req.Abrechnungscode, req.Tarifkennzeichen);
|
||||
ClearResultFolder(GkvRequest.Tenant, req.Oids);
|
||||
|
||||
var response = new GkvApp8GetIKResponse();
|
||||
response.Success = true;
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
response.Message = e.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
response.Message = e.ToString();
|
||||
}
|
||||
|
||||
response.Success = true;
|
||||
response.Gefunden = resolved is object;
|
||||
SendResponse(response);
|
||||
|
||||
if (response.Gefunden)
|
||||
{
|
||||
response.IKDatenannahmestelle = resolved.Item1;
|
||||
response.IKKostentrager = resolved.Item2;
|
||||
response.IKKrankenkasse = resolved.Item3;
|
||||
response.BezDatenannahmestelle = resolved.Item4;
|
||||
}
|
||||
return;
|
||||
}
|
||||
private void GetIK(GkvApp8GetIKRequest req)
|
||||
{
|
||||
var ktd_reader = new DakotaKTDReader(KostentragerdateiFolderPath);
|
||||
|
||||
SendResponse(response);
|
||||
}
|
||||
var resolved = ktd_reader.Resolve(req.IKKrankenkasse, req.Abrechnungscode, req.Tarifkennzeichen);
|
||||
|
||||
private string SaveFileInFileSystem(GkvApp8SendNewRequest req, bool debug_mode = false)
|
||||
=> SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, GkvRequest.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
|
||||
req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei, debug_mode);
|
||||
private string SaveFileInFileSystem(long protokoll_oid, string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei, bool debug_mode = false)
|
||||
{
|
||||
string root_path;
|
||||
string file_path;
|
||||
if (debug_mode)
|
||||
{
|
||||
root_path = QueueFolderPath;
|
||||
file_path = $@"{tenant}_{protokoll_oid}_{datenannahmestelle}_{transfername}";
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new DakotaException("No Debugmode impl");
|
||||
//root_path = $@"C:\GkvAbrechnung\{tenant}\{datenannahmestelle}\";
|
||||
//file_path = $@"{transfername}";
|
||||
}
|
||||
var response = new GkvApp8GetIKResponse();
|
||||
|
||||
Directory.CreateDirectory(root_path);
|
||||
response.Success = true;
|
||||
response.Gefunden = resolved is object;
|
||||
|
||||
var finalpath = root_path + file_path;
|
||||
if (response.Gefunden)
|
||||
{
|
||||
response.IKDatenannahmestelle = resolved.Item1;
|
||||
response.IKKostentrager = resolved.Item2;
|
||||
response.IKKrankenkasse = resolved.Item3;
|
||||
response.BezDatenannahmestelle = resolved.Item4;
|
||||
}
|
||||
|
||||
return SaveFileInFileSystem(finalpath, nutzdaten, auftragsdatei);
|
||||
}
|
||||
private string SaveFileInFileSystem(string finalpath, string nutzdaten, string auftragsdatei)
|
||||
{
|
||||
File.WriteAllText(finalpath, nutzdaten);
|
||||
SendResponse(response);
|
||||
}
|
||||
|
||||
var auftragsdatei2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(auftragsdatei);
|
||||
private string SaveFileInFileSystem(GkvApp8SendNewRequest req, bool debug_mode = false)
|
||||
=> SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, GkvRequest.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
|
||||
req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei, debug_mode);
|
||||
private string SaveFileInFileSystem(long protokoll_oid, string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei, bool debug_mode = false)
|
||||
{
|
||||
string root_path;
|
||||
string file_path;
|
||||
if (debug_mode)
|
||||
{
|
||||
root_path = QueueFolderPath;
|
||||
file_path = $@"{tenant}_{protokoll_oid}_{datenannahmestelle}_{transfername}";
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new DakotaException("No Debugmode impl");
|
||||
//root_path = $@"C:\GkvAbrechnung\{tenant}\{datenannahmestelle}\";
|
||||
//file_path = $@"{transfername}";
|
||||
}
|
||||
|
||||
File.WriteAllBytes(finalpath + ".auf", auftragsdatei2);
|
||||
Directory.CreateDirectory(root_path);
|
||||
|
||||
return finalpath;
|
||||
}
|
||||
var finalpath = root_path + file_path;
|
||||
|
||||
private string GetServerFromTenant(string tenant)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SaveFileInFileSystem(finalpath, nutzdaten, auftragsdatei);
|
||||
}
|
||||
private string SaveFileInFileSystem(string finalpath, string nutzdaten, string auftragsdatei)
|
||||
{
|
||||
File.WriteAllText(finalpath, nutzdaten);
|
||||
|
||||
String url = String.Format(GETSERVER_URL, tenant);
|
||||
using (WebClient client = new WebClient())
|
||||
{
|
||||
//MessageBox.Show(hostAddress);
|
||||
byte[] response = client.UploadValues(url, "POST", new NameValueCollection());
|
||||
var auftragsdatei2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(auftragsdatei);
|
||||
|
||||
String server = System.Text.Encoding.ASCII.GetString(response);
|
||||
File.WriteAllBytes(finalpath + ".auf", auftragsdatei2);
|
||||
|
||||
return server;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return finalpath;
|
||||
}
|
||||
|
||||
private void ClearResultFolder(string tenant, long[] oids)
|
||||
{
|
||||
var folder = new DirectoryInfo(Path.Combine(ResultFolderPath, tenant));
|
||||
private string GetServerFromTenant(string tenant)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
if (!folder.Exists)
|
||||
return;
|
||||
String url = String.Format(GETSERVER_URL, tenant);
|
||||
using (WebClient client = new WebClient())
|
||||
{
|
||||
//MessageBox.Show(hostAddress);
|
||||
byte[] response = client.UploadValues(url, "POST", new NameValueCollection());
|
||||
|
||||
foreach (var file in folder.GetFiles())
|
||||
{
|
||||
var xml_obj = GkvApp8FehlerXml.GetFehlerXml(file.FullName);
|
||||
String server = System.Text.Encoding.ASCII.GetString(response);
|
||||
|
||||
if (xml_obj is GkvApp8FehlerXml xml && oids.Contains(xml.Oid))
|
||||
continue;
|
||||
return server;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
file.Delete();
|
||||
}
|
||||
}
|
||||
private Dictionary<long, GkvApp8FehlerDC> GetResultFile(string tenant)
|
||||
{
|
||||
try
|
||||
{
|
||||
var path = ResultFolderPath;
|
||||
private void ClearResultFolder(string tenant, long[] oids)
|
||||
{
|
||||
var folder = new DirectoryInfo(Path.Combine(ResultFolderPath, tenant));
|
||||
|
||||
if (string.IsNullOrWhiteSpace(path))
|
||||
throw new DakotaException("Config GkvAbrechnungResultFolderPath is empty or whitespace");
|
||||
if (!folder.Exists)
|
||||
return;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(tenant))
|
||||
throw new DakotaException("Tenant is empty or whitespace");
|
||||
foreach (var file in folder.GetFiles())
|
||||
{
|
||||
var xml_obj = GkvApp8FehlerXml.GetFehlerXml(file.FullName);
|
||||
|
||||
var folder = new DirectoryInfo(Path.Combine(path, tenant));
|
||||
if (xml_obj is GkvApp8FehlerXml xml && oids.Contains(xml.Oid))
|
||||
continue;
|
||||
|
||||
if (!folder.Exists)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var dict = new Dictionary<long, GkvApp8FehlerDC>();
|
||||
foreach (var file in folder.GetFiles("*.xml"))
|
||||
{
|
||||
var xml = GkvApp8FehlerXml.GetFehlerXml(file.FullName);
|
||||
file.Delete();
|
||||
}
|
||||
}
|
||||
private Dictionary<long, GkvApp8FehlerDC> GetResultFile(string tenant)
|
||||
{
|
||||
try
|
||||
{
|
||||
var path = ResultFolderPath;
|
||||
|
||||
if (xml is null)
|
||||
continue;
|
||||
if (string.IsNullOrWhiteSpace(path))
|
||||
throw new DakotaException("Config GkvAbrechnungResultFolderPath is empty or whitespace");
|
||||
|
||||
dict.Add(xml.Oid, GkvApp8FehlerXml.ToDC(xml));
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new DakotaException("App8 Server Error: " + e.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(tenant))
|
||||
throw new DakotaException("Tenant is empty or whitespace");
|
||||
|
||||
var folder = new DirectoryInfo(Path.Combine(path, tenant));
|
||||
|
||||
if (!folder.Exists)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var dict = new Dictionary<long, GkvApp8FehlerDC>();
|
||||
foreach (var file in folder.GetFiles("*.xml"))
|
||||
{
|
||||
var xml = GkvApp8FehlerXml.GetFehlerXml(file.FullName);
|
||||
|
||||
if (xml is null)
|
||||
continue;
|
||||
|
||||
dict.Add(xml.Oid, GkvApp8FehlerXml.ToDC(xml));
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new DakotaException("App8 Server Error: " + e.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,9 @@ namespace Host
|
||||
var username = Request.Form["username"];
|
||||
var password = Request.Form["password"];
|
||||
|
||||
if (string.IsNullOrEmpty(password))
|
||||
password = null;
|
||||
|
||||
var user = DAOFactory.UserDAO.FindUserByLoginName(username);
|
||||
|
||||
var result = user.BCryptPassword == password;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `organisation`
|
||||
CHANGE COLUMN `Verfahrensstufe` `Verfahrensstufe` INT NULL DEFAULT '1' ;
|
||||
@@ -164,5 +164,9 @@ namespace BeWo.Service.ServiceContracts
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req);
|
||||
|
||||
[FaultContract(typeof(BeWoFault))]
|
||||
[OperationContract]
|
||||
GkvApp8GetIKResponse SendApp8GetIKRequest(GkvApp8GetIKRequest req);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
53
Shared/Core/DakotaValidator.cs
Normal file
53
Shared/Core/DakotaValidator.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BS.Shared.Core
|
||||
{
|
||||
public static class DakotaValidator
|
||||
{
|
||||
public static bool ValidateMandator(string ik_leistungserbringer)
|
||||
=> ValidateIKNumber(ik_leistungserbringer);
|
||||
public static bool ValidateOrganisationInformations(string ik_datenannahmestelle, string ik_kostentrager, string ik_krankenkasse, string bez_datenannahmestelle)
|
||||
=> ValidateIKNumber(ik_datenannahmestelle, ik_kostentrager, ik_krankenkasse) && !string.IsNullOrEmpty(bez_datenannahmestelle);
|
||||
public static bool ValidateIKNumber(params string[] iks)
|
||||
=> iks?.All(ValidateIKNumber) ?? false;
|
||||
|
||||
public static bool ValidateIKNumber(string iknummer)
|
||||
{
|
||||
if (iknummer == null)
|
||||
return false;
|
||||
|
||||
if (iknummer.Length != 9)
|
||||
return false;
|
||||
|
||||
return int.TryParse(iknummer, out int x);
|
||||
}
|
||||
|
||||
public static bool ValidateVersichertenstatus(string status)
|
||||
{
|
||||
if (status == null)
|
||||
return false;
|
||||
|
||||
if (status.Length != 5 && status.Length != 7)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool ValidateLeistungserbringergruppe(string code)
|
||||
{
|
||||
if (code == null)
|
||||
return false;
|
||||
|
||||
if (code.Length != 5 && code.Length != 7)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,9 @@ namespace BS.Shared.DataContracts.GkvAbrechnung
|
||||
[DataMember]
|
||||
public string Tarifkennzeichen { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public string Leistungserbringergruppe { get; set; }
|
||||
|
||||
public GkvApp8GetIKRequest()
|
||||
{
|
||||
Type = GkvAbrechnungApp8RequestTypeDC.GetIKNumber;
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
<Compile Include="BeWoEntityEnums.cs" />
|
||||
<Compile Include="Core\ComplexWohnheimbuchungsRelationHelper.cs" />
|
||||
<Compile Include="Core\AbstractIDSpecificDefaultClass.cs" />
|
||||
<Compile Include="Core\DakotaValidator.cs" />
|
||||
<Compile Include="Core\DebugUtils.cs" />
|
||||
<Compile Include="Core\ImageUtils.cs" />
|
||||
<Compile Include="Core\PersonFilterEnum.cs" />
|
||||
|
||||
Reference in New Issue
Block a user