Importing Data from Another System
A clinic moving from another program does not retype its history. Each list comes in as a CSV file through its own import screen, runs in the background, and can be undone afterwards if the wrong file went in.
Where to Find It
Click an address to open that screen on your own clinic. The first click asks which clinic you are, then remembers it.
| Screen | Address |
|---|---|
| Import suppliers | /import/suppliers |
| Import patients | /import/patients |
| Import products and services | /import/products |
| Import invoices | /import/invoices |
| Import invoice payments | /import/invoice_payments |
| Import income and expenses | /import/transactions |
Each list page also has an Import button next to New: Patients, Products, Invoices, Income & Expense.
The Order Matters
Import in this order, because each file finds things the earlier ones brought in:
- Suppliers — products name their usual supplier.
- Patients — invoices find their patient by code or phone.
- Products and services — invoice lines find their product by code, then by name.
- Invoices.
- Invoice payments — each finds its invoice by number.
- Income and expenses.
Each Screen, in Three Steps
- Upload the CSV. Download the sample from the top of the page to see the columns expected.
- Map each field to a column of your file, check the preview, and choose what a duplicate does: skip it or update the existing record.
- Results: how many rows were added, updated, skipped and refused, with the reason for each refused row.
The import runs on the server. You may close the tab; coming back to the page finds it again.
What Each Import Does
Patients
- Name and phone are required.
- A row is a duplicate only when both the phone and the name match a patient already on file. A mother and her daughters booking under one phone become separate patients.
- A code in the file is kept if it is free. That is what lets the invoice file find each patient.
Products and services
- Type is
productorservice. - A category the clinic does not have yet is added.
- A supplier is looked up by name and never added, so import the suppliers first.
- The SKU is what a re-run matches on.
Invoices
One row per invoice line. The invoice's own columns (number, date, patient, amount paid) repeat on every line of the same invoice:
| invoice_number | invoice_date | patient_code | description | unit_price | quantity | line_total | paid_amount |
|---|---|---|---|---|---|---|---|
| 00020 | 2025-11-09 | N012 | Laser — full body | 4500 | 1 | 4500 | 5400 |
| 00020 | 2025-11-09 | N012 | Dermapen | 500 | 2 | 900 | 5400 |
- The number is kept as written, and a number the clinic already has is skipped.
- A line total under price × quantity is kept as a discount on that line.
- Prices are taken as charged and no tax is added. Many systems include VAT in the price, and adding it again would charge it twice.
- The amount paid becomes one payment on the invoice date, and the invoice reads paid, partly paid or unpaid accordingly.
- Each invoice and payment is posted to the books exactly like one entered by hand.
- No stock moves. Those goods left a shelf this clinic never counted here. Count the shelf with a stocktake instead.
Invoice payments
One row per payment, on its own date: an invoice paid in three instalments over six months is three rows, so the cash reports show each amount in the month it came in. When payments come in this file, leave amount paid empty in the invoice file.
- Invoice number must already be in the clinic.
- Reference is optional and tells apart two payments of the same amount on the same day; the same reference again is skipped. Without one, the same date and amount on the same invoice is taken to be the same payment.
- Each payment is posted to the books and moves its invoice to paid or partly paid.
Income and expenses
- Each row becomes an entry under Income & Expense, posted to the books.
- Account is a code (
5100) or a name. A name the chart of accounts does not have yet is added to it, so the clinic's own categories survive the move. - Type is
expenseorincome, and empty means expense.
Undoing an Import
Imported the wrong file, or the right file twice? Under the results, Undo import takes the whole import back out:
- every record it added is removed, with everything that came with it: invoice lines, payments and their entries in the books;
- every record it updated gets its old values back.
The button also appears at the top of the import page for the last import that can still be undone, so it is there even after the tab was closed.
What the clinic has done since is never undone. A patient who has been booked or billed since the import, a product already sold, or an invoice that took another payment is kept. The screen then lists each kept record and why. Undo the later imports first (invoices before patients), then press Try again to take out what was kept.
Two things stay on purpose: the categories and accounts an import added to the chart, since they cost nothing empty and other entries may already use them.
WARNING
Imports and undos run on a background queue. If nothing moves past 0%, the queue worker is not running — ask whoever administers your server.
Desktop App and Offline
Importing needs the connection: the file is processed on the server. The desktop app opens the same import screens while online. Records imported this way reach it with its next sync, like any other change.