Files
BeWoPlaner/Dakota/DakotaValidator.cs

107 lines
3.7 KiB
C#

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