Zdrovia Logo
ZQL · Explore your dataFree on all plans for a limited time

Ask your clinic a question. See what it reads first.

Revenue by service, Botox units used, who's no-showing, how one patient's pain has moved. Type it, write it in ZQL or build it from a form, and read the query before it runs.

3 ways in
Ask, write ZQL, or build
Read-only
It can't change a record
Free for now
On every plan, for a limited time
Small Practice+
Paid plans, once the offer ends
Try it

Pick a question and run it.

This is the product's own question box, query view, preview and results, running on a made-up clinic. Each answer comes with the query that produced it. The last question reads a patient's charts, so it stops and asks before it opens them.

  • The query is shown in full, never hidden behind an answer
  • The preview says what it reads, for which dates, and how many charts it opens
  • Results come as a table, and as a chart when the columns suggest one
How it works

From a question to a logged answer, in five steps.

The checking happens in Zdrovia, not in the interface and not in the assistant. A question typed into the box, a query written by hand and one built from the form all go through the same steps.

  1. 1

    You ask

    In words, in ZQL, or from the builder. All three produce the same query.

  2. 2

    It's checked

    Your role, the patient scope and the chart limits are applied before anything is read.

  3. 3

    You see the preview

    What it reads, the real dates, how sensitive it is, how many charts it opens.

  4. 4

    It runs

    Reading only. Charts are opened just for the records the answer needs.

  5. 5

    It's recorded

    Every patient whose chart was opened is written to the access log.

Three ways in

One query, however you start.

Asking, writing and building all edit the same query. Start with a sentence, tighten it in the builder, read it as ZQL, and nothing gets retyped on the way.

Ask

Type the question

Say it the way you'd say it to a colleague. You get back a query you can read, not a number to take on trust, and it's checked against your role before you see it.

Small Practice and Team Practice

ZQL

Write it yourself

ZQL reads close to English: where, since, group by, show, order by, limit. Suggestions appear as you type, and a mistake is underlined with what to change.

Every plan

Build

Pick it from a form

Choose what to count, how to slice it and over what dates. Switch tabs at any point and the same query shows as ZQL, so nothing is retyped.

Every plan

ZQL in practice

It reads like the question.

Here are five real queries, from a revenue comparison to one patient's pain score. You'd rarely need to write them from scratch: Ask drafts one, the builder assembles one, and you can edit either.

  • Lines start with a plain word: from, where, since, group by, show
  • Dates are words, like last_90_days, and become exact dates in your timezone
  • A query can contain another query, and feed its result into a next step
Before it runs

A question you can check, not an answer you have to trust.

Every query gets a preview first. It's worded for the person asking, not for a database, so you can tell whether it means what you meant.

What it will read

A plain sentence on what the query does, in your clinic's terms, before anything runs.

The real dates

"Last month" and "last 90 days" are turned into exact dates in your clinic's timezone, and a comparison shows the dates it's measured against.

How sensitive it is

Each query is labelled operational (schedule and stock), financial (invoices and payments) or clinical (patient charts).

How many charts it opens

A query that touches charts says how many, out of how many one query is allowed, and waits for your go-ahead.

Safe by construction

Your role still applies. So does the log.

Your role decides what you can ask

Every table and field is checked against the person asking. A front desk login can't total the books, and the refusal names the permission it's missing.

Charts are opened one patient at a time

Out of the box, chart readings are queried from a single patient's record, and the answer covers only that patient.

Every chart opened is logged

When a query reads charts, each patient it touched is written to the access log, with who asked and when, the same log as everything else.

Reading only

ZQL can't create, edit or delete anything. It has no raw SQL and no way to call out to anything else.

The checker decides, not the assistant

The language model only writes the query. Permissions, patient scope and chart limits are enforced by the same checker whether you typed the query or it did.

Saved the way it was asked

Save a query as a report and it's stored as the query itself, so it keeps working and keeps its checks, however the text syntax evolves.

Roles and the access log work the same way for everything else in Zdrovia. See how they're set up.

Cheat sheet

The whole language fits on a card.

