SOX, Internal Controls, and Compliance Frameworks
If you work on an ERP at a listed company, compliance shapes your daily process — what you can access, how code gets deployed, and what evidence you must produce.
What SOX is
The Sarbanes-Oxley Act (2002), passed after the Enron and WorldCom frauds. Applies to companies listed on US exchanges, including foreign private issuers.
The two sections that matter:
- Section 302 — the CEO and CFO personally certify that the financial statements are accurate and that internal controls are effective. Personally, with criminal liability.
- Section 404 — management must assess and report on internal control over financial reporting (ICFR), and the external auditor must attest to it.
Section 404 is why your ERP is in scope. If the financial statements come from the ERP, the ERP’s controls are financial reporting controls.
Equivalents elsewhere: J-SOX (Japan), C-SOX/Bill 198 (Canada), UK Corporate Governance Code (with an expanded UK internal controls regime phasing in), EU CSRD for sustainability reporting, and King IV (South Africa).
The control types
ITGC — IT General Controls
Apply to the whole IT environment
├── Access to programs and data
├── Program change management
├── Program development
└── Computer operations
ITAC — IT Application Controls
Built into the application
├── Input validation
├── Processing accuracy (three-way match, tolerance checks)
├── Output completeness
└── Automated approvals and limits
Business process controls
├── Manual (reconciliations, reviews, approvals)
└── Automated (system-enforced)
ITGCs are the foundation. If ITGCs fail, the auditor cannot rely on any automated control, and everything must be tested manually — which is expensive and makes the audit much more intrusive. This is why an ITGC failure is a serious finding.
ITGC in practice — what auditors test
1. Access to programs and data
□ User access is granted through an approved request process
□ Access is removed promptly on termination ← most commonly failed
□ Access is reviewed periodically (recertification) with evidence
□ Privileged access is restricted and monitored
□ Segregation of duties is enforced
□ Developers do not have production write access
□ Generic/shared accounts are minimised and justified
□ Password/MFA policy is enforced
2. Program change management
□ Changes are requested, approved, tested, and approved for deployment
□ Testing evidence is retained
□ Deployment is performed by someone other than the developer
□ Emergency changes follow a defined, documented process
□ Environments are segregated (DEV/QAS/PRD)
□ Only authorised code reaches production
3. Program development
□ New systems and major changes follow an SDLC
□ User acceptance testing is performed and documented
□ Data conversion is validated and reconciled
□ Go-live approval is documented
4. Computer operations
□ Batch jobs are scheduled, monitored, and failures are addressed
□ Backups are performed and restore is tested
□ Incidents are logged and resolved
□ Disaster recovery is documented and tested
Key ERP application controls
| Control | Type | Tested by |
|---|---|---|
| Three-way match with tolerances | Automated | Inspecting configuration + a sample |
| Approval workflow with value thresholds | Automated | Configuration review + a sample |
| Credit limit check | Automated | Configuration + attempting to breach it |
| Duplicate invoice check | Automated | Configuration + a test posting |
| Period-end close controls | Automated | Attempting to post to a closed period |
| Automatic account determination | Automated | Configuration review + posting samples |
| Mandatory field validation | Automated | Attempting an incomplete posting |
| Document numbering (gapless) | Automated | Gap analysis over the population |
| Reconciliation account controls | Automated | Attempting a direct posting |
| Bank reconciliation | Manual | Reviewing evidence |
| Manual journal review | Manual | Reviewing evidence and approval |
Automated controls are cheaper to audit than manual ones, because the auditor tests the configuration once plus a small sample, rather than testing every occurrence. This is a genuine business argument for automating a control, and worth making when someone proposes a manual review as a fix.
Control documentation
Every control needs:
Control ID: FIN-AP-003
Description: The system prevents posting a vendor invoice where the
quantity or price varies from the PO beyond configured tolerance.
Control owner: AP Manager
Frequency: Every transaction (automated)
Type: Preventive, automated, ITAC
Risk addressed: Overpayment to suppliers; unauthorised expenditure
Evidence: Configuration screenshot of tolerance settings;
blocked invoice report for the period
Test procedure: Inspect configuration; attempt a posting outside tolerance;
review the blocked invoice report for the period
Frequency of testing: Annually (configuration), quarterly (report review)
Developers get asked for evidence. A screenshot of the tolerance configuration table, an extract of blocked invoices, a list of users with a given authorisation. Knowing where to find these quickly makes you valuable during audit season.
Deficiency severity
Control deficiency A control doesn't operate as designed
Significant deficiency Important enough to merit attention by those
charged with governance
Material weakness A reasonable possibility that a material
misstatement would not be prevented or detected
A material weakness must be publicly disclosed. It moves the share price, triggers shareholder questions, and sometimes costs executives their jobs. This is why control failures are taken seriously in a way that surprises developers coming from other industries.
Common ERP audit findings
Ranked roughly by frequency:
- Terminated users still active — the HR-to-IT deprovisioning link is broken
- Developers with production access
- Segregation of duties conflicts not remediated or documented
- Superuser access over-assigned or unmonitored
- Emergency changes without documentation or retrofit
- Access recertification not performed or not evidenced
- Testing evidence not retained for changes
- Shared/generic accounts with no accountability
- Manual journal entries without documented approval
- Reconciliations not performed timely or not evidenced
- Batch job failures not monitored or addressed
- Backup restore never tested
Notice how many are process and evidence failures, not technical ones. The control usually exists; nobody can prove it operated.
What this means for your daily work
| Practice | Why |
|---|---|
| Every change has a ticket | Change management evidence |
| Every change is tested, with retained evidence | Testing evidence |
| You don’t deploy your own code to production | Segregation |
| You don’t have production write access | Access control |
| Emergency changes are documented within 24h | Change management |
| Custom code respects authorisation checks | Access control |
| Custom code writes to the change log | Audit trail |
| You don’t share credentials | Accountability |
| Batch failures are logged and addressed | Operations |
“I fixed it directly in production because it was urgent” is a control failure, even when the fix was correct and the urgency was real. Use the emergency process — it exists precisely for this.
Other frameworks you’ll encounter
| Framework | Scope |
|---|---|
| COSO | The internal control framework SOX assessments are based on |
| COBIT | IT governance framework; maps well to ITGCs |
| ISO 27001 | Information security management |
| SOC 1 (ISAE 3402) | Controls at a service organisation relevant to financial reporting — if you run an ERP SaaS, your customers will demand this |
| SOC 2 | Security, availability, confidentiality, processing integrity, privacy |
| PCI-DSS | If you store or process card data |
| NIST CSF | Cybersecurity framework |
| ITIL | Service management — incident, problem, change |
If you’re building an ERP product: SOC 1 Type II is the price of entry for enterprise customers. Their auditors need assurance over your controls because your system produces their financial data. Design for it early — retrofitting evidence-producing controls is much harder than building them in.
Audit season
Typically the last quarter of the fiscal year plus the first months after:
- Walkthroughs: the auditor observes a process end to end
- Control testing: samples selected, evidence requested
- Data extracts requested — often full population
- IT questionnaires
- Interviews with control owners
- Findings raised, management responses drafted
- Remediation plans agreed
Practical advice: respond quickly and completely. A slow or partial response turns a simple question into a finding. And keep the standing reports listed in Audit Trails ready — most requests are the same every year.
The developer’s compliance mindset
Compliance is not bureaucracy for its own sake. Each requirement traces back to a fraud or a failure that actually happened:
- Access removal on termination → because departing employees stole data and money
- Developers off production → because developers made unauthorised changes
- SoD → because single individuals defrauded companies for years
- Change management → because untested changes broke financial systems
- Audit trails → because without them, fraud was undetectable
Understanding why makes compliance tolerable and makes you better at proposing solutions that satisfy it rather than fighting it. The colleague who says “we can achieve that control automatically instead of with a manual review” is the one auditors and finance teams both want to work with.