This commit is contained in:
Developer01
2026-09-22 16:42:51 +02:00
7 changed files with 276 additions and 12 deletions

View File

@@ -74,5 +74,7 @@
Public Property AllowZugferd23x As Boolean = True Public Property AllowZugferd23x As Boolean = True
Public Property AllowPeppolBISBill3x As Boolean = False Public Property AllowPeppolBISBill3x As Boolean = False
Public Property AllowEBInterface As Boolean = False
End Class End Class
End Class End Class

View File

@@ -54,6 +54,7 @@ Public Class ThreadRunner
.AllowZugferd2x = _config.Config.Custom.AllowZugferd2x, .AllowZugferd2x = _config.Config.Custom.AllowZugferd2x,
.AllowZugferd23x = _config.Config.Custom.AllowZugferd23x, .AllowZugferd23x = _config.Config.Custom.AllowZugferd23x,
.AllowPeppolBISBill3x = _config.Config.Custom.AllowPeppolBISBill3x, .AllowPeppolBISBill3x = _config.Config.Custom.AllowPeppolBISBill3x,
.AllowEBInterface = _config.Config.Custom.AllowEBInterface,
.RejectionTemplateId = _config.Config.Custom.RejectionTemplateId, .RejectionTemplateId = _config.Config.Custom.RejectionTemplateId,
.GDPictureVersion = _config.Config.Custom.GDPictureVersion .GDPictureVersion = _config.Config.Custom.GDPictureVersion
} }

View File

@@ -29,6 +29,8 @@
public bool AllowPeppolBISBill3x { get; set; } = false; public bool AllowPeppolBISBill3x { get; set; } = false;
public bool AllowEBInterface { get; set; } = false;
} }
} }

View File

@@ -0,0 +1,152 @@
namespace ZUGFeRDRESTService.Controllers
{
public class ParserResult
{
private string _MessageId;
private string _WebFilename;
private string _WebMailAdress;
private string _WebLanguage;
private string _ResultString;
private string _XML_InvoiceNumber;
private string _XML_SellerTradePartyName;
private string _XML_SellerEmailAdress;
private string _XML_Specification;
private string _XML_Schema;
private string _XML_FileType;
public string MessageId
{
get
{
return string.IsNullOrEmpty(_MessageId) ? "NO VALUE" : _MessageId;
}
set
{
_MessageId = value;
}
}
public string WebFilename
{
get
{
return string.IsNullOrEmpty(_WebFilename) ? "NO VALUE" : _WebFilename;
}
set
{
_WebFilename = value;
}
}
public string WebMailAdress
{
get
{
return string.IsNullOrEmpty(_WebMailAdress) ? "NO VALUE" : _WebMailAdress;
}
set
{
_WebMailAdress = value;
}
}
public string WebLanguage
{
get
{
return string.IsNullOrEmpty(_WebLanguage) ? "NO VALUE" : _WebLanguage;
}
set
{
_WebLanguage = value;
}
}
public string ResultString
{
get
{
return string.IsNullOrEmpty(_ResultString) ? "NO VALUE" : _ResultString;
}
set
{
_ResultString = value;
}
}
public string XML_InvoiceNumber
{
get
{
return string.IsNullOrEmpty(_XML_InvoiceNumber) ? "NO VALUE" : _XML_InvoiceNumber;
}
set
{
_XML_InvoiceNumber = value;
}
}
public string XML_SellerTradePartyName
{
get
{
return string.IsNullOrEmpty(_XML_SellerTradePartyName) ? "NO VALUE" : _XML_SellerTradePartyName;
}
set
{
_XML_SellerTradePartyName = value;
}
}
public string XML_SellerEmailAdress
{
get
{
return string.IsNullOrEmpty(_XML_SellerEmailAdress) ? "NO VALUE" : _XML_SellerEmailAdress;
}
set
{
_XML_SellerEmailAdress = value;
}
}
public string XML_Specification
{
get
{
return string.IsNullOrEmpty(_XML_Specification) ? "NO VALUE" : _XML_Specification;
}
set
{
_XML_Specification = value;
}
}
public string XML_Schema
{
get
{
return string.IsNullOrEmpty(_XML_Schema) ? "NO VALUE" : _XML_Schema;
}
set
{
_XML_Schema = value;
}
}
public string XML_FileType
{
get
{
return string.IsNullOrEmpty(_XML_FileType) ? "NO VALUE" : _XML_FileType;
}
set
{
_XML_FileType = value;
}
}
}
}

