Medical Practice
Coded problems plus visit history, crossed into a recall list that computes itself.
The short answer
Medical Practice is an Odoo module for a general clinic that has to keep chronic patients coming back. Diagnoses are coded records with a category and a status, encounters are dated and belong to the patient, and crossing the two produces a care-gap register the front desk works as a search filter. Vitals, prescriptions, appointments and three analysis boards sit around it.
Last updated
What it is for
A scheduler can tell you who is booked on Thursday. None of them can tell you which of your diabetics has not been through the door since spring, because answering that needs the diagnosis and the visit history in the same query, and a calendar owns neither half. So the question gets answered the way it always is. Somebody remembers, or nobody does.
- Platform
- Odoo
- Category
- Clinical records
- Works with
- Odoo 18 · Odoo 19
- Technical name
medical_practice- Status
- Direct from webbox
- Pricing
- Paid
What is inside it
- 01
The recall register
A patient lands on the register when an open problem in the Chronic category meets a most-recent encounter older than the review interval. Both halves are stored fields, so the register can be searched, sorted and exported.
- 02
Coded problems
Diagnosis, ICD-10 code, category, status, severity, body region, onset date and the physician who entered it. Resolving from the button stamps the resolution date; reactivating clears it again.
- 03
Vitals
Temperature, pulse, respiratory rate, both pressures, SpO2, weight and height sit under the SOAP fields. BMI computes and stores from the last two, returning 0.0 rather than raising when no height was entered.
- 04
The day
Appointments run draft, confirmed, in progress, done, with cancel reachable throughout. References come off a padded sequence, and the filters are the ones a receptionist asks for out loud.
- 05
Drill-downs
Every counting tile opens the rows behind its number. A test rebuilds each click, evaluates the filter domains the way a browser would, and asserts the row count matches what the tile printed.
What it looks like in practice
-
A chronic patient has not been seen in a quarter
An open entry in the Chronic category sits on the problem list, and the most recent encounter is months old. Neither record states the two facts together.
Both halves are stored computes, so the Overdue for Review filter can search them. The care-gap tile opens the register with that filter applied, and the register carries its own menu item under Patient Panel for anyone who never opens the board.
- Review interval
- 90 days
- On the register
- 3
Figures from the module's own demo data, on a fresh install. Install with demo data and open Dashboard, then Practice Overview; the register is the first tile.
The recall registerDrill-downs
-
A systolic reading lands above target and the row looks like every other row
Vitals are typed into the encounter and the pressure is high. The list gives no sign of it, and the dashboard number and the list have no reason to agree.
One threshold drives three surfaces: the tile counting readings above BP target, the search filter of the same name, and the danger decoration on the encounter list. The row that turns red is the row the tile counted.
- Systolic threshold
- 140 mmHg
A default you can change.
VitalsDrill-downs
-
A diagnosis has nowhere on the body to sit
A patient carries a systemic condition alongside several localised ones, and a body map that insists on painting everything would have to put diabetes in a limb.
The patient form's Body Map tab paints open problems onto anterior and posterior figures over eleven addressable regions, coloured by severity. A twelfth key, Systemic and Other, deliberately paints nothing and lists beside the figure instead.
- Localised open problems on the demo panel
- eleven of the nineteen
Figures from the module's own demo data, on a fresh install. Install with demo data, then open a patient and switch to the Body Map tab.
Coded problemsDrill-downs
What it deliberately does not do
- No money anywhere
- No clinical model in the module carries money of any kind. There is no billing, no fee schedule and no claim, and the dashboard slot that would have held revenue went to the panel instead.
- Insurance is two text fields
- Insurer and policy number are recorded on the patient and searchable, with a group-by for the insurer. Nothing validates a policy, checks eligibility or transmits anything to a payer.
- No e-prescribing and no drug database
- The medication on a line is free text, and no code reads the allergy field, so writing a prescription will not warn you about one. Prescriptions print. They do not reach a pharmacy.
- One review interval for the whole practice
- The interval is a Python constant mirrored in one search filter, not a setting. There is no per-disease or per-patient recall schedule.
- A cancellation and a no-show are the same state
- The model has one cancel value covering both, so the module cannot tell them apart. That is why the tile says no-shows and cancellations.
Questions
Can I install this on Odoo Online?
Does it invoice or handle insurance claims?
Can I change the review interval?
Is the Sales dependency actually used?
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