Skip to content

Document content package configuration in the README - #191

Open
NethmiRodrigo wants to merge 1 commit into
mainfrom
docs/billing-content-package-setup
Open

Document content package configuration in the README#191
NethmiRodrigo wants to merge 1 commit into
mainfrom
docs/billing-content-package-setup

Conversation

@NethmiRodrigo

Copy link
Copy Markdown
Contributor

Replaces the Installation and Configuration sections with content package setup, covering the globalproperties, billableservices, paymentmodes, cashpoints and cashieritemprices Initializer domains with example files for each. Also corrects the requirements list — fhir2 and event are required modules rather than optional — adds the undocumented billing.currencySymbol property, and fixes the declared default for billing.patientDashboard2BillCount.

@NethmiRodrigo
NethmiRodrigo force-pushed the docs/billing-content-package-setup branch from ad728f0 to 05fa43e Compare August 3, 2026 14:43
@NethmiRodrigo
NethmiRodrigo requested review from denniskigen and wikumChamith and removed request for wikumChamith August 3, 2026 14:44
Replace the Installation and Configuration sections with content package
setup covering the globalproperties, billableservices, paymentmodes,
cashpoints and cashieritemprices Initializer domains.

Correct the requirements list: fhir2 and event are required modules, not
optional. Add the undocumented billing.currencySymbol property and fix the
declared default for billing.patientDashboard2BillCount.
@NethmiRodrigo
NethmiRodrigo force-pushed the docs/billing-content-package-setup branch from 05fa43e to c655f17 Compare August 3, 2026 14:47
@sonarqubecloud

sonarqubecloud Bot commented Aug 3, 2026

Copy link
Copy Markdown

Comment thread README.md
Comment on lines 107 to 111
- `billing.defaultReceiptReportId`: Jasper report ID for receipt generation
- `billing.defaultShiftReportId`: Jasper report ID for shift reports
- `billing.receipt.logoPath`: Path to receipt logo image
- `billing.systemReceiptNumberGenerator`: Class name for receipt number generator (default: `org.openmrs.module.billing.api.SequentialReceiptNumberGenerator`)
- `billing.sequenceBlockSize`: Number of receipt sequence values reserved per database round-trip (default: 100). Larger blocks reduce database contention; smaller blocks reduce the sequence values skipped on restart (up to blockSize - 1 per group). Receipt numbers are always unique but may skip values.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this, since we're repeating it later on line 200+?

@wikumChamith wikumChamith left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just noticed some minor nits :)

Comment thread README.md
Comment on lines +245 to +260
### Receipt numbering

The default generator hands out sequential receipt numbers. To avoid a database round-trip per bill it reserves a block
of `billing.sequenceBlockSize` values at a time and serves them from memory. Receipt numbers are always unique, but
values can be skipped: restarting the server discards whatever is left of the current block, losing up to
`blockSize - 1` values per sequence group. Larger blocks reduce contention under load; smaller blocks reduce the gaps.

To use your own numbering scheme, implement `org.openmrs.module.billing.api.IReceiptNumberGenerator` in another module
and set `billing.systemReceiptNumberGenerator` to its fully-qualified class name.

### Patient payment status

`billing.patientPaymentStatusResolver` selects how a patient's overall payment status is derived. Leave it blank to use
the built-in resolver, which reads existing bill records. To override it, implement
`org.openmrs.module.billing.api.PatientPaymentStatusResolver`, register your implementation as a Spring component in
your own module so it is discoverable, and set the property to its fully-qualified class name.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't these be outside the "Global properties reference" topic?

@denniskigen denniskigen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work, @NethmiRodrigo. I checked the defaults and the four CSV contracts against config.xml and the Initializer line processors and they all hold up. A few nits below.

Outside the diff, but now that fhir2 and event are required modules, step 2 of Installation still only lists webservices.rest and stockmanagement. We should add them there since the module won't start without them.

Comment thread README.md
## Configuration

### Global Properties
The billing module can be configured through a **content package** that the [Initializer module](https://github.com/mekomsolutions/openmrs-module-initializer) applies when the server starts.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we name the minimum Initializer version here? These four domains only landed in 2.12.0, and on anything older Initializer skips the folders silently.

Suggested change
The billing module can be configured through a **content package** that the [Initializer module](https://github.com/mekomsolutions/openmrs-module-initializer) applies when the server starts.
The billing module can be configured through a **content package** that the [Initializer module](https://github.com/mekomsolutions/openmrs-module-initializer) 2.12.0 or later applies when the server starts.

Comment thread README.md
└── cashieritemprices/cashierItemPrices.csv
```

**Please make sure that the folder names are named correctly.**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: "folder names are named" reads a bit oddly, and the tree above already shows them.

Suggested change
**Please make sure that the folder names are named correctly.**
**The folder names must match exactly.**

Comment thread README.md

**Please make sure that the folder names are named correctly.**

#### Global properties

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#### Global properties
### Global properties

These are #### but ### Assign privileges below is ###. Ditto for the four sections after this one.

Comment thread README.md
Comment on lines 111 to +112
- `billing.sequenceBlockSize`: Number of receipt sequence values reserved per database round-trip (default: 100). Larger blocks reduce database contention; smaller blocks reduce the sequence values skipped on restart (up to blockSize - 1 per group). Receipt numbers are always unique but may skip values.
Every `billing.*` property which you can find defined in the `config.xml` file in this repository inside a `<globalProperty>` tag, goes in `globalproperties/billing.xml`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- `billing.sequenceBlockSize`: Number of receipt sequence values reserved per database round-trip (default: 100). Larger blocks reduce database contention; smaller blocks reduce the sequence values skipped on restart (up to blockSize - 1 per group). Receipt numbers are always unique but may skip values.
Every `billing.*` property which you can find defined in the `config.xml` file in this repository inside a `<globalProperty>` tag, goes in `globalproperties/billing.xml`
- `billing.sequenceBlockSize`: Number of receipt sequence values reserved per database round-trip (default: 100). Larger blocks reduce database contention; smaller blocks reduce the sequence values skipped on restart (up to blockSize - 1 per group). Receipt numbers are always unique but may skip values.
Every `billing.*` property defined inside a `<globalProperty>` tag in this repository's `config.xml` goes in `globalproperties/billing.xml`.

The indent makes this render inside the sequenceBlockSize bullet. If the list goes per @wikumChamith's comment, this sentence should stay.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants