Skip to main content

All guides

ERP connector operations and erpLinks mapping

Schematic: ERP identifiers and per-entity mapping into Ninon general ledger.

This memo summarizes what teams configure outside code (platform secrets, admin forms) and how each Ninon entity maps to an ERP identifier. Sync issues surface in Observability logs with source “erp-sync”.

General

The default GL extraction lookback (commonly 90 days) is set in deployment configuration. Each group entity has a JSON object erpLinks keyed by provider (dynamics365bc, xero, netsuite, sap_business_one, sap_s4hana, sage_intacct). Values filter API responses so lines land on the right entity — required for multi-branch setups before relying on sync.

Xero

Product OAuth PKCE: after consent, if multiple Xero organisations are connected you must pick the tenant in the Integrations screen (list loaded from Xero after authorisation). Optional per-entity alignment via erpLinks.xero. Ensure your Xero app scopes include accounting settings and transactions (journals).

NetSuite

Two paths: scripted token registration (integration API) or browser OAuth with a realm (account ID / SuiteTalk subdomain) entered before redirect. Register Ninon’s redirect URL on the NetSuite integration. Host-level OAuth credentials power token refresh; optional scope overrides are documented for operators. SuiteQL filters by subsidiary via erpLinks.netsuite internal id.

SAP Business One

Service Layer URL …/b1s/v1, database and user stored encrypted. Multiple branches: erpLinks.sap_business_one = BPLID (or field returned on lines). Advanced optional journalEntryCollection when your OData collection name differs (default JournalEntries). Optional verbose diagnostics for skipped lines can be enabled in deployment configuration.

SAP S/4HANA

Published OData service root plus either a pasted Bearer (manual) or OAuth client_credentials (tokenUrl, clientId, clientSecret, optional scope) with automatic refresh before expiry. erpLinks.sap_s4hana = CompanyCode. Optional entitySetName and comma-separated preferredDateFields if your GL API differs. Optional OData path diagnostics (without secrets) can be enabled in deployment configuration.

Sage Intacct

Web-services sender/company/user credentials; erpLinks.sage_intacct = LOCATIONID when locations split entities. Sync automatically paginates via Intacct readMore whenever numremaining > 0 after GLENTRY readByQuery.