Skip to main content
Industry Solutions

Custom Software for Mining & Metals

Secure, flexible, and compliant architecture tailored for the unique challenges of the Mining & Metals sector.

Founder & Lead Architect, ERPStack

Quick Answer

In short: a mining ERP has to prove where a number came from. ERPStack builds custom mining and metals software with assay-to-JORC and S-K 1300 lineage, GISTM tailings telemetry, offline shift capture that reconciles when the pit reconnects, MSHA 30 CFR Part 50 reporting, and provisional-price offtake revenue.

Why Custom ERP for Mining & Metals?

Operating in the Mining & Metals sector requires a systems architecture designed for high scalability, operational flexibility, and strict regulatory compliance. Standard off-the-shelf software forces your teams to reshape their workflows to fit rigid software packages. A custom ERP for the Mining & Metals industry maps directly to your exact business logic. Deployed to your secure cloud infrastructure (AWS or Azure), the system isolates database schemas, automates redundant reporting tasks, and scales without user seat licensing fees. This ensures your corporate data remains under your absolute control, eliminates vendor lock-in, and lowers long-term operational technology costs by up to 70% over a 3-year period.

Industry Pain Points

  • Assay certificates, block models and the published JORC or S-K 1300 statement sit in three systems
  • Grade control and mill feed reconcile at month-end, so mine-to-mill variance is found too late
  • Shift production and MSHA Part 50 records on paper because the pit has no connectivity
  • GISTM instrumentation lives with the dam consultant, not in a PostgreSQL store the Accountable Executive can query
  • Offtake revenue cannot close at shipment because the quotational period has not run
  • Royalty, EITI and Regulation (EU) 2017/821 reporting re-keyed from four systems into the ERP

Engineering Blueprint

Mining is not manufacturing with rocks. Nothing is assembled, so there is no bill of materials: the core object of a mining ERP is the resource and reserve model, and the chain from a drillhole assay to a signed statement under the JORC Code, NI 43-101, SAMREC or SEC Regulation S-K 1300. ERPStack builds that chain as data in PostgreSQL.

Assay-to-statement lineage

S-K 1300 (17 CFR 229.1300) requires a qualified person with at least 5 years of relevant experience behind every resource and reserve figure; the JORC Code 2012, mandatory for ASX and NZX reporting since 1 December 2013, demands the same of a Competent Person. ERPStack stores samples, ISO/IEC 17025 laboratory certificates, QA/QC inserts and versioned block models as append-only Drizzle ORM rows in PostgreSQL, so any published tonnage walks back to the certificate behind it — an Immutable Audit Trail with a mining shape.

// Drizzle ORM on PostgreSQL — a re-assay is a new row, never an edit
      export const assays = pgTable('assays', {
        sampleId: text('sample_id').notNull(),
        labCertificate: text('lab_certificate').notNull(), // 17025 lab
        element: text('element').notNull(),
        gradePpm: numeric('grade_ppm', { precision: 14, scale: 4 }),
        qaqcType: text('qaqc_type'),   // routine | standard | blank | dup
        receivedAt: timestamp('received_at').notNull(),
      });

Grade control and mine-to-mill reconciliation

Reconciliation decides whether the mine plan is real: modelled tonnes and grade against grade-control tonnes against mill feed and metal recovered. ERPStack holds stockpiles as balances carrying a grade, consumes payload and cycle records from a Modular Mining DISPATCH-class fleet system over Apache Kafka, and computes modelled-versus-delivered variance per shift, so a discrepancy surfaces in a day rather than at month-end. Block models from Maptek Vulcan import as Zod-validated versioned snapshots, never an overwrite.

Offline-first is an architecture

A decline or a remote pit has no connectivity, so ERPStack ships mining shift capture as a Next.js and TypeScript client with a per-device write queue and monotonic event ids, draining through an idempotent API on reconnect — Idempotency in API Design, not optimism — so a shift report sent twice from a truck cab still produces one record. SAP S/4HANA keeps the ledger at most large mining houses; the gap worth building sits between that ledger and the geology, and the Strangler Fig Migration Pattern closes it without stopping the pit.

Our Solutions

  • Append-only sample, QA/QC and ISO/IEC 17025 certificate tables in PostgreSQL with chain of custody
  • Versioned block-model snapshots from Maptek Vulcan, validated by Zod before load
  • Offline-first Next.js and TypeScript shift capture with per-device queues and an idempotent API
  • Fleet and instrumentation events on Apache Kafka, series stored in TimescaleDB
  • Shipment, provisional invoice and quotational settlement as three Drizzle ORM ledger events
  • RBAC by site and tailings facility behind an Immutable Audit Trail, auditable against SOC 2 and ISO 27001

Compliance & Security

JORC Code 2012 NI 43-101 SAMREC 2016 SEC S-K 1300 GISTM 2020 MSHA 30 CFR Part 50 SOC 2 Type II

