# Clinic All in One for Veterinary Practices

> Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls.

- **What it is:** Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls.
- **For:** Industries
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 208 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_veterinary
- **Not for:** Said before you buy, because it is the half that decides whether the app fits:; Book the same veterinarian twice at the same time.; Sign off a visit without a finding.
- **Manual:** https://docs.bambooforge.dev/bambooforge_veterinary/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_veterinary.action_bf_vet_animal
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_veterinary
- **Manual last updated:** 2026-10-15

---
# Clinic All in One for Veterinary Practices

## 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, 19.0 or 20.0.

## How we make sure it works

Before every release, **74 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- A household that still has its call is not rung twice.
- The status of a dose cannot be typed over by the front desk.
- The front desk saves a visit without reading the notes.
- A vaccination cannot be recorded in the future.
- A visit cannot be about another practices animal.

The complete list is in the source you receive.

## What it does not do

Said before you buy, because it is the half that decides whether the app fits:

- Book the same veterinarian twice at the same time.
- Sign off a visit without a finding.

## Install

1. Copy `bambooforge_veterinary` into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
2. Install **Veterinary Practice Management**.
3. Open **Animals** - its menus are Boosters due, Vaccines, Species.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Web; clinic (BambooForge) must be installed first app. No extra Python package.

****Where does it show up?****

Under the **Animals** menu (Boosters due, Vaccines, Species).

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.

## Support

[support@bambooforge.dev](mailto:support@bambooforge.dev) - answered within two business days.
OPL-1; one purchase covers one production database plus its staging
copies.

## 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.
