InvoiceNumber

This commit is contained in:
2025-11-10 11:21:11 +01:00
parent 789950987b
commit 3098bcfcfb
11 changed files with 54 additions and 18 deletions

View File

@@ -18,7 +18,7 @@ namespace BeWo.Converter
{
if(value is string val_str && parameter is ValidationType val_type)
{
return Validator.IsValid(val_type, val_str);
return GkvValidator.IsValid(val_type, val_str);
}
return null;

View File

@@ -22,7 +22,7 @@ namespace BeWo.Converter
if (value is bool val_bool && parameter is ValidationType val_type)
{
return val_bool ? null : Validator.InvalidTooltipTxt(val_type);
return val_bool ? null : GkvValidator.InvalidTooltipTxt(val_type);
}
return "xxx";

View File

@@ -713,8 +713,8 @@ namespace BeWo.ViewModel
}
public bool IsIKNumberValid
=> Validator.IsIKNumberValid(IKKrankenkasse)
&& Validator.IsLeistungserbringergruppeValid(Leistungserbringergruppe);
=> GkvValidator.IsIKNumberValid(IKKrankenkasse)
&& GkvValidator.IsLeistungserbringergruppeValid(Leistungserbringergruppe);
public string IKKrankenkasse
{

View File

@@ -67,7 +67,7 @@ namespace BeWo.Service.DCEntityMapper
// Hole OrganisationLight
var orga = DAOFactory.GenericDAO.LoadByID<OrganisationLight>(orga_oid);
if (!Validator.IsOrganisationInformationValid(orga))
if (!GkvValidator.IsOrganisationInformationValid(orga))
{
isReady = false;
tooltip = "Organisation ist nicht Gkv Ready";

View File

@@ -146,8 +146,12 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.CustomerOid = customer.Oid.Value;
pDataContract.CustomerFirstName = customer.Person.FirstName;
pDataContract.CustomerLastName = customer.Person.LastName;
var error = Validator.ValidateCustomer(customer.InsuranceNumber, customer.VersichertenStatus);
pDataContract.IsGkvValidError = error;
var error = GkvValidator.ValidateCustomer(customer.InsuranceNumber, customer.VersichertenStatus);
if (error is null)
error = GkvValidator.ValidateInvoiceBase(pDataContract);
pDataContract.IsGkvValidError = error;
pDataContract.IsGkvValid = error is null;
}

View File

@@ -852,7 +852,7 @@ namespace BeWo.Service.ServiceImplementations
IList<Organisation> list = DAOFactory.GenericDAO.GetAllActiveAndArchived<Organisation>();
list = list.Where(x => !x.GkvAusblenden &&
Validator.IsOrganisationInformationValid(x.IKDatenannahmestelle, x.IKKostentrager, x.IKKrankenkasse, x.BezDatenannahmestelle)).ToList();
GkvValidator.IsOrganisationInformationValid(x.IKDatenannahmestelle, x.IKKostentrager, x.IKKrankenkasse, x.BezDatenannahmestelle)).ToList();
return CreateCompactOrganisations(list);
}

View File

@@ -377,12 +377,12 @@ namespace BeWo.Service.ServiceImplementations
var manager = new DakotaManager();
var mandatordc = new OperationsServiceImp().GetMandator();
Validator.ValidateMandator(mandatordc);
GkvValidator.ValidateMandator(mandatordc);
var gkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkvAbrechnung);
var orgadc = gkvAbrechnungDC.Organisation;
Validator.ValidateOrganisation(orgadc);
GkvValidator.ValidateOrganisation(orgadc);
var datenannahmestelle = orgadc.IKDatenannahmestelle;
var (datenaustauschreferenz, transfernummer) = GetNextDatenaustauschreferenzTransfernummer(gkvAbrechnung, datenannahmestelle);
@@ -416,7 +416,7 @@ namespace BeWo.Service.ServiceImplementations
var servicedc = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(service);
var customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
Validator.ValidateCustomer(customerdc);
GkvValidator.ValidateCustomer(customerdc);
manager.Add(servicedc, orgadc, customerdc, addressInfo, dat_short, tra_short);
}