Mining compliance is a signature problem: every framework below ends with a named human attesting to a number, so the ERP requirement is always the same — prove where it came from.

  • One reserve dataset, four public reporting codes

    The JORC Code 2012 Edition governs ASX and NZX disclosure; NI 43-101, administered by the Canadian Securities Administrators after Bre-X, governs Canada; SAMREC has been mandatory in its 2016 form since 1 January 2017, and the JSE’s Section 14 minerals requirements bind new applicants from 13 January 2026 and existing issuers from 16 February 2026; S-K 1300 governs SEC filers. All four separate Inferred, Indicated and Measured resources from Probable and Proven reserves, so ERPStack makes the category a first-class PostgreSQL column with RBAC over who may move a tonne between them.
  • GISTM tailings monitoring as a live pipeline

    The Global Industry Standard on Tailings Management, published August 2020 by ICMM, UNEP and the PRI, carries 6 topics, 15 principles and 77 auditable requirements. Requirement 8.4 names an Accountable Executive answerable to the CEO, 8.5 a site Responsible Tailings Facility Engineer, Principle 9 an Engineer of Record and 8.7 an Independent Tailings Review Board for Very High and Extreme facilities; 10.5 sets a dam safety review at least every 5 years for those and every 10 otherwise. ERPStack lands piezometer and pond-level series in TimescaleDB keyed to the consequence classification, so the Requirement 15.1 annual disclosure is generated.
  • MSHA Part 50 and payments transparency

    A US mine must notify MSHA within 15 minutes on 1-800-746-1553 under 30 CFR 50.10, file Form 7000-1 within 10 working days under 50.20 and file quarterly Form 7000-2 within 15 days of quarter end under 50.30 — three clocks on one incident record, modelled as scheduled obligations, not reminders. The same PostgreSQL ledger feeds EITI Standard 2023 payments-to-governments reporting and jurisdictional royalty calculation.
  • Revenue that is not known at shipment

    A concentrate offtake prices against a market index at the time of purchase, not at loading, so the invoice stays provisional until the quotational period closes. ERPStack posts shipment, provisional invoice and final settlement as three events on one lot id, keeping mining revenue re-measurable without editing history — and that lot lineage also answers Regulation (EU) 2017/821, binding on Union importers of tin, tantalum, tungsten and gold since 1 January 2021.

Standards we engineer to

  • JORC Code 2012
  • NI 43-101
  • SAMREC 2016
  • SEC S-K 1300
  • GISTM 2020
  • MSHA 30 CFR Part 50
  • SOC 2 Type II

Get the Blueprint

Download our comprehensive Systems Architecture Blueprint to see how we architect compliant solutions.

Download Blueprint

Metrics & Integrations

Illustrative engineering targets for this sector — the SLAs and capacities we design and build toward, not a live service dashboard.

Shift reconciliation close

< 24 h

Offline queue window

72 h

TimescaleDB sensor interval

5 s

Assay lineage retention

25 years

Integration: ISO/IEC 17025 LIMS

Category: Assay lab

Integration: Maptek Vulcan

Category: Block model

Integration: Modular Mining DISPATCH

Category: Fleet

Integration: Apache Kafka

Category: Event bus

Integration: TimescaleDB

Category: Tailings telemetry

Integration: SAP S/4HANA

Category: Incumbent ledger

Implementation Process

Phase 1

Lineage audit

Trace one published resource figure back to its assay certificate and log every break.

Phase 2

Sample and model schema

Append-only PostgreSQL tables for samples, QA/QC, lab certificates and block-model versions.

Phase 3

Offline shift capture

Next.js client with per-device queues and an idempotent API for pits and declines.

Phase 4

Tailings and safety pipelines

Apache Kafka into TimescaleDB on AWS, wired to MSHA Part 50 and GISTM obligations.

Phase 5

Reconciliation engine

Modelled-versus-delivered variance per shift across stockpiles, grade control and mill feed.

Phase 6

Settlement and disclosure

Provisional and final offtake postings plus generated GISTM and EITI extracts.

Frequently Asked Questions

By making every step append-only. S-K 1300 requires a qualified person with at least 5 years of relevant experience behind each figure, and the JORC Code 2012 requires the same of a Competent Person. ERPStack stores a mining operation's samples, ISO/IEC 17025 certificates, QA/QC inserts and versioned block models as immutable PostgreSQL rows.

Keep SAP S/4HANA for the ledger. It runs finance, procurement and maintenance at most large mining houses, and replacing it is rarely the highest-value project. The gap worth building sits between that ledger and the geology and fleet systems — reconciliation, grade control, tailings disclosure, offtake settlement — which no ERP package models natively.

South Africa is the sharp edge. The JSE's Section 14 Listings Requirements for minerals companies bind new applicants from 13 January 2026 and existing issuers from 16 February 2026, on top of SAMREC, mandatory since 1 January 2017. A mining group reporting under several codes needs one PostgreSQL reserve dataset producing JORC, SAMREC and S-K 1300 views.

As three events, not one edit. A concentrate offtake prices against a market index at the time of purchase rather than at loading, so shipment, provisional invoice and final settlement at the close of the quotational period each post separately against one lot id. ERPStack keeps them as distinct Drizzle ORM rows in the mining ledger, re-measurable without rewriting history.

With queues and idempotency, not optimism. ERPStack ships mining shift capture as a Next.js client writing to a per-device queue with monotonic event ids, draining through an idempotent API on reconnect. Quantities merge; MSHA Part 50 incident records never do — they stay append-only and conflicts surface to a supervisor.

Yes, as a generated document. Requirement 15.1 of the Global Industry Standard on Tailings Management obliges operators to publish at least annually each facility's description, consequence classification, risk-assessment summary and monitoring findings. ERPStack keys a mining operator's tailings instrumentation in TimescaleDB to the facility record carrying that classification, so the disclosure is an ERP query.

Sectors with overlapping obligations

Related reading

Explore Custom ERP Solutions by Location, Industry, and Alternatives

Global Architectures