Skip to main content

EFT data file

This specification defines the generic XML interface for EFT transactions of ReconHub. You will find all required and optional fields and their desired formats further below. Besides XML, ReconHub also supports CSV format. Please contact support in this case.

Data exchange / file delivery

The EFT data files must be submitted periodically to ReconHub. ReconHub provides an SFTP server as the preferred option. Please contact your project manager at Abrantix to receive your credentials to access our SFTP server. If you already have a data exchange platform or if you prefer another technology, please let us know. In this case, we will determine the best way forward.

Notes and Constraints

  • Each line is separated with a CR & LF (0x0D & 0x0A).
  • [UTF8] encoding is used for EFT data files.
  • Except for line breaks, non-visible and functional characters are not allowed.
  • Root element of the XML file must be called EftTransactions. The default namespace must be "http://www.abrantix.com/recon/eftTransaction/v1".
  • The root element may contain an array of <EftTransaction> elements, each of which corresponds to a single EFT transaction. See Example below.
  • For certain amount fields, the XML element should contain an attribute called currency that provides the 3-letter currency code of the amount according to [ISO4217]. See Fields to find the amount fields that require the currency attribute.

Data types

The following table shows the used data types for the EFT data file.

FormatDescriptionExample
amtAmount, with a total of 19 digits and 4 fraction digits.
Amounts are always specified in the interface as decimal values in the main unit of the corresponding currency. The subunit is a decimal fraction (usually one hundredth) of the value of the main unit. '.' (dot) must be used as the decimal separator.
Amounts must not contain thousands separators.
Leading or trailing zeros, as well as the decimal separator for integer values, can be omitted.
All amounts in the interface must always be interpreted with a +/- sign, where
  • positive amounts are in favour of the merchant
  • negative amounts are at the expense of the merchant
The sign for positive amounts can be omitted.
-98341.15
datDefines a date in [ISO8601] format.2018-06-21
dtoDefines a date including optional offset relative to Coordinated
Universal Time (UTC). Formatted according to [ISO8601]:
For format and examples can be found under Datetime formats.
2018-06-06T12:11:25+01:00
2018-06-06T12:11:25Z
2018-06-06T12:11:25
numInteger number without decimal and thousands separator81231
strUnicode string dataCHF Test123 ABC

Legend

AbbreviationNameDescription
CConditionalThe value of the field is based on a condition.
MMandatoryThe field must be provided in the file.
OOptionalThe field is optional.
RRecommendedIf the data is available, the field should be filled. The reconciliation of the transaction can be more precise with this field.

Fields

The table below shows all available fields (XML elements) that can be provided for an EFT transaction and their conditions. They should be the child elements of <EftTransaction> element.

NumberElement nameDescriptionMandatoryFormatLength
1UniqueIdentifierUnique identifier of the transaction. Used to detect duplicates. For instance, a unique identifier can be generated by concatenating certain fields of transaction like TerminalId, TransactionDate, TransactionAmount, TransactionReference, Authorisation Code etc. (e.g. 123456|2023-05-09T14:02:03+02:00|2.34|BFP452124A54X09|56XC2B). See also Mapping for EFT transaction field UID.Mstr
2TerminalIdIdentifier of the terminal.
Note: Either TerminalId or LocationId must be provided. See also Mapping for EFT transaction field Terminal.
Cstr100
3LocationIdUsed to identify the physical location of the terminal. Can be the cash register number or the store ID.Cstr100
4TransactionAmountAmount of the transaction.
Note: Element must contain currency attribute.
Mamt19,4
5TransactionDateDate on which the transaction was executed on the EFT/POS terminalMdto
6FeeAmountFee for the transaction.
Note: Element must contain currency attribute.
Ramt19,4
7SettlementAmountAmount to be settled by the payment processor for the transaction.
Note: Element must contain currency attribute.
Mamt19,4
8SettlementGrossAmountGross amount of the settlementOamt19,4
9SettlementNetAmountNet amount of the settlementOamt19,4
10AuthorisationCodeAuthorisation code of the transactionOstr50
11CardNumberMaskedMasked PAN (application primary account number)Rstr20
12AcquirerIdPayment processor identifier of the transaction. See also Mapping for EFT transaction field AcquirerMstr30
13BrandIdBrand identifier of the transaction. See also Mapping for EFT transaction field BrandMstr30
14SettlementIdSettlement identifier for the transactionRstr50
15AcquirerPaymentDateDate of payment by the payment processorRdat
16TransactionReferencePayment Processor Reference NumberRstr75
17TransactionSequenceCounterTransaction sequence number maintained by the terminal, which is increased by one for each transaction. The terminal guarantees that this counter is unique per terminal. This field can also be used for the system traced audit number (STAN).Rnum50
18MerchantIdMerchant Identification Number is a unique code given to a business unitRstr100
19OrderIdThe merchant’s reference number. This is typically generated by the merchant’s ordering system. Also known as Merchant Order ID.Rstr50
20ContractNumberContract number for the transactionOstr100
21TransactionTypesThis element can contain an array of transaction types that apply to the transaction. See Example below.
Possible values:
  • Chargeback
  • FinancialAdjustment
