diff --git a/docs/Vokabular.md b/docs/Vokabular.md new file mode 100644 index 00000000..2d85946f --- /dev/null +++ b/docs/Vokabular.md @@ -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) | payer’s/debtor’s reference party (for credit transfer / payee’s / creditor’s reference party (for a direct debit) | +| Abweichender Zahlungsempfänger (CT-AT28) / Abweichender Zahlungspflichtiger (DDAT15) | payee’s/creditor’s reference party / payer’s/debtor’s reference party | +| | | +| Überweisender | Payer, debtor | +| Zahlungsempfänger | Payee, creditor | +| Zahlungseingang | Payment receipt | +| Lastschrift | direct debit | +| | | +| | | +| Primanoten-Nr. | Journal no. | +| | | diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/Mt940Parser.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/Mt940Parser.kt index 6cc69d2c..82de5478 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/Mt940Parser.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/Mt940Parser.kt @@ -269,10 +269,10 @@ open class Mt940Parser( */ val transactionType = fieldValue.substring(amountEndIndex, amountEndIndex + 1) // transaction type is 'N', 'S' or 'F' - val bookingKeyStart = amountEndIndex + 1 - val bookingKey = fieldValue.substring(bookingKeyStart, bookingKeyStart + 3) // TODO: parse codes, p. 178 + val postingKeyStart = amountEndIndex + 1 + 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] /** @@ -282,17 +282,17 @@ open class Mt940Parser( * 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 supplementaryDetails: String? = null + var furtherInformation: String? = null val bankReferenceAndSupplementaryDetails = bankReference.split("\n") if (bankReferenceAndSupplementaryDetails.size > 1) { bankReference = bankReferenceAndSupplementaryDetails[0].trim() // 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, - customerReference, bankReference, supplementaryDetails) + return StatementLine(!!!isDebit, isCancellation, valueDate, bookingDate, null, amount, postingKey, + customerReference, bankReference, furtherInformation) } protected open fun parseNullableInformationToAccountOwner(informationToAccountOwnerString: String): InformationToAccountOwner? { diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/AccountStatement.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/AccountStatement.kt index cdf75925..5fbe650c 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/AccountStatement.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/AccountStatement.kt @@ -11,7 +11,7 @@ open class AccountStatement( * * Max length = 16 */ - val transactionReferenceNumber: String, + val orderReferenceNumber: String, /** * Bezugsreferenz oder „NONREF“. @@ -20,7 +20,7 @@ open class AccountStatement( * * Max length = 16 */ - val relatedReferenceNumber: String?, + val referenceNumber: String?, /** * xxxxxxxxxxx/Konto-Nr. oder yyyyyyyy/Konto-Nr. @@ -50,7 +50,7 @@ open class AccountStatement( * * Max length = 5 */ - val sequenceNumber: Int?, + val sheetNumber: Int?, val openingBalance: Balance, @@ -72,7 +72,7 @@ open class AccountStatement( * * Max length = 65 */ - val multipurposeField: String? = null + val remittanceInformationField: String? = null ) { diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/Balance.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/Balance.kt index bdb86ac6..b7197283 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/Balance.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/Balance.kt @@ -20,7 +20,7 @@ open class Balance( val isCredit: Boolean, /** - * JJMMTT = Buchungsdatum des Saldos oder '0' beim ersten Auszug + * JJMMTT = Buchungsdatum des Saldos oder '000000' beim ersten Auszug * * Max length = 6 */ diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/InformationToAccountOwner.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/InformationToAccountOwner.kt index d613e245..f76a4d1f 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/InformationToAccountOwner.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/InformationToAccountOwner.kt @@ -1,34 +1,92 @@ package net.codinux.banking.fints.transactions.mt940.model - open class InformationToAccountOwner( 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?, + /** + * BLZ Überweisender / Zahlungsempfänger + * Bei SEPA-Zahlungen BIC des Überweisenden / Zahlungsempfängers. + */ val otherPartyBankCode: String?, + /** + * AT 01 IBAN des Überweisenden (Zahlungseingang Überweisung) + * AT 04 IBAN des Zahlungsempfängers (Eingang Lastschrift) + */ val otherPartyAccountId: String?, - val bookingText: String?, - val primaNotaNumber: String?, - val textKeySupplement: String? + /** + * Buchungstext, z. B. DAUERAUFTRAG, BARGELDAUSZAHLUNG, ONLINE-UEBERWEISUNG, FOLGELASTSCHRIFT, ... + */ + 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 customerReference: String? = null + /** + * (DD-AT01 - Angabe verpflichtend) + */ var mandateReference: String? = null + /** + * (DD-AT02 - Angabe verpflichtend bei SEPALastschriften, nicht jedoch bei SEPARücklastschriften) + */ var creditorIdentifier: String? = null + /** + * (CT-AT10- Angabe verpflichtend,) + * Entweder CRED oder DEBT + */ var originatorsIdentificationCode: String? = null + /** + * Summe aus Auslagenersatz und Bearbeitungsprovision bei einer nationalen Rücklastschrift + * sowie optionalem Zinsausgleich. + */ var compensationAmount: String? = null + /** + * Betrag der ursprünglichen Lastschrift + */ var originalAmount: String? = null + /** + * (DD-AT22; CT-AT05 -Angabe verpflichtend, nicht jedoch bei RTransaktionen52) + */ var sepaReference: String? = null + /** + * Abweichender Überweisender (CT-AT08) / Abweichender Zahlungsempfänger (DD-AT38) + * (optional)53 + */ var deviantOriginator: String? = null + /** + * Abweichender Zahlungsempfänger (CT-AT28) / + * Abweichender Zahlungspflichtiger ((DDAT15) + * (optional)53 + */ var deviantRecipient: String? = null var referenceWithNoSpecialType: String? = null diff --git a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/StatementLine.kt b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/StatementLine.kt index ccb03e9e..c5f2ee60 100644 --- a/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/StatementLine.kt +++ b/fints4k/src/commonMain/kotlin/net/codinux/banking/fints/transactions/mt940/model/StatementLine.kt @@ -42,26 +42,63 @@ open class StatementLine( val currencyType: String?, /** - * Codes see p. 177 bottom - 179 - * - * After constant „N“ + * in Kontowährung * * Max length = 15 */ val amount: Amount, /** - * in Kontowährung + * Codes see p. 177 bottom - 179 + * + * After constant „N“ * * 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 ) {