Guide

Migrating from paper or legacy clinic software

The risk in replacing clinical software is never the new system. It is the migration: patient histories that must survive intact, identifiers that must not collide with the ones the new system generates, and a cutover during which the clinic still has to see patients. Plan those three and the rest is ordinary software delivery.

Decide what actually has to move

The instinct is to migrate everything, and it is usually wrong. Migration cost scales with data volume and, more sharply, with how messy the source is.

Patient demographics and identifiers have to move — everything else hangs off them. Active clinical history matters; a decade of inactive records often does not need to be live in the new system if it can be retained in a readable archive.

Outstanding balances and open episodes must move, because the clinic cannot operate without them. Closed billing history frequently does not, provided it remains accessible for audit.

The useful question for each dataset is not "is it valuable?" but "will someone need it in the new system next week, or only occasionally in a readable form?"

Identifier collisions, the failure people miss

The new system generates patient codes, invoice numbers and prescription numbers from its own counters. Imported records arrive carrying identifiers from the old system. If those two sequences overlap, you get two different patients with the same code, discovered weeks later.

The fix is to decide the strategy before importing: either preserve legacy identifiers and start the new counters above the highest imported value, or assign new identifiers and keep the legacy one as a searchable secondary field. Both work. What fails is assuming it will sort itself out.

Given how easily human-readable sequences collide even without a migration — we have found patient codes duplicating silently in a live system with no unique constraint behind them — a migration is the moment to put those constraints in, not after.

Migrating from paper

Paper is a different problem from a legacy database, and full retrospective data entry is almost never worth it.

The pattern that works is forward-looking: start the new system from a cutover date, enter demographic details as each patient next attends, and scan historical notes as attachments against the record rather than transcribing them into structured fields. The record becomes progressively richer as the patient population cycles through, which for most clinics is a matter of months.

Transcribing years of handwritten notes into structured data is expensive, slow, and introduces transcription errors into a clinical record. Scan, attach, move on.

Cutover without losing a day

Run a rehearsal migration into a staging environment first, with real data, and have clinic staff look at their own patients in it. They will spot things no test suite will — a field that lost its meaning, a name transliterated wrongly, a duplicate they recognise.

Plan the cutover for the quietest period the clinic has. Keep the old system readable but read-only for a defined period rather than switching it off, so anything discovered later can be checked against the source. And agree in advance what constitutes a rollback trigger, before anyone is under pressure to make that judgement live.

  • Rehearse the migration on staging with real data, reviewed by clinic staff
  • Reconcile counts — patients, active episodes, outstanding balances — before and after
  • Keep the legacy system read-only rather than decommissioning immediately
  • Cut over during the quietest window, with the build team available
  • Define the rollback trigger in advance

Frequently asked

How do we migrate patient records to a new clinic system?

Migrate demographics and identifiers first since everything hangs off them, then active clinical history and open financial items. Inactive history and closed billing can often stay in a readable archive rather than being imported. Rehearse the whole migration on staging with real data and have clinic staff review their own patients before cutover.

What is the biggest risk when changing clinic software?

Identifier collisions. The new system generates patient codes and invoice numbers from its own counters while imported records carry identifiers from the old system, and overlapping sequences produce two patients sharing a code — usually discovered weeks later. Decide before importing whether to preserve legacy identifiers and start counters above them, or reassign and keep the old one as a searchable field.

Should we enter all our paper records into the new system?

Almost never. Start from a cutover date, capture demographics as each patient next attends, and scan historical notes as attachments rather than transcribing them into structured fields. Full retrospective transcription is slow, expensive and introduces errors into a clinical record.

How long does a clinic software migration take?

It depends far more on the state of the source data than on its volume — a clean legacy database moves quickly, inconsistent data does not. The schedule driver is usually reconciliation and staff review rather than the import itself, so budget time for people to look at their own records before cutover.

Can we keep using the old system during the transition?

Keep it readable but read-only for a defined period after cutover, so anything questionable can be checked against the source. What does not work is writing to both systems in parallel — the two diverge immediately and reconciling them afterwards is worse than either migration path.

Related

Want this built?

Tell us what you are trying to ship and we will tell you honestly whether we are the right team for it.