manuelbl / SwissQRBill

Java library for Swiss QR bill payment slips (aka QR-Rechnung)
https://www.codecrete.net/qrbill
MIT License
155 stars 37 forks source link

StrdBkgInf darf nicht leer sein #48

Closed XHotSniperX closed 2 years ago

XHotSniperX commented 2 years ago

Ich bekomme folgenden Hinweis, wenn ich das generierte SVG auf https://validation.iso-payments.ch/gp/qrrechnung/validation validieren lasse. Wie ist das zu lösen?

GEFEG.FX Check
*******************
Check date          : 25.01.2022
Check time          : 12:40:54
File                : Screenshot 2022-01-25 124035.png
File date           : 25.01.2022
File time           : 12:40:54
File size           : 1.476 Bytes
Reference standard  : QR;;CH

(Line number) - Errors
******************************************************
The file contains no errors.

(Line number) - Remarks
******************************************************
(0048) - Das Element <StrdBkgInf> darf nicht leer sein, wenn dieses geliefert wird. Ausnahme: Wenn nachfolgende Elemente verwendet werden.

(0001) <?xml version="1.0" encoding="utf-8"?>
(0002) <QRCH encoding="UTF-8" eclevel="M" qrversion="12" orientation="normal">
(0003)   <Header>
(0004)     <QRType>SPC</QRType>
(0005)     <Version>0200</Version>
(0006)     <Coding>1</Coding>
(0007)   </Header>
(0008)   <CdtrInf>
(0009)     <IBAN>CH3930000004900075525</IBAN>
(0010)     <Cdtr>
(0011)       <AdrTp>S</AdrTp>
(0012)       <Name>Helvetia Schweizerische Versicherungsgesellschaft AG</Name>
(0013)       <StrtNmOrAdrLine1>Dufourstrasse</StrtNmOrAdrLine1>
(0014)       <BldgNbOrAdrLine2>40</BldgNbOrAdrLine2>
(0015)       <PstCd>9001</PstCd>
(0016)       <TwnNm>St. Gallen</TwnNm>
(0017)       <Ctry>CH</Ctry>
(0018)     </Cdtr>
(0019)   </CdtrInf>
(0020)   <UltmtCdtr>
(0021)     <AdrTp></AdrTp>
(0022)     <Name></Name>
(0023)     <StrtNmOrAdrLine1></StrtNmOrAdrLine1>
(0024)     <BldgNbOrAdrLine2></BldgNbOrAdrLine2>
(0025)     <PstCd></PstCd>
(0026)     <TwnNm></TwnNm>
(0027)     <Ctry></Ctry>
(0028)   </UltmtCdtr>
(0029)   <CcyAmt>
(0030)     <Amt>200.00</Amt>
(0031)     <Ccy>CHF</Ccy>
(0032)   </CcyAmt>
(0033)   <UltmtDbtr>
(0034)     <AdrTp>K</AdrTp>
(0035)     <Name>Max Mustermann</Name>
(0036)     <StrtNmOrAdrLine1>Musterstrasse 28</StrtNmOrAdrLine1>
(0037)     <BldgNbOrAdrLine2>9000 St. Gallen</BldgNbOrAdrLine2>
(0038)     <PstCd></PstCd>
(0039)     <TwnNm></TwnNm>
(0040)     <Ctry>CH</Ctry>
(0041)   </UltmtDbtr>
(0042)   <RmtInf>
(0043)     <Tp>QRR</Tp>
(0044)     <Ref>444020220000022000100000002</Ref>
(0045)     <AddInf>
(0046)       <Ustrd>Z1Z2</Ustrd>
(0047)       <Trailer>EPD</Trailer>
(0048)       <StrdBkgInf></StrdBkgInf>
(0049)     </AddInf>
(0050)   </RmtInf>
(0051)   <AltPmtInf>
(0052)     <AltPmt>UV;UltraPay005;12345</AltPmt>
(0053)     <AltPmt>XY;XYService;54321\</AltPmt>
(0054)   </AltPmtInf>
(0055) </QRCH>

Generated by GEFEG.FX ---  http://www.gefeg.com/
manuelbl commented 2 years ago

Die Fehlermeldung scheint keinen Sinn zu machen.

Das Element <StrdBkgInf> darf nicht leer sein, wenn dieses geliefert wird. Ausnahme: Wenn nachfolgende Elemente verwendet werden.

Denn genau das ist gegeben: StrdBkgInf ist leer und es gibt nachfolgende Elemente, nämlich die alternativen Verfahren (AltPmtInf / AltPmt).

Ich werde das im Detail anschauen.

manuelbl commented 2 years ago

Und es ist übrigens nur ein Remark, kein Fehler:

The file contains no errors.

XHotSniperX commented 2 years ago

Hallo @manuelbl, danke für die schnelle Rückmeldung. Falls es hilft, hier das JSON womit der Remark erzeugt wird.

{
    "version": "V2_0",
    "amount": 200.0,
    "currency": "CHF",
    "account": "CH3930000004900075525",
    "creditor": {
        "type": "STRUCTURED",
        "name": "Helvetia Schweizerische Versicherungsgesellschaft AG",
        "addressLine1": null,
        "addressLine2": null,
        "street": "Dufourstrasse",
        "houseNo": "40",
        "postalCode": "9001",
        "town": "St. Gallen",
        "countryCode": "CH"
    },
    "referenceType": "QRR",
    "reference": "44 40202 20000 02200 01000 00002",
    "debtor": {
        "type": "UNSTRUCTURED",
        "name": "Max Mustermann",
        "addressLine1": "Musterstrasse 1",
        "addressLine2": "9000 St. Gallen",
        "street": null,
        "houseNo": null,
        "postalCode": null,
        "town": null,
        "countryCode": "CH"
    },
    "unstructuredMessage": "Z1Z2",
    "alternativeSchemes": [
        {
            "name": "Ultraviolet",
            "instruction": "UV;UltraPay005;12345"
        },
        {
            "name": "Xing Yong",
            "instruction": "XY;XYService;54321\\"
        }
    ],
    "format": {
        "outputSize": "QR_CODE_ONLY",
        "language": "EN",
        "separatorType": "DASHED_LINE_WITH_SCISSORS",
        "fontFamily": "Helvetica,Arial,\"Liberation Sans",
        "graphicsFormat": "SVG",
        "resolution": 144
    }
}
XHotSniperX commented 2 years ago

Der Hinweis taucht nicht auf, wenn die alternativen Verfahren weggelassen werden oder:

"alternativeSchemes": [
    {
      "name": null,
      "instruction": null
    },
    {
      "name": null,
      "instruction": null
    }
  ],
manuelbl commented 2 years ago

Als Referenz der QR-Code dazu:

qr

manuelbl commented 2 years ago

Gemäss Billing Payments Support der SIX Group ist der QR-Code korrekt.

[...] Das Hinweis kommt sobald das ein Element leer ist. Also auch wenn sie das alternative Verfahren füllen, wird der Hinweis kommen sobald auch irgendein anderes Element leer ist. [...] Aber aus unsere Sicht ist das Dokument korrekt.