The transaction type is purely indicative and does not define the direction of the cash flow or the sign of amounts.
Ostr
22AdditionalDatasThis element can be used to provide an array of additional data fields related to the transaction. This can be used to provide custom data by the merchant for their transactions (e.g. merchant specific IDs). These values can later be used for the reconciliation and posting of this transaction.
For each <AdditionalData> element, attributes key (required) and type (optional) can be used to define the field name and type respectively.
Possible values for type are:
  • Char
  • String
  • Decimal
  • Int32
  • Int64
  • UInt64
  • DateTime
See Example below.
O

Mapping

This section describes how the fields of an EFT data file are mapped to a ReconHub EFT transaction. Only fields that use a conversion or a lookup mechanism are listed. Fields that are simple one-to-one mappings are not listed here. These fields should be self-explanatory.

EFT transaction fieldDescription
AcquirerThe payment processor of the transaction is resolved to an internal ID using the payment processor list. All supported values can be found in the dedicated payment processor list. If the given payment processor ID is not defined in the list, the payment processor is set to Unknown.
BrandThe brand of the transaction is resolved to an internal ID using the brand list. All supported values can be found in the dedicated brand list. If the given Brand ID is not defined in the list, the brand is set to Unknown.
TerminalThe terminal is resolved using the field TerminalId. If the terminal with the given Terminal ID is not found, the terminal is resolved using the field LocationId.
UIDThe UID is calculated using the field UniqueIdentifier. Records with the same UID are considered identical.
If an EFT transaction with the same UID already exists in the file or in ReconHub, the new transaction is recognized as a duplicate and will be ignored.

Example

EFT data (XML) file

<?xml version="1.0" encoding="utf-8"?>
<EftTransactions xmlns="http://www.abrantix.com/recon/eftTransaction/v1">
<EftTransaction>
<UniqueIdentifier>UID-1</UniqueIdentifier>
<TerminalId>123456</TerminalId>
<TransactionAmount currency="CHF">2.34</TransactionAmount>
<TransactionDate>2023-05-09T14:02:03+02:00</TransactionDate>
<FeeAmount currency="CHF">0.2</FeeAmount>
<SettlementAmount currency="CHF">2.14</SettlementAmount>
<SettlementGrossAmount>2.34</SettlementGrossAmount>
<SettlementNetAmount>2.14</SettlementNetAmount>
<AuthorisationCode>56XC2B</AuthorisationCode>
<CardNumberMasked>12345xxxxxxxxx6789</CardNumberMasked>
<AcquirerId>TestAcquirer</AcquirerId>
<BrandId>Mastercard</BrandId>
<SettlementId>ABR.RE2305.004</SettlementId>
<AcquirerPaymentDate>2023-10-21</AcquirerPaymentDate>
<TransactionReference>BFP452124A54X09</TransactionReference>
<TransactionSequenceCounter>006589</TransactionSequenceCounter>
<MerchantId>Merchant</MerchantId>
<OrderId>MRCHNT-3300-230509-XBPA84G</OrderId>
<ContractNumber>003300</ContractNumber>
<TransactionTypes>
<TransactionType>FinancialAdjustment</TransactionType>
</TransactionTypes>
<AdditionalDatas>
<AdditionalData key="ProductCodes">0171 / 0173 / other</AdditionalData>
<AdditionalData key="Source">My Source 2</AdditionalData>
<AdditionalData key="Comment">Financial adjustment due to reason X</AdditionalData>
</AdditionalDatas>
</EftTransaction>
<EftTransaction>
<UniqueIdentifier>UID-2</UniqueIdentifier>
<LocationId>123456</LocationId>
<TransactionAmount currency="EUR">2.34</TransactionAmount>
<TransactionDate>2023-05-09T14:02:03+02:00</TransactionDate>
<SettlementAmount currency="AUD">2.14</SettlementAmount>
<AcquirerId>SomeUnknown</AcquirerId>
<BrandId>Visa</BrandId>
<AdditionalDatas>
<AdditionalData key="UnitPrice" type="Decimal">0.8</AdditionalData>
<AdditionalData key="Kilometer" type="Int32">13579</AdditionalData>
</AdditionalDatas>
</EftTransaction>
</EftTransactions>

