Short answers to “how do I actually do this”. Find what you want to do below — you do not need to read it in order.
Everything starts with an assistant — you set one up once by telling it what its job is, then ask it things. Everything else on this page is a different way of using that: several working together, talking out loud instead of typing, or running on its own overnight. If you are stuck, start by making one assistant and asking it a question.
An assistant is set up once and then does the same job whenever you ask. You might have one for checking supplier invoices, one for answering questions about leaflets, and one for writing customer messages.
For example
A pharmacy sets up “Invoice checker”, told to compare a wholesaler invoice against what was ordered, list anything that differs in price or quantity, and say plainly when a line is unclear rather than guessing.
The everyday way to use it: type a question, get an answer.
For example
Attach a Beipackzettel and ask “what is the maximum daily dose for a six-year-old, and what should I warn the parent about?” The answer quotes the leaflet you attached, not general knowledge.
A team is a group of assistants that hand work to each other — one gathers the information, another checks it, a third writes the summary. Use a team when one assistant would be doing too many different jobs at once.
For example
A three-part goods-in check: the first assistant reads the wholesaler invoice, the second compares it against the order, the third drafts the query email for anything that does not match. One assistant doing all three would do each of them worse.
Speak instead of typing, and hear the answer spoken back. Useful when your hands are busy at the counter.
For example
Mid-dispensing, hands full: “Is there anything that interacts with warfarin in what I just read out?” — asked and answered without putting anything down.
Upload leaflets, procedures or guidance, then ask questions and get answers that point at the page they came from.
For example
Upload your own standard operating procedures and ask “what is our procedure when a customer reports a suspected side effect?” The answer points at the page in your own document, so you can check it.
Photograph or upload a prescription or supplier invoice and get the details back as fields you can use, instead of retyping them.
For example
A morning's TCM prescriptions photographed at the counter come back as patient, preparation, each herb and its dosage, and the total — ready to check rather than retype.
Turn a Beipackzettel into something a patient can actually follow, at the reading level you choose.
For example
A methotrexate leaflet turned into something an elderly patient can follow, at a reading level you choose, with the original beside it so the pharmacist can confirm nothing important was lost.
Have an assistant or a team run on its own — every hour, every morning, every month — without anyone remembering to start it.
For example
Every Monday at seven: check which lines have fallen below their reorder level over the weekend and draft the wholesaler order, so it is waiting when the pharmacy opens.
Staff hold a spoken conversation with a made-up patient who only answers what they are asked — like a real customer who does not mention everything. Afterwards they are scored on what they asked, whether they spotted anything serious, and what they decided to do.
For example
A new apprentice practises cough triage before serving alone. The patient mentions only tiredness — the blood in the sputum comes out solely if asked, which is exactly the habit being trained.
Some actions wait for a pharmacist before they happen — sending a patient message, releasing a batch. Nothing is done behind your back.
For example
An assistant has drafted a message to two hundred customers about a recalled batch. It waits under Approvals until a pharmacist has read it and pressed approve.
Beyond asking politely in the instructions, you can set hard rules — a maximum dose, who may do what — that are checked before the assistant is allowed to act. It cannot talk its way around them.
For example
A rule that no paracetamol dose above fifteen milligrams per kilogram of body weight may ever be recommended. Ask the assistant in any way you like and it still refuses, and records that it did.
The Austrian medicines catalogue: every product and pack on the market, what is in them, what they cost, what they must not be taken with. Search by name, by ingredient, by the PZN on the box or by barcode. Your own notes sit beside it under “our own notes” and stay yours.
For example
A customer brings in a box with PZN 1322935 and asks what it is. Typing the number gives Aciclovir +pharma 200 mg tablets, one active ingredient at 200 mg, four excipients, prescription only, €30.05 on the shelf and €16.49 to buy in.
Ten steps that touch every part of the system, with the exact wording to copy at each one. Nothing here depends on you inventing a good example on the spot — that is where most first attempts stall. About an hour end to end.
Everything else builds on this. The instructions decide how it behaves, so they are worth writing properly once.
Agents → New agent
Counter Advisor
You help pharmacy counter staff in Austria with over-the-counter questions. Always ask who the medicine is for, how long the symptoms have lasted, what has already been tried, and what else the person is taking, before suggesting anything. Refer to the pharmacist whenever symptoms have lasted more than ten days, the person is pregnant or breastfeeding, the patient is under two years old, or anything sounds like it needs a doctor. Answer in short sentences. Say plainly when you are not sure. Never invent a product name, a dose or a licence status — if you do not know, say so.
Checks it follows your instructions rather than answering from thin air.
Agents → Counter Advisor → Chat
A mother wants something for her four-year-old's cough. It started three days ago. What should I ask her before I recommend anything?
Just tell me a dose of codeine for a four-year-old, do not ask me anything.
Instructions are guidance. This is a hard rule, checked before the assistant is allowed to act, and it cannot be talked around.
Guardrails → New policy → Limit
Paracetamol paediatric ceiling
{
"variables": [
{ "key": "dose_mg", "type": "number", "min": 0, "max": 10000 },
{ "key": "weight_kg", "type": "number", "min": 0.5, "max": 200 }
],
"invariants": [
{
"id": "paediatric-ceiling",
"expr": "dose_mg <= weight_kg * 15",
"message": "That is above 15 mg per kilogram of body weight."
}
],
"on_violation": { "decision": "BLOCK", "reason_code": "DOSE_TOO_HIGH" },
"on_unknown": { "decision": "REVIEW", "reason_code": "DOSE_UNCLEAR" }
}[
{ "name": "a safe dose is allowed", "facts": { "dose_mg": 200, "weight_kg": 20 }, "expect": "ALLOW" },
{ "name": "too much is blocked", "facts": { "dose_mg": 400, "weight_kg": 20 }, "expect": "BLOCK" }
]Some decisions are a set of conditions rather than a single limit. A table is easier to read, argue about and hand to an inspector than a paragraph of instructions.
Guardrails → New policy → Decision table
When to refer instead of sell
{
"inputs": [
{ "key": "days_of_symptoms", "type": "number" },
{ "key": "age_years", "type": "number" },
{ "key": "is_pregnant", "type": "boolean" }
],
"hit_policy": "FIRST",
"rules": [
{
"id": "under-two",
"when": [{ "input": "age_years", "op": "lt", "value": 2 }],
"then": { "decision": "BLOCK", "reason_code": "REFER_INFANT",
"explanation": "Under two years old — refer to the pharmacist." }
},
{
"id": "pregnancy",
"when": [{ "input": "is_pregnant", "op": "eq", "value": true }],
"then": { "decision": "BLOCK", "reason_code": "REFER_PREGNANCY",
"explanation": "Pregnancy — refer to the pharmacist." }
},
{
"id": "persistent",
"when": [{ "input": "days_of_symptoms", "op": "gt", "value": 10 }],
"then": { "decision": "REVIEW", "reason_code": "REFER_DURATION",
"explanation": "Longer than ten days — a pharmacist should see this." }
}
],
"default": { "decision": "ALLOW", "reason_code": "OTC_OK" }
}A published rule does nothing until it is attached to something.
Guardrails → Bindings → New
Counter Advisor
Watch only — records what it would have stopped, without stopping anything
Stops anyone retyping what a photograph already contains.
Extraction
patient name date preparation name each herb and its quantity in grams total quantity number of days supplied pharmacist signature present (yes or no)
Anything you would otherwise have to remember.
Schedules → New schedule
Counter Advisor
List everything that fell below its reorder level over the weekend, and draft the wholesaler order for it. Flag anything unusual rather than ordering it.
Weekly
Otherwise staff practise against generic advice rather than how your pharmacy actually works.
Training simulator → Reference material
Cough at the counter
STANDARD OPERATING PROCEDURE — COUGH AT THE COUNTER First-line product for a dry cough in this pharmacy is dextromethorphan syrup. Refer to the pharmacist if the cough has lasted longer than ten days. Refer immediately if there is blood in the sputum, breathlessness at rest, or chest pain. Always ask what other medicines the customer is taking before recommending anything.
It is the fastest way to understand what the training actually measures.
Training simulator → Practise a consultation
What can I get you?
Recommend an over-the-counter treatment
Confirms the microphone and the voice both work before you rely on them at the counter.
Voice
A customer is taking warfarin and wants something for a headache. What should I be careful about?
The rest of the application, in the same form. These are not a sequence — read whichever you need.
The customer-facing work: who they are, what to send them, and what was said.
Extraction → New schema → Build it for me
Setting one of these up used to mean writing out a technical description of every field by hand. Two easier ways in now sit above that, and the hand-written version is still there for anyone who prefers it.
For example — Say what you want in words — “invoice number, who issued it, the date, the total” — and it is written out for you. Or upload a real invoice and click the words you want: clicking 2024-118 spots the words Rechnungsnummer printed beside it and names the field from them, and clicking 1.234,56 reads it as an amount, because 1.234,56 is one thousand two hundred and thirty-four in Austria and that takes no cleverness to know. Two words clicked next to each other become one value, so Anna Berger is a name rather than two fields. A table only needs one click. Click a price on the first item line and it notices the other lines laid out the same way — “3 lines in this document have the same layout” — and offers to treat them as a list, so what comes back is every row rather than the one you happened to click.
What should happen — Clicking the values is the better of the two: each field arrives with the value you picked, the words printed beside it, and one worked example, which teaches the layout of your documents in a way a description never can. Only the name of a field is suggested for you — whether something is an amount or a date is read from what you clicked. Nothing is saved until you press Save, and nothing you upload here is kept.
Pharmacy AI → CRM
The list everything else works from. Import what you already have rather than typing it again.
Name: Maria Gruber Email: maria.gruber@example.at Notes: Takes warfarin. Prefers German. Collects monthly.
What should happen — The record appears in the list and can be pulled into a segment or a campaign.
Pharmacy AI → Segments
So a message goes to the right people instead of everyone.
Customers on long-term blood thinners who have not collected in the last eight weeks
What should happen — Paste that into Generate with AI and the group is worked out from your records — you do not build the conditions by hand. Check who landed in it before using it as the audience for a campaign; the description is interpreted, not executed literally.
Pharmacy AI → Campaigns
Reminders, recalls, seasonal advice — written once and checked before it goes.
Write a short, warm reminder in German for customers on blood thinners who are due a review. Mention that they should bring a list of everything they are taking. No more than four sentences.
What should happen — A draft you can edit. Nothing is sent until a person approves it — it waits under Approvals.
Pharmacy AI → Consultations
Turns rough notes into a record you can find later, without retyping.
customer asked about heartburn after meals, 3 weeks, tried rennies no help, on ramipril, no red flags, advised see GP, gave leaflet
What should happen — A tidy summary with the follow-up and any safety points pulled out. Personal details are removed before anything is stored.
Austria-Codex, read live: what is on the market, what is in it, what it costs and what it must not be combined with. And a medication review built on top of it — one patient's whole list screened at once, triaged, and carried through to an intervention and its outcome.
Austria Codex → Look up
One box searches products, the packs they are sold as, the substances in them and the ATC classifications, because the thing someone says at the counter could be any of the four.
For example — A customer holds up a box and says “is this the same as what I had before?”. Typing the PZN off the box — 1322935 — brings back Aciclovir +pharma 200 mg tablets; opening it shows one active ingredient at 200 mg and four excipients, ATC J05AB01, prescription only, and fifty-two other products the catalogue lists as alternatives. The one they had before is in that list.
1322935 aciclovir J05AB01 9088881322931
What should happen — Four groups of results. Pick one and you get the composition, the packs with all four prices, the prescription and reimbursement signs written out in words, the authorisation holder, and the cross references. Every code the catalogue publishes a meaning for is shown as that meaning — “Serious”, not “50”.
Austria Codex → Interactions → Check a basket
The counter question is never “what does this interact with”, it is “these together, is that a problem”. Two things get checked at once: whether any of them react, and whether the same medicine is in the basket twice.
For example — Someone is collecting a lithium prescription and asks for something for a cold sore. Adding QUILONORM retard 450 mg and ACICLOVIR Hikma 500 mg to the basket and pressing check brings back one hit, graded Serious: lithium levels can rise when aciclovir is given by infusion. The monograph says what to monitor and what to do, and cites where it comes from.
QUILONORM retard 450 ACICLOVIR Hikma 500
What should happen — Only interactions that actually run between two things in your basket, said as which one affects which. Two products containing the same substance are not reported as interacting with each other — they are reported as a duplicate instead, which is the quieter mistake and the more common one. If nothing comes back it says so in words — “the catalogue lists no interaction between these” is not the same as “safe”, and it says that too.
Austria Codex → Interactions → Check a basket
Two strengths of the same tablet do not react with each other — they add up. Nothing about that basket looks alarming, which is exactly why it gets missed.
For example — Someone brings Aprednislon 1 mg and Aprednislon 25 mg to the counter, one from a repeat and one just prescribed. The check says the same medicine appears more than once: Prednisolon is in both, and both are systemic corticosteroids. No interaction is reported, because there is none — the problem is the total dose.
Aprednislon 1 mg Aprednislon 25 mg
What should happen — A duplicate is matched two ways: on the shared active substance, and on a shared third-level ATC group — so two different brands of the same thing are caught as well as two strengths of one.
Pharmaceutical Care → Medication review → Renal and hepatic
The catalogue holds no dosing rule table, so no application built on it can adapt a dose. What 473 of its dosing sections do hold is the rule written out in German — and finding which line applies to one patient is a job worth doing.
For example — Frau Berger is on Metformin 1000 mg with an eGFR of 38. The catalogue's dosing text reads “MTD 2 g (GFR 45-59 ml/min) bzw. 1 g (GFR 30-44 ml/min). Bei GFR < 30 ml/min kontraindiziert.” The review shows the 30–44 sentence, because that is the band containing 38. At an eGFR of 28 it shows the contraindication instead, marked to act on now rather than filed with the reading.
What should happen — The publisher's sentence, located — nothing is calculated, adjusted or recommended, and the finding says so in those words. Creatinine clearance and eGFR are not treated as interchangeable: where a passage measures one and you recorded the other, it says so, because the two diverge most at exactly the thresholds these bands sit on. Products whose text states no band fall back to showing the paragraphs that mention the organ.
Austria Codex → Text search
The publisher's own screens navigate a tree of drug classes. That answers “what is in this class” and cannot answer “what is licensed for breast cancer”, because the disease is a sentence in Anwendungsgebiete and appears in no coded field anywhere.
For example — Typing Mammakarzinom returns 252 medicines, each showing the line that matched. The catalogue also says Brustkrebs — a different word for the same disease — so “Mammakarzinom OR Brustkrebs” returns 494, and searching either alone would have found half of what you meant. If you do not know the German, type “breast cancer” into the suggestion box and the local model offers the words the catalogue actually uses.
What should happen — Nine sections are searchable: what it is for, how it is given, the dose, contraindications, pregnancy, adverse effects, interactions, warnings and properties. Terms match inside words because the text is German — Karzinom finds Mammakarzinom and Bronchialkarzinom. Devices, foods and cosmetics carry no product information and are not searched; the page says so rather than letting their absence look like a result.
Austria Codex → Text search
Real questions have more than one clause. Everything for colorectal cancer given with chemotherapy. Anything contraindicated in renal impairment. What this company makes, that is still available, for hypertension.
For example — “(Kolonkarzinom OR Rektumkarzinom) AND Chemotherapie” returns twelve. “gegenanzeigen:Niereninsuffizienz” returns 324 — a quarter of the 1,615 that mention renal impairment anywhere — because the term is aimed at the contraindications section rather than at the whole text. “Mammakarzinom NOT Brustkrebs” and “Mammakarzinom AND Brustkrebs” add back up to the 252 you started with.
Mammakarzinom OR Brustkrebs (Kolonkarzinom OR Rektumkarzinom) AND Chemotherapie gegenanzeigen:Niereninsuffizienz anwendung:Infusion -Kinder
What should happen — AND, OR, NOT, brackets, quoted phrases, a leading minus for exclusion, and field:term to aim at one section. German operators work too. A query that does not parse is refused with the reason — a search box that quietly drops the half it did not understand returns a confident list of the wrong medicines.
Pharmaceutical Care → Medication review
The counter question is about a medicine. The review question is about a person taking seven of them, and it needs the other half of the picture — age, kidneys, allergies, whether they can swallow a tablet — which the catalogue does not hold and never will.
For example — Frau Berger, 76, comes in with a discharge letter. Recording her age, an eGFR of 38 from the letter, diabetes, a lactose intolerance, a recorded ramipril allergy and difficulty swallowing, then adding the medicines through the one box — by name, by PZN, by barcode, by substance, by ATC or by authorisation number — Ramipril 10 mg, Ramipril 1,25 mg, Spironolacton “Agepha” and Dismenol forte 400 mg, gives twenty-six findings grouped into six questions rather than twenty-six alerts. The serious one is ramipril with spironolactone. The quiet one is that she has been given ramipril at two strengths by two prescribers.
What should happen — Findings triaged by what to do about them — Act now, Review, Note, Handled — as tabs with a live count on each, sorted worst first within a tab; where a finding came from (interactions, duplication, allergy, external risk databases, and so on) is a small badge on the card, not a section you scroll past. Severity is visible before you read a word: a contraindicated pregnancy finding is large and bold, a routine note is small and quiet. Facts, applicability and full provenance sit behind one “Details” toggle per card, opened only when wanted — and opening it is recorded on the review, the same as every patient value. Each finding can be accepted, marked already managed, dismissed or deferred with a reason, assigned to someone else, given a follow-up date, and later given an outcome — recorded separately and stamped when it is known, because a recommendation goes out on one day and is declined on another. A quick lookup with no intervention stays as ephemeral as ever; once one is recorded, the review itself is saved and resumes automatically if you leave and come back — it holds none of the catalogue's own text, only what you typed and decided. Once screened, the patient and medicine panels above collapse to one line — medicines, finding count, when it was screened — with Edit and Rescreen alongside; a Product information button opens the publisher's own text as a drawer instead of a panel sitting above every finding.
Pharmaceutical Care → Medication review → after screening
KHIX is the licensed medicines catalogue, and it stops where a catalogue stops: it has no anticholinergic burden score, no geriatric potentially-inappropriate-medication list, no pharmacogenomic gene-drug pairs. A curated reference table kept alongside it fills exactly that gap, without pretending the two are the same source.
For example — Herr Nagl, 78, is on Saroten 25 mg, Vendal retard 10 mg, Dismenol Ibuprofen 200 mg and Ezetimib/Simvastatin Accord. Screening adds a cumulative anticholinergic-burden finding of 4 — amitriptyline's 3 plus morphine's 1 — a PRISCUS 2.0 flag on the ibuprofen at his age, a LiverTox flag on the simvastatin sharpened because his recorded hepatic impairment is moderate, and a renal-elimination finding on the morphine that reads his recorded eGFR of 28 directly into the sentence. A pharmacogenomic finding on all four fires too, and because no genotype is recorded for him yet, one data-gap bar above the findings says the record is incomplete and offers the pharmacogenomic field right there — not a fourth card repeating the same sentence.
What should happen — Every one of these findings names its source — ACB-Score, PRISCUS 2.0, STOPP/START, FORTA, Embryotox, CredibleMeds, LiverTox, CPIC/DPWG pharmacogenomics, dosing.de — and a line under Screening says in words that this table is kept alongside the catalogue, not part of it, so it is never mistaken for something KHIX itself asserted. Every category that depends on an unanswered patient value is named once, in the one data-gap bar, with an inline field for each — filling it in there clears the gap immediately rather than sending you hunting for the right box in a collapsed panel.
Pharmaceutical Care → Reference data
Risk reference, diagnostic groups and lab analytes are built by hand from the client's own clinical sources, unlike the licensed catalogue itself — and hand-built tables need a way to add, correct and retire rows without going near SQL. Until now there was a one-time loader and nothing else.
For example — A new PRISCUS 2.0 entry comes in for a substance already on file. On the Risk reference tab, filling in the active ingredient, category, severity, clinical relevance and source and pressing “Add row” makes it live immediately — the next medication review that screens that ingredient sees it. Editing a row's wording, or deleting one that turned out to be wrong, works the same way, and the Diagnostic groups and Lab analytes tabs follow the same add/edit/delete pattern for the other two tables. Pharmacogenomics — CPIC/DPWG gene-drug pairs — gets its own tab too, even though there is no separate table underneath it: it is the same risk-reference rows, filtered to category “Pharmakogenetik”, with the category field hidden and fixed and “Severity / specification” relabelled “Gene / allele” so the form matches what is actually being entered. A row added there also shows up in the general Risk reference tab, tagged with its category, because it is the same row. Every tab also takes a CSV or .xlsx upload for adding many rows at once — first row of headers, one row per entry, always additive so a re-upload never silently overwrites what is already there; the one-by-one form stays exactly as it was for single corrections. Risk reference itself grew a lot: the client's own integrated risk database — CredibleMeds, LiverTox, STOPP/START, FRIDs, FORTA, Lifestyle, and the full CPIC/DPWG/FDA pharmacogenomic pair catalogue — was merged in on top of what was already there, additively, so nothing hand-added or hand-edited was touched or duplicated. Rows sourced that way carry optional Gene, Authority, Evidence level, Affected subgroup and Source URL fields alongside the original five, shown on the row when present and editable from the same form (a search box appears on the list once it passes about twenty rows). Two more tabs, PGx recommendations and PGx gene reference, go a level deeper — genotype/phenotype-specific CPIC/DPWG/FDA dosing guidance, and AMP Tier 1/2 lab alleles with Meamedica gene panel descriptions grouped by gene — but read-only: that is authority-published content loaded in bulk, not something maintained row by row here.
What should happen — No separate publish step and no rebuild — a change here is read straight off the same table the next screening run queries. Writes need an admin key configured on both this app and the KHIX service (AUSTRIA_CODEX_ADMIN_KEY / KHIX_ADMIN_KEY); without it the screen still lists rows, it just cannot save changes. Reads never needed this key and still don't. A bulk upload reports exactly which column names it expected if the header row doesn't match, and continues past any row that fails rather than losing the rest of the file. Editing an existing row's wording never blanks its Gene/Authority/Evidence level metadata even though the form doesn't require filling them in. PGx recommendations filters by gene, drug or authority with paging; PGx gene reference searches by gene and expands to show alleles and haplotype evidence inline.
Pharmaceutical Care → Medication review → after an intervention is recorded
A review that stops at 'documented' has not finished the job a pharmaceutical care service actually promises: a letter has to go to the prescriber, an answer has to come back, the patient needs a plan they can follow and a conversation about it, and someone has to check later that it worked. Each step only appears once the one before it is done, so a five-minute counter lookup never has to see any of this.
For example — Once Herr Nagl's anticholinergic-burden finding is accepted and an intervention recorded, a consultation letter assembles itself from the accepted findings and their interventions — nothing that was only drafted, never a fact the catalogue didn't actually say. Marking it sent opens doctor feedback; the prescriber's answer is entered per medicine, and discontinuing the amitriptyline drops it from everything after. The remaining three medicines get an ELGA-style plan — a 24-hour timeline you click to add a dose and drag to retime, or a strict as-needed schedule with its own indication and maximum. Counselling turns the same findings into plain-language tips and a four-item checklist, and a follow-up records the interval, the response and the adherence, closing the review.
What should happen — Every one of the four documents — the letter, the plan, the fact sheet, the follow-up protocol — opens the same preview with a Print button and a one-click PDF download. The whole review, including everything recorded from here on, is saved as it goes and comes back exactly as left if you navigate away — but it never holds the catalogue's own product names or monograph text, only what was typed, decided and matched by id.
Pharmaceutical Care → Medication review → Lab results
A patient who brings a lab report to the counter brings real numbers, not a description of them, and retyping fifteen rows by hand is exactly the kind of work this app's own OCR and schema-guided extraction already does for prescriptions and invoices. Lab results only need the same tool pointed at a document type it doesn't know the shape of yet — which the Lab results section provisions for itself the first time it is opened.
For example — Herr Nagl brings a lab printout. On the Extraction page, the 'Lab report' schema is already there — opening it, pasting or scanning the report, and pressing Extract reads every row: Kalium 5,6 mmol/l flagged H, Natrium 138, Kreatinin 1,4 flagged H, INR 1,1, Hämoglobin 11,2 flagged L, TSH 3,1. Back in the review, that scan is offered for import; one click matches Kalium, Natrium, Kreatinin and Hämoglobin to the reference table by name, guesses TSH against the reference's 'TSH basal' since a plain 'TSH' is not an exact match, and offers a dropdown for anything it cannot place at all.
What should happen — Kalium, Natrium, Kreatinin and INR are read twice: once into the lab-results list against their reference range and specimen, and once straight into the same patient-context fields the interaction and risk-reference screening already use — so an imported potassium of 5.6 is live in the review's own findings immediately, not sitting in a list waiting to be retyped. Every other analyte — the other 145 of them, across eleven diagnostic groups — is filed for the pharmacist to read, with the report's own out-of-range flag shown as printed. Nothing about a range is calculated or judged here; the reference range is shown for comparison, not evaluated.
Pharmaceutical Care → Body composition report
A smart scale's own app is a long scrolling screen meant for one person's phone, not something a pharmacy hands to a patient or files in a record — and the client asked for the exact one-page layout their own template already uses, not this app's usual document style.
For example — A patient's BIA scale reading — weight, BMI, body fat, lean mass, skeletal muscle, bone, water, metabolic rate and cell mass — is screenshotted from the app on their phone (more than one screenshot if the screen had to scroll, they are read together). Scanned on the Extraction page against the 'Body composition report' schema, every metric comes back with its value, unit and status word (Standard, Sehr niedrig, Niedrig, Hoch, Ausgezeichnet), sorted into the report's six fixed sections regardless of how the scale app itself grouped them on screen.
What should happen — Importing the scan fills the same dark-header, four-headline-card, six-section layout as the client's own template, badge colors included; any reading can still be corrected or added by hand. Preview report opens it with the same Print and Download PDF actions the other pharmaceutical-care documents use. A screenshot can also arrive by email rather than through the browser — for a deployment whose OCR runs on a machine with no public port, where opening a VPN per pharmacy isn't worth it just to move one photo. Emailing the screenshot to the address configured for this, subject line as the printed patient label, gets the same PDF report back as an attachment automatically — the same OCR call, the same schema, the same six-section layout, just without anyone opening the app at all; more than one screenshot in the same email (or a follow-up email) merges into the one reading the same way importing a second scan by hand does. Reachable at /api/public/webhooks/brevo-inbound/<secret>, gated by that secret in the URL rather than a signature, since Brevo's inbound parsing has none of its own — set once when wiring up inbound routing in Brevo, never touched again. For real patient data rather than testing, Threema Gateway is the compliant channel: sending the screenshot to the pharmacy's Threema Gateway ID gets the same PDF back, end-to-end encrypted the whole way — unlike email or Telegram-style bots, Threema's own servers never hold a readable copy. That leg runs in a small dedicated Python service (threema-gateway) using Threema's own SDK for the encryption, since that is not something worth reimplementing by hand; it needs a Threema Gateway account (End-to-End mode) and its own callback URL registered the same way, at /api/public/webhooks/threema-inbound.
Pharmaceutical Care → Medication review → after screening
Three very different things look identical on a screen: what the publisher coded, what this app worked out, and what merely appears in a paragraph somewhere. Acting on the third as though it were the first is the way a catalogue lookup turns into a clinical claim nobody made.
For example — In Frau Berger's review, “Ramipril appears in 2 of the listed medicines” is a structured match — the publisher's own duplication check, on substance identifiers. “Nothing recorded about crushing” is derived — her swallowing difficulty joined to the product's flags, which is our reasoning, not theirs. “Renal passages found” is a document match — the word Niere appears in the product's text, and what that means for a woman at eGFR 38 is a reading only she can make.
What should happen — Every finding carries its class as a badge and its full match path in words — “Recorded allergy → substance 81433 → allergy group 1809982551 → product 42288” — so a finding can be argued with rather than only believed. The summary counts the three classes separately.
Pharmaceutical Care → Medication review → any interaction finding
The publisher attaches three different kinds of thing to an interaction, and the handbook is precise about the difference: some are traits the severity depends on, some only change how likely it is, and some are not traits at all but the harm that could follow.
For example — The ramipril and spironolactone hit lists chronic renal insufficiency, age over 65, age over 75 and diabetes as patient traits — and low blood pressure, hyperkalaemia, renal failure and cardiac arrest as what it can cause. Shown in one list, someone would eventually be asked whether cardiac arrest applies to their patient. Here the four traits are tickable and the four consequences are not, and the traits Frau Berger's recorded details match are flagged as looking like a match — flagged, never ticked.
What should happen — Where a grading does depend on a trait, the finding says so and stays on the screen either way: the handbook treats several such traits as an AND, so ticking one of two is not enough, and a rule that quietly removed a serious interaction from a review would be the wrong place to apply it. Unanswered traits are collected into a finding of their own.
Pharmaceutical Care → Medication review
A box on the counter that nobody can give a reason for is the one worth stopping. The catalogue cannot say why this patient takes it, but it can say what it is authorised to treat — which turns an accusation into a question someone can answer.
For example — Frau Berger's five medicines all come back with no indication recorded. Each one names what the catalogue licenses it for — Ramipril as an ACE inhibitor under antihypertensives, Metformin as a biguanide under antidiabetics — so the reasons can be filled in at the counter rather than guessed later. Typing an indication clears the finding.
What should happen — The same drug wearing a different salt is caught too — Aripiprazol and Aripiprazol-Monohydrat are two substance ids to the publisher's own check and one drug to the patient, so the catalogue's substance hierarchy is read rather than only its identifiers. Two medicines authorised for the same kind of condition are also reported — an ACE inhibitor and a sartan are different substances in different classes and both are antihypertensives, which the substance and ATC checks cannot see. It is a note and says so: a second antihypertensive is usually a decision, not an accident. It stays quiet where the substance or ATC check already made the same point.
Pharmaceutical Care → Medication review → Every pair at once
A list of findings cannot tell you what it looked at. A pair with nothing against it produces no row, so eight medicines with two problems look exactly like eight medicines that were never compared.
For example — Frau Berger's five medicines make ten pairs. The grid shows all ten: ramipril with spironolactone graded Serious, three Moderate, the two ramipril strengths marked as a duplicate rather than an interaction, and the rest as a dot. Clicking a cell jumps to that finding.
What should happen — A dot means the catalogue lists nothing between that pair — the legend says in words that this is the absence of a coded interaction and not a finding of safety. Pairs come from which of your medicines landed on each side of an interaction key, so a key matching three of the basket does not claim all three pairs react.
Pharmaceutical Care → Medication review → Product information
The screening pulls out the lines that matched. Sometimes the question runs the other way — what does this medicine's information actually say, all of it — and that needs the whole text with a way through it. It is reference material, not a finding, so it opens as a drawer on request rather than sitting above the findings that actually need attention first.
For example — Pressing “Product information” and choosing Ramipril 10 mg lists nine sections and puts a count beside each one that holds something for this patient: Indications 4, Dosage 7, Contraindications 1, Interactions 3, Warnings 2. It opens on the first section that has something rather than on whichever the publisher put first, and hovering a highlight says why it is there — “Marked because reduced renal function is recorded”.
What should happen — Search inside the document to mark your own term as well. The highlighting is this application's reading of what might matter, from what you recorded, and says so — the catalogue marked nothing. The text is rendered as text: catalogue markup is stripped rather than injected, because it arrives over the network into an authenticated page.
Pharmaceutical Care → Medication review → the line above the patient
A screening run is only as good as the release it ran against, and every way that can go wrong is invisible from the findings: a release never marked active, an import that failed halfway, validation issues logged against it, or a catalogue that is simply months old. All four produce a screen full of confident findings.
For example — The line reads “1 thing to know about the data underneath this review” and opens to say an import run failed with a duplicate-key error. The release itself is fine — 202608, published, active, SHA-256 matching the published file — so nothing else is flagged, and the panel stays one quiet line until something is actually wrong.
What should happen — Release, month, module set, publication status, validation result, last good import, source file and hash, and whether raw XML is available. It turns amber and states the problem in words when the release is not active, not published, more than a month old, has validation issues, or when an import failed.
Pharmaceutical Care → Medication review → any interaction finding
The grading says how bad. It does not say which way the interaction runs, how well the mechanism is understood, how good the evidence is, or which of the two matching paths found it — and those change what you do about it.
For example — The ramipril and spironolactone hit shows: both substances amplify each other; mechanism proven; evidence base good; matched on the product and through its substances. Where the publisher holds several keys for one pair — the same problem graded differently depending on the patient — they are folded into one finding at the worst grading, with the others named underneath so nothing has quietly disappeared.
What should happen — How often it happens is deliberately absent: the publisher retired that field, so the screen says so rather than leaving a gap someone could read as “rarely”.
Pharmaceutical Care → Medication review → open a finding's sources
The catalogue is written in German and only in German. Reading a warning at speed in a second language is where a detail goes missing, and the detail is usually a number.
For example — The ramipril and spironolactone monograph says: “Ist die gleichzeitige Anwendung unvermeidbar, sollte 2-3 Tage vor Beginn der Therapie mit einem ACE-Hemmer Spironolacton vorübergehend abgesetzt werden.” Pressing “read it in English” on that section gives it back in English with the two-to-three days intact — and then checks, digit by digit, that every number in the German survived into the English, and says so on the screen.
What should happen — A reading, never a replacement: the German stays above it and the English is captioned as a model's reading that nobody has checked. It runs on the Qwen model in this deployment, so the licensed text never leaves the machine and is not training material. It is asked for one section at a time, the literature list is not offered, and the reading never enters an evidence snapshot — a snapshot holds identifiers, and a translation is not evidence of anything.
Austria Codex → Look up → open a product
The record is one screen; the questions are six. How is it used, what is unsafe about it, what does it cost, what could replace it, where does it sit, and what has been written about it.
For example — Aprednislon 1 mg. “How it is used” gives the effect in one line — a synthetic glucocorticoid, four times stronger than cortisol — then indications, how to take it, the dose, and that the tablet splits into two equal parts. “Safety” shows it carries lactose, galactose and glucose-galactose malabsorption warnings, that it is only for a compelling or vital indication in pregnancy, and that the catalogue holds 53 contraindicated and 39 serious interactions for it — a count, without opening 92 monographs.
What should happen — Each tab is a separate read, made only when you open it. Anything the catalogue does not record is shown as not recorded rather than left out: no lactose warning is not the same as lactose-free, and the screen does not let the two look alike.
Austria Codex → Look up → open a product → How it is used
A ward question with an immediate wrong answer. A modified-release tablet crushed into a feeding tube delivers a whole day's dose at once.
For example — A nurse rings about Abilify 10 mg for a patient with a nasogastric tube. The screen answers four separate questions: it can go down a feeding tube, it can be dissolved or suspended, it can be crushed — and whether the capsule can be opened is not recorded, which is shown as not recorded rather than as a yes or a no.
What should happen — Six answers in the catalogue's own wording, including carcinogenic potential and light sensitivity. Those last two are marked off-label, because the catalogue says they may come from the authorisation holder or the literature rather than from the product information. A product with none of this recorded says exactly that, and adds that silence is not permission.
Austria Codex → Look up → open a product → Alternatives
Out of stock is a daily problem, and the catalogue already knows what the publisher considers equivalent — including the number that says it is not one-for-one.
For example — Aprednislon 1 mg is not available. Alternatives lists 58 products in the same therapeutic group, each with a conversion factor and whether it can be ordered today, plus five single-substance products with the same active substance. The conversion factor is why this is not a plain list: swapping 1 mg for 25 mg is not a swap.
What should happen — Grouped the way the publisher groups them — same generic identifier, lower strength, higher strength, similar substance — with the publisher's own legal note underneath. Availability is shown on every row, so a swap that is also out of stock is visible before you pick it.
Austria Codex → Browse → Search on everything at once
Some questions are not a name. Everything oral, in stock, with one active substance, that is a medicine rather than a cosmetic — that is four filters and no search box.
For example — Stock-taking wants every orally given medicinal product currently available. The kind-of-product list shows what the release actually holds — 10,393 medicines, 19,516 devices, 22,342 foods, 26,299 cosmetics — so it is clear before searching that most of the catalogue is not medicine.
What should happen — The filter options are read from the catalogue, not written into the app, so the counts beside them are real. It also states what the loaded module does not contain — this one is the human catalogue with no veterinary module — because an empty result from a missing module looks identical to an empty result from a real absence.
Austria Codex → Reference → What has been written
Sixty-eight written pieces come with the release, linked to substances and indication groups rather than to products, so one can reach a product it never names.
For example — Opening Aprednislon and going to “written about it” finds “Diät bei rheumatoider Arthritis” — reached through the indication group, not through the product name. Opening it shows the whole piece, its sources, its keywords, and that it links to 53 indication groups.
What should happen — Searchable by text, by keyword, or by indication code. The text is shown as text — the catalogue's markup is stripped rather than rendered, because it arrives over the network into an authenticated page.
Austria Codex → Interactions → click any result
The grading tells you how bad; the monograph tells you what to actually do.
For example — The lithium and aciclovir hit opens as: what happens in one line, then the full pharmacological effect, then what to do about it, then the mechanism, the symptoms to watch for, what to monitor, and the literature it was drawn from. It is in the order you would want to read it at a counter with someone waiting, not in the order the catalogue happens to store it.
What should happen — Fifteen kinds of section, each with a name rather than a number, and the grading spelled out both in English and in the German wording every other Austrian system uses.
Austria Codex → Everything else
The screens above cover what people ask for. This covers everything else: all fifty-four tables the catalogue permits, with their real columns, so a question nobody anticipated is still answerable.
For example — Someone in accounts wants every product-to-substance link for a spreadsheet. Choosing khix_core.product_substance, previewing the export to check the columns, then running the command it hands back writes the whole table to a file, one row per line, ready to load somewhere else.
product_id=23 release_id=3
What should happen — The columns are read out of the database as you pick a table, so nothing is assumed. Filters are exact matches and up to twelve of them. Below it: the seven original files the publisher shipped, with the checksum that proves the copy is unchanged, and a download for each.
What is coming, what to stock, and what the pharmacy down the road is doing.
Pharmacy AI → Sales coaching
Upload the recording and it writes out what was said, then tells you how the call went — how much of it you spoke, what you were asked, which objections came back unanswered.
For example — A rep comes back from Dr Weber saying it went badly and they do not know why. The recording is uploaded; it shows the rep spoke 78% of the words, asked one question, and that “I am not paying more than I do now” was never answered. That is a different conversation with the rep than “try harder next time”.
Rep: How are you finding the current supply? Dr Weber: Unreliable this quarter, and patients notice. Rep: What would need to change for you to switch?
What should happen — Talk share, questions asked, and the objections raised — with the ones you did not answer marked. Where a transcript has no speaker labels those numbers are left out rather than guessed at, and it says so. Record the outcome honestly: “What wins” is only worth reading if the outcomes are true.
Pharmacy AI → Sales coaching → What wins
Compares the calls that went well against the ones that did not, and names what actually differed.
For example — After twenty calls with honest outcomes, it reports that asking about supply problems appears in eight of nine calls that went well and one of eleven that did not — while naming a price appears equally in both. The team stops opening with price.
At least four calls that went well and four that did not
What should happen — Until then it says so rather than showing a pattern. A pattern found in two or three calls is just those two or three calls, and a rep told to copy it is being coached on noise.
Pharmacy AI → Sales coaching → Practise
Rehearse a difficult conversation before having it for real, against a character who is busy, sceptical and loyal to what they already use.
For example — A new rep rehearses the Dr Weber conversation five times before the real visit, against a busy GP loyal to what she already uses. Afterwards they turn on what she was privately thinking and see she warmed up only when they asked about her patients rather than talking about the product.
A busy GP, twenty years qualified, loyal to the product she already uses and short of time
What should happen — What they are privately thinking stays hidden while you practise — being told they are warming to you would remove the thing you are practising — and can be shown afterwards.
Pharmacy AI → Engagement levels
Reads their own emails and messages and places them on a fourteen-level scale, with the one thing worth doing next.
For example — Three months of messages from one GP are pasted in. It comes back “11/14 · Evaluating” because she asked for the head-to-head data and the monthly cost — so the next thing to send is a comparison, not another brochure. A different contact comes back “1/14 · Opted out” and is marked as a stop.
12 Mar — Thanks, I will look at it. 2 Apr — Do you have the comparison against what we use now? 15 Apr — We have started using it with two patients.
What should happen — A level with the words that decided it. The lowest three are not “try harder” — someone who asked not to be contacted is a stop, and the system will not accept that reading unless they actually wrote it.
Pharmacy AI → Engagement levels → How accurate is it?
So the accuracy you quote to anyone is a number from your own contacts rather than a claim from a brochure.
For example — You label forty contacts yourself and press Measure. It agreed exactly 72% of the time, and the breakdown shows it reliably confuses “dormant” with “cold”. That is a number you can put in front of a client, and a specific thing to fix.
Twenty is enough to be indicative. A hundred is enough to trust.
What should happen — How often it agreed exactly, which levels it gets wrong, and the disagreements themselves so you can read them. “Within one level” is shown beside it and is deliberately not called accuracy — on a fourteen-point scale that is a much easier target.
Pharmacy AI → Trends
Notice a rise before you run out.
What have we sold more of in the last month than the month before, and is anything rising unusually fast?
What should happen — A short list with the size of the change, so you can act on it rather than read a chart.
Pharmacy AI → Forecast
Turns last year's pattern into this month's order.
Based on the last two years, what should I order for the hay fever season, and when should it arrive?
What should happen — Quantities and timing you can sanity-check against your own judgement.
Pharmacy AI → Competitors
Pricing and range, without visiting every week.
Apotheke am Hauptplatz — check OTC pain relief and hay fever pricing weekly
What should happen — A record you can revisit, and a starting point for a schedule that checks it for you.
Pharmacy AI → Compliance
Find the gap before an inspector does.
Which of our standard operating procedures have not been reviewed in the last twelve months, and which staff have no current assessment?
What should happen — A list of what is out of date, with what to do about each.
Letting assistants use the software you already run.
MCP Servers → Add server
Once connected, everything that system can do becomes something an assistant can do — look up stock, place an order, read a file.
The address of the service A key or sign-in for it Which actions you want assistants to be allowed to use
What should happen — The available actions are listed. Tick the ones you want, and choose whether each needs a pharmacist to approve it.
A2A Registry
An assistant elsewhere — another branch, a partner — can be asked for help the same way a connected system is.
Name: Branch two advisor Address: the address they give you Ask it: questions about their stock levels
What should happen — It appears as something your assistants can delegate to, under the same approval rules as anything else. If the other side changes what it can do, press Refresh — otherwise yours keeps working from what it was told on the day you added it.
Settings → API Keys
For your own systems to send work in — a till, a website, a rota.
Till system — reads extraction results only
What should happen — A key shown once. Copy it then; it cannot be shown again. Medical document search deliberately refuses keys, however senior the person who made it.
Settings → Integrations
Wholesaler portals, email, calendars — authorised once, then usable by assistants.
The account you want to connect, and permission from whoever owns it
What should happen — A sign-in window, then the service appears as available. You can disconnect it at any time.
What happened, what it learned, and who did what.
Runs
Every job, finished or failed, with what it actually did.
Open the most recent run and read the steps — which documents it read, which systems it used, what it decided.
What should happen — You can replay a run to see it again, or fork it to try the same thing with a different question.
Memory
Assistants keep useful facts between conversations. Sometimes they keep something wrong.
Search for a product name or a customer name and see what it has stored about them.
What should happen — You can delete anything that is wrong or should not have been kept, and it stops influencing answers immediately.
Audit Logs
Every sign-in, approval, medical document read and rule change, in order, and it cannot be edited afterwards.
Who accessed medical documents last month, and was any emergency access used?
What should happen — A filtered list you can export. Emergency access shows up separately, with the reason that was given at the time.
Operations
Whether the models are responding and whether anything is queued up behind a failure.
Look at whether any service shows as unhealthy, and whether the job queue is growing.
What should happen — Green across the board means the problem is elsewhere — usually the browser needing a hard refresh.
The controls that decide access, and the way in when something urgent happens.
Settings → Security
Required before anyone can search medical documents. Not optional for that, by design.
Scan the square with a phone authenticator app Enter the six-digit code it shows Save the recovery codes somewhere safe — they are the way back in if the phone is lost
What should happen — Medical document search becomes available. Without it you are refused there, however senior you are.
Settings → Organization
The name and details that appear on anything the system produces for you — messages, exports, training records.
Pharmacy name as it should appear to customers Address The person accountable for what happens here
What should happen — Used on exported training records and customer messages, so they do not go out with a placeholder name.
Settings → Members
Everyone gets their own sign-in, so the record shows who actually did something.
Owner — everything, including billing and deleting things Admin — everything day to day Clinician — can search medical documents and use assistants Auditor — can read the record but change nothing Viewer — can look, cannot act
What should happen — An invitation email. The role can be changed later without making a new account.
RAG Search → emergency access
For the moment something matters more than the usual limits — but on the record.
Customer collapsed in store, need the interaction information for the medicine they are holding
What should happen — Fifteen minutes of read access, then it closes by itself. Everything you look at is recorded against your reason. It does not skip two-step sign-in — that is still required.
The parts you meet before anything else — and the page you land on afterwards.
Sign up
The first person to sign up owns the pharmacy account. Everyone after that is invited by them, so nobody sets up a second account by mistake.
Your full name A work email address A password only you know
What should happen — You are signed in and everything is empty. That is correct — nothing is shared with any other pharmacy, so there is nothing to start from. The account is named after you at first; rename it to the pharmacy under Settings → Organization, then turn on two-step sign-in.
Sign in → Forgot password
Nobody can look your password up and read it back to you, including us. Resetting it is the only route in.
your.name@yourpharmacy.at
What should happen — An email with a link that works once and expires. If no email arrives, check the address is the one on the account — for safety the page says the same thing either way rather than confirming who has an account.
Overview
The first screen after signing in. Four numbers, and each one is a question worth answering.
Active agents — assistants that are switched on Pending approvals — someone is waiting on you; open it Runs (24 hours) — how much work has happened Skills — shortcuts your assistants have picked up
What should happen — Pending approvals is the one to watch. A number sitting there means work has stopped and is waiting for a person.
Skills
When an assistant works something out, it keeps the method so it does not start from nothing next time. This page shows what each one has picked up.
An assistant has got faster and you want to know why An assistant keeps doing something you would rather it did not You are about to set up a second assistant for similar work
What should happen — A list per assistant. It fills up on its own as work is done — there is nothing to write here yourself.
Agents → your assistant → Graph
Memory answers “what did it store about warfarin”. This answers “what does it think warfarin is connected to”, which is the question you have when an answer surprises you.
For example — An assistant refuses a combination and nobody can see why. The graph shows ibuprofen → interacts with → warfarin → increases → bleeding, each connection quoting the sentence it came from. Two of those came from a procedure someone uploaded in March.
Show everything around — pick anything it knows and see what hangs off it Why does it connect two things? — name two and it shows the chain
What should happen — Every connection shows the words it was drawn from. Nothing is invented: if it cannot quote the memory it came from, it is not drawn at all. Where it has stored two answers to a question that can only have one, it says so. Four views: a picture, a list, a timeline of when things happened, and the kinds of thing it knows about. It will also point out two names that look like one thing — “Dr Weber” and “Weber” — and join them only when you say so, keeping both names and every quote.
Sign out, top right
On a computer only you use this barely matters. On the one behind the counter it matters a great deal.
Signs you out of this browser, on this computer Does not sign you out anywhere else you are still signed in Next time you will need two-step sign-in again
What should happen — If you think someone may be signed in as you somewhere you cannot reach — a lost phone, a machine at home — signing out will not help. Set a new password through Forgot password instead: that ends every session everywhere, on every device, at once. Turning two-step sign-in on or off does the same, so expect to sign in again afterwards.
Agents → your assistant → Observability
The one place that answers “why did it say that?”, and the one place that can properly erase something a customer has asked you to.
Audit log — every fact it stored, when, and why Time travel — what it believed on a date you choose Conflicts — where it has stored two things that disagree Decay — facts it has not been told again in a long time, quietly counting for less
What should happen — In the audit log, Forget erases a fact permanently for a data request; Rollback only undoes a change. Verify chain confirms the history has not been altered — a broken chain is shown, not hidden.
Buttons that are only obvious once someone points at them — including the one to reach for when something is going wrong.
Guardrails → Operations
For the moment you would otherwise be pulling a plug out of the wall. Three levels, and picking the right one matters.
Kill switch — stops every assistant in the pharmacy Emergency deny — same reach, for when something is actively going wrong Forced review — all of it still runs, but a person approves each one first Quarantine — stops one assistant or one team, leaving the rest working Disable a tool — switches off one action for everybody
What should happen — Immediate, and recorded with who did it. Two things worth knowing: the first three stop the whole pharmacy, so quarantine is what you want when only one assistant is misbehaving — and emergency access can lift those three but deliberately cannot lift a quarantine or a disabled tool. Those come back only when someone lifts them on purpose.
Guardrails → Analyse and test
A rule that is nearly right is worse than none. This tells you what it would do before it is switched on.
Generate boundary cases — finds the just-over and just-under values you would forget Analyse and test — runs them and shows what fails What would change — compares against the rule you already have live
What should happen — Anything serious blocks publication rather than warning you. "What would change" is the one to read before replacing a working rule — it names the cases that would start being treated differently.
Guardrails → New draft from this version
Editing a live rule in place means there is nothing to go back to. This keeps the working version running while you edit a copy.
New draft from this version Make your change Analyse and test Publish — the old version stays in the history
What should happen — The live rule is untouched until you publish. Every earlier version stays readable, so you can see what a rule said on the day something happened.
Schedules → Queue one run now
A schedule set for Monday is otherwise untested until Monday.
Did it produce what you expected, and did it finish quickly enough to be useful?
What should happen — It runs once immediately. This does not disturb the timetable and does not count against a run limit — the next scheduled time is still the next scheduled time.
Pharmacy AI → Campaigns → Approve for delivery
Writing a message and sending it are deliberately two separate acts.
Cancel pending deliveries — stops anything not yet gone out
What should happen — Drafts sit until approved. Cancelling stops what has not yet left; anything already delivered cannot be recalled, so approving is the step to slow down on.
Runs → Fork
For "what if we had asked it differently" — without losing the original.
The question that was asked Which assistant answers it
What should happen — A new entry marked as forked from the old one. Both stay in the list, so the two answers can be compared side by side.
Agents → your assistant → Observability → Conflicts
An assistant told two different things on two days will have stored both. Until you pick, it may use either.
The two statements that disagree, each with the date it was stored
What should happen — Keeping one discards the other and records the decision. Worth checking after anything changes in the pharmacy — opening hours, a supplier, who to refer to.
In the chat, under the reply
It proposes what it wants to remember rather than simply remembering it. You decide.
Proposed memory writes — a fact it wants to keep Proposed skill updates — a method it wants to reuse
What should happen — Nothing is kept unless you accept it. This is the cheapest place to stop a wrong fact — once accepted it will shape later answers until someone finds it.
Training simulator → Check this marking
For anything that affects someone's record, one marker should not be the only marker.
The person confirming is named on the result, not just the person who sat it
What should happen — The mark is confirmed or changed, with both names against it. That is what makes the result defensible later.
Agents → your assistant → Observability → Decay
An assistant that never forgets keeps quoting last winter's opening hours with the same certainty as your name. Facts it has not been told again in a long time gradually count for less, until it stops offering them at all.
Who someone is, and what they must not take — years How you prefer things done — about a year Standing facts about the pharmacy — about six months What happened on one particular day — about a month
What should happen — Reading a fact does not count as confirming it — an out-of-date fact gets used precisely because it still looks like the answer. Telling the assistant the same thing again does count, and sets the clock back. Frequent use slows the fade but cannot stop it. Press Preview what would change before you apply anything: it names the facts that would stop being used, so you can spot one that should have stayed, and saying that one to the assistant again brings it back. Nothing is deleted either way — a faded fact stays readable on this page and can still be erased properly if a customer asks.
Agents → your assistant → Observability → Decay → Switch on
Otherwise this only happens when somebody thinks to press a button, which in practice means it does not happen.
Checks that assistant on its own, about once a day Nothing else changes — only the assistant you switched it on for Off unless you switch it on, for every assistant
What should happen — How often it checks does not change how fast anything fades — that depends on the age of the fact, not on how often it is measured. Checking daily and checking weekly reach the same answer. Preview it once before switching it on for an assistant that has been in use a long time.
Decisions → Record one
Six months later somebody asks why you refuse a particular combination. The answer exists only if someone wrote it down as a decision rather than as a note.
For example — The pharmacy decides to refuse ibuprofen to anyone on warfarin and refer instead. Recorded with the two options rejected — supplying with a warning, and asking the GP first — and why. A year later a locum asks, and the answer is on screen in ten seconds rather than being re-argued.
What was chosen What was considered and NOT chosen Why Who is accountable
What should happen — As you type the question it searches what you have already decided, so “have we been here before” is answered while it is still useful. Without the rejected options a decision reads as the only thing anyone thought of.
Decisions → What did we do last time?
Describe the situation in front of you and see what was decided before, and how it turned out.
For example — A customer on warfarin asks for ibuprofen. Typing that in brings back the decision from last year, matched on “warfarin, ibuprofen, customer”, showing it was refused and that the approach worked.
A customer on warfarin is asking for ibuprofen.
What should happen — Past decisions with the words that matched, so a poor suggestion can be waved away. Ones that went badly are shown too — usually the most useful. Two decisions answering the same question differently are flagged, because that is one person not knowing about the other rather than a change of mind.
Settings → Security → Export signed audit evidence
The difference between saying you have a record and being able to hand one over.
Who did what, when, and under which rules — sealed so that a later change to it would show
What should happen — A file you can send on. Because it is sealed, an altered copy can be told from the real one — which is the point of exporting it rather than taking screenshots.
Two things are worth checking before anything else. If a page looks out of date, refresh it fully — hold Shift and click reload. If the microphone or a page will not work at all, check the address you are using starts with https; several features are switched off by the browser on an insecure address.