| Status | |
|---|---|
| Owner | |
| Stakeholders | |
| Jira Request ID | |
| Jira Development ID |
The objective of this specification is to create a custom integration that facilitates the transmission of Currency Exchange Rate Master data from SAP ECC (PRS, PF2-050) to Icertis so that currency exchange rates can be synchronized smoothly.
The integration ensures that Icertis always has up-to date currency and exchange-rate information essential for contract calculations and validations. This process performs the following functions.
This integration is triggered daily through a job scheduled in ECC to ensure that Icertis consistently receives the most recent exchange-rate information required for contract evaluation and processing.

| Step | Description | Comment |
|---|---|---|
| 1 | SAP ECC(PRS, PF2-050) will send the latest currency exchange rate xml data to CPI. | Daily batch job will send the data from SAP ECC to CPI via Proxy adapter Refer ERP-110 for more details. |
| 2 | CPI retrieves the existing data from Icertis via GET call and append the Icertis sysId for the existing records. | CPI invokes the Icertis API via GET call to retrieve existing currency exchange rate records along with their SysIds. CPI compares the fromCurrency value from Icertis records with the fromCurrency records received from SAP ECC. If a match is found, CPI appends the corresponding SysId, to the outbound payload for create/update operation. |
| 3 | CPI create/update the new/existing currency exchange rate records in Icertis | Create/Update of the currency exchange rate records in Icertis will be done using POST API call. |
Assumptions
Azure Application Registration
Since Icertis relies on Azure Active Directory as its identity provider (IdP), an application must be registered in Azure to enable OAuth 2.0 token generation and validation. This establishes trusted access between the middleware and the Icertis APIs.
The application registration includes defining the client ID, client secret, scope, and API permissions required to access the Icertis endpoints.
This interface is designed to enable seamless integration between SAP ECC (PRS, PF2-050), source system and Icertis the target system for currency and exchange-rate master data. The middleware orchestrates the data flow, ensuring accurate mapping, necessary transformation, and reliable end-to-end delivery.
Source Structure
The following fields will be used to define the required data structure of the interface:
Schema File: ExchangeRateSchemaECC.xsd
Sample Extract from SAP ECC (PRS, PF2-050):
| FromCurrency | ToCurrency | RateIdentifier | ValidFrom | Rate |
|---|---|---|---|---|
| USD | EUR | USD:EUR | 2025-11-10 | 0.8700000000 |
| SGD | EUR | SGD:EUR | 2025-11-10 | 0.6600000000 |
The currency conversion data generated by ERP-110 contains all exchange rates. Since Icertis requires only EUR-based rates, CPI filters and extracts only the EUR Direct conversion rates.
<?xml version="1.0" encoding="UTF-8"?> <ExchangeRates xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ExchangeRate> <FromCurrency>USD</FromCurrency> <ToCurrency>EUR</ToCurrency> <RateIdentifier>USD:EUR</RateIdentifier> <ValidFrom>2025-11-10</ValidFrom> <Rate>0.8700000000</Rate> </ExchangeRate> <ExchangeRate> <FromCurrency>SGD</FromCurrency> <ToCurrency>EUR</ToCurrency> <RateIdentifier>SGD:EUR</RateIdentifier> <ValidFrom>2025-11-10</ValidFrom> <Rate>0.6600000000</Rate> </ExchangeRate> </ExchangeRates> |
Target Structure
| Field | Description |
|---|---|
| ContractTypeName | Name of the Masterdata. |
| NextState | Indicates the state of the contract type. For currency exchange rate as there is no next state. |
| RequestIdentifier | Use “RequestIdentifier” to uniquely identify each item on the result endpoint’s response. |
| EndpointVersion | EndpointVersion” don’t have any default value set. Ensure to set it to a number. |
| UseExternalId | unique identifier for entities getting created from external systems. |
| SysId | Unique technical identifier of the record. |
| Name | Indicates from to currency pair. |
| ICMFromCurrency | Specifies the source currency for the exchange rate. |
| ICMToCurrency | Specifies the target currency for the exchange rate. |
| ICMRate | Source to Target currency Exchange rate. |
HasMoreData | Indicates if there is more data that can be accessed by going to next page. |
Mapping and Calculation
Transformation in CPI (Icertis required format):
| Source Table | Source Field | Required (Y/N/O) | Description | Target Field | Required (Y/N) | Description | Rule Type | Rule Instruction |
|---|---|---|---|---|---|---|---|---|
| NA | NA | NA | NA | ContractTypeName | Y | Name of the Masterdata | Fixed Value | ICMCurrencyExchangeRate |
| NA | NA | NA | NA | NextState | Y | indicates the state of the contract type. For currency exchange rate as there is no next state, pass always blank. | Fixed Value | Blank/Empty |
| NA | NA | NA | NA | RequestIdentifier | Y | Use “RequestIdentifier” to uniquely identify each item on the result endpoint’s response. This can be used to track the status of each job item of a bulk Job | Increment | Auto Increment (E.g.: 1,2,3) |
| NA | NA | NA | NA | EndpointVersion | Y | “EndpointVersion” don’t have any default value set. Ensure to set it to a number. The recommended value is 3 for best error handling and reporting. Supported values are 1, 2, and 3. 1 – Not recommended, 2 – Enables attribute validation, and 3 – Handles concurrency errors and enables attribute validation. | Fixed Value | 3 |
| NA | NA | NA | NA | UseExternalId | Y | unique identifier for entities getting created from external systems | Fixed Value | false |
| Icertis-GET API | Sysid | O | Unique Identifier of the existing currency exchange rate record. | SysId | Y | Unique technical identifier of the record | Conditional |
|
| NA | RateIdentifier | Y | Concatenated string of the two currency codes separated by by a colon. | Name | Y | indicates from to currency pair e.g. SGD:EUR | Copy | Direct mapping |
| NA | FromCurrency | Y | Specifies the source currency for the exchange rate | ICMFromCurrency | Y | Specifies the source currency for the exchange rate | Copy | Direct mapping |
| NA | ToCurrency | Y | Specifies the target currency for the exchange rate | ICMToCurrency | Y | Specifies the target currency for the exchange rate | Copy | Direct mapping |
| NA | Rate | Y | Source to Target currency Exchange rate | ICMRate | Y | Source to Target currency Exchange rate | Copy | Direct mapping |
| NA | NA | NA | NA | HasMoreData | Y | Indicates if there is more data that can be accessed by going to next page | Fixed Value | false |
For retrieving the existing currency exchange rate data from Icertis,
below GET API is used
https://{icertis api host name}/api/v1/masterdata/{contractTypeName}
where contractTypeName = ICMCurrencyConversion.
For updating the currency exchange rate master data, the following BULK update API is used
https://{icertis api host name}/api/v1/bulk/masterdata.
The sample request body for the Icertis bulk upsert is as below.
{
"Data": {
"JobItems": [
{
"SysId": "96c08d87-3c89-4b7d-b075-e360bb41db07",
"UseExternalId": "false",
"NextState": "",
"EndPointVersion": "3",
"RequestIdentifier": "1",
"RequestBody": {
"ICMFromCurrency": "USD",
"ICMRate": "0.8700000000",
"Name": "USD:EUR",
"ICMToCurrency": "EUR"
}
},
{
"SysId": "5449222c-3d3a-4044-baae-a17165381ed1",
"UseExternalId": "false",
"NextState": "",
"EndPointVersion": "3",
"RequestIdentifier": "2",
"RequestBody": {
"ICMFromCurrency": "SGD",
"ICMRate": "0.6600000000",
"Name": "SGD:EUR",
"ICMToCurrency": "EUR"
}
}
],
"HasMoreData": "false",
"ContractTypeName": "ICMCurrencyExchangeRate"
}
} |
Processing Logic
Language Requirements
The integration processes all records as a complete batch; if any issue occurs, the entire batch is rejected
Not Applicable
Given that the interface processes only around 70 records, no performance impact is expected.
Error Handling
The interface incorporates robust error-handling and monitoring to ensure reliable data processing between SAP ECC and Icertis. If any failure occurs during data load, transformation, or API communication, the entire batch is rejected to maintain data integrity.
Errors are logged with detailed information, and automated alerts are sent to the integration support team for prompt action.
In the event of an error, the subsequent day’s scheduled job will update the latest currency exchange rates.
Testing
| TC1 | Currency and exchange rate master data is received from SAP ECC as part of the initial load | EUR-based currency exchange rate records are successfully created in Icertis. |
| TC2 | Currency and Exchange rate master data received from SAP ECC as part of the subsequent load | EUR-based currency exchange rate records are updated successfully in Icertis. |
| TC3 | Error during the transformation, mapping at the CPI End | Error is logged at CPI end. |
| Package Name | Parent Package |
|---|---|
| Currency Conversion Distribution | |
Other Development Objects
| Object Type | Object Name | Purpose/High Level Logic | Design Rationale Reference |
|---|---|---|---|
| iFlow | ECC_to_Icertis_CurrencyExRateUpload |
| For creation/update of currency ExRate Records. |
| iFlow | Icertis_OAuthToken_Generator |
| Generates the OAuth Token for API Calls. |
| iFlow | Icertis_CurrencyExRateUpload_CommonScripts |
| Reusable Scripts. |
| iFlow | CPI_To_Icertis_CurrencyJobStatusCheck |
| check the Job status. |
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.
