"9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10696
Dabei seit: 03 / 2005
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 26.12.2024 - 09:02 Uhr  ·  #21
Vorab: Danke für deine Diagnose-Vorarbeit! Es ist wirklich ausgesprochen hilfreich, wenn jemand den Code selbst analysieren und bei der Fehlersuche auf diesem Level helfen kann.

Zitat geschrieben von Kleingeld
warum mehrere Pain-Versionen in den BPDs aufgeführt werden

Ich nehme an, damit man zwischen Bank und Banking-Software immer eine gemeinsame Schnittmenge findet und verschiedene Software-Stände mit unterschiedlichem PAIN-Support unterstützt.

Zitat geschrieben von Kleingeld
wie der Zusammenhang zwischen GV und Pain hergestellt wird

Da gibt es nach meinem Wissen keinen. Zumindest was die Version der Pain-Nachricht betrifft.

Zitat geschrieben von Kleingeld
wie der Mechanismus zur Auswahl der richtigen Version funktioniert

Hibiscus wählt aus der von der Bank gelieferte Liste der PAIN-Versionen die aktuellste, die zum Geschäftsvorfall passt.

pain.001.* sind Überweisungen und Daueraufträge
pain.002.* sind Kontoauszüge
pain.008.* sind Lastschriften

Die Zahl dahinter ist jeweils die Variante innerhalb der Auftragsart. Bei pain.001 wurde die irgendwann nach unten geändert, sodass neuere Versionen augenscheinlich für ältere Versionen gehalten werden können. pain.001.001.09 ist aktueller als pain.001.003.03. Unter https://vrkennung.de/sepa-formate-alte-pain-versionen/ und https://community.ifs.com/fina…-nov-38482 habe ich ein paar Versionlisten gefunden.

Zitat geschrieben von Kleingeld
Wie kann ich in Hibiscus/HBCI4J am besten für einen GV eine Pain-Version vorgeben

Selbst vorgeben kannst du das nicht. HBCI4Java wählt aus der Liste der von der Bank übertragenen Versionen die aktuellste.

Zitat geschrieben von Kleingeld
Warum verwendet die CB unterschiedliche Pain-Versionen innerhalb einer GV Gruppe (DauerSepaXxx)

Ich nehme an, um verschiedene Banking-Anwendungen mit unterschiedlichem Versionsstand zu unterstützen. Aber auch gut möglich, dass Banken verpflichtet sind, ein definiertes Mindest-Set an Versionen anzubieten.
Zitat geschrieben von Kleingeld
Was sind die Unterschiede der Pain Versionen

Oft nur Kleinigkeiten. Im Package "hbci.GV.generators" findest du die Java-Klassen der Generatoren. Dort könntest du ja die beiden Versionen vergleichen. Wobei das im konkreten Fall eigentlich keine Rolle spielen sollte, da Hibiscus hier ja keine PAIN-Nachricht sendet sondern von der Bank in der angegbenen Version haben will. In dem Zusammenhang ist echt merkwürdig, dass die Bank das Format als unterstützt meldet, dann aber einen Fehler meldet, wenn man die Daueraufträge dann auch tatsächlich in diesem Format haben will.

Zitat geschrieben von Kleingeld
Wie ist die Nummerierung der Pain Versionen definiert und was sagt das über den Verwendungszweck aus?

Siehe oben.
Kleingeld
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 10
Dabei seit: 12 / 2024
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 27.12.2024 - 20:01 Uhr  ·  #22
Danke für die detaillierte Antworten!

Zitat
Bei pain.001 wurde die irgendwann nach unten geändert, sodass neuere Versionen augenscheinlich für ältere Versionen gehalten werden können

Ein Test zeigt, dass der GV DauerSepaList auch mit der Version pain.001.001.03 funktioniert.

Es leuchtet mir ein, dass mehrere Pain-Versionen in den BPDs gelistet sind, damit man zwischen Bank und Banking-Software immer eine gemeinsame Schnittmenge findet. Aber die Konsequenz erscheint mir ambivalent. Auf der einen Seite kann eine Client-SW eingesetzt werden, die noch eine ältere Pain Version spricht, aber die Bank hat auch andererseits die Freiheit die GVs langsam von einer Version auf die andere umzustellen und zu verlangen, dass die Client-SW herausfinden muss, was die passende ist.

