Everything you need to configure, operate, and extend the DataIQ ERP integration platform β from onboarding a new client to calling MCP tools from LicenseIQ agents.
DataIQ is a dedicated integration layer sitting between LicenseIQ and external data systems β primarily Oracle Cloud ERP (Fusion / FSCM) and EDI trading partners. LicenseIQ never makes direct Oracle API calls. Instead it calls named MCP tools that DataIQ exposes, and DataIQ handles all the Oracle-specific complexity: authentication, SCIM query syntax, ID field mapping, expand parameters, and write-back idempotency.
posting_log table ensures at-most-once Oracle submission per (client_id, tool, idempotency_key) triple. Retries return cached responses.Onboarding a new client involves four steps: registering the client record, connecting to their Oracle instance, configuring sync schedules, and running the bootstrap sync to load historical data.
In the Admin UI, navigate to Clients and create a new client. Set the client_id (used as the primary key throughout DataIQ), display name, and optional LicenseIQ company ID.
Under the client's Connections tab, add an Oracle ERP connection with:
| Field | Description |
|---|---|
| oracle_base_url | Base URL of the Oracle FSCM REST API (e.g. https://acme.fa.us2.oraclecloud.com) |
| oracle_client_id | OAuth client ID for the Oracle integration user |
| oracle_client_secret | OAuth client secret (stored encrypted) |
| oracle_token_url | Token endpoint for Oracle OAuth flow |
| ou_name | Oracle Operating Unit name for scoping (optional β required for multi-OU instances) |
Navigate to Sync Config for the client and add sync configurations for each Oracle resource type needed. See Transaction Sync for full details.
Trigger a bootstrap sync from the Admin UI (Bootstrap tab) to perform a one-time historical data load before the scheduled sync takes over. The bootstrap pulls all available Oracle history up to the current date.
Bootstrap syncs can take several minutes for clients with large Oracle transaction histories. Monitor progress in the Sync Logs view.
DataIQ pulls Oracle Receivables and Payables data on configurable per-client schedules. Each sync run is tracked, idempotent, and freshness-stamped so LicenseIQ always knows how current its data is.
TransactionClass is not a queryable SCIM attribute β CM/DM/CB syncs use named Oracle finders or client-side post-filters./standardReceipts, not /receivablesReceipts (which returns 404). Do not add expand=receiptApplications β it causes HTTP 400.| Field | Description |
|---|---|
| client_id | Client this config applies to |
| oracle_resource | Oracle FSCM resource path (e.g. receivablesInvoices) |
| sync_type | Label for this sync (e.g. ar_invoices, receipts) |
| cron_expression | Schedule in cron format (e.g. 0 */4 * * * = every 4 hours) |
| freshness_threshold_hours | Max acceptable data age in hours β surfaced in MCP responses |
| oracle_path_override | Override the default Oracle API path for this client (e.g. custom receivables path) |
| query_params | Array of {"{"}key, value, enabled{"}"} objects injected into Oracle requests. Set value: "" to clear a default param (e.g. to remove the default expand). |
| enabled | Whether this sync is active |
When using oracle_path_override, the endpoint's default expand parameter is still injected. Always add {"{"}"key":"expand","value":"","enabled":true{"}"} in query_params if the override path doesn't support the default expand.
Syncs upsert on the Oracle natural ID field (CustomerTransactionId for receivablesInvoices, StandardReceiptId for standardReceipts). Re-running the same sync window updates existing records rather than creating duplicates β making retries safe.
Every sync run records a last_synced_at timestamp. MCP tool responses include a freshness field showing data age and whether it exceeds the configured threshold. Stale data is surfaced β never silently consumed.
LicenseIQ connects to DataIQ's MCP endpoint at /mcp using the Streamable HTTP transport. All tools accept a client_id input to scope the operation to the correct client context.
MCP endpoint: https://dataiq.cimpleit.com/mcp β No OAuth required. Connect directly. The /.well-known/oauth-authorization-server endpoint returns 404 to signal this.
Returns AR invoices (INV type) from the local DataIQ cache for a given client. Includes freshness metadata.
Returns AR credit memos (CM) and debit memos (DM) for a given client, filtered from the local transaction cache.
Returns Oracle standard receipts (customer payments) from the local cache. Maps to the standardReceipts Oracle resource.
Returns Accounts Payable invoices from Oracle Payables for a given client.
Returns Purchase Order receipts for a given client from the Oracle Procurement module.
Returns sales transaction records from the DataIQ transaction cache for rebate and royalty calculation inputs.
Returns Point-of-Sale sell-through data received from EDI trading partners (867 transaction sets) for a given client.
Returns chargeback (CB) transaction records from the local cache for dispute and deduction management workflows.
Returns the aggregated sales basis data needed to calculate rebate accruals β grouped by product, customer, and period as specified by the caller.
Returns master data records (customers, products, suppliers, partners) from the DataIQ master data cache.
Polls Oracle for the current import status of a previously submitted GL journal batch. Use to confirm a post-gl-journal write-back has been processed by Oracle.
Resolves a customer name or external ID to the canonical Oracle customer account number and master data record.
Resolves a product name, SKU, or UPC to the canonical Oracle item number and product master record.
Resolves a supplier name or external ID to the canonical Oracle supplier number, site name, and master record.
Posts a GL journal import batch to Oracle. COA segments are derived automatically from the rules engine before submission. Idempotent β safe to retry with the same idempotency_key.
Creates a new AR invoice in Oracle Receivables. UDF fields are translated using the client's Store 2 mappings before submission.
Creates a new AP invoice in Oracle Payables. Idempotent via posting_log.
Delivers an outbound EDI document (810 invoice, 856 ASN) to a configured trading partner via AS2 or SFTP.
Runs the COA rules engine for a given client and input context, returning the derived Oracle Chart of Account segment values. Optionally validates derived segments live against Oracle before returning.
All write-back tools use the posting_log table with a composite unique key of (client_id, tool, idempotency_key). The first call submits to Oracle and caches the response. Subsequent calls with the same key return the cached response β Oracle never sees duplicate submissions.
Before any write-back tool submits data to Oracle, the COA (Chart of Accounts) rules engine derives the Oracle GL segment values from the transaction context. Rules are evaluated in priority order β the first rule whose conditions match wins.
| Field | Description |
|---|---|
| priority | Evaluation order β lower number = higher priority |
| conditions | JSON match criteria evaluated against the input context (product category, customer type, transaction class, etc.) |
| segment_values | Oracle COA segment values to assign when this rule matches (Company, Cost Center, Account, etc.) |
| validate_live | If true, derived segments are validated against Oracle's FSCM API before the write-back proceeds |
Client-specific User Defined Field (UDF) definitions and value mappings are maintained in DataIQ's Store 2 schema. When a write-back tool receives a LicenseIQ field value, it looks up the client's UDF mapping to translate it to the Oracle-expected code.
translation_gaps array identifying the missing mappings. The write-back is not blocked β the gap is surfaced for resolution.The posting_log table is the source of truth for every Oracle write-back attempt. It records the tool name, client ID, idempotency key, Oracle response (status code, body), and timestamp. Use the Admin UI's Posting Log view to audit all write-backs and identify any submissions that failed at the Oracle layer.
DataIQ provides EDI connectivity for trading partners via two transport protocols: AS2 (Mendelson, for partners requiring encrypted and signed document exchange) and SFTP (for partners using file-drop delivery). Partners and their transaction sets are configured entirely through the Admin UI.
| Field | Description |
|---|---|
| partner_name | Display name for this trading partner |
| isa_qualifier / isa_id | ISA06/ISA08 sender/receiver identifiers for the EDI interchange |
| transport | as2 or sftp |
| as2_url | Partner's AS2 endpoint URL (AS2 partners only) |
| sftp_host / sftp_user | SFTP connection details (SFTP partners only) |
| inbound_tx_sets | Enabled inbound transaction types for this partner |
| outbound_tx_sets | Enabled outbound transaction types for this partner |
| enabled | Whether this partner is active |
edi_transaction_log β MCP tools expose data to LicenseIQ.deliver-to-partner MCP tool β DataIQ generates EDI document β transmits via configured transport β 997 acknowledgement tracked.997 functional acknowledgements are tracked per interchange in the edi_transaction_log. Accepted, rejected, and pending 997s are visible in the Admin UI EDI Log for each trading partner.
Oracle Cloud FSCM REST APIs have a number of non-obvious behaviours. This section documents the ones that have caused issues in production.
receivablesInvoices returns CustomerTransactionId β not TransactionIdstandardReceipts returns StandardReceiptId β not ReceiptId or CashReceiptIdSending q=TransactionClass='CM' returns HTTP 400 on receivablesInvoices. TransactionClass is not a SCIM-queryable attribute. CM/DM/CB syncs must use a named Oracle finder or apply a client-side post-filter after fetching. Oracle returns TransactionType (a named string like 45 INV), not a class code.
The correct Oracle FSCM path for customer receipts is /standardReceipts. The path /receivablesReceipts returns 404. Do not add expand=receiptApplications β it causes HTTP 400 on known Oracle instances.
To remove a default expand parameter injected by the sync endpoint, add a query param entry with an empty value:
{"{"} "key": "expand", "value": "", "enabled": true {"}"}
DataIQ treats empty-string values as "delete this key" from the outgoing Oracle request.
For multi-OU Oracle instances, requests may need to be scoped to a specific Operating Unit. Set the ou_name on the client's Oracle connection, or inject it via query_params in the sync config.
oracle_path_override (if set) is correct for this client's Oracle instance version.If a write-back tool returns a success response but no new record appears in Oracle, the posting_log may have a cached response from a previous call with the same idempotency_key. To re-submit, use a new idempotency key.
A translation_gaps array in a tool response means one or more UDF field values have no mapping in Store 2 for this client. Add the missing mapping in Store 2 Config β UDF Value Mappings.
https://dataiq.cimpleit.com/mcp with Streamable HTTP transport.Accept header must include text/event-stream β DataIQ auto-injects this if omitted, but some clients may need it set explicitly./.well-known/oauth-authorization-server endpoint intentionally returns 404 β this signals no OAuth is required to connect.