Optometry Clinic
Anterior-eye grading, a replayable chart history, and a recall book that carries its value.
The short answer
Optometry Clinic is an Odoo module for an independent optometry practice. The anterior eye is recorded as anatomy rather than prose, graded zone by zone per eye on a history that cannot be overwritten and can be replayed to any past date. Beside it sits a priced recall book: signing off an exam closes the recall it answered and writes the next one.
What it is for
A diary tells you who is coming on Thursday. It will not tell you that a patient's annual eye exam fell due a year ago and was worth a sight test plus the spectacles that usually follow it, or that a glaucoma follow-up runs on a shorter cycle than everybody else in the file. Every product in this category records the booking. Very few keep the book of patients who did not come back, and for a small practice that book is the business.
- Platform
- Odoo
- Category
- Clinical records
- Works with
- Odoo 18 · Odoo 19
- Technical name
optometry_clinic- Status
- Published on the Odoo App Store
- Pricing
- Paid
What is inside it
- 01
The eye chart
Eight clinical signs over seventeen anatomical zones per eye, graded 0 to 4 by clicking the structure the sign was seen in. A sign will not save on a structure where it cannot occur.
- 02
The recall book
A recall carries a type, an interval and an expected value. Marking an exam Done completes the recall, restamps the last-exam date and raises the next one, without duplicating a follow-up that already exists.
- 03
Tiles and their lists
A test walks sixteen tiles across three boards, rebuilds each click, evaluates every filter domain and asserts the row count equals the number printed. It exists because it caught a real mismatch here.
- 04
The clinical record
Sphere, cylinder, axis and add per eye with pupillary distance, uncorrected and corrected acuity kept as text, and a pressure per eye whose stored mean ignores an eye that was never measured.
- 05
Dispensing
A prescription becomes a frame and lens specification and moves through received, checked and collected, with remakes linked to the job they replace and carrying a reason.
- 06
Release records
Off unless the company is in the United States or you flip the per-company switch. An append-only log of every prescription handed over, plus inbound seller verification on an eight-business-hour clock.
- 07
The day
Appointments run draft, confirmed, done against a named optometrist, with lane hours computed from start to end, stored and totalled in the footer. A booking with no end time reports 0.0.
What it looks like in practice
-
A resolving corneal finding erases the grade that justified stopping lens wear
A finding is regraded downward at each visit as it settles. On a current-state chart the earlier, worse grade is simply gone by the time anyone reviews the case.
Every recording, regrading and clearing appends an entry, and the model refuses a direct write and an unlink. The scrubber under the chart walks the recorded moments, and while it is showing a past state the chart will not accept a new finding.
- Grade at the fit
- 2.0
- Four months later
- 1.0
Figures from the module's own demo data, on a fresh install. Install with demo data, open an eye exam chart and drag the history scrubber back to the first fit.
The eye chartThe clinical record
-
An overdue recall is worth money nobody has counted
Recalls sit in a list with dates on them. Nothing on that screen says what the practice loses by not making this week's calls.
Each recall type prefills the interval and the expected value of that visit, and the at-risk tile totals due plus overdue and opens exactly those rows. The same column totals in the list footer, so the tile can be checked by eye.
- At risk on the demo book
- $1,190
- Three due
- $670
- Two overdue
- $520
Figures from the module's own demo data, on a fresh install. Install with demo data and open the practice board; the at-risk figure is the first tile.
The recall bookTiles and their lists
-
An eye is charted at exactly the pressure threshold
A tile counts raised pressures and a filter opens them. If one asks for above and the other for at or above, an eye on the boundary sits inside the list and outside the number.
One constant carries the threshold now. The exam row decorates red from it upward, the eye joins the watch list on the board, and a test charts the boundary value itself to hold the two together.
- Watch-list threshold
- 21 mmHg
- Boundary the test charts
- 21.0
A default you can change.
The clinical recordTiles and their lists
What it deliberately does not do
- No imaging of any kind
- No fundus photos, no OCT, no topography, no scanned prescription. The exam model carries no image field and no attachment tab for clinical media.
- Almost no billing, nothing for insurers
- A dispensing job can raise a draft sales order and that is the whole of it. Nothing else is priced, invoiced or claimed, and a recall's expected value is a planning figure only.
- No calendar view, and nothing stops a double booking
- Appointments are a list and a form. The model carries no overlap constraint, so two bookings can sit on one lane at once and the module will let them.
- The recall prices are code
- The five prices live in a dictionary inside the recall model rather than on a settings screen. The interval is editable per record; the price is not.
- The chart does not print yet
- A patient-facing vision report that snapshots the chart as it was handed over is specified and not built. It is the next thing to land here.
Questions
Can I install this on Odoo Online?
Can it invoice a sight test or submit an insurance claim?
Are the recall prices editable?
What are the prescription release screens, and do I get them?
Have something to build?
Tell us the problem. We'll come back with a plan, a price, and who'd actually build it.
- Free scoping call
- Reply within 1 business day
- No lock-in