In deinem Link zum IFS Dokument findet sich auch eine schlüssige Begründung dafür, dass die CB die Version 09 anbietet, denn Instant Payment ist erst ab dieser Version verfügbar, ein Feature, dass die CB per HBCI anbietet. Für alle anderen GVs ist auch noch die Version 03 gültig bis Nov. 25. Da hat die CB noch fast ein Jahr Zeit, alle GVs auf 09 umzustellen.

Für mich als Außenstehender sieht es aus, als gäbe es eine Lücke in der Interpretation der Spezifikation. Falls dem so ist, was wären die Möglichkeiten, die zu schließen?

Die Client-SW könnte bei entsprechendem Fehler versuchen, die nächste, angebotene und unterstützte Pain-Version zu verwenden. Danach könnte die passende Version in einer Datenbank oder Konfigurationsdatei gespeichert werden.

Das wäre grundsätzlich die Aufgabe von Hbci4J. Aber die Library scheint zu funktionieren wie ein status-loser Automat, der kaum fallspezifische Ausnahmen handeln kann..

Was könnte Hibiscus hier? Kann es über den Mechanismus (oder temporären Workaround) den GV mit dem zusätzlichen Parameter aufrufen?

Code
Experimentel_Feature -> CB_DauerSepaList_Pain_Downgrade -> ... -> HbciJob.setParam("_sepadescriptor"...) -> GV DauerSepaList


Natürlich würde ich gerne selber mit Hand anlegen, aber nur, wenn das aus der Sicht der Hauptentwickler Sinn macht.
Ich bin ja hier nicht unvoreingenommen und vielleicht sehe ich eine einfache Lösung und die harte Realität ist ganz anders.
Kleingeld
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 10
Dabei seit: 12 / 2024
Betreff:

GV spezifischer PAIN Version in BPDs

 · 
Gepostet: 14.01.2025 - 14:18 Uhr  ·  #23
Update:
Zitat
>> wie der Zusammenhang zwischen GV und Pain hergestellt wird
> Da gibt es nach meinem Wissen keinen. Zumindest was die Version der Pain-Nachricht betrifft.

Es hat sich beim zweiten Hinsehen eine Besonderheit in den BPDs der Commerzbank gefunden. Die Parameter für den GV DauerSEPAList lauten:
Code
[code]
      Params_6.DauerSEPAListPar1.suppformats -> urn:iso:std:iso:20022:tech:xsd:pain.001.003.03
      Params_6.DauerSEPAListPar1.SegHead.version -> 1
      Params_6.DauerSEPAListPar1.SegHead.code -> HICDBS
      Params_6.DauerSEPAListPar1.maxentries_allowed -> N
      Params_6.DauerSEPAListPar1.secclass -> 1
      Params_6.DauerSEPAListPar1.SegHead.seq ->   b12
      Params_6.DauerSEPAListPar1.SegHead.ref -> 3
      Params_6.DauerSEPAListPar1.maxnum -> 20
      Params_6.DauerSEPAListPar1.minsigs -> 1
[/code]

Für den GV gibt die CB eine spezielle PAIN Version vor.
In der Methode zur Ermittlung der besten PAIN Version
Code
AbstractSEPAGV.determinePainVersionInternal(...)

kann ich für die Behandlung dieses Falles keine Funktionalität finden.
Vielleicht macht es Sinn, dies in hbci4j generell zu prüfen.
Da das dann ein Feature Request ist, wäre das ein Fall für den Issue Tracker des hbci4j Projekts.
magic
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 103
Dabei seit: 07 / 2009
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 14.01.2025 - 14:21 Uhr  ·  #24
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10696
Dabei seit: 03 / 2005
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 14.01.2025 - 14:26 Uhr  ·  #25
Zitat geschrieben von Kleingeld

Für den GV gibt die CB eine spezielle PAIN Version vor.
In der Methode zur Ermittlung der besten PAIN Version
Code
AbstractSEPAGV.determinePainVersionInternal(...)

kann ich für die Behandlung dieses Falles keine Funktionalität finden.

