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.
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.
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.
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.
/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
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
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
/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
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
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
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.
Layer Active
Boundary · 50/50 · Drift · 0
Signal Sync
SAP absorbs signal history
Partial Handback
SAP resumes order intake
Final Reconcile
Open items closed
Full Handback
SAP primary · layer retired
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.
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.
Read paths
Order status, master data lookups, historical signal reads. Standard OData v4 with ETag-based optimistic concurrency.
Transactional writes
Order creation, invoice posting, master data updates. Standard BAPIs — the layer writes through SAP's own interfaces.
Scheduled reconciliation
Hourly reconciliation job runs as a standard RFC function module. SAP-native scheduling, SAP-native logging.
Asynchronous events
Order events, signal updates, and reconciliation acks flow as standard IDocs. Guaranteed delivery. Ordered per aggregate.
Adapter discovery
The adapter is catalogued on api.sap.com. Standard discovery. Standard documentation. Standard SLA.
Deployable on SAP BTP
The layer's SAP-side components are deployable on SAP Business Technology Platform. Cloud Foundry. Multi-tenant optional.
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.
POST /sap/bapi/SALESORDER · BAPI write initiated
0000048291 created · idempotency key matched
0 · lockstep maintained
ORDRSP fired · order.placed
Z_RECONCILE_LAYER_ORDERS · zero divergences
200 OK
0 divergence rows · audit trail continuous
SKU NEXGARD-3MO-60-121 · 1247 units
0 divergences · lockstep continues
api.sap.com/api/parallel-layer-adapter
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
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.