Phase 3 · Node Layer 14 · Coexistence

The layer and SAP run
side by side. Boundary defined. Drift zero.

Coexistence is the operational state where the parallel layer and SAP each own a specific set of domains. The boundary between them is enforced by contracts, not conventions. The layer owns orders, signal, and reconciliation during the recovery window. SAP retains master data, historical signal, and its own system of record. Drift is measured continuously — zero divergence. Handback at H1 2027 shifts primary control entirely to SAP without rework.

SAP-native integration Layer · orders · signal · reconcile Drift · zero Handback · H1 2027 No replacement
Coexistence

Two systems. One order. No overlap.

Every order moves through both columns simultaneously. The layer handles the operational path during the window. SAP retains its system-of-record writes through the adapter. The vertical divider is the boundary — nothing crosses it without a contract event.

Dual Pipeline · Running
Parallel Layer
Owns · orders · signal · reconcile
IN Order intake awaiting
SIG Signal compute idle
ROU Supplier routing idle
PO PO generation idle
CFM Supplier confirm idle
REC Reconcile to SAP idle
SAP Primary
Owns · master · history · system of record
MD Master data hold active
HIST Historical signal baseline
SOR System of record writing
INV Invoice ledger active
FIN Financial close active
AUD Audit trail continuous
The layer owns operational stages during the window. SAP owns authoritative stages always. Every event the layer writes is reconciled to SAP on the adapter schedule. Nothing crosses the boundary without a contract event.
The Boundary

Drag the boundary.
See what moves.

The boundary defines which system owns each operational stage. Drag it to see how ownership shifts. Every position is contract-defined. Nothing migrates without a corresponding contract event.

Boundary Position · Live

Drag the handle to shift operational ownership. The boundary determines how much of the order lifecycle the layer handles vs. SAP.

Layer Side
SAP Side
Layer Owns
50%
Operational stages — intake through initial reconcile
SAP Owns
50%
Authoritative stages — master, history, system of record
The Contracts

Six contracts define the coexistence.

Every event that crosses the boundary is signed by a contract: method, path, request schema, response schema, error cases, and retry policy. Click any contract to see the full interface.

GET · OData

/sap/odata/v4/Orders({id})/Status

Layer reads SAP's authoritative order status for reconciliation. Reads only — the layer never writes to this endpoint.

Request
GET /sap/odata/v4/Orders('PM-847291')/Status Authorization: Bearer <oauth2> If-None-Match: "etag-v41"
Response · 200 OK
{ "order_id": "PM-847291", "status": "shipped", "last_updated": "2026-10-11T16:48:33Z", "etag": "etag-v42" }
Error · 412 Precondition Failed
When If-None-Match is stale, SAP returns current state + new ETag.
Retry Policy
Exponential backoff · 3 attempts · 5s/15s/45s
POST · BAPI

BAPI_SALESORDER_CREATEFROMDAT2

Layer writes an order event to SAP's system of record via standard BAPI. SAP is authoritative. The layer never overrides.

Request
POST /sap/bapi/SALESORDER Content-Type: application/json { "ORDER_HEADER_IN": { "DOC_TYPE": "TA" }, "ORDER_ITEMS_IN": [ { "MATERIAL": "NEXGARD-3MO-60-121", "TARGET_QTY": 2 } ], "idempotency_key": "PM-847291-v41" }
Response · 201 Created
{ "SALESDOCUMENT": "0000048291", "idempotency_key": "PM-847291-v41" }
Error · 409 Conflict
Idempotency key collision — the layer has already written this event. No double-write.
Retry Policy
Idempotent · 5 attempts · exponential · max 5 min window
EVENT · IDoc

ORDRSP · order.placed

Layer fires an IDoc event when a new order is placed. SAP consumes the event on the reconciliation schedule.

Event
{ "idoc_type": "ORDRSP", "message_type": "ORDRSP", "event": "order.placed", "payload": { "order_id": "PM-847291", "customer_id": "C-48210", "line_items": [...], "total": 118.39, "autoShip": true } }
Delivery
At-least-once · guaranteed ordering per order_id · SAP acks via STATUS IDoc
Error Recovery
Dead-letter queue · manual replay after SAP remediation
EVENT · OData

