Developers manual for the SEPA CreditTransfer DotNet module EULA Februari 20, 2013. Manual Version 7.0 The major version number of the manual and the software are identical and reflect the major version number of the Dutch standards which in turn equal the version of the EPC standards. www.turbofrontoffice.eu
Developers Manual SEPA SCT DotNet Module ~ EULA 2 Inhoud Introduction and some SEPA basics... 4 Bank Account Data... 4 The official foundations of the SCT standard... 4 Implementation of the Turbo FrontOffice SCT DotNet module... 6 Logging and error information... 7 Performance and Large Batches... 8 API of factory classes... 9 Forbidden characters... 9 Country Codes... 9 General methods for postal addresses and contact details... 10 SetPostalAddress methods... 10 SetContactDetails methods... 10 SCTFactory... 12 Constructor... 12 CreateFile... 13 CreateToStream... 13 ValidateGroupHeader... 13 InitiatingParty_SetPostalAddress... 13 InitiatingParty_SetOrganisationIdentification (by BIC)... 13 InitiatingParty_SetOrganisationIdentification (by ID)... 14 InitiatingParty_SetPrivateIdentification (by birth details)... 14 InitiatingParty_SetPrivateIdentification (by ID)... 15 InitiatingParty_SetContactDetails... 15 PaymentInformationFactory... 16 Constructor... 16 ValidatePaymentInformation... 17 SetUltimateDebtorByScheme... 17 SetUltimateDebtorByBICOrBEI... 17 SetDebtorIdentificationByBICOrBEI... 18 SetDebtorIdentificationByScheme... 18 SetPostalAddressOnDebtor... 18 SetPostalAddressOnUltimateDebtor... 18 SetContactDetailsOnUltimateDebtor... 19
Developers Manual SEPA SCT DotNet Module ~ EULA 3 SetContactDetailsOnDebtor... 19 SetCategoryPurposeByCode... 19 SetCategoryPurposeInProprietaryForm... 19 SetPaymentTypeInformation... 20 DDTransactionFactory... 21 Constructor... 21 ValidateTransactionInformation... 21 SetUnstructuredRemittanceInformation... 22 SetUltimateDebtorByScheme... 22 SetUltimateDebtorByBICOrBEI... 23 SetUltimateDebtorByBirthData... 23 SetUltimateCreditorByBICOrBEI... 23 SetUltimateCreditorByBirthData... 24 SetPurposeByCode... 24 SetCreditorPostalAddress... 24 SetDutchBetalingskenmerkAsStructuredRemittanceInformation... 24 Code example... 25 EULA... 30
Developers Manual SEPA SCT DotNet Module ~ EULA 4 Introduction and some SEPA basics The SEPA standards all revolve around quite complex xml standards with an astonishing overkill of flexibility packaged in an endless series of nested xml elements and attributes. Happily many of these elements and attributes are optional. They have been designed to permit a high degree of potential flexibility per bank and also for the future. But even the mandatory minimal xml structure of the SEPA DirectDebit Initiation file has a highly nested and therefore complex structure. Turbo FrontOffice has designed it s SEPA CreditTransfer DotNet module (SCT DotNet) in such a way that developers can easily incorporate it into their home grown financial software without spending very much effort in analyzing the bewilderingly complex underlying SCT (SEPA DirectDebit) standard. Just read this manual thoroughly, and your SEPA DirectDebit implementation will take you at the most a few hours. This is, if you have the necessary data at hand The biggest effort will be to produce the new data that has become necessary to comply to the SEPA standards. For CreditTransfer messages you need a richer bank account information than before (BIC and IBAN). Bank Account Data The basic identification of creditor and debtors is based on the international BIC bank codes and on the IBAN bank account codes. Knowing the country of the bank and the traditional bank account it is always possible to retrieve the new BIC and IBAN codes without even relying on extra information from the debtors. For Dutch banks accounts this can be done in bulk by uploading an Excel file with the traditional bank account number on www.ibanbicservice.nl. This Excel file is then enriched with IBAN and BIC codes for you. This only costs money for very large batches. For Dutch banks it is possible to lookup the BIC code programmatically based on the first four characters of the IBAN code. See the document Tabel BIC uit IBAN on http://www.betaalvereniging.nl/publicaties/ In many cases it will be necessary to adapt the database structure to store this enriched bank account information. The official foundations of the SCT standard All SEPA standards have three main foundation levels which build on each other. For the SCT Initiation xml message these foundations are: 1. A series of general international ISO 20022 standards for financial xml messages. 2. SEPA European standards (so called rule books) published by the EPC (European Payments Council): EPC SEPA Credit Transfer Scheme Customer to Bank Implementation Guidelines, version 7.0, issued 30 November 2012 (EPC132 08). 3. Each SEPA country can establish its own supplementary rulebook to finetune the ISO and general SEPA standards, of course staying within the borders of the enormous amount of
Developers Manual SEPA SCT DotNet Module ~ EULA 5 flexibility in these standards. For the Netherlands these extra rules have been established by the Betaalvereniging Nederland. These extra Dutch rules have been published in XML message for SEPA Credit Transfer Initiation Implementation Guidelines for the Netherlands (version 7.0). The ISO20022 and EPC rules together have lead to xml message standard PAIN.001.001. National rulebooks as the mentioned document from the Dutch Betaalvereniging Nederland repeat the complete PAIN.001.001.03 message definition here and there adding extra rules in their comments on each message element. A systematic distinction is made in the origin of all rules: Usage ISO; Usage EPC and Usage NL. It helps to have this layered foundation in mind when studying for example the Dutch documentation. For example many xml elements are indicated as optional in the diagrams and basic tables of elements. These diagrams and tables happen to be copied from the ISO foundation. If the EPC or NL rules dictate that some xml element should be mandatory things become quite confusing because these extra rules, making some optional elements mandatory, contradict the symbols in the diagrams and tables. To complicate things even further individual banks can add their own supplementary rules attached to their SEPA services. In most cases this is limited to some minor details. But at least take care to download and make a thorough study of the SEPA documentation of your bank! In the API documentation further on in this manual we sometimes refer to the xml element hierarchy and to extra EPC and NL rules. So it might be a good idea to have at least the above mentioned national rulebook document at hand. The Dutch document (version 7.0) can be found at http://www.betaalvereniging.nl/publicaties/. For the EPC rulebooks: http://www.europeanpaymentscouncil.eu/content.cfm?page=sepa_credit_transfer The ISO20022 standards: www.iso20022.org/documents/general/payments_maintenance_2009.zip.
Developers Manual SEPA SCT DotNet Module ~ EULA 6 Implementation of the Turbo FrontOffice SCT DotNet module As mentioned in the introduction, once all the bank account data are in place, implementation of our SCT DotNet module is a breeze. Add SEPA.Base.dll and SEPA.SCT.dll assemblies to your project and add references to these assemblies. Add the following using statements to your code files: using SEPA.Base; using SEPA.SCT; using SEPA.SCT.Factories; using SEPA.SCT.General; The module uses three factory classes to create the three main SCT objects: SCTFactory creates and holds a GroupHeader object. Basically this factory injects all data at the SCT file level. PaymentInformationFactory creates and holds a PaymentInformation object holding all data on the transaction batch level. CTTransactionFactory creates and holds a CT Transaction object containing all data on the most detailed level of the individual CT transaction. The SCT DotNet modules design is such that you only need the constructor methods of these three factory classes to create complete and valid SCT files containing a minimal set of all mandatory data. You might have reasons to provide more than the minimum data in your SCT files, perhaps because your bank requires more than the general SEPA mandatory data or because you want to provide extra optional information for the case something goes wrong down the SEPA CT pipeline. This is possible in two different ways: 1. Each factory class provides extra methods to provide more optional data of general importance. If you need more of these methods please let us know. We will gladly add them to our module. 2. The complete hierarchy of the SCT xml structure is represented in an OO (Object Oriented) fashion by the main classes held by the factory classes (GroupHeader39, PaymentInstructionInformation4 and DirectDebitTransactionInformation9). This complete xml structure is accessible as a chain of nested public properties in a regular OO fashion. It is strongly disadvised to access this xml structure directly from your code. It should seldomly (if ever) be necessary. Your code should follow these steps in the given order: 1. Create a SCTFactory object and keep a reference to it. 2. Call the SCTFactory.ValidateGroupHeader() method to validate all data in the group header. In case of validation errors abort further creation of the SCT file and fix the cause of the error(s). 3. Create a PaymentInformationFactory for each batch of transaction in the SCT file. The constructor receives a reference to the SCTFactory as one of its arguments.
Developers Manual SEPA SCT DotNet Module ~ EULA 7 4. Call the PaymentInformationFactory.ValidatePaymenInformation() method to validate all data on the batch level. In case of validation errors abort further creation of the SCT file and fix the cause to the error(s). If validations succeeds the batch is added to the GroupHeader. 5. Create a CTTransactionFactor for each transaction in the batch passing in the PaymentInformationFactory as one of the constructor arguments. 6. Call the CTTransactionFactory.ValidateTransactionInformation() method to validate the transaction data and add the transaction to the batch if it passes validation. In case of validation errors on the transaction level the transaction will simply be skipped. The details in the separate error log file should allow pinpointing all erroneous data for correction, possibly permitting a retry later on (depending on the capabilities of your back office). 7. After passing in all transaction data we can choose to create a physical SCT file on disk with the SCTFactory.CreateFile() method or we can create the xml data on an existing Stream object with the SCTFactory.CreateToStream(stream) method. As mentioned earlier it is possible to add optional data by using the extra methods of each factory. Important examples are the following methods on the CTTransactionFactory: 1. SetDutchBetalingskenmerkAsStructuredRemittanceInformation(string betalingskenmerk) 2. SetUnstructuredRemittanceInformation(string remittanceinformation) Call these extra methods before calling the validation method on the factory. The validation system in the module is very powerful and also checks all optional elements following all rules in the SEPA CD standards on the ISO, EPC and NL levels. The constructors and other methods on all factory classes are commented according to the.net standards. This displays Intellisense help at your finger tips while writing code. This detailed documentation on method and argument level is also given in the last chapter of this manual. Logging and error information All stages of the creation process write information to a logfile in the specified log directory. Each time a SCT file is generated a new logfile is created with the same name as the SCT file with date and time data appended to the name. In the case of validation errors a dedicated error log is created again with its name based on the SCT file name. Each validation method can detect and log multiple validation errors to this file. In the case of validation errors in the GroupHeader or on the batch level the creation process should be aborted. This can be detected by testing if the output of the validation method is not null. Invalid transactions will be simply ignored (the invalid transaction is not added to the batch). At the end of the creation process we can check for any errors by testing the Boolean HasErrors property of the main SCTFactory. Each PaymentInformationFactory also has a HasErrors property. The logging information can not be stored in a Stream object. This is on purpose to guarantee the persistence of all error information even in the case of an (unlikely) complete crash.
Developers Manual SEPA SCT DotNet Module ~ EULA 8 Performance and Large Batches It should be noted that the storage of a large number of transactions as objects uses an ever increasing amount of live memory. Depending on the memory capacity of the processing machine this might considerably slow down the total performance in the case of large batches. The simple solution is to create multiple files instead of one giant SCT file. Some experiments might be necessary to find the most practical batch volume. Future releases will permit partial storage on disk of growing unfinished SCT files. This will permit creating SCT files up till the maximum batch size indicated by the creditors agency.
Developers Manual SEPA SCT DotNet Module ~ EULA 9 API of factory classes Before giving details on each public factory method we discuss some general types of methods. Forbidden characters The SEPA standards define the following set of characters to be allowed in alphanumerical content: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 /? : ( )., + Space All string arguments in all factory methods are automatically scanned for forbidden characters. These are replaced by question marks. Country Codes Some methods take a country code argument. These are always ISO 3166, Alpha 2 codes (2 uppercase characters). The SCT DotNet module permits using a countrycodesiso3166alpha2 appsetting in the regular.net configuration file. This appsetting should contain a smi colon separated list of country codes. These codes can be found on the internet. Per august 20, 2012 the world wide list was as follows: <add key="countrycodesiso3166alpha2" value="ad;ae;af;ag;ai;al;am;an;ao;aq;ar;as;at;au;aw;ax;az;ba;bb;bd;be;bf;bg;bh;bi;bj;bl;bm;bn;bo;bq;br; BS;BT;BV;BW;BY;BZ;CA;CC;CD;CF;CG;CH;CI;CK;CL;CM;CN;CO;CR;CU;CV;CW;CX;CY;CZ;DE;DJ;DK;DM;DO;DZ;EC;EE;EG;E H;ER;ES;ET;FI;FJ;FK;FM;FO;FR;GA;GB;GD;GE;GF;GG;GH;GI;GL;GM;GN;GP;GQ;GR;GS;GT;GU;GW;GY;HK;HM;HN;HR;HT;HU ;ID;IE;IL;IM;IN;IO;IQ;IR;IS;IT;JE;JM;JO;JP;KE;KG;KH;KI;KM;KN;KP;KR;KW;KY;KZ;LA;LB;LC;LI;LK;LR;LS;LT;LU; LV;LY;MA;MC;MD;ME;MF;MG;MH;MK;ML;MM;MN;MO;MP;MQ;MR;MS;MT;MU;MV;MW;MX;MY;MZ;NA;NC;NE;NF;NG;NI;NL;NO;NP;N R;NU;NZ;OM;PA;PE;PF;PG;PH;PK;PL;PM;PN;PR;PS;PT;PW;PY;QA;RE;RO;RS;RU;RW;SA;SB;SC;SD;SE;SG;SH;SI;SJ;SK;SL ;SM;SN;SO;SR;SS;ST;SV;SX;SY;SZ;TC;TD;TF;TG;TH;TJ;TK;TL;TM;TN;TO;TR;TT;TV;TW;TZ;UA;UG;UM;US;UY;UZ;VA;VC; VE;VG;VI;VN;VU;WF;WS;YE;YT;ZA;ZM;ZW"/> If this appsetting is found all country code arguments will be validated against the configured codes.
Developers Manual SEPA SCT DotNet Module ~ EULA 10 General methods for postal addresses and contact details Multiple factory types have a series of methods to set postal address and contact details. All these methods have the same API s, which are given here: SetPostalAddress methods Different optional methods exist to set a postal address. They all have the same set of arguments which are described here to prevent unnecessary repetition. All arguments are optional. addresstype: Enumeration values: ADDR: complete postal address; BIZZ: business address; DLVY: address to which delivery is to take place; HOME: home address; MLTO: address to which mail is sent PBOX: address is a postal office (PO) box. department: Identification of a division of a large organisation or building (max 70 characters). subdepartment: Identification of a sub division of a large organisation or building (max 70 characters). street: Max 70 characters. buildingnumber: Number that identifies the position of a building on a street (max 16 characters). postcode: Identifier consisting of a group of letters and/or numbers that is added to a postal address to assist the sorting of mail (max 16 characters). town: Max 35 characters. countrysubdivision: Identifies a subdivision of a country such as state, region, county (max 70 characters). countrycode: See the general section on Country Codes. addresslines (List<string>): Up to maximum 7 strings of maximum 70 characters each. Information that locates and identifies a specific address, as defined by postal services, presented in free format text. SetContactDetails methods All arguments of these optional methods are optional. nameprefixcode: Enumeration values: DOCT: Doctor or Dr., MADM: Madam, MISS: Miss, MIST: Mister or Mr.
Developers Manual SEPA SCT DotNet Module ~ EULA 11 name: Name by which a party is known and which is usually used to identify that party (max 140 characters). phonenumber: Format (regular expression): \+[0 9]{1,3} [0 9()+\ ]{1,30} mobilenumber: Format (regular expression): \+[0 9]{1,3} [0 9()+\ ]{1,30} faxnumber: Forma (regular expression)t: \+[0 9]{1,3} [0 9()+\ ]{1,30} emailaddress: Max 2048 characters. other: Contact details in an other form (max 35 characters).
Developers Manual SEPA SCT DotNet Module ~ EULA 12 SCTFactory Constructor This constructor creates the SCT Document and sets all mandatory GroupHeader elements of which messageid is the main one. After creating this factory set any additional elements directly or by using the factory methods. Call ValidateGroupHeader(). Abort if the result is not null. licensekey: License key of this SCT DotNet module. During validation of the GroupHeader the license key is also validated. If an error or trial information (remaining trial days) is returned it is included in the log file. filenamewithoutextension: Filename without directory nor file extension parts. Even if the end result is created on a Stream object instead of in a file this argument is still used as part of the log file name. sepafiledirectory: Full pathname of the directory to which the SEPA CT file must be written. Make sure the application has writing access to this directory! If the end result is created on a Stream object and not as a file, this argument can remain empty. logdirectory: Full pathname of the directory to which the log file must be written. Make sure the application has writing access to this directory! messageid: Point to point reference, assigned by the instructing party and sent to the next party in the chain, to unambiguously identify the message. The instructing party has to make sure that messageid is unique per instructed party for a pre agreed period. Max length 35 characters. initiatingpartyname: Name of the initiating party. Optional, max 70 characters according to EPC usage (Betaalvereniging IG SEPA DirectDebit 6.0.pdf, page 17). initiatingpartycountryofresidence: Optional country code. Sets the CountryOfResidence of the initiating party (GrpHdr.InitgPty.CtryOfRes). See the general section on country code arguments.
Developers Manual SEPA SCT DotNet Module ~ EULA 13 CreateFile Creates the SCT xml file and a log file in the directories indicated by the constructor. Before calling this method add all PaymentInformation elements (transaction batches) and call the ValidateGroupHeader() method. : none CreateToStream stream: an object of any Stream subtype. ValidateGroupHeader Validates all elements of the GroupHeader. A List of ValidationError objects is returned. If no rules were violated null is returned. Preferrably call this method before adding PaymentInformation elements (transaction batches). Be sure to call this method before writing the SCT xml file or stream. : none InitiatingParty_SetPostalAddress Sets the PostalAddress of the initiating party (GrpHdr.InitgPty.PstlAdr). All address details are optional. Usage of this method is optional, but address details might help solve downstream transaction problems. See the general General methods for postal addresses and contact details section. InitiatingParty_SetOrganisationIdentification (by BIC) Sets the Id property of the initiating party (GrpHdr.InitgPty.Id) with an OrganisationIdentification4 object on which BICOrBEI has been set. Using this method overrides the result of any earlier calls to any other InitiatingParty_SetOrganisationIdentification overloads or any InitiatingParty_SetPrivateIdentification overloads. BICOrBEI: Code allocated to organisations by the ISO 9362 Registration Authority, under an international identification scheme, as described in the latest version of the standard ISO 9362 Banking (Banking telecommunication messages, Bank Identifier Codes). Format (regular expression): [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1}
Developers Manual SEPA SCT DotNet Module ~ EULA 14 InitiatingParty_SetOrganisationIdentification (by ID) Sets the Id property on the initiating party (GrpHdr.InitgPty.Id) with an OrganisationIdentification4 object on which one Other (Othr) object has been set. Using this method overrides the result of any earlier calls to any InitiatingParty_SetOrganisationIdentification overloads or any InitiatingParty_SetPrivateIdentification overloads. identification: Identification assigned by an institution (max 35 characters) (if identification is null the output will also be null). issuer:entity that assigns the identification (max 35 characters). schemename: Two possibilities, depending on the schemenametype setting: Possiblity 1 (Code): Name of the identification scheme, in a coded form as published in an external list (max 4 characters). Possiblity 2 (Proprietary): Name of the identification scheme, in a free text form. (max 35 characters). schemenametype: Enumeration values: Code or Proprietary. Indicates if schemename possiblity 1 or 2 is used. InitiatingParty_SetPrivateIdentification (by birth details) Sets the Id property of the initiating party (GrpHdr.InitgPty.Id) with a PersonIdentification5 object on which the DtAdnPlcOfBirth (DateAndPlaceOfBirth) property has been set. Using this method overrides the result of any earlier calls to any InitiatingParty_SetOrganisationIdentification overloads or to any InitiatingParty_SetPrivateIdentification overloads. birthdate: Birthday of the private person identifying himself. cityofbirth: City in which the private person identifying himself was born (max 35 characters). countryofbirth: Code of the country in which the private person identifying himself was born. See general section Country Codes for further details. provinceofbirth: Province in which the private person identifying himself was born (optional, max 35 characters).
Developers Manual SEPA SCT DotNet Module ~ EULA 15 InitiatingParty_SetPrivateIdentification (by ID) Sets the Id property on the initiating party (GrpHdr.InitgPty.Id) with a PersonIdentification5 object on which one Other (Othr) object has been set with a GenericPersonIdentification1 object. Using this method overrides the result of any earlier calls to any InitiatingParty_SetOrganisationIdentification overloads or any InitiatingParty_SetPrivateIdentification overloads. Identification: Identification assigned by an institution (max 35 characters) (if identification is null the output will also be null). issuer: Entity that assigns the identification (max 35 characters). schemename: Two possibilities, depending on the schemenametype setting: Possiblity 1 (Code): Name of the identification scheme, in a coded form as published in an external list (max 4 characters). Possiblity 2 (Proprietary): Name of the identification scheme, in a free text form (max 35 characters). schemenametype: Enumeration values: Code or Proprietary. Idicates if schemename possiblity 1 or 2 is used. Name: Optional name of the identifying party. InitiatingParty_SetContactDetails Sets the CtctDtls (ContactDetails) property on the initiating party (GrpHdr.InitgPty.CtctDtls) with a ContactDetails2 object. All arguments are optional. See general section General methods for postal addresses and contact details for more details.
Developers Manual SEPA SCT DotNet Module ~ EULA 16 PaymentInformationFactory Constructor Constructor that creates a new PaymentInstructionInformation3 object with all mandatory elements except the CT transaction information items. A PaymentInstructionInformation object represents a batch of transactions. The debtorbic argument is optional for dutch domestic payments. After creating this factory set any aditional elements directly or by using the factory methods. Then call ValidatePaymentInformation() to validate and automatically add the PaymentInformation to the given SCTFactory. sctfactory: The main credit transfer factory object. paymentinformationidentification: Unique identification, as assigned by a sending party, to unambiguously identify the payment information group within the message (max 35 characters). requestedexecutiondate: Date and time at which the initiator requests that the transfer be executed. debtorname: Name identifying the debtor. debtoriban: IBAN 2007 Identifier (regular expression format: [A Z]{2,2}[0 9]{2,2}[a za Z0 9]{1,30}) debtorbic: BIC code of debtor (regular expression format: [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1}). If BIC is left empty, the debtor FinancialInstitution will be identified with Other.Identification = 'NOTPROVIDED' (NL usage version 7.0). This is not only allowed for international payments untill 31 january 2016! batchbooking: Identifies whether a single entry per individual transaction or a batch entry for the sum of the amounts of all transactions within the group of a message is requested; Optional argument: if not set pre agreed customer to bank conditions apply. Some banks (like the RABO) disregard this setting overwriting it with their own default.
Developers Manual SEPA SCT DotNet Module ~ EULA 17 ValidatePaymentInformation Validates all elements of the PaymentInformation, except the included CreditTransferTransactions. Validate before adding transactions. If the validation returns errors, cancel the whole PaymentInformation and fix the error cause. The logfile contains the paymentinformationidentification argument given in the constructor of this PaymentInformationFactory. A List of ValidationError objects is returned (null if no violation errors were encountered). If no rules were violated the PaymentInformation element is added to the Document and null is returned. : none SetUltimateDebtorByScheme Sets UltimateDebtor object on which one Other item is set containing scheme id information ; setting the party Name is optional. setasprivateidentification: Determines if an OrganisationIdentifiction or a PrivateIdentification is used. identification: Identification assigned by an institution (max 35 characters) (if identification is null the output will also be null). issuer: Entity that assigns the identification (max 35 characters). schemename: Two possibilities, depending on the schemenametype setting: Possiblity 1 (Code): Name of the identification scheme, in a coded form as published in an external list (max 4 characters). Possiblity 2 (Proprietary): Name of the identification scheme, in a free text form. (max 35 characters). schemenametype: Enumeration values: Code or Proprietary. Indicates if schemename possiblity 1 or 2 is used. name: Optional name of the identifying party. SetUltimateDebtorByBICOrBEI Identifies the Ultimate Debtor by BIC code. Creates a PartyIdentification32 object on which BICOrBEI is set (in an OrganisationIdentifiction object); setting the party Name is optional. BICOrBEI: Code allocated to organisations by the ISO 9362 Registration Authority, under an international identification scheme, as described in the latest version of the standard ISO 9362 Banking (Banking telecommunication messages, Bank Identifier Codes). Regular expression format: [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1}
Developers Manual SEPA SCT DotNet Module ~ EULA 18 SetDebtorIdentificationByBICOrBEI Identifies the Debtor by BIC code. Sets the Id property of the Debtor party with an OrganisationIdentification4 object on which BICOrBEI has been set. Using this method overrides the result of any earlier calls that set the Creditor Id element. BICOrBEI: Code allocated to organisations by the ISO 9362 Registration Authority, under an international identification scheme, as described in the latest version of the standard ISO 9362 Banking (Banking telecommunication messages, Bank Identifier Codes). Regular expression format: [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1} SetDebtorIdentificationByScheme Sets Debtor object on which one Other item is set containing scheme id information ; setting the party Name is optional. setasprivateidentification: Determines if an OrganisationIdentifiction or a PrivateIdentification is used. identification: Identification assigned by an institution (max 35 characters) (if identification is null the output will also be null). issuer: Entity that assigns the identification (max 35 characters). schemename: Two possibilities, depending on the schemenametype setting: Possiblity 1 (Code): Name of the identification scheme, in a coded form as published in an external list (max 4 characters). Possiblity 2 (Proprietary): Name of the identification scheme, in a free text form. (max 35 characters). schemenametype: Enumeration values: Code or Proprietary. Indicates if schemename possiblity 1 or 2 is used. name: Optional name of the identifying party. SetPostalAddressOnDebtor Sets the PostalAddress of the Creditor party. All address details are optional. See the general General methods for postal addresses and contact details section. SetPostalAddressOnUltimateDebtor Sets the PostalAddress of the UltimateCreditor party. All address details are optional. See the general General methods for postal addresses and contact details section.
Developers Manual SEPA SCT DotNet Module ~ EULA 19 SetContactDetailsOnUltimateDebtor Sets the CtctDtls (ContactDetails) property on the UltimateCreditor party. Create UltimateCreditor before using this method. All arguments are optional. See the general General methods for postal addresses and contact details section. SetContactDetailsOnDebtor Sets the CtctDtls (ContactDetails) property on the Creditor party. Create UltimateCreditor before using this method. All arguments are optional. See the general General methods for postal addresses and contact details section. SetCategoryPurposeByCode The CategoryPurpose specifies the high level purpose of the instruction based on a set of pre defined categories. Usage ISO: This is used by the initiating party to provide information concerning the processing of the payment. It is likely to trigger special processing by any of the agents involved in the payment chain. Usage EPC: Depending on the agreement between the Creditor and the Creditor Bank, Category Purpose may be forwarded to the Debtor Bank. This method sets the CategoryPurpose by code. Code: Category purpose, as published in an external category purpose code list. Minimum length: 1; maximum length: 4 SetCategoryPurposeInProprietaryForm The CategoryPurpose specifies the high level purpose of the instruction based on a set of pre defined categories. Usage ISO: This is used by the initiating party to provide information concerning the processing of the payment. It is likely to trigger special processing by any of the agents involved in the payment chain. Usage EPC: Depending on the agreement between the Creditor and the Creditor Bank, Category Purpose may be forwarded to the Debtor Bank. This method permits setting the CategoryPurpose in a proprietary form. purposeinproprietaryform: Category purpose, in a proprietary form. Minimum length: 1; maximum length: 35
Developers Manual SEPA SCT DotNet Module ~ EULA 20 SetPaymentTypeInformation All arguments are optional. In all cases this method creates a PaymentTypeInformation element with ServiceLevel = SEPA (The only allowed value and recommended by EPC usage). The optional arguments set extra data on the PaymentTypeInformation element. One of the arguments localinstrumentcode and localinsturmentproprietary must be null. One of the arguments categorypurposecode and categorypurposeproprietary must be null. LocalInstrument: this element is used to specify a local instrument, local clearing option and/or further qualify the service or service level (NL usage: only use in case of bilateral agreement). CategoryPrupose: specifies the high level purpose of the instruction based on a set of pre defined categories. This is used by the initiating party to provide information concerning the processing of the payment. It is likely to trigger special processing by any of the agents involved in the payment chain. priority: Indicator of the urgency or order of importance that the instructing party would like the instructed party to apply to the processing of the instruction (HIGH or NORMAL). Usage EPC: If present, pre agreed customer tobank conditions apply. localinstrumentcode: Specifies the local instrument, as published in an external local instrument code list. Maximum 35 characters. localinsturmentproprietary: Specifies the local instrument, as a proprietary code. Maximum 35 characters. categorypurposecode: Category purpose, as published in an external category purpose code list. Maximum 4 characters. categorypurposeproprietary: Category purpose, in a proprietary form. Maximum 35 characters.
DDTransactionFactory Developers Manual SEPA SCT DotNet Module ~ EULA 21 Constructor Creates a CreditTransferTransactionInformation10 object with all mandatory elements. After creating this factory set any additional elements directly or by using the factory methods. Finally call ValidateTransactionInformation() to validate and automatically add the transaction to its batch in the given paymentinfofactory. paymentinfofactory: The factory that contains the parent of this CTTransactionInfo. endtoendid: Unique identification assigned by the initiating party to unambiguously identify the transaction. This identification is passed on, unchanged, throughout the entire end to end chain. Max 35 characters. Can be used for reconciliation or to link tasks relating to the transaction. It can be included in several messages related to the transaction. amount: The transaction amount must be 0.01 or more and 999999999.99 or less. Maximun of two fractional digits. creditorname: Name identifying the debtor creditoriban: IBAN 2007 Identifier (regular expression format: [A Z]{2,2}[0 9]{2,2}[a za Z0 9]{1,30}) creditorbic: BIC code of deptor (regular expression format: [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1}). ValidateTransactionInformation Validates all elements of the TransactionInformation. If the validation returns errors, these are logged and a List of ValidationError objects is returned. The logfile contains the endtoendid argument given in the constructor of this CTTransactionFactory. It is possible to continue adding new transactions (the erroneous transaction is skipped in the SCT file). If no rules were violated the transaction is added to the PaymentInformation and null is returned. : none
Developers Manual SEPA SCT DotNet Module ~ EULA 22 SetUnstructuredRemittanceInformation Although optional, it is advised to use this method. It greatly helps the debtor understand the nature of the transfer in his account reports. Adds a line of unstructured remittance information. This information is used to enable the matching/reconciliation of an entry with the items that the payment is intended to settle, such as commercial invoices in an accounts' receivable system, in an unstructured form. remittanceinformation: Only one item is allowed, so repeated use on the same CT transaction overwrites the previous item. For use in NL position 1 35 should contain merchant reference (Kenmerk:...). Postions 36 140 may contain a free text specification of the payment (Omschrijving:...). SetUltimateDebtorByScheme Sets UltimateDebtor object on which one Other item is set containing scheme id information ; setting the party Name is optional. setasprivateidentification: Determines if an OrganisationIdentifiction or a PrivateIdentification is used. identification: Identification assigned by an institution (max 35 characters) (if identification is null the output will also be null). issuer: Entity that assigns the identification (max 35 characters). schemename: Two possibilities, depending on the schemenametype setting: Possiblity 1 (Code): Name of the identification scheme, in a coded form as published in an external list (max 4 characters). Possiblity 2 (Proprietary): Name of the identification scheme, in a free text form. (max 35 characters). schemenametype: Enumeration values: Code or Proprietary. Indicates if schemename possiblity 1 or 2 is used. name: Optional name of the identifying party.
Developers Manual SEPA SCT DotNet Module ~ EULA 23 SetUltimateDebtorByBICOrBEI Sets the Ultimate Debtor by BIC code. Creates a PartyIdentification32 object on which BICOrBEI is set (in an OrganisationIdentifiction object); setting the party Name is optional. BICOrBEI: Code allocated to organisations by the ISO 9362 Registration Authority, under an international identification scheme, as described in the latest version of the standard ISO 9362 Banking (Banking telecommunication messages, Bank Identifier Codes). Regular expression format: [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1} SetUltimateDebtorByBirthData Sets the UltimateDebtor with a PersonIdentification5 object on which the DtAdnPlcOfBirth (DateAndPlaceOfBirth) property has been set. birthdate: Birthday of the private person identifying himself. cityofbirth: City in which the private person identifying himself was born (max 35 characters). countryofbirth: Code of the country in which the private person identifying himself was born. See general section Country Codes for further details. provinceofbirth: Province in which the private person identifying himself was born (optional, max 35 characters). SetUltimateCreditorByBICOrBEI Sets the Ultimate Creditor by BIC code. Creates a PartyIdentification32 object on which BICOrBEI is set (in an OrganisationIdentifiction object); setting the party Name is optional. BICOrBEI: Code allocated to organisations by the ISO 9362 Registration Authority, under an international identification scheme, as described in the latest version of the standard ISO 9362 Banking (Banking telecommunication messages, Bank Identifier Codes). Regular expression format: [A Z]{6,6}[A Z2 9][A NP Z0 9]([A Z0 9]{3,3}){0,1}
Developers Manual SEPA SCT DotNet Module ~ EULA 24 SetUltimateCreditorByBirthData Sets the UltimateCreditor with a PersonIdentification5 object on which the DtAdnPlcOfBirth (DateAndPlaceOfBirth) property has been set. birthdate: Birthday of the private person identifying himself. cityofbirth: City in which the private person identifying himself was born (max 35 characters). countryofbirth: Code of the country in which the private person identifying himself was born. See general section Country Codes for further details. provinceofbirth: Province in which the private person identifying himself was born (optional, max 35 characters). SetPurposeByCode The transaction Purpose specifies the Underlying reason for the payment transaction. Usage ISO: Purpose is used by the end customers, that is initiating party, (ultimate) debtor, (ultimate) creditor to provide information concerning the nature of the payment. Purpose is a content element, which is not used for processing by any of the agents involved in the payment chain. This method sets the Purpose by code. Code: Purpose code, as published in an external category purpose code list. Minimum length: 1; maximum length: 4 SetCreditorPostalAddress Sets the PostalAddress of the creditor. All address details are optional. Usage of this method is optional, but address details might help solve downstream transaction problems. See the general General methods for postal addresses and contact details section. SetDutchBetalingskenmerkAsStructuredRemittanceInformation Sets all elements necessary for a structured Dutch Betalingskenmerk (following the Usage NL rules). betalingskenmerk: The Dutch Betalingskenmerk. Must comply to all existing rules for a structured Dutch Betalingskenmerk (this is not validated here).
Developers Manual SEPA SCT DotNet Module ~ EULA 25 Code example The following example creates the SCT file example given in Annex F of Example message of XML message for SEPA Credit Transfer Initiation Implementation Guidelines for the Netherlands, version 7.0 (Betaalvereniging Nederland). It is important to notice that the first batch with one transaction (minimal data) represents the regular situation. The second batch contains much more data just to show the possibilities. using SEPA.Base; using SEPA.SCT; using SEPA.SCT.Factories; using SEPA.SCT.General; string licensekey = "MyTrialOrPermanentLicenceKey"; string filenamewithoutextension = "SCT_Test"; string sepafiledirectory = "SepaFiles"; string logdirectory = "SepaFiles"; string messageid = "message id 001"; string initiatingpartyname = "Bedrijfsnaam"; string initiatingpartycountryofresidence = null; //Create main factory. SCTFactory sctfactory = new SCTFactory( licensekey, filenamewithoutextension, sepafiledirectory, logdirectory, messageid, initiatingpartyname, initiatingpartycountryofresidence); List<ValidationError> errorlist = sctfactory.validategroupheader(); if (errorlist!= null) { chkerrorsct.checked = true; return; } //Create first minimalistic PaymentInformation (= transaction batche). // CTPaymentInformationFactory pifactory = new CTPaymentInformationFactory( sctfactory, "Minimaal gevuld", new DateTime(2009, 11, 01), "Naam", "NL44RABO0123456789", "RABONL2U", null); //Call the Validate mathod which also adds the PaymentInformation object to the main SCT factory. errorlist = pifactory.validatepaymentinformation(); if (errorlist!= null) { chkerrorsct.checked = true; return; } //Add one transaction to the PaymentInformation factory. // CTTransactionFactory transfactory = new CTTransactionFactory( pifactory, "non ref", 10.1M, "Naam creditor", "NL90ABNA0111111111", "ABNANL2A"); //Add extra details to the transaction. transfactory.setunstructuredremittanceinformation("vrije tekst"); //Instead of aborting on a transaction error, we automatically skip the transaction. //Skipped transactions will be found in the error log
Developers Manual SEPA SCT DotNet Module ~ EULA 26 errorlist = transfactory.validatetransactioninformation(); //Create a second PaymentInformation factory (= transaction batches). // pifactory = new CTPaymentInformationFactory( sctfactory, "Maximaal gevuld", new DateTime(2009, 11, 01), "Naam", "NL44RABO0123456789", "RABONL2U", true); //Add extra details on the batch level. pifactory.setpaymenttypeinformation(priority2code.norm, "IDEAL", null, "SECU", null); ItemChoiceType? schemenametype = ItemChoiceType.Prtry; pifactory.setultimatedebtorbyscheme(false, "12345678", "klantnummer uitgifte instantie", "klantnummer", schemenametype); pifactory.setpostaladdressondebtor(countrycode: "NL", addresslines: new List<string> { "Debtor straat 1", "9999 XX Plaats debtor" }); pifactory.setcategorypurposebycode("secu"); //Call the Validate mathod which also adds the PaymentInformation object to the main SCT factory. errorlist = pifactory.validatepaymentinformation(); if (errorlist!= null) { chkerrorsct.checked = true; return; } //Add one transaction to the PaymentInformation factory. // transfactory = new CTTransactionFactory( pifactory, "End to end id debtor to creditor 01", 20.2M, "Naam creditor", "NL90ABNA0111111111", "ABNANL2A"); //Add extra details to the transaction. transfactory.setinstructionidentificationonpaymentidentification("debtor to debtor bank 01"); transfactory.setcreditorpostaladdress(countrycode: "NL", addresslines: new List<string> { "Straat creditor 1", "9999 XX Plaats creditor" }); transfactory.setultimatecreditorbybirthdata(new DateTime(1969, 7, 3), "PLAATS", "NL"); transfactory.setpurposebycode("char"); transfactory.setdutchbetalingskenmerkasstructuredremittanceinformation("1234567"); //Validate, automatically skipping the transaction if it contains errors. transfactory.validatetransactioninformation(); //Create the SCT xml file in the given directory. sctfactory.createfile(); //Check on any validation errors with SCTFactory.HasErrors. If so decide which action to take...
Developers Manual SEPA SCT DotNet Module ~ EULA 27 The resulting SCT xml is as follows. Compare with the xml example in Annex F. Notice that the we have followed the ECP advise on placing ChargBearer=SLEV element on the PaymentInformation level and not on the Transaction level as in Annex F. <?xml version="1.0" encoding="utf 8"?> <Document xmlns:xsi="http://www.w3.org/2001/xmlschema instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"> <CstmrCdtTrfInitn> <GrpHdr> <MsgId>message id 001</MsgId> <CreDtTm>2013 02 20T19:41:23.6533286+01:00</CreDtTm> <NbOfTxs>2</NbOfTxs> <CtrlSum>30.3</CtrlSum> <InitgPty> <Nm>Bedrijfsnaam</Nm> </InitgPty> </GrpHdr> <PmtInf> <PmtInfId>Minimaal gevuld</pmtinfid> <PmtMtd>TRF</PmtMtd> <NbOfTxs>1</NbOfTxs> <CtrlSum>10.1</CtrlSum> <ReqdExctnDt>2009 11 01</ReqdExctnDt> <Dbtr> <Nm>Naam</Nm> </Dbtr> <DbtrAcct> <Id> <IBAN>NL44RABO0123456789</IBAN> </Id> </DbtrAcct> <DbtrAgt> <FinInstnId> <BIC>RABONL2U</BIC> </FinInstnId> </DbtrAgt> <ChrgBr>SLEV</ChrgBr> <CdtTrfTxInf> <PmtId> <EndToEndId>non ref</endtoendid> </PmtId> <Amt> <InstdAmt Ccy="EUR">10.1</InstdAmt> </Amt> <CdtrAgt> <FinInstnId> <BIC>ABNANL2A</BIC> </FinInstnId> </CdtrAgt> <Cdtr> <Nm>Naam creditor</nm> </Cdtr> <CdtrAcct> <Id> <IBAN>NL90ABNA0111111111</IBAN> </Id> </CdtrAcct> <RmtInf> <Ustrd>vrije tekst</ustrd> </RmtInf> </CdtTrfTxInf> </PmtInf> <PmtInf> <PmtInfId>Maximaal gevuld</pmtinfid> <PmtMtd>TRF</PmtMtd> <BtchBookg>true</BtchBookg> <NbOfTxs>1</NbOfTxs> <CtrlSum>20.2</CtrlSum> <PmtTpInf> <InstrPrty>NORM</InstrPrty> <SvcLvl> <Cd>SEPA</Cd>
Developers Manual SEPA SCT DotNet Module ~ EULA 28 </SvcLvl> <LclInstrm> <Cd>IDEAL</Cd> </LclInstrm> <CtgyPurp> <Cd>SECU</Cd> </CtgyPurp> </PmtTpInf> <ReqdExctnDt>2009 11 01</ReqdExctnDt> <Dbtr> <Nm>Naam</Nm> <PstlAdr> <Ctry>NL</Ctry> <AdrLine>Debtor straat 1</AdrLine> <AdrLine>9999 XX Plaats debtor</adrline> </PstlAdr> </Dbtr> <DbtrAcct> <Id> <IBAN>NL44RABO0123456789</IBAN> </Id> </DbtrAcct> <DbtrAgt> <FinInstnId> <BIC>RABONL2U</BIC> </FinInstnId> </DbtrAgt> <UltmtDbtr> <Id> <OrgId> <Othr> <Id>12345678</Id> <SchmeNm> <Prtry>klantnummer</Prtry> </SchmeNm> <Issr>klantnummer uitgifte instantie</issr> </Othr> </OrgId> </Id> </UltmtDbtr> <ChrgBr>SLEV</ChrgBr> <CdtTrfTxInf> <PmtId> <InstrId>debtor to debtor bank 01</InstrId> <EndToEndId>End to end id debtor to creditor 01</EndToEndId> </PmtId> <Amt> <InstdAmt Ccy="EUR">20.2</InstdAmt> </Amt> <CdtrAgt> <FinInstnId> <BIC>ABNANL2A</BIC> </FinInstnId> </CdtrAgt> <Cdtr> <Nm>Naam creditor</nm> <PstlAdr> <Ctry>NL</Ctry> <AdrLine>Straat creditor 1</AdrLine> <AdrLine>9999 XX Plaats creditor</adrline> </PstlAdr> </Cdtr> <CdtrAcct> <Id> <IBAN>NL90ABNA0111111111</IBAN> </Id> </CdtrAcct> <UltmtCdtr> <Id> <PrvtId> <DtAndPlcOfBirth> <BirthDt>1969 07 03</BirthDt> <CityOfBirth>PLAATS</CityOfBirth> <CtryOfBirth>NL</CtryOfBirth>
Developers Manual SEPA SCT DotNet Module ~ EULA 29 </DtAndPlcOfBirth> </PrvtId> </Id> </UltmtCdtr> <Purp> <Cd>CHAR</Cd> </Purp> <RmtInf> <Strd> <CdtrRefInf> <Tp> <CdOrPrtry> <Cd>SCOR</Cd> </CdOrPrtry> <Issr>CUR</Issr> </Tp> <Ref>123456</Ref> </CdtrRefInf> </Strd> </RmtInf> </CdtTrfTxInf> </PmtInf> </CstmrCdtTrfInitn> </Document>
Developers Manual SEPA SCT DotNet Module ~ EULA 30 EULA SOFTWARE PRODUCT LICENCE AGREEMENT SEPA SDD-DotNet and SCT-DotNet modules, Version 4.0 and higher IMPORTANT-READ CAREFULLY: This End User License Agreement ("EULA") is a legal agreement between YOU as Licensee and Turbo FrontOffice for the SOFTWARE PRODUCT identified above. By installing, copying, or otherwise using the SOFTWARE PRODUCT, YOU agree to be bound by the terms of this EULA. Subject to the terms of this EULA, YOU are granted a non-exclusive right for the duration of the EULA to use the SOFTWARE PRODUCT. YOU do not acquire ownership of any intellectual property rights in any part of the SOFTWARE PRODUCT by virtue of this EULA. Your use of this software indicates your acceptance of this EULA and warranty. DEFINITIONS In this End User License Agreement, unless the contrary intention appears, "EULA" means this End User License Agreement "Turbo FrontOffice" means the enterprise Turbo FrontOffice, registered with the Chamber of Commerce of s-hertogenbosch, Netherlands. "Licensee" means YOU, or the organization (if any) on whose behalf YOU are taking the EULA. "Registered Edition of the SEPA DotNet Module" means the edition of the SOFTWARE PRODUCT which is available for purchase from one of the Turbo FrontOffice owned web sites following the thirty day free evaluation period. "SOFTWARE PRODUCT" or "SOFTWARE" means any fully functioning SEPA DotNet Module edition, which includes computer software and associated media and printed materials, and may include online or electronic documentation. "Support Services" means email based support provided by Turbo FrontOffice, including advice on usage of the software, investigation of bugs, fixes if and when appropriate and general product support. "Turbo FrontOffice support engineers" means employees of Turbo FrontOffice who provide on-line support services. "Trial edition " means the edition of the SOFTWARE PRODUCT which is available free of charge for evaluation purposes for a period of 30 days. "SEPA SDD and SCT" refers to a common xml file format to upload transaction instructions to banks according to the SEPA standards. GRANT OF LICENCE In accordance with the terms of this EULA YOU are granted the following rights for development purposes with this SOFTWARE PRODUCT: a) to install and use one copy of the SOFTWARE PRODUCT, or in its place, any prior version for the same operating system, on a single computer. As the primary user of the computer on which the SOFTWARE PRODUCT is installed, YOU may make a second copy for your exclusive use on either a home or portable computer. b) to store or install a copy of the SOFTWARE PRODUCT on a storage device, such as a network server, used only to install or run the SOFTWARE PRODUCT over an internal network. c) to make copies of the SOFTWARE PRODUCT for backup and archival purposes. This SOFTWARE PRODUCT and it s license key may only be distributed as a module in any financial software product YOU develop if you posess a special Commercial Distribution version of the license. If you build custom financial software for use by one single customer the regular license applies, the Being so, your customers are not allowed to use this SOFTWARE PRODUCT for development purposes. Updates After purchase of a SEPA DotNet module license you are entitled to download and use all updates released within 2 years of your purchase, you are entitled to receive a new license key free of charge corresponding to the new release. You are responsible to request this new license key by e-mail. EVALUATION LICENCE. The Trial version of the SEPA DotNET modules is not free software. Subject to the terms of this agreement, YOU are hereby licensed to use this software for evaluation purposes without charge for a period of 30 days. Upon expiration of the 30 days, the Software Product must be removed from the computer. Turbo FrontOffice may extend the evaluation period on request and at it s own discretion. If YOU choose to use this software for development purposes after the 30 day evaluation period a license must be purchased. Upon payment of the license fee, YOU will be provided with a suitable software 'key' by email. ADDITIONAL RIGHTS AND LIMITATIONS. YOU may not rent, lease, translate, adapt, vary, modify, decompile, disassemble, reverse engineer, create derivative works of, modify, sub-license or loan the SOFTWARE PRODUCT. YOU may only distribute the license key and the SOFTWARE PRODUCT as part of a financial software product YOU have incorporated it in if YOU own the Commercial Distribution version of the license. You may not distribute it for development use by another party. Opensource licence. The regular license is related to the compiled code module. In exceptional cases an opensource licence can be granted. All paragraphs of this EULA also apply to the opensource license with the following exceptions: 1. For use in your own company you may adapt the source code as you wish, except for the following clause: 2. YOU are not allowed to adopt the software in such a way that the license key is no longer needed. 3. Without written permission by Turbo FrontOffice YOU are not allowed to incorporate an adapted version in financial software you sell to your customers. 4. YOU may never give the source code to a third party.
Developers Manual SEPA SCT DotNet Module ~ EULA 31 ASSIGNMENT YOU may only assign all your rights and obligations under this EULA to another party if YOU supply to the transferee a copy of this EULA and all other documentation including proof of ownership. You must notify Turbo FrontOffice of this transaction, including the name and e-mail address of the new owner. Turbo FrontOffice will then send the new owner a new license key registered on the name of the new owner. Only with this new license key may the new owner start developing financial applications with this SOFTWARE PRODUCT. TERMINATION Without prejudice to any other rights, Turbo FrontOffice may terminate this EULA if YOU fail to comply with the terms and conditions. Upon termination YOU or YOUR representative shall immediately stop the production of new versions containing this SOFTWARE PRODUCT. WARRANTIES AND LIABILITY. WARRANTIES Turbo FrontOffice warrants that the SOFTWARE PRODUCT will perform substantially in accordance with the accompanying written materials for at least a period of one year from the date of receipt, and any Support Services provided by Turbo FrontOffice shall be substantially as described in applicable written materials provided to YOU by Turbo FrontOffice, and Turbo FrontOffice support engineers will make commercially reasonable efforts to solve any problems associated with the SOFTWARE PRODUCT. You must be aware that each bank can add its own rules of use to the SEPA standards. YOU are responsible for all communication with your bank to obtain details about the bank s application of the SEPA standard. YOU are responsible for all testing efforts to detect and solve all issues in your financial software that arise from non-standard application of the SEPA standards by your bank. EXCLUSIONS To the maximum extent permitted by law, Turbo FrontOffice excludes, for itself all liability for all claims, expenses, losses, damages and costs made against or incurred or suffered by YOU directly or indirectly (including without limitation lost costs, profits and data) arising out of: YOUR use or misuse of the SOFTWARE PRODUCT; YOUR inability to use or obtain access to the SOFTWARE PRODUCT; Negligence of Turbo FrontOffice or its employees, contractors or agents in connection with the performance of Turbo FrontOffice s obligations under this EULA; or Termination of this EULA by either party for any reason. LIMITATION The SOFTWARE PRODUCT and any documentation are provided "AS IS" and all warranties whether express, implied, statutory or otherwise, relating in any way to the subject matter of this EULA or to this EULA generally, including without limitation, warranties as to: quality, fitness; merchantability; correctness; accuracy; reliability; correspondence with any description or sample, meeting your or any other requirements; uninterrupted use; compliance with any relevant legislation and being error or virus free are excluded. Where any legislation implies in this EULA any term, and that legislation avoids or prohibits provisions in a contract excluding or modifying such a term, such term shall be deemed to be included in this EULA. However, the liability of Turbo FrontOffice for any breach of such term shall if permitted by legislation be limited to the maximum reimbursement of an amount equal to two times the purchase cost of the SOFTWARE PRODUCT. TRADEMARKS. All names of products and companies used in this EULA, the SOFTWARE PRODUCT, or the enclosed documentation may be trademarks of their corresponding owners. Their use in this EULA is intended to be in compliance with the respective guidelines and licenses. GOVERNING LAW This agreement shall be construed in accordance with the law