View File

@@ -1,16 +1,14 @@
using DigitalData.Modules.Interfaces; using DigitalData.Modules.Interfaces;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.VisualStudio.Web.CodeGeneration.Contracts.Messaging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Mail;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Xml.Linq; using System.Xml.Linq;
using static DigitalData.Modules.Interfaces.Exceptions; using static DigitalData.Modules.Interfaces.Exceptions;
@@ -30,6 +28,19 @@ namespace ZUGFeRDRESTService.Controllers
public const string MESSAGEID_DOMAIN = "test.wisag.de"; public const string MESSAGEID_DOMAIN = "test.wisag.de";
public const string VALIDATION_SUCCESS = "VALIDATION SUCCESS"; public const string VALIDATION_SUCCESS = "VALIDATION SUCCESS";
public const string ZUGFERD_Rejection_20001 = "ZUGFERD_Rejection_20001";
public const string ZUGFERD_Rejection_20002 = "ZUGFERD_Rejection_20002";
public const string ZUGFERD_Rejection_20003 = "ZUGFERD_Rejection_20003";
public const string ZUGFERD_Rejection_20004 = "ZUGFERD_Rejection_20004";
public const string ZUGFERD_Rejection_20005 = "ZUGFERD_Rejection_20005";
public const string ZUGFERD_Rejection_20006 = "ZUGFERD_Rejection_20006";
public const string ZUGFERD_Rejection_20007 = "ZUGFERD_Rejection_20007";
public const string ZUGFERD_Rejection_20008 = "ZUGFERD_Rejection_20008";
public const string ZUGFERD_Rejection_20009 = "ZUGFERD_Rejection_20009";
public const string ZUGFERD_Rejection_20010 = "ZUGFERD_Rejection_20010";
public const string ZUGFERD_Rejection_20011 = "ZUGFERD_Rejection_20011";
public const string REFERENCES_Rejection_30001 = "REFERENCES_Rejection_30001"; public const string REFERENCES_Rejection_30001 = "REFERENCES_Rejection_30001";
public const string REFERENCES_Rejection_30002 = "REFERENCES_Rejection_30002"; public const string REFERENCES_Rejection_30002 = "REFERENCES_Rejection_30002";
public const string REFERENCES_Rejection_30002_1 = "REFERENCES_Rejection_30002_1"; public const string REFERENCES_Rejection_30002_1 = "REFERENCES_Rejection_30002_1";
@@ -80,9 +91,12 @@ namespace ZUGFeRDRESTService.Controllers
private bool _AllowZugferd23x; private bool _AllowZugferd23x;
private bool _AllowZugferd10; private bool _AllowZugferd10;
private bool _AllowPeppolBISBill3x; private bool _AllowPeppolBISBill3x;
private bool _AllowEBInterface;
private string _GDPictureVersion; private string _GDPictureVersion;
private ParserResult _ParserResult;
public ValidationController(ILogging logging, IDatabase database, IConfiguration Config) public ValidationController(ILogging logging, IDatabase database, IConfiguration Config)
{ {
_logConfig = logging.LogConfig; _logConfig = logging.LogConfig;
@@ -104,7 +118,8 @@ namespace ZUGFeRDRESTService.Controllers
AllowZugferd_1_0_Schema = _AllowZugferd10, AllowZugferd_1_0_Schema = _AllowZugferd10,
AllowZugferd_2_x_Schema = _AllowZugferd2x, AllowZugferd_2_x_Schema = _AllowZugferd2x,
AllowZugferd_2_3_x_Schema = _AllowZugferd23x, AllowZugferd_2_3_x_Schema = _AllowZugferd23x,
AllowPeppol_3_x_Schema = _AllowPeppolBISBill3x AllowPeppol_3_x_Schema = _AllowPeppolBISBill3x,
AllowEBInterface_Schema = _AllowEBInterface,
}); });
_props = new PropertyValues(_logConfig); _props = new PropertyValues(_logConfig);
@@ -144,6 +159,9 @@ namespace ZUGFeRDRESTService.Controllers
SPAIN, SPAIN,
}; };
_ParserResult = new ParserResult();
_ParserResult.MessageId = GetMessageId();
_logger.Debug("Validation Controller initialized!"); _logger.Debug("Validation Controller initialized!");
} }
@@ -188,6 +206,12 @@ namespace ZUGFeRDRESTService.Controllers
_AllowPeppolBISBill3x = false; _AllowPeppolBISBill3x = false;
} }
if (!bool.TryParse(oZugferdConfig["AllowEBInterface"], out _AllowEBInterface))
{
_logger.Info("Configuration AllowEBInterface was not set. Using default value [{0}]", false);
_AllowEBInterface = false;
}
_GDPictureVersion = oAppConfig["GDPictureVersion"]; _GDPictureVersion = oAppConfig["GDPictureVersion"];
if (string.IsNullOrEmpty(_GDPictureVersion)) if (string.IsNullOrEmpty(_GDPictureVersion))
{ {
@@ -259,6 +283,10 @@ namespace ZUGFeRDRESTService.Controllers
_UserLanguageCode = GERMAN; _UserLanguageCode = GERMAN;
} }
_ParserResult.WebFilename = file.FileName;
_ParserResult.WebMailAdress = oUserId;
_ParserResult.WebLanguage = _UserLanguageCode;
try try
{ {
using Stream oStream = file.OpenReadStream(); using Stream oStream = file.OpenReadStream();
@@ -289,10 +317,15 @@ namespace ZUGFeRDRESTService.Controllers
XElementObject = XElement.Load(oStream) XElementObject = XElement.Load(oStream)
}; };
oResult = _zugferd.ValidateZUGFeRDDocument(oResult);
oZugferdResult = _zugferd.SerializeZUGFeRDDocument(oResult); oZugferdResult = _zugferd.SerializeZUGFeRDDocument(oResult);
oZugferdResult.ReceiptFileType = "XML"; oZugferdResult.ReceiptFileType = "XML";
} }
_ParserResult.XML_Specification = oZugferdResult.Specification;
_ParserResult.XML_Schema = oZugferdResult.UsedXMLSchema;
_ParserResult.XML_FileType = oZugferdResult.ReceiptFileType;
_logger.Info("Detected Specification was: [{0}]", oZugferdResult.Specification); _logger.Info("Detected Specification was: [{0}]", oZugferdResult.Specification);
var oFilteredPropertyMap = _zugferd.FilterPropertyMap(_propertyMapList, oZugferdResult.Specification); var oFilteredPropertyMap = _zugferd.FilterPropertyMap(_propertyMapList, oZugferdResult.Specification);
@@ -327,7 +360,7 @@ namespace ZUGFeRDRESTService.Controllers
throw new ZUGFeRDExecption(ErrorCodes.MissingValueException, "Missing Properties"); throw new ZUGFeRDExecption(ErrorCodes.MissingValueException, "Missing Properties");
} }
Tuple<bool, string> oValidateResult = ValidateBuyerOrderReference(oPropertyResult.ValidProperties, oZugferdResult); Tuple<bool, string> oValidateResult = ValidateBuyerOrderReference(oPropertyResult.ValidProperties, _ParserResult, oZugferdResult);
if (oValidateResult.Item1 == false) if (oValidateResult.Item1 == false)
{ {
@@ -338,9 +371,13 @@ namespace ZUGFeRDRESTService.Controllers
if (oValidateResultString.Equals(VALIDATION_SUCCESS)) if (oValidateResultString.Equals(VALIDATION_SUCCESS))
{ {
_ParserResult.ResultString = "SUCCESS";
InsertWebParserResult(_ParserResult);
string oMessage = "Die hochgeladene Datei ist eine gültige-ZUGFeRD Rechnung"; string oMessage = "Die hochgeladene Datei ist eine gültige-ZUGFeRD Rechnung";
_logger.Info($"Responding with message: [{oMessage}]"); _logger.Info($"Responding with message: [{oMessage}]");
return new ValidationResponse() return new ValidationResponse()
{ {
status = RESPONSE_OK, status = RESPONSE_OK,
@@ -349,6 +386,7 @@ namespace ZUGFeRDRESTService.Controllers
} }
else else
{ {
InsertWebParserResult(_ParserResult);
string oMessage = oValidateResultString; string oMessage = oValidateResultString;
_logger.Info($"Responding with message: [{oMessage}]"); _logger.Info($"Responding with message: [{oMessage}]");
@@ -405,6 +443,8 @@ namespace ZUGFeRDRESTService.Controllers
oMessage = "Alte Logik. Meldung nicht gefunden"; oMessage = "Alte Logik. Meldung nicht gefunden";
} }
InsertWebParserResult(_ParserResult);
_logger.Info($"Responding with message: [{oMessage}]"); _logger.Info($"Responding with message: [{oMessage}]");
return new ValidationResponse() return new ValidationResponse()
@@ -466,7 +506,9 @@ namespace ZUGFeRDRESTService.Controllers
oMessage += " " + htmlResultString; oMessage += " " + htmlResultString;
} }
InsertWebParserResult(_ParserResult);
return new ValidationResponse() return new ValidationResponse()
{ {
status = RESPONSE_ERROR, status = RESPONSE_ERROR,
@@ -479,6 +521,9 @@ namespace ZUGFeRDRESTService.Controllers
string oMessage = "Die hochgeladene Datei kann nicht validiert werden, weil ein unbekannter Fehler aufgetreten ist."; string oMessage = "Die hochgeladene Datei kann nicht validiert werden, weil ein unbekannter Fehler aufgetreten ist.";
_ParserResult.ResultString = ZUGFERD_Rejection_20010;
InsertWebParserResult(_ParserResult);
_logger.Info($"Responding with message: [{oMessage}]"); _logger.Info($"Responding with message: [{oMessage}]");
return new ValidationResponse() return new ValidationResponse()
@@ -489,6 +534,48 @@ namespace ZUGFeRDRESTService.Controllers
} }
} }
private void InsertWebParserResult(ParserResult oParserResult)
{
try
{
var insertResultSQL = "INSERT INTO TBEDMI_PARSER_RESULTS (" +
" REFERENCE_GUID, WEB_FILENAME, WEB_MAIL_ADRESS, WEB_LANGUAGE, PARSER_RESULT, XML_INVOICE_NUMBER, XML_SELLER_TRADE_PARTY_NAME, XML_SELLER_MAIL_ADRESS, " +
" XML_SPECIFICATION, XML_SCHEMA, XML_FILE_TYPE, ADDED_WHO " +
") VALUES (" +
" @REFERENCE_GUID, @WEB_FILENAME, @WEB_MAIL_ADRESS, @WEB_LANGUAGE, @PARSER_RESULT, @XML_INVOICE_NUMBER, @XML_SELLER_TRADE_PARTY_NAME, @XML_SELLER_MAIL_ADRESS, " +
" @XML_SPECIFICATION, @XML_SCHEMA, @XML_FILE_TYPE, @ADDED_WHO " +
");";
var oCommand = new SqlCommand(insertResultSQL);
oCommand.Parameters.Add("@REFERENCE_GUID", SqlDbType.VarChar, 250).Value = oParserResult.MessageId;
oCommand.Parameters.Add("@WEB_FILENAME", SqlDbType.VarChar, 250).Value = oParserResult.WebFilename;
oCommand.Parameters.Add("@WEB_MAIL_ADRESS", SqlDbType.VarChar, 250).Value = oParserResult.WebMailAdress;
oCommand.Parameters.Add("@WEB_LANGUAGE", SqlDbType.VarChar, 5).Value = oParserResult.WebLanguage;
oCommand.Parameters.Add("@PARSER_RESULT", SqlDbType.VarChar, 50).Value = oParserResult.ResultString;
oCommand.Parameters.Add("@XML_INVOICE_NUMBER", SqlDbType.VarChar, 50).Value = oParserResult.XML_InvoiceNumber;
oCommand.Parameters.Add("@XML_SELLER_TRADE_PARTY_NAME", SqlDbType.VarChar, 250).Value = oParserResult.XML_SellerTradePartyName;
oCommand.Parameters.Add("@XML_SELLER_MAIL_ADRESS", SqlDbType.VarChar, 250).Value = oParserResult.XML_SellerEmailAdress;
oCommand.Parameters.Add("@XML_SPECIFICATION", SqlDbType.VarChar, 50).Value = oParserResult.XML_Specification;
oCommand.Parameters.Add("@XML_SCHEMA", SqlDbType.VarChar, 50).Value = oParserResult.XML_Schema;
oCommand.Parameters.Add("@XML_FILE_TYPE", SqlDbType.VarChar, 50).Value = oParserResult.XML_FileType;
oCommand.Parameters.Add("@ADDED_WHO", SqlDbType.VarChar, 50).Value = "DD Web Parser";
var retValue = _database.MSSQL.ExecuteNonQuery(oCommand);
if (!retValue)
{
_logger.Warn("INSERT to TBEDMI_PARSER_RESULTS NOT successfull");
}
_logger.Debug("INSERT to TBEDMI_PARSER_RESULTS successfull");
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
private string GetMissingValuesListString(List<MissingProperty> missingProperties) private string GetMissingValuesListString(List<MissingProperty> missingProperties)
{ {
if (missingProperties == null || missingProperties.Count == 0) if (missingProperties == null || missingProperties.Count == 0)
@@ -546,9 +633,9 @@ namespace ZUGFeRDRESTService.Controllers
/// Hier wird eine externe Prozedur gerufen, PRCUST_INV_CHECK_FROM_PORTAL, /// Hier wird eine externe Prozedur gerufen, PRCUST_INV_CHECK_FROM_PORTAL,
/// die das Ergebnis der Referenzpruefung liefert. /// die das Ergebnis der Referenzpruefung liefert.
/// </summary> /// </summary>
private Tuple<bool, string> ValidateBuyerOrderReference(List<ValidProperty> pProperties, ZugferdResult pZugferdResult) private Tuple<bool, string> ValidateBuyerOrderReference(List<ValidProperty> pProperties, ParserResult oParserResult, ZugferdResult pZugferdResult)
{ {
var oMessageId = GetMessageId(); var oMessageId = oParserResult.MessageId;
_logger.Debug("Created new MessageId: [{0}]", oMessageId); _logger.Debug("Created new MessageId: [{0}]", oMessageId);
_logger.Debug("Inserting properties into database."); _logger.Debug("Inserting properties into database.");
@@ -558,6 +645,10 @@ namespace ZUGFeRDRESTService.Controllers
return new Tuple<bool, string>(false, string.Empty); return new Tuple<bool, string>(false, string.Empty);
} }
oParserResult.XML_InvoiceNumber = pProperties.Where(p => p.EN16931_ID == "BT-1").FirstOrDefault().Value;
oParserResult.XML_SellerTradePartyName = pProperties.Where(p => p.EN16931_ID == "BT-27").FirstOrDefault().Value;
oParserResult.XML_SellerEmailAdress = pProperties.Where(p => p.EN16931_ID == "BT-34").FirstOrDefault().Value;
_logger.Debug("Calling validation prodecure."); _logger.Debug("Calling validation prodecure.");
try try
{ {
@@ -577,6 +668,7 @@ namespace ZUGFeRDRESTService.Controllers
if (oReturnValue.Equals("ALL REFERENCES CHECKED POSITIVE", StringComparison.OrdinalIgnoreCase)) if (oReturnValue.Equals("ALL REFERENCES CHECKED POSITIVE", StringComparison.OrdinalIgnoreCase))
{ {
_logger.Debug("Validation Success"); _logger.Debug("Validation Success");
oParserResult.ResultString = "SUCCESS";
oReturnValue = VALIDATION_SUCCESS; oReturnValue = VALIDATION_SUCCESS;
} }
else else
@@ -586,6 +678,7 @@ namespace ZUGFeRDRESTService.Controllers
{ {
if (oReturnValue.Contains(oRejectionItem, StringComparison.OrdinalIgnoreCase)) if (oReturnValue.Contains(oRejectionItem, StringComparison.OrdinalIgnoreCase))
{ {
oParserResult.ResultString = oRejectionItem;
_logger.Debug("oRejectionItem match: " + oRejectionItem); _logger.Debug("oRejectionItem match: " + oRejectionItem);
var oDbMessage = this.GetRejectionMessage(oRejectionItem); var oDbMessage = this.GetRejectionMessage(oRejectionItem);
@@ -1042,28 +1135,40 @@ namespace ZUGFeRDRESTService.Controllers
switch (rejectionCode) switch (rejectionCode)
{ {
case ErrorCodes.ValidationException: case ErrorCodes.ValidationException:
_ParserResult.ResultString = ZUGFERD_Rejection_20001;
return "20001"; return "20001";
case ErrorCodes.MD5HashException: case ErrorCodes.MD5HashException:
_ParserResult.ResultString = ZUGFERD_Rejection_20002;
return "20002"; return "20002";
case ErrorCodes.UnsupportedFerdException: case ErrorCodes.UnsupportedFerdException:
_ParserResult.ResultString = ZUGFERD_Rejection_20003;
return "20003"; return "20003";
case ErrorCodes.InvalidFerdException: case ErrorCodes.InvalidFerdException:
_ParserResult.ResultString = ZUGFERD_Rejection_20004;
return "20004"; return "20004";
case ErrorCodes.TooMuchFerdsException: case ErrorCodes.TooMuchFerdsException:
_ParserResult.ResultString = ZUGFERD_Rejection_20005;
return "20005"; return "20005";
case ErrorCodes.InvalidFerdNoXMLAttachmentFound: case ErrorCodes.InvalidFerdNoXMLAttachmentFound:
_ParserResult.ResultString = ZUGFERD_Rejection_20006;
return "20006"; return "20006";
case ErrorCodes.MissingValueException: case ErrorCodes.MissingValueException:
_ParserResult.ResultString = ZUGFERD_Rejection_20007;
return "20007"; return "20007";
case ErrorCodes.FileSizeLimitReachedException: case ErrorCodes.FileSizeLimitReachedException:
_ParserResult.ResultString = ZUGFERD_Rejection_20008;
return "20008"; return "20008";
case ErrorCodes.OutOfMemoryException: case ErrorCodes.OutOfMemoryException:
_ParserResult.ResultString = ZUGFERD_Rejection_20009;
return "20009"; return "20009";
case ErrorCodes.UnhandledException: case ErrorCodes.UnhandledException:
_ParserResult.ResultString = ZUGFERD_Rejection_20010;
return "20010"; return "20010";
case ErrorCodes.FileMoveException: case ErrorCodes.FileMoveException:
_ParserResult.ResultString = ZUGFERD_Rejection_20011;
return "20011"; return "20011";
default: default:
_ParserResult.ResultString = ZUGFERD_Rejection_20010;
return "20010"; return "20010";
} }
} }

View File

@@ -11,7 +11,7 @@
"LogPath": "E:\\ZUGFeRDRESTService", "LogPath": "E:\\ZUGFeRDRESTService",
"LogDebug": true, "LogDebug": true,
"Name": "ZUGFeRD REST API", "Name": "ZUGFeRD REST API",
"MSSQLConnectionString": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;", "MSSQLConnectionString": "Server=SDD-VHP04-SQL19\\DD_TESTING01;Database=DD_ECM;User Id=sa;Password=123456789dD!;",
"Firebird": { "Firebird": {
"Datasource": "172.24.12.41", "Datasource": "172.24.12.41",
"Database": "172.24.12.41:E:\\DB\\Firebird\\Databases\\EDMI_TEMPLATE\\EDMI_MASTER.FDB", "Database": "172.24.12.41:E:\\DB\\Firebird\\Databases\\EDMI_TEMPLATE\\EDMI_MASTER.FDB",
@@ -24,9 +24,10 @@
"AllowZugferd23x": true, "AllowZugferd23x": true,
"AllowFacturX": true, "AllowFacturX": true,
"AllowXRechnung": true, "AllowXRechnung": true,
"AllowPeppolBISBill3x": true "AllowPeppolBISBill3x": true,
"AllowEBInterface": true
}, },
"GDPictureVersion": "", "GDPictureVersion": "11.2024",
"MaxFileSizeInMegabytes": 25 "MaxFileSizeInMegabytes": 25
} }
} }

View File

@@ -24,7 +24,8 @@
"AllowZugferd23x": false, "AllowZugferd23x": false,
"AllowFacturX": false, "AllowFacturX": false,
"AllowXRechnung": false, "AllowXRechnung": false,
"AllowPeppolBISBill3x": false "AllowPeppolBISBill3x": false,
"AllowEBInterface": false
}, },
"GDPictureVersion": "", "GDPictureVersion": "",
"MaxFileSizeInMegabytes": 25 "MaxFileSizeInMegabytes": 25