Install
$ agentstack add skill-ilia-inovaflow-s4hana-create-record-skills-s4hana-create-pir ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
s4hana-create-pir
Create Purchasing Info Records on SAP S/4HANA Cloud Public. Verified production-ready against SAP S/4HANA Cloud Public Edition 2026-05-12 (PIR 5300000130 created via API; 119 prior bulk-migrated PIRs from 2026-05-05).
When to trigger
Verbs: create / post / add / generate / seed / maintain / onboard Objects: PIR(s), purchasing info record(s), info record(s), supplier-material pricing Counts: 1 to ~200 records.
Hard rules (never violate)
- Always do a 1-record live POST as a probe before bulk (≥3 records).
- Never invent IDs — verify Supplier exists on the target PurchOrg, Material has
ProcurementType=F, both exist in the target Plant. - If a required field has no sensible default and the user didn't specify → ask once, then auto-pick.
- Scripts go in
/.s4hana-tmp/create-pirs-/. Never commit, never modify.env. - POSTs are sequential with 200ms delay; halt on 3 consecutive failures.
Endpoint
- Service path:
/sap/opu/odata/sap/API_INFORECORD_PROCESS_SRV - Entity sets:
A_PurchasingInfoRecord,A_PurgInfoRecdOrgPlantData - Method: POST (deep-insert with
to_PurgInfoRecdOrgPlantData) - Communication scenario:
SAP_COM_0102— "Purchasing Info Record Integration"
Phases
Phase 0 — Setup check (MANDATORY, no exceptions)
Before any API call, before any tool use, do this check. Even if you already know credentials from earlier in the conversation — IGNORE that knowledge and re-check from scratch each invocation.
- Announce: tell the user "Checking for SAP credentials in ``..."
- Check ONLY these two sources:
- A
.envfile at./.env(in the current working directory — NOT parent dirs, NOT~/.env, NOT any memory file) - Shell-exported env vars:
SAP_HOSTANDSAP_AUTH_MODEboth present
- If neither: auto-create
./.envfrom the bundled template (curl fromhttps://raw.githubusercontent.com/ilia-inovaflow/s4hana-create-record-skills/main/.env.example), append.envto.gitignoreif not already there, tell the user clearly what to fill in (auth mode + host + creds), and wait for them to say "ready" before making any API call. Never overwrite an existing.env. - If credentials are present: report back to the user: "✓ Loaded credentials for `
in` mode. Proceeding with [task]."
Never use credentials from conversation memory, from another project's .env, or from any tenant the user previously worked with in a different session. Each project gets its own .env. See [shared/setup-check.md](../../shared/setup-check.md) for the full rationale and edge cases.
Cross-tenant migration notes
- Source PIR IDs do NOT carry forward — Cloud auto-assigns.
- For pair (supplier, material): both must exist in target with their PurchOrg/plant relationships established. If migrating from a source with different supplier/material pools, hash-pair them deterministically.
- 2026-05-05 migration: 109 PIRs created in one batch by hash-pairing 81+ SUPL suppliers against ~100 ProcurementType=F materials at plant 1010. Side-effect: 210 pricing condition records auto-generated.
Known error catalog
| Code | Cause | Fix | |---|---|---| | ME/083 | "Enter G/L Account" OR "Enter Standard Order Quantity" | The PIR variant: add StandardPurchaseOrderQuantity to org-plant entity | | ME/092 | Procurement type doesn't match (material is in-house E, but PIR needs F external) | Filter materials to ProcurementType=F only | | 06/321 | Supplier does not exist in purchasing organization | Extend supplier with A_SupplierPurchasingOrg row for the target PurchOrg first | | Property X is invalid | Header has fields that belong on org-plant (e.g. PurchasingInfoRecordCategory) | Move them into to_PurgInfoRecdOrgPlantData | | MM_PUR_PIR/xxx generic | Check innererror.errordetails | Specific field will be named |
Output structure
/.s4hana-tmp/create-pirs-/
├── eligible-pairs.json # (supplier, material) candidates after filtering
├── payloads.json
├── create-log.jsonl
├── results.json
└── verify-sample.json
Reference files
references/envelope-template.md— full schema with all optional fieldsreferences/known-quirks.md— header vs org-plant fields, ProcurementType filter, supplier-purchorg requirement, side-effectsscripts/bulk-pir-poster.mjs— reference implementation
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ilia-inovaflow
- Source: ilia-inovaflow/s4hana-create-record-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.