SQL on FHIR WG Meetings


SQL on FHIR WG Meeting — April 15, 2025
Nikolai Ryzhikov
CTO at Health Samurai
Arjun Sanyal
Principal Antidote Solutions
Bashir Sadjad
Software Engineer at Google
Apr 15, 2025
Topics discussed:
- The demo 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 is that 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.
- The request to make output format bindings extendable has 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 Canessa is helping push it along.
- Nikolai put the cost at roughly sixteen hours for the whole implementation: the API itself is quite trivial, and the work is in deciding which parameters exist and describing them properly. Arjun Sanyal asked who else would implement it; Bashir Sadjad 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.
- Bashir raised a process problem with teeth: his comments on the Parquet document had 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 was that Google-Doc-style comment threads are simply easier to argue in than pull requests.
- Nikolai's reason for caring so much about discovery is 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.