SEPA SammelLastschrift => 'SEPA-Dokument ist nicht valide'

 
dominik42
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 25
Dabei seit: 03 / 2009
Betreff:

SEPA SammelLastschrift => 'SEPA-Dokument ist nicht valide'

 · 
Gepostet: 27.08.2015 - 11:21 Uhr  ·  #1
Hallo,

ich möchte mit HBCI4JAVA eine SEPA SammelLastschrift erzeugen und zur Bank schicken.
Die SammelLastschrift wurde im letzten Jahr erstmalig erzeugt und vor einem halben Jahr wiederholt ausgeführt, beide via JVerein & Hibiscus.
Da JVerein nicht mehr ausreicht, möchte ich nun eine eigene Software zum Einsatz bringen und das Thema Beitragseinzug dabei via HBCI4JAVA implementieren. Ich habe daher sowas hier gemacht (SammelLastschrift ist dabei mein eigenes Bean mit allen notwendigen Daten und ggf. HBCI4JAVA Datentypen wie z.B. 'Konto'))

Code

        HBCIJob job =  hbcihandler.newJob("MultiLastSEPA");
        
        job.setParam("src", sammelLastschrift.getEmpfaengerKonto());
        job.setParam("usage",sammelLastschrift.getVerwendungszweck());
        job.setParam("targetdate", sammelLastschrift.getAusfuehrungsDatum()); 
        job.setParam("creditorid", sammelLastschrift.getGlaeubigerId()); 
        job.setParam("sequencetype", sammelLastschrift.getSeuqnceType());

        int i = 0;
        for (BeitragseinzugEntry entry: sammelLastschrift.getQuellKonten()) {
            job.setParam("dst.bic", i, entry.getBic());
            job.setParam("dst.iban", i, entry.getIban());
            job.setParam("dst.name", i, entry.getKontoinhaber());
            job.setParam("btg", i,new Value(String.valueOf(entry.getAmount()),"EUR"));
            job.setParam("mandateid", i, entry.getMandatId()); 
            job.setParam("manddateofsig", i, entry.getDateOfMandatSignature());
            i++;
        }


Ich hoffe erstmal, das ist soweit richtig.

Generiert wird dann vom SEPAGenerator flg. pain xml:

Code

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02 pain.008.003.02.xsd">
    <CstmrDrctDbtInitn>
        <GrpHdr>
            <MsgId>2015-08-27T11:04:27:0213</MsgId>
            <CreDtTm>2015-08-27T11:04:27</CreDtTm>
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>0.01</CtrlSum>
            <InitgPty>
                <Nm>XXXXXXXXXXXXXX</Nm>
            </InitgPty>
        </GrpHdr>
        <PmtInf>
            <PmtInfId>2015-08-27T11:04:27:0213</PmtInfId>
            <PmtMtd>DD</PmtMtd>
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>0.01</CtrlSum>
            <PmtTpInf>
                <SvcLvl>
                    <Cd>SEPA</Cd>
                </SvcLvl>
                <LclInstrm>
                    <Cd>CORE</Cd>
                </LclInstrm>
                <SeqTp>RCUR</SeqTp>
            </PmtTpInf>
            <ReqdColltnDt>2015-09-03</ReqdColltnDt>
            <Cdtr>
                <Nm>XXXXXXXXXXXXXX</Nm>
            </Cdtr>
            <CdtrAcct>
                <Id>
                    <IBAN>XXXXXXXXXXXXXXXXXXXXXX</IBAN>
                </Id>
            </CdtrAcct>
            <CdtrAgt>
                <FinInstnId>
                    <BIC>GENODEF1RIE</BIC>
                </FinInstnId>
            </CdtrAgt>
            <ChrgBr>SLEV</ChrgBr>
            <DrctDbtTxInf>
                <PmtId>
                    <EndToEndId>NOTPROVIDED</EndToEndId>
                </PmtId>
                <InstdAmt Ccy="EUR">0.01</InstdAmt>
                <DrctDbtTx>
                    <MndtRltdInf>
                        <MndtId>XXXX</MndtId>
                        <DtOfSgntr>2011-06-29</DtOfSgntr>
                        <AmdmntInd>false</AmdmntInd>
                    </MndtRltdInf>
                    <CdtrSchmeId>
                        <Id>
                            <PrvtId>
                                <Othr>
                                    <SchmeNm>
                                        <Prtry>SEPA</Prtry>
                                    </SchmeNm>
                                </Othr>
                            </PrvtId>
                        </Id>
                    </CdtrSchmeId>
                </DrctDbtTx>
                <DbtrAgt>
                    <FinInstnId>
                        <BIC>GENODEF1EIL</BIC>
                    </FinInstnId>
                </DbtrAgt>
                <Dbtr>
                    <Nm>XXXXXXXXXXXX</Nm>
                </Dbtr>
                <DbtrAcct>
                    <Id>
                        <IBAN>XXXXXXXXXXXXXXXXXXXXXX</IBAN>
                    </Id>
                </DbtrAcct>
            </DrctDbtTxInf>
        </PmtInf>
    </CstmrDrctDbtInitn>