Die Funktion "determinePainVersionInternal" macht genau das. Sie prüft, ob eine GV-spezifische PAIN-Version in den BPD angegeben ist. Das steht auch explizit so in dem Kommentaren im Code.
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10696
Dabei seit: 03 / 2005
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 14.01.2025 - 14:27 Uhr  ·  #26
Kleingeld
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 10
Dabei seit: 12 / 2024
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 15.01.2025 - 14:38 Uhr  ·  #27
Zitat
Die Funktion "determinePainVersionInternal" macht genau das. Sie prüft, ob eine GV-spezifische PAIN-Version in den BPD angegeben ist. Das steht auch explizit so in dem Kommentaren im Code.

Ja stimmt und den Kommentar habe ich gesehen, aber die Funktion iteriert über Properties, die sich lowLevelRestrictions (LLR) nennen. Jedoch sind die beim GV DauerSepaList leer, wie der Debugger zeigt. Die Bank-Info, dass für den GV eine spezielle PAIN Version erwartet wird
Code
Params_6.DauerSEPAListPar1.suppformats -> urn:iso:std:iso:20022:tech:xsd:pain.001.003.03

wird irgendwie nicht aufgegriffen.
Da ich in den Code nur reingeschnuppert habe, ist mir bisher nicht genau klar, wie die LLRs gebildet werden.
Vergleicht man aber die BPDs und die LLRs für andere GVs, wie DauerSepaEdit, scheint es, als seien die LLRs nur eine Untermenge der BPDs für den GV:
Code
 BPDs for Job DauerSEPAEdit:
=========================
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.maxpretime -> 9999
      Params_8.DauerSEPAEditPar1.minsigs -> 1
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.usageeditable -> J
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.minpretime -> 1
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.turnuseditable -> N
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.numtermchanges -> 0
      Params_8.DauerSEPAEditPar1.secclass -> 1
      Params_8.DauerSEPAEditPar1.SegHead.code -> HICDNS
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.turnusmonths -> 0102030612
      Params_8.DauerSEPAEditPar1.maxnum -> 20
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.firstexeceditable -> N
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.valueeditable -> J
      Params_8.DauerSEPAEditPar1.SegHead.version -> 1
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.lastexeceditable -> J
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.recnameeditable -> J
      Params_8.DauerSEPAEditPar1.SegHead.seq -> 14
      Params_8.DauerSEPAEditPar1.SegHead.ref -> 3
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.recktoeditable -> J
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.timeuniteditable -> N
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.execdayeditable -> N
      Params_8.DauerSEPAEditPar1.ParDauerSEPAEdit.dayspermonth -> 01020304050607080910111213141516171819202122232425262728293099

Low level restrictions for gv: DauerSEPAEdit:
=========================
      numtermchanges -> 0
      lastexeceditable -> J
      minpretime -> 1
      usageeditable -> J
      timeuniteditable -> N
      maxpretime -> 9999
      turnusmonths -> 0102030612
      turnuseditable -> N
      dayspermonth -> 01020304050607080910111213141516171819202122232425262728293099
      recktoeditable -> J
      firstexeceditable -> N
      valueeditable -> J
      recnameeditable -> J
      execdayeditable -> N

Auf den ersten Blick sieht es so aus, als würden nur die BPDs, die im Key den Substring
Code
.ParDauerSEPA

haben, in die LLRs übernommen.
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10696
Dabei seit: 03 / 2005
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 15.01.2025 - 14:42 Uhr  ·  #28
Zitat geschrieben von Kleingeld

Jedoch sind die beim GV DauerSepaList leer

Das ist der Abruf der existierenden Daueraufträge. Dort ist die Angabe der gewünschten PAIN-Formate auch gar nicht nötig.

Nachtrag: Gerade nochmal in der Spezifikation nachgeschaut. In "HKCDB" wird in der Tat durch die Banking-Software die PAIN-Version mitgeschickt. Wenn die Bank in den BPD keine geschäftsvorfallspezifische Version angegeben hat, dann wird die höchste in HISPAS zurückgemeldete Version verwendet. Ich habe gerade mal in den Daten meiner Bankzugänge geschaut. Mir ist liefert gar keine Bank Dauerauftragsspezifische PAIN-Versionen sondern nur für andere Auftragsarten sowie die global gültigen.

Zitat geschrieben von Kleingeld

Auf den ersten Blick sieht es so aus, als würden nur die BPDs, die im Key den Substring
Code
.ParDauerSEPA

