Subsembly SEPA API Release Notes
- Added abstract property SepaPaymentInformation.RequestedDate which is overriden with the RequestedExecutionDate or RequestedCollectionDate in derived classes.
Added property SepaPaymentTypeBase.IsSepaCompliant which can be used to determine, whether a payment initiation is a SEPA compliant payment.
Added property SepaDocument.ServiceLevel which determines the common service level for all payments in a document.
Fix generation of Swiss pain.008.001.02.ch.03 format.
More tolerant parsing of MT-942 floor limits.
Improvements to SupaConverter.
Added Support for pain.008.01.08.
Added property SepaPaymentTypeBase.IsEmptyPaymentTypeInformation and method SepaPaymentTypeBase.ClearPaymentTypeInformation.
Added property SepaPaymentTypeBase.CategoryPurposeProprietary.
Added support for OCMT and CHGS in SwiftStatementLine. For this the new properties OriginalAmount, OriginalAmountCurrency, ChargesAmount, and ChargesAmountCurrency have been added.
Added SupaColumns InstdAmt, InstdAmtCcy, TtlChrgsAndTaxAmt, and TtlChrgsAndTaxAmtCcy to statement entry columns.
Added Support for pain.001.001.08 and pain.001.001.09. This includes the following generic additions:
The SepaPostalAddress was vastly extended with many more fields.
Added SepaCreditTransferPaymentInformation.RequestedExecutionDateTime which can optionally by used instead of SepaCreditTransferPaymentInformation.RequestedExecutionDate if a time shall be included in the RequestedExecutionDate data element.
Changed handling of missing EntryDate when parsing MT-940. If an OpeningBalance and a ClosingBalance for the same date is present, then all missing EntryDate fields between these balances will be set to this balance date.
When generating a SepaFinancialInstitutionIdentification, BIC or BICFI is now used correctly based on the generated message type and version. Now produces correct CAMT version 08 and later.
- Added various missing properties to the Payment Status Report object tree classes.
- Added SepaTransactionDetails properties LocalInstrumentCode, LocalInstrumentProprietary and PurposeProprietary. The LocalInstrument properties are only supported in CAMT version 08 and later.
Fix SupaConverter.ConvertToSupa for SepaStatementEntry, where the amount is given at the TxDtls and not at the Ntry level.
SepaChargesRecord.Party is now optional instead of mandatory (which was wrong).
Fix problem with empty RltdAgts elements.
BREAKING: For all SepaAmount instances it is required to specify a SepaAmountCreditDebitIndicatorConstraint as Forbidden, Optional, or Mandatory, at construction time.
Added SepaTransactionDetails.Amount property for better support of CAMT version 08.
Fixed Reading/Writing of SepaTransactionDetails RltdPties for CAMT version 08, where a PartyChoice element is used.
Fix for Problems with parsing and generating camt.05x.xx.08 files.
Added SepaQrCode class for generating and parsing the payload of EPC069 QR Codes. This class does not decode or generate QR Code images. We recommend using the ZXing library for that purpose.
Added SepaDateUtil class.
Added SepaChequeInstruction and SepaCreditTransferTransactionInformation.ChequeInstruction. Also DtazvParser now supports parsing cheque payments.
Added SupaRecordUri and more classes to support SUPA URLs.
Added SepaMessageName class and SepaMessage.MessageName property.
Parsing a BIC with SepaBIC now tolerates embedded, leading and trailing spaces.
Added Dtazv* classes for parsing and generating DTAZV files.
Merged Swift* classes from separate assembly into this assembly. Eliminated the duplicate SwiftIBAN and SwiftBIC classes. Instead the SepaIBAN and SepaBIC classes can be used as a drop-in replacement.
BREAKING: SwiftStatement.ReadMT940() and Load() have been removed. There are now new ReadAllMessages() methods, that return an array of all messages that were read.
The PmtInf/FinInstdId is preset as NOTPROVIDED again.
- Added SepaAmount.Clone() and SepaBalance.Clone().
Added support for balance type element
in SepaBalance.TypeProprietary in order to improve compatibility with Austrian C52.
Added static SepaStatement.CreateStatement() convenience method.
More SupaConverter stuff.
Added SepaPartyIdentification.OtherIdentifications collection. The old SepaPartyIdentification.OtherIdentification is just a shortcut to the first element in this collection and should no longer be used.
Added classes SepaAustrianIBAN and SepaSwissIBAN.
Added new SepaWellKnownMessageInfos ZKA_Pain_001_001_03_GBIC_3, ZKA_Pain_008_001_02_GBIC_3, and ZKA_Pain_002_001_03_GBIC_3, with corresponding support in SepaMessageInfo. Also fixed spelling errors: Wrong "GIBC" is now "GBIC".
Added SepaIBANSpec.BankCodeLength and BankCodeOffset.
Added new SepaPaymentTypeBase abstract base class that holds all information of a PmtTpInf element. This is now the base of SepaPaymentInformation, SepaTransactionInformation, and SepaOriginalTransactionInformation. Thus all payment type attributes are now available at all payment levels.
Added SepaBankInfo, SepaBankInfos, SepaAustrianBankInfos, SepaGermanBankInfos, and SepaSwissBankInfos. These can be used to load bank information files.
Many instances now support a full CreditorAccount and DebtorAccount in addition to CreditorAccountIBAN and DebtorAccountIBAN. This is in preparation for international ISO 20022 payments that don't use IBAN numbers.
BREAKING: Refactored all IsValid() and IsEmpty() methods to simple IsValid and IsEmpty boolean properties. Added Validate() method to SepaObject and SepaCollection that allows a detailed validation.
- Added SepaCreditTransferPaymentInformation.LocalInstrumentCode in order to support SEPA instant payments over EBICS using the new "CIP" order type.
Added Namespace Subsembly.Supa for coverting SEPA to JSON or CSV.
Added new SepaRF struct for working with Structured Creditor References.
Release is now built for .NET Standard 2.0. Please read the documentation for the new platform and installation requirements!
Added SepaTransactionDetails.RemittanceInformationLines convenience getter.
Added convenience class SepaGermanBankTransactionCode.
Skipping Amt and CdtDbtInd in TxDtls if present. This allows parsing of some swiss CAMT files.
Now includes the previous Subsembly Swift API.
Now the Subsembly Swift API is included with the Subsembly SEPA API. The Subsembly SWIFT API now also includes a helper class SwiftMX that converts a SwiftStatement (MT-940) to a SepaStatement (CAMT).
Added properties SepaDirectDebitPaymentInformation.CreditorAgentFinancialInstitutionIdentification, SepaCreditTransferPaymentInformation.DebtorAgentFinancialInstitutionIdentification SepaDirectDebitTransactionInformation.DebtorAgentFinancialInstitutionIdentification, and SepaCreditTransferTransactionInformation.CreditorAgentFinancialInstitutionIdentification that provide more detailed access to the corresponding elements.
Added property SepaFinancialInstitutionIdentification.ClearingSystemCode.
Added convenience properties SepaAccount.GermanBankCode and SepaAccount.GermanAcctNo.
- Added SepaCreditorID.Format() method.
New property CreditorReferenceCode of SepaTransactionInformation, SepaTransactionDetails and SepaOriginalTransactionInformation that holds the value of the Strd/CdtrRefInf/Tp/CdOrPrtry/Cd element in a SEPA structured creditor reference information.
New property CreditorReferenceProprietary of SepaTransactionInformation, SepaTransactionDetails and SepaOriginalTransactionInformation that holds the value of the Strd/CdtrRefInf/Tp/CdOrPrtry/Prtry element in a SEPA structured creditor reference information.
Added properties CreditLineIncluded and CreditLineAmount to SepaBalance class.
Added new SepaWellKnownMessageInfos ZKA_Pain_001_001_03_GBIC_2, ZKA_Pain_008_001_02_GBIC_2, and ZKA_Pain_002_001_03_GBIC_2, with corresponding support in SepaMessageInfo.
Added support for Swiss pain.008.001.02.ch.03 according to Swiss Implementation Guidelines for Customer-Bank Messages for the Swiss Direct Debit Procedure version 1.1.1
New property SepaDirectDebitPaymentInformation.ServiceLevelProprietary that holds the value of the PmtTpInf/SvcLvl/Prtry element in a SEPA direct debit payment information.
New property SepaDirectDebitPaymentInformation.LocalInstrumentProprietary that holds the value of the PmtTpInf/LclInstrm/Prtry element in a SEPA direct debit payment information.
New property SepaDirectDebitPaymentInformation.MemberIdentification that holds the value of the CdtrAgt/FinInstnId/ClrSysMmbId/MmbId element in a SEPA direct debit payment information.
New property SepaDirectDebitPaymentInformation.CreditorSchemeNameProprietary that holds the value of the CdtrSchmeId/Id/PrvtId/Othr/Id/SchmeNm/Prtry element in a SEPA direct debit payment information.
New property SepaDirectDebitTransactionInformation.MemberIdentification that holds the value of the DbtrAgt/FinInstnId/ClrSysMmbId/MmbId element in a SEPA direct debit transaction information.
BREAKING: Removed all back/parent references from all SepaObjects and SepaCollections. This was done in order to improve efficiency and also to make the SepaObjects more self-contained and fully usable outside of collections. Also, SepaObjects can now be contained in multiple collections.
Added support for Swiss pain.001.001.03.ch.02 and pain.008.001.02.chsdd.02 according to Swiss Implementation Guidelines for credit transfers, Version 1.7.2 and Swiss Implementation Guidelines for SEPA direct debits, Version 2.5.2. See SepaWellKnownMessageInfos enumeration.
Element PmtTpInf made optional in SepaCreditTransferPaymentInformation
Element PmtTpInf made optional in SepaCreditTransferTransactionInformation
Element PmtTpInf made optional in SepaDirectDebitPaymentInformation
Element PmtTpInf made optional in SepaDirectDebitTransactionInformation
New property SepaCreditTransferTransactionInformation.ServiceLevelCode that holds the value of the PmtTpInf/SvcLvl element in a SEPA credit transfer transaction information.
New property SepaDirectDebitPaymentInformation.ServiceLevelCode that holds the value of the PmtTpInf/SvcLvl element in a SEPA direct debit payment information.
New property SepaDirectDebitTransactionInformation.ServiceLevelCode that holds the value of the PmtTpInf/SvcLvl element in a SEPA direct debit transaction information.
New property SepaDirectDebitTransactionInformation.LocalInstrumentCode that holds the value of the PmtTpInf/LclInstrm element in a SEPA direct debit transaction information.
New property SepaDirectDebitTransactionInformation.SequenceType that holds the value of the PmtTpInf/SeqTp element in a SEPA direct debit transaction information.
New property SepaTransactionInformation.CategoryPurpose that holds the value of the PmtTpInf/CtgyPurp element in a SEPA transaction information.
Possibly BREAKING: The SepaAmount class now has a non-default constructor. It is no longer possible to create a SepaAmount instance without using the special non-default constructor. In addition the SepaAmount class now has an IsValid() method that requires that a currency code and may be a credit/debit indicator is set the amount.
New enumeration SepaBalanceType and property SepaBalance.Type.
New SepaBalance constructor for convenience.
New method SepaBalances.FindBalance().
New property SepaTransactionDetails.TransactionDateTime that holds the value of the RltdDts/TxDtTm element. This is used by credit card transactions to contain the date of purchase.
The SepaObject base class now has an additional abstract IsEmpty() method.
New object SepaBankTransactionCode added. This adds support for bank transaction codes given with domain, family und sub-family codes, in addition to a prorietary bank transaction code and issuer.
The SepaStatementEntry and the SepaTransactionDetails now contain a SepaBankTransactionCode as a member, accessible through the new property TransactionCode. The old properties BankTransactionCode and BankTransactionCodeIssuer of these classes are now marked as deprecated.
The SepaStatementEntries collection has a new method InsertEntry() that makes it easier to create a nicely sorted entries collection from scratch.
New convenience method SepaAmount.SetValue().
Added more well known specifications to SepaIBANSpec.
The method SepaIBAN.IsValid now also validates the length against the well known SepaIBANSpecs.
Added static SepaGermanIBAN.IsValid method.
Unfortunately the implementation of SepaCharges did not work as expected. Therefore some BREAKING CHANGES were required to fix it. SepaCharges no longer derives from SepaObject, but instead now derives from SepaCollection. The intermediate SepaChargesRecords collection has been removed completely, and also the Records property that was holding it. Instead the SepaChargesRecord objects are now contained directly in the SepaCharges collection.
PstlAdr elements with unsupported content elements can now be parsed, too.
Added SepaMessageInfo.GetAllWellKnownMessageInfos() method.
Added TypeCode, TypeProprietaryIdentification, and TypeProprietaryIssuer properties to the SepaChargesRecord.
Added new class SepaPostalAddress that is used by the SepaPartyIdentification class and the SepaFinancialInstitutionIdentification class in their new PostalAddress properties.
- Added SepaTransactionInformation.InstructionIdentification Property that represents the PmtId/InstrId element in a SEPA transaction information.
Support for the outdated pain.001.xxx.02 and pain.008.xxx.01 formats has been completely removed.
The property SepaPartyIdentification.BankPartyIdentification is no longer supported and has been removed. The corresponding BkPtyId element is no longer supported by Austrian banks and hence is no longer needed.
The objects are now no longer implicitly cleared in OnReadXml. This means, if you re-load the content of an object, you must call Clear, first. This should rarely be the case, as you probably use new objects or SepaDocument to load files.
New classes SepaCharges, SepaChargesRecords, and SepaChargesRecord. The SepaStatementEntry and the SepaTransactionDetails classes now contain a Charges property that contains a SepaCharges instance. The SepaCharges object holds all the charge information of a transaction. The implementation is prepared to handle the upcoming CAMT v04 formats.
Added SepaAmount.IsEmpty() and SepaCollection.IsEmpty() for convenience.
Added SepaTransactionDetails.ReferencesProprietary property that contains a Dictionary with all the proprietary references from the Refs collection of the TxDtls element.
Now compiliing everything for .NET Framework 4.5
Small changes in order to achieve compatibility with .NET Core 1.0.
Added Austrian Rulebook 7.1 formats to SepaWellKnownMessageInfos and SepaMessageInfo. The format is identical to the predecessor, thus no extra code changes were needed.
Property SepaDirectDebitTransactionInformation.SameMandateNewDebtorAgent has been removed as this is no longer supported in the current EPC Rulebook. Instead a special SepaDirectDebitTransactionInformation.SMNDA IBAN value was added that can be used with the SepaDirectDebitTransactionInformation.OriginalDebtorAccountIBAN property.
Now supporting "Spezifikation der Datenformate" version 3.0.
Added the new ZKA/DK namespaces to SepaNamespace and SepaWellKnownMessageInfos. Warning: The new namespaces have numerically lower values, than the older namespaces.
Changed the default value of the properties SepaStatementEntry.BankTransactionCodeIssuer and SepaTransactionDetails.BankTransactionCodeIssuer from "ZKA" to "DK".
SepaUtil.EnforceCharset now correctly replaces a '*' with the given substitution character.
Added SepaTransactionDetails.PaymentInformationIdentification property.
Added SepaUtil.NONREF constant value.
Added SepaPaymentInformation.ChargeBearer property that is used in the derived SepaCreditTransferPaymentInformation and SepaDirectDebitPaymentInformation classes. The default value of this property is "SLEV" in order to ensure backward compatibility.
For all Name, Info and Text properties, the character set of a given string is no longer validated against the Latin 1 characters set. This means, that any Unicode characters can be used now.
The SepaUtil helper class now contains new static methods CheckGermanCharset, EnforceGermanCharset, and EnforceGermanName. These properly deal with the German DK SEPA character set that includes umlaut characters.
Added static SepaIBAN.Format convenience method.
Support for the element RtrInf/Rsn/Prtry in SepaTransactionDetails through the new ReturnInformationReasonProprietary property.
Support for AddtlInf elements in SepaStatusReasonInformation through the new AdditionalInformation property.
Support for PmtInfSts element in SepaOriginalPaymentInformation through new PaymentInformationStatus property.
Fixed support for pain.002 files by reworking SepaPaymentStatusReport implementation.
Added several comatibility work-arounds for malformed SEPA documents.
Fixed bug where reading SepaTransactionDetails (e.g. inside a CAMT file) leads to an endless loop when unknown elements exist.
Added two convenient SepaGermanIBAN.LoadBundesbankTable method overloads.
Added SepaOriginalTransactionInformation.PaymentMethod which also fixes a bug when loading pain.002 documents that contain a PmtMtd element.
When reading the XML the namespace declarations are now fully supported.
When reading a DrctDbtTxInf the element AmdmntInd is now ignored and only AmdmntInfDtls is parsed.
SepaStatement.ElectronicSequenceNumber and SepaStatement.LegalSequenceNumber are now of type long instead of type int. This avoids overflow on really large numbers.
SepaTransactionDetails: Fixed reading of empty RtrInf element.
Any amounts are now always written with exactly two decimal places. Additional decimal places will be rounded, less decimal places will be filled with zeroes.
Implemented Bundesbank IBAN Rules 2014/03.
New Object SepaStatements, new Properties SepaBankToCustomerMessage.Statements SepaBankToCustomerMessage.StatementTag and new method SepaBankToCustomerMessage.NewStatement() now support CAMT files with multiple Rpt, Stmt, or Ntfctn elements.
Added SepaTransactionDetails.InstructedAmount property.
SepaStatementEntry can now read multiple
elements, but only a single element may occur.
Added property SepaCreditTransferTransactionInformation.InstructionForDebtorAgent.
Added property SepaDirectDebitTransactionInformation.InstructionForCreditorAgent.
Added properties Batch, BatchMessageIdentification, and BatchNumberOfTransactions to SepaStatementEntry class.
Added properties TransactionIdentification and AccountServicerReference to SepaTransactionDetails class.
Added static SepaDocument.NewDocumentXml(XmlReader) overload.
Fixed bug in reading of empty RltdPties element in SepaTransactionDetails class.
Added new class SepaOtherId that helps reading and writing SEPA "other identification" elements. The new class is used internally in various other classes where "other identification" elements are required.
Add new SepaPartyIdentification.OtherIdentification property for direct access to the "other identification" element. Through this property the special fields required for submitting a XML container via EBICS can be set up.
Fixed errors in SepaGermanIBAN processing of rules 0021, 0052, and 0053.
Added this ReadMe.txt file in order to start a version history.
Added SepaInfo.pdf file with general information about the German SEPA formats and usage.
Added SepaDirectDebit sample application that demonstrates how to create a SEPA direct debit XML file.
Added SepaConvertIBAN sample application that demonstrates how to use the SepaGermanIBAN class and is actually useful.
SepaGermanIBAN is now based on the Bundesbank IBAN Regeln from December 2013.
The Austrian pain.001.001.03 and pain.008.001.02 formats according to APC Rulebooks 4.0, 5.0 and 6.0 are now supported. See SepaWellKnownMessageInfos enumeration.
Added property OtherId to SepaFinancialInstitutionIdentification class. This takes up the bank code as sent by the German Postbank.
Added property CreditorReferenceInformation to SepaTransactionDetails, SepaTransactionInformation, and SepaOriginalTransactionInformation classes.