Skip to content
← INTERNATIONAL
The mechanism

How a country becomes a pack

blueHealthcare is built so that a country is a configuration pack — never a fork. This page describes what that means today, precisely, including what is not true yet. This is the commercial implementation. A separate free, source-available edition with country pack templates and worked examples exists for eligible countries; see the open overview for how they differ.

What blueHealthcare could look like here
Concept mockup of blueHealthcare with synthetic data for Anywhere
Synthetic demo data
Concept mockup, shown for the Philippines as one eligible country. Synthetic data. Not a product available in the Philippines or any other country today — the ph pack is a worked example, not code that runs. Concept mockup by MOBLUEHQ; not a product available in this country today.
What exists in code today

A jurisdiction-neutral interface (JurisdictionPack, plus three pluggable Protocols: CodingSystem, PrivacyRegime, FhirProfile) with 17 fields covering coding, privacy, FHIR profile, compliance-rule identifier, policy-pack format, payer vocabulary, currency, locale, date/number format, data-residency flags, and five additional consent-related fields. See the full field list on the pack spec page.

Two packs are registered: us (real — the only pack any code path uses today) and xx (a deliberate, empty non-US stub proving the interface doesn't assume a US answer). The loader refuses an unknown pack id outright — there is no silent fallback to us.

What this does not mean yet

We do not say "switch the pack and it runs in Germany." That would not be true. Here is the measured state instead:

  • Two code paths read pack data: core/consent/gate.py loads each record's own pack (via load_pack(record.jurisdiction_pack_id)) to decide whether secondary use is allowed under that record's jurisdiction, and result/patient_release_policy.py uses active_pack() as a fallback when a caller doesn't pass a pack explicitly.
  • The rest of the platform's core still reads US-specific constants directly rather than through a selected pack. A standing test greps for exactly that and is deliberately red on purpose. This page doesn't quote the current count — see the roadmap's "measured, still open" section for why a number here drifts and gets corrected instead.
  • A second standing test measures the dependency count from the platform's core to its application layer — again, see the roadmap for the one figure that's held stable across recounts; the broader totals have moved week to week and aren't repeated here.
  • The addendum's own required demonstration — "switch to the xx stub pack and boot the app with no US strings visible" — is not reachable yet, for the same reason: there is no boot path that reads from a selected pack.

We publish the migration counts, not a finish date.

What "anywhere" means, mechanically

Adding a new country means a new directory under core/jurisdiction/<xx>/ implementing the three Protocols and the 17 fields, then registering it by id in the pack registry. An unregistered directory does nothing — there is no filesystem-scanning magic, so a half-built pack can't silently activate.

This page describes website-depth requirements only, drawn from public information about each market. It is not legal advice, not a compliance claim, and not validated in-country. Nothing here has been reviewed by local counsel or a local regulator. The interface existing is not a claim that migration is finished, and no country is "supported" until its own page here is updated by a named steward, never by an unreviewed assumption.