Adjusted names according to English Translation of DFÜ-Abkommen Anlage_3_Datenformate_V3.8.pdf (Appendix_3-Data_Formats_V3-8.pdf)

This commit is contained in:
dankito 2024-09-05 18:14:48 +02:00
parent 9600e2f11b
commit f90e280b74
6 changed files with 145 additions and 24 deletions

26
docs/Vokabular.md Normal file
View File

@ -0,0 +1,26 @@
| | |
|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
| Geschäftsvorfall | Business Transaction / Job |
| Verwendungszweck | Remittance information, reference, (payment) purpose |
| Überweisung | Remittance (techn.), money transfer, bank transfer, wire transfer (Amerik.), credit transfer |
| Buchungsschlüssel | posting key |
| Buchungstext | posting text |
| | |
| Ende-zu-Ende Referenz | End to End Reference |
| Kundenreferenz | Reference of the submitting customer |
| Mandatsreferenz | mandate reference |
| Creditor Identifier | Creditor Identifier |
| Originators Identification Code | Originators Identification Code |
| Compensation Amount | Compensation Amount |
| Original Amount | Original Amount |
| Abweichender Überweisender (CT-AT08) / Abweichender Zahlungsempfänger (DD-AT38) | payers/debtors reference party (for credit transfer / payees / creditors reference party (for a direct debit) |
| Abweichender Zahlungsempfänger (CT-AT28) / Abweichender Zahlungspflichtiger (DDAT15) | payees/creditors reference party / payers/debtors reference party |
| | |
| Überweisender | Payer, debtor |
| Zahlungsempfänger | Payee, creditor |
| Zahlungseingang | Payment receipt |
| Lastschrift | direct debit |
| | |
| | |
| Primanoten-Nr. | Journal no. |
| | |

View File

@ -269,10 +269,10 @@ open class Mt940Parser(
*/ */
val transactionType = fieldValue.substring(amountEndIndex, amountEndIndex + 1) // transaction type is 'N', 'S' or 'F' val transactionType = fieldValue.substring(amountEndIndex, amountEndIndex + 1) // transaction type is 'N', 'S' or 'F'
val bookingKeyStart = amountEndIndex + 1 val postingKeyStart = amountEndIndex + 1
val bookingKey = fieldValue.substring(bookingKeyStart, bookingKeyStart + 3) // TODO: parse codes, p. 178 val postingKey = fieldValue.substring(postingKeyStart, postingKeyStart + 3) // TODO: parse codes, p. 178
val customerAndBankReference = fieldValue.substring(bookingKeyStart + 3).split("//") val customerAndBankReference = fieldValue.substring(postingKeyStart + 3).split("//")
val customerReference = customerAndBankReference[0] val customerReference = customerAndBankReference[0]
/** /**
@ -282,17 +282,17 @@ open class Mt940Parser(
* the case, Reference of the Account Servicing Institution, subfield 8 may be omitted. * the case, Reference of the Account Servicing Institution, subfield 8 may be omitted.
*/ */
var bankReference = if (customerAndBankReference.size > 1) customerAndBankReference[1] else customerReference // TODO: or use null? var bankReference = if (customerAndBankReference.size > 1) customerAndBankReference[1] else customerReference // TODO: or use null?
var supplementaryDetails: String? = null var furtherInformation: String? = null
val bankReferenceAndSupplementaryDetails = bankReference.split("\n") val bankReferenceAndSupplementaryDetails = bankReference.split("\n")
if (bankReferenceAndSupplementaryDetails.size > 1) { if (bankReferenceAndSupplementaryDetails.size > 1) {
bankReference = bankReferenceAndSupplementaryDetails[0].trim() bankReference = bankReferenceAndSupplementaryDetails[0].trim()
// TODO: parse /OCMT/ and /CHGS/, see page 518 // TODO: parse /OCMT/ and /CHGS/, see page 518
supplementaryDetails = bankReferenceAndSupplementaryDetails[1].trim() furtherInformation = bankReferenceAndSupplementaryDetails[1].trim()
} }
return StatementLine(!!!isDebit, isCancellation, valueDate, bookingDate, null, amount, bookingKey, return StatementLine(!!!isDebit, isCancellation, valueDate, bookingDate, null, amount, postingKey,
customerReference, bankReference, supplementaryDetails) customerReference, bankReference, furtherInformation)
} }
protected open fun parseNullableInformationToAccountOwner(informationToAccountOwnerString: String): InformationToAccountOwner? { protected open fun parseNullableInformationToAccountOwner(informationToAccountOwnerString: String): InformationToAccountOwner? {

View File

@ -11,7 +11,7 @@ open class AccountStatement(
* *
* Max length = 16 * Max length = 16
*/ */
val transactionReferenceNumber: String, val orderReferenceNumber: String,
/** /**
* Bezugsreferenz oder NONREF. * Bezugsreferenz oder NONREF.
@ -20,7 +20,7 @@ open class AccountStatement(
* *
* Max length = 16 * Max length = 16
*/ */
val relatedReferenceNumber: String?, val referenceNumber: String?,
/** /**
* xxxxxxxxxxx/Konto-Nr. oder yyyyyyyy/Konto-Nr. * xxxxxxxxxxx/Konto-Nr. oder yyyyyyyy/Konto-Nr.
@ -50,7 +50,7 @@ open class AccountStatement(
* *
* Max length = 5 * Max length = 5
*/ */
val sequenceNumber: Int?, val sheetNumber: Int?,
val openingBalance: Balance, val openingBalance: Balance,
@ -72,7 +72,7 @@ open class AccountStatement(
* *
* Max length = 65 * Max length = 65
*/ */
val multipurposeField: String? = null val remittanceInformationField: String? = null
) { ) {

View File

@ -20,7 +20,7 @@ open class Balance(
val isCredit: Boolean, val isCredit: Boolean,
/** /**
* JJMMTT = Buchungsdatum des Saldos oder '0' beim ersten Auszug * JJMMTT = Buchungsdatum des Saldos oder '000000' beim ersten Auszug
* *
* Max length = 6 * Max length = 6
*/ */

View File

@ -1,34 +1,92 @@
package net.codinux.banking.fints.transactions.mt940.model package net.codinux.banking.fints.transactions.mt940.model
open class InformationToAccountOwner( open class InformationToAccountOwner(
val unparsedReference: String, val unparsedReference: String,
/**
* AT 02 Name des Überweisenden
* AT 03 Name des Zahlungsempfängers (bei mehr als 54 Zeichen wird der Name gekürzt)
*/
val otherPartyName: String?, val otherPartyName: String?,
/**
* BLZ Überweisender / Zahlungsempfänger
* Bei SEPA-Zahlungen BIC des Überweisenden / Zahlungsempfängers.
*/
val otherPartyBankCode: String?, val otherPartyBankCode: String?,
/**
* AT 01 IBAN des Überweisenden (Zahlungseingang Überweisung)
* AT 04 IBAN des Zahlungsempfängers (Eingang Lastschrift)
*/
val otherPartyAccountId: String?, val otherPartyAccountId: String?,
val bookingText: String?, /**
val primaNotaNumber: String?, * Buchungstext, z. B. DAUERAUFTRAG, BARGELDAUSZAHLUNG, ONLINE-UEBERWEISUNG, FOLGELASTSCHRIFT, ...
val textKeySupplement: String? */
val postingText: String?,
/**
* Primanoten-Nr.
*/
val journalNumber: String?,
/**
* Bei R-Transaktionen siehe Tabelle der
* SEPA-Rückgabecodes, bei SEPALastschriften siehe optionale Belegung
* bei GVC 104 und GVC 105 (GVC = Geschäftsvorfallcode)
*/
val textKeyAddition: String?
) { ) {
/**
* (DDAT10; CT-AT41 - Angabe verpflichtend)
* (NOTPROVIDED wird nicht eingestellt.
* Im Falle von Schecks wird hinter EREF+ die Konstante SCHECK-NR. , gefolgt von der Schecknummer angegeben (erst
* nach Migration Scheckvordruck auf ISO 20022; November 2016, entspricht dem Inhalt der EndToEndId des
* entsprechenden Scheckumsatzes).
*/
var endToEndReference: String? = null var endToEndReference: String? = null
var customerReference: String? = null var customerReference: String? = null
/**
* (DD-AT01 - Angabe verpflichtend)
*/
var mandateReference: String? = null var mandateReference: String? = null
/**
* (DD-AT02 - Angabe verpflichtend bei SEPALastschriften, nicht jedoch bei SEPARücklastschriften)
*/
var creditorIdentifier: String? = null var creditorIdentifier: String? = null
/**
* (CT-AT10- Angabe verpflichtend,)
* Entweder CRED oder DEBT
*/
var originatorsIdentificationCode: String? = null var originatorsIdentificationCode: String? = null
/**
* Summe aus Auslagenersatz und Bearbeitungsprovision bei einer nationalen Rücklastschrift
* sowie optionalem Zinsausgleich.
*/
var compensationAmount: String? = null var compensationAmount: String? = null
/**
* Betrag der ursprünglichen Lastschrift
*/
var originalAmount: String? = null var originalAmount: String? = null
/**
* (DD-AT22; CT-AT05 -Angabe verpflichtend, nicht jedoch bei RTransaktionen52)
*/
var sepaReference: String? = null var sepaReference: String? = null
/**
* Abweichender Überweisender (CT-AT08) / Abweichender Zahlungsempfänger (DD-AT38)
* (optional)53
*/
var deviantOriginator: String? = null var deviantOriginator: String? = null
/**
* Abweichender Zahlungsempfänger (CT-AT28) /
* Abweichender Zahlungspflichtiger ((DDAT15)
* (optional)53
*/
var deviantRecipient: String? = null var deviantRecipient: String? = null
var referenceWithNoSpecialType: String? = null var referenceWithNoSpecialType: String? = null

View File

@ -42,26 +42,63 @@ open class StatementLine(
val currencyType: String?, val currencyType: String?,
/** /**
* Codes see p. 177 bottom - 179 * in Kontowährung
*
* After constant N
* *
* Max length = 15 * Max length = 15
*/ */
val amount: Amount, val amount: Amount,
/** /**
* in Kontowährung * Codes see p. 177 bottom - 179
*
* After constant N
* *
* Length = 3 * Length = 3
*/ */
val bookingKey: String, val postingKey: String,
val referenceForTheAccountOwner: String, /**
* Kundenreferenz. Bei
* Nichtbelegung wird
* NONREF eingestellt,
* zum Beispiel bei Schecknummer
* Wenn KREF+ eingestellt
* ist, dann erfolgt die
* Angabe der
* Referenznummer in Tag
* :86: .
*/
val customerReference: String,
val referenceOfTheAccountServicingInstitution: String?, /**
* Bankreferenz
*/
val bankReference: String?,
val supplementaryDetails: String? = null /**
* Währungsart und Umsatzbetrag in Ursprungswährung (original currency
* amount) in folgendem
* Format:
* /OCMT/3a..15d/
* sowie Währungsart und
* Gebührenbetrag
* (charges) in folgendem
* Format:
* /CHGS/3a..15d/
* 3a = 3-stelliger
* Währungscode gemäß
* ISO 4217
* ..15d = Betrag mit Komma
* als Dezimalzeichen (gemäß SWIFT-Konvention).
* Im Falle von SEPALastschriftrückgaben ist
* das Feld /OCMT/ mit dem
* Originalbetrag und das
* Feld /CHGS/ mit der
* Summe aus Entgelten
* sowie Zinsausgleich zu
* belegen.
*/
val furtherInformationOriginalAmountAndCharges: String? = null
) { ) {