Nine moves cover most questions. Clauses can come in any order, you can use upper or lower case, and a line starting with two dashes is a comment.

WordWhat it doesExample
fromWhat you're looking atfrom visit
whereNarrow it downwhere status = 'scheduled'
since / betweenSet the datessince last_90_days
group bySlice itgroup by month, staff.name
showWhat to work outshow sum(net_cents) as revenue
order by / limitSort and cut it offorder by revenue desc limit 10
compare toSet it beside an earlier periodcompare to previous_year
for patientLook at one patientfor patient $patient
|Then, using that result| show mean(visits) as avg

Dates you can say

todayyesterdaythis_weeklast_weekthis_monthlast_monthlast_7_dayslast_30_dayslast_90_dayslast_12_monthsthis_yearlast_year
What you can ask about

Money, stock, the schedule, patients and charts.

One query layer covers the whole clinic, so a question that crosses areas, like patients who had neurotoxin and have nothing booked, is one query rather than two exports and a spreadsheet.

Money

  • Revenue by month, service or practitioner
  • What was invoiced against what was collected
  • Net revenue after discounts, against last year

Stock

  • Units of a product used, by month or by site
  • Stock cost over a period
  • Which products are moving and which aren't

Schedule

  • No-show rate by practitioner
  • Booked minutes against open minutes
  • Visits by status, service or location

Patients

  • Patients who had a treatment and have nothing booked
  • New patients by month
  • Who is due back, as a count or a list

Charts

  • How one patient's pain score has moved
  • Readings across a patient's visits
  • Injections placed, by area, for one patient
The usual way

Instead of exporting to a spreadsheet.

Without it
With ZQL

Export invoices, paste into a spreadsheet, rebuild the pivot each month.

Ask the question again whenever you like, or save it as a report.

Trust a number without knowing which rows it came from.

Read the query, and the preview of what it covers, before you trust the answer.

Ask whoever has access to the books to run it for you.

Anyone can ask what their role allows, and is refused, with the missing permission named, for what it doesn't.

Copy patient details out of the record to analyse them.

Chart readings are queried in place, one patient at a time, and logged.

Questions

ZQL, answered.

What does Ask send to the language model?

Your question and the names of the fields your role is allowed to query, so it can write the query. Your results and your patients' records aren't sent. What comes back is only text, which is then read and checked like anything you typed.

Do I have to use the AI?

No. Writing ZQL and the step-by-step builder don't call a model at all. Ask is the only part that does.

Which plans include it?

Ask & Reports is a paid-plan feature, included from Small Practice. For a limited time it is free on every plan, Solo included, so you can try it before deciding. Each clinic can ask a limited number of questions per hour; typed and built queries aren't counted. See pricing.

Can it read patient charts?

Yes, for one patient at a time, if your role lets you open their charts. The preview tells you how many charts it will open before it runs, and each patient it reads is recorded in the access log.

Can it change my data?

No. A query can only read.

Can it get something wrong?

A query can be a fair reading of your words and still not be what you meant, which is why Ask shows the query and what it will read before running it. Read the query. If a figure matters, check it in the builder.

Does it know about my custom smart blocks?

Yes. Readings from the blocks you build yourself are added to what you can ask about as soon as you create them, so a field you add to a smart block is something you can query.

What can I save?

A query you'll want again can be saved as a report. It's stored as the query itself, with your role's checks applied each time it runs, so it only ever shows a person what they're allowed to see.

Is it a replacement for my accountant's reports?

No. It answers questions about what's in Zdrovia, such as invoiced, collected, units used, no-shows and chart readings. It isn't an accounting system, so use it alongside your bookkeeping rather than in place of it.

Can I use it from Claude or another assistant?

Yes. A connected assistant can ask schedule, stock and finance questions, and one named patient's chart readings after you've seen the preview and said yes. It uses the same checker as you, held to the role of the person who approved the connection, and it can't total charts across patients. See the MCP server page.

Get started

Stop exporting to a spreadsheet to answer a simple question.

Ask & Reports is included with Small Practice and Team Practice, and free on every plan for a limited time.