This guide walks you through the Hospital Management System (HMS) built on Odoo 19 Community Edition. It covers each module, the main workflows, and how to use the system day-to-day.
Navigate to your Odoo instance (e.g. http://localhost:8069) and log in with your admin or staff credentials.

After logging in, click the grid icon (top-left) to open the app launcher. Select Hospital to enter the HMS.

The Hospital module has these main menu items:
| Menu | Description |
|---|---|
| Patients | Patient registry — all contacts flagged as patients |
| Appointments | Medical appointment scheduling (calendar-based) |
| Consultations | EMR — clinical encounters with vitals and prescriptions |
| Lab Requests | Laboratory test orders, results, and validation |
| Admissions | Inpatient ward/bed management |
| Insurance Policies | Patient insurance coverage and co-pay rules |
| Configuration | Specializations, appointment types, lab test types, wards, beds, medicines |
The HMS includes a public-facing hospital website accessible to anyone without logging in.
Visit the root URL (e.g. http://localhost:8069/) to see the hospital home page with a hero section, services overview, doctor highlights, and call-to-action buttons.

The /hospital/doctors page displays all doctors who have been marked as Published on Website in the backend. Each card shows the doctor's photo, specialization, job title, and biography.

To publish a doctor: open their employee record in the backend, go to the form, and check Published on Website. Add a Website Bio (HTML) for their public profile.
The /hospital/services page lists all appointment types marked as published, with descriptions and duration.
The /hospital/contact page shows the hospital's address, phone, email (from the company record), and operating hours.
Patients can create their own portal account via the self-registration form at /hospital/register. This is accessible from the "Register as Patient" button on the home page or directly via the URL.

/hospital/register.res.partner record flagged as is_patient = True with the provided demographics./my with their email and password.Patients who register via this form automatically appear in Hospital → Patients with their demographics pre-filled. No manual setup is needed — the patient is ready for appointments and consultations immediately.
If you prefer to disable self-registration and create patient accounts manually, you can remove the /hospital/register menu link via the Odoo Website Builder.
The Patients view shows all contacts flagged as patients. You can search, filter, and create new patients from here.

Open a patient record to see their full profile. The form includes several tabs:
Medical Tab — Demographics (date of birth, age, gender, blood group) and guardian links.

Medical History Tab — A read-only timeline of all consultations for this patient, showing date, doctor, diagnosis, and status.

Insurance Tab — Insurance policies linked to this patient, including coverage percentage and validity dates.

At the top of the patient form, smart buttons show quick counts:
The Appointments view shows all medical appointments with date, patient, doctor, type, and status badges.

Appointments follow a 5-state workflow:
Each state has action buttons in the form header. The appointment form also includes a calendar view for visual scheduling.
Consultations are the clinical core of the system. They record the encounter between a doctor and patient.

The consultation form has a status bar (Draft → In Progress → Done), action buttons, and three main tabs:
Clinical Notes — Chief complaint, history, examination, diagnosis, and treatment plan.

Vitals — Vital signs recorded during the visit: blood pressure, heart rate, temperature, SpO₂, weight, height, and computed BMI.

Prescription — Medications prescribed, with quantity, dosage, frequency, duration, and instructions. The Dispensing badge shows whether each line has been dispensed by the pharmacy.


A lab request links a patient, doctor, and one or more tests. Tests can be individual (e.g. Blood Glucose) or panels (e.g. CBC — which auto-expands into WBC, RBC, Platelets, Hematocrit).

The Results tab shows each test's value, unit, normal range, and an Abnormal toggle that automatically flags values outside the normal range.

In this example, Blood Glucose (Fasting) is 115 mg/dL — above the normal range of 70–100 — so it's flagged as abnormal.
The pharmacy module turns prescriptions into stock operations.
The Pharmacy location uses FEFO (First Expiry, First Out) removal strategy — Odoo automatically picks the lot with the nearest expiry date.
Under Hospital → Configuration → Medicines, manage products flagged as medicines. Medicines should be created as storable products with lot tracking enabled for expiry management.
On a completed consultation, click Create Invoice Draft to generate a draft sale order:
If the patient has an active insurance policy, the system automatically adds a negative "Insurance Discount" line to the sale order:
Lab tests and dispensed medicines are also automatically added to the sale order when the billing bridge modules are installed.

Under Hospital → Configuration → Wards and Beds, manage the physical layout. Each bed has:

Patients can log in at /my to view their medical records. The portal is view-only — patients cannot create or modify records.
hms_billing is installed, patients can also see their invoices (via Odoo's built-in account portal).Self-registration (recommended): Patients register themselves at /hospital/register — see Patient Registration above. No admin action needed.
Manual setup (admin): If a patient was created in the backend without a portal account:
res.partner record.Under Hospital → Configuration, manage master data:
| Item | Description |
|---|---|
| Specializations | Medical specialties (Cardiology, Pediatrics, etc.) assigned to doctors |
| Appointment Types | Pre-defined appointment types with default duration and billing product |
| Lab Test Types | Individual tests and panels with normal ranges and units |
| Wards | Hospital wards with floor, gender restriction, and bed list |
| Beds | Individual beds with type, state, and room charge product |
| Medicines | Products flagged as medicines for the pharmacy module |