</Document>

Von der Bank kommt aber immer folgender Fehler:

Dialog for '407720183':
DIALOG-INITIALISIERUNG:
3060:Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
3920:Zugelassene TAN-Verfahren für den Benutzer p:962 p:972 (4: DialogInit.ProcPrep)
0901:*PIN gültig. (4: DialogInit.ProcPrep)
0020:*Dialoginitialisierung erfolgreich (4: DialogInit.ProcPrep)
DIALOG-NACHRICHT #1:
9050:Die Nachricht enthält Fehler.
9010:Das gesendete SEPA-Dokument ist nicht valide. (4: CustomMsg.GV_2.TAN2Step5)
DIALOG-NACHRICHT #2:
9050:Die Nachricht enthält Fehler.
9110:Ungültige Auftragsnachricht: Unbekannter Aufbau. (2:6: CustomMsg.SigHead.role=1)
DIALOG-ENDE:
0010:Nachricht entgegengenommen.
0100:Dialog beendet.

Ich hoffe, die Mandat-IDs habe ich richtig angegeben, da ich hier im Forum gelesen habe, dass 'Ungültige Auftragsnachricht: Unbekannter Aufbau' mgl. darauf hindeutet. Was könnte ich sonst noch ändern, um die SEPA Sammellastschrift erfolgreich ausführen zu lassen, bin über jeden Hinweis dankbar.

Vielen Dank im Voraus
Gruß:Dominik
dominik42
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 25
Dabei seit: 03 / 2009
Betreff:

Re: SEPA SammelLastschrift => 'SEPA-Dokument ist nicht valide'

 · 
Gepostet: 27.08.2015 - 13:52 Uhr  ·  #2
Als Test habe ich soeben eine 'normale' SEPA Lastschrift erfolgreich abschliessen können.

Code

        HBCIPassport passport = createHBCIPassport(empfaengerKonto);
        HBCIHandler hbcihandler = new HBCIHandler("300", passport);
        
        HBCIJob job =  hbcihandler.newJob("LastSEPA");
        
        job.setParam("src", empfaengerKonto);
        job.setParam("dst", konto);
        job.setParam("btg",new Value(String.valueOf("0.01"),"EUR"));
        job.setParam("usage", "Spende XYZ");
        job.setParam("targetdate", DateUtil.create(2015, 9, 7)); // >= 6 Banktage ab heute
        job.setParam("creditorid", "XXXXXXXXXXXXXXXXXX"); 
        job.setParam("mandateid", "XYZ");
        job.setParam("manddateofsig", DateUtil.create(2011, 5, 29));
        
        job.addToQueue();

        HBCIExecStatus ret = hbcihandler.execute();
        HBCIJobResult res = job.getJobResult();
     
        assertTrue(res.isOK());
dominik42
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 25
Dabei seit: 03 / 2009
Betreff:

Re: SEPA SammelLastschrift => 'SEPA-Dokument ist nicht valide'

 · 
Gepostet: 27.08.2015 - 14:33 Uhr  ·  #3
Und wieder einen Schritt weiter:

Wenn ich in den HBCIKernel-Props die sepa.schema.validation einschalte, erhalte ich einen Fehler für das generierte pain xml immer dann, wenn ich, aufgrund mehrerer Lastschriften in der SammelLastschrift, beim Einfügen der Parameter die Methode mit dem Index nutze:

