Bitte wähle nachfolgend aus, welche Beiträge auf dieser Themenseite auf dem Ausdruck ausgegeben werden sollen. Um dies zu tun markiere bitte die Checkbox auf der linken Seite der Posts, die im Ausdruck berücksichtigt werden sollen und klicke anschließend ganz unten auf der Seite auf den Button "Drucken".

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

dominik42

Betreff:

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

 ·  Gepostet: 27.08.2015 - 11:21 Uhr  ·  #118950
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

Betreff:

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

 ·  Gepostet: 27.08.2015 - 13:52 Uhr  ·  #118954
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

Betreff:

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

 ·  Gepostet: 27.08.2015 - 14:33 Uhr  ·  #118956
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

Betreff:

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

 ·  Gepostet: 27.08.2015 - 19:04 Uhr  ·  #118962
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

Betreff:

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

 ·  Gepostet: 24.09.2015 - 15:17 Uhr  ·  #119476
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?