Branches

Branches are first-class in CareHubOS.

Branches aren't a deployment concept — they're a product entity you configure. Every record in the system knows which branch it belongs to, and the platform enforces the boundary automatically.

Configure once. Operate at every site.

Administrators set up branches and assign users. The product takes it from there.

Create and manage branches

Each branch carries name, address, contact, status (ACTIVE, PENDING, CLOSED, SUSPENDED), and a headquarters flag. Activate new sites as you open them; suspend underperformers without losing history.

Per-branch module licensing

Run EHR at every site, but Radiology only at the flagship and Pharmacy only at the three branches with in-house dispensing. Pay for what each site uses.

User → branch assignments

Assign each staff member to one primary branch and any number of secondary branches. A roving doctor covering two clinics, a pharmacy supervisor across the whole group, a receptionist locked to one site.

Live branch switcher

Staff authorised against multiple sites switch with one click from the header. The server re-issues a JWT scoped to the new branch — all data, every list, the entire sidebar refresh automatically.

Per-branch role overrides

Dr. Adjei is a Nurse Manager at Accra, a regular Nurse at Sunyani — one user, two role contexts. The system applies whichever role matches the branch they're currently working at.

Branch-aware uniqueness

Two branches can each have a “Maternity Ward”, a “Room 101”, an “OPD” department. Identifiers are scoped to the site; no awkward prefixing required.

What you don't have to remember

Branch context is enforced framework-wide. Clinicians never set a branch filter — the system already did.

Audit logged with branch context

Every PHI access, dispense override, stock movement records the actor and the branch they were operating from. Search audits by site without joining tables.

Branch claim enforced at the database layer

Branch context lives in the JWT and is enforced by Entity Framework query filters on every IBranchScoped table. Engineers can't accidentally leak cross-branch data — the framework refuses.

Branch context middleware translates errors

If a user's token has no active branch (rare — usually system tools), the API returns a 400 the frontend interceptor handles by re-prompting for a branch. No silent cross-branch fallbacks.

Stock Lookup

One query, every branch — find a medication across the whole group.

Amoxicillin 500 mgMED-0142
Korle-Bu MainAccra · HQ412units on handIn stock
Achimota BranchAccra38units on handLow stock
Tema Community ClinicTema0units on handOut of stock
Request a transfer
Cross-branch stock lookup — one search shows the same medication's on-hand count at every site, ready to transfer.

One install. Two sites. Twenty sites. Same software.

See branch switching, per-branch licensing, and cross-branch stock movement in a 30-minute walkthrough.

Book a demo