Skip to content

Credential Data Model

This page documents how SimpulseID credential types extend the Harbour Credentials base model, as specified in EVES-008 §3.3. For the base class hierarchy and Gaia-X composition pattern, see the harbour-credentials documentation.

Schema File Structure

linkml/
├── importmap.json                # Maps import paths to submodule schemas
├── simpulseid-core.yaml           # Subject types, enums, business slots
└── simpulseid-credentials.yaml   # 5 credential types (is_a: HarbourCredential)

Import Chain

graph LR
    W["w3c-vc.yaml<br/><i>W3C VC envelope</i>"]
    H["harbour-core-credential.yaml<br/><i>Abstract base</i>"]
    SC["simpulseid-credentials.yaml<br/><i>5 credential types</i>"]
    S["simpulseid-core.yaml<br/><i>Subject types + enums</i>"]

    W --> H
    H --> SC
    H --> S
    SC --> S

    style W fill:#e3f2fd,stroke:#1565c0
    style H fill:#f3e5f5,stroke:#6a1b9a
    style SC fill:#fff3e0,stroke:#e65100
    style S fill:#e8f5e9,stroke:#2e7d32

Import paths in importmap.json resolve ./harbour to the harbour-core-credential.yaml file inside submodules/harbour-credentials/.


Credential Type Hierarchy

All five SimpulseID credential types inherit from HarbourCredential (defined in harbour-credentials). They override evidence and credentialStatus to be optional, since not all issuance flows require them immediately.

classDiagram
    class HarbourCredential {
        <<abstract — harbour-credentials>>
        issuer : uri ⟨required⟩
        validFrom : datetime ⟨required⟩
        validUntil : datetime
        evidence : Evidence[] ⟨required⟩
        credentialStatus : CRSetEntry[] ⟨required⟩
    }

    class ParticipantCredential {
        evidence : optional
        credentialStatus : optional
    }
    class AdministratorCredential {
        evidence : optional
        credentialStatus : optional
    }
    class UserCredential {
        evidence : optional
        credentialStatus : optional
    }
    class AscsBaseMembershipCredential {
        evidence : optional
        credentialStatus : optional
    }
    class AscsEnvitedMembershipCredential {
        evidence : optional
        credentialStatus : optional
    }

    HarbourCredential <|-- ParticipantCredential
    HarbourCredential <|-- AdministratorCredential
    HarbourCredential <|-- UserCredential
    HarbourCredential <|-- AscsBaseMembershipCredential
    HarbourCredential <|-- AscsEnvitedMembershipCredential

Constraint Overrides (slot_usage)

Field Harbour Base SimpulseID Override
issuer required (inherited)
validFrom required (inherited)
evidence required optional
credentialStatus required (CRSetEntry) optional

Credential ↔ Subject Type Mapping

Each credential type attests to a specific subject type. Subject types are standalone classes (not inherited from HarbourCredential) that define the credentialSubject claim structure:

flowchart LR
    subgraph creds["Credential Types"]
        PC["ParticipantCredential"]
        AC["AdministratorCredential"]
        UC["UserCredential"]
        BMC["AscsBaseMembership<br/>Credential"]
        EMC["AscsEnvitedMembership<br/>Credential"]
    end

    subgraph subjects["Subject Types"]
        SP["SimpulseidParticipant<br/><i>Organisation</i>"]
        SA["SimpulseidAdministrator<br/><i>Person + elevated perms</i>"]
        SU["SimpulseidUser<br/><i>Person</i>"]
        BM["AscsBaseMembership"]
        EM["AscsEnvitedMembership"]
    end

    PC --> SP
    AC --> SA
    UC --> SU
    BMC --> BM
    EMC --> EM

    style creds fill:#fff3e0,stroke:#e65100
    style subjects fill:#e8f5e9,stroke:#2e7d32

Subject Type Details

Organisation Subjects

Field Participant Required
harbourCredential IRI to Harbour GX credential yes
legalForm SimpulseIdLegalForm enum no
duns DUNS number no
email Contact email no
url Website no
termsAndConditions T&C docs with integrity hash no
participant Nested Gaia-X compliance data no
name Organisation name no

Person Subjects

Field Administrator User
harbourCredential required required
givenName required optional
familyName required optional
email required optional
memberOf optional optional
participant optional optional

Membership Subjects

Field Base Membership ENVITED Membership
member required (DID) required (DID)
programName optional optional
hostingOrganization optional optional
memberSince optional optional
baseMembershipCredential required (IRI)

Trust Chain

Credentials reference each other via IRI links to establish a chain of trust from the ecosystem root to individual memberships:

flowchart TD
    HC["Harbour GX Credential<br/><i>LegalPersonCredential</i><br/>(signed by ecosystem operator)"]
    PC["SimpulseID<br/>ParticipantCredential<br/>(signed by SimpulseID issuer)"]
    BMC["AscsBaseMembership<br/>Credential"]
    EMC["AscsEnvitedMembership<br/>Credential"]

    HC -- "harbourCredential (IRI)" --> PC
    PC -. "issuer resolves via DID" .-> BMC
    BMC -- "baseMembershipCredential (IRI)" --> EMC

    style HC fill:#e3f2fd,stroke:#1565c0
    style PC fill:#fff3e0,stroke:#e65100
    style BMC fill:#e8f5e9,stroke:#2e7d32
    style EMC fill:#e8f5e9,stroke:#2e7d32

The harbourCredential field in each subject type is an IRI reference (not an embedded credential), keeping payload sizes small and enabling independent verification of each layer.


The SimpulseIdLegalForm enum covers organisation types across jurisdictions:

Region Values
US LLC, Corporation, LimitedPartnership, NonprofitCorporation
DE GmbH, AG, Einzelunternehmen, GbR, OHG, KG, UG
UK SoleTrader, Partnership, LimitedCompany, LLP, CIC, CIO, CooperativeSociety, BenCom, Trust, UnincorporatedAssociation
Fallback other