| Status | |
|---|---|
| Owner | The person responsible for driving this decision and documenting it. Type @ to mention people by name |
| Stakeholders | The business stakeholders involved in making, reviewing, and endorsing this decision. Type @ to mention people by name |
| Jira Request ID | |
| Jira Development ID |
| Parameter | Value |
|---|---|
| Application System (Source) | SAP ECC (PRS, PF2-050) |
| Application System ( Target) | CPI |
| Business Process Reference | <TBC> |
The purpose of this interface is to extract latest Exchange Rate data from the SAP ECC (PRS / PF2-client 050 ) and send to SAP Cloud Integration (CPI).
SAP Ariba and ICertis require Exchange Rates updated on a regular basis to carry out the business functions associated with Procurement business Processes. These two systems do not have a direct source for Exchange rates and this System Interface enables Exchange rates persisted in ECC to be synchronised with them. SAP PRS receives an update 5 days a week from Reuters, and this System Interface extracts the Standard Exchange rates ( M rates ) from ECC tables after they are updated, normalises the rates by applying conversion factors, calculates inverse and cross rates, and then pushes the data to CPI. CPI then transforms the content to suite the receiver system specifications.
This System Interface, a custom implementation in SAP ECC, sends:
ECC carries out all rate calculations, so that there will be no discrepancies due to rounding . CPI is only responsible for routing and mapping to the target structures.

Step | Description | Comment |
|---|---|---|
1 | The Custom Program implemented by the System Interface reads the Exchange Rates from TCURR | TCURR table contains Exchange Rates of type M created by processing the Reuters file. Both Ariba and ICertis are interested in the M rates only |
2 | The Program harmonises the rates by applying any conversion factors and calculates inverses and cross rates, the maps the data to a defined simple structure | SAP ECC and CPI will share a simple schema for enable data mapping as required |
3 | The Program invokes a service (via a Proxy or a Service Client) and sends the data to a CPI end-point | CPI provides a service to receive the data. |
4 | CPI receives the data and initiates IFlow(s) to process them | |
5 | The IFlows transforms the data as required by the Processing Systems | |
6 | SAP CPI invokes the outbound services to send the data for processing in Receiver Systems | See ERP-111 for details on processing in Ariba to upload the data See ERP-290 for details on processing in ICertis to upload data |
The rationale of this System Interface is to provide a simple but reliable asynchronous flow of Exchange Rate data from SAP ECC to SAP CPI. The interface is implemented as a custom ABAP report that constructs and posts an XML payload directly to a CPI.
The program retrieves exchange rate data from standard SAP tables TCURR, but also uses data in other support tables like TCURF, and TCURV. The program selects only M rates, which are saved as indirect rates. For each rate, the system applies conversion factors and calculates the direct (inverse) rate, rounded to 10 decimal points. The output XML is structured in a flat format, reducing the need for further mapping or transformation in CPI.
The process is scheduled to run once daily, after the Reuters exchange rate upload job completes, ensuring that downstream systems such as SAP Ariba receive consistent and current financial rates aligned with ECC’s valuation dates.
There are no API use in this System Interface. The Interface uses a HTTP Service to push the data to CPI.
The output consists of a flat XML structure:

