SQL on FHIR WG Meetings

A client that builds its own forms from the OperationDefinition, so the API describes itself — Apr 15, 2025

Nikolai Ryzhikov
Nikolai Ryzhikov
CTO at Health Samurai
Arjun Sanyal
Arjun Sanyal
Principal Antidote Solutions
Bashir Sadjad
Bashir Sadjad
Software Engineer at Google
Apr 15, 2025

The demo — parameter forms rendered from OperationDefinition

Walked from the capability statement — which advertises export, run and evaluate, and says whether views are writable — through to running one.

The part worth noticing: the client renders each parameter form from the OperationDefinition, so editing the OperationDefinition changes the form with no other work.

Next up: export with sleeps standing in for a long-running job, a validate operation, and tests parameterised by base URL so anyone can point the suite at their own server.

Extensible output-format bindings — stalled at FHIR Infrastructure

There's still no way for an implementation to declare that it supports a format the value set doesn't list, and the discussion keeps circling the same objection — that OperationDefinition would be duplicating what profiling already does.

Gino is helping push it along.

Implementation cost — about 16 hours

Nikolai Ryzhikov
Nikolai Ryzhikov
CTO at Health Samurai

The API itself is quite trivial. The work is in deciding which parameters exist and describing them properly.

Arjun asked who else would implement it. Bashir said he'd rather spend the next few months on the Parquet work, while agreeing it wouldn't be much effort once you already have a runner underneath.

A process problem with teeth

Bashir Sadjad
Bashir Sadjad
Software Engineer at Google

My comments on the Parquet document sat unseen for a month, partly because there are two HackMD documents and nobody was sure which was live.

Nikolai argued for moving to a GitHub repo — issues, pull requests and Zulip is the flow the rest of FHIR runs on, and nothing gets lost that way.

Bashir's counter: Google-Doc-style comment threads are simply easier to argue in than pull requests.

Why Nikolai cares about discovery — agents

An MCP server could read the capability statement, pull the available views and their column descriptions into the context, and then ask for SQL.

Models write SQL well once the context is there — the missing piece is a standard way to find out what views exist and what they mean.