Exploitation des connecteurs ERP et cartographie « erpLinks »
Ce mémo résume pour les équipes projets où configurer hors code (secrets plateforme, formulaires admin) et où cartographier chaque société Ninon vers un identifiant côté ERP. Les anomalies de synchro sont visibles dans les journaux Observability avec la source « erp-sync ».
Général
Variable ERP_SYNC_LOOKBACK_DAYS : fenêtre en jours pour les extractions GL (défaut 90). Chaque entité groupe possède un objet JSON erpLinks : une clé par fournisseur (dynamics365bc, xero, netsuite, sap_business_one, sap_s4hana, sage_intacct). La valeur filtre côté API pour rattacher les lignes à la bonne entité ; renseignez-la avant de compter sur une synchro multi-filiales.
Xero
OAuth PKCE produit : après consentement, si plusieurs organisations Xero sont reliées au compte, vous devez choisir le tenant dans l’écran Intégrations (liste fournie par l’API /connections). Un alignement manuel optionnel par entité possible via erpLinks.xero. Scopes côté app Xero : lecture des paramètres comptables et transactions (journaux).
NetSuite
Deux voies : POST /api/integrations/netsuite (scripts internes) ou OAuth navigateur avec realm (identifiant compte, sous-domaine SuiteTalk) saisi avant redirection. Enregistrez le redirect_uri de Ninon dans l’intégration NetSuite. Les clés NETSUITE_OAUTH_CLIENT_ID / SECRET servent au refresh ; NETSUITE_OAUTH_SCOPES permet d’ajuster les scopes (défaut rest_webservices). SuiteQL filtre par filiale : erpLinks.netsuite = ID interne subsidiary.
SAP Business One
Service Layer : URL …/b1s/v1, société et utilisateur chiffrés. Plusieurs filiales : erpLinks.sap_business_one = BPLID (ou équivalent renvoyé sur les lignes). Option avancée journalEntryCollection si votre Service Layer expose un autre nom de collection OData (défaut JournalEntries). Journalisation ERP_SYNC_SAP_B1_VERBOSE_LOG=1 pour le décompte des lignes ignorées faute de mapping.
SAP S/4HANA
Racine du service OData publié (ex. API_GLACCOUNTLINEITEM_SRV) + soit jeton Bearer collé (mode manuel), soit OAuth client_credentials (tokenUrl, clientId, clientSecret, scope optionnel) avec rafraîchissement automatique avant expiration. erpLinks.sap_s4hana = CompanyCode. Champs optionnels entitySetName et preferredDateFields (liste séparée par virgules) si votre API diffère. ERP_SYNC_SAP_S4_VERBOSE_LOG=1 trace le chemin OData (sans secret).
Sage Intacct
Web Services avec sender / société / utilisateur ; erpLinks.sage_intacct = LOCATIONID lorsque plusieurs lieux sont modélisés. La synchro pagine automatiquement via readMore lorsque Intacct renvoie numremaining > 0 après readByQuery sur GLENTRY.