Schema File: ExchangeRateSchemaECC.xsd
Sample structure example in XML:
<?xml version="1.0" encoding="UTF-8"?>
<ExchangeRates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ExchangeRate>
<FromCurrency>EUR</FromCurrency>
<ToCurrency>USD</ToCurrency>
<RateIdentifier>EUR:USD</RateIdentifier>
<ValidFrom>2025-09-30</ValidFrom>
<Rate>1.1743500000</Rate>
</ExchangeRate>
<ExchangeRate>
<FromCurrency>USD</FromCurrency>
<ToCurrency>EUR</ToCurrency>
<RateIdentifier>USD:EUR</RateIdentifier>
<ValidFrom>2025-09-30</ValidFrom>
<Rate>0.8515348916</Rate>
</ExchangeRate>
</ExchangeRates> |
The following fields will be used to provide the required data structure of the interface:
| Node | Element | Description | Mandatory (Y/N) | Data Type |
|---|---|---|---|---|
| ExchangeRate | FromCurrency | From Currency Code. This is the from Currency Code. For Indirect rates, this is always EUR | Yes | 3 character String |
| ExchangeRate | ToCurrency | To Currency Code. | Yes | 3 character String |
| ExchangeRate | RateIdentifier | Identifier used in both Ariba and ICertis | Yes | String |
| ExchangeRate | ValidFrom | The Date from TCURR table | Yes | XML Date type ('YYYY-MM-DD') |
| ExchangeRate | Rate | Exchange Rate | Yes | With 10 decimal points |
Only "M" type rates are mapped
| Node | Element | Rule Type | Rule Instruction | Example Value |
|---|---|---|---|---|
| ExchangeRate | FromCurrency | Copy | Get value from TCURR-TCURR | Always EUR |
| ExchangeRate | ToCurrency | Copy | Get value from TCURR-FCURR | USD |
| ExchangeRate | RateIdentifier | Combine Strings | Concatenate values from TCURR-TCURR and TCURR-FCURR, separated by a colon. | EUR:USD |
| ExchangeRate | ValidFrom | Format | Transform value TCURR-GDATU to XML date format | 2025-09-30 |
| ExchangeRate | Rate | Calculate and format | Remove Indirect indicator, multiply by the Factors as below: Rate = (TCURR-UKURS indirect indicator removed) x TCURR-FFACT / TCURR-TFACT | 1.1743500000 |
Direct rates are calculated by taking the inverse of the Indirect rates calculated in the previous table.
| Node | Element | Rule Type | Rule Instruction | Example Value |
|---|---|---|---|---|
| ExchangeRate | FromCurrency | Copy | Value from TCURR-FCURR | USD |
| ExchangeRate | ToCurrency | Copy | Value from TCURR-TCURR | Always EUR |
| ExchangeRate | RateIdentifier | Concatenate | Concatenate values from TCURR-FCURR and TCURR-TCURR, separated by a colon. | USD:EUR |
| ExchangeRate | ValidFrom | Format | Transform value TCURR-GDATU to XML date format | 2025-09-30 |
| ExchangeRate | Rate | Calculate | Calculate the Inverse of the corresponding Indirect rate | 0.8515348916 |
This is required for all Indirect rates. Each of the Currency require a Cross with the other Currencies, as well as the inverse.
| Node | Element | Rule Type | Rule Instruction | Example |
|---|---|---|---|---|
| ExchangeRate | FromCurrency | Copy | Use ToCurrency from the calculated Indirect Rates | USD |
| ExchangeRate | ToCurrency | Copy | Use ToCurrency from the calculated Indirect Rates. There will be an entry for each of the ToCurrency values except for Currency Code in the above row | AUD |
| ExchangeRate | RateIdentifier | Concatenate | Concatenate values of the two Currency Codes (Both are from TCURR-FCURR column), separated by a colon. | USD:AUD |
| ExchangeRate | ValidFrom | Format | Transform value TCURR-GDATU to XML date format | 2025-09-30 |
| ExchangeRate | Rate | Calculate | Calculate the cross rate by dividing Indirect rate of the ToCurrency in this row by the Indirect Rate of the From Currency in this row. For Example, if calculating USD (FromCurrency) to AUD (ToCurrency), USD:AUD = EUR:AUD / EUR:USD | 1.5129864600 |
The list of Currencies to be extracted are found here: Currency_List_ERP_110.txt
The integration will upload all M rates valid for the date
<TBC with BJ>
No Language Requirements
No User Interface Requirements
Each Integration contain entries for all Indirect rates, their inverses, and cross rates with the other Indirect rates. At the moment there are 70 Exchange Rates in the Reuters file, therefore this Integration produces an output containing 4,970 rates.
<To be confirmed with BJ>
<To be confirmed with BJ>
Test Conditions and Expected Results
| ID | Condition | Expected Results |
|---|---|---|
| ERP-110-UT-001 | Defined set of Exchange Rates are available in the output to CPI | For the given set of Exchange rates, Indirect Rates, their Inverses and cross rates are available in the output |
| ERP-110-UT-002 | A new Currency has been configured | The output includes the new Currency, its inverse and cross rate with other exchange rates |
| ERP-110-UT-003 | A currency is removed from the configuration list | The output does not contain the currency |
Not Applicable
| Package Name | Parent Package |
|---|---|
Other Development Objects
| Object Type | Object Name | Purpose/High Level Logic | Design Rationale Reference |
|---|---|---|---|
Insert links and references to other documents which are relevant when trying to understand this decision and its implications. Other decisions are often impacted, so it's good to list them here with links. Attachments are also possible but dangerous as they are static documents and not updated by their authors.
