Skip to content

Admin Inpatient Packages

Dr M H B Ariyaratne edited this page Sep 29, 2026 · 3 revisions

Admin — Inpatient Packages

Inpatient Packages are fixed-price bundles for an inpatient stay — a flat, all-inclusive price for a combination of admission type and room category (e.g. "Normal Ward Maternity Package"), instead of billing the stay item by item.

Page: Administration → Manage Inpatient Services → Packages → Manage Inpatient Packages XHTML: /inward/inward_inpatient_package.xhtml (and /inward/inward_inpatient_package_item.xhtml for package components) Controller: InpatientPackageController (and InpatientPackageItemController for components) Privilege: InwardPackageAdministration

This is different from Inpatient Automatic Admission Charges, which is a set of additive charges layered on top of normal itemised billing. A package instead sets the final bill's price for whatever categories it covers, once the stay is priced.

This page covers configuring a package. For how a package is attached to an admission, changed later, and how it actually prices the final bill, see Inpatient — Change Package and Inpatient — Final Bill Generation § Package Admissions.


Getting to the page

The page used to be its own top-level item under the Administration menu. It now lives as a tab — Packages — inside Administration → Manage Inpatient Services, alongside Admission Types, Rooms, Services, Price Matrix and the rest of the Inward admin screens (issue #24127).

The Packages tab, expanded, showing the Manage Inpatient Packages button inside Manage Inpatient Services

Manage Inpatient Services → Packages → Manage Inpatient Packages.


Configuring a package

Field Notes
Name Free text, e.g. "Normal Ward Maternity Package"
Admission Type Which admission type this package applies to
Room Category Which room category this package applies to
Included Room Duration (Hours) How many hours of room time the package price covers
Charge Type Amounts A price against any number of inward charge categories (Room Charges, Nursing Care, M.O. Charges, Administration Fee, Medicine, …) — see below
Total Package Price Read-only. Recalculated on Save as the sum of every amount entered under Charge Type Amounts, plus any priced rows added under Manage Components

Charge Type Amounts

Rather than a single fixed room-charge figure, the package price is built up from any of the hospital's inward charge categories — the same list used elsewhere in inward billing (Room Charges, Nursing Care, M.O. Charges, Administration Fee, Medicine, Laboratory Charges, and so on). Leave a category blank if the package doesn't cover it; enter an amount against as many categories as the package needs to price.

Package edit screen showing the Charge Type Amounts table with Room Charges, Nursing Care and MO Charges filled in, and Total Package Price showing the sum

Room Charges 30,000 + Nursing Care 15,000 + M.O. Charges 5,000 → Total Package Price 50,000.

Room Charges is just one row in this table like any other category — there is no longer a separate "Fixed Room Charge" field.

Manage Components

Once a package has been saved, a Manage Components button appears. That is a separate, catalog-item based mechanism — add specific Services, Time-based Items, Professional Fee roles, Outside Charges or Pharmacy Items (from the item catalog, not from the charge-category list above) with their own fixed prices. Total Package Price sums both: the Charge Type Amounts entered directly on this page, and every active component's fixed price.


Technical Notes (Admin/Developer)

  • InpatientPackage holds admissionType, roomCategory, includedRoomDurationHours (no longer consumed by billing since the locking redesign — kept for backward compatibility, currently a no-op), totalPrice, and a chargeTypeAmounts element collection (InwardChargeType name → amount). fixedRoomCharge is still present on the entity and mirrored from the RoomCharges entry in chargeTypeAmounts on save, but is no longer read by any billing code either.
  • InpatientPackagePricing.calculateTotalPrice(Map<String, Double>, List<InpatientPackageItem>) sums the charge-type amounts and the active components' fixed prices into the package's total price. InpatientPackagePricing.calculateChargeTypeAllocations(...) and calculatePackageExcess(...) (added when admission-by-package billing was implemented) derive the final bill's per-category package values and excess amount from that same data — see Inpatient — Final Bill Generation § Package Admissions.
  • The charge-category list on the page comes from enumController.getInwardChargeTypesForSetting() — the same filtered/hospital-configured list used by Charge Type Labels. The computed PackageExcessCharges charge type is deliberately excluded from this list (allowToSetItems=false) since it isn't something a package can be configured with — it only ever appears as a calculated line on the final bill.
  • InpatientPackageItem / InpatientPackageItemController (Manage Components) still auto-create a bill row per component at admission time, but as ordinary, fully editable/removable rows — nothing about a package admission is locked or restricted during the stay.

Related Articles

Clone this wiki locally