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