Code

        job.setParam("dst", 0, konto);
        job.setParam("btg", 0, new Value(String.valueOf("0.01"),"EUR"));
        job.setParam("usage", 0, "Spende 4");
        job.setParam("mandateid", 0, "XYZ");
        job.setParam("manddateofsig", 0, new GregorianCalendar(2011, 5, 29).getTime());


Ohne sepa.schema.validation wird evtl. das falsche XML zur Bank geschickt, die es dann ablehnt ?


org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Hinzufügen des Auftrages SammelLastSEPA1 zum aktuellen Dialog
at org.kapott.hbci.manager.HBCIDialog.addTask(HBCIDialog.java:520)
at org.kapott.hbci.manager.HBCIHandler.addJobToDialog(HBCIHandler.java:424)
at org.kapott.hbci.GV.HBCIJobImpl.addToQueue(HBCIJobImpl.java:1134)
at org.kapott.hbci.GV.HBCIJobImpl.addToQueue(HBCIJobImpl.java:1139)
at de.todo42.verein.domain.beitrag.hbci.SEPASammellastschriftService.executeLastschrift(SEPASammellastschriftService.java:143)
at de.todo42.verein.domain.beitrag.hbci.SEPASammelLastschriftTest.testLastschriftService(SEPASammelLastschriftTest.java:100)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: *** the _sepapain segment for this job can not be created
at org.kapott.hbci.GV.AbstractSEPAGV.createSEPAFromParams(AbstractSEPAGV.java:369)
at org.kapott.hbci.GV.GVMultiLastSEPA.createSEPAFromParams(GVMultiLastSEPA.java:53)
at org.kapott.hbci.GV.AbstractSEPAGV.verifyConstraints(AbstractSEPAGV.java:413)
at org.kapott.hbci.manager.HBCIDialog.addTask(HBCIDialog.java:469)
... 29 more
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0; cvc-complex-type.2.4.a: Invalid content was found starting with element 'SchmeNm'. One of '{"urn:iso:std:iso:20022:tech:xsd:pain.008.003.02":Id}' is expected.]
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:311)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:236)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:95)
at org.kapott.hbci.GV.generators.AbstractSEPAGenerator.marshal(AbstractSEPAGenerator.java:93)
at org.kapott.hbci.GV.generators.GenLastSEPA00800302.generate(GenLastSEPA00800302.java:161)
at org.kapott.hbci.GV.AbstractSEPAGV.createSEPAFromParams(AbstractSEPAGV.java:361)
... 32 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0; cvc-complex-type.2.4.a: Invalid content was found starting with element 'SchmeNm'. One of '{"urn:iso:std:iso:20022:tech:xsd:pain.008.003.02":Id}' is expected.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
...
Raimund Sichmann
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 8262
Dabei seit: 08 / 2002
Betreff:

Re: SEPA SammelLastschrift => 'SEPA-Dokument ist nicht valide'

 · 
Gepostet: 27.08.2015 - 19:04 Uhr  ·  #4
Hallo Dom,
wenn ich mich recht entsinne, hast du eine Geno-Bankverbindung, oder?
Die genossenschaftlichen Institute haben einen Java-XML-Checker, der deine SEPA-Dateien validieren kann. Den Downloadlink kann dir dein EB-Berater sicherlich noch senden.
Gruß
Raimund
Heart
Benutzer
Avatar
Geschlecht:
Beiträge: 349
Dabei seit: 11 / 2003
Betreff:

Re: SEPA SammelLastschrift => 'SEPA-Dokument ist nicht valide'

 · 
Gepostet: 24.09.2015 - 15:17 Uhr  ·  #5
Validator wirft das aus (bei obiger xml)
Code
Zeile  Sp.  Meldung
14  9  Fehler Das Element "<CdtrSchmeId>" ist weder auf Auftrags- noch auf Zahlungsebene definiert. Empfohlen ist die Definition auf Auftragsebene.
54  21  Fehler Das Element "<CdtrSchmeId>" ist weder auf Auftrags- noch auf Zahlungsebene definiert. Empfohlen ist die Definition auf Auftragsebene.
58  37  Fehler Das Pflichtelement "Id" fehlt.

Deine Gläubiger-ID ist nirgends drin oder?
Gewählte Zitate für Mehrfachzitierung:   0