Skip to main content
Secure Enterprise Engineering

GDPR Compliant ERP Systems & European Data Sovereignty

Holding personal data about people in the European Union brings obligations that cannot be retrofitted cheaply. ERPStack builds custom ERP applications with data residency decided at schema design, AES-256 encryption at rest, and automated data subject access request (DSAR) workflows — so that Articles 15 to 20 of the GDPR are answered by a query rather than by a manual investigation. The platform runs on Next.js, TypeScript and PostgreSQL, deployed by Terraform into your own AWS or Microsoft Azure account.

Quick Answer

In short: ERPStack designs and builds custom B2B ERP software engineered against the GDPR control baseline — server-side RBAC, AES-256 encryption at rest, TLS 1.3 in transit, and append-only audit logging — deployed into your own AWS or Microsoft Azure account with 100% source-code ownership and zero per-seat licensing.

GDPR control baseline, in numbers

Every row below is a parameter an assessor can test, not a posture we can assert.

Breach clock
Detection tuned to the Article 33 deadline: 72 hours from becoming aware.
Rights coverage
Articles 15 to 20 automated — access, rectification, erasure, restriction, notification, portability.
DSAR turnaround
Full export as JSON and PDF in under 60 seconds, straight from your PostgreSQL schema.
Erasure
Article 17 deletion in 1 transaction; the erasure log holds 0 personal data fields.
Residency
Regional PostgreSQL clusters (AWS eu-central-1 Frankfurt plus a US region), enforced by database roles.
Encryption
AES-256 at rest and TLS 1.3 in transit, with 90-day key rotation.
Authorisation
Server-side RBAC on 100% of queries, with multi-tenant row-level isolation.
Consent record
Versioned history of every grant, change, and withdrawal, with timestamps.
Exposure modelled
Article 83(5) upper tier: 20 million euros or 4% of worldwide annual turnover.
Handover
100% of the repository, Terraform, and the records-of-processing evidence.
Delivery
6 to 24 weeks on fixed-fee milestones from $25,000, on Next.js, TypeScript and PostgreSQL.
Licensing
0 per-seat fees; the ERP, its PostgreSQL database, and the AWS account stay yours.
Processor scope
0 ERPStack accounts reach production after handover, via RBAC and AWS key transfer.

GDPR Checklist

  • Data Residency
    Regional PostgreSQL clusters (AWS eu-central-1 Frankfurt) with role-level cross-region denial.
  • Right to Erasure
    Article 17 deletion in 1 Drizzle ORM transaction; the erasure log holds 0 personal fields.
  • DSAR Export
    Every row keyed to a data subject, as JSON and PDF, in under 60 seconds.
  • Consent Tracking
    Versioned history of grants, changes, and withdrawals, timestamped to the second.
  • Data Encryption
    AES-256 at rest across PostgreSQL tables and backups, TLS 1.3 in transit, 90-day key rotation.

Why ERPStack Custom Engineering?

  • Residency by designEU records stay in EU AWS regions, enforced by PostgreSQL roles rather than by convention.
  • Rights in secondsArticles 15 to 20 answered by 1 SQL query with a full audit trail attached.
  • Evidence in the schemaResidency, retention, and consent state visible where a supervisory authority looks.

Grade Your Architecture Readiness

Use our interactive systems grader to evaluate your current PostgreSQL configuration, RBAC model, scaling limits, and audit-evidence gaps against the GDPR controls above. It takes about 4 minutes and returns a written result, not a lead form.

Start Security Audit

Global Privacy Systems: GDPR Compliance & Data Sovereignty

Executive Summary

This is how ERPStack implements GDPR compliant ERP platforms. Article 83(5) sets the upper tier of administrative fines at 20 million euros or 4% of total worldwide annual turnover, whichever is higher. That figure makes privacy an architecture problem rather than a policy problem: where records live, who can reach them, and how fast they can be produced or destroyed are decisions made in the PostgreSQL schema, not in a document.

Privacy by Design, in the Schema

Data residency and routing. Regional PostgreSQL clusters — AWS eu-central-1 in Frankfurt alongside a US region — hold records in their home jurisdiction. Routing derives from the controller's tenancy, not from a request header a client can set. Cross-region reads are denied at the database role level, so an application bug cannot quietly relocate personal data. Multi-tenant isolation is enforced by row-level policies rather than by an WHERE clause someone might forget.

Data minimisation. Schemas capture only the fields a process needs. Every optional column is an ongoing liability in a DSAR, a breach notification, and a retention review, so the default answer to a speculative field is no.

Consent management. Consent is a first-class table with history: what was agreed, when, under which version of the notice, through which interface. Withdrawal is recorded the same way, which is what makes the record defensible months later.

Pseudonymisation. Identifiers are decoupled from transactional tables. Reporting queries in the ERP join on opaque UUIDs, so an analyst produces revenue by segment without ever seeing a name.

Data Subject Rights, Automated

Articles 15 to 20 cover access, rectification, erasure, restriction, notification, and portability. Drizzle ORM turns each into an administrative action rather than a project.

// Article 17 erasure. The deletion event is logged, but the log row
// carries no personal data — only request id, timestamp, tables touched.
import { eq } from 'drizzle-orm';
import { db } from '@/libs/DB';
import { leadSchema } from '@/models/Schema';

export async function processGdprErasure(email: string, requestId: string) {
  return db.transaction(async (tx) => {
    await tx.delete(leadSchema).where(eq(leadSchema.email, email));
    await tx.insert(erasureLog).values({ requestId, tables: ['leads'] });
    return { success: true, message: 'Records removed from active tables.' };
  });
}

A DSAR export assembles every row keyed to the data subject — profile, orders, tickets, consent history, audit entries — into machine-readable JSON plus a human-readable PDF. Because the query runs against your own PostgreSQL schema rather than a vendor export queue, it completes in seconds instead of days.

Breach Notification Infrastructure

Article 33 requires notification to the supervisory authority without undue delay and, where feasible, not later than 72 hours after the controller becomes aware of a personal data breach. 72 hours is not enough time to collect logs from 4 systems by hand, so detection lives in the data layer. Alerts fire when an account reads or exports an abnormal volume in one session. Rate limiters at the API edge block bulk extraction and log the attempt with actor and origin. AWS snapshots are encrypted with keys held separately, so a lost storage volume is not a reportable disclosure.

Operational Outcomes

Access, portability, and erasure become SQL queries with an audit trail attached. Several regional PostgreSQL databases run under one administrative interface and one RBAC model. Residency, retention, and consent state are visible in the schema — which is exactly where a supervisory authority asks to look.

Stack and Boundaries

The GDPR compliant ERP runs on Next.js and TypeScript with PostgreSQL behind Drizzle ORM, deployed by Terraform into your own AWS account. RBAC is enforced in the Next.js API layer, Redis caches only non-personal data, and Zod validates 100% of API boundaries. Semgrep SAST, Vitest, and Playwright run in GitHub Actions on every commit; Sentry carries error telemetry with personal fields scrubbed. ERPStack operates 0 of it: after handover no ERPStack account reaches your PostgreSQL cluster, your AWS keys, or your GDPR records — which is the cleanest answer a processor can give a controller.

Compliance Engineering Technology Stack

Frequently Asked Questions

Yes — data sovereignty is a schema and routing decision, and it is cheapest when made early. We deploy regional PostgreSQL clusters, for example AWS eu-central-1 in Frankfurt alongside a US region, and route each record to a home region derived from the controller's tenancy rather than from a request header, which a client can spoof. Cross-region reads are denied at the database role level, so a bug in application code cannot silently relocate personal data.

Article 17 gives the data subject a right to erasure. We delete live rows immediately inside one transaction and record the erasure itself in an append-only log that holds no personal data — only the request identifier, the timestamp, and the tables touched. Encrypted snapshots age out on a documented retention schedule, and the encryption keys for a purged tenant are destroyed, which renders the residue unreadable well before the snapshot itself expires.

Articles 15 to 20 cover access, rectification, erasure, restriction, notification, and portability. A single administrator action assembles every row keyed to that data subject across the ERP — profile, orders, tickets, consent history, audit entries — into machine-readable JSON plus a human-readable PDF. Because the query runs against your own PostgreSQL schema rather than a vendor export queue, a request that used to consume days of manual investigation completes in seconds.

Article 83(5) sets the upper tier of administrative fines at 20 million euros or 4% of total worldwide annual turnover, whichever is higher. Article 33 requires notifying the supervisory authority without undue delay and, where feasible, within 72 hours of becoming aware of a personal data breach. Neither deadline survives manual log collection, which is why breach detection, consent state, and data lineage belong in the schema rather than in a reporting layer bolted on later.

For the personal data inside your ERP you are the controller and ERPStack acts as a processor on your documented instructions. The deployment runs in your own cloud account, so we hold no copy of the database. Where our engineers need production access it is named, time-boxed, logged, and covered by a written data processing agreement. Most engagements are built against synthetic fixtures, so the honest answer is that we never touch live personal data at all.

Explore Custom ERP Solutions by Location, Industry, and Alternatives

Global Architectures