ERPNext

ERPNext

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

BSN on Employee

BSN on Employee

The Burgerservicenummer (BSN) is the Dutch citizen service number —
every resident has one. As an employer, you're legally required to record
it for every Dutch employee and to handle it with the same care as a
health record under the AVG (Dutch GDPR).

This module adds an encrypted BSN (Burgerservicenummer) field to the
Employee doctype, but only if HRMS is installed — there's no point
adding it on a bench that doesn't have payroll/HR.

Where it lives

After installation, open any Employee record. Below the Passport
Number
field you'll see BSN (Burgerservicenummer) — a masked
password-style input. Type the 9-digit number; it accepts spaces and
strips them. Save.

The value is encrypted at rest using Frappe's field-level encryption (the
same mechanism that protects API keys and database passwords). Anyone
opening the Employee record sees masked dots — even System Managers. Only
code that explicitly decrypts the value can read it back.

Elfproef validation

Dutch BSNs aren't just 9 digits — they follow the elfproef (11-test):
a weighted digit sum that must be divisible by 11. The module validates
this on every save:

  • The first 8 digits are weighted 9, 8, 7, 6, 5, 4, 3, 2.
  • The 9th digit is weighted –1.
  • The total must be divisible by 11.

Typos and made-up numbers fail this check immediately. If save fails,
recheck the BSN against the employee's ID document — there's almost
certainly a digit transposed.

The validator strips spaces and dashes before checking, so 123 456 789
and 123-456-789 and 123456789 all work the same way.

Compliance notes

Under Dutch and EU law, BSN is a bijzondere persoonsgegeven (special
category personal data). Storing it means you must:

  • Limit who can read it. Use ERPNext's role-permission system to
    restrict Employee read access to HR roles only.
  • Have a legal basis. Employment is one; you can't store BSNs for
    contractors or job applicants without separate justification.
  • Have a retention policy. BSN should be deleted when the employment
    relationship ends and the legal retention period (seven years for
    payroll records) lapses.
  • Document the processing. Your AVG processing register should
    include "BSN voor loonadministratie" as a stored data category.

This module enforces the encryption-at-rest and elfproef-validation
pieces; the role permissions and retention policy are your call to set
up.

What you can do with it

Most operators never need to read the BSN back in plain text — payroll
tools that need it can call ERPNext's encryption API. For ad-hoc reads
(e.g. confirming a value with the employee), open the record, click into
the field, and the value reveals while you have it focused.

If you're integrating a third-party payroll system, that integration
will need to decrypt the field; your developer can use Frappe's standard
password-field read API. Don't put the BSN into custom reports or
exports unless the export channel is encrypted end-to-end.

Last updated 3 months ago
Was this helpful?
Thanks!