MedSpa
Aesthetic charting on a dosing ledger that appends every injection and never overwrites.
The short answer
MedSpa is an Odoo module for aesthetic clinics that inject. Under a face and body treatment map sits an append-only dosing ledger: each administration keeps its own product, lot number, quantity, expiry and date, and a mistaken dose is voided with a reversing entry rather than erased. It also holds prepaid packages, consent forms, and a retreatment list built from how long each product class lasts.
Last updated
What it is for
Most aesthetic charting keeps a single row per zone and writes over it. That is fine until somebody asks which lot went into a client's glabella in the spring, when the only answer available is whatever was injected most recently. A spa also runs on money taken now for treatment owed later, so the clinical record and the liability sit in the same conversation. Each has to survive being read back under pressure.
- Platform
- Odoo
- Category
- Clinical records
- Works with
- Odoo 18 · Odoo 19
- Technical name
medspa- Status
- Direct from webbox
- Pricing
- Paid
What is inside it
- 01
The treatment map
Thirty-nine zones over two anatomical charts, face and neck plus a body front and back, with each charted zone's quantity painted on the anatomy. Clicking a zone opens its history and writes nothing at all.
- 02
Lot traceability
The ledger groups by lot, client, injectable, zone or region, so a recall notice becomes one screen. Entries refuse edits and deletions; a void posts a reversing entry with the quantity negated.
- 03
The recall
The module knows the interval for each product class, so it can name the zones that have come due on clients with nothing in the diary. A daily job raises one activity per client.
- 04
The board
Prepaid value not yet delivered leads, then zones due with nothing booked. The rest measure that liability, the money behind it, or the day's work burning it down, and each tile opens its own rows.
What it looks like in practice
-
One zone, treated twice, with two different lots
A client's glabella has been injected on two separate visits. A chart holding a single row per zone would show the later lot and lose the earlier treatment entirely.
Every administration appends to the ledger with its own product, lot, quantity, expiry and treatment date, so the zone reads as a running total with both lots intact and the map paints the quantity on the anatomy.
- Charted on the glabella across 2 doses
- 40
- Lots still on the record
- C88120, C95634
Figures from the module's own demo data, on a fresh install. Install with demo data, open a client and click the glabella on the treatment map.
The treatment mapLot traceability
-
A recall notice names a batch number
A lot is withdrawn and the clinic has to say which clients received it, quickly, without reading through files.
The dosing ledger holds every dose across every client and groups by lot, so that answer is one grouping on one screen. Each entry also keeps who recorded it and which visit it belonged to.
- Lot on the demo ledger
- C54081
Figures from the module's own demo data, on a fresh install. Install with demo data, open the dosing ledger and group by lot.
Lot traceabilityThe board
-
A toxin dose is charted on a site that is also a filler site
The jaw takes filler and it is also the masseter injection site, so a millilitre ceiling applied there would flag an ordinary toxin dose as an overdose.
The product decides which figures apply, never the zone, and units are converted before comparison so an equivalent dose of a different toxin reads as equivalent. Unusual doses and expired lots both warn, and neither blocks, because refusing an entry does not stop the injection.
- Charted on the jaw
- 25 units of Botox
A default you can change.
The treatment mapLot traceability
What it deliberately does not do
- It is not an EMR
- No e-prescribing, no lab integration, no HL7. It charts aesthetic treatment and the products used to deliver it.
- The recall is per client, not per zone
- An appointment names a treatment and no zones, so nothing booked means the client has no visit outstanding. Tightening it needs planned zones on the appointment, which is not built.
- It does not manage stock
- Lot numbers are recorded as they are read off the box. Nothing is deducted from inventory or reordered, and the module does not pretend the two jobs are one.
- History starts where you start
- Upgrading from an earlier version carries every charted zone's last dose into the ledger. What was overwritten before that cannot be recovered, and the module does not invent it.
- The dose table is not a dosing authority
- Every zone carries a typical range, a ceiling and a note on where those figures came from. It is a sanity check on data entry, and nothing in it ever refuses an entry.
Questions
Can I install this on Odoo Online?
Does it deduct injectables from inventory?
Can a dose recorded in error be deleted?
Does anything leave my server?
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