HealthcareDoctors Express Pharmacy, Cayman Islands

Pharmacy Platform Rebuilt Around Dispensing Safety

A live dispensing platform where label printing failed silently, page names decided who could open patient records, and migrated stock and refill data could not be trusted

of legacy stock rows matched automatically
0%of legacy stock rows matched automatically
duplicated print code paths reduced to 1
0duplicated print code paths reduced to 1
screens brought under explicit permission checks
0screens brought under explicit permission checks

01 — The brief

What was wrong

A live dispensing platform where label printing failed silently, page names decided who could open patient records, and migrated stock and refill data could not be trusted

What we did about it

Rebuilt authorisation around explicit per-action permissions, consolidated label printing behind one shared path, and gave staff on-screen tools to correct every imported drug and refill match

Pharmacy Platform Rebuilt Around Dispensing Safety — the delivered interface
Sector
Healthcare
Client
Doctors Express Pharmacy, Cayman Islands
Phases
4
Duration
8 months

02 — The build

How We Built It

STEP 01 / 04

Authorisation Rebuilt on Explicit Permissions

Access had been inferred from the name of the page being opened, so any screen called Create, Edit or List went through unchecked — patient screens included. Every action now declares the permission it requires, shared create/edit screens decide from the request rather than the route name, and permission caching was switched off so withdrawing access takes effect immediately.

Built with

  • ASP.NET Core Authorization
  • PHPolicy Handlers
  • ALAudit Logging

03 — The sequence

Implementation Timeline

17 months, in 4 phases

  1. 01

    M1-2

    Access Control Rebuild

    Closed the patient-record access gap, labelled 77 files, and migrated the permission tables live across four environments

  2. 02

    M3-6

    Printing Reliability

    Consolidated six print paths into one, trialled and withdrew a certificate-based helper, and added printer discovery and true status reporting

  3. 03

    M5-8

    Inventory Matching

    Three-pass drug matching, reference-number resolution, and the Remap Workbench with bulk correction and audit logging

  4. 04

    M2-8

    Refill Data Migration

    Grouped spelling decisions, eCW patient and allergy import, and shared comparison logic to stop silent row loss

Platform

.NET 10, ASP.NET Core MVC, Entity Framework Core, Dapper

Data & Matching

SQL Server, FuzzySharp, ClosedXML, CsvHelper

  • .NET 10
  • ASP.NET Core MVC
  • EFEntity Framework Core
  • DADapper
  • SQL Server
  • FUFuzzySharp
  • CLClosedXML

Technology We Used

What this build actually ran on, grouped the way we scoped it.

  • CSCsvHelper
  • ECeClinicalWorks
  • JSJSPrintManager
  • SISignalR
  • Telerik UI for ASP.NET Core
  • Microsoft Azure
  • Amazon AWS

Integrations & Devices

eClinicalWorks, JSPrintManager, SignalR, Telerik UI for ASP.NET Core

In their words

Every one of these problems produced output that looked perfectly fine — a made-up date, a check that approved everything, a working printer reported as offline. Nothing crashed, so nothing got reported. The work was making the system say where its answers came from, and admit when it is guessing.
Engineering LeadCalypsoRx Platform

Let's Work on Your Next Project.

Salesforce Certified
Microsoft MVP
MuleSoft Certified
AWS Certified
Kubernetes Certified
Azure DevOps