Admin Inpatient Packages - hmislk/hmis GitHub Wiki
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).

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

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)
InpatientPackageholdsadmissionType,roomCategory,totalPrice, and achargeTypeAmountselement collection (InwardChargeTypename โ amount).includedRoomDurationHoursandfixedRoomChargeare still present on the entity (and in the REST API / AI-chat tool schema) for backward compatibility, but neither is read by any billing code, andincludedRoomDurationHourswas removed from this page's form (issue #24193) since it had no field left to edit here.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(...)andcalculatePackageExcess(...)(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 computedPackageExcessChargescharge 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
- Admin โ Inpatient Automatic Admission Charges โ the additive-charge alternative to a package
- Admin โ Inpatient Admission Types
- Admin โ Inward Add Services / Fee Configuration
- Inpatient โ Change Package โ changing the package on an already-admitted encounter
- Inpatient โ Package Admission โ starting a new admission with a package pre-attached
- Inpatient โ Final Bill Generation ยง Package Admissions โ how a package prices the final bill