Decoupled TAN und TAN-Verfahren allgemein¶
Frühere, echte HBCI-Versionen¶
Zu Beginn war HBCI recht simpel: Man codiert die Aufträge in sogenannte Segmente und packt diese in eine Nachricht. Jede Nachricht hat eine Nummer und jedes Segment hat eine Nummer.
Bekommt man nun eine Antwort-Nachricht von der Bank, hat diese Nachricht eine Nachrichten-Referenznummer. Diese zeigt an, auf welche Nachricht des Benutzers sich diese Antwort bezieht. Normalerweise war das die vorherige Benutzernachricht. In dieser Antwortnachricht sind dann wieder Segmente enthalten, die wieder eigene Nummern haben, zusaetzlich haben die aber auch eine Segment-Referenznummer und zeigen somit an, auf welches Segment der Benutzernachricht sie sich beziehen.
Eigentlich also einfach bis hierher: Eine Nachricht mit Segmenten hin, eine direkte Antwort zurueck mit Segmenten, die sich alle auf die vorherige Nachricht beziehen.
FinTS¶
Mit der TAN-Einführung (und der dann später folgenden weiteren Verballhornung der Specs durch die aufgestülpten Verfahren Decoupled TAN und VOP ) verstehe ich das ganze so: Zwischen diese beiden Nachrichten werden weitere Nachrichtenpaare eingefügt, nämlich eines mit dem TAN-Datenaustausch (wieder eigene Segmente), im schlimmsten Fall ( Decoupled , VOP ) sogar mehrere Paare.
In der letzten Nachricht der Bank sind dann Antworten auf die zuletzt gesendeten TAN-Segmente, aber auch auf die in der ersten Nachricht gesendeten Aufträge. Sie enthält nun also Segmente mit Bezug auf zwei verschiedene Nachrichten.
Aber: Im Segment wird ja nur eine Segment-Referenznummer in den Antwortsegmenten angegeben, keine Nachrichten-Referenznummer. Damit bekommt der Antwort-Parser Probleme, denn er weiß zwar jetzt, auf welche Segmentnummer sich ein Antwortsegment bezieht, aber nicht auf welche Nachricht (die Segmentnumerierung beginnt in jeder Nachricht wieder bei 1).
Das müßte dann wieder in die Ebene darüber eingebaut werden, denn erst die kann sich vorstellen, daß sich z.B. eine Umsatzantwort auf eine Umsatzanfrage beziehen wird. Es gibt aber auch allgemeine Segmente, wie z.B. Segment-Ergebnisse (also ein Result-Code), und da ist das dann schon nicht mehr so eindeutig, worauf sich das Segment dann wirklich bezieht.
Aktueller Fix¶
Dieser ist momentan, daß jetzt alle Antwort-Segmente, die nicht einem Result-Code entsprechen, dem initialen Arbeitsauftrag (also z.B. Abruf Kontoumsätze ) zugeschlagen werden. Das können wir uns inzwischen erlauben, weil ich ja für die VOP-Unterstützung den Kern neu schreiben durfte, und der jetzt eh nur noch einen Arbeitsauftrag pro Nachricht unterstützt (weil das seit TAN und VOP eh für die meisten Aufträge von den Bankservern vorgegeben wird). Dadurch bekommt nun der Auftrag Umsatzabruf die Kontobewegungen zugeschrieben, egal in der wievielten Zwischen-Nachricht diese Infos geliefert werden.
Ist noch nicht ganz sauber, denn ich weiß noch nicht genau, wie ich mit den Resultcodes umgehen soll. Da müßte man jetzt wieder die Resultcodes selbst untersuchen, ob die Codes sich auf ein TAN-Anforderungssegment beziehen können oder auf z.B. einen Umsatzabruf oder eine Überweisung... Gerade mit Überweisungen ist das schwierig, denn hier will man ja unbedingt eine konkrete und eindeutige Antwort von der Bank haben.
Falls jemand eine Idee hat, wie man bei diesen mehrstufigen Verfahren eindeutig die Antwortsegmente nachrichtenübergreifend zuordnen kann, wäre ich dankbar.