Trade Register Data Structure for PKI and Subject Verification

Trade Register data should be stored as time-bound facts, not reconstructed from logs.

A jurisdiction-specific `subject_code` is proposed to identify the registered subject.

The internal `subject_id` remains the primary key of the Trade Register.

Names, legal status and optional subject attributes should be modelled using relational structures with explicit UTC date-times.

The primary trade name designation is a separate historical fact and should be maintained in its own table.

Optional attributes, such as IBAN, should be clearly identified and may require explicit consent before disclosure.

Field reference - From June 11, 2026 - Issues on GitHub - Insight at janwillemstegink.nl

Naming Standardization in the Trade Register

Abbreviations such as B.V. and N.V. should be standardized as BV and NV by introducing a legalized_name name type. Trade names must be retrievable in their original letter case for precise matching.

Table Field Key Req. Meaning
registered_subjectsubject_idPKYesInternal Trade Register subject identifier.
subject_codeIDXYesJurisdiction-specific subject code identifying the registered subject.
jurisdiction_codeYesLegal jurisdiction code.
registration_authorityYesRegister authority.
registration_numberIDXYesLocal Trade Register number.
valid_fromYesUTC date-time from which this subject record applies.
valid_toNoUTC date-time until which this subject record applied; empty means current.
subject_legal_statuslegal_status_idPKYesLegal status record identifier.
subject_idFKYesRegistered subject.
legal_statusYesRecorded legal status.
legal_status_codeNoStandardized abbreviation of the legal status.
valid_fromYesUTC date-time from which this legal status applies.
valid_toNoUTC date-time until which this legal status applied; empty means current.
subject_namename_idPKYesName record identifier.
subject_idFKYesRegistered subject.
name_typeYeslegal, legalized, trade.
name_valueYesRecorded name value.
is_case_sensitiveYesUppercase/lowercase distinction applies.
valid_fromYesUTC date-time from which this name applies.
valid_toNoUTC date-time until which this name applied; empty means current.
primary_trade_nameprimary_name_idPKYesPrimary trade name designation record.
subject_idFKYesRegistered subject.
name_idFKYesName designated as primary trade name.
primary_fromYesUTC date-time from which this name is primary.
primary_toNoUTC date-time until which this name was primary; empty means current.
optional_subject_attributeattribute_idPKYesOptional attribute record.
subject_idFKYesRegistered subject.
attribute_nameYesiban, bic, account_holder_name, website_url, contact_email.
attribute_valueNoProvided value; empty means not provided.
consent_requiredYesExplicit consent required before disclosure.
valid_fromYesUTC date-time from which this attribute applies.
valid_toNoUTC date-time until which this attribute applied; empty means current.
subject_responsibleresponsible_idPKYesResponsible party record identifier.
subject_idFKYesRegistered subject.
responsible_subject_codeIDXYesSubject code identifying the responsible natural person.
responsible_nameYesRecorded name of the responsible party.
responsible_roleYesRole of the responsible party.
authority_to_representNoIndicates authority to represent the subject.
valid_fromYesUTC date-time from which this responsibility applies.
valid_toNoUTC date-time until which this responsibility applied; empty means current.

Rules