Ga naar inhoud

ERP Integration

Deze inhoud is nog niet vertaald.

Eryxon Flow supports two-way data synchronization with external ERP systems like SAP, NetSuite, Odoo, and others.

┌─────────────────┐ ┌─────────────────┐
│ Your ERP │◄───────►│ Eryxon Flow │
│ (SAP, etc.) │ │ │
└────────┬────────┘ └────────┬────────┘
│ │
│ REST API / Webhooks │
│ │
▼ ▼
┌─────────────────────────────────────────────┐
│ Sync Layer │
│ • external_id tracking │
│ • Upsert operations │
│ • Change detection (sync_hash) │
│ • Soft delete support │
└─────────────────────────────────────────────┘

Best for: Webhook-driven updates, event-based sync, real-time integration.

MethodEndpointUse Case
PUT/api-{entity}/syncUpsert single record
POST/api-{entity}/bulk-syncBatch upsert (up to 1000)
DELETE/api-{entity}?id={uuid}Hard delete

24 integration endpoints are available across jobs, parts, operations, batches, cells, resources, materials, time entries, webhooks, and assignments. See the REST API reference for the full catalog.

Best for: Initial data migration, periodic bulk updates, manual imports.

Navigate to Admin → Data Import in the web UI.

Best for: Pulling work orders and resources from a dedicated planning system without writing custom REST sync code.

AdapterSourceStatusNotes
FrePPLeFrePPLe REST APIBetaPull work orders + resources, push start and completion, Basic Auth, pagination
Odoo MRPOdoo mrp.production over JSON-RPCBetaPull work orders, push execution feedback

Both adapters are Beta — interfaces and behavior may still change, so pilot them on non-critical work first. Adapters share a single TypeScript interface (src/lib/planning/) using ISA-95 aligned vocabulary. Pick one at runtime with createPlanningAdapter(config).

ERP ConceptEryxon EntitySync Endpoint
Sales OrderJob/api-jobs/sync
Work CenterCell/api-cells/sync
Equipment / ToolingResource/api-resources/sync

Parts and operations are synced via the unified /api-erp-sync endpoint or created nested within jobs.

Every synced record should include:

{
"external_id": "SO-12345", // Your ERP's unique identifier
"external_source": "SAP", // Source system name
...other fields
}

The combination of (tenant_id, external_source, external_id) forms a unique constraint for upsert operations.

Eryxon automatically generates a SHA-256 hash of the payload for change detection. On subsequent syncs, unchanged records can be skipped.

Timestamp of the last successful sync, useful for incremental updates.

The sync infrastructure adds these columns to core tables:

-- Added to jobs, parts, cells, resources
external_id TEXT, -- ERP identifier
external_source TEXT, -- Source system name
synced_at TIMESTAMPTZ, -- Last sync timestamp
-- Soft delete support (jobs, cells)
deleted_at TIMESTAMPTZ, -- NULL = active
deleted_by UUID -- User who deleted
  1. Always include external_id - Required for upsert operations
  2. Sync dependencies first - Sync cells before operations that reference them
  3. Use bulk-sync for batches - More efficient than individual requests
  4. Implement webhooks - Receive real-time updates back to your ERP
  5. Handle errors gracefully - Bulk responses include per-record errors