Skip to content

Entitlements and Editions

An edition is a packaged bundle of modules a customer buys. Entitlements are the actual per-module grants projected into a tenant’s EHR — they decide, route by route, what the clinical app will allow.

Who can do this: support, onboarding, super_admin (entitlements.write). Editing the edition catalogue itself is super_admin (registry.write).

Veona ships four editions: Health Centre, Hospital, Network and Public Health. Each defines a default set of modules and limits (facilities, users, beds, storage). The full breakdown is on the Editions reference.

  • Editions list/detail lives under registry/editions (GET /editions).
  • Create or edit an edition (super_admin) — POST /registry/editions, PUT /registry/editions/:key. Edition changes are signed and audited (edition.upsert).
  • Onboarding blueprints (onboarding/blueprints) show editions joined with the modules they bundle — the picker used during onboarding.

When you provision a tenant, the edition’s module list is projected into the EHR as FacilityEntitlement rows (one per module per facility), via the canonical module-key mapper. The EHR enforces these deny-by-default: a route gated by a module the tenant doesn’t hold returns 403 immediately.

To grant or remove a module à la carte (beyond the edition default):

  1. Open the tenant’s entitlements (registry/entitlementsGET /tenants/:id/entitlements). You’ll see a signed, revisioned grant (revision, etag, module list).
  2. Toggle the modules (PUT /tenants/:id/entitlements). The change is revisioned and audited (entitlement.write).
  3. The change is live and drivable: disabling a module makes the EHR return 403 on its routes; re-granting restores 200 in the same transaction.

Device/instrument integrations have their own entitlement surface (clients/tenant/:id/connect-integrationsGET/PUT /tenants/:id/connect-entitlements). Disabling an instrument removes it from the tenant’s Connect catalogue (licensed: false); enabling it makes it available again. Audited as tenant.connect_entitlements.put.