Practice Fusion
Access
Section titled “Access”- Register through Practice Fusion’s app registration portal; the API specification is public.
- SMART Backend Services with a JWT. Each practice has its own base URL (ending in a practice
identifier); the token URL is the base URL plus
/token. - Practice Fusion publishes a public directory of per-practice base URLs, which you can use to look up a practice.
Extraction approach
Section titled “Extraction approach”System-level bulk export.
Patient/$exportworks;Group/$exportreturns 403._typeis ignored — every resource type comes back; filter while downloading.- There is no
X-ProgressorRetry-After: poll on a fixed interval (20 seconds works) and refresh the token periodically while polling. - The manifest sets
requiresAccessToken: true, so every file download needs a bearer token. Re-mint it during long downloads (every 20 files or so). _sinceis optional. A dry-run mode that only checks authentication, kickoff and the manifest is useful when onboarding a practice.
Practices can also hand over exports manually, for example as ZIP files of concatenated Bundles grouped in per-resource folders. Convert those to NDJSON per resource type and process them the same way.
Known behaviour
Section titled “Known behaviour”Screenings are stored as Conditions
Section titled “Screenings are stored as Conditions”Screenings such as mammograms are recorded as Condition resources (with the detail in
code.text), with no DiagnosticReport or Procedure. To score screening measures you have to
recognise these Conditions and treat them as screening results.
Procedure resources were also seen without subject.reference, so they cannot be linked to a
patient.
Encounter type is generic
Section titled “Encounter type is generic”Encounter.type is mostly SNOMED 422735006 “Summary clinical document”, so qualifying-encounter
value sets rarely match. Fall back to counting completed visits when coded types are this sparse.
Attribution
Section titled “Attribution”- NPI appears only on the practice’s own providers. External providers have none.
- Encounter participants come in no meaningful order — pick the attributed provider deliberately.
- Scope the patient panel to encounters rendered by the practice’s own providers.
- References have no
type; inject it. - Some recent exclusion data may not be returned by the API, so denominator exclusions can be under-counted.