
Veterinary Practice Management
Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_veterinary.
Veterinary Practice Management
Why a vet cannot use clinic software
Because the patient and the payer are different creatures. Everything below follows from that one split.
Animal files
Name, species and breed as linked records - so "how many cats did we see last quarter" is a question with an answer, not a text search.
Sex, neutered, colour and markings, date of birth with the age read the way a vet reads it (4 y 3 mo, or 5 mo for a puppy).
Microchip number, unique across the practice - the number a shelter or another clinic will identify this animal by.
Insurer and policy number.
Handling warnings in red on every consultation. The nurse reading it is about to put their hands on this animal.
A date of death, which silences every reminder for that animal.
The owner is a normal clinic patient file, so the day sheet, invoicing and accounting keep working unchanged. A household with three dogs is three animal records and one bill.
Consultations
The visit records which animal was seen and bills the owner. Recording an animal against somebody else's file is refused - that is how an invoice reaches the wrong person.
Weight history is taken from the consultations themselves, with a per-species sanity check: a cat recorded at 45 kg is a typing mistake, not an obese cat.
Booking knows which animal is coming, and starting the consultation carries it onto the record.
Vaccinations and recall
Every dose records the batch number - the only way to trace a recalled batch back to the animals that received it - the vet who gave it, and the next-due date computed from the vaccine's own validity instead of typed by hand.
A vaccine that is not licensed for that species is refused, and a vaccination cannot be recorded in the future.
A daily job raises the recall: an activity for the practice, a "Boosters due" list to work from, and automatic lapsing a month past the date.
No reminder is ever sent for an animal that has died. Owners do not forgive that one.
A vaccination card PDF for the owner: what was given, by whom, with which batch, and when the next dose is due.
Requirements
Requires BambooForge Clinic. Odoo Community 16.0, 17.0, 18.0 or 19.0.
Support
support@bambooforge.dev - answered within two business days. OPL-1; one purchase covers one production database plus its staging copies. n What changed in 1.2 ===================
A second operations review, against the same practice a year on. Every finding was reproduced as a failing test first:
The household's phone call no longer disappears when one pet is boosted. One owner still gets one call, but the reminder now moves to the doses still outstanding when a sibling's dose is closed, archived or lost - and the nightly job raises it again if the task was deleted.
Suppressing a recall no longer claims a booster was given. A mistyped date of death, or an archive, closes the outstanding doses as Closed, not chased; clearing the date puts them back, and the animal's file records what was suppressed.
A cancelled or deleted visit leaves the dose chargeable again. "Already billed" is now a billing line that still stands rather than a tick nothing clears, and two people clicking Bill it at the same second still charge the owner once.
The status of a dose is a button. Boosted, Lapsed and Closed each mean something to the card the owner is handed, so they are recorded by the workflow - not typed into a list, imported or written by RPC.
The nightly job finishes. It runs per practice, in bounded batches, writing off old rows without a tracked message each, and re-arms itself if there is more to do than one run should attempt. It rings a manager of that practice, reads "today" in the practice's timezone, and says so in the log when there is nobody to assign.
An animal belongs to the practice that holds its owner's file, so it can no longer be stamped with whichever company the nurse happened to be in - which hid it from the vet and made its vaccines unbillable.
Correcting a dose moves its booster. Changing the date or the vaccine re-derives the next-due date; a date a vet typed by hand is still kept.
A history imported newest-first reads correctly: only the latest dose of a vaccine stays open, whatever order the rows arrived in, and Close superseded doses re-runs it safely on any selection.
A vaccine can be kept to one practice, and billing one whose product belongs to another company now says so instead of raising an access error; every practice gets its own file for strays, and each stray is its own reminder.
What changed in 1.1
An operations review against a real two-vet practice found ten things that bite in the first weeks. Each was reproduced on a running database before it was touched, and each fix has a test:
The primary course was invisible. A puppy's second DHPP dose, due in 21 days, was recalled as if it were an annual booster. The due date now follows the protocol: the primary-course interval for a first dose, the vaccine's validity afterwards.
Giving the booster now closes the previous dose and cancels its reminder. Before, the practice phoned owners whose animal had been vaccinated that same week, and a fully protected animal showed overdue in red.
A lapsed booster is the one most worth chasing, so it stays on the animal and in the overdue list instead of disappearing at day 31.
The first run after a data import no longer floods. Old rows are lapsed before reminders are raised, and nothing older than 30 days past its date raises an activity at all.
One owner, one phone call. Four animals due the same month now produce one activity listing them, not four tasks.
Death cancels reminders that were already scheduled - previously only future ones were suppressed, so the call still came.
The vaccine is charged on today's visit for that animal, never on a forgotten March draft, never twice, and with the same tax and fiscal position the consultation line uses.
An animal with history cannot be deleted, only archived: deleting took every batch number with it.
Two animals without a microchip can coexist (an empty chip is now stored as nothing at all, so a CSV import does not die on row two).
Two weights on one day: the later one is the one that counts.
Due dates are a snapshot: re-pricing a protocol next year no longer rewrites what was owed last year, and a date a vet adjusted by hand survives. A stray arriving at 22:00 has an "Unknown owner" file to go into, and the front desk can bill without touching clinical fields.
nSupportn=======n
Screens


