DH EMR Field guides
Admin guide
For the person who runs DH EMR Field for a team: holds the admin device, keeps the clinic lists and forms right, looks after backups. Everyday entry is in the user guide, one device in Getting started, the organization's own cloud project in the cloud sync guide.
Field has no accounts. The admin is a device, not a person, and every setting here is changed on that device under Settings.
Admin device, standard device
The setup wizard asks "What is this device allowed to do?". The This device card under Settings shows the answer on its Role row.
| Wizard choice | Role row |
|---|---|
| Enter and view records (most devices) | Standard |
| Also change the form and clinic settings for everyone | Admin |
Keep one or two admin devices with the people who run the clinic; make every other device standard.
| Admin device only | Any device |
|---|---|
| Clinic lists (sites, clinicians, complaints, procedures, referral destinations); the formulary and lab test panel, including reference ranges; diagnosis quick-picks and prescription presets; form templates | Renaming the device, connecting to a cloud, syncing, backup, restore, import |
On a standard device the admin controls are visible but off, with the reason in every disabled control's hover text: "Only an admin device can change this. This device is set to standard." Each card says the same in a note, and the template editor and reference range editor open with a "Read only" banner.
No control in the app changes a device's role after setup. On a cloud device the role in the project's devices table counts: change the row and the device adopts it on its next sync (the cloud sync guide has the query). A device set up on its own keeps the wizard's choice.
Clinic lists
The Clinic lists card fills the pick lists on the visit form. Each list is a text box with its own save button.
| List | Save button |
|---|---|
| Clinic or site names | Save sites |
| Clinicians | Save clinicians |
| Complaints (the buttons under the Chief concern box) | Save complaints |
| Procedures | Save procedures |
| Referral destinations | Save referral destinations |
On an admin device, edit the box: one entry per line, and commas belong inside an entry. "Grace N., clinical officer" is one clinician. Blank lines are dropped and duplicates removed.
Tap the list's save button.
"Saved 3 sites. Reopen the visit form to see them." A visit form already open keeps the old list until it is reopened.
Sites and clinicians can never be empty, or no visit could save: "You need at least one site. An empty list would block every save.", and the same for clinicians. The other lists refuse too: "This list cannot be saved empty. One complaint per line."
Until real sites and clinicians are set, every visit is filed under "Site A" and "Physician A", and Settings shows a red warning: "This device is still filing records under placeholder names." Fix this before the first day of entry; placeholder names are no use in a report.
On a cloud team, edit the lists on an admin device. A standard device's lists are replaced by the organization's on its next sync, so there is no point editing them there.
Form templates
The Form templates card lists each form as "On" or "Off" and has one button, Open the template editor. A brand-new organization has one form, already on.
The editor is a panel headed Form templates. Every change saves as you make it (the header reads "Saving…", then "Saved") and reaches everyone on the next sync. Tap Close when done; there is nothing to discard.
On a cloud device that has not synced yet, the editor refuses to write: "Form settings have not reached this device yet".
"Your organization's form has not synced to this device yet. Editing is turned off until it arrives, because saving now would replace your organization's real form with an empty one. Sync this device, then come back." That guard protects the whole team; do not work around it.
Forms
Each form has an editable name box, an On checkbox, and the buttons Sections, Duplicate and Delete. Every visit keeps the name of the form it was filed under, so old visits are never affected by what follows.
| Action | How |
|---|---|
| Create | Type a name in New form name, tap Add form (off until a name is typed). |
| Duplicate | Duplicate makes "name (copy)": the safe way to experiment with a working form. |
| Rename | Edit the name box; kept when you leave it or press Enter. |
| Turn on or off | The On checkbox decides whether the form is offered for new visits. With more than one on, a new visit shows a Form template list at the top. |
| Delete | Delete, then confirm. |
"Delete the "Mobile Outreach" form?
Visits already filed under it keep their answers and their template name. The form just stops being offered for new visits."
The editor never strands the team without a visit form. Deleting the last form: "At least one form must remain. Add another form before deleting this one." Turning off the last form that is on: "At least one form must stay on, or there is no visit form to open. Turn another form on first."
If a delete would leave nothing on, another form is turned on for you: "Deleted. "General Clinic" was turned on so there is always a visit form."
Sections
Tap Sections on a form. The card is headed "Sections of" and the form's name. The lists the built-in sections offer, like medications and lab tests, are edited on the Settings screen, not here.
| On each section row | What it does |
|---|---|
| ↑ ↓ | Reorder. |
| Title box | Rename. A renamed built-in section gets Reset name to go back to its original title. |
| Chip | "Built in", or the number of questions on a custom section. |
| Hide / Show | Take the section off the visit form, or put it back. Visit and Patient show a disabled Always shown instead: every visit needs them. |
| Roles | Which DH EMR Clinic staff roles see the section. Field has no accounts, so it changes nothing on the Field visit form. |
Add a section adds "New section" at the end. Custom sections get Questions, Delete and a checkbox Starts collapsed on the visit form, locked once a required question exists: "This section has a required question, so it always starts open. A collapsed section would hide an answer Save demands."
Deleting a custom section: "Delete "Social History" and its 3 questions?
Answers already saved on existing records are kept, but will no longer appear on the form."
A footnote names sections kept for compatibility with the older app (Access to Care, Rx Presets, Provider) that do not appear on the visit form and so are not listed. Ignore them.
Questions
Tap Questions on a custom section.
Type the label in the New question box.
Pick a type: Short text, Long text, Single choice, Multiple choice, Number, Scale (0-N), Yes / No, or Date.
Tap Add question.
A row with arrows, a label box, the type list, a Required checkbox and Remove. Under it, the field id: "The field id is permanent; saved answers stay linked to it."
Choice question: tap Choices and fill "Choices, one per line". It must keep at least one: "A question needs at least one choice. The previous choices have been kept."
Scale question: tap Scale and set Lowest and Highest. A new scale runs 0 to 10.
Tap Done.
Because the field id never changes, removing a question is safe for old records:
"Remove "Smokes"?
Answers already saved on existing records are kept, but this question will no longer appear."
If a change cannot be written, the editor says "That change was not saved:" with the reason, and "Your form is unchanged."
Formulary
The Formulary card is a table with the columns Medication, Dose, Unit, Category and Controlled, a Remove button per row, and the buttons Add medication and Save formulary.
One rule matters more than the rest. "Edit carefully: saved prescriptions keep pointing at the same entry, so never reuse a row for a different drug - add a new row instead."
Editing a row into a different drug silently changes what old prescriptions appear to say. Add new rows; remove rows you no longer stock.
| Column | What it does |
|---|---|
| Dose | Fills the dose box on the visit form when the drug is picked. |
| Unit | Decides whether a dispensing quantity is counted: "tabs", "caps" and "sachet" count; "ml", "cream" or another unit records no quantity. |
The formulary cannot be saved empty. After a save: "Saved 38 medications. Reopen the visit form to see them."
Lab tests and reference ranges
The Lab tests card defines the lab panel: a table with the columns Test, Type, Unit, On by default and Ranges, a Remove button per row, and the buttons Add lab test and Save lab tests.
A type is "Positive / negative" (POS and NEG buttons on the form) or "Number" (a number box with the unit as its hint). "Saving replaces the whole panel for your organization." The list cannot be saved empty.
| To | Do this |
|---|---|
| Put a new test on the form | Add lab test, fill the row, Save lab tests. |
| Take a test off the form, keep it in the panel | Untick On by default, then Save lab tests. Saved results are untouched; tick and save to put it back. |
| Remove a test | Remove, then Save lab tests. |
| Turn on a built-in test that ships off | "Hepatitis C (Anti-HCV)", "COVID-19 Rapid" and "TB (AFB Smear)" ship unticked. Tick and save. |
Reference ranges: new results only
On a Number test, Ranges opens the editor headed Reference ranges. On a row not yet saved the button is off: "Save lab tests first, then set the reference ranges for this test."
The editor's standing notice governs everything here. "Changing ranges affects new results only.
Visits already saved keep the interpretation that was recorded at the time; editing ranges never rewrites a recorded result. Only new results entered after this change use the new ranges."
Tap Ranges on a saved Number test.
Add rows with Add range: a Label (for example "Normal"), From (at least), Up to (below) and a Color: None, Green (normal), Amber (caution), Red (critical) or Gray (neutral). An empty bound is open.
Order the rows with the arrows; Remove drops one. "Ranges are checked top to bottom and the first match wins. A value equal to "from" is inside the range; a value equal to "up to" is not - it belongs to the next range up."
Read the box headed "Check these before saving (saving is still allowed):". It lists a bound that is not a number, a range with no label, a range that can never match, two ranges that overlap, or a gap no range covers.
Type a number under Try a value.
Exactly what a new result would record: "Would record 182 mg/dL with interpretation Elevated".
Tap Save ranges. Cancel asks "Discard the range changes?" if you have edited anything.
| Default bands | Ranges |
|---|---|
| Blood Glucose, mg/dL | Low below 70, Normal from 70, Elevated from 140, High from 200 |
| Hemoglobin, g/dL | Severe Anemia below 7, Moderate Anemia from 7, Mild Anemia from 10, Normal from 12 |
Diagnosis quick-picks and prescription presets
Both have their own cards under Settings, and both reach everyone on the next sync. Diagnosis quick-picks are the buttons under the Diagnosis box; each tap appends to the diagnosis text. Prescription presets are one-tap bundles in the Medications section: applying one adds its medication lines and treatment notes, and never removes lines already entered.
Hide or remove
Each entry is one row with ↑ and ↓, Hide or Show, and Remove. A hidden entry shows the word "hidden" on its row.
| Button | Effect |
|---|---|
| Hide | Keeps the entry, takes its button off the visit form; reversible with Show. Hover text: "Hidden entries stay in the list but do not appear on the visit form." (presets: "Hidden presets stay in the list but do not appear on the visit form.") |
| Remove | Deletes the entry. Saved visits are never touched, and the confirm says so. |
"Remove "Dental Pain" from the diagnosis quick-picks?
Diagnoses already saved on visits keep their text - only the quick-pick button goes away."
"Remove the prescription preset "UTI"?
Prescriptions already saved on visits are kept, and the formulary is not changed - only the one-tap preset goes away."
Field ships with 31 quick-picks, "Malaria" to "Abscess", and 21 presets, "H. pylori Triple Therapy" to "MSK Pain". Built-ins can be removed too; the confirm adds "This is a built-in preset, so once saved it stays removed for your organization after sync."
For a cleaner form, hide instead of removing. An empty list is refused: "The diagnosis quick-picks cannot be saved empty. Hide entries instead if you do not want them on the visit form."
Nothing is written until you tap Save diagnosis quick-picks or Save prescription presets.
Adding a quick-pick
Type it in the box with the hint "Add a diagnosis".
Tap Add diagnosis or press Enter. The name box on each row is editable, so a typo can be fixed in place.
Tap Save diagnosis quick-picks.
Building a prescription preset
Tap Add preset, or Edit on an existing one.
An editor under the list, headed "New preset" or "Edit preset".
Type a Preset name; without one the editor says "The preset needs a name."
Tap + Add medication per line. Pick the drug from the formulary list or the last entry, Other drug (type a name), which opens a Drug name box. Enter a dose, frequency and duration; × removes a line.
Check the note under each line (table below).
Fill Treatment notes added with this preset (optional) if wanted.
Tap Add this preset or Apply changes, then Save prescription presets.
| Under the line | What it means |
|---|---|
| "14 tabs" | The dose was understood; this quantity is recorded when the preset is applied. |
| "The dose "..." could not be read, so the quantity assumes 1 per dose (14 tabs). Write it as a number of tabs or in mg." | Fix the dose so the quantity is right. |
| "Not in the formulary - prescriptions from this line record no dispensing quantity." | Add the drug to the formulary first if you want a quantity. |
| "Ongoing - no quantity is recorded." | The duration is Ongoing. |
| "No dispensing quantity will be recorded for this line." | The unit cannot be counted (for example a cream). |
A preset with no medication lines is allowed; its summary reads "See treatment notes".
The device fleet
For teams whose devices sync through the organization's cloud project; a device set up on its own is in no fleet.
A device registers itself the first time it connects, in the wizard's cloud path or later with Connect this device to a cloud under Settings. Its name, role and last sync time land in the project's devices table.
The This device card shows the name, the Role, the first part of the Device ID, and the Mode ("Offline only" or "Cloud sync").
| Task | Where | What to know |
|---|---|---|
| Rename a device | Rename this device on the This device card: a Device name box with Save name. | "Renaming keeps this device's identity: records it has already filed stay its own." It never re-registers, never orphans records. |
| Review the fleet | The project's SQL editor; the cloud sync guide has the one-query listing. | Do it regularly: recognize every row, revoke strangers. |
| Revoke a lost or stolen device | The SQL editor, not the app. | Records already pushed are kept. The app can never un-revoke a device; that lives only in the SQL editor, on purpose. |
| Change a device's role | The devices table. | The cloud's role is authoritative: the device adopts it on its next sync. |
To replace a device, follow the Moving to a new device card under Settings:
On the old device, tap Download backup and save the file somewhere you can reach it.
On the new device, open the app and connect it to the same cloud project (or choose offline only).
Tap Restore from a backup and pick the file.
Check the record count matches before wiping the old device.
Honest limit: revoking does nothing to the data already on a lost device, and that data is not encrypted at rest. Treat a lost device as a disclosure, not just an access problem.
Backup and restore
A backup is a single file holding every record on the device plus the form and preset settings. It never contains the cloud key or device identity.
Take one at the end of each clinic day: it is the safety net if a device is lost, wiped or replaced. The admin's job is to make that habit stick on every device.
Tap Download backup on the Backup and restore card.
"Backup downloaded with 140 records. Keep it somewhere safe."
Move the file (named dh-emr-backup and the date) somewhere safe.
With no cloud, the backup files are the organization's archive. With a cloud, the backup is still the true archive and the cloud a convenience copy for the devices; the cloud sync guide says why.
Restore merges; it never wipes
The card's own rule: "Restoring merges: nothing already on this device is lost, and where the same record exists in both the more recently saved version wins." A restore cannot undo newer work.
Tap Restore from a backup and pick the file.
Confirm the records restore.
"Restore records from "dh-emr-backup-2026-10-06.json"? Records in the file are merged into this device. Where the same record exists in both, the more recently saved version is kept, so this cannot undo newer work."
Answer the second, separate question about settings. Tap Cancel unless you are deliberately restoring configuration.
"Also restore the settings from this file? That replaces this device's form layout, sites, providers and formulary with the ones in the backup. If this is an admin device those settings go out to the whole team on the next sync. Choose Cancel to restore records only. That is almost always what you want."
Read the result.
"Restored: 12 added, 3 updated, 125 already newer here. 140 records on this device. Settings were left as they are. Restored records will upload on the next sync."
On an admin device, restoring months-old settings and syncing would roll the whole team's forms, lists and formulary back.
| A restore stops when | The app says |
|---|---|
| The file is not valid JSON | "That file is not valid JSON." |
| It is not a backup file | "That is not a DH EMR backup file." |
| It came from a newer app | "That backup was made by a newer version of the app. Update this device first." |
| The device reports no records but previously held some | "This device is reporting no records, but it previously held 140. Restoring now could overwrite them. Close and reopen the app, check the records list, and try again." |
Moving records from another cloud project
The Moving from another cloud project card brings records across from a project this device is not connected to, for example after moving to a new Supabase project.
Export the records from the old project as JSON.
Tap Import records from a file and pick the file.
The records are merged in and upload to your current project on the next sync.
"Export as JSON, not CSV. CSV flattens lab results and medication lists into text and they cannot be read back reliably."
The demo
The Field demo runs entirely in the browser. Its banner: "A fictional clinic with sample patients. Everything stays in this browser and never syncs anywhere." It refuses every cloud connection: "Cloud sync is not available in the demo. This demo clinic is fictional and everything stays in this browser."
It skips the wizard and opens as an admin device named "Demo iPad" in offline-only mode: three sites, three clinicians, two forms on ("General Clinic" and "Mobile Outreach", each with its own custom sections) and ten visits for eight fictional patients, one with a name written in Amharic.
Rehearse here: try the template editor, build a preset, set a reference range, break things freely. Reset Demo in the banner puts the original sample patients back after a confirm.
Field as the backup for a Clinic organization
DH EMR Clinic depends on its internet connection. When the connection or the backend is down, the clinic sees patients on paper, and Field enters those charts afterward, at the end of the day, on any device with the Field app: typed up, searchable, counted in Analytics and backed up in a file.
There is no way to move Field records into a Clinic organization today. Data import from Field into Clinic is not available yet. Visits entered in Field stay in Field: not on the Clinic board, not in Clinic search, not in Clinic analytics.
| Plan for that | Why |
|---|---|
| Set up the Field device on its own, or give the Field devices their own cloud project. Never point one at the Clinic organization's project. | A Clinic project only accepts signed-in accounts, so a Field device's uploads are refused there. |
| Keep the paper charts. | If those visits are later needed in Clinic, the charts are the source and the Field records the typed copy. |
| Download a backup from the Field device after every day of entry. | The files belong with the organization's archive. |
| Expect separate records even on one device. | Field and Clinic keep separate records when both are installed on the same device. Nothing crosses between them. |
Honest limits
| Limit | What it means |
|---|---|
| The shared key is the whole fence. | On a cloud team every device shares one project key, the database cannot tell devices apart, and anyone holding the key can read everything. Revoking stops an honest revoked device, not a determined person who still has the key; someone who leaves on bad terms keeps a working key until you move the organization to a new project. DH EMR Clinic, with per-user accounts, is the fix, and there is no path between the two products today. |
| A lost device keeps its data. | Revoking does nothing to records already on the device, and they are not encrypted at rest. |
| A device set up on its own has one copy. | Its backup files are the only other copy. Lose the device and the files, and the records are gone. |
| Field cannot feed Clinic. | Visits entered in Field stay in Field. See Field as the backup for a Clinic organization. |
| Not a certified EHR, not HIPAA-compliant. | DH EMR must not be used where a certified EHR is required. It is intended for global-health use outside the US. |