View File

@@ -6,11 +6,12 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace BS.Shared.Core
{
public static class Validator
public static class GkvValidator
{
public static bool? IsValid(ValidationType val_type, string val_str)
{
@@ -73,7 +74,7 @@ namespace BS.Shared.Core
if (mandatordc == null)
throw new GkvException("Mandator ist null");
if (!Validator.IsIKNumberValid(mandatordc.IKLeistungserbringer))
if (!IsIKNumberValid(mandatordc.IKLeistungserbringer))
throw new GkvException($"Die IK Nummer des Leistungserbringers \"{mandatordc.IKLeistungserbringer}\" ist ungültig.");
}
public static void ValidateCustomer(CustomerDC customerDC)
@@ -110,16 +111,35 @@ namespace BS.Shared.Core
if (error != null)
throw new GkvException(error);
}
public static bool IsOrganisationInformationValid(IOrganisation orga)
public static string ValidateInvoiceBases(IEnumerable<IInvoiceBase> invoices)
{
foreach (var invoice in invoices)
{
if (ValidateInvoiceBase(invoice) is string error)
return error;
}
return null;
}
public static string ValidateInvoiceBase(IInvoiceBase invoice)
{
if (!IsInvoiceNumberValid(invoice.InvoiceNumber))
return $"Rechnungsnummer \"{invoice.InvoiceNumber}\" ist ungültig";
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)
}
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);
public static bool IsIKNumberValid(params string[] iks)
=> iks?.All(IsIKNumberValid) ?? false;
public static bool IsBezDatenannahmestelleValid(string bez_datenannahmestelle)
public static bool IsBezDatenannahmestelleValid(string bez_datenannahmestelle)
{
return !string.IsNullOrWhiteSpace(bez_datenannahmestelle);
}
@@ -180,5 +200,11 @@ namespace BS.Shared.Core
return true;
}
public static bool IsInvoiceNumberValid(string invoiceNumber)
{
var pattern = @"^(?!.*[-/]{2})(?![-/])(?!.*[-/]$)[A-Za-z0-9]+(?:[/-][A-Za-z0-9]+)*$";
return Regex.IsMatch(invoiceNumber, pattern);
}
}
}

View File

@@ -7,6 +7,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace BS.Shared.Core
@@ -23,6 +24,8 @@ namespace BS.Shared.Core
error = "Unterschiedliche Rechnungspositionen";
else if (GetInvalidUnitDescription(invoiceBases) is IInvoiceItem invalid)
error = $"Ungültige Rechnungsposition: {invalid.ItemDescription}:{invalid.UnitDescription}";
else if (GetInvalidInvoiceNumber(invoiceBases) is IInvoiceBase invalid2)
error = $"Ungültige Rechnungsnummer: {invalid2.InvoiceNumber}";
if(error is string)
throw new GkvException(error, "Validierung");
@@ -71,5 +74,7 @@ namespace BS.Shared.Core
return null;
}
}
}

View File

@@ -9,6 +9,7 @@ namespace BS.Shared.Interface
public interface IInvoiceBase
{
long? Oid { get; }
string InvoiceNumber { get; }
string InvoiceTitle { get; }
string InvoiceId { get; }
string SenderStreet { get; }

View File

@@ -151,7 +151,7 @@
<Compile Include="Core\SecurityUtils.cs" />
<Compile Include="Core\TokenUtils.cs" />
<Compile Include="Core\Utilities\WebUtils.cs" />
<Compile Include="Core\Validator.cs" />
<Compile Include="Core\GkvValidator.cs" />
<Compile Include="Core\DebugUtils.cs" />
<Compile Include="Core\ImageUtils.cs" />
<Compile Include="Core\PersonFilterEnum.cs" />