
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.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0, Odoo 20.0. Technical name bambooforge_veterinary.
Transcript of the walkthrough (Odoo 20)
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. Said before you buy, because it is the half that decides whether the app fits: In the next few minutes: why a vet cannot use clinic software, then animal files, then consultations, then vaccinations and recall, then how we make sure it works. Then what this app deliberately does not do, so you can tell before you buy whether it fits.
Everything lives under Animals then Boosters due then Vaccines then Species. Requires BambooForge Clinic. Odoo Community 16.0, 17.0, 18.0 or 19.0. 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. 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. 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.
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. 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. 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.
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. 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. The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.



Transcript of the walkthrough (Odoo 19)
Veterinary Practice Management. Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls. Because the patient and the payer are different creatures. Everything below follows from that one split.
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. In the next few minutes: why a vet cannot use clinic software, then animal files, then consultations, then vaccinations and recall, then support.
Then what this app deliberately does not do, so you can tell before you buy whether it fits. Everything lives under Animals then Boosters due then Vaccines then Species. Requires BambooForge Clinic. Odoo Community 16.0, 17.0, 18.0 or 19.0.
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.
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. 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. 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. 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.
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.
The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.



Transcript of the walkthrough (Odoo 18)
Veterinary Practice Management. Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls. Because the patient and the payer are different creatures. Everything below follows from that one split.
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. In the next few minutes: why a vet cannot use clinic software, then animal files, then consultations, then vaccinations and recall, then support.
Then what this app deliberately does not do, so you can tell before you buy whether it fits. Everything lives under Animals then Boosters due then Vaccines then Species. Requires BambooForge Clinic. Odoo Community 16.0, 17.0, 18.0 or 19.0.
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.
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. 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. 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. 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.
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.
The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.



Transcript of the walkthrough (Odoo 17)
Veterinary Practice Management. Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls. Because the patient and the payer are different creatures. Everything below follows from that one split.
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. In the next few minutes: why a vet cannot use clinic software, then animal files, then consultations, then vaccinations and recall, then support.
Then what this app deliberately does not do, so you can tell before you buy whether it fits. Everything lives under Animals then Boosters due then Vaccines then Species. Requires BambooForge Clinic. Odoo Community 16.0, 17.0, 18.0 or 19.0.
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.
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. 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. 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. 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.
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.
The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.



Transcript of the walkthrough (Odoo 16)
Veterinary Practice Management. Veterinary practice management: the animal is the patient and the owner pays - species, breed, microchip, handling warnings, booster recalls. Because the patient and the payer are different creatures. Everything below follows from that one split.
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. In the next few minutes: why a vet cannot use clinic software, then animal files, then consultations, then vaccinations and recall, then support.
Then what this app deliberately does not do, so you can tell before you buy whether it fits. Everything lives under Animals then Boosters due then Vaccines then Species. Requires BambooForge Clinic. Odoo Community 16.0, 17.0, 18.0 or 19.0.
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.
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. 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. 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. 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.
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.
The complete manual is at docs dot bambooforge dot dev, the demo database is linked from the store page, and support answers within twenty-four hours. Links are in the description.



Key facts
- 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 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
Copy bambooforge_veterinary into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
Install Veterinary Practice Management.
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 - 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.