haben, in die LLRs übernommen.

Wenn da ein genereller Fehler bei der Auswahl der passenden PAIN-Version in HBCI4Java wäre, dann müssten doch auch andere Banken von dem Problem betroffen sein, oder?
magic
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 103
Dabei seit: 07 / 2009
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 15.01.2025 - 15:01 Uhr  ·  #29
Wenn ich Kleingeld richtig verstanden habe, dann bietet die Commerzbank zwar die aktuellsten PAIN Versionen an, aber für den speziellen Dauerauftrag GV möchte sie eine ältere PAIN Version. Das könnte bei der Commerzbank außergewöhnlich sein, weshalb der Fehler noch nicht aufgefallen ist. Wenn andere Banken die höchste PAIN Version anbieten UND verwenden.

Grüß
Maik
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10696
Dabei seit: 03 / 2005
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 15.01.2025 - 15:13 Uhr  ·  #30
Zitat geschrieben von magic

Wenn ich Kleingeld richtig verstanden habe, dann bietet die Commerzbank zwar die aktuellsten PAIN Versionen an, aber für den speziellen Dauerauftrag GV möchte sie eine ältere PAIN Version.

Das ist nichts Commerzbank-spezifisches. Es gibt eine Liste von bekannten PAIN-Versionen und die Bank teilt in den BPD des GV mit, welche PAIN-Version sie haben möchte. Wenn dort etwas angegeben ist, wird das auch von HBCI4Java so berücksichtigt. Wenn dem nicht so wäre, hätte es schon an 100 anderen Stellen Fehler gegeben. Auch weil der Code dafür nichtmal spezifisch für die Daueraufträge ist. Genau der gleiche Code kommt auch bei den Überweisungen und Lastschriften zur Anwendung und funktioniert seit Jahren.
Kleingeld
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 10
Dabei seit: 12 / 2024
Betreff:

Re: "9010:Verarbeitung fehlgeschlagen. (3: CustomMsg.GV.DauerSEPAList1)" beim Abrufen der SEPA-Daueraufträge

 · 
Gepostet: 18.01.2025 - 18:48 Uhr  ·  #31
Zitat
Wenn ich Kleingeld richtig verstanden habe, dann bietet die Commerzbank zwar die aktuellsten PAIN Versionen an, aber für den speziellen Dauerauftrag GV möchte sie eine ältere PAIN Version.

Stimmt genau.
Zitat

Das ist nichts Commerzbank-spezifisches.

Ja und Nein (s.u.)
Zitat

Es gibt eine Liste von bekannten PAIN-Versionen und die Bank teilt in den BPD des GV mit, welche PAIN-Version sie haben möchte. Wenn dort etwas angegeben ist, wird das auch von HBCI4Java so berücksichtigt.

Das habe ich mittlerweile verstanden. Sorry, wenn das in früheren Stellen meiner Kommentare anders klang.
Zitat

Wenn dem nicht so wäre, hätte es schon an 100 anderen Stellen Fehler gegeben. Auch weil der Code dafür nichtmal spezifisch für die Daueraufträge ist. Genau der gleiche Code kommt auch bei den Überweisungen und Lastschriften zur Anwendung und funktioniert seit Jahren.

Nachdem ich bei Bekannten ein paar BPDs anderer Banken einsehen konnte, scheint es möglich, dass nur die Coba bei nur dem GV einen anderen Weg geht.
Speziell ist der verwendete Key für die GV spezifische PAIN Version. Normalerweise wird der gebildet nach dem Pattern
Code
.*<gvName>Par<version>.Par<gvName>.suppformats.*

Die Coba verwendet aber den Key
Code
Params_6.DauerSEPAListPar1.suppformats

statt
Code
Params_6.DauerSEPAListPar1.ParDauerSEPAList.suppformats
.
Wenn das wirklich nur die Coba an dieser einen Stelle so macht, lohnt es sich wirklich nicht, zentralen Code anzufassen. Vielleicht wäre ein experimentales Feature, das den CoBa Kunden in der Übergangszeit hilft, noch einen Gedanken wert.
Trotzdem würde es mich interessieren, ob die Coba gegen die Spec verstösst oder ob das normale Muster der Keys nur gelebte Praxis ist.
Gewählte Zitate für Mehrfachzitierung:   0