XSD for EFT data (XML) file

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema
attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.abrantix.com/recon/eftTransaction/v1"
xmlns:ax="http://www.abrantix.com/recon/eftTransaction/v1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!-- Simple types -->
<xs:simpleType name="amount">
<xs:restriction base="xs:decimal" />
</xs:simpleType>

<xs:simpleType name="currency">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2,3}"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="notEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="string50">
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="string75">
<xs:restriction base="xs:string">
<xs:maxLength value="75" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="string100">
<xs:restriction base="xs:string">
<xs:maxLength value="100" />
</xs:restriction>
</xs:simpleType>

<!-- Complex types -->
<xs:complexType name="amountWithCurrency">
<xs:simpleContent>
<xs:extension base="ax:amount">
<xs:attribute name="currency" type="ax:currency" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>

<!-- Eft Transactions structure -->
<xs:element name="EftTransactions">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="EftTransaction">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="UniqueIdentifier" type="ax:notEmptyString" />
<xs:element minOccurs="0" maxOccurs="1" name="TerminalId" type="ax:string100" />
<xs:element minOccurs="0" maxOccurs="1" name="LocationId" type="ax:string100" />
<xs:element minOccurs="1" maxOccurs="1" name="TransactionAmount" type="ax:amountWithCurrency" />
<xs:element minOccurs="1" maxOccurs="1" name="TransactionDate" type="xs:dateTime" />
<xs:element minOccurs="0" maxOccurs="1" name="FeeAmount" type="ax:amountWithCurrency" />
<xs:element minOccurs="1" maxOccurs="1" name="SettlementAmount" type="ax:amountWithCurrency" />
<xs:element minOccurs="0" maxOccurs="1" name="SettlementGrossAmount" type="xs:decimal" />
<xs:element minOccurs="0" maxOccurs="1" name="SettlementNetAmount" type="xs:decimal" />
<xs:element minOccurs="0" maxOccurs="1" name="AuthorisationCode" type="ax:string50" />
<xs:element minOccurs="0" maxOccurs="1" name="CardNumberMasked" type="ax:string50" />
<xs:element minOccurs="1" maxOccurs="1" name="AcquirerId" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="BrandId" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="SettlementId" type="ax:string50" />
<xs:element minOccurs="0" maxOccurs="1" name="AcquirerPaymentDate" type="xs:date" />
<xs:element minOccurs="0" maxOccurs="1" name="TransactionReference" type="ax:string75" />
<xs:element minOccurs="0" maxOccurs="1" name="TransactionSequenceCounter" type="ax:string50" />
<xs:element minOccurs="0" maxOccurs="1" name="MerchantId" type="ax:string100" />
<xs:element minOccurs="0" maxOccurs="1" name="OrderId" type="ax:string50" />
<xs:element minOccurs="0" maxOccurs="1" name="ContractNumber" type="ax:string100" />
<xs:element minOccurs="0" maxOccurs="1" name="TransactionTypes">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="TransactionType">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Chargeback" />
<xs:enumeration value="FinancialAdjustment" />
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="AdditionalDatas">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="AdditionalData">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="key" />
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Char" />
<xs:enumeration value="String" />
<xs:enumeration value="Decimal" />
<xs:enumeration value="Int32" />
<xs:enumeration value="Int64" />
<xs:enumeration value="UInt64" />
<xs:enumeration value="DateTime" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>