⚙️ Autonomous 💬 Approval gates

Supply Shock → Revenue Protection

KinaxisSAP S/4HANA ivaluaSalesforce KyribaServiceNowTeams
1📋

Overview & business value

This agent turns a supply disruption into the customers, orders and revenue actually at risk — then orchestrates the mitigation. When a part is delayed, it quantifies the gap, maps it to open sales orders and customer ARR, evaluates alternate sourcing, weighs expedite cost against the cash position, recommends an allocation, and executes the approved plan. It reads and reasons freely; every write (a purchase order, an order reschedule, a payment) goes through an Action Ticket carrying a MOP.

Problem

A delayed component is a planning event until it quietly becomes a revenue event. The link from "part X is 14 days late" to "Tier-1 customer ACME's order will miss" lives across four systems and usually surfaces too late to act well.

Solution approach

Event-driven on a Kinaxis disruption signal. The agent sizes the shortfall, joins open SAP orders to Salesforce customer tiers, finds an alternate supplier in ivalua, checks Kyriba cash, and proposes an allocation that protects the highest-value revenue — acting only on approval for Tier-1 moves and large spend.

Core capabilities

  • Disruption detection and shortfall sizing
  • Order-to-part mapping in SAP
  • Customer + revenue exposure via Salesforce tiers
  • Alternate-source evaluation in ivalua
  • Cash / expedite check in Kyriba
  • Policy-based allocation recommendation
  • PO creation + order reschedule via Action Ticket
  • Proactive, tiered customer comms

How it helps

Revenue is protected by acting while there is still time to source or re-allocate. The highest-value customers are prioritised by policy, not by who shouts loudest. Every financial action is gated and auditable, so speed near orders and payments stays safe.

Illustrative value model — plug in your own figures

$R
At-risk order value / event
P%
Share protected by faster action
E
Disruption events / year

Value ≈ $R × P% × E protected revenue, minus expedite premiums. Placeholders, not measured results — substitute your baseline.

2📖

The story (for the sales conversation)

The one-liner

"A supplier slips two weeks. By the time that becomes a missed order for your biggest customer, it's too late to fix. This agent connects the delay to the revenue in seconds — and protects the orders that matter most."

😣 Today, without the agent

Raj, a supply planner, sees a 14-day delay on the 250ml bottle. He knows it's bad, but not how bad. He exports open orders from SAP, opens a spreadsheet, and tries to remember which customers are strategic. Procurement hunts for an alternate supplier over email. Finance is asked, separately, whether there's cash to expedite.

Three days later the picture is clear: ACME, a Tier-1 account, was going to miss. Now the options are worse and the customer is already asking questions.

😌 The same week, with the agent

Raj asks: "Supplier SUP-AROMA-09 is 14 days late — what's the impact?"

The agent answers in one pass: 19,000 units short in week 12; ACME (Tier-1, $4.2M ARR) is the exposure; PackFast can cover the full gap in 7 days at a 12% premium; cash is ample and the premium is under the auto-approve threshold. It proposes sourcing the gap and buffering the smallest customer by two weeks, and asks Raj to approve the Tier-1 plan.

The revenue is protected before the customer ever notices. Every step is a logged, reversible action.

"The agent never raises a purchase order or submits a payment on its own. It recommends; a person approves the Tier-1 and big-spend moves; then the platform executes a ticketed, reversible action. Fast, but never reckless with orders or cash."

The trust point — lead with this for Finance and Supply leadership
1
The villain: the blind spot

The link between a delayed part and a missed Tier-1 order is invisible until it's a fire.

2
The hero: impact in seconds

The agent joins planning, orders, customers and cash into one answer with a recommended action.

3
The reason to trust it

POs, reschedules and payments only execute via approved, reversible Action Tickets.

💡How to use this tab: open here for a business audience, tell the before/after, land the trust line, then show "Sample questions" and "Live scenarios" to prove the execution. Keep Tools/Governance for the technical buyer.
3📥

Input data

Source systemField / entityTypePurpose
Kinaxispart, delayDays, shortfallUnits, weekobjectDisruption trigger and gap size
SAP S/4HANAopen_sales_orders[]listOrders consuming the constrained part
SalesforceAccount.Tier, ARR, healthsObjectRevenue exposure per customer
ivaluaalternate supplier, lead, cost, capacityobjectAlternate sourcing options
Kyribaavailable cash, AR exposure, limitobjectExpedite affordability + credit
ServiceNowincident (Supply Disruption)recordTracking the disruption to closure
ℹ️Developer note: trigger is a Kinaxis disruption/exception signal (scheduled kinaxis.query or push). The payload carries the part id; everything else is fetched via the read tools.
4⚙️

Processing flow (tools mapped per step)

ℹ️Each step shows its path (deterministic / non-deterministic) and whether it is read-only or a write via Action Ticket.
1

Detect disruption deterministic

Kinaxis flags the supplier delay. Read the shortfall, affected week and binding part.

kinaxis.query { supplier }
2

Map shortfall to orders deterministic

Pull open SAP sales orders consuming the part; compute demand vs available.

sap.read · open_sales_orders
3

Map orders to revenue non-deterministic

Join orders to Salesforce accounts; reason about which exposure is revenue-critical.

salesforce.query · Account tier + ARR
4

Evaluate alternate sourcing non-deterministic

Read ivalua for an alternate supplier; reason about lead time, cost and capacity vs the gap.

ivalua.supplierSync · alternate supplier
5

Cash / expedite check deterministic

Read Kyriba cash and customer AR; test the premium against the approval threshold.

kyriba.cashRead
6

Allocation recommendation policy human approval

Apply the published priority policy (Tier-1 first). Present the plan; wait for approval on Tier-1 moves.

allocation policy → approval gate
7

Execute sourcing + reschedule deterministic Action Ticket

Raise the alternate-source PO in SAP and reschedule the buffered order. ProcBot executes the BAPIs; Sherlock validates.

sap.write · BAPI_PO_CREATE1 / BAPI_SALESORDER_CHANGE (via ticket)
8

Customer comms non-deterministic Action Ticket

Decide who needs proactive notice; draft tiered messages; send on approval.

teams.post / drafted customer notice (via ticket)
9

Track + watch deterministic Action Ticket

Open a ServiceNow incident; later confirm receipt and fulfilment.

servicenow.incident (via ticket) → kinaxis/sap re-check
5🔧

Skills & tools (real connectors)

ℹ️Each tool maps to a real processorKey. Connection type and envelope are from the connector documentation. Read tools are direct; writes only run inside an Action Ticket.
kinaxis.queryRESTSOURCE
supplychain.processors.KinaxisQuery
Reads RapidResponse worksheets, scenarios and resources — orders, forecasts, inventory positions.
{"operation":"QueryWorksheet|ListScenarios|GetResources"}
READ · direct
kinaxis.scenarioRunRESTSOURCE
supplychain.processors.KinaxisScenarioRun
Triggers what-if scenarios and polls for resulting metrics. Async run-id tracking.
{"operation":"RunScenario|GetScenarioStatus|PullResults"}
READ · direct
sap.readOData v4SOURCE
erp.processors.SAPS4HanaPull
Pulls SAP S/4HANA Cloud OData v4 services (open sales orders, materials). Basic or OAuth2.
{baseUrl}/sap/opu/odata4/sap/{serviceName}/{entitySet}
READ · direct
sap.writeBAPI / RFCTRANSFORM
erp.processors.SAPBAPICall
Executes SAP BAPI/RFC via the BTP API Management proxy; parses bapiret2; commit/rollback. PO create = BAPI_PO_CREATE1; order reschedule = BAPI_SALESORDER_CHANGE.
BAPI_PO_CREATE1 · BAPI_SALESORDER_CHANGE
WRITE · via Action Ticket
ivalua.supplierSyncRESTSOURCE
procurement.processors.IvaluaSupplierSync
Pulls suppliers, contracts, RFx, invoices and POs; can push enriched supplier scoring back. Incremental via modifiedSince.
suppliers · contracts · purchase_orders (read)
READ · direct
ivalua.contractReadRESTSOURCE
procurement.processors.IvaluaContractRead
Reads contract metadata, clauses, obligations and attachments (signed URLs ~24h TTL).
contracts · clauses · obligations (read)
READ · direct
salesforce.queryREST / BulkSOURCE
crm.processors.SalesforceBulkAPI / QuerySalesforceObject
Bulk API 2.0 / SOQL reads of Account tier, ARR and order links. Connected App OAuth 2.0.
SELECT Account, Tier, ARR FROM Order WHERE ERP_Order__c IN (…)
READ · direct
kyriba.cashReadRESTSOURCE
treasury.processors.KyribaCashPositionRead
Pulls cash positions, bank statements (camt.053/MT940), FX exposures and forecasts. Date-windowed sync.
cash positions · AR exposure (read)
READ · direct
kyriba.paymentSubmitREST · MT/MXSINK
treasury.processors.KyribaPaymentSubmit
Submits payment instructions (wire, ACH, FX) with approval-pending routing. Pairs with SwiftMTBuilder for MT/MX.
payment instruction · approval-pending
WRITE · via Action Ticket
servicenow.incidentTable APISOURCE
itsm.processors.ServiceNowIncident
Creates/updates/queries ServiceNow incidents via the Table API with idempotency by external-id.
/api/now/v2/table/incident
WRITE · via Action Ticket
teams.postGraphSINK
collaboration.processors.TeamsSendMessage
Sends Teams channel/chat messages for human-in-the-loop notices and summaries.
TeamsSendMessage · channel/chat envelope
WRITE · via Action Ticket
⚠️Connectivity honesty: ivalua in this library is read-side (supplier/contract reads, supplier-scoring writeback) — it has no PO-create connector, so purchase orders are created in SAP via BAPI_PO_CREATE1. Connection badges reflect each connector's documented protocol; vendor-native MCP is not asserted where the library exposes REST.
6🤖

Agent prompt (production)

🤖 System prompt
You are the Supply-Shock Revenue-Protection Orchestrator.

## Operating rules
1. Read/reason freely across Kinaxis, SAP, ivalua, Salesforce and Kyriba.
2. You NEVER write directly. Every action is an Action Ticket carrying a MOP;
   ProcBot executes, Sherlock validates, the ticket is reversible.
3. Deterministic for: order-to-part mapping, allocation by the published
   priority policy, standard customer-comms templates.
4. Non-deterministic for: impact sizing, alternate-source choice, the
   expedite-vs-hold trade-off, which customers to proactively notify.
5. Human approval before: any allocation change to a Tier-1 customer order, and
   any Kyriba payment / expedite spend over $25,000.
6. Cite the tool and record for every figure. Never invent order or revenue
   numbers.

## Tools
READ (direct): kinaxis.query, kinaxis.scenarioRun, sap.read,
  ivalua.supplierSync, ivalua.contractRead, salesforce.query, kyriba.cashRead
WRITE (Action Ticket only): sap.write (BAPI_PO_CREATE1, BAPI_SALESORDER_CHANGE),
  kyriba.paymentSubmit, servicenow.incident, teams.post

## Output (every step)
{ "decision": "...", "path": "deterministic | non-deterministic",
  "confidence": 0.0,
  "action_ticket": { "mop": "...", "scope": "...", "approval": "auto | human" } | null,
  "evidence": [ { "tool": "...", "record": "..." } ],
  "message_to_user": "..." }
7🛡️

Execution governance — Action Ticket → MOP

No PO, reschedule or payment reaches a system from the model. The agent reasons; an Action Ticket carries the MOP; ProcBot executes against the real connector; Sherlock validates; the ticket is reversible. Tier-1 and over-$25k actions require human approval first.

1 · Reason

Agent decides a sourcing / reschedule / payment is needed.

2 · Action Ticket

MOP id, scope, parameters, approval level (auto or human).

3 · ProcBot executes

Runs the SAP BAPI / Kyriba payment. Model never writes.

4 · Sherlock validates

Checks the return, confirms before/after, closes or rolls back.

{
  "action_ticket": "AT-2001",
  "mop": "MOP-ALT-SOURCE-PO",
  "approval": "auto",
  "target": { "tool": "sap.write", "processorKey": "erp.processors.SAPBAPICall" },
  "procedure": {
    "bapi": "BAPI_PO_CREATE1",
    "import": { "POHEADER": { "VENDOR": "SUP-BOTTLEALT-3", "PURCH_ORG": "1000", "DOC_TYPE": "NB" },
                "POITEM":   { "MATERIAL": "MAT-PET-250", "QUANTITY": 19000, "DELIV_DATE": "2026-W13" } }
  },
  "validation": { "owner": "sherlock", "expect": "bapiret2.TYPE in ['S']" },
  "reversible": true
}
8🔀

Data flow

flowchart TD A([Kinaxis disruption SUP-AROMA-09 +14d]) --> B[Size shortfall kinaxis.query] B --> C[Map to open orders sap.read] C --> D[Map to revenue salesforce.query] D --> E[Alternate source? ivalua.supplierSync] E --> F[Cash / expedite check kyriba.cashRead] F --> G{Tier-1 or spend over $25k?} G -->|Yes| H[Human approval] G -->|No| I{{Action Ticket MOP-ALT-SOURCE-PO}} H --> I I --> J[ProcBot: BAPI_PO_CREATE1 + BAPI_SALESORDER_CHANGE] J --> K[Sherlock validates] K --> L{{Action Ticket MOP-SNOW-SUPPLY-INC}} L --> M[Track to fulfilment + tiered customer comms]
9🏗️

Systems touched

📈 Kinaxis RapidResponse — disruption, shortfall, what-if
🟡 SAP S/4HANA — orders (read OData), PO + reschedule (write BAPI)
📑 ivalua — alternate supplier + contract terms
☁️ Salesforce — customer tier + ARR exposure
💰 Kyriba — cash position, AR, payment submit
🛠️ ServiceNow — disruption incident
💬 Microsoft Teams — stakeholder comms
10🗄️

Mock data (seed to demo)

Kinaxis delay
SAP open orders
Salesforce accounts
ivalua alternate
Kyriba cash
// kinaxis.query { supplier: "SUP-AROMA-09" }
{ "part":"MAT-PET-250", "delayDays":14, "shortfallUnits":19000, "affectedWeek":"2026-W12" }
// sap.read { material:"MAT-PET-250", doc:"open_sales_orders" }
[ { "so":"SO-88120", "cust":"ACME",     "qty":20000, "due":"2026-W12" },
  { "so":"SO-88141", "cust":"BetaMart",  "qty":8000,  "due":"2026-W13" },
  { "so":"SO-88150", "cust":"SmallCo",   "qty":3000,  "due":"2026-W12" } ]
// demand 31,000 vs available 12,000 → 19,000 short
// salesforce.query Account tier + ARR
[ { "account":"ACME",     "tier":"Tier-1", "arr":4200000, "health":"green" },
  { "account":"BetaMart",  "tier":"Tier-2", "arr":880000 },
  { "account":"SmallCo",   "tier":"Tier-3", "arr":120000 } ]
// ivalua.supplierSync { part:"MAT-PET-250" }
{ "alternate":"SUP-BOTTLEALT-3", "name":"PackFast",
  "leadDays":7, "unitCostDeltaPct":12, "capacity":25000 }
// kyriba.cashRead
{ "available":6800000, "acmeAR":310000, "creditLimit":500000 }
// $5,900 expedite premium << $25k auto-approve threshold; ACME AR within limit
11💬

Sample questions (conversational triggers)

The natural-language prompts this agent is built to answer. Each maps to the live scenarios below.

⏱️"Supplier SUP-AROMA-09 is 14 days late — what's the impact?"→ Scenarios 1–3
🎯"Which customers are at risk from the bottle shortage?"→ Scenario 3 (revenue exposure)
🔁"Can we cover the gap from another supplier, and what does it cost?"→ Scenarios 4–5
⚖️"Allocate the available bottles to protect revenue."→ Scenarios 6–7 (approval + execute)
💰"What's our cash position if we expedite?"→ Scenario 5 (Kyriba)
📣"Who do we need to tell, and what do we say?"→ Scenario 8 (tiered comms)
🎯 Recommended demo run
Seed the mock data, then ask "SUP-AROMA-09 is 14 days late — what's the impact?" — the agent walks scenarios 1→5, then proposes allocation (6) and asks for Tier-1 approval. Approve to execute sourcing + reschedule (7), then comms (8) and tracking (9). Scenario 10 is the post-mitigation watch.
12🎬

Live scenarios (tool-execution traces)

ℹ️Ten end-to-end runs. Each step is a read (SOURCE), a reasoning step, an Action Ticket with a MOP, or an agent message.