Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
179cd8e
Done the GRN PDF and Excel
denuwanhendalage Feb 27, 2026
f58c12c
Do minor changes on PDF and excel generation.
denuwanhendalage Mar 9, 2026
611c01b
closes #18690
denuwanhendalage Mar 14, 2026
16b1ebf
done minor changes on grn report suggest by coderabbit
denuwanhendalage Mar 24, 2026
908e8bf
Merge branch 'development' into 18690-need-to-improve-grn-report-prin…
denuwanhendalage Mar 27, 2026
c5392a5
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Mar 29, 2026
8992962
Merge branch 'development' of https://github.com/hmislk/hmis.git into…
buddhika75 Mar 29, 2026
55606c6
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Mar 30, 2026
bc753d4
Merge branch 'development' of https://github.com/hmislk/hmis.git into…
buddhika75 Mar 30, 2026
5ea78b1
Merge branch 'development' into 19568-fix-to-handover-value-incorrect…
buddhika75 Mar 30, 2026
e9e0e24
Fix float transfer payments persisting in shift end page after handover
buddhika75 Mar 30, 2026
6c23c19
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Mar 30, 2026
ac0bb9c
Fix applied in two methods:
buddhika75 Mar 31, 2026
c6c281a
fix total calculation when item removing
ChinthakaPrasad Mar 31, 2026
6287fa9
Signed-off-by: ChinthakaPrasad <chinthakaprasad30@gmail.com>
ChinthakaPrasad Mar 31, 2026
37c4a2f
Signed-off-by: ChinthakaPrasad <chinthakaprasad30@gmail.com>
ChinthakaPrasad Mar 31, 2026
a98efb4
Signed-off-by: ChinthakaPrasad <chinthakaprasad30@gmail.com>
ChinthakaPrasad Mar 31, 2026
2382466
Merge pull request #19597 from hmislk/19548-the-total-is-not-updating…
ChinthakaPrasad Mar 31, 2026
f9af0cd
Merge pull request #19601 from hmislk/19547-hospital-fee-in-the-repor…
ChinthakaPrasad Mar 31, 2026
df6b619
Add institution and department columns to user list page
buddhika75 Mar 31, 2026
29d529b
Fix request-originated float transfers not appearing in receive list
buddhika75 Mar 31, 2026
229a5b8
Fix fund_transfer_bill.xhtml to use selectedFundTransferRequest for r…
buddhika75 Mar 31, 2026
2b55ca4
Remove f:viewAction misuse from cashier pages; add navigation-pattern…
buddhika75 Mar 31, 2026
a62fc80
Link fix to correct issue
buddhika75 Mar 31, 2026
3a4bfff
Merge pull request #19592 from hmislk/19591-float-transfers-still-app…
buddhika75 Mar 31, 2026
ac3c78d
Address CodeRabbit review comments on PR #19604
buddhika75 Mar 31, 2026
1f3e9be
Merge pull request #19604 from hmislk/19603-float-transfer-request-no…
buddhika75 Mar 31, 2026
6040434
Restructure cashier index UI: tabs, colour semantics, pending indicators
buddhika75 Mar 31, 2026
c891e33
Address CodeRabbit review comments on PR #19618
buddhika75 Mar 31, 2026
78a2035
Merge pull request #19618 from hmislk/19617-cashier-index-ui-restructure
buddhika75 Mar 31, 2026
f565413
Add new Entity Variable
damithdeshan98 Mar 31, 2026
8a59d1c
Create Navigation Method
damithdeshan98 Mar 31, 2026
7b14dff
Create Methods
damithdeshan98 Mar 31, 2026
8559d9c
Create UI
damithdeshan98 Mar 31, 2026
e4d6631
Fixed - Add New Administration Section "Discount for Credit Company" …
damithdeshan98 Mar 31, 2026
d7c9d18
Fixed codeRabbit Suggetion
damithdeshan98 Mar 31, 2026
46f9bdc
Merge pull request #19622 from hmislk/19621-add-new-administration-se…
damithdeshan98 Mar 31, 2026
1e05f47
Fix SEQUENCE table lock contention causing retail sale slowness
buddhika75 Mar 31, 2026
553ce0e
Add configurable custom display names for InwardChargeType enum values
buddhika75 Mar 31, 2026
bde8743
Add Inpatient Invoice Journal report
buddhika75 Mar 31, 2026
370e66c
Add Inward Charge Type Detail report
buddhika75 Mar 31, 2026
2c3bfd3
Fix CodeRabbit issues in GRN report improvements (PR #19200)
claude Mar 31, 2026
587c6be
Signed-off-by: PasinduW99 <pwathsara@gmail.com>
PasinduW99 Mar 31, 2026
6f3aa97
Merge pull request #19632 from hmislk/#19598-po-finalize-date-not-dis…
PasinduW99 Mar 31, 2026
d53b341
Address CodeRabbit review comments on PR #19627
buddhika75 Mar 31, 2026
e0b2c5f
Document persistence.xml Do-NOT-Remove properties and pre-push rule
buddhika75 Mar 31, 2026
5833267
Fix hardcoded audit datasource JNDI name in persistence.xml
buddhika75 Mar 31, 2026
84c0a3b
Merge pull request #19627 from hmislk/19626-jpa-sequence-allocation-fix
buddhika75 Mar 31, 2026
1051382
Merge development, fix merge conflict, and address CodeRabbit issues
buddhika75 Mar 31, 2026
3f0ee28
Fix Invoice Journal showing zero charges — join via bill.patientEncou…
buddhika75 Mar 31, 2026
af518c3
Fix missing DISCHARGED_BUT_FINAL_BILL_NOT_COMPLETED filter and deposi…
buddhika75 Mar 31, 2026
9affff3
Merge pull request #19629 from hmislk/19628-custom-display-names-for-…
buddhika75 Mar 31, 2026
22a8760
Merge branch 'development' of https://github.com/hmislk/hmis.git into…
buddhika75 Mar 31, 2026
e23b16b
Merge branch 'development' of https://github.com/hmislk/hmis.git into…
buddhika75 Mar 31, 2026
9837db5
Merge branch '19628-custom-display-names-for-inward-charge-types' int…
buddhika75 Mar 31, 2026
9473c13
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Mar 31, 2026
b8ea350
Fix CodeRabbit issues in GRN report (PR #19631)
buddhika75 Mar 31, 2026
0cdcbe8
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Mar 31, 2026
57ec815
Fix LazyInitializationException for billItems in GRN detail report
buddhika75 Apr 1, 2026
30bbb0e
Merge pull request #19631 from hmislk/claude/review-corabbitai-issue-…
buddhika75 Apr 1, 2026
538c12f
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Apr 1, 2026
70b3e6c
Merge branch 'development' of https://github.com/hmislk/hmis.git into…
buddhika75 Apr 1, 2026
b542185
Fix inward charge type detail report returning no data
buddhika75 Apr 1, 2026
23bff11
Add configurable bill number serial digit count
buddhika75 Apr 1, 2026
cde6e70
Address CodeRabbit review: validation and query optimisation
buddhika75 Apr 1, 2026
4dbcfff
Merge pull request #19630 from hmislk/19320-inward-charge-type-detail…
buddhika75 Apr 1, 2026
5baef46
Clamp serial digit count to safe maximum and document branch naming c…
buddhika75 Apr 1, 2026
9b2d5a1
Enhance Admission Report with filters, DTO conversion, export and pro…
buddhika75 Apr 1, 2026
ac3fa4f
Address CodeRabbit review on admission report (PR #19641)
buddhika75 Apr 1, 2026
e09d496
Merge pull request #19636 from hmislk/19635-configurable-bill-number-…
buddhika75 Apr 1, 2026
50c5fb3
Merge pull request #19641 from hmislk/19640-enhance-admission-report
buddhika75 Apr 1, 2026
7fdef3b
Enhance Admission by Consultant Report with filters and DTO approach …
buddhika75 Apr 1, 2026
7c5cf0e
Merge pull request #19643 from hmislk/19642-enhance-admission-by-cons…
buddhika75 Apr 1, 2026
95d0420
Fix JPQL error: replace transient nameWithTitle with persisted name f…
buddhika75 Apr 1, 2026
c091f89
Add config to auto-mark credit admissions as claimable
buddhika75 Apr 1, 2026
34c4b46
Merge pull request #19647 from hmislk/19646-auto-mark-claimable-credi…
buddhika75 Apr 1, 2026
d9deb01
Signed-off-by: Dr M H B Ariyaratne <buddhika.ari@gmail.com>
buddhika75 Apr 1, 2026
01a9057
Merge pull request #19645 from hmislk/19642-enhance-admission-by-cons…
buddhika75 Apr 1, 2026
afecf26
Fix admin inward functions failing on uppercase table name databases
buddhika75 Apr 1, 2026
a0a92d9
Warn when admitting a patient who already has an active admission
buddhika75 Apr 1, 2026
ea62a22
Merge pull request #19649 from hmislk/19648-fix-admin-inward-table-na…
buddhika75 Apr 1, 2026
abd5405
Remove unused activeAdmissionConfirmationPending field
buddhika75 Apr 1, 2026
03a4fb1
Add gitleaks secret scanning pre-commit hook for developers
buddhika75 Apr 1, 2026
900cc0c
Merge pull request #19651 from hmislk/19650-warn-active-admission-on-…
buddhika75 Apr 1, 2026
41777e0
Merge pull request #19653 from hmislk/19652-add-gitleaks-precommit-hook
buddhika75 Apr 1, 2026
070cba9
Show NIC on inward final bill when already recorded for patient
buddhika75 Apr 1, 2026
a7a55b0
Extend NIC display to all inward bill print variants
buddhika75 Apr 1, 2026
6ce1cd4
Merge pull request #19654 from hmislk/19357-show-nic-on-inward-final-…
buddhika75 Apr 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion .claude/skills/database-guide/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,25 @@ String jpql = "SELECT SUM(b.netTotal) FROM Bill b WHERE ...";
- Use DTOs instead of full entities for display
- Limit result sets with pagination

## Local Development Databases

Each developer machine may have different Payara JDBC pool names and JNDI names. Common local databases:

- **`rh`** — primary dev database (JNDI typically `jdbc/rhDS`)
- **`ruhunu`** — useful as a testing environment with richer data coverage

When a restored database has **lowercase table names**, it must be converted to uppercase before the app can use it. Generate and run the rename script:
```sql
SELECT CONCAT('RENAME TABLE `', table_name, '` TO `temp_', table_name, '`; ',
'RENAME TABLE `temp_', table_name, '` TO `', UPPER(table_name), '`;')
FROM information_schema.tables
WHERE table_schema = '<db_name>' AND table_name != UPPER(table_name);
```
Then pipe the output into mysql for that database. See `src/main/webapp/resources/sql/UpperCase.sql` for reference (note: that file targets a specific schema — always generate fresh from the actual database).

## Persistence Configuration

- **Development**: Use hardcoded JNDI (`jdbc/rhDS`)
- **Development**: Use hardcoded JNDI (machine-specific — check your local Payara setup)
- **Before push**: Must use environment variables (`${JDBC_DATASOURCE}`)

For complete reference, read [developer_docs/database/mysql-developer-guide.md](../../developer_docs/database/mysql-developer-guide.md).
42 changes: 41 additions & 1 deletion .claude/skills/jsf-ajax/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ name: jsf-ajax
description: >
JSF AJAX update rules for the HMIS project. Use when working on AJAX updates,
p:commandButton update attributes, PrimeFaces AJAX callbacks, partial page rendering,
or debugging AJAX update failures. Critical rules to prevent silent AJAX failures.
or debugging AJAX update failures. Also covers JSF navigation patterns: why
f:viewAction must not be used on @SessionScoped beans, and how initialization
belongs in navigation methods. Critical rules to prevent silent AJAX failures
and refresh/back-button state corruption.
user-invocable: true
---

Expand Down Expand Up @@ -61,3 +64,40 @@ The growl component is in `template.xhtml` outside forms. Use absolute ID with c
5. Check component hierarchy - nested components affect id resolution

For complete reference, read [developer_docs/jsf/ajax-update-guidelines.md](../../developer_docs/jsf/ajax-update-guidelines.md).

---

## Navigation Pattern: Never Use f:viewAction on @SessionScoped Beans

**🚨 Most controllers in this project are `@SessionScoped`. Never use `f:viewAction` or `f:event type="preRenderView"` to initialize state on `@SessionScoped` beans.**

`f:viewAction` fires on every GET — including browser refresh and back-button — silently resetting in-progress state. All initialization belongs in the navigation method that redirects to the page.

### Correct pattern

```java
// Navigation method — initialize here
public String navigateToFundTransferBill() {
resetClassVariables();
prepareToAddNewFundTransferBill();
currentBillPayments = new ArrayList<>();
return "/cashier/fund_transfer_bill?faces-redirect=true";
}
```

```xhtml
<!-- XHTML — no f:metadata needed -->
<ui:define name="subcontent">
<h:form>...</h:form>
</ui:define>
```

### The two legitimate uses of f:viewAction

1. **URL parameter ingestion** — page is reached via external URL with `f:viewParam` query params (lab result links, mobile API, patient portal). No navigation method exists; the URL is the entry point. **Signal: `f:metadata` contains `f:viewParam` elements.**

2. **`@ViewScoped` beans** — bean is created fresh on each page load, so there is no prior navigation method. (Rare in this project — most controllers are `@SessionScoped`.)

If you see `f:viewAction` without any `f:viewParam`, it is almost certainly wrong.

For complete reference, read [developer_docs/jsf/navigation-patterns.md](../../developer_docs/jsf/navigation-patterns.md).
11 changes: 11 additions & 0 deletions .claude/skills/pharmacy-dev/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,17 @@ Pharmacy uses `configOptionApplicationController.getBooleanValueByKey()` for fea
- Cache autocomplete results for converter
- Defer expensive discount calculations

## GRN Report Testing

When testing GRN / Direct Purchase report changes:
- The `ruhunu` local database typically has richer GRN data than `rh` and is better for testing
- Test URL: `http://localhost:8080/rh/faces/reports/inventoryReports/grn.xhtml`
- Print view (navigated from grn.xhtml): `grn_detailed_view.xhtml`, `grn_summary_view.xhtml`
- Key bill types: `PHARMACY_GRN`, `PHARMACY_GRN_RETURN`, `PHARMACY_GRN_CANCELLED`, `PHARMACY_DIRECT_PURCHASE`, `PHARMACY_DIRECT_PURCHASE_REFUND`, `PHARMACY_DIRECT_PURCHASE_CANCELLED`
- `PHARMACY_DIRECT_PURCHASE` bills have **null** `referenceBill` — always null-guard before accessing `bill.getReferenceBill()`
- Date/time formats in exports must use `sessionController.getApplicationPreference().getLongDateTimeFormat()` — never hardcode
- Excel/PDF filenames must not contain colons — use `getLongDateFormat()` (not datetime) and sanitize with `.replaceAll("[: /]", "_")`

## Backward Compatibility

- Never "fix" `purcahseRate` spelling - it's a database column name
Expand Down
82 changes: 82 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Gitleaks configuration for HMIS project
# Docs: https://github.com/gitleaks/gitleaks#configuration
title = "HMIS Gitleaks Configuration"

[extend]
# Extend the default gitleaks ruleset
useDefault = true

# ----------------------------------------------------------------
# Project-specific rules
# ----------------------------------------------------------------
[[rules]]
id = "hmis-db-password-in-xml"
description = "Hardcoded database password in XML config"
regex = '''<property[^>]+name=["']javax\.persistence\.jdbc\.password["'][^>]*value=["']([^"']{4,})["']'''
tags = ["database", "password", "xml"]

[[rules]]
id = "hmis-glassfish-password"
description = "GlassFish/Payara admin or datasource password"
regex = '''<password-alias[^>]+value=["']([^"']{4,})["']'''
tags = ["appserver", "password"]

[[rules]]
id = "hmis-jdbc-url-with-host"
description = "Hardcoded JDBC URL with hostname or IP (may expose server location)"
regex = '''jdbc:mysql://([a-zA-Z0-9][-a-zA-Z0-9.]{3,})/'''
tags = ["network", "database"]

# ----------------------------------------------------------------
# Allowlist: known-safe patterns that would otherwise trigger
# ----------------------------------------------------------------
[allowlist]
description = "Global allowlist for HMIS project"

# Placeholder text in documentation
regexes = [
'''\[password\]''',
'''\[your.password\]''',
'''\[admin_password\]''',
'''\$\{.*password.*\}''',
'''password_placeholder''',
# JNDI datasource name — not a credential
'''jdbc/\w+''',
# Test/example IP addresses used in docs
'''192\.0\.2\.\d+''', # TEST-NET-1 (RFC 5737)
'''198\.51\.100\.\d+''', # TEST-NET-2
'''203\.0\.113\.\d+''', # TEST-NET-3
]

paths = [
# Migration docs use placeholder [password] — already checked
"src/main/resources/db/migrations",
# Test fixtures
"src/test",
# SE training presentation — uses localhost JDBC example for teaching
"SE-Principles-Presentation.md",
# Developer docs — uses YOUR_GITHUB_TOKEN placeholder
"developer_docs/",
]

# Historical commits: old JPA direct-connect config used password="admin"
# before the project migrated to JNDI datasources (~2023).
# "admin" was the local dev default — no production credential.
# Current persistence.xml uses JNDI only.
commits = [
# Old local-dev persistence.xml with password=admin (pre-JNDI era)
"d9fc300aa4c1c93846bcfd49371bfd300a119c56",
"07dc0a6ee6618d804e6dc94bd6705fe17b1500a4",
"b8c8ffe7153e64879bd93400e0692fa7ec1231f2",
"298e386d9a55e1bcaa9cb33072f1131cf9cbd012",
"a7e545b47dfcd83833728eb202d89110487c044f",
"3b01d6ef577a40af53ad7978c459b3e41188ab5a",
# stock_reset_script.py — UUID used as API key variable name (script context unknown)
"dfa8ef6563e2c07fde89b8ce8727838c31c8b542",
# EncryptionUtils.java placeholder key "MySecretKey12345" — file deleted, example placeholder
"97683edf3ca12fa3b1875e7f989c1e15936b188b",
# PaymentGatewayController.java — hardcoded test gateway credentials (fixed in current HEAD)
"e733b5bbecf9aa61a4b1270fe190c670512f91bd",
"278b904e65cc960fa3b76d004d97f2045b878d01",
"e16ccefb7c609a5ed45f5aa1482e5e2896170dad",
]
12 changes: 12 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Pre-commit hooks for HMIS project
# Setup: pip install pre-commit && pre-commit install
# Run manually: pre-commit run --all-files
# Docs: https://pre-commit.com

repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.21.2
hooks:
- id: gitleaks
name: Detect secrets with gitleaks
description: Blocks commits that contain credentials, API keys, or passwords
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@

### When Working on JSF/AJAX
- [JSF AJAX Update Guidelines](developer_docs/jsf/ajax-update-guidelines.md) - Critical AJAX rules
- [Navigation Patterns](developer_docs/jsf/navigation-patterns.md) - viewAction anti-pattern, initialization in navigation methods
- [DataTable Selection Guide](developer_docs/jsf/primefaces-datatable-selection.md) - Selection patterns

### When Working with DTOs
Expand Down
41 changes: 41 additions & 0 deletions developer_docs/database/mysql-developer-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,47 @@ This guide covers MySQL database development, debugging, and maintenance practic
chmod 600 ~/.config/hmis/credentials.txt
```

## Local Development Databases

Each developer machine configures its own Payara JDBC pools and JNDI names. Common databases used in this project:

- **`rh`** — primary development database
- **`ruhunu`** — useful secondary database with broader data coverage for testing pharmacy reports

### Setting Up a Payara JDBC Pool (per machine)

```bash
# Create connection pool
asadmin create-jdbc-connection-pool \
--datasourceclassname com.mysql.cj.jdbc.MysqlDataSource \
--restype javax.sql.DataSource \
--property "serverName=localhost:portNumber=3306:databaseName=<db>:user=<user>:password=<pass>:useSSL=false:allowPublicKeyRetrieval=true" \
<poolName>

# Create JNDI resource
asadmin create-jdbc-resource --connectionpoolid <poolName> jdbc/<jndiName>

# Test
asadmin ping-connection-pool <poolName>
```

### Uppercase Table Names

The application requires **UPPERCASE table names**. If a restored database has lowercase tables, convert them:

```bash
mysql -u<user> -p<pass> <db_name> -e "
SELECT CONCAT('RENAME TABLE \`', table_name, '\` TO \`temp_', table_name, '\`; ',
'RENAME TABLE \`temp_', table_name, '\` TO \`', UPPER(table_name), '\`;')
FROM information_schema.tables
WHERE table_schema = '<db_name>' AND table_name != UPPER(table_name);
" --skip-column-names | mysql -u<user> -p<pass> <db_name>
```

Verify afterwards: the query `SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='<db>' AND table_name != UPPER(table_name)` should return 0.

See also: `src/main/webapp/resources/sql/UpperCase.sql` (reference only — always generate fresh from the actual database).

## MySQL Command Line Operations

### Basic Connection
Expand Down
18 changes: 18 additions & 0 deletions developer_docs/deployment/persistence-verification.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,24 @@ If you found hardcoded values in Steps 3 or 4:
6. Verify again with Step 2 and Step 4
7. Now you can safely commit and push

### Step 6: Preserve "Do NOT Remove" Properties

When reverting or editing `persistence.xml`, ensure the following properties marked `Do NOT Remove` are **always present**:

```xml
<!-- EclipseLink concurrency manager tuning (issue #19397) - Do NOT Remove -->
<property name="eclipselink.concurrency.manager.waittime" value="10000"/>
<property name="eclipselink.concurrency.manager.allow.concurrencyexception" value="true"/>
<property name="eclipselink.concurrency.manager.maxfrequencytodumptinymessage" value="5000"/>

<!-- Sequence pre-allocation fix for SEQUENCE table lock contention (issue #19626) - Do NOT Remove -->
<property name="eclipselink.sequence.default-sequence-preallocation-size" value="50"/>
```

These are production-critical tuning properties. Removing them causes:
- **Concurrency manager properties**: cache lock waits of up to 900 seconds, silent hangs instead of fast-fail errors
- **Sequence preallocation**: each ID allocation acquires a table-level lock on the SEQUENCE table, causing severe slowness under load (retail sales affected)

## Why This Matters

### Local Development vs. QA Deployment
Expand Down
20 changes: 20 additions & 0 deletions developer_docs/git/commit-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,23 @@ Co-Authored-By: Claude <noreply@anthropic.com>

## Auto-Close Behavior
When Claude pushes commits that complete an issue, automatically include the appropriate closing keyword in the commit message.

## Branch Naming Conventions

### Hotfix Branches
When creating hotfix branches targeting production branches (e.g., `ruhunu-prod`), the branch name **must** end with `-hotfix`. This is required for the PR to be mergeable.

**Format:** `<issue-number>-<description>-hotfix`

**Examples:**
- `19635-configurable-bill-serial-digits-hotfix`
- `19500-fix-grn-return-hotfix`

### Feature Branches
Feature branches should be based on `origin/development` (never `master`) and follow the pattern:

**Format:** `<issue-number>-<description>`

**Examples:**
- `19635-configurable-bill-number-serial-digits`
- `19500-fix-grn-return-approval`
Loading