Files
BeWoPlaner/Shared/Core/Validation/GkvValidation.cs

140 lines
5.3 KiB
C#

using BS.Shared.Core.Rule;
using BS.Shared.DataContracts;
using BS.Shared.Exceptions;
using BS.Shared.Extensions;
using BS.Shared.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static BS.Shared.Core.Rule.GkvRules;
namespace BS.Shared.Core.Validation
{
public static class GkvValidation
{
public static string ValidateGkvAbrechnung(IGkvAbrechnung gkvAbrechnung, IEnumerable<IInvoiceBase> invoiceBases, bool testInvoicesEmpty = true)
{
if (testInvoicesEmpty && !invoiceBases.Any())
return "Keine Rechnungen gefunden";
if (ValidateInvoiceBases(invoiceBases) is string rtn_error)
return rtn_error;
return null;
}
public static string ValidateMandator(MandatorDC mandatordc)
{
if (mandatordc == null)
return "Mandator ist null";
if (!IsIKNumberValid(mandatordc.IKLeistungserbringer))
return $"Die IK Nummer des Leistungserbringers \"{mandatordc.IKLeistungserbringer}\" ist ungültig.";
if (mandatordc.Name.Length > 30)
return $"Der Name des Leistungserbringers \"{mandatordc.IKLeistungserbringer}\" ist zu lang. Nach Vorgabe dürfen es maximal 30 Stellen sein.";
return null;
}
public static string ValidateCustomer(CustomerDC customerDC)
{
if (customerDC == null)
return "customer is null";
bool valid_number = IsVersichertennummerValid(customerDC.InsuranceNumber);
bool valid_status = IsVersichertenstatusValid(customerDC.VersichertenStatus);
if (!valid_number && !valid_status)
return $"{Translation.Translator.Translate("Klient/in")} \"{customerDC.LastName}, {customerDC.FirstName}\" hat weder eine gültige Versichertennummer, noch einen gültigen Versichertenstatus";
if (!valid_number)
return $"{Translation.Translator.Translate("Klient/in")} \"{customerDC.LastName}, {customerDC.FirstName}\" hat keine gültige Versichertennummer";
if (!valid_status)
return $"{Translation.Translator.Translate("Klient/in")} \"{customerDC.LastName}, {customerDC.FirstName}\" hat keinen gültigen Versichertenstatus";
return null;
}
public static string ValidateCustomer(string insuranceNumber, string versichertenStatus, string customerName = null)
{
bool valid_number = IsVersichertennummerValid(insuranceNumber);
bool valid_status = IsVersichertenstatusValid(versichertenStatus);
if (!valid_number && !valid_status)
return $"Versichtertennummer & -status des {Translation.Translator.Translate("Klient/in")} ungültig.";
if (!valid_number)
return $"Versichertennummer des {Translation.Translator.Translate("Klient/in")} ungültig";
if (!valid_status)
return $"Versichertenstatus des {Translation.Translator.Translate("Klient/in")} ungültig";
return null;
}
public static string ValidateOrganisation(OrganisationDC orga)
{
if (orga == null)
return "Organisation ist null";
if (!IsLeistungserbringergruppeValid(orga.Leistungserbringergruppe))
return $"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.";
if (!IsIKNumberValid(orga.IKKrankenkasse))
return $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Krankenkasse Kennzeichen: \"{orga.IKKrankenkasse}\".";
if (!IsIKNumberValid(orga.IKKostentrager))
return $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Kostenträger Kennzeichen: \"{orga.IKKostentrager}\".";
if (!IsIKNumberValid(orga.IKDatenannahmestelle))
return $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Datenannahmestelle Kennzeichen: \"{orga.IKDatenannahmestelle}\".";
if (string.IsNullOrWhiteSpace(orga.BezDatenannahmestelle))
return $"Die Organisation \"{orga.Name}\" hat keine gültige Bezeichnung Datenannahmestelle: \"{orga.BezDatenannahmestelle}\".";
return null;
}
public static string ValidateInvoiceBases(IEnumerable<IInvoiceBase> invoices)
{
foreach (var invoice in invoices)
{
if (ValidateInvoiceBase(invoice) is string error)
return error;
}
if (!AreAllAddressSame(invoices))
return "Unterschiedliche Rechnungspositionen";
return null;
}
public static string ValidateInvoiceBase(IInvoiceBase invoice)
{
if (!IsInvoiceNumberGkvValid(invoice.InvoiceNumber))
return $"Rechnungsnummer \"{invoice.InvoiceNumber}\" ist ungültig für die GKV-Abrechnung";
if (invoice.IInvoiceItems is object && invoice.IInvoiceItems.Any())
{
foreach (var invoiceitem in invoice.IInvoiceItems)
{
if (!IsUnitDescriptionValid(invoiceitem))
return $"Ungültige Rechnungsposition: {invoiceitem.ItemDescription}:{invoiceitem.UnitDescription}";
}
}
return null;
}
public static bool IsOrganisationInformationValid(IOrganisation orga)
{
return IsOrganisationInformationValid(orga.IKDatenannahmestelle, orga.IKKostentrager, orga.IKKrankenkasse, orga.BezDatenannahmestelle);
}
public static bool IsOrganisationInformationValid(string ik_datenannahmestelle, string ik_kostentrager, string ik_krankenkasse, string bez_datenannahmestelle)
=> IsIKNumberValid(ik_datenannahmestelle, ik_kostentrager, ik_krankenkasse) && IsBezDatenannahmestelleValid(bez_datenannahmestelle);
}
}