/layer/odata/v4/Signals → SAP

Layer pushes recomputed demand signal to SAP for baseline reconciliation. SAP never takes the pushed signal as authoritative — it stores it as reference.

Event
POST /sap/odata/v4/SignalUpdates { "sku": "NEXGARD-3MO-60-121", "signal_units": 1247, "source": "live-orders+iris", "timestamp": "2026-10-11T13:44:31Z" }
Response · 204 No Content
SAP acknowledges the signal as reference. Historical signal remains SAP-owned.
Retry Policy
Batched · 60s interval · last-write-wins on reconciliation
SCHEDULE · RFC

Z_RECONCILE_LAYER_ORDERS · hourly

Scheduled reconciliation job runs hourly. Layer writes are compared against SAP's system of record. Any divergence triggers a correction event.

SAP-Side Job
SM36 · Z_RECONCILE_LAYER_ORDERS Schedule: hourly · 00:00 · 01:00 · 02:00 ... Reads: layer event log (last 60 min) Compares: against SAP SALESDOCUMENT table
Output
Divergence report · zero rows = lockstep maintained Any row = correction event fired within 60s
Audit
Full audit trail · 7-year retention · SAP-native audit log
DISCOVERY · Business Accelerator Hub

api.sap.com · adapter catalog entry

The layer's SAP Adapter is published as a catalog entry on SAP Business Accelerator Hub. Standard discovery. Standard documentation. Standard SLA.

Catalog Entry
api.sap.com/api/parallel-layer-adapter Category: Financial / Order Management Version: 1.0.0 SLA: 99.95% · 24/7 support
Integration Surface
OData · BAPI · RFC · IDoc · Webhook Auth: OAuth 2.0 · SAP IAS compatible
Deployment
SAP BTP-ready · Cloud Foundry · multi-tenant optional
The Handback

Scrub to H1 2027.
Watch the boundary close.

Drag the slider to move from today to the H1 2027 handback. At each step, the boundary shifts further toward SAP. At the final step, the layer is fully retired and SAP holds complete primary control.

Handback Timeline · Scrub
Today · Layer Active Boundary at 50% · drift zero
Today Q4 2026 Q1 2027 Q2 2027 H1 2027
01 · Today

Layer Active

Boundary · 50/50 · Drift · 0

02 · Q4 2026

Signal Sync

SAP absorbs signal history

03 · Q1 2027

Partial Handback

SAP resumes order intake

04 · Q2 2027

Final Reconcile

Open items closed

05 · H1 2027

Full Handback

SAP primary · layer retired

Step 01 · Today · Layer Active

Boundary at 50/50. Drift at zero. Layer handling operational stages.

The layer is active, handling order intake through initial reconciliation. SAP retains master data, historical signal, and its own system of record. Drift is measured continuously. Every layer event is mirrored to SAP on the adapter schedule. This is the operating state of the coexistence window.

SAP-Native Surface

Standard SAP interfaces. No custom bridges.

Every integration point on the layer uses a standard SAP interface. OData. BAPI. RFC. IDoc. Business Accelerator Hub. Nothing proprietary. Nothing that requires a custom SAP exit.

OData

Read paths

Order status, master data lookups, historical signal reads. Standard OData v4 with ETag-based optimistic concurrency.

BAPI

Transactional writes

Order creation, invoice posting, master data updates. Standard BAPIs — the layer writes through SAP's own interfaces.

RFC

Scheduled reconciliation

Hourly reconciliation job runs as a standard RFC function module. SAP-native scheduling, SAP-native logging.

IDoc

Asynchronous events

Order events, signal updates, and reconciliation acks flow as standard IDocs. Guaranteed delivery. Ordered per aggregate.

Business Accelerator Hub

Adapter discovery

The adapter is catalogued on api.sap.com. Standard discovery. Standard documentation. Standard SLA.

BTP-ready

Deployable on SAP BTP

The layer's SAP-side components are deployable on SAP Business Technology Platform. Cloud Foundry. Multi-tenant optional.

Live Stream

Coexistence events · live

The coexistence event stream shows every boundary crossing: layer writes, SAP reads, contract events, and reconciliation jobs. Every event is signed by a contract. Nothing crosses without a signature.

Coexistence Event Stream · Live 12 events
08:00:01 LAYER Order PM-847291 ingested · signal recomputed
08:00:02 CONTRACT POST /sap/bapi/SALESORDER · BAPI write initiated
08:00:03 SAP SALESDOCUMENT 0000048291 created · idempotency key matched
08:00:04 RECONCILE Event mirrored · drift 0 · lockstep maintained
08:14:22 LAYER Supplier Nilfisk-Min routed from signal
08:14:24 CONTRACT IDoc ORDRSP fired · order.placed
09:00:00 RECONCILE Hourly job Z_RECONCILE_LAYER_ORDERS · zero divergences
09:14:11 SAP GET /Orders('PM-847291')/Status · 200 OK
10:00:00 RECONCILE Hourly job · 0 divergence rows · audit trail continuous
10:44:31 LAYER Signal push to SAP · SKU NEXGARD-3MO-60-121 · 1247 units
11:00:00 RECONCILE Hourly job · 0 divergences · lockstep continues
11:32:44 CONTRACT Adapter catalog entry requested · api.sap.com/api/parallel-layer-adapter
The Contrast

Replace the system.
Or coexist with it.

Replacing SAP means rip-out, migration, and full re-architecture. Coexisting means SAP stays primary throughout; the layer fills the operational gap during the recovery window and hands back cleanly at H1 2027.

Replace SAP

Rip-out Path
  • Full rip-out and re-implementation
  • Migration of all master data and history
  • Existing remediation spend becomes sunk cost
  • Timeline extends well beyond H1 2027
  • Multi-region rollout restarts from zero
  • Full change management program required

Coexist with SAP

Coexistence Path
  • SAP stays primary throughout
  • Master data and history stay in SAP
  • Remediation spend preserved
  • Order-to-cash restored inside the window
  • Clean handback at H1 2027
  • Standard SAP-native interfaces only
Same Architecture · Other SAP Customers

Tennant is the first. The second is open.

The coexistence architecture is not Tennant-specific. Every SAP customer in a disrupted state is a candidate for the same pattern: define the boundary, enforce the contract, measure drift, and hand back cleanly.

The layers are domain-agnostic. Orders, signal, reconcile — the same three domains apply whether the customer is a floor-scrubber manufacturer, a pet pharmacy, a farm-supply chain, or a surgical device manufacturer.

Tennant proves the pattern. The second SAP customer proves the repeatability. The hundredth proves the category.

Questions

Coexistence, answered.

Coexistence is a defined operational state where the parallel layer and SAP each own a specific set of domains, and the boundary between them is enforced by contracts, not conventions. The layer owns orders, signal, and reconciliation during the recovery window. SAP retains master data, historical signal, and its own system of record. No overlap. No divergence. Clean handback.

Every event the layer writes is reconciled to SAP on a schedule SAP can absorb — typically hourly through a standard RFC job. A continuous drift meter compares the two states. Any divergence triggers an automatic reconciliation event before drift can accumulate. The drift meter is visible on this page — the widget in the bottom-left corner. It has not diverged since the page loaded.

Standard SAP interfaces only. OData for read paths. BAPI and RFC for transactional writes. IDoc for asynchronous flows. Business Accelerator Hub for adapter discovery. Nothing proprietary. Nothing that requires a custom SAP exit.

The handback shifts primary control entirely to SAP. The layer stops writing. Reconciliation closes any open items. The layer's operational stages are retired one by one. SAP resumes full primary control without rework and without any restoration of manual workarounds. The handback is scheduled for H1 2027 — the same target Tennant has already disclosed.

No. The layer operates only in the domains SAP is not currently able to serve. When SAP recovery completes, the layer hands back primary control. The layer's role is to make SAP look good to the customer during the recovery window — not to replace it. That's why every integration point uses a standard SAP interface, and why the adapter is published on SAP's own Business Accelerator Hub.

The coexistence is defined.

Boundary enforced by contract. Drift measured continuously. Handback clean at H1 2027. Standard SAP interfaces throughout.