Skip to main content

Provider Directory Service — Security Model

Status: populated Owner: TBD Last updated: 2026-04-17 Companion: 13 Security/Compliance/Tenancy

1. Authentication

FlowMechanism
EdgeJWT validated against identity-service JWKS
Service-to-servicemTLS + service JWT
Platform adminplatform:admin scope

2. Authorization

All writes authorised via POST /internal/access/evaluate.

2.1 RBAC

RoleReadWrite practitionerAdd credentialAssign roleAdmin actions
tenant.viewer
tenant.provider_user
tenant.credentialing_admin
tenant.facility_admin
tenant.admin
platform.admin

2.2 Scopes

ScopePurpose
provider_directory:readGETs
provider_directory:writeNon-admin writes
provider_directory:adminDeactivate, revoke credential, end role
internal:any-servicePrivilege check

3. Encryption

LayerTech
At restPostgres TDE
In transitTLS 1.3
Field-levelCredential number encrypted via platform KMS DEK if regional policy requires

4. Audit Events

EventWhen
provider_directory.audit.practitioner.createdCreate
provider_directory.audit.practitioner.suspendedSuspend
provider_directory.audit.credential.revokedRevoke credential
provider_directory.audit.role.privilege_changePrivilege delta
provider_directory.audit.endpoint.auth_method_changedSensitive config change

5. GDPR

Participates in erasure saga. If practitioner has no downstream clinical history, their record is anonymized (name fields redacted, identifiers nulled). If clinical history exists (orders, notes), retention policy overrides erasure per RESEARCH_AND_SECONDARY_USE.md.

6. Data Residency

Per tenant region. AFG / UAE / EU stored in-region.

7. Rate Limits

AbuseControl
Directory scraping500 rps/tenant; throttle-by-IP on /fhir/R4/Practitioner search
Credential enumeration50 rps/tenant on credential search