Specialist review pending. Review requirements for O081
Data & AI / Compare approachesSegregation of duties across spares, service acceptance and payment
For Operator finance, procurement, maintenance and IT/security owners
TL;DR — what you’ll learn
- Do not audit Segregation of Duties (SoD) inside the core ERP in isolation; map role conflicts across connected maintenance (CMMS), field service-entry portals, and accounts-payable automation interfaces.
- Preserve user identity across system integrations so a generic middleware service account (`API_SYNC_USER`) does not let the same individual create a purchase order in the ERP and approve the corresponding Service Entry Sheet in a field portal.
- Eliminate toxic permission pairs structurally wherever staffing permits, and restrict compensating controls to genuinely small remote sites where every self-paired transaction is blocked at payment until an independent reviewer signs off.
- Test access controls against actual executed transaction logs—not just static role names—before signing off a quarterly access review.

Topics: ERP segregation of duties, role conflict matrix ERP, procure to pay access controls, compensating controls oil and gas
In oil and gas operations, procure-to-pay (P2P) and maintenance-to-settlement workflows rarely live inside a single software screen. A reliability engineer raises a work order in a CMMS, a buyer or contract administrator issues a purchase order or call-off in the ERP, a wellsite supervisor accepts work on a mobile ticket or Service Entry Sheet (SES), a storekeeper books spares into a remote warehouse, and accounts payable matches and pays the vendor invoice. When an access review inspects only standard ERP role names, it misses the two largest sources of control failure: cross-system identity masking (where an integration user posts field acceptances on behalf of whoever clicked approve in the portal) and unmonitored emergency or small-site composite roles.
The core operational decision in ERP segregation of duties is to build an action-pair conflict matrix across all connected operational and financial systems, enforce end-to-end user-ID propagation on every interface, and replace informal "management oversight" with hard pre-payment holds wherever remote staffing forces a compensating control. Sourcing, service-acceptance, and invoice-blocking workflows in SAP S/4HANA Sourcing and Procurement and SAP S/4HANA Cloud Service Entry Sheet Approval define how purchase orders, service acceptances, and invoice releases interact, while NIST SP 800-82 Rev. 3 establishes role-based access control and boundary protection between operational systems and enterprise networks. Specific internal-control, statutory-audit, and regulatory requirements must be confirmed with your internal audit, legal, and information-security authorities.
Four toxic action pairs in oil and gas spares and service workflows
Rather than starting with hundreds of abstract transaction codes, operations and finance owners should anchor their conflict matrix on four high-consequence action pairs where one person could otherwise originate and conceal an erroneous or fraudulent transaction:
- Chain C1 — Vendor Master / Bank-Account Maintenance + Payment Run or Invoice Entry: If a user can create a supplier or alter bank-account details and also enter an invoice or release a payment batch, an unverified bank destination can be inserted and paid before month-end reconciliation.
- Chain C2 — Purchase Order / Call-Off Creation + Service Entry Sheet (
SES) or Goods Receipt Approval: In oilfield services, the acceptedSESis the commercial trigger that opens the 3-way match gate. Frequently, a field contract engineer creates a call-off PO in the ERP and then approves the contractor's field ticket in an external portal. If the middleware posts the ERPSESunder a technical user (RFC_INTEGRATION), standard ERP SoD checks see two different users (ENGINEER_01andRFC_INTEGRATION) even though the same human performed both steps. - Chain C3 — Spares Goods Receipt (
GRN) + Inventory Count / Write-Off Adjustment: At remote onshore fields or offshore platforms, giving the same storekeeper unrestricted rights to post purchase-order receipts and approve physical-inventory shrinkage adjustments allows short deliveries or missing high-value spares to be written off as routine stock variance. - Chain C4 — Invoice Tolerance Block Release + Outgoing Payment Execution: When an invoice automation or three-way match workflow blocks a vendor invoice for a price or quantity variance, the person who overrides or releases that block must never be able to execute the outgoing bank disbursement run.
Scroll horizontally to see all columns.
| Conflict chain ID | Action A (Origination / Modification) | Action B (Acceptance / Settlement / Adjustment) | Cross-system blind spot | Preferred structural fix | Mandatory compensating control (if small-site constrained) |
|---|---|---|---|---|---|
C1: Vendor + Pay |
Create supplier or edit vendor bank account | Post vendor invoice or release payment proposal | Emergency IT/finance support roles left active after go-live | Hard role split + dual-control bank workflow (0 exceptions permitted) | Not eligible for compensating control; split roles across headquarters finance |
C2: PO + SES |
Create/amend PO or contract call-off (ME21N/ME22N) |
Approve field ticket in CMMS/portal or release SES (ML81N) |
Middleware posts SES using generic service account, hiding portal approver ID |
Pass authenticated Portal_Approver_ID to ERP and block if equal to PO_Creator_ID |
If remote shift supervisor must log emergency call-off & receipt, hold invoice until onshore superintendent signs off |
C3: GRN + Adjust |
Post warehouse Goods Receipt against PO (MIGO) |
Post physical inventory difference / write-off (MI07) |
Single-person remote field storeroom with broad materials role | Restrict MI07 adjustment posting to central materials controller |
Require physical cycle-count verification by visiting maintenance lead + controller approval for any write-off |
C4: Unblock + Pay |
Release blocked invoice variance (MRBR) |
Execute outgoing payment run / bank file (F110) |
Senior AP supervisor role combining exception handling and treasury release | Separate invoice exception release from payment run execution and bank approval | Independent controller review of 100-percent of unblocked invoices prior to bank signatory release |
- 1. Propagate human identity across APIsRequire every CMMS or field-portal payload to pass the authenticated human approver's unique employee ID into the ERP document header alongside the technical integration user.
- 2. Evaluate same-actor rules at acceptanceCheck at Service Entry Sheet or Goods Receipt release whether the accepting employee ID matches the PO creator or recent PO modifier on that transaction.
- 3. Enforce hard splits or pre-payment holdsRemove toxic permission pairs for headquarters and standard sites; for authorised remote-site exceptions, automatically route self-paired transactions to an onshore supervisor hold queue before invoice match.
- 4. Audit executed transaction pairs quarterlyRun quarterly SQL/audit-log joins across PO, SES, GRN, inventory adjustment, and payment tables to verify zero unapproved same-user execution pairs.
Review boundary: Role matrices, Firefighter/emergency access logs, and audit thresholds require sign-off from internal audit, finance, and cybersecurity owners ([O053](O053-service-entry-sheet-evidence.md), [O063](O063-invoice-automation-pilot.md)).
Worked example: Auditing 180 user accounts and ₹42.50 crore of quarterly P2P spend
All user counts, transaction volumes, and rupee figures below are illustrative teaching examples demonstrating how cross-system transaction analysis exposes hidden role conflicts.
Suppose an oil and gas operator reviews 180 active user accounts across its ERP and field service-management portal during a quarterly access audit covering 1,420 procure-to-pay and inventory transactions worth ₹42,50,00,000 (₹42.50 crore).
Initially, an ERP-only role check flags just 9 user accounts (C1 and C4 inside finance). When the audit team joins the ERP purchase-order, goods-receipt, and inventory-adjustment logs against the field portal's Actual_Approver_ID log (behind the API_SES_SYNC technical account), the total number of conflicted user accounts rises to 34 accounts (18.89% of the 180 users), affecting 68 executed transactions worth ₹3,84,00,000 (9.04% of quarterly spend):
- Chain
C1(Vendor Bank Edit + Payment Release):- Audit finding: 4 accounts held a legacy post-migration support role permitting both vendor bank maintenance and payment proposal release; 6 transactions totalling ₹78,00,000 were processed by these IDs during the quarter.
- Remediation: Hard permission removal on all 4 accounts (
0exceptions allowed). All 6 historical payments (₹78,00,000) were verified against independent bank-confirmation callbacks.
- Chain
C2(PO Call-Off Creation + Portal/ERP Service Entry Acceptance):- Audit finding: 14 field contract engineers and supervisors created call-off POs in the ERP and approved the corresponding service tickets in the field portal, which posted
31ERP Service Entry Sheets worth ₹1,92,00,000 viaAPI_SES_SYNC. - Remediation:
- For 11 onshore/regional engineers, portal-to-ERP identity propagation was enabled with a hard rule blocking
SESapproval wheneverPortal_Approver_ID == PO_Creator_ID. - For 3 remote offshore night-shift supervisors (where staffing on the installation has only one supervisor per discipline on shift), a governed compensating control was configured: the system permits emergency night-shift call-off logging but automatically sets a Payment Block (
Block Code: SOD-R) on the resultingSESuntil the onshore maintenance superintendent reviews and signs off the evidence pack within48 hours.
- For 11 onshore/regional engineers, portal-to-ERP identity propagation was enabled with a hard rule blocking
- Audit finding: 14 field contract engineers and supervisors created call-off POs in the ERP and approved the corresponding service tickets in the field portal, which posted
- Chain
C3(Spares Goods Receipt + Inventory Write-Off Adjustment):- Audit finding: 11 satellite storekeepers held composite warehouse roles allowing both
MIGOgoods receipt andMI07physical-inventory variance posting, accounting for 22 transactions worth ₹69,00,000. - Remediation: Hard role split on all 11 accounts: storekeepers retain
MIGOreceipt andMI04count-entry rights, whileMI07difference posting is restricted to the central materials controller and plant finance.
- Audit finding: 11 satellite storekeepers held composite warehouse roles allowing both
- Chain
C4(Blocked Invoice Release + Outgoing Payment Execution):- Audit finding: 5 AP accounts held both
MRBRinvoice-block release andF110payment-run execution rights, covering 9 transactions worth ₹45,00,000. - Remediation: Hard role split on all 5 accounts:
MRBRvariance release is restricted to procurement/finance controllers, while AP analysts executeF110only on unblocked items.
- Audit finding: 5 AP accounts held both
Total Conflicted Accounts = 4 (C1) + 14 (C2) + 11 (C3) + 5 (C4) = 34 of 180 users (18.89%)
Structurally Remediated Accounts = 4 + 11 + 11 + 5 = 31 accounts (with 3 offshore accounts under hard pre-payment hold)
Total Exposed Quarterly Spend = ₹78,00,000 + ₹1,92,00,000 + ₹69,00,000 + ₹45,00,000 = ₹3,84,00,000 across 68 transactions
Spend breakdown: ₹78.0 L (C1: 6 txns) + ₹192.0 L (C2: 31 txns) + ₹69.0 L (C3: 22 txns) + ₹45.0 L (C4: 9 txns) = ₹3,84,00,000 across 68 transactions.
Scroll horizontally to see all columns.
| Conflict chain | Conflicted users found | Executed transactions in quarter | Exposed transaction value (₹) | Structural role splits applied | Governed remote-site exceptions | Post-remediation control gate |
|---|---|---|---|---|---|---|
C1: Bank Edit + Payment Release |
4 | 6 | 78,00,000 | 4 | 0 | Dual-custody bank workflow + independent bank callback |
C2: PO Call-Off + Portal/ERP SES |
14 | 31 | 1,92,00,000 | 11 | 3 (Offshore night shift) | API passes Portal_Approver_ID; offshore self-pairs get SOD-R payment block until onshore sign-off |
C3: Spares GRN + Inventory Write-Off |
11 | 22 | 69,00,000 | 11 | 0 | Storekeeper enters count only; controller posts MI07 adjustment |
C4: Invoice Unblock + Payment Run |
5 | 9 | 45,00,000 | 5 | 0 | Controller releases MRBR block; AP executes F110 payment run |
| Total Across Audit Scope | 34 (of 180) | 68 (of 1,420) | 3,84,00,000 | 31 Users Split | 3 Users Gated | All 68 historical transactions verified; live gates active |
Observable acceptance tests for cross-system SoD controls
Before closing an ERP/CMMS access remediation project, run three acceptance tests in a pre-production environment:
ACT-O081-01(Cross-system identity propagation & same-actor block): Create a purchase order in the ERP under userENG_USER_04and attempt to approve the corresponding field service ticket in the external portal under the same userENG_USER_04(transmitted to the ERP via theAPI_SES_SYNCintegration account). Pass condition: The ERP receivesPortal_Approver_ID = ENG_USER_04, detects that it matchesPO_Creator_ID = ENG_USER_04, rejects automaticSESrelease, and routes the service entry to an independent supervisor's approval queue.ACT-O081-02(Remote-site compensating-control payment block): Using one of the 3 authorised offshore exception accounts (OFFSHORE_SUP_02), log an emergency call-off and field receipt during a simulated night shift. Pass condition: The system records the operational receipt so work can proceed, but automatically applies payment blockSOD-Ron the accounting document so the vendor invoice cannot be included in anF110payment proposal until the onshore superintendent clearsSOD-Rwith a timestamped review note.ACT-O081-03(Storeroom count vs write-off separation test): Log in as a remote storekeeper (STORE_USER_07), post a purchase-order goods receipt (MIGO), enter a physical-inventory count (MI04), and attempt to post the resulting inventory variance write-off (MI07). Pass condition: The system permitsMIGOandMI04entry but blocksMI07execution with an authorisation error, routing the variance document to the central materials controller.
Summary and next actions
Move your access review from static role names to verified cross-system transaction boundaries:
- Instrument every CMMS, field-portal, and invoice-automation interface to write the authenticated human actor's ID into a dedicated ERP header field alongside the technical integration account.
- Run a quarterly SQL or GRC join across executed POs, Service Entry Sheets, Goods Receipts, inventory adjustments, and payment runs to identify any transactions where the same employee ID executed both sides of Chains
C1throughC4. - Strip
MI07inventory write-off,MRBRinvoice-unblock, and vendor bank-activation permissions out of composite operational and support roles immediately. - Replace paper-based "compensating control memos" at remote sites with automated ERP payment blocks (
SOD-R) that hold settlement until an onshore authority reviews the self-paired transaction.
Assess cross-system ERP/EAM role separation
Join ERP transaction logs with EAM/portal human-approver IDs to detect cross-system segregation-of-duties conflicts and test mitigating controls.
Prepare a focused assessmentReferences
Sources checked 15 October 2026. Vendor examples retain their stated release scope. Catalogue entries do not replace the full applicable standards. Reference follow-ups.
- SAP Help Portal — SAP S/4HANA Sourcing and Procurement — Standard authorisation objects, purchasing release strategies, goods receipt, and invoice verification controls; accessed 19 October 2026.
- SAP Help Portal — Approval of Service Entry Sheets in SAP S/4HANA Cloud — Workflow configuration and role separation for external service entry approval; accessed 19 October 2026.
- NIST — SP 800-82 Rev. 3: Guide to Operational Technology (OT) Security — Least-privilege access control, identity propagation, and boundary protection between operational and enterprise systems; accessed 19 October 2026.

