Configuration
Resources
Each resource runs a FHIR search (GET /<ResourceType>) and returns one row
per Bundle entry. Every row carries id (the resource ID), last_updated
(meta.lastUpdated, when the server provides it), and the full resource as
JSON so no clinical detail is lost in projection.
The picker defaults to patients, observations, conditions, encounters, and
medication requests. The other three resources are opt-in.
Modes
All resources support full reads and incremental reads. Incremental sync trackslast_updated (meta.lastUpdated) per resource and re-requests with
_lastUpdated=ge<timestamp> — the ge prefix carries “greater or equal”
semantics; a bare timestamp would mean “equal” and silently return the wrong
result set. A 5-minute overlap window re-fetches recently updated records so
retroactive updates are not missed. If interrupted, a full read of a
top-level resource resumes after its last completed page.
Behavior
- Auth: none. v1 targets unauthenticated servers such as the public HAPI test server. Authenticated servers (OAuth2 client credentials, SMART Backend Services) are a planned follow-up.
- Pagination: each resource walks every page (
_count=100per request) by following the Bundlelinkentry whoserelationis"next". The walk ends on the page with nonextlink. - Rate limiting: five requests per second, a polite default for the shared public HAPI server. Lower it further for smoke tests; do not backfill against the public server.
- Response shape: FHIR search returns a Bundle; rows come from
Bundle.entry[].resource. Empty result sets emit no rows. - The public HAPI server holds synthetic test data only. Point
base_urlat your own FHIR server for real records.