| Status | |
|---|---|
| Functional Specification Owner | |
| Stakeholders | |
| Jira Request ID | |
| Jira Development (Build) ID | Enter the Jira development card URL here (Use the Jira macro to search and add) |
| Parameter | Value |
|---|---|
| Application System (Delivery Tool) | Icertis |
| Business Process Reference (L4) | NA |
The reconciliation mechanism ensures reliability and traceability for custom integrations (e.g., Icertis to CPI) by logging failed messages, managing scheduled retries, tracking retry attempts, and notifying stakeholders of persistent failures.
The scope of this development covers the design, implementation, and monitoring of a reconciliation mechanism for custom integrations, such as the Icertis to CPI interface. The solution encompasses:
This scope encompasses integration with both internal and external systems, covering all technical, functional, and compliance aspects necessary for reliable and transparent message processing.

Icertis Initiation (1): The process begins with "Icertis," which sends messages to the "Azure Service Bus." This is the starting point for events or data that need to be processed.
Azure Service Bus to Azure Event Grid (A1): Messages from the Azure Service Bus are then directed to the "Azure Event Grid."
Azure Event Grid to Webhook (A2): The Azure Event Grid routes these events to a Icertis Webhook. This implies that the events are being pushed to an external service or application via an HTTP callback.
Webhook to SAP (A3): Finally, the Webhook sends the information to "SAP" for sending updates or new data.
Icertis Task Service and Development Scope :
This section seems to describe a more detailed, internal process within Icertis, particularly focusing on handling events and ensuring data consistency. The "Icertis Task Service" acts as an orchestrator for the processes within the "Development Scope."
Icertis Task Service Orchestration (B1 & B2): The "Icertis Task Service" is windows service that triggers or manages icertis event based and scheduled tasks within the "Development Scope." It triggers the "Scheduled Jobs" (B2) and e.g. "CustomEventBasedTask" which sends messages to SAP sytem(B3).
Within the Development Scope:
CustomEventBasedTask (B3): The CustomEventBasedTask which invokes the 3rd Party API for integration.
Conditional Logic (B5 ): If the API call fail, Log the fail record in the Reconciliation table in B6. Regardless of retries, if a task fails, the "Log Failed Records" process is activated to record details of the failure.
Reconciliation Table (B6): The logged failed records feeds into Reconciliation table.
ReconciliationTask (C2): These scheduled jobs trigger a "ReconciliationTask" to process the failed records for the integrations.
Retry Failed Messages (C3 & C4): If the ReconciliationTask loads all the failed records from the Reconciliation table and reprocess them to 3rd Party API
Icertis Initiation (1): The process begins with "Icertis," which sends messages to the "Azure Service Bus." This is the starting point for events or data that need to be processed.
Azure Service Bus to Azure Event Grid (A1): Messages from the Azure Service Bus are then directed to the "Azure Event Grid."
Azure Event Grid to Webhook (A2): The Azure Event Grid routes these events to a Icertis Webhook. This implies that the events are being pushed to an external service or application via an HTTP callback.
Webhook to SAP (A3): Finally, the Webhook sends the information to "SAP" for sending updates or new data.
Icertis Task Service and Development Scope :
This section seems to describe a more detailed, internal process within Icertis, particularly focusing on handling events and ensuring data consistency. The "Icertis Task Service" acts as an orchestrator for the processes within the "Development Scope."
Icertis Task Service Orchestration (B1 & B2): The "Icertis Task Service" is windows service that polls the messages from service bus and triggers icertis event based and scheduled tasks within the "Development Scope." It triggers the "Scheduled Jobs" (B2) and e.g. "CustomEventBasedTask" which sends messages to SAP sytem(B3).
Within the Development Scope:
CustomEventBasedTask (B3): The "CustomEventBasedTask" is an event-driven task which gets triggered from Icertis task service and calling the 3rd party API.
Conditional Logic (B5): If CustomEventBasedTask 3rd party API invocation fails, it moves ahead with B5 to log the failed entry into the table.
Max Retry = 5 (B4): The icertis hangfire internally retries the message in quick succession for 5 times.
Log Failed Records (B5): Regardless of retries, if a task fails, the "Log Failed Records" process is activated to record details of the failure.
Scheduled Jobs (C1): "Scheduled Jobs" that run at specific times based on cron expression within Icertis Worker Task table.
ReconciliationTask (C2): These scheduled jobs trigger a "ReconciliationTask."
Retry Failed Messages (C3): The ReconciliationTask loads the failed record from Reconciliation table and proceeds for reprocessing them.
Reconciliation Masterdata (C4): The reconciliation table holds the entries for all the failed tasks from icertis.
Failure Logging
Master Data Table
Scheduled Retry Job
Retry Count & Failure Notification
User Visibility

Below is a step-by-step flow of how the reconciliation mechanism operates in real time:
This table enables:
| Column Name | Data Type | Nullable? | Description/Notes |
|---|---|---|---|
| ID | bigint | No (not null) | Likely the Primary Key, an automatically incrementing large integer identifier. |
| IntegrationType | nvarchar(150) | No (not null) | Stores the type of integration as a variable-length Unicode string, max 150 characters. |
| RequestMessage | nvarchar(max) | No (not null) | Stores the full request message (e.g., XML, JSON) as a variable-length Unicode string. |
| StartedAt | datetime | Yes (null) | Records the start time of the event. Can be null if not yet started or relevant. |
| CompletedAt | datetime | Yes (null) | Records the completion time of the event. Can be null if not yet completed. |
| AdditionalInfo | nvarchar(max) | Yes (null) | Stores extra information about the event. |
| ResponseMessage | nvarchar(max) | Yes (null) | Stores the response message received. |
| TryCount | int | Yes (null) | Counts how many attempts were made for the integration event. |
| IsSuccess | bit | Yes (null) | A Boolean flag (0 or 1) indicating if the operation succeeded. |
| ExternalIdentifier | nvarchar(400) | Yes (null) | An ID from an external system. (e.g. Incoming SAP Event/Message Id) |
| ICMIdentifier | nvarchar(400) | Yes (null) | An ID specific to "ICM" (e.g Id from Icertis system like SysId). |
| EntityName | nvarchar(400) | Yes (null) | The name of the entity being processed. |
| Status | nvarchar(400) | Yes (null) | The current status of the event (e.g., 'Pending', 'Processing', 'Failed'). |
| ETag | datetime | Yes (null) | A timestamp or version indicator often used for optimistic concurrency control. |
| IsActive | int | No (not null) | An integer flag (likely 0 or 1) indicating whether the log entry is active. Inactive records are not shown in the Icertis table view UI by default. |
When to Run:
The reconciliation process is triggered whenever an integration attempt from Icertis to a target system fails. Additionally, a scheduled job runs at defined intervals (e.g., every 12 or 24 hours) to process unresolved failures.
How Master Data Entries Are Added:
When a failure occurs, the integration job automatically creates a new entry in the IntegrationReconciliation master data table, capturing key details such as message content, timestamps, error information, and setting the status to "Failed" with TryCount initialized to 1.
Scheduled Retry:
The scheduled job selects all active failed or pending entries and attempts to resend them. After each attempt, it updates the retry count and status. If a message fails more than the allowed number of times (e.g., 3), it triggers an automated notification to stakeholders for manual intervention.
User Monitoring:
Authorized users can view and monitor the status of all integration attempts via the Icertis UI, enabling proactive management and resolution.
| Test Step ID | Test Condition/Action | Expected Result |
|---|---|---|
| 1 | Simulate a failed integration (e.g., send invalid data or disable the endpoint) | Entry created in the IntegrationReconciliation table with status "Failed" and TryCount = 1 |
| 2 | Allow the scheduled reconciliation job to run | System attempts resend; TryCount increments; status updates to "Success" if successful, else remains "Failed"/"Retried" |
| 3 | Force repeated failures until TryCount > threshold (e.g., 3) | Automated notification sent to stakeholders; record flagged for manual intervention |
| 4 | Log in as an authorized user and view the monitoring interface | All integration attempts (failed, retried, and successful) are visible with accurate details |
| 5 | Attempt unauthorized access or modification | Access is denied; security controls are enforced |
| 6 | Test with corrupted or incomplete data | System handles exceptions gracefully; error is logged appropriately |
| 7 | Reset test data and repeat tests | Process is repeatable and robust; system continues to function as expected |
| Package Name | Parent Package |
|---|---|
| Enhancement Type | Standard Definition Name | Custom Implementation Name | Design Rationale Reference |
|---|---|---|---|
| Object Type | Object Name | Purpose/High Level Logic | Design Rationale Reference